about summary refs log tree commit diff
diff options
context:
space:
mode:
authorAndreas Schwab <schwab@redhat.com>2011-07-22 14:33:47 -0400
committerAndreas Schwab <schwab@redhat.com>2011-07-25 10:04:58 +0200
commitd73a25eba31dbdddbb2f13ec2d1372599bdf6b3c (patch)
tree056f4afeac7785eb75094558eeda0cf05ca5ec39
parent722bff7a4ccceeded69ac8c412ff5ee5859964e7 (diff)
downloadglibc-d73a25eba31dbdddbb2f13ec2d1372599bdf6b3c.tar.gz
glibc-d73a25eba31dbdddbb2f13ec2d1372599bdf6b3c.tar.xz
glibc-d73a25eba31dbdddbb2f13ec2d1372599bdf6b3c.zip
Fix AVX check
(cherry picked from commit 1d002f25399c0a0ed2cc276d4ee18db869152384)
-rw-r--r--ChangeLog6
-rw-r--r--sysdeps/x86_64/dl-trampoline.S21
2 files changed, 21 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog
index 9b130a5cd7..6f698c693b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2011-07-21  Andreas Schwab  <schwab@redhat.com>
+
+	* sysdeps/x86_64/dl-trampoline.S (_dl_runtime_profile): Fix last
+	change.
+	(_dl_x86_64_save_sse): Use correct AVX check.
+
 2011-07-20  Ulrich Drepper  <drepper@gmail.com>
 
 	[BZ #13007]
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)