diff options
author | hjl <hjl@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-05-21 12:59:53 +0000 |
---|---|---|
committer | hjl <hjl@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-05-21 12:59:53 +0000 |
commit | 0644e52d9cd1db02c079c296905bc2b087a6d640 (patch) | |
tree | bdfd6a6f8642e706e33be0a9815c7d6f4c4896ce | |
parent | fc206018c5c5db74eb5a6cf289b2611ad053544b (diff) | |
download | gcc-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/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/config/i386/i386.md | 10 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/pr53416.c | 17 |
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 } } */ |