diff options
Diffstat (limited to 'gcc/config/m32r/m32r.md')
-rw-r--r-- | gcc/config/m32r/m32r.md | 19 |
1 files changed, 7 insertions, 12 deletions
diff --git a/gcc/config/m32r/m32r.md b/gcc/config/m32r/m32r.md index e1638903ad6..3f1e6e51f71 100644 --- a/gcc/config/m32r/m32r.md +++ b/gcc/config/m32r/m32r.md @@ -434,8 +434,9 @@ } } - /* Can't use any two byte insn, fall back to seth/or3. */ - operands[2] = GEN_INT ((val) & 0xffff0000); + /* Can't use any two byte insn, fall back to seth/or3. Use ~0xffff instead + of 0xffff0000, since the later fails on a 64-bit host. */ + operands[2] = GEN_INT ((val) & ~0xffff); operands[3] = GEN_INT ((val) & 0xffff); }") @@ -588,14 +589,8 @@ [(set (match_dup 2) (match_dup 3))] " { - long l; - REAL_VALUE_TYPE rv; - - REAL_VALUE_FROM_CONST_DOUBLE (rv, operands[1]); - REAL_VALUE_TO_TARGET_SINGLE (rv, l); - operands[2] = operand_subword (operands[0], 0, 0, SFmode); - operands[3] = GEN_INT (l); + operands[3] = operand_subword (operands[1], 0, 0, SFmode); }") (define_expand "movdf" @@ -1787,10 +1782,10 @@ [(set (mem:BLK (match_operand:SI 0 "register_operand" "r")) ;; destination (mem:BLK (match_operand:SI 1 "register_operand" "r"))) ;; source (use (match_operand:SI 2 "m32r_block_immediate_operand" "J"));; # bytes to move + (set (match_dup 0) (plus:SI (match_dup 0) (minus:SI (match_dup 2) (const_int 4)))) + (set (match_dup 1) (plus:SI (match_dup 1) (match_dup 2))) (clobber (match_scratch:SI 3 "=&r")) ;; temp 1 - (clobber (match_scratch:SI 4 "=&r")) ;; temp 2 - (clobber (match_dup 0)) - (clobber (match_dup 1))] + (clobber (match_scratch:SI 4 "=&r"))] ;; temp 2 "" "* return m32r_output_block_move (insn, operands);" [(set_attr "type" "store8") |