diff options
author | Andreas Schwab <schwab@redhat.com> | 2011-07-22 14:33:47 -0400 |
---|---|---|
committer | Ulrich Drepper <drepper@gmail.com> | 2011-07-22 14:33:47 -0400 |
commit | 1d002f25399c0a0ed2cc276d4ee18db869152384 (patch) | |
tree | da4bbc2c62208bb83945a78a7ac571bcd284e925 /sysdeps | |
parent | a65c0b7a322d0084672bc7fc4b51af8f2a054d57 (diff) | |
download | glibc-1d002f25399c0a0ed2cc276d4ee18db869152384.tar glibc-1d002f25399c0a0ed2cc276d4ee18db869152384.tar.gz glibc-1d002f25399c0a0ed2cc276d4ee18db869152384.tar.bz2 glibc-1d002f25399c0a0ed2cc276d4ee18db869152384.zip |
Fix AVX check
Diffstat (limited to 'sysdeps')
-rw-r--r-- | sysdeps/x86_64/dl-trampoline.S | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/sysdeps/x86_64/dl-trampoline.S b/sysdeps/x86_64/dl-trampoline.S index 1b97929aaa..ad7479fd29 100644 --- a/sysdeps/x86_64/dl-trampoline.S +++ b/sysdeps/x86_64/dl-trampoline.S @@ -150,7 +150,8 @@ L(have_avx): cmpl $0x6, %eax // Nonzero if SSE and AVX state saving is enabled. sete %al -2: movl %eax, L(have_avx)(%rip) +2: leal -1(%eax,%eax), %eax + movl %eax, L(have_avx)(%rip) cmpl $0, %eax 1: js L(no_avx) @@ -183,11 +184,19 @@ _dl_x86_64_save_sse: movl $1, %eax cpuid movq %r11,%rbx # Restore rbx - movl $1, %eax - testl $(1 << 28), %ecx - jne 2f - negl %eax -2: movl %eax, L(have_avx)(%rip) + xorl %eax, %eax + // AVX and XSAVE supported? + testl $((1 << 28) | (1 << 27)), %ecx + je 2f + xorl %ecx, %ecx + // Get XFEATURE_ENABLED_MASK + xgetbv + andl $0x6, %eax + cmpl $0x6, %eax + // Nonzero if SSE and AVX state saving is enabled. + sete %al +2: leal -1(%eax,%eax), %eax + movl %eax, L(have_avx)(%rip) cmpl $0, %eax 1: js L(no_avx5) |