summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhjl <hjl@138bc75d-0d04-0410-961f-82ee72b054a4>2012-05-21 12:59:53 +0000
committerhjl <hjl@138bc75d-0d04-0410-961f-82ee72b054a4>2012-05-21 12:59:53 +0000
commit0644e52d9cd1db02c079c296905bc2b087a6d640 (patch)
treebdfd6a6f8642e706e33be0a9815c7d6f4c4896ce
parentfc206018c5c5db74eb5a6cf289b2611ad053544b (diff)
downloadgcc-0644e52d9cd1db02c079c296905bc2b087a6d640.tar.gz
Use unspec_volatile on rdrand<mode>_1
gcc/ Backport from mainline PR target/53416 * config/i386/i386.md (UNSPEC_RDRAND): Renamed to ... (UNSPECV_RDRAND): This. (rdrand<mode>_1): Updated. gcc/testsuite/ Backport from mainline PR target/53416 * gcc.target/i386/pr53416.c: New file. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@187712 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog10
-rw-r--r--gcc/config/i386/i386.md10
-rw-r--r--gcc/testsuite/ChangeLog9
-rw-r--r--gcc/testsuite/gcc.target/i386/pr53416.c17
4 files changed, 41 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index a4eb0e6f197..89d9a2f4404 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,13 @@
+2012-05-21 H.J. Lu <hongjiu.lu@intel.com>
+
+ Backport from mainline
+ 2012-05-21 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR target/53416
+ * config/i386/i386.md (UNSPEC_RDRAND): Renamed to ...
+ (UNSPECV_RDRAND): This.
+ (rdrand<mode>_1): Updated.
+
2012-05-20 H.J. Lu <hongjiu.lu@intel.com>
Backport from mainline
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index 42efde0d58e..c2db9cece5a 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -233,9 +233,6 @@
;; For BMI support
UNSPEC_BEXTR
-
- ;; For RDRAND support
- UNSPEC_RDRAND
])
(define_c_enum "unspecv" [
@@ -270,6 +267,9 @@
UNSPECV_WRFSBASE
UNSPECV_WRGSBASE
UNSPECV_SPLIT_STACK_RETURN
+
+ ;; For RDRAND support
+ UNSPECV_RDRAND
])
;; Constants to represent pcomtrue/pcomfalse variants
@@ -18358,9 +18358,9 @@
(define_insn "rdrand<mode>_1"
[(set (match_operand:SWI248 0 "register_operand" "=r")
- (unspec:SWI248 [(const_int 0)] UNSPEC_RDRAND))
+ (unspec_volatile:SWI248 [(const_int 0)] UNSPECV_RDRAND))
(set (reg:CCC FLAGS_REG)
- (unspec:CCC [(const_int 0)] UNSPEC_RDRAND))]
+ (unspec_volatile:CCC [(const_int 0)] UNSPECV_RDRAND))]
"TARGET_RDRND"
"rdrand\t%0"
[(set_attr "type" "other")
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 327205980e6..bf146b83e52 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,12 @@
+2012-05-21 H.J. Lu <hongjiu.lu@intel.com>
+
+ Backport from mainline
+ 2012-05-21 Uros Bizjak <ubizjak@gmail.com>
+ H.J. Lu <hongjiu.lu@intel.com>
+
+ PR target/53416
+ * gcc.target/i386/pr53416.c: New file.
+
2012-05-14 Uros Bizjak <ubizjak@gmail.com>
* gcc.target/i386/avx256-unaligned-load-[1234].c: Update scan strings.
diff --git a/gcc/testsuite/gcc.target/i386/pr53416.c b/gcc/testsuite/gcc.target/i386/pr53416.c
new file mode 100644
index 00000000000..68abe8bddbc
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr53416.c
@@ -0,0 +1,17 @@
+/* PR target/53416 */
+/* { dg-options "-O2 -mrdrnd" } */
+
+int test (void)
+{
+ unsigned int number = 0;
+ int result0, result1, result2, result3;
+
+ result0 = __builtin_ia32_rdrand32_step (&number);
+ result1 = __builtin_ia32_rdrand32_step (&number);
+ result2 = __builtin_ia32_rdrand32_step (&number);
+ result3 = __builtin_ia32_rdrand32_step (&number);
+
+ return result0 + result1 +result2 + result3;
+}
+
+/* { dg-final { scan-assembler-times "rdrand" 4 } } */