aboutsummaryrefslogtreecommitdiff
path: root/gcc/config
diff options
context:
space:
mode:
authorUros Bizjak <uros@gcc.gnu.org>2010-06-11 11:38:59 +0200
committerUros Bizjak <uros@gcc.gnu.org>2010-06-11 11:38:59 +0200
commit3d25c3960ba2eec2cfc8498c73c939619ec0efc9 (patch)
tree36aa62d4a138ab5c5321dd245cafdb56948e9a4b /gcc/config
parentb66a8c5da87a3dd092752d9edf55d61589149aed (diff)
downloadgcc-3d25c3960ba2eec2cfc8498c73c939619ec0efc9.zip
gcc-3d25c3960ba2eec2cfc8498c73c939619ec0efc9.tar.gz
gcc-3d25c3960ba2eec2cfc8498c73c939619ec0efc9.tar.bz2
i386.md (pro_epilogue_adjust_stack_1): Assert that operand 0 == operand 1.
* config/i386/i386.md (pro_epilogue_adjust_stack_1) <TYPE_ALU>: Assert that operand 0 == operand 1. Use x86_maybe_negate_const_int to output insn mnemonic. (pro_epilogue_adjust_stack_rex64) <TYPE_ALU>: Ditto. From-SVN: r160600
Diffstat (limited to 'gcc/config')
-rw-r--r--gcc/config/i386/i386.md36
1 files changed, 10 insertions, 26 deletions
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index af9c113..37f3f99 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -16539,22 +16539,15 @@
return "mov{l}\t{%1, %0|%0, %1}";
case TYPE_ALU:
- if (CONST_INT_P (operands[2])
- && (INTVAL (operands[2]) == 128
- || (INTVAL (operands[2]) < 0
- && INTVAL (operands[2]) != -128)))
- {
- operands[2] = GEN_INT (-INTVAL (operands[2]));
- return "sub{l}\t{%2, %0|%0, %2}";
- }
+ gcc_assert (rtx_equal_p (operands[0], operands[1]));
+ if (x86_maybe_negate_const_int (&operands[2], SImode))
+ return "sub{l}\t{%2, %0|%0, %2}";
+
return "add{l}\t{%2, %0|%0, %2}";
- case TYPE_LEA:
+ default:
operands[2] = SET_SRC (XVECEXP (PATTERN (insn), 0, 0));
return "lea{l}\t{%a2, %0|%0, %a2}";
-
- default:
- gcc_unreachable ();
}
}
[(set (attr "type")
@@ -16589,24 +16582,15 @@
return "mov{q}\t{%1, %0|%0, %1}";
case TYPE_ALU:
- if (CONST_INT_P (operands[2])
- /* Avoid overflows. */
- && ((INTVAL (operands[2]) & ((((unsigned int) 1) << 31) - 1)))
- && (INTVAL (operands[2]) == 128
- || (INTVAL (operands[2]) < 0
- && INTVAL (operands[2]) != -128)))
- {
- operands[2] = GEN_INT (-INTVAL (operands[2]));
- return "sub{q}\t{%2, %0|%0, %2}";
- }
+ gcc_assert (rtx_equal_p (operands[0], operands[1]));
+ if (x86_maybe_negate_const_int (&operands[2], DImode))
+ return "sub{q}\t{%2, %0|%0, %2}";
+
return "add{q}\t{%2, %0|%0, %2}";
- case TYPE_LEA:
+ default:
operands[2] = SET_SRC (XVECEXP (PATTERN (insn), 0, 0));
return "lea{q}\t{%a2, %0|%0, %a2}";
-
- default:
- gcc_unreachable ();
}
}
[(set (attr "type")