include: libsframe: rename SFrame V3 Flexible FDE macros to CTRLWORD

The existing SFrame V3 macros for Flexible FDEs used the term 'OFFSET'
to refer to the data word encoding control/register data word. This can
be confusing, as the control data word (register ID, dereference flags)
is distinct from a stack offset.

This patch renames these macros to use 'CTRLWORD' to better reflect
their purpose. It also updates the assembler and libsframe dumper to
use the new nomenclature.

No functional change.

Reviewed-by: Jens Remus <jremus@linux.ibm.com>

gas/
	* gen-sframe.c (sframe_get_fre_dataword_size): Use
	SFRAME_V3_FLEX_FDE_CTRLWORD_ENCODE.
	(output_sframe_row_entry_datawords): Likewise.
include/
	* sframe.h (SFRAME_V3_FLEX_FDE_REG_ENCODE): Rename from ..
	(SFRAME_V3_FLEX_FDE_CTRLWORD_ENCODE): .. to.
	(SFRAME_V3_FLEX_FDE_CTRLWORD_REGNUM): Rename from
	SFRAME_V3_FLEX_FDE_OFFSET_REG_NUM to this.
	(SFRAME_V3_FLEX_FDE_CTRLWORD_DEREF_P): Rename from
	SFRAME_V3_FLEX_FDE_OFFSET_REG_DEREF_P to this.
	(SFRAME_V3_FLEX_FDE_CTRLWORD_REG_P): Rename from
	SFRAME_V3_FLEX_FDE_OFFSET_REG_P to this.
	(SFRAME_V3_FRE_RA_UNDEFINED_P): Add new V3 macro.
libsframe/
	* sframe-dump.c (dump_sframe_func_fres_flex): Update all
	callers to use the new CTRLWORD macros.
libsframe/testsuite/
	* libsframe.decode/be-flipping-v3.c: Use renamed macros.
This commit is contained in:
Indu Bhagat 2026-01-29 20:02:57 -08:00
parent be3c73b461
commit 4edeb9be08
4 changed files with 37 additions and 34 deletions

View file

@ -461,17 +461,17 @@ sframe_get_fre_dataword_size (const struct sframe_row_entry *sframe_fre,
{
bool reg_p = (sframe_fre->cfa_base_reg != SFRAME_FRE_REG_INVALID);
unsigned int data
= SFRAME_V3_FLEX_FDE_REG_ENCODE (sframe_fre->cfa_base_reg,
sframe_fre->cfa_deref_p, reg_p);
= SFRAME_V3_FLEX_FDE_CTRLWORD_ENCODE (sframe_fre->cfa_base_reg,
sframe_fre->cfa_deref_p, reg_p);
unsigned int cfa_control_word_size = get_udata_size_in_bytes (data);
if (cfa_control_word_size > max_dataword_size)
max_dataword_size = cfa_control_word_size;
if (sframe_fre->ra_loc == SFRAME_FRE_ELEM_LOC_REG)
{
data = SFRAME_V3_FLEX_FDE_REG_ENCODE (sframe_fre->ra_reg,
sframe_fre->ra_deref_p,
1 /* reg_p. */);
data = SFRAME_V3_FLEX_FDE_CTRLWORD_ENCODE (sframe_fre->ra_reg,
sframe_fre->ra_deref_p,
1 /* reg_p. */);
unsigned ra_control_word_size = get_udata_size_in_bytes (data);
if (ra_control_word_size > max_dataword_size)
max_dataword_size = ra_control_word_size;
@ -479,9 +479,9 @@ sframe_get_fre_dataword_size (const struct sframe_row_entry *sframe_fre,
if (sframe_fre->fp_loc == SFRAME_FRE_ELEM_LOC_REG)
{
data = SFRAME_V3_FLEX_FDE_REG_ENCODE (sframe_fre->fp_reg,
sframe_fre->fp_deref_p,
1 /* reg_p. */);
data = SFRAME_V3_FLEX_FDE_CTRLWORD_ENCODE (sframe_fre->fp_reg,
sframe_fre->fp_deref_p,
1 /* reg_p. */);
unsigned fp_control_word_size = get_udata_size_in_bytes (data);
if (fp_control_word_size > max_dataword_size)
max_dataword_size = fp_control_word_size;
@ -660,9 +660,9 @@ output_sframe_row_entry_datawords (const struct sframe_func_entry *sframe_fde,
/* SFrame FDE of type SFRAME_FDE_TYPE_FLEX. */
/* Output CFA related FRE data words. */
uint32_t reg = sframe_fre->cfa_base_reg;
bool deref_p = sframe_fre->cfa_deref_p;
uint32_t reg_data
= SFRAME_V3_FLEX_FDE_REG_ENCODE (reg, sframe_fre->cfa_deref_p,
1 /* reg_p. */);
= SFRAME_V3_FLEX_FDE_CTRLWORD_ENCODE (reg, deref_p, 1 /* reg_p. */);
offsetT offset_data = sframe_fre->cfa_offset;
dataword_func_map[idx].out_func (reg_data);
dataword_func_map[idx].out_func (offset_data);
@ -674,9 +674,9 @@ output_sframe_row_entry_datawords (const struct sframe_func_entry *sframe_fde,
/* Output RA related FRE data words. */
reg_p = sframe_fre->ra_loc == SFRAME_FRE_ELEM_LOC_REG;
reg = reg_p ? sframe_fre->ra_reg : 0;
reg_data = SFRAME_V3_FLEX_FDE_REG_ENCODE (reg,
sframe_fre->ra_deref_p,
reg_p);
deref_p = sframe_fre->ra_deref_p;
reg_data = SFRAME_V3_FLEX_FDE_CTRLWORD_ENCODE (reg, deref_p, reg_p);
offset_data = sframe_fre->ra_offset;
dataword_func_map[idx].out_func (reg_data);
dataword_func_map[idx].out_func (offset_data);
@ -687,7 +687,7 @@ output_sframe_row_entry_datawords (const struct sframe_func_entry *sframe_fde,
/* If RA is not in REG/STACK, emit RA padding if there are more
data words to follow. Note that, emitting
SFRAME_FRE_RA_OFFSET_INVALID is equivalent to emitting
SFRAME_V3_FLEX_FDE_REG_ENCODE (0, 0, 0). */
SFRAME_V3_FLEX_FDE_CTRLWORD_ENCODE (0, 0, 0). */
dataword_func_map[idx].out_func (SFRAME_FRE_RA_OFFSET_INVALID);
fre_write_datawords += 1;
}
@ -697,9 +697,9 @@ output_sframe_row_entry_datawords (const struct sframe_func_entry *sframe_fde,
/* Output FP related FRE data words. */
reg_p = sframe_fre->fp_loc == SFRAME_FRE_ELEM_LOC_REG;
reg = reg_p ? sframe_fre->fp_reg : 0;
reg_data = SFRAME_V3_FLEX_FDE_REG_ENCODE (reg,
sframe_fre->fp_deref_p,
reg_p);
deref_p = sframe_fre->fp_deref_p;
reg_data = SFRAME_V3_FLEX_FDE_CTRLWORD_ENCODE (reg, deref_p, reg_p);
offset_data = sframe_fre->fp_offset;
dataword_func_map[idx].out_func (reg_data);
dataword_func_map[idx].out_func (offset_data);

View file

@ -342,12 +342,15 @@ typedef struct sframe_func_desc_attr_v3
#define SFRAME_V3_FDE_UPDATE_SIGNAL_P(signal_p, info) \
((((signal_p) & 0x1) << 7) | ((info) & 0x7f))
#define SFRAME_V3_FLEX_FDE_REG_ENCODE(reg, deref_p, reg_p) \
#define SFRAME_V3_FLEX_FDE_CTRLWORD_ENCODE(reg, deref_p, reg_p) \
((((reg) << 0x3) | (0 << 0x2) | (((deref_p) & 0x1) << 0x1) | ((reg_p) & 0x1)))
#define SFRAME_V3_FLEX_FDE_OFFSET_REG_NUM(data) ((data) >> 3)
#define SFRAME_V3_FLEX_FDE_OFFSET_REG_DEREF_P(data) (((data) >> 1) & 0x1)
#define SFRAME_V3_FLEX_FDE_OFFSET_REG_P(data) ((data) & 0x1)
#define SFRAME_V3_FLEX_FDE_CTRLWORD_REGNUM(data) ((data) >> 3)
#define SFRAME_V3_FLEX_FDE_CTRLWORD_DEREF_P(data) (((data) >> 1) & 0x1)
#define SFRAME_V3_FLEX_FDE_CTRLWORD_REG_P(data) ((data) & 0x1)
#define SFRAME_V3_FRE_RA_UNDEFINED_P(fre_info) \
(SFRAME_V2_FRE_RA_UNDEFINED_P (fre_info))
/* Size of stack frame offsets in an SFrame Frame Row Entry. A single
SFrame FRE has all offsets of the same size. Offset size may vary

View file

@ -385,11 +385,11 @@ dump_sframe_func_fres_flex (const sframe_decoder_ctx *sfd_ctx,
int32_t cfa_offset = sframe_fre_get_cfa_offset (sfd_ctx, &fre, fde_type,
&err_cfa_offset);
sframe_assert (!err_cfa_reg && !err_cfa_offset);
bool cfa_reg_p = SFRAME_V3_FLEX_FDE_OFFSET_REG_P (cfa_reg_data);
bool cfa_reg_p = SFRAME_V3_FLEX_FDE_CTRLWORD_REG_P (cfa_reg_data);
if (cfa_reg_p)
{
cfa_reg = SFRAME_V3_FLEX_FDE_OFFSET_REG_NUM (cfa_reg_data);
cfa_deref_p = SFRAME_V3_FLEX_FDE_OFFSET_REG_DEREF_P (cfa_reg_data);
cfa_reg = SFRAME_V3_FLEX_FDE_CTRLWORD_REGNUM (cfa_reg_data);
cfa_deref_p = SFRAME_V3_FLEX_FDE_CTRLWORD_DEREF_P (cfa_reg_data);
}
int err_ra_reg = 0;
@ -399,11 +399,11 @@ dump_sframe_func_fres_flex (const sframe_decoder_ctx *sfd_ctx,
&err_ra_reg);
int32_t ra_offset = sframe_fre_get_ra_offset (sfd_ctx, &fre, fde_type,
&err_ra_offset);
bool ra_reg_p = SFRAME_V3_FLEX_FDE_OFFSET_REG_P (ra_reg_data);
bool ra_reg_p = SFRAME_V3_FLEX_FDE_CTRLWORD_REG_P (ra_reg_data);
if (ra_reg_p)
{
ra_reg = SFRAME_V3_FLEX_FDE_OFFSET_REG_NUM (ra_reg_data);
ra_deref_p = SFRAME_V3_FLEX_FDE_OFFSET_REG_DEREF_P (ra_reg_data);
ra_reg = SFRAME_V3_FLEX_FDE_CTRLWORD_REGNUM (ra_reg_data);
ra_deref_p = SFRAME_V3_FLEX_FDE_CTRLWORD_DEREF_P (ra_reg_data);
}
int err_fp_reg = 0;
@ -416,11 +416,11 @@ dump_sframe_func_fres_flex (const sframe_decoder_ctx *sfd_ctx,
uint32_t fp_reg_data = sframe_get_fre_udata (&fre, fp_idx, &err_fp_reg);
int32_t fp_offset = sframe_fre_get_fp_offset (sfd_ctx, &fre, fde_type,
&err_fp_offset);
bool fp_reg_p = SFRAME_V3_FLEX_FDE_OFFSET_REG_P (fp_reg_data);
bool fp_reg_p = SFRAME_V3_FLEX_FDE_CTRLWORD_REG_P (fp_reg_data);
if (fp_reg_p)
{
fp_reg = SFRAME_V3_FLEX_FDE_OFFSET_REG_NUM (fp_reg_data);
fp_deref_p = SFRAME_V3_FLEX_FDE_OFFSET_REG_DEREF_P (fp_reg_data);
fp_reg = SFRAME_V3_FLEX_FDE_CTRLWORD_REGNUM (fp_reg_data);
fp_deref_p = SFRAME_V3_FLEX_FDE_CTRLWORD_DEREF_P (fp_reg_data);
}
/* Dump CFA info. */

View file

@ -91,18 +91,18 @@ main (void)
/* Expected RA reg r16. */
reg_data = sframe_get_fre_udata (&fre, SFRAME_FRE_RA_OFFSET_IDX * 2,
&err_reg_data);
TEST ((err_reg_data == 0 && SFRAME_V3_FLEX_FDE_OFFSET_REG_P (reg_data) == 0x1),
TEST ((err_reg_data == 0 && SFRAME_V3_FLEX_FDE_CTRLWORD_REG_P (reg_data) == 0x1),
"be-flipping-v3: Whether RA reg_p is true");
TEST ((err_reg_data == 0 && SFRAME_V3_FLEX_FDE_OFFSET_REG_NUM (reg_data) == 16),
TEST ((err_reg_data == 0 && SFRAME_V3_FLEX_FDE_CTRLWORD_REGNUM (reg_data) == 16),
"be-flipping-v3: Get RA reg of third FRE");
/* Expected FP reg r17. */
err_reg_data = 0;
reg_data = sframe_get_fre_udata (&fre, SFRAME_FRE_FP_OFFSET_IDX * 2,
&err_reg_data);
TEST ((err_reg_data == 0 && SFRAME_V3_FLEX_FDE_OFFSET_REG_P (reg_data) == 0x1),
TEST ((err_reg_data == 0 && SFRAME_V3_FLEX_FDE_CTRLWORD_REG_P (reg_data) == 0x1),
"be-flipping-v3: Whether FP reg_p is true");
TEST ((err_reg_data == 0 && SFRAME_V3_FLEX_FDE_OFFSET_REG_NUM (reg_data) == 17),
TEST ((err_reg_data == 0 && SFRAME_V3_FLEX_FDE_CTRLWORD_REGNUM (reg_data) == 17),
"be-flipping-v3: Get FP reg of third FRE");
free (sf_buf);