https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103348

            Bug ID: 103348
           Summary: Bad code generated for fabs(long double) under aarch64
           Product: gcc
           Version: 6.3.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: jacob at jacob dot remcomp.fr
  Target Milestone: ---

Machine aarch64 linux
when compiling:
long double ld;

ld = fabs(ld);

The compiler generates:
    ldr q0, [x29, 16] 
    bl  __trunctfdf2
    fabs    d0, d0
    bl  __extenddftf2
    str q0, [x29, 16] 
You truncate de 128 bit long double to 64, then extend it to 128 bits! You
loose ALL PRECISION!

Incredible

Reply via email to