gas/testsuite/gas/

2007-09-27  H.J. Lu  <hongjiu.lu@intel.com>

	PR binutils/5072
	* gas/i386/i386.exp: Run x86-64-opcode-inval and
	x86-64-opcode-inval-intel.

	* gas/i386/x86-64-opcode-inval-intel.d: New.
	* gas/i386/x86-64-opcode-inval.d: Likewise.
	* gas/i386/x86-64-opcode-inval.s: Likewise.

opcodes/

2007-09-27  H.J. Lu  <hongjiu.lu@intel.com>

	PR binutils/5072
	* i386-dis.c: Update comments on '{', '}' and '|' to support
	only AT&T and Intel modes.
	(X86_64_4...X86_64_27): New.
	(dis386): Updated.  Use X86_64_4...X86_64_21.
	(dis386_twobyte): Updated.
	(float_mem): Likewise.
	(x86_64_table): Add X86_64_4...X86_64_27.
	(opc_ext_table): Updated.  Use X86_64_22 and X86_64_27.
	(putop): Updated handling of '{', '}' and '|' to support only
	AT&T and Intel modes.
This commit is contained in:
H.J. Lu 2007-09-27 18:31:51 +00:00
parent 7a4d50bfe0
commit 7c52e0e865
7 changed files with 425 additions and 96 deletions

View File

@ -1,3 +1,13 @@
2007-09-27 H.J. Lu <hongjiu.lu@intel.com>
PR binutils/5072
* gas/i386/i386.exp: Run x86-64-opcode-inval and
x86-64-opcode-inval-intel.
* gas/i386/x86-64-opcode-inval-intel.d: New.
* gas/i386/x86-64-opcode-inval.d: Likewise.
* gas/i386/x86-64-opcode-inval.s: Likewise.
2007-09-27 Kazu Hirata <kazu@codesourcery.com>
* gas/m68k/fido.s: Add tests for %mbo.

View File

@ -199,6 +199,8 @@ if [expr ([istarget "i*86-*-*"] || [istarget "x86_64-*-*"]) && [gas_64_check]] t
run_dump_test "x86-64-reg-intel"
run_dump_test "x86-64-sib"
run_dump_test "x86-64-sib-intel"
run_dump_test "x86-64-opcode-inval"
run_dump_test "x86-64-opcode-inval-intel"
if { ![istarget "*-*-aix*"]
&& ![istarget "*-*-beos*"]

View File

@ -0,0 +1,58 @@
#as: --32
#source: x86-64-opcode-inval.s
#objdump: -dw -Mx86-64 -Mintel
#name: 64bit illegal opcodes (Intel mode)
.*: +file format .*
Disassembly of section .text:
0+ <aaa>:
[ ]*[a-f0-9]+: 37 \(bad\)
0+1 <aad0>:
[ ]*[a-f0-9]+: d5 \(bad\)
[ ]*[a-f0-9]+: 0a d5 or dl,ch
0+3 <aad1>:
[ ]*[a-f0-9]+: d5 \(bad\)
[ ]*[a-f0-9]+: 02 d4 add dl,ah
0+5 <aam0>:
[ ]*[a-f0-9]+: d4 \(bad\)
[ ]*[a-f0-9]+: 0a d4 or dl,ah
0+7 <aam1>:
[ ]*[a-f0-9]+: d4 \(bad\)
[ ]*[a-f0-9]+: 02 3f add bh,BYTE PTR \[rdi\]
0+9 <aas>:
[ ]*[a-f0-9]+: 3f \(bad\)
0+a <bound>:
[ ]*[a-f0-9]+: 62 \(bad\)
[ ]*[a-f0-9]+: 10 27 adc BYTE PTR \[rdi\],ah
0+c <daa>:
[ ]*[a-f0-9]+: 27 \(bad\)
0+d <das>:
[ ]*[a-f0-9]+: 2f \(bad\)
0+e <into>:
[ ]*[a-f0-9]+: ce \(bad\)
0+f <lds>:
[ ]*[a-f0-9]+: c5 \(bad\)
[ ]*[a-f0-9]+: 10 c4 adc ah,al
0+11 <les>:
[ ]*[a-f0-9]+: c4 \(bad\)
[ ]*[a-f0-9]+: 10 60 61 adc BYTE PTR \[rax\+0x61\],ah
0+13 <pusha>:
[ ]*[a-f0-9]+: 60 \(bad\)
0+14 <popa>:
[ ]*[a-f0-9]+: 61 \(bad\)
#pass

View File

@ -0,0 +1,57 @@
#as: --32
#objdump: -dw -Mx86-64
#name: 64bit illegal opcodes
.*: +file format .*
Disassembly of section .text:
0+ <aaa>:
[ ]*[a-f0-9]+: 37 \(bad\)
0+1 <aad0>:
[ ]*[a-f0-9]+: d5 \(bad\)
[ ]*[a-f0-9]+: 0a d5 or %ch,%dl
0+3 <aad1>:
[ ]*[a-f0-9]+: d5 \(bad\)
[ ]*[a-f0-9]+: 02 d4 add %ah,%dl
0+5 <aam0>:
[ ]*[a-f0-9]+: d4 \(bad\)
[ ]*[a-f0-9]+: 0a d4 or %ah,%dl
0+7 <aam1>:
[ ]*[a-f0-9]+: d4 \(bad\)
[ ]*[a-f0-9]+: 02 3f add \(%rdi\),%bh
0+9 <aas>:
[ ]*[a-f0-9]+: 3f \(bad\)
0+a <bound>:
[ ]*[a-f0-9]+: 62 \(bad\)
[ ]*[a-f0-9]+: 10 27 adc %ah,\(%rdi\)
0+c <daa>:
[ ]*[a-f0-9]+: 27 \(bad\)
0+d <das>:
[ ]*[a-f0-9]+: 2f \(bad\)
0+e <into>:
[ ]*[a-f0-9]+: ce \(bad\)
0+f <lds>:
[ ]*[a-f0-9]+: c5 \(bad\)
[ ]*[a-f0-9]+: 10 c4 adc %al,%ah
0+11 <les>:
[ ]*[a-f0-9]+: c4 \(bad\)
[ ]*[a-f0-9]+: 10 60 61 adc %ah,0x61\(%rax\)
0+13 <pusha>:
[ ]*[a-f0-9]+: 60 \(bad\)
0+14 <popa>:
[ ]*[a-f0-9]+: 61 \(bad\)
#pass

View File

@ -0,0 +1,30 @@
.text
# All the followings are illegal opcodes for x86-64.
aaa:
aaa
aad0:
aad
aad1:
aad $2
aam0:
aam
aam1:
aam $2
aas:
aas
bound:
bound %edx,(%eax)
daa:
daa
das:
das
into:
into
lds:
lds (%eax),%edx
les:
les (%eax),%edx
pusha:
pusha
popa:
popa

View File

@ -1,3 +1,17 @@
2007-09-27 H.J. Lu <hongjiu.lu@intel.com>
PR binutils/5072
* i386-dis.c: Update comments on '{', '}' and '|' to support
only AT&T and Intel modes.
(X86_64_4...X86_64_27): New.
(dis386): Updated. Use X86_64_4...X86_64_21.
(dis386_twobyte): Updated.
(float_mem): Likewise.
(x86_64_table): Add X86_64_4...X86_64_27.
(opc_ext_table): Updated. Use X86_64_22 and X86_64_27.
(putop): Updated handling of '{', '}' and '|' to support only
AT&T and Intel modes.
2007-09-27 Kazu Hirata <kazu@codesourcery.com>
* m68k-dis.c (print_insn_arg): Use %mbo instead of %mbb.

View File

@ -578,6 +578,30 @@ fetch_data (struct disassemble_info *info, bfd_byte *addr)
#define X86_64_1 NULL, { { NULL, X86_64_SPECIAL }, { NULL, 1 } }
#define X86_64_2 NULL, { { NULL, X86_64_SPECIAL }, { NULL, 2 } }
#define X86_64_3 NULL, { { NULL, X86_64_SPECIAL }, { NULL, 3 } }
#define X86_64_4 NULL, { { NULL, X86_64_SPECIAL }, { NULL, 4 } }
#define X86_64_5 NULL, { { NULL, X86_64_SPECIAL }, { NULL, 5 } }
#define X86_64_6 NULL, { { NULL, X86_64_SPECIAL }, { NULL, 6 } }
#define X86_64_7 NULL, { { NULL, X86_64_SPECIAL }, { NULL, 7 } }
#define X86_64_8 NULL, { { NULL, X86_64_SPECIAL }, { NULL, 8 } }
#define X86_64_9 NULL, { { NULL, X86_64_SPECIAL }, { NULL, 9 } }
#define X86_64_10 NULL, { { NULL, X86_64_SPECIAL }, { NULL, 10 } }
#define X86_64_11 NULL, { { NULL, X86_64_SPECIAL }, { NULL, 11 } }
#define X86_64_12 NULL, { { NULL, X86_64_SPECIAL }, { NULL, 12 } }
#define X86_64_13 NULL, { { NULL, X86_64_SPECIAL }, { NULL, 13 } }
#define X86_64_14 NULL, { { NULL, X86_64_SPECIAL }, { NULL, 14 } }
#define X86_64_15 NULL, { { NULL, X86_64_SPECIAL }, { NULL, 15 } }
#define X86_64_16 NULL, { { NULL, X86_64_SPECIAL }, { NULL, 16 } }
#define X86_64_17 NULL, { { NULL, X86_64_SPECIAL }, { NULL, 17 } }
#define X86_64_18 NULL, { { NULL, X86_64_SPECIAL }, { NULL, 18 } }
#define X86_64_19 NULL, { { NULL, X86_64_SPECIAL }, { NULL, 19 } }
#define X86_64_20 NULL, { { NULL, X86_64_SPECIAL }, { NULL, 20 } }
#define X86_64_21 NULL, { { NULL, X86_64_SPECIAL }, { NULL, 21 } }
#define X86_64_22 NULL, { { NULL, X86_64_SPECIAL }, { NULL, 22 } }
#define X86_64_23 NULL, { { NULL, X86_64_SPECIAL }, { NULL, 23 } }
#define X86_64_24 NULL, { { NULL, X86_64_SPECIAL }, { NULL, 24 } }
#define X86_64_25 NULL, { { NULL, X86_64_SPECIAL }, { NULL, 25 } }
#define X86_64_26 NULL, { { NULL, X86_64_SPECIAL }, { NULL, 26 } }
#define X86_64_27 NULL, { { NULL, X86_64_SPECIAL }, { NULL, 27 } }
#define THREE_BYTE_0 NULL, { { NULL, IS_3BYTE_OPCODE }, { NULL, 0 } }
#define THREE_BYTE_1 NULL, { { NULL, IS_3BYTE_OPCODE }, { NULL, 1 } }
@ -688,10 +712,7 @@ struct dis386 {
for the details.
Braces '{' and '}', and vertical bars '|', indicate alternative
mnemonic strings for AT&T, Intel, X86_64 AT&T, and X86_64 Intel
modes. In cases where there are only two alternatives, the X86_64
instruction is reserved, and "(bad)" is printed.
*/
mnemonic strings for AT&T and Intel. */
static const struct dis386 dis386[] = {
/* 00 */
@ -701,8 +722,8 @@ static const struct dis386 dis386[] = {
{ "addS", { Gv, Ev } },
{ "addB", { AL, Ib } },
{ "addS", { eAX, Iv } },
{ "push{T|}", { es } },
{ "pop{T|}", { es } },
{ X86_64_4 },
{ X86_64_5 },
/* 08 */
{ "orB", { Eb, Gb } },
{ "orS", { Ev, Gv } },
@ -710,7 +731,7 @@ static const struct dis386 dis386[] = {
{ "orS", { Gv, Ev } },
{ "orB", { AL, Ib } },
{ "orS", { eAX, Iv } },
{ "push{T|}", { cs } },
{ X86_64_6 },
{ "(bad)", { XX } }, /* 0x0f extended opcode escape */
/* 10 */
{ "adcB", { Eb, Gb } },
@ -719,8 +740,8 @@ static const struct dis386 dis386[] = {
{ "adcS", { Gv, Ev } },
{ "adcB", { AL, Ib } },
{ "adcS", { eAX, Iv } },
{ "push{T|}", { ss } },
{ "pop{T|}", { ss } },
{ X86_64_7 },
{ X86_64_8 },
/* 18 */
{ "sbbB", { Eb, Gb } },
{ "sbbS", { Ev, Gv } },
@ -728,8 +749,8 @@ static const struct dis386 dis386[] = {
{ "sbbS", { Gv, Ev } },
{ "sbbB", { AL, Ib } },
{ "sbbS", { eAX, Iv } },
{ "push{T|}", { ds } },
{ "pop{T|}", { ds } },
{ X86_64_9 },
{ X86_64_10 },
/* 20 */
{ "andB", { Eb, Gb } },
{ "andS", { Ev, Gv } },
@ -738,7 +759,7 @@ static const struct dis386 dis386[] = {
{ "andB", { AL, Ib } },
{ "andS", { eAX, Iv } },
{ "(bad)", { XX } }, /* SEG ES prefix */
{ "daa{|}", { XX } },
{ X86_64_11 },
/* 28 */
{ "subB", { Eb, Gb } },
{ "subS", { Ev, Gv } },
@ -747,7 +768,7 @@ static const struct dis386 dis386[] = {
{ "subB", { AL, Ib } },
{ "subS", { eAX, Iv } },
{ "(bad)", { XX } }, /* SEG CS prefix */
{ "das{|}", { XX } },
{ X86_64_12 },
/* 30 */
{ "xorB", { Eb, Gb } },
{ "xorS", { Ev, Gv } },
@ -756,7 +777,7 @@ static const struct dis386 dis386[] = {
{ "xorB", { AL, Ib } },
{ "xorS", { eAX, Iv } },
{ "(bad)", { XX } }, /* SEG SS prefix */
{ "aaa{|}", { XX } },
{ X86_64_13 },
/* 38 */
{ "cmpB", { Eb, Gb } },
{ "cmpS", { Ev, Gv } },
@ -765,7 +786,7 @@ static const struct dis386 dis386[] = {
{ "cmpB", { AL, Ib } },
{ "cmpS", { eAX, Iv } },
{ "(bad)", { XX } }, /* SEG DS prefix */
{ "aas{|}", { XX } },
{ X86_64_14 },
/* 40 */
{ "inc{S|}", { RMeAX } },
{ "inc{S|}", { RMeCX } },
@ -816,10 +837,10 @@ static const struct dis386 dis386[] = {
{ "imulS", { Gv, Ev, Iv } },
{ "pushT", { sIb } },
{ "imulS", { Gv, Ev, sIb } },
{ "ins{b||b|}", { Ybr, indirDX } },
{ "ins{R||G|}", { Yzr, indirDX } },
{ "outs{b||b|}", { indirDXr, Xb } },
{ "outs{R||G|}", { indirDXr, Xz } },
{ "ins{b|}", { Ybr, indirDX } },
{ X86_64_15 },
{ "outs{b|}", { indirDXr, Xb } },
{ X86_64_16 },
/* 70 */
{ "joH", { Jb, XX, cond_jump_flag } },
{ "jnoH", { Jb, XX, cond_jump_flag } },
@ -866,23 +887,23 @@ static const struct dis386 dis386[] = {
{ "xchgS", { RMeSI, eAX } },
{ "xchgS", { RMeDI, eAX } },
/* 98 */
{ "cW{t||t|}R", { XX } },
{ "cR{t||t|}O", { XX } },
{ "Jcall{T|}", { Ap } },
{ "cW{t|}R", { XX } },
{ "cR{t|}O", { XX } },
{ X86_64_17 },
{ "(bad)", { XX } }, /* fwait */
{ "pushfT", { XX } },
{ "popfT", { XX } },
{ "sahf{|}", { XX } },
{ "lahf{|}", { XX } },
{ "sahf", { XX } },
{ "lahf", { XX } },
/* a0 */
{ "movB", { AL, Ob } },
{ "movS", { eAX, Ov } },
{ "movB", { Ob, AL } },
{ "movS", { Ov, eAX } },
{ "movs{b||b|}", { Ybr, Xb } },
{ "movs{R||R|}", { Yvr, Xv } },
{ "cmps{b||b|}", { Xb, Yb } },
{ "cmps{R||R|}", { Xv, Yv } },
{ "movs{b|}", { Ybr, Xb } },
{ "movs{R|}", { Yvr, Xv } },
{ "cmps{b|}", { Xb, Yb } },
{ "cmps{R|}", { Xv, Yv } },
/* a8 */
{ "testB", { AL, Ib } },
{ "testS", { eAX, Iv } },
@ -926,15 +947,15 @@ static const struct dis386 dis386[] = {
{ "lretP", { XX } },
{ "int3", { XX } },
{ "int", { Ib } },
{ "into{|}", { XX } },
{ X86_64_18 },
{ "iretP", { XX } },
/* d0 */
{ GRP2b_one },
{ GRP2S_one },
{ GRP2b_cl },
{ GRP2S_cl },
{ "aam{|}", { sIb } },
{ "aad{|}", { sIb } },
{ X86_64_19 },
{ X86_64_20 },
{ "(bad)", { XX } },
{ "xlat", { DSBX } },
/* d8 */
@ -958,7 +979,7 @@ static const struct dis386 dis386[] = {
/* e8 */
{ "callT", { Jv } },
{ "jmpT", { Jv } },
{ "Jjmp{T|}", { Ap } },
{ X86_64_21 },
{ "jmp", { Jb } },
{ "inB", { AL, indirDX } },
{ "inG", { zAX, indirDX } },
@ -1190,8 +1211,8 @@ static const struct dis386 dis386_twobyte[] = {
{ "btrS", { Ev, Gv } },
{ OPC_EXT_4 },
{ OPC_EXT_5 },
{ "movz{bR|x|bR|x}", { Gv, Eb } },
{ "movz{wR|x|wR|x}", { Gv, Ew } }, /* yes, there really is movzww ! */
{ "movz{bR|x}", { Gv, Eb } },
{ "movz{wR|x}", { Gv, Ew } }, /* yes, there really is movzww ! */
/* b8 */
{ PREGRP37 },
{ "ud2b", { XX } },
@ -1199,8 +1220,8 @@ static const struct dis386 dis386_twobyte[] = {
{ "btcS", { Ev, Gv } },
{ "bsfS", { Gv, Ev } },
{ PREGRP36 },
{ "movs{bR|x|bR|x}", { Gv, Eb } },
{ "movs{wR|x|wR|x}", { Gv, Ew } }, /* yes, there really is movsww ! */
{ "movs{bR|x}", { Gv, Eb } },
{ "movs{wR|x}", { Gv, Ew } }, /* yes, there really is movsww ! */
/* c0 */
{ "xaddB", { Eb, Gb } },
{ "xaddS", { Ev, Gv } },
@ -2502,21 +2523,172 @@ static const struct dis386 prefix_user_table[][4] = {
};
static const struct dis386 x86_64_table[][2] = {
/* X86_64_0 */
{
{ "pusha{P|}", { XX } },
{ "(bad)", { XX } },
},
/* X86_64_1 */
{
{ "popa{P|}", { XX } },
{ "(bad)", { XX } },
},
/* X86_64_2 */
{
{ OPC_EXT_33 },
{ "(bad)", { XX } },
},
/* X86_64_3 */
{
{ "arpl", { Ew, Gw } },
{ "movs{||lq|xd}", { Gv, Ed } },
{ "movs{lq|xd}", { Gv, Ed } },
},
/* X86_64_4 */
{
{ "push{T|}", { es } },
{ "(bad)", { XX } },
},
/* X86_64_5 */
{
{ "pop{T|}", { es } },
{ "(bad)", { XX } },
},
/* X86_64_6 */
{
{ "push{T|}", { cs } },
{ "(bad)", { XX } },
},
/* X86_64_7 */
{
{ "push{T|}", { ss } },
{ "(bad)", { XX } },
},
/* X86_64_8 */
{
{ "pop{T|}", { ss } },
{ "(bad)", { XX } },
},
/* X86_64_9 */
{
{ "push{T|}", { ds } },
{ "(bad)", { XX } },
},
/* X86_64_10 */
{
{ "pop{T|}", { ds } },
{ "(bad)", { XX } },
},
/* X86_64_11 */
{
{ "daa", { XX } },
{ "(bad)", { XX } },
},
/* X86_64_12 */
{
{ "das", { XX } },
{ "(bad)", { XX } },
},
/* X86_64_13 */
{
{ "aaa", { XX } },
{ "(bad)", { XX } },
},
/* X86_64_14 */
{
{ "aas", { XX } },
{ "(bad)", { XX } },
},
/* X86_64_15 */
{
{ "ins{R|}", { Yzr, indirDX } },
{ "ins{G|}", { Yzr, indirDX } },
},
/* X86_64_16 */
{
{ "outs{R|}", { indirDXr, Xz } },
{ "outs{G|}", { indirDXr, Xz } },
},
/* X86_64_17 */
{
{ "Jcall{T|}", { Ap } },
{ "(bad)", { XX } },
},
/* X86_64_18 */
{
{ "into", { XX } },
{ "(bad)", { XX } },
},
/* X86_64_19 */
{
{ "aam", { sIb } },
{ "(bad)", { XX } },
},
/* X86_64_20 */
{
{ "aad", { sIb } },
{ "(bad)", { XX } },
},
/* X86_64_21 */
{
{ "Jjmp{T|}", { Ap } },
{ "(bad)", { XX } },
},
/* X86_64_22 */
{
{ "sgdt{Q|IQ}", { M } },
{ "sgdt", { M } },
},
/* X86_64_23 */
{
{ "sidt{Q|IQ}", { M } },
{ "sidt", { M } },
},
/* X86_64_24 */
{
{ "lgdt{Q|Q}", { M } },
{ "lgdt", { M } },
},
/* X86_64_25 */
{
{ "lidt{Q|Q}", { M } },
{ "lidt", { M } },
},
/* X86_64_26 */
{
{ "lesS", { Gv, Mp } },
{ "(bad)", { XX } },
},
/* X86_64_27 */
{
{ "ldsS", { Gv, Mp } },
{ "(bad)", { XX } },
},
};
@ -4277,12 +4449,12 @@ static const struct dis386 opc_ext_table[][2] = {
},
{
/* OPC_EXT_1 */
{ "les{S|}", { Gv, Mp } },
{ X86_64_26 },
{ "(bad)", { XX } },
},
{
/* OPC_EXT_2 */
{ "ldsS", { Gv, Mp } },
{ X86_64_27 },
{ "(bad)", { XX } },
},
{
@ -4302,17 +4474,17 @@ static const struct dis386 opc_ext_table[][2] = {
},
{
/* OPC_EXT_6 */
{ "sgdt{Q|IQ||}", { M } },
{ X86_64_22 },
{ OPC_EXT_RM_0 },
},
{
/* OPC_EXT_7 */
{ "sidt{Q|IQ||}", { M } },
{ X86_64_23 },
{ OPC_EXT_RM_1 },
},
{
/* OPC_EXT_8 */
{ "lgdt{Q|Q||}", { M } },
{ X86_64_24 },
{ "(bad)", { XX } },
},
{
@ -4467,7 +4639,7 @@ static const struct dis386 opc_ext_table[][2] = {
},
{
/* OPC_EXT_39 */
{ "lidt{Q|Q||}", { M } },
{ X86_64_25 },
{ OPC_EXT_RM_6 },
},
{
@ -5295,55 +5467,55 @@ print_insn (bfd_vma pc, disassemble_info *info)
static const char *float_mem[] = {
/* d8 */
"fadd{s||s|}",
"fmul{s||s|}",
"fcom{s||s|}",
"fcomp{s||s|}",
"fsub{s||s|}",
"fsubr{s||s|}",
"fdiv{s||s|}",
"fdivr{s||s|}",
"fadd{s|}",
"fmul{s|}",
"fcom{s|}",
"fcomp{s|}",
"fsub{s|}",
"fsubr{s|}",
"fdiv{s|}",
"fdivr{s|}",
/* d9 */
"fld{s||s|}",
"fld{s|}",
"(bad)",
"fst{s||s|}",
"fstp{s||s|}",
"fst{s|}",
"fstp{s|}",
"fldenvIC",
"fldcw",
"fNstenvIC",
"fNstcw",
/* da */
"fiadd{l||l|}",
"fimul{l||l|}",
"ficom{l||l|}",
"ficomp{l||l|}",
"fisub{l||l|}",
"fisubr{l||l|}",
"fidiv{l||l|}",
"fidivr{l||l|}",
"fiadd{l|}",
"fimul{l|}",
"ficom{l|}",
"ficomp{l|}",
"fisub{l|}",
"fisubr{l|}",
"fidiv{l|}",
"fidivr{l|}",
/* db */
"fild{l||l|}",
"fisttp{l||l|}",
"fist{l||l|}",
"fistp{l||l|}",
"fild{l|}",
"fisttp{l|}",
"fist{l|}",
"fistp{l|}",
"(bad)",
"fld{t||t|}",
"(bad)",
"fstp{t||t|}",
/* dc */
"fadd{l||l|}",
"fmul{l||l|}",
"fcom{l||l|}",
"fcomp{l||l|}",
"fsub{l||l|}",
"fsubr{l||l|}",
"fdiv{l||l|}",
"fdivr{l||l|}",
"fadd{l|}",
"fmul{l|}",
"fcom{l|}",
"fcomp{l|}",
"fsub{l|}",
"fsubr{l|}",
"fdiv{l|}",
"fdivr{l|}",
/* dd */
"fld{l||l|}",
"fisttp{ll||ll|}",
"fst{l||l|}",
"fstp{l||l|}",
"fld{l|}",
"fisttp{ll|}",
"fst{l||}",
"fstp{l|}",
"frstorIC",
"(bad)",
"fNsaveIC",
@ -5363,9 +5535,9 @@ static const char *float_mem[] = {
"fist",
"fistp",
"fbld",
"fild{ll||ll|}",
"fild{ll|}",
"fbstp",
"fistp{ll||ll|}",
"fistp{ll|}",
};
static const unsigned char float_mem_mode[] = {
@ -5695,24 +5867,10 @@ putop (const char *template, int sizeflag)
case '{':
alt = 0;
if (intel_syntax)
alt += 1;
if (address_mode == mode_64bit)
alt += 2;
while (alt != 0)
{
while (*++p != '|')
{
if (*p == '}')
{
/* Alternative not valid. */
strcpy (obuf, "(bad)");
obufp = obuf + 5;
return 1;
}
else if (*p == '\0')
abort ();
}
alt--;
if (*p == '}' || *p == '\0')
abort ();
}
/* Fall through. */
case 'I':