diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 011fe4c60ac..36b1b2baa8b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2018-11-29 Alan Modra + + * config/rs6000/rs6000.c (rs6000_emit_move): Disable long + double split for targets other than Darwin. + 2018-11-29 Alan Modra * config/rs6000/rs6000.md (movdi_internal64): Correct lengths. @@ -692,7 +697,7 @@ 2018-11-23 Christoph Muellner - * config/aarch64/aarch64-cores.def: Define emag. + * config/aarch64/aarch64-cores.def: Define emag. * config/aarch64/aarch64-tune.md: Regenerated with emag. * config/aarch64/aarch64.c (emag_tunings): New struct. * doc/invoke.texi: Document mtune value. diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index 93d58a2855f..d986207a0c6 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -9967,8 +9967,8 @@ rs6000_emit_move (rtx dest, rtx source, machine_mode mode) /* 128-bit constant floating-point values on Darwin should really be loaded as two parts. However, this premature splitting is a problem when DFmode values can go into Altivec registers. */ - if (FLOAT128_IBM_P (mode) && !reg_addr[DFmode].scalar_in_vmx_p - && GET_CODE (operands[1]) == CONST_DOUBLE) + if (TARGET_MACHO && CONST_DOUBLE_P (operands[1]) && FLOAT128_IBM_P (mode) + && !reg_addr[DFmode].scalar_in_vmx_p) { rs6000_emit_move (simplify_gen_subreg (DFmode, operands[0], mode, 0), simplify_gen_subreg (DFmode, operands[1], mode, 0),