As-applied. From: https://gcc.gnu.org/ml/gcc-patches/2014-10/msg02605.html Linked from bug62231 comment 4 there diff -durN a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c --- a/gcc/config/rs6000/rs6000.c 2014-12-08 17:29:04.000000000 -0800 +++ b/gcc/config/rs6000/rs6000.c 2014-12-15 14:44:46.568801843 -0800 @@ -1673,7 +1673,7 @@ SCmode so as to pass the value correctly in a pair of registers. */ else if (TARGET_E500_DOUBLE && FLOAT_MODE_P (mode) && mode != SCmode - && !DECIMAL_FLOAT_MODE_P (mode)) + && !DECIMAL_FLOAT_MODE_P (mode) && SPE_SIMD_REGNO_P (regno)) reg_size = UNITS_PER_FP_WORD; else