On Mon, Jul 23, 2018 at 12:09 PM, Umesh Kalappa
<umesh.kalap...@gmail.com> wrote:
> Hi Richard,
>
> We tested on the SP and yes the problem persist on the SP too and
> attached patch will fix the both SP and DP issues for the  denormal
> resultant.
> We bootstrapped the compiler ,look ok to us with minimal testing ,

Have you run the full gcc testsuite as you should do if you want to
submit a patch and checked for no regressions ?


Ramana

>
> Any floating point test-suite to test for the attached patch ? any
> recommendations or inputs  ?
>



> Thank you again
> ~Umesh
>
>
> On Mon, Jul 23, 2018 at 3:28 PM, Richard Earnshaw (lists)
> <richard.earns...@arm.com> wrote:
>> So why is this only changing the double-precision implementation?
>> Surely, a problem like this will normally be common to both SP and DP
>> floating-point computations.
>>
>> R.
>>
>> On 23/07/18 08:46, Umesh Kalappa wrote:
>>> Thank you Wilco for the inputs and we agree that the  fix break down
>>> for the case.
>>>
>>> Meanwhile ,attached patch will take care the inputs and we are testing
>>> the patch vigorously ,would you recommended any test-suite out there
>>> for the same ?
>>>
>>> Thank you
>>> ~Umesh
>>>
>>>
>>> On Fri, Jul 20, 2018 at 10:04 PM, Wilco Dijkstra <wilco.dijks...@arm.com> 
>>> wrote:
>>>> Umesh Kalappa wrote:
>>>>
>>>>> We tried some of the normalisation numbers and the fix works and please
>>>>> could you help us with the input ,where  if you see that fix breaks down.
>>>>
>>>> Well try any set of inputs which require normalisation. You'll find these 
>>>> no
>>>> longer get normalised and so will get incorrect results. Try basic cases 
>>>> like
>>>> 1.0 - 0.75 which I think will return 0.625...
>>>>
>>>> A basic test would be to run old vs new on a large set of inputs to verify
>>>> there aren't any obvious differences.
>>>>
>>>> Wilco
>>>>
>>>>
>>>> pr86512.patch
>>>>
>>>>
>>>> Index: libgcc/config/arm/ieee754-df.S
>>>> ===================================================================
>>>> --- libgcc/config/arm/ieee754-df.S   (revision 262850)
>>>> +++ libgcc/config/arm/ieee754-df.S   (working copy)
>>>> @@ -203,6 +203,7 @@
>>>>  #endif
>>>>
>>>>      @ Determine how to normalize the result.
>>>> +    @ if result is denormal i.e (exp)=0,then don't normalise the result,
>>>>  LSYM(Lad_p):
>>>>      cmp     xh, #0x00100000
>>>>      bcc     LSYM(Lad_a)
>>>> @@ -235,6 +236,8 @@
>>>>
>>>>      @ Result must be shifted left and exponent adjusted.
>>>>  LSYM(Lad_a):
>>>> +    cmp     r4,#0x0
>>>> +    beq     LSYM(Lad_e)
>>>>      movs    ip, ip, lsl #1
>>>>      adcs    xl, xl, xl
>>>>      adc     xh, xh, xh
>>>> Index: gcc/testsuite/gcc.target/arm/pr86512.c
>>>> ===================================================================
>>>> --- gcc/testsuite/gcc.target/arm/pr86512.c   (nonexistent)
>>>> +++ gcc/testsuite/gcc.target/arm/pr86512.c   (working copy)
>>>> @@ -0,0 +1,28 @@
>>>> +/* { dg-do run } */
>>>> +/* { dg-options "-O0 -msoft-float" } */
>>>> +
>>>> +#include<stdlib.h>
>>>> +#include<stdint.h>
>>>> +
>>>> +typedef union
>>>> +{
>>>> +    double d;
>>>> +    uint64_t i;
>>>> +} u;
>>>> +
>>>> +int main()
>>>> +{
>>>> +  u smallestPositiveNormal, smallesPositiveSubnormal, expectedResult, 
>>>> result;
>>>> +
>>>> +  smallesPositiveSubnormal.i = 1;
>>>> +
>>>> +  smallestPositiveNormal.i = 0x0010000000000000;
>>>> +  expectedResult.i = 0x000fffffffffffff;
>>>> +  result.d = smallestPositiveNormal.d - smallesPositiveSubnormal.d;
>>>> +
>>>> +  if (result.i != expectedResult.i)
>>>> +    abort();
>>>> +
>>>> +  return 0;
>>>> +}
>>>> +
>>

Reply via email to