[prev in list] [next in list] [prev in thread] [next in thread] 

List:       netbsd-tech-toolchain
Subject:    Re: gcc 3.3.1 bug + patch
From:       Martin Husemann <martin () duskware ! de>
Date:       2003-08-15 19:23:35
[Download RAW message or body]

On Fri, Aug 15, 2003 at 10:53:44AM -0700, Ian Lance Taylor wrote:
> As far as I know, that assumption is not correct.
[..]

Thanks for the review. Here is a new try.

Martin

Index: sparc.md
===================================================================
RCS file: /cvsroot/src/gnu/dist/gcc/gcc/config/sparc/sparc.md,v
retrieving revision 1.1.1.1
diff -u -r1.1.1.1 sparc.md
--- sparc.md	2003/07/23 02:41:59	1.1.1.1
+++ sparc.md	2003/08/15 19:15:31
@@ -6881,6 +6881,13 @@
 {
   if (operands[2] == const1_rtx)
     return "add\t%1, %1, %0";
+  if (GET_CODE (operands[2]) == CONST_INT) {
+    if ((unsigned HOST_WIDE_INT) INTVAL (operands[2]) >= 32) {
+      if (TARGET_ARCH64)
+        return "sllx\t%1, %2, %0";
+      operands[2] = GEN_INT (INTVAL (operands[2]) & 0x1f);
+    }
+  }
   return "sll\t%1, %2, %0";
 }
   [(set (attr "type")
@@ -6969,7 +6976,16 @@
 	(ashiftrt:SI (match_operand:SI 1 "register_operand" "r")
 		     (match_operand:SI 2 "arith_operand" "rI")))]
   ""
-  "sra\t%1, %2, %0"
+{
+  if (GET_CODE (operands[2]) == CONST_INT) {
+    if ((unsigned HOST_WIDE_INT) INTVAL (operands[2]) >= 32) {
+      if (TARGET_ARCH64)
+        return "srax\t%1, %2, %0";
+      operands[2] = GEN_INT (INTVAL (operands[2]) & 0x1f);
+    }
+  }
+  return "sra\t%1, %2, %0";
+}
   [(set_attr "type" "shift")])
 
 (define_insn "*ashrsi3_extend"
@@ -7040,7 +7056,16 @@
 	(lshiftrt:SI (match_operand:SI 1 "register_operand" "r")
 		     (match_operand:SI 2 "arith_operand" "rI")))]
   ""
-  "srl\t%1, %2, %0"
+{
+  if (GET_CODE (operands[2]) == CONST_INT) {
+    if ((unsigned HOST_WIDE_INT) INTVAL (operands[2]) >= 32) {
+      if (TARGET_ARCH64)
+        return "srlx\t%1, %2, %0";
+      operands[2] = GEN_INT (INTVAL (operands[2]) & 0x1f);
+    }
+  }
+  return "srl\t%1, %2, %0";
+}
   [(set_attr "type" "shift")])
 
 ;; This handles the case where
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic