aboutsummaryrefslogtreecommitdiff
path: root/gcc/config/m32r/m32r.md
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/config/m32r/m32r.md')
-rw-r--r--gcc/config/m32r/m32r.md19
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")