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...