summaryrefslogtreecommitdiff
path: root/gcc/config/convex/convex.md
diff options
context:
space:
mode:
authorcks <cks@138bc75d-0d04-0410-961f-82ee72b054a4>1992-10-14 01:27:21 +0000
committercks <cks@138bc75d-0d04-0410-961f-82ee72b054a4>1992-10-14 01:27:21 +0000
commit3624b66f87c15c1ea5233e141adb1aaf5f98f20b (patch)
treed2b3b5423e0395729225d59c14b359e942b0bde1 /gcc/config/convex/convex.md
parentdd1632cff36cdd24ee3e7619b1845ad2709a16ec (diff)
downloadgcc-3624b66f87c15c1ea5233e141adb1aaf5f98f20b.tar.gz
updates for 2.3
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@2448 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/config/convex/convex.md')
-rw-r--r--gcc/config/convex/convex.md25
1 files changed, 17 insertions, 8 deletions
diff --git a/gcc/config/convex/convex.md b/gcc/config/convex/convex.md
index a9e933670a3..81858b41583 100644
--- a/gcc/config/convex/convex.md
+++ b/gcc/config/convex/convex.md
@@ -714,7 +714,7 @@
[(set (match_operand:DI 0 "register_operand" "=d")
(and:DI (match_operand:DI 1 "register_operand" "%0")
(match_operand:DI 2 "immediate_operand" "Fn")))]
- "GET_CODE (operands[2]) == CONST_INT
+ "(GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) < 0)
|| (GET_CODE (operands[2]) == CONST_DOUBLE
&& CONST_DOUBLE_HIGH (operands[2]) == -1)"
"and %2,%0")
@@ -753,7 +753,7 @@
[(set (match_operand:DI 0 "register_operand" "=d")
(ior:DI (match_operand:DI 1 "register_operand" "%0")
(match_operand:DI 2 "immediate_operand" "Fn")))]
- "GET_CODE (operands[2]) == CONST_INT
+ "(GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) >= 0)
|| (GET_CODE (operands[2]) == CONST_DOUBLE
&& CONST_DOUBLE_HIGH (operands[2]) == 0)"
"or %2,%0")
@@ -792,7 +792,7 @@
[(set (match_operand:DI 0 "register_operand" "=d")
(xor:DI (match_operand:DI 1 "register_operand" "%0")
(match_operand:DI 2 "immediate_operand" "Fn")))]
- "GET_CODE (operands[2]) == CONST_INT
+ "(GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) >= 0)
|| (GET_CODE (operands[2]) == CONST_DOUBLE
&& CONST_DOUBLE_HIGH (operands[2]) == 0)"
"xor %2,%0")
@@ -1032,9 +1032,18 @@
if (GET_CODE (operands[2]) == CONST_INT)
{
int rshift = INTVAL (operands[2]);
- operands[3] =
- force_reg (DImode, immed_double_const (1 << (63 - rshift),
- 1 << (31 - rshift), DImode));
+ if (rshift < 0)
+ operands[3] = force_reg (DImode, immed_double_const (0, 0, DImode));
+ else if (rshift < 32)
+ operands[3] =
+ force_reg (DImode,
+ immed_double_const (0, 1 << (31 - rshift), DImode));
+ else if (rshift < 64)
+ operands[3] =
+ force_reg (DImode,
+ immed_double_const (1 << (63 - rshift), 0, DImode));
+ else
+ operands[3] = force_reg (DImode, immed_double_const (0, 0, DImode));
}
else
{
@@ -1291,14 +1300,14 @@
(define_insn "call"
[(call (match_operand:QI 0 "memory_operand" "m")
- (match_operand:SI 1 "general_operand" "g"))]
+ (match_operand 1 "" "g"))]
""
"* return output_call (insn, operands[0], operands[1]);")
(define_insn "call_value"
[(set (match_operand 0 "" "=g")
(call (match_operand:QI 1 "memory_operand" "m")
- (match_operand:SI 2 "general_operand" "g")))]
+ (match_operand 2 "" "g")))]
""
"* return output_call (insn, operands[1], operands[2]);")