Hi, atm I get these failures for x86_64 -m32: ... FAIL: g++.dg/other/pr59492.C -std=gnu++11 (test for excess errors) FAIL: g++.dg/other/pr59492.C -std=gnu++14 (test for excess errors) FAIL: g++.dg/other/pr59492.C -std=gnu++98 (test for excess errors) ...
More specifically: ... /tmp/ccSwV0hl.s: Assembler messages: /tmp/ccSwV0hl.s:24: Error: no such instruction: `rdrand %edx' compiler exited with status 1 ... This patch turns the FAIL into an UNSUPPORTED. Committed as obvious. Thanks, - Tom
Add and use effective target rdrand 2017-05-01 Tom de Vries <t...@codesourcery.com> PR testsuite/65941 * lib/target-supports.exp (check_effective_target_rdrand): New proc. * g++.dg/other/pr59492.C: Require effective target rdrand. --- gcc/testsuite/g++.dg/other/pr59492.C | 1 + gcc/testsuite/lib/target-supports.exp | 14 ++++++++++++++ 2 files changed, 15 insertions(+) diff --git a/gcc/testsuite/g++.dg/other/pr59492.C b/gcc/testsuite/g++.dg/other/pr59492.C index 84bd255..92694ae 100644 --- a/gcc/testsuite/g++.dg/other/pr59492.C +++ b/gcc/testsuite/g++.dg/other/pr59492.C @@ -2,6 +2,7 @@ // { dg-options "-mx32 -fPIC" } // { dg-require-ifunc "" } // { dg-require-effective-target maybe_x32 } +// { dg-require-effective-target rdrand } void __throw_runtime_error(const char*) __attribute__((__noreturn__)); diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index 342af27..83e7f26 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -8296,6 +8296,20 @@ proc check_effective_target_store_merge { } { return 0 } +# Return 1 if we're able to assemble rdrand + +proc check_effective_target_rdrand { } { + return [check_no_compiler_messages_nocache rdrand object { + unsigned int + __foo(void) + { + unsigned int val; + __builtin_ia32_rdrand32_step(&val); + return val; + } + } "-mrdrnd" ] +} + # Return 1 if the target supports coprocessor instructions: cdp, ldc, stc, mcr and # mrc. proc check_effective_target_arm_coproc1_ok_nocache { } {