https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67995
Bug ID: 67995 Summary: __attribute__ ((target("arch=XXX"))) enables unsupported ISA Product: gcc Version: 5.3.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: hjl.tools at gmail dot com Target Milestone: --- [hjl@gnu-6 pr67985]$ cat r.i unsigned int __attribute__ ((target("arch=core2"))) __x86_rdrand(void) { unsigned int retries = 100; unsigned int val; while (__builtin_ia32_rdrand32_step(&val) == 0) if (--retries == 0) return 0; return val; } [hjl@gnu-6 pr67985]$ /export/build/gnu/gcc-test/build-x86_64-linux/gcc/xgcc -B/export/build/gnu/gcc-test/build-x86_64-linux/gcc/ -O2 -march=haswell -S -o r.s r.i [hjl@gnu-6 pr67985]$ cat r.s .file "r.i" .text .p2align 4,,15 .globl __x86_rdrand .type __x86_rdrand, @function __x86_rdrand: .LFB0: .cfi_startproc movl $100, %eax movl $1, %ecx jmp .L2 .p2align 4 .L4: subl $1, %eax je .L8 .L2: rdrand %edx movl %edx, -4(%rsp) cmovc %ecx, %edx testl %edx, %edx je .L4 movl -4(%rsp), %eax .L8: ret .cfi_endproc .LFE0: .size __x86_rdrand, .-__x86_rdrand .ident "GCC: (GNU) 6.0.0 20151016 (experimental)" .section .note.GNU-stack,"",@progbits [hjl@gnu-6 pr67985]$ There should be a warning since rdrand isn't supported on Intel Core 2.