Le 25/06/2017 à 21:44, Philippe Mathieu-Daudé a écrit :
> Hi Laurent,
> 
> On 06/25/2017 04:21 PM, Laurent Vivier wrote:
>> fsglmul and fsgldiv truncate data to single precision before computing
>> results.
>>
>> Signed-off-by: Laurent Vivier <laur...@vivier.eu>
>> ---
>>   target/m68k/fpu_helper.c | 22 ++++++++++++++++++++++
>>   target/m68k/helper.h     |  2 ++
>>   target/m68k/translate.c  |  6 ++++++
>>   3 files changed, 30 insertions(+)
>>
>> diff --git a/target/m68k/fpu_helper.c b/target/m68k/fpu_helper.c
>> index 912c0b7..0d83925 100644
>> --- a/target/m68k/fpu_helper.c
>> +++ b/target/m68k/fpu_helper.c
>> @@ -183,11 +183,33 @@ void HELPER(fmul)(CPUM68KState *env, FPReg *res,
>> FPReg *val0, FPReg *val1)
>>       res->d = floatx80_mul(val0->d, val1->d, &env->fp_status);
>>   }
>>   +void HELPER(fsglmul)(CPUM68KState *env, FPReg *res, FPReg *val0,
>> FPReg *val1)
>> +{
>> +    float32 a, b, c;
>> +
>> +    a = floatx80_to_float32(val0->d, &env->fp_status);
>> +    b = floatx80_to_float32(val1->d, &env->fp_status);
>> +    c = float32_mul(a, b, &env->fp_status);
> 
> Why not use floatx80_mul() directly?
> 
>> +
>> +    res->d = float32_to_floatx80(c, &env->fp_status);
>> +}
>> +
>>   void HELPER(fdiv)(CPUM68KState *env, FPReg *res, FPReg *val0, FPReg
>> *val1)
>>   {
>>       res->d = floatx80_div(val1->d, val0->d, &env->fp_status);
>>   }
>>   +void HELPER(fsgldiv)(CPUM68KState *env, FPReg *res, FPReg *val0,
>> FPReg *val1)
>> +{
>> +    float32 a, b, c;
>> +
>> +    a = floatx80_to_float32(val1->d, &env->fp_status);
>> +    b = floatx80_to_float32(val0->d, &env->fp_status);
>> +    c = float32_div(a, b, &env->fp_status);
> 
> floatx80_div()?
> 

Just to follow the spec of the instruction:

"if either operand requires more than 24 bits of mantissa to be
accurately represented, the extraneous mantissa bits are truncated prior
to the multiplication;"

Do you think I should keep them in floatx80 and use the floatx80_round()
(I introduce latter in the series) to reduce the precision prior the
floatx80_mul()?

Thanks,
Laurent

Reply via email to