(andsi3...
authorRichard Stallman <rms@gnu.org>
Sun, 5 Jul 1992 21:15:12 +0000 (21:15 +0000)
committerRichard Stallman <rms@gnu.org>
Sun, 5 Jul 1992 21:15:12 +0000 (21:15 +0000)
(andsi3, andhi3, andqi3): If one of the source operands
is a constant, complement that operand instead of a register or memory operand.

From-SVN: r1450

gcc/config/vax/vax.md

index 93e925091ba5dda1f95b8a91085c576568763d6d..9144ee559aca6b52679f003c6211016481b1f719 100644 (file)
   ""
   "
 {
-  if (GET_CODE (operands[1]) == CONST_INT)
-    operands[1] = gen_rtx (CONST_INT, VOIDmode, ~INTVAL (operands[1]));
+  rtx op1 = operands[1];
+
+  /* If there is a constant argument, complement that one.  */
+  if (GET_CODE (operands[2]) == CONST_INT && GET_CODE (op1) != CONST_INT)
+    {
+      operands[1] = operands[2];
+      operands[2] = op1;
+      op1 = operands[1];
+    }
+
+  if (GET_CODE (op1) == CONST_INT)
+    operands[1] = gen_rtx (CONST_INT, VOIDmode, ~INTVAL (op1));
   else
-    operands[1] = expand_unop (SImode, one_cmpl_optab, operands[1], 0, 1);
+    operands[1] = expand_unop (SImode, one_cmpl_optab, op1, 0, 1);
 }")
 
 (define_expand "andhi3"
   ""
   "
 {
-  rtx op = operands[1];
-  if (GET_CODE (op) == CONST_INT)
-    operands[1] = gen_rtx (CONST_INT, VOIDmode,
-                          ((1 << 16) - 1) & ~INTVAL (op));
+  rtx op1 = operands[1];
+
+  if (GET_CODE (operands[2]) == CONST_INT && GET_CODE (op1) != CONST_INT)
+    {
+      operands[1] = operands[2];
+      operands[2] = op1;
+      op1 = operands[1];
+    }
+
+  if (GET_CODE (op1) == CONST_INT)
+    operands[1] = gen_rtx (CONST_INT, VOIDmode, 65535 & ~INTVAL (op1));
   else
-    operands[1] = expand_unop (HImode, one_cmpl_optab, op, 0, 1);
+    operands[1] = expand_unop (HImode, one_cmpl_optab, op1, 0, 1);
 }")
 
 (define_expand "andqi3"
   ""
   "
 {
-  rtx op = operands[1];
-  if (GET_CODE (op) == CONST_INT)
-    operands[1] = gen_rtx (CONST_INT, VOIDmode,
-                          ((1 << 8) - 1) & ~INTVAL (op));
+  rtx op1 = operands[1];
+
+  if (GET_CODE (operands[2]) == CONST_INT && GET_CODE (op1) != CONST_INT)
+    {
+     operands[1] = operands[2];
+     operands[2] = op1;
+     op1 = operands[1];
+   }
+
+  if (GET_CODE (op1) == CONST_INT)
+    operands[1] = gen_rtx (CONST_INT, VOIDmode, 255 & ~INTVAL (op1));
   else
-    operands[1] = expand_unop (QImode, one_cmpl_optab, op, 0, 1);
+    operands[1] = expand_unop (QImode, one_cmpl_optab, op1, 0, 1);
 }")
 
 (define_insn ""