On 05/14/2018 07:44 AM, Peter Maydell wrote:
> On 12 May 2018 at 01:43, Richard Henderson <richard.hender...@linaro.org> 
> wrote:
>> Only MIPS requires snan_bit_is_one to be variable.  While we are
>> specializing softfloat behaviour, allow other targets to eliminate
>> this runtime check.
>>
>> Cc: Aurelien Jarno <aurel...@aurel32.net>
>> Cc: Yongbok Kim <yongbok....@mips.com>
>> Cc: David Gibson <da...@gibson.dropbear.id.au>
>> Cc: Alexander Graf <ag...@suse.de>
>> Cc: Guan Xuetao <g...@mprc.pku.edu.cn>
>> Signed-off-by: Richard Henderson <richard.hender...@linaro.org>
>> ---
>>  fpu/softfloat-specialize.h    | 68 ++++++++++++++++++++++-------------
>>  include/fpu/softfloat-types.h |  1 +
>>  include/fpu/softfloat.h       |  4 ---
>>  target/mips/cpu.h             |  4 +--
>>  target/hppa/cpu.c             |  1 -
>>  target/mips/translate_init.c  |  4 +--
>>  target/ppc/fpu_helper.c       |  1 -
>>  target/sh4/cpu.c              |  1 -
>>  target/unicore32/cpu.c        |  2 --
>>  9 files changed, 48 insertions(+), 38 deletions(-)
> 
> 
>> diff --git a/include/fpu/softfloat.h b/include/fpu/softfloat.h
>> index 69f4dbc4db..e72cc9525d 100644
>> --- a/include/fpu/softfloat.h
>> +++ b/include/fpu/softfloat.h
>> @@ -125,10 +125,6 @@ static inline void set_default_nan_mode(flag val, 
>> float_status *status)
>>  {
>>      status->default_nan_mode = val;
>>  }
>> -static inline void set_snan_bit_is_one(flag val, float_status *status)
>> -{
>> -    status->snan_bit_is_one = val;
>> -}
>>  static inline int get_float_detect_tininess(float_status *status)
>>  {
>>      return status->float_detect_tininess;
>> diff --git a/target/mips/cpu.h b/target/mips/cpu.h
>> index cfe1735e0e..2abce47ea3 100644
>> --- a/target/mips/cpu.h
>> +++ b/target/mips/cpu.h
>> @@ -755,8 +755,8 @@ target_ulong exception_resume_pc (CPUMIPSState *env);
>>
>>  static inline void restore_snan_bit_mode(CPUMIPSState *env)
>>  {
>> -    set_snan_bit_is_one((env->active_fpu.fcr31 & (1 << FCR31_NAN2008)) == 0,
>> -                        &env->active_fpu.fp_status);
>> +    env->active_fpu.fp_status.snan_bit_is_one
>> +        = (env->active_fpu.fcr31 & (1 << FCR31_NAN2008)) == 0;
>>  }
>>
>>  static inline void cpu_get_tb_cpu_state(CPUMIPSState *env, target_ulong *pc,
>>
>> diff --git a/target/mips/translate_init.c b/target/mips/translate_init.c
>> index c7ba6ee5f9..5e40d6a198 100644
>> --- a/target/mips/translate_init.c
>> +++ b/target/mips/translate_init.c
>> @@ -878,6 +878,6 @@ static void msa_reset(CPUMIPSState *env)
>>      /* clear float_status nan mode */
>>      set_default_nan_mode(0, &env->active_tc.msa_fp_status);
>>
>> -    /* set proper signanling bit meaning ("1" means "quiet") */
>> -    set_snan_bit_is_one(0, &env->active_tc.msa_fp_status);
>> +    /* set proper signaling bit meaning ("1" means "quiet") */
>> +    env->active_tc.msa_fp_status.snan_bit_is_one = 0;
>>  }
> 
> Why remove the set_snan_bit_is_one() helper and require mips
> to manually look inside the float_status struct?

What I really wanted was to #ifdef TARGET_MIPS around the function and the
field, but it's poisoned at that point.  But you're right, I could have left
the function.


r~

Reply via email to