Message ID | 20230227054233.390271-4-richard.henderson@linaro.org |
---|---|
State | Superseded |
Headers | show |
Series | tcg: Remove tcg_const_* | expand |
On 27/2/23 06:41, Richard Henderson wrote: > Use proper enumeration types for input and output. > Use a const array to perform the mapping, with an > assert that the input is valid. > > Signed-off-by: Richard Henderson <richard.henderson@linaro.org> > --- > target/arm/internals.h | 12 +++++++++--- > target/arm/translate-mve.c | 2 +- > target/arm/vfp_helper.c | 33 ++++++++------------------------- > 3 files changed, 18 insertions(+), 29 deletions(-) > +extern const FloatRoundMode arm_rmode_to_sf_map[6]; > + > +static inline FloatRoundMode arm_rmode_to_sf(ARMFPRounding rmode) > +{ > + assert((unsigned)rmode < ARRAY_SIZE(arm_rmode_to_sf_map)); > + return arm_rmode_to_sf_map[rmode]; > +} Is the inlining justified? Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
On 3/6/23 06:00, Philippe Mathieu-Daudé wrote: > On 27/2/23 06:41, Richard Henderson wrote: >> Use proper enumeration types for input and output. >> Use a const array to perform the mapping, with an >> assert that the input is valid. >> >> Signed-off-by: Richard Henderson <richard.henderson@linaro.org> >> --- >> target/arm/internals.h | 12 +++++++++--- >> target/arm/translate-mve.c | 2 +- >> target/arm/vfp_helper.c | 33 ++++++++------------------------- >> 3 files changed, 18 insertions(+), 29 deletions(-) ... >> +static inline FloatRoundMode arm_rmode_to_sf(ARMFPRounding rmode) >> +{ >> + assert((unsigned)rmode < ARRAY_SIZE(arm_rmode_to_sf_map)); >> + return arm_rmode_to_sf_map[rmode]; >> +} > > Is the inlining justified? It's in a header file, so required. r~
diff --git a/target/arm/internals.h b/target/arm/internals.h index 759b70c646..47d3c32825 100644 --- a/target/arm/internals.h +++ b/target/arm/internals.h @@ -193,16 +193,22 @@ void arm_restore_state_to_opc(CPUState *cs, void arm_cpu_synchronize_from_tb(CPUState *cs, const TranslationBlock *tb); #endif /* CONFIG_TCG */ -enum arm_fprounding { +typedef enum ARMFPRounding { FPROUNDING_TIEEVEN, FPROUNDING_POSINF, FPROUNDING_NEGINF, FPROUNDING_ZERO, FPROUNDING_TIEAWAY, FPROUNDING_ODD -}; +} ARMFPRounding; -int arm_rmode_to_sf(int rmode); +extern const FloatRoundMode arm_rmode_to_sf_map[6]; + +static inline FloatRoundMode arm_rmode_to_sf(ARMFPRounding rmode) +{ + assert((unsigned)rmode < ARRAY_SIZE(arm_rmode_to_sf_map)); + return arm_rmode_to_sf_map[rmode]; +} static inline void aarch64_save_sp(CPUARMState *env, int el) { diff --git a/target/arm/translate-mve.c b/target/arm/translate-mve.c index 798b4fddfe..9744bf3de0 100644 --- a/target/arm/translate-mve.c +++ b/target/arm/translate-mve.c @@ -588,7 +588,7 @@ DO_VCVT(VCVT_FS, vcvt_hs, vcvt_fs) DO_VCVT(VCVT_FU, vcvt_hu, vcvt_fu) static bool do_vcvt_rmode(DisasContext *s, arg_1op *a, - enum arm_fprounding rmode, bool u) + ARMFPRounding rmode, bool u) { /* * Handle VCVT fp to int with specified rounding mode. diff --git a/target/arm/vfp_helper.c b/target/arm/vfp_helper.c index 90cc324f71..36906db8e0 100644 --- a/target/arm/vfp_helper.c +++ b/target/arm/vfp_helper.c @@ -1104,31 +1104,14 @@ float64 HELPER(rintd)(float64 x, void *fp_status) } /* Convert ARM rounding mode to softfloat */ -int arm_rmode_to_sf(int rmode) -{ - switch (rmode) { - case FPROUNDING_TIEAWAY: - rmode = float_round_ties_away; - break; - case FPROUNDING_ODD: - rmode = float_round_to_odd; - break; - case FPROUNDING_TIEEVEN: - default: - rmode = float_round_nearest_even; - break; - case FPROUNDING_POSINF: - rmode = float_round_up; - break; - case FPROUNDING_NEGINF: - rmode = float_round_down; - break; - case FPROUNDING_ZERO: - rmode = float_round_to_zero; - break; - } - return rmode; -} +const FloatRoundMode arm_rmode_to_sf_map[] = { + [FPROUNDING_TIEEVEN] = float_round_nearest_even, + [FPROUNDING_POSINF] = float_round_up, + [FPROUNDING_NEGINF] = float_round_down, + [FPROUNDING_ZERO] = float_round_to_zero, + [FPROUNDING_TIEAWAY] = float_round_ties_away, + [FPROUNDING_ODD] = float_round_to_odd, +}; /* * Implement float64 to int32_t conversion without saturation;
Use proper enumeration types for input and output. Use a const array to perform the mapping, with an assert that the input is valid. Signed-off-by: Richard Henderson <richard.henderson@linaro.org> --- target/arm/internals.h | 12 +++++++++--- target/arm/translate-mve.c | 2 +- target/arm/vfp_helper.c | 33 ++++++++------------------------- 3 files changed, 18 insertions(+), 29 deletions(-)