]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
mips.md (*clear_upper32_dext): New pattern.
authorAdam Nemet <anemet@caviumnetworks.com>
Fri, 31 Jul 2009 15:47:20 +0000 (15:47 +0000)
committerAdam Nemet <nemet@gcc.gnu.org>
Fri, 31 Jul 2009 15:47:20 +0000 (15:47 +0000)
* config/mips/mips.md (*clear_upper32_dext): New pattern.

testsuite/
* gcc.target/mips/ext-4.c: New test.

From-SVN: r150316

gcc/ChangeLog
gcc/config/mips/mips.md
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/mips/ext-4.c [new file with mode: 0644]

index 9357738ca0a4a4e1bb51d833702e24acf04ec412..17a3e969c9fc89bd9f1391d3ffbfef02f4eb1900 100644 (file)
@@ -1,3 +1,7 @@
+2009-07-31  Adam Nemet  <anemet@caviumnetworks.com>
+
+       * config/mips/mips.md (*clear_upper32_dext): New pattern.
+
 2009-07-31  Uros Bizjak  <ubizjak@gmail.com>
 
        * config/i386/bsd.h (ASM_BYTE): New define.
index af429ca90f9c9a45b320234d405ecbc3099f6d9f..02e99375195c299e0737f9db6d1884777764bd95 100644 (file)
   [(set (match_operand:DI 0 "register_operand" "=d,d")
         (and:DI (match_operand:DI 1 "nonimmediate_operand" "d,W")
                (const_int 4294967295)))]
-  "TARGET_64BIT"
+  "TARGET_64BIT && !ISA_HAS_EXT_INS"
 {
   if (which_alternative == 0)
     return "#";
   [(set_attr "move_type" "shift_shift,load")
    (set_attr "mode" "DI")])
 
+(define_insn "*clear_upper32_dext"
+  [(set (match_operand:DI 0 "register_operand" "=d,d")
+        (and:DI (match_operand:DI 1 "nonimmediate_operand" "d,W")
+               (const_int 4294967295)))]
+  "TARGET_64BIT && ISA_HAS_EXT_INS"
+{
+  if (which_alternative == 0)
+    return "dext\t%0,%1,0,32";
+
+  operands[1] = gen_lowpart (SImode, operands[1]);
+  return "lwu\t%0,%1";
+}
+  [(set_attr "move_type" "arith,load")
+   (set_attr "mode" "DI")])
+
 (define_expand "zero_extend<SHORT:mode><GPR:mode>2"
   [(set (match_operand:GPR 0 "register_operand")
         (zero_extend:GPR (match_operand:SHORT 1 "nonimmediate_operand")))]
index c38a075b4ae1a476f0c5ad7c0c39f270cb64199e..2cfe47bff1b3bbc4f5bf330021300899f4fc37c4 100644 (file)
@@ -1,3 +1,7 @@
+2009-07-31  Adam Nemet  <anemet@caviumnetworks.com>
+
+       * gcc.target/mips/ext-4.c: New test.
+
 2009-07-30  Sebastian Pop  <sebastian.pop@amd.com>
 
        * g++.dg/tree-ssa/pr33615.C: Fix pattern for lim.
diff --git a/gcc/testsuite/gcc.target/mips/ext-4.c b/gcc/testsuite/gcc.target/mips/ext-4.c
new file mode 100644 (file)
index 0000000..15e2029
--- /dev/null
@@ -0,0 +1,11 @@
+/* For MIPS64r2 use DEXT rather than DSLL/DSRL for clear_upper32.  */
+/* { dg-do compile } */
+/* { dg-options "-O isa_rev>=2 -mgp64" } */
+/* { dg-final { scan-assembler "\tdext\t" } } */
+/* { dg-final { scan-assembler-not "sll" } } */
+
+unsigned long long
+f (unsigned long long i)
+{
+  return i & 0xffffffffull;
+}