This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

PATCH: Support xsave64 and xrstor64


On Thu, Dec 03, 2009 at 11:49:24PM -0800, H.J. Lu wrote:
> I am checking in this patch to support fxsave64 and fxrstor64.
> 
> 

I checked in this patch to support xsave64 and xrstor64.


H.J.
----
gas/testsuite/

2010-02-21  H.J. Lu  <hongjiu.lu@intel.com>

	* gas/i386/x86-64-xsave.s: Add tests for xsave64 and xrstor64.

	* gas/i386/x86-64-xsave-intel.d: Updated.
	* gas/i386/x86-64-xsave.d: Likewise.

opcodes/

2010-02-21  H.J. Lu  <hongjiu.lu@intel.com>

	* i386-dis.c (mod_table): Use FXSAVE on xsave and xrstor.

	* i386-opc.tbl: Add xsave64 and xrstor64.
	* i386-tbl.h: Regenerated.

diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog
index 28b4713..925191e 100644
--- a/gas/testsuite/ChangeLog
+++ b/gas/testsuite/ChangeLog
@@ -1,3 +1,10 @@
+2010-02-21  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* gas/i386/x86-64-xsave.s: Add tests for xsave64 and xrstor64.
+
+	* gas/i386/x86-64-xsave-intel.d: Updated.
+	* gas/i386/x86-64-xsave.d: Likewise.
+
 2010-01-20  Nick Clifton  <nickc@redhat.com>
 
 	PR 11109
diff --git a/gas/testsuite/gas/i386/x86-64-xsave-intel.d b/gas/testsuite/gas/i386/x86-64-xsave-intel.d
index 4659a2e..ae506d6 100644
--- a/gas/testsuite/gas/i386/x86-64-xsave-intel.d
+++ b/gas/testsuite/gas/i386/x86-64-xsave-intel.d
@@ -8,10 +8,44 @@
 Disassembly of section .text:
 
 0+ <_start>:
-[ 	]*[a-f0-9]+:	41 0f ae 29          	xrstor \[r9\]
-[ 	]*[a-f0-9]+:	41 0f ae 21          	xsave  \[r9\]
 [ 	]*[a-f0-9]+:	0f 01 d0             	xgetbv 
 [ 	]*[a-f0-9]+:	0f 01 d1             	xsetbv 
-[ 	]*[a-f0-9]+:	0f ae 29             	xrstor \[rcx\]
-[ 	]*[a-f0-9]+:	0f ae 21             	xsave  \[rcx\]
+[ 	]*[a-f0-9]+:	0f ae 20             	xsave  \[rax\]
+[ 	]*[a-f0-9]+:	41 0f ae 20          	xsave  \[r8\]
+[ 	]*[a-f0-9]+:	41 0f ae 24 00       	xsave  \[r8\+rax\*1\]
+[ 	]*[a-f0-9]+:	42 0f ae 24 00       	xsave  \[rax\+r8\*1\]
+[ 	]*[a-f0-9]+:	43 0f ae 24 38       	xsave  \[r8\+r15\*1\]
+[ 	]*[a-f0-9]+:	48 0f ae 20          	xsave64 \[rax\]
+[ 	]*[a-f0-9]+:	49 0f ae 20          	xsave64 \[r8\]
+[ 	]*[a-f0-9]+:	49 0f ae 24 00       	xsave64 \[r8\+rax\*1\]
+[ 	]*[a-f0-9]+:	4a 0f ae 24 00       	xsave64 \[rax\+r8\*1\]
+[ 	]*[a-f0-9]+:	0f ae 28             	xrstor \[rax\]
+[ 	]*[a-f0-9]+:	41 0f ae 28          	xrstor \[r8\]
+[ 	]*[a-f0-9]+:	41 0f ae 2c 00       	xrstor \[r8\+rax\*1\]
+[ 	]*[a-f0-9]+:	42 0f ae 2c 00       	xrstor \[rax\+r8\*1\]
+[ 	]*[a-f0-9]+:	43 0f ae 2c 38       	xrstor \[r8\+r15\*1\]
+[ 	]*[a-f0-9]+:	48 0f ae 28          	xrstor64 \[rax\]
+[ 	]*[a-f0-9]+:	49 0f ae 28          	xrstor64 \[r8\]
+[ 	]*[a-f0-9]+:	49 0f ae 2c 00       	xrstor64 \[r8\+rax\*1\]
+[ 	]*[a-f0-9]+:	4a 0f ae 2c 00       	xrstor64 \[rax\+r8\*1\]
+[ 	]*[a-f0-9]+:	4b 0f ae 2c 38       	xrstor64 \[r8\+r15\*1\]
+[ 	]*[a-f0-9]+:	0f ae 20             	xsave  \[rax\]
+[ 	]*[a-f0-9]+:	41 0f ae 20          	xsave  \[r8\]
+[ 	]*[a-f0-9]+:	41 0f ae 24 00       	xsave  \[r8\+rax\*1\]
+[ 	]*[a-f0-9]+:	42 0f ae 24 00       	xsave  \[rax\+r8\*1\]
+[ 	]*[a-f0-9]+:	43 0f ae 24 38       	xsave  \[r8\+r15\*1\]
+[ 	]*[a-f0-9]+:	48 0f ae 20          	xsave64 \[rax\]
+[ 	]*[a-f0-9]+:	49 0f ae 20          	xsave64 \[r8\]
+[ 	]*[a-f0-9]+:	49 0f ae 24 00       	xsave64 \[r8\+rax\*1\]
+[ 	]*[a-f0-9]+:	4a 0f ae 24 00       	xsave64 \[rax\+r8\*1\]
+[ 	]*[a-f0-9]+:	0f ae 28             	xrstor \[rax\]
+[ 	]*[a-f0-9]+:	41 0f ae 28          	xrstor \[r8\]
+[ 	]*[a-f0-9]+:	41 0f ae 2c 00       	xrstor \[r8\+rax\*1\]
+[ 	]*[a-f0-9]+:	42 0f ae 2c 00       	xrstor \[rax\+r8\*1\]
+[ 	]*[a-f0-9]+:	43 0f ae 2c 38       	xrstor \[r8\+r15\*1\]
+[ 	]*[a-f0-9]+:	48 0f ae 28          	xrstor64 \[rax\]
+[ 	]*[a-f0-9]+:	49 0f ae 28          	xrstor64 \[r8\]
+[ 	]*[a-f0-9]+:	49 0f ae 2c 00       	xrstor64 \[r8\+rax\*1\]
+[ 	]*[a-f0-9]+:	4a 0f ae 2c 00       	xrstor64 \[rax\+r8\*1\]
+[ 	]*[a-f0-9]+:	4b 0f ae 2c 38       	xrstor64 \[r8\+r15\*1\]
 #pass
diff --git a/gas/testsuite/gas/i386/x86-64-xsave.d b/gas/testsuite/gas/i386/x86-64-xsave.d
index cf07cda..05114fb 100644
--- a/gas/testsuite/gas/i386/x86-64-xsave.d
+++ b/gas/testsuite/gas/i386/x86-64-xsave.d
@@ -6,10 +6,44 @@
 Disassembly of section .text:
 
 0+ <_start>:
-[ 	]*[a-f0-9]+:	41 0f ae 29          	xrstor \(%r9\)
-[ 	]*[a-f0-9]+:	41 0f ae 21          	xsave  \(%r9\)
 [ 	]*[a-f0-9]+:	0f 01 d0             	xgetbv 
 [ 	]*[a-f0-9]+:	0f 01 d1             	xsetbv 
-[ 	]*[a-f0-9]+:	0f ae 29             	xrstor \(%rcx\)
-[ 	]*[a-f0-9]+:	0f ae 21             	xsave  \(%rcx\)
+[ 	]*[a-f0-9]+:	0f ae 20             	xsave  \(%rax\)
+[ 	]*[a-f0-9]+:	41 0f ae 20          	xsave  \(%r8\)
+[ 	]*[a-f0-9]+:	41 0f ae 24 00       	xsave  \(%r8,%rax,1\)
+[ 	]*[a-f0-9]+:	42 0f ae 24 00       	xsave  \(%rax,%r8,1\)
+[ 	]*[a-f0-9]+:	43 0f ae 24 38       	xsave  \(%r8,%r15,1\)
+[ 	]*[a-f0-9]+:	48 0f ae 20          	xsave64 \(%rax\)
+[ 	]*[a-f0-9]+:	49 0f ae 20          	xsave64 \(%r8\)
+[ 	]*[a-f0-9]+:	49 0f ae 24 00       	xsave64 \(%r8,%rax,1\)
+[ 	]*[a-f0-9]+:	4a 0f ae 24 00       	xsave64 \(%rax,%r8,1\)
+[ 	]*[a-f0-9]+:	0f ae 28             	xrstor \(%rax\)
+[ 	]*[a-f0-9]+:	41 0f ae 28          	xrstor \(%r8\)
+[ 	]*[a-f0-9]+:	41 0f ae 2c 00       	xrstor \(%r8,%rax,1\)
+[ 	]*[a-f0-9]+:	42 0f ae 2c 00       	xrstor \(%rax,%r8,1\)
+[ 	]*[a-f0-9]+:	43 0f ae 2c 38       	xrstor \(%r8,%r15,1\)
+[ 	]*[a-f0-9]+:	48 0f ae 28          	xrstor64 \(%rax\)
+[ 	]*[a-f0-9]+:	49 0f ae 28          	xrstor64 \(%r8\)
+[ 	]*[a-f0-9]+:	49 0f ae 2c 00       	xrstor64 \(%r8,%rax,1\)
+[ 	]*[a-f0-9]+:	4a 0f ae 2c 00       	xrstor64 \(%rax,%r8,1\)
+[ 	]*[a-f0-9]+:	4b 0f ae 2c 38       	xrstor64 \(%r8,%r15,1\)
+[ 	]*[a-f0-9]+:	0f ae 20             	xsave  \(%rax\)
+[ 	]*[a-f0-9]+:	41 0f ae 20          	xsave  \(%r8\)
+[ 	]*[a-f0-9]+:	41 0f ae 24 00       	xsave  \(%r8,%rax,1\)
+[ 	]*[a-f0-9]+:	42 0f ae 24 00       	xsave  \(%rax,%r8,1\)
+[ 	]*[a-f0-9]+:	43 0f ae 24 38       	xsave  \(%r8,%r15,1\)
+[ 	]*[a-f0-9]+:	48 0f ae 20          	xsave64 \(%rax\)
+[ 	]*[a-f0-9]+:	49 0f ae 20          	xsave64 \(%r8\)
+[ 	]*[a-f0-9]+:	49 0f ae 24 00       	xsave64 \(%r8,%rax,1\)
+[ 	]*[a-f0-9]+:	4a 0f ae 24 00       	xsave64 \(%rax,%r8,1\)
+[ 	]*[a-f0-9]+:	0f ae 28             	xrstor \(%rax\)
+[ 	]*[a-f0-9]+:	41 0f ae 28          	xrstor \(%r8\)
+[ 	]*[a-f0-9]+:	41 0f ae 2c 00       	xrstor \(%r8,%rax,1\)
+[ 	]*[a-f0-9]+:	42 0f ae 2c 00       	xrstor \(%rax,%r8,1\)
+[ 	]*[a-f0-9]+:	43 0f ae 2c 38       	xrstor \(%r8,%r15,1\)
+[ 	]*[a-f0-9]+:	48 0f ae 28          	xrstor64 \(%rax\)
+[ 	]*[a-f0-9]+:	49 0f ae 28          	xrstor64 \(%r8\)
+[ 	]*[a-f0-9]+:	49 0f ae 2c 00       	xrstor64 \(%r8,%rax,1\)
+[ 	]*[a-f0-9]+:	4a 0f ae 2c 00       	xrstor64 \(%rax,%r8,1\)
+[ 	]*[a-f0-9]+:	4b 0f ae 2c 38       	xrstor64 \(%r8,%r15,1\)
 #pass
diff --git a/gas/testsuite/gas/i386/x86-64-xsave.s b/gas/testsuite/gas/i386/x86-64-xsave.s
index 076706f..b32dc6e 100644
--- a/gas/testsuite/gas/i386/x86-64-xsave.s
+++ b/gas/testsuite/gas/i386/x86-64-xsave.s
@@ -1,11 +1,46 @@
 # Check 64bit xsave/xrstor
 	.text
 _start:
-	xrstor		(%r9)
-	xsave		(%r9)
 	xgetbv
 	xsetbv
 
+	xsave (%rax)
+	xsave (%r8)
+	xsave (%r8, %rax)
+	xsave (%rax, %r8)
+	xsave (%r8, %r15)
+	xsave64 (%rax)
+	xsave64 (%r8)
+	xsave64 (%r8, %rax)
+	xsave64 (%rax, %r8)
+	xrstor (%rax)
+	xrstor (%r8)
+	xrstor (%r8, %rax)
+	xrstor (%rax, %r8)
+	xrstor (%r8, %r15)
+	xrstor64 (%rax)
+	xrstor64 (%r8)
+	xrstor64 (%r8, %rax)
+	xrstor64 (%rax, %r8)
+	xrstor64 (%r8, %r15)
+
 	.intel_syntax noprefix
-	xrstor		[rcx]
-	xsave		[rcx]
+	xsave [rax]
+	xsave [r8]
+	xsave [r8+rax*1]
+	xsave [rax+r8*1]
+	xsave [r8+r15*1]
+	xsave64 [rax]
+	xsave64 [r8]
+	xsave64 [r8+rax*1]
+	xsave64 [rax+r8*1]
+	xrstor [rax]
+	xrstor [r8]
+	xrstor [r8+rax*1]
+	xrstor [rax+r8*1]
+	xrstor [r8+r15*1]
+	xrstor64 [rax]
+	xrstor64 [r8]
+	xrstor64 [r8+rax*1]
+	xrstor64 [rax+r8*1]
+	xrstor64 [r8+r15*1]
diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog
index a403d40..b126987 100644
--- a/opcodes/ChangeLog
+++ b/opcodes/ChangeLog
@@ -1,3 +1,10 @@
+2010-02-21  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* i386-dis.c (mod_table): Use FXSAVE on xsave and xrstor.
+
+	* i386-opc.tbl: Add xsave64 and xrstor64.
+	* i386-tbl.h: Regenerated.
+
 2010-01-20  Nick Clifton  <nickc@redhat.com>
 
 	PR 11170
diff --git a/opcodes/i386-dis.c b/opcodes/i386-dis.c
index 72e39a1..20decd1 100644
--- a/opcodes/i386-dis.c
+++ b/opcodes/i386-dis.c
@@ -11127,17 +11127,17 @@ static const struct dis386 mod_table[][2] = {
   },
   {
     /* MOD_0FAE_REG_4 */
-    { "xsave",		{ M } },
+    { "xsave",		{ FXSAVE } },
     { "(bad)",		{ XX } },
   },
   {
     /* MOD_0FAE_REG_5 */
-    { "xrstor",		{ M } },
+    { "xrstor",		{ FXSAVE } },
     { RM_TABLE (RM_0FAE_REG_5) },
   },
   {
     /* MOD_0FAE_REG_6 */
-    { "xsaveopt",	{ M } },
+    { "(bad)",		{ XX } },
     { RM_TABLE (RM_0FAE_REG_6) },
   },
   {
diff --git a/opcodes/i386-opc.tbl b/opcodes/i386-opc.tbl
index 05e4e10..8119556 100644
--- a/opcodes/i386-opc.tbl
+++ b/opcodes/i386-opc.tbl
@@ -1748,7 +1748,9 @@ crc32, 2, 0xf20f38f0, None, 3, CpuSSE4_2|Cpu64, Modrm|No_wSuf|No_lSuf|No_sSuf|No
 // xsave/xrstor New Instructions.
 
 xsave, 1, 0xfae, 0x4, 2, CpuXsave, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf, { Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+xsave64, 1, 0xfae, 0x4, 2, CpuXsave|Cpu64, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|Rex64, { Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
 xrstor, 1, 0xfae, 0x5, 2, CpuXsave, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf, { Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+xrstor64, 1, 0xfae, 0x5, 2, CpuXsave|Cpu64, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|Rex64, { Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
 xgetbv, 0, 0xf01, 0xd0, 2, CpuXsave, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { 0 }
 xsetbv, 0, 0xf01, 0xd1, 2, CpuXsave, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { 0 }
 
diff --git a/opcodes/i386-tbl.h b/opcodes/i386-tbl.h
index 79d71a7..461ffe3 100644
--- a/opcodes/i386-tbl.h
+++ b/opcodes/i386-tbl.h
@@ -17798,6 +17798,16 @@ const insn_template i386_optab[] =
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0 } } } },
+  { "xsave64", 1, 0xfae, 0x4, 2,
+    { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 1, 0, 0 } },
+    { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 
+      1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0 },
+    { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+	  0, 0, 1, 0, 0 } } } },
   { "xrstor", 1, 0xfae, 0x5, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
@@ -17808,6 +17818,16 @@ const insn_template i386_optab[] =
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0 } } } },
+  { "xrstor64", 1, 0xfae, 0x5, 2,
+    { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 1, 0, 0 } },
+    { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 
+      1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0 },
+    { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+	  0, 0, 1, 0, 0 } } } },
   { "xgetbv", 0, 0xf01, 0xd0, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]