http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58475
--- Comment #1 from chrbr at gcc dot gnu.org --- The problem is that [(set (match_operand:SI 0 "arith_reg_dest" "=r") (ior:SI (and:SI (match_operand:SI 1 "arith_reg_operand" "r") accepts fpul registers in the predicate, but not in the constraints. The reason is that arith_reg_dest is tricked to accept FPUL_REG when TARGET_SH4. There is no reason that a fpul register is accepted as a source operand for an arithmetic op, unless the floating point transfer needs to be expressed in the rtl, so fpul will need reloading. .