]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
arm.md (*maddhidi4tb, [...]): New define_insns.
authorAndrew Stubbs <ams@codesourcery.com>
Tue, 7 Jun 2011 11:02:38 +0000 (11:02 +0000)
committerAndrew Stubbs <ams@gcc.gnu.org>
Tue, 7 Jun 2011 11:02:38 +0000 (11:02 +0000)
2011-06-07  Andrew Stubbs  <ams@codesourcery.com>

gcc/
* config/arm/arm.md (*maddhidi4tb, *maddhidi4tt): New define_insns.
(*maddhisi4tb, *maddhisi4tt): New define_insns.

gcc/testsuite/
* gcc.target/arm/smlatb-1.c: New file.
* gcc.target/arm/smlatt-1.c: New file.
* gcc.target/arm/smlaltb-1.c: New file.
* gcc.target/arm/smlaltt-1.c: New file.

From-SVN: r174741

gcc/ChangeLog
gcc/config/arm/arm.md
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/arm/smlaltb-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/arm/smlaltt-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/arm/smlatb-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/arm/smlatt-1.c [new file with mode: 0644]

index a1feeb086e3da8fca79bafa83a18f3097f12f003..7d8ac5c93c7e26cdc7f1013f2a6f61aa9b55bc01 100644 (file)
@@ -1,3 +1,8 @@
+2011-06-07  Andrew Stubbs  <ams@codesourcery.com>
+
+       * config/arm/arm.md (*maddhidi4tb, *maddhidi4tt): New define_insns.
+       (*maddhisi4tb, *maddhisi4tt): New define_insns.
+
 2011-06-07  Bernd Schmidt  <bernds@codesourcery.com>
            Andrew Stubbs  <ams@codesourcery.com>
 
index f5b97f65c23d7c24e2101b86c2eb6c74f97fe2fa..4e84826dd35bb01006c7d2b175d648126d808d57 100644 (file)
    (set_attr "predicable" "yes")]
 )
 
+;; Note: there is no maddhisi4ibt because this one is canonical form
+(define_insn "*maddhisi4tb"
+  [(set (match_operand:SI 0 "s_register_operand" "=r")
+       (plus:SI (mult:SI (ashiftrt:SI
+                          (match_operand:SI 1 "s_register_operand" "r")
+                          (const_int 16))
+                         (sign_extend:SI
+                          (match_operand:HI 2 "s_register_operand" "r")))
+                (match_operand:SI 3 "s_register_operand" "r")))]
+  "TARGET_DSP_MULTIPLY"
+  "smlatb%?\\t%0, %1, %2, %3"
+  [(set_attr "insn" "smlaxy")
+   (set_attr "predicable" "yes")]
+)
+
+(define_insn "*maddhisi4tt"
+  [(set (match_operand:SI 0 "s_register_operand" "=r")
+       (plus:SI (mult:SI (ashiftrt:SI
+                          (match_operand:SI 1 "s_register_operand" "r")
+                          (const_int 16))
+                         (ashiftrt:SI
+                          (match_operand:SI 2 "s_register_operand" "r")
+                          (const_int 16)))
+                (match_operand:SI 3 "s_register_operand" "r")))]
+  "TARGET_DSP_MULTIPLY"
+  "smlatt%?\\t%0, %1, %2, %3"
+  [(set_attr "insn" "smlaxy")
+   (set_attr "predicable" "yes")]
+)
+
 (define_insn "*maddhidi4"
   [(set (match_operand:DI 0 "s_register_operand" "=r")
        (plus:DI
   [(set_attr "insn" "smlalxy")
    (set_attr "predicable" "yes")])
 
+;; Note: there is no maddhidi4ibt because this one is canonical form
+(define_insn "*maddhidi4tb"
+  [(set (match_operand:DI 0 "s_register_operand" "=r")
+       (plus:DI
+         (mult:DI (sign_extend:DI
+                   (ashiftrt:SI
+                    (match_operand:SI 1 "s_register_operand" "r")
+                    (const_int 16)))
+                  (sign_extend:DI
+                   (match_operand:HI 2 "s_register_operand" "r")))
+         (match_operand:DI 3 "s_register_operand" "0")))]
+  "TARGET_DSP_MULTIPLY"
+  "smlaltb%?\\t%Q0, %R0, %1, %2"
+  [(set_attr "insn" "smlalxy")
+   (set_attr "predicable" "yes")])
+
+(define_insn "*maddhidi4tt"
+  [(set (match_operand:DI 0 "s_register_operand" "=r")
+       (plus:DI
+         (mult:DI (sign_extend:DI
+                   (ashiftrt:SI
+                    (match_operand:SI 1 "s_register_operand" "r")
+                    (const_int 16)))
+                  (sign_extend:DI
+                   (ashiftrt:SI
+                    (match_operand:SI 2 "s_register_operand" "r")
+                    (const_int 16))))
+         (match_operand:DI 3 "s_register_operand" "0")))]
+  "TARGET_DSP_MULTIPLY"
+  "smlaltt%?\\t%Q0, %R0, %1, %2"
+  [(set_attr "insn" "smlalxy")
+   (set_attr "predicable" "yes")])
+
 (define_expand "mulsf3"
   [(set (match_operand:SF          0 "s_register_operand" "")
        (mult:SF (match_operand:SF 1 "s_register_operand" "")
index 7686e2a42bd15583c5320a2c1b78dde7308ca1cf..a83814a89900f8b0032366afda97f28fd327d2a6 100644 (file)
@@ -1,3 +1,10 @@
+2011-06-07  Andrew Stubbs  <ams@codesourcery.com>
+
+       * gcc.target/arm/smlatb-1.c: New file.
+       * gcc.target/arm/smlatt-1.c: New file.
+       * gcc.target/arm/smlaltb-1.c: New file.
+       * gcc.target/arm/smlaltt-1.c: New file.
+
 2011-06-07  Andrew Stubbs  <ams@codesourcery.com>
 
        * gcc.target/arm/mla-2.c: New test.
diff --git a/gcc/testsuite/gcc.target/arm/smlaltb-1.c b/gcc/testsuite/gcc.target/arm/smlaltb-1.c
new file mode 100644 (file)
index 0000000..b83fc74
--- /dev/null
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -march=armv7-a" } */
+
+long long int
+foo (long long x, int in)
+{
+  short a = in & 0xffff;
+  short b = (in & 0xffff0000) >> 16;
+
+  return x + b * a;
+}
+
+/* { dg-final { scan-assembler "smlaltb" } } */
diff --git a/gcc/testsuite/gcc.target/arm/smlaltt-1.c b/gcc/testsuite/gcc.target/arm/smlaltt-1.c
new file mode 100644 (file)
index 0000000..2604d9b
--- /dev/null
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -march=armv7-a" } */
+
+long long int
+foo (long long x, int in1, int in2)
+{
+  short a = (in1 & 0xffff0000) >> 16;
+  short b = (in2 & 0xffff0000) >> 16;
+
+  return x + b * a;
+}
+
+/* { dg-final { scan-assembler "smlaltt" } } */
diff --git a/gcc/testsuite/gcc.target/arm/smlatb-1.c b/gcc/testsuite/gcc.target/arm/smlatb-1.c
new file mode 100644 (file)
index 0000000..820dcdd
--- /dev/null
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -march=armv7-a" } */
+
+int
+foo (int x, int in)
+{
+  short a = in & 0xffff;
+  short b = (in & 0xffff0000) >> 16;
+
+  return x + b * a;
+}
+
+/* { dg-final { scan-assembler "smlatb" } } */
diff --git a/gcc/testsuite/gcc.target/arm/smlatt-1.c b/gcc/testsuite/gcc.target/arm/smlatt-1.c
new file mode 100644 (file)
index 0000000..2a60634
--- /dev/null
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -march=armv7-a" } */
+
+int
+foo (int x, int in1, int in2)
+{
+  short a = (in1 & 0xffff0000) >> 16;
+  short b = (in2 & 0xffff0000) >> 16;
+
+  return x + b * a;
+}
+
+/* { dg-final { scan-assembler "smlatt" } } */