aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.target
diff options
context:
space:
mode:
authorKyrylo Tkachov <kyrylo.tkachov@arm.com>2015-11-10 09:37:51 +0000
committerKyrylo Tkachov <ktkachov@gcc.gnu.org>2015-11-10 09:37:51 +0000
commit3204ac9868cc02eacd88abf30b7e64a479beb3fe (patch)
treed0ef83866d52f6f3a680a698222073270ea0b299 /gcc/testsuite/gcc.target
parentce68b5cfb9d12cb55345bd26ee9114aee925d46a (diff)
downloadgcc-3204ac9868cc02eacd88abf30b7e64a479beb3fe.zip
gcc-3204ac9868cc02eacd88abf30b7e64a479beb3fe.tar.gz
gcc-3204ac9868cc02eacd88abf30b7e64a479beb3fe.tar.bz2
[AArch64][2/3] Implement negcc, notcc optabs
* config/aarch64/aarch64.md (<neg_not_op><mode>cc): New define_expand. * config/aarch64/iterators.md (NEG_NOT): New code iterator. (neg_not_op): New code attribute. * gcc.target/aarch64/cond_op_imm_1.c: New test. From-SVN: r230090
Diffstat (limited to 'gcc/testsuite/gcc.target')
-rw-r--r--gcc/testsuite/gcc.target/aarch64/cond_op_imm_1.c99
1 files changed, 99 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.target/aarch64/cond_op_imm_1.c b/gcc/testsuite/gcc.target/aarch64/cond_op_imm_1.c
new file mode 100644
index 0000000..e93a693
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/cond_op_imm_1.c
@@ -0,0 +1,99 @@
+/* { dg-do run } */
+/* { dg-options "-save-temps -O2 -fno-inline" } */
+
+extern void abort (void);
+
+#define N 30
+#define M 25089992
+
+int
+foonegsi (int a)
+{
+ return a ? N : -N;
+}
+
+/* { dg-final { scan-assembler "csneg\tw\[0-9\]*.*" } } */
+
+
+int
+fooinvsi (int a)
+{
+ return a ? N : ~N;
+}
+
+/* { dg-final { scan-assembler "csinv\tw\[0-9\]*.*" } } */
+
+
+long long
+foonegdi (long long a)
+{
+ return a ? N : -N;
+}
+
+long long
+largefooneg (long long a)
+{
+ return a ? M : -M;
+}
+
+/* { dg-final { scan-assembler "csneg\tx\[0-9\]*.*" } } */
+
+long long
+fooinvdi (long long a)
+{
+ return a ? N : ~N;
+}
+
+long long
+largefooinv (long long a)
+{
+ return a ? M : ~M;
+}
+
+/* { dg-final { scan-assembler "csinv\tx\[0-9\]*.*" } } */
+
+
+int
+main (void)
+{
+ if (foonegsi (1) != N)
+ abort ();
+
+ if (foonegsi (0) != -N)
+ abort ();
+
+ if (fooinvsi (1) != N)
+ abort ();
+
+ if (fooinvsi (0) != ~N)
+ abort ();
+
+ if (foonegdi (1) != N)
+ abort ();
+
+ if (foonegdi (0) != -N)
+ abort ();
+
+ if (fooinvdi (1) != N)
+ abort ();
+
+ if (fooinvdi (0) != ~N)
+ abort ();
+
+ if (largefooinv (0) != ~M)
+ abort ();
+
+ if (largefooneg (0) != -M)
+ abort ();
+
+ if (largefooinv (1) != M)
+ abort ();
+
+ if (largefooneg (1) != M)
+ abort ();
+
+ return 0;
+}
+
+/* { dg-final { scan-assembler-not "csel\tx\[0-9\]*.*" } } */
+/* { dg-final { scan-assembler-not "csel\tw\[0-9\]*.*" } } */