aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMarcus Shawcroft <marcus.shawcroft@arm.com>2010-09-13 15:06:26 +0000
committerMarcus Shawcroft <mshawcroft@gcc.gnu.org>2010-09-13 15:06:26 +0000
commite88290aca7d00f3fb5ad0367ea61b0de18254af5 (patch)
tree2b8145c41f2fcbd2f00ba2b659c7dcfe9529f06f /gcc
parent97075d3bf181c4b83ae157dac44062b565d7fb68 (diff)
downloadgcc-e88290aca7d00f3fb5ad0367ea61b0de18254af5.zip
gcc-e88290aca7d00f3fb5ad0367ea61b0de18254af5.tar.gz
gcc-e88290aca7d00f3fb5ad0367ea61b0de18254af5.tar.bz2
arm.md: (define_attr "conds"): Update comment.
2010-09-13 Marcus Shawcroft <marcus.shawcroft@arm.com> * config/arm/arm.md: (define_attr "conds"): Update comment. * config/arm/sync.md (arm_sync_compare_and_swapsi): Change conds attribute to clob. (arm_sync_compare_and_swapsi): Likewise. (arm_sync_compare_and_swap<mode>): Likewise. (arm_sync_lock_test_and_setsi): Likewise. (arm_sync_lock_test_and_set<mode>): Likewise. (arm_sync_new_<sync_optab>si): Likewise. (arm_sync_new_nandsi): Likewise. (arm_sync_new_<sync_optab><mode>): Likewise. (arm_sync_new_nand<mode>): Likewise. (arm_sync_old_<sync_optab>si): Likewise. (arm_sync_old_nandsi): Likewise. (arm_sync_old_<sync_optab><mode>): Likewise. (arm_sync_old_nand<mode>): Likewise. 2010-09-13 Marcus Shawcroft <marcus.shawcroft@arm.com> * gcc.target/arm/sync-1.c: New. From-SVN: r164247
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog18
-rw-r--r--gcc/config/arm/arm.md7
-rw-r--r--gcc/config/arm/sync.md24
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.target/arm/sync-1.c25
5 files changed, 63 insertions, 15 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 9629287..8d47a83 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,21 @@
+2010-09-13 Marcus Shawcroft <marcus.shawcroft@arm.com>
+
+ * config/arm/arm.md: (define_attr "conds"): Update comment.
+ * config/arm/sync.md (arm_sync_compare_and_swapsi): Change
+ conds attribute to clob.
+ (arm_sync_compare_and_swapsi): Likewise.
+ (arm_sync_compare_and_swap<mode>): Likewise.
+ (arm_sync_lock_test_and_setsi): Likewise.
+ (arm_sync_lock_test_and_set<mode>): Likewise.
+ (arm_sync_new_<sync_optab>si): Likewise.
+ (arm_sync_new_nandsi): Likewise.
+ (arm_sync_new_<sync_optab><mode>): Likewise.
+ (arm_sync_new_nand<mode>): Likewise.
+ (arm_sync_old_<sync_optab>si): Likewise.
+ (arm_sync_old_nandsi): Likewise.
+ (arm_sync_old_<sync_optab><mode>): Likewise.
+ (arm_sync_old_nand<mode>): Likewise.
+
2010-09-13 Olivier Hainque <hainque@adacore.com>
* fwprop.c (forward_propagate_and_simplify): Only attach a
diff --git a/gcc/config/arm/arm.md b/gcc/config/arm/arm.md
index 5f52fe9..d10d04b 100644
--- a/gcc/config/arm/arm.md
+++ b/gcc/config/arm/arm.md
@@ -419,10 +419,11 @@
; CLOB means that the condition codes are altered in an undefined manner, if
; they are altered at all
;
-; UNCONDITIONAL means the instions can not be conditionally executed.
+; UNCONDITIONAL means the instruction can not be conditionally executed and
+; that the instruction does not use or alter the condition codes.
;
-; NOCOND means that the condition codes are neither altered nor affect the
-; output of this insn
+; NOCOND means that the instruction does not use or alter the condition
+; codes but can be converted into a conditionally exectuted instruction.
(define_attr "conds" "use,set,clob,unconditional,nocond"
(if_then_else
diff --git a/gcc/config/arm/sync.md b/gcc/config/arm/sync.md
index f942d1f..4c4b4fa 100644
--- a/gcc/config/arm/sync.md
+++ b/gcc/config/arm/sync.md
@@ -300,7 +300,7 @@
(set_attr "sync_new_value" "3")
(set_attr "sync_t1" "0")
(set_attr "sync_t2" "4")
- (set_attr "conds" "nocond")
+ (set_attr "conds" "clob")
(set_attr "predicable" "no")])
(define_insn "arm_sync_compare_and_swap<mode>"
@@ -327,7 +327,7 @@
(set_attr "sync_new_value" "3")
(set_attr "sync_t1" "0")
(set_attr "sync_t2" "4")
- (set_attr "conds" "nocond")
+ (set_attr "conds" "clob")
(set_attr "predicable" "no")])
(define_insn "arm_sync_lock_test_and_setsi"
@@ -348,7 +348,7 @@
(set_attr "sync_new_value" "2")
(set_attr "sync_t1" "0")
(set_attr "sync_t2" "3")
- (set_attr "conds" "nocond")
+ (set_attr "conds" "clob")
(set_attr "predicable" "no")])
(define_insn "arm_sync_lock_test_and_set<mode>"
@@ -369,7 +369,7 @@
(set_attr "sync_new_value" "2")
(set_attr "sync_t1" "0")
(set_attr "sync_t2" "3")
- (set_attr "conds" "nocond")
+ (set_attr "conds" "clob")
(set_attr "predicable" "no")])
(define_insn "arm_sync_new_<sync_optab>si"
@@ -394,7 +394,7 @@
(set_attr "sync_t1" "0")
(set_attr "sync_t2" "3")
(set_attr "sync_op" "<sync_optab>")
- (set_attr "conds" "nocond")
+ (set_attr "conds" "clob")
(set_attr "predicable" "no")])
(define_insn "arm_sync_new_nandsi"
@@ -419,7 +419,7 @@
(set_attr "sync_t1" "0")
(set_attr "sync_t2" "3")
(set_attr "sync_op" "nand")
- (set_attr "conds" "nocond")
+ (set_attr "conds" "clob")
(set_attr "predicable" "no")])
(define_insn "arm_sync_new_<sync_optab><mode>"
@@ -445,7 +445,7 @@
(set_attr "sync_t1" "0")
(set_attr "sync_t2" "3")
(set_attr "sync_op" "<sync_optab>")
- (set_attr "conds" "nocond")
+ (set_attr "conds" "clob")
(set_attr "predicable" "no")])
(define_insn "arm_sync_new_nand<mode>"
@@ -472,7 +472,7 @@
(set_attr "sync_t1" "0")
(set_attr "sync_t2" "3")
(set_attr "sync_op" "nand")
- (set_attr "conds" "nocond")
+ (set_attr "conds" "clob")
(set_attr "predicable" "no")])
(define_insn "arm_sync_old_<sync_optab>si"
@@ -498,7 +498,7 @@
(set_attr "sync_t1" "3")
(set_attr "sync_t2" "4")
(set_attr "sync_op" "<sync_optab>")
- (set_attr "conds" "nocond")
+ (set_attr "conds" "clob")
(set_attr "predicable" "no")])
(define_insn "arm_sync_old_nandsi"
@@ -524,7 +524,7 @@
(set_attr "sync_t1" "3")
(set_attr "sync_t2" "4")
(set_attr "sync_op" "nand")
- (set_attr "conds" "nocond")
+ (set_attr "conds" "clob")
(set_attr "predicable" "no")])
(define_insn "arm_sync_old_<sync_optab><mode>"
@@ -551,7 +551,7 @@
(set_attr "sync_t1" "3")
(set_attr "sync_t2" "4")
(set_attr "sync_op" "<sync_optab>")
- (set_attr "conds" "nocond")
+ (set_attr "conds" "clob")
(set_attr "predicable" "no")])
(define_insn "arm_sync_old_nand<mode>"
@@ -578,7 +578,7 @@
(set_attr "sync_t1" "3")
(set_attr "sync_t2" "4")
(set_attr "sync_op" "nand")
- (set_attr "conds" "nocond")
+ (set_attr "conds" "clob")
(set_attr "predicable" "no")])
(define_insn "*memory_barrier"
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index f01d8ba..efcecb6 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2010-09-13 Marcus Shawcroft <marcus.shawcroft@arm.com>
+
+ * gcc.target/arm/sync-1.c: New.
+
2010-09-12 Olivier Hainque <hainque@adacore.com>
* gnat.dg/memtrap.adb: New test.
diff --git a/gcc/testsuite/gcc.target/arm/sync-1.c b/gcc/testsuite/gcc.target/arm/sync-1.c
new file mode 100644
index 0000000..ad85a04
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/sync-1.c
@@ -0,0 +1,25 @@
+/* { dg-do run } */
+/* { dg-options "-O2 -march=armv7-a" } */
+
+volatile int mem;
+
+int
+bar (int x, int y)
+{
+ if (x)
+ __sync_fetch_and_add(&mem, y);
+ return 0;
+}
+
+extern void abort (void);
+
+int
+main (int argc, char *argv[])
+{
+ mem = 0;
+ bar (0, 1);
+ bar (1, 1);
+ if (mem != 1)
+ abort ();
+ return 0;
+}