diff --git a/gas/gen-sframe.c b/gas/gen-sframe.c index d62bb3dc646..7c1b7be93bb 100644 --- a/gas/gen-sframe.c +++ b/gas/gen-sframe.c @@ -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); diff --git a/include/sframe.h b/include/sframe.h index 8a824852bcd..2c9019cb64d 100644 --- a/include/sframe.h +++ b/include/sframe.h @@ -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 diff --git a/libsframe/sframe-dump.c b/libsframe/sframe-dump.c index 3d7bbafcdbc..56cf963566e 100644 --- a/libsframe/sframe-dump.c +++ b/libsframe/sframe-dump.c @@ -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. */ diff --git a/libsframe/testsuite/libsframe.decode/be-flipping-v3.c b/libsframe/testsuite/libsframe.decode/be-flipping-v3.c index f573c4bbf82..27ec2da62f1 100644 --- a/libsframe/testsuite/libsframe.decode/be-flipping-v3.c +++ b/libsframe/testsuite/libsframe.decode/be-flipping-v3.c @@ -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);