summaryrefslogtreecommitdiff
path: root/gcc/config/m68k/m68k.md
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/config/m68k/m68k.md')
-rw-r--r--gcc/config/m68k/m68k.md21
1 files changed, 16 insertions, 5 deletions
diff --git a/gcc/config/m68k/m68k.md b/gcc/config/m68k/m68k.md
index d34ad1dce88..6bb296e9e0d 100644
--- a/gcc/config/m68k/m68k.md
+++ b/gcc/config/m68k/m68k.md
@@ -3838,9 +3838,9 @@
"")
(define_insn "xorsi3_internal"
- [(set (match_operand:SI 0 "nonimmediate_operand" "=do,m")
- (xor:SI (match_operand:SI 1 "general_operand" "%0,0")
- (match_operand:SI 2 "general_operand" "di,dKT")))]
+ [(set (match_operand:SI 0 "nonimmediate_operand" "=d,o,m")
+ (xor:SI (match_operand:SI 1 "general_operand" "%0, 0,0")
+ (match_operand:SI 2 "general_operand" "di,dK,dKT")))]
"!TARGET_COLDFIRE"
{
@@ -5583,9 +5583,20 @@
[(set (zero_extract:SI (match_operand:SI 0 "nonimmediate_operand" "")
(match_operand:SI 1 "const_int_operand" "")
(match_operand:SI 2 "const_int_operand" ""))
- (match_operand:SI 3 "register_operand" ""))]
+ (match_operand:SI 3 "reg_or_pow2_m1_operand" ""))]
"TARGET_68020 && TARGET_BITFIELD"
- "")
+ "
+{
+ /* Special case initializing a field to all ones. */
+ if (GET_CODE (operands[3]) == CONST_INT)
+ {
+ if (exact_log2 (INTVAL (operands[3]) + 1) != INTVAL (operands[1]))
+ operands[3] = force_reg (SImode, operands[3]);
+ else
+ operands[3] = constm1_rtx;
+
+ }
+}")
(define_insn "*insv_bfins_mem"
[(set (zero_extract:SI (match_operand:QI 0 "memory_operand" "+o")