On 02/09/2011 08:27 AM, Hans-Peter Nilsson wrote: > On Fri, 28 Jan 2011, Jean-Marc Saffroy wrote: >> (define_constraint "I" >> "Signed 6-bit integer constant for binops." >> (and (match_code "const_int") >> (match_test "IN_RANGE (ival, -24, 32)"))) >> >> (define_register_constraint "A" "ADDR_REGS" >> "The address registers.") >> >> (define_register_constraint "D" "DATA_REGS" >> "The general (data) registers.") >> >> (define_predicate "reg_or_18bit_signed_operand" >> (if_then_else (match_code "const_int") >> (match_test "IN_RANGE (INTVAL (op), -(1 << 17), (1 << 17) - 1)") >> (match_operand 0 "register_operand"))) >> >> (define_insn "adddi3" >> [(set (match_operand:DI 0 "register_operand" "=D,D,A") >> (plus:DI >> (match_operand:DI 1 "register_operand" "%0,0,0") >> (match_operand:DI 2 "reg_or_18bit_signed_operand" "I,D,n")))] >> "" >> "@ >> addi %0, %2 >> add %0, %2 >> adda %0, %2") > >> It seems I was expecting too much intelligence from reload, or I didn't >> give enough hints. > > JFTR (after reading subsequent messages and good pragmatic > advice), I think you're working around a bug in gcc; your adddi3 > should work as-is above. Reload may create suboptimal > sequences, but it should always create working code. Not that > we can do much about it, the port not in the tree and all, but > perhaps later. There are recent-ish changes in this area (i.e. > fp-sp elimination), fixing bugs exposed by other ports, so try > updating your tree too.
FTR: at last I could update my tree to a recent SVN checkout of the trunk (from 2 days ago), and I still need a define_expand with the "pragmatic advice" suggested by Ian (which seems to work fine). Cheers, JM > > brgds, H-P >