Add xsave64 and xrstor64.

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.
This commit is contained in:
H.J. Lu 2010-01-21 17:30:14 +00:00
parent 0d5392b8b1
commit 73bb672904
8 changed files with 154 additions and 15 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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]

View File

@ -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

View File

@ -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) },
},
{

View File

@ -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 }

View File

@ -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,