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

--- Comment #14 from Bill Seurer <seurer at linux dot vnet.ibm.com> ---
I compared what happens with long double and they are very different

int do_signbit_tf (long double a) { return __builtin_signbit (a); }

cross:
;;
;; Full RTL generated for this function:
;;
(note 1 0 4 NOTE_INSN_DELETED)
(note 4 1 2 2 [bb 2] NOTE_INSN_BASIC_BLOCK)
(insn 2 4 3 2 (set (mem/c:DF (reg/f:DI 112 virtual-stack-vars) [1 a+0 S8 A64])
        (reg:DF 33 1 [ a ])) "./signbit-1-2.c":8:35 -1
     (nil))
(note 3 2 6 2 NOTE_INSN_FUNCTION_BEG)
(insn 6 3 7 2 (set (reg:DI 119)
        (mem/c:DI (reg/f:DI 112 virtual-stack-vars) [1 a+0 S8 A64]))
"./signbit-1-2.c":8:44 -1
     (nil))
(insn 7 6 8 2 (set (reg:DI 120)
        (lshiftrt:DI (reg:DI 119)
            (const_int 63 [0x3f]))) "./signbit-1-2.c":8:44 -1
     (nil))
(insn 8 7 9 2 (set (reg:SI 121)
        (and:SI (subreg:SI (reg:DI 120) 0)
            (const_int 1 [0x1]))) "./signbit-1-2.c":8:44 -1
     (nil))
...etc...


native:
;;
;; Full RTL generated for this function:
;;
(note 1 0 4 NOTE_INSN_DELETED)
(note 4 1 2 2 [bb 2] NOTE_INSN_BASIC_BLOCK)
(insn 2 4 3 2 (set (mem/c:TF (reg/f:DI 112 virtual-stack-vars) [1 a+0 S16
A128])
        (reg:TF 33 1 [ a ])) "./signbit-1-2.c":8:35 -1
     (nil))
(note 3 2 6 2 NOTE_INSN_FUNCTION_BEG)
(insn 6 3 7 2 (set (reg:TF 120)
        (mem/c:TF (reg/f:DI 112 virtual-stack-vars) [1 a+0 S16 A128]))
"./signbit-1-2.c":8:44 -1
     (nil))
(insn 7 6 8 2 (set (reg:DF 121)
        (float_truncate:DF (reg:TF 120))) "./signbit-1-2.c":8:44 -1
     (nil))
...etc...

Reply via email to