mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-22 11:00:01 +08:00
include/opcode/
* i386.h (i386_optab): Remove fildd, fistpd and fisttpd. opcodes/ * i386-dis.c (x_mode): Comment. (two_source_ops): File scope. (float_mem): Correct fisttpll and fistpll. (float_mem_mode): New table. (dofloat): Use it. (OP_E): Correct intel mode PTR output. (ptr_reg): Use open_char and close_char. (PNI_Fixup): Handle possible suffix on sidt. Use op1out etc. for operands. Set two_source_ops. gas/testsuite/ * gas/i386/prescott.s: Remove fisttpd and fisttpq. * gas/i386/prescott.d: Update.
This commit is contained in:
@ -1,3 +1,8 @@
|
|||||||
|
2004-06-24 Alan Modra <amodra@bigpond.net.au>
|
||||||
|
|
||||||
|
* gas/i386/prescott.s: Remove fisttpd and fisttpq.
|
||||||
|
* gas/i386/prescott.d: Update.
|
||||||
|
|
||||||
2004-06-08 Jakub Jelinek <jakub@redhat.com>
|
2004-06-08 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
* gas/ia64/dv-raw-err.s: Add some new postinc tests.
|
* gas/ia64/dv-raw-err.s: Add some new postinc tests.
|
||||||
|
@ -13,25 +13,24 @@ Disassembly of section .text:
|
|||||||
10: df 88 90 90 90 90 [ ]*fisttp 0x90909090\(%eax\)
|
10: df 88 90 90 90 90 [ ]*fisttp 0x90909090\(%eax\)
|
||||||
16: db 88 90 90 90 90 [ ]*fisttpl 0x90909090\(%eax\)
|
16: db 88 90 90 90 90 [ ]*fisttpl 0x90909090\(%eax\)
|
||||||
1c: dd 88 90 90 90 90 [ ]*fisttpll 0x90909090\(%eax\)
|
1c: dd 88 90 90 90 90 [ ]*fisttpll 0x90909090\(%eax\)
|
||||||
22: dd 88 90 90 90 90 [ ]*fisttpll 0x90909090\(%eax\)
|
22: 66 0f 7c 65 00 [ ]*haddpd 0x0\(%ebp\),%xmm4
|
||||||
28: dd 88 90 90 90 90 [ ]*fisttpll 0x90909090\(%eax\)
|
27: 66 0f 7c ee [ ]*haddpd %xmm6,%xmm5
|
||||||
2e: 66 0f 7c 65 00 [ ]*haddpd 0x0\(%ebp\),%xmm4
|
2b: f2 0f 7c 37 [ ]*haddps \(%edi\),%xmm6
|
||||||
33: 66 0f 7c ee [ ]*haddpd %xmm6,%xmm5
|
2f: f2 0f 7c f8 [ ]*haddps %xmm0,%xmm7
|
||||||
37: f2 0f 7c 37 [ ]*haddps \(%edi\),%xmm6
|
33: 66 0f 7d c1 [ ]*hsubpd %xmm1,%xmm0
|
||||||
3b: f2 0f 7c f8 [ ]*haddps %xmm0,%xmm7
|
37: 66 0f 7d 0a [ ]*hsubpd \(%edx\),%xmm1
|
||||||
3f: 66 0f 7d c1 [ ]*hsubpd %xmm1,%xmm0
|
3b: f2 0f 7d d2 [ ]*hsubps %xmm2,%xmm2
|
||||||
43: 66 0f 7d 0a [ ]*hsubpd \(%edx\),%xmm1
|
3f: f2 0f 7d 1c 24 [ ]*hsubps \(%esp\),%xmm3
|
||||||
47: f2 0f 7d d2 [ ]*hsubps %xmm2,%xmm2
|
44: f2 0f f0 2e [ ]*lddqu \(%esi\),%xmm5
|
||||||
4b: f2 0f 7d 1c 24 [ ]*hsubps \(%esp\),%xmm3
|
48: 0f 01 c8 [ ]*monitor %eax,%ecx,%edx
|
||||||
50: f2 0f f0 2e [ ]*lddqu \(%esi\),%xmm5
|
4b: 0f 01 c8 [ ]*monitor %eax,%ecx,%edx
|
||||||
54: 0f 01 c8 [ ]*monitor %eax,%ecx,%edx
|
4e: f2 0f 12 f7 [ ]*movddup %xmm7,%xmm6
|
||||||
57: 0f 01 c8 [ ]*monitor %eax,%ecx,%edx
|
52: f2 0f 12 38 [ ]*movddup \(%eax\),%xmm7
|
||||||
5a: f2 0f 12 f7 [ ]*movddup %xmm7,%xmm6
|
56: f3 0f 16 01 [ ]*movshdup \(%ecx\),%xmm0
|
||||||
5e: f2 0f 12 38 [ ]*movddup \(%eax\),%xmm7
|
5a: f3 0f 16 ca [ ]*movshdup %xmm2,%xmm1
|
||||||
62: f3 0f 16 01 [ ]*movshdup \(%ecx\),%xmm0
|
5e: f3 0f 12 13 [ ]*movsldup \(%ebx\),%xmm2
|
||||||
66: f3 0f 16 ca [ ]*movshdup %xmm2,%xmm1
|
62: f3 0f 12 dc [ ]*movsldup %xmm4,%xmm3
|
||||||
6a: f3 0f 12 13 [ ]*movsldup \(%ebx\),%xmm2
|
66: 0f 01 c9 [ ]*mwait %eax,%ecx
|
||||||
6e: f3 0f 12 dc [ ]*movsldup %xmm4,%xmm3
|
69: 0f 01 c9 [ ]*mwait %eax,%ecx
|
||||||
72: 0f 01 c9 [ ]*mwait %eax,%ecx
|
6c: 00 00 [ ]*add %al,\(%eax\)
|
||||||
75: 0f 01 c9 [ ]*mwait %eax,%ecx
|
|
||||||
...
|
...
|
||||||
|
@ -8,8 +8,6 @@ foo:
|
|||||||
addsubps %xmm4,%xmm3
|
addsubps %xmm4,%xmm3
|
||||||
fisttp 0x90909090(%eax)
|
fisttp 0x90909090(%eax)
|
||||||
fisttpl 0x90909090(%eax)
|
fisttpl 0x90909090(%eax)
|
||||||
fisttpd 0x90909090(%eax)
|
|
||||||
fisttpq 0x90909090(%eax)
|
|
||||||
fisttpll 0x90909090(%eax)
|
fisttpll 0x90909090(%eax)
|
||||||
haddpd 0x0(%ebp),%xmm4
|
haddpd 0x0(%ebp),%xmm4
|
||||||
haddpd %xmm6,%xmm5
|
haddpd %xmm6,%xmm5
|
||||||
|
@ -1,3 +1,7 @@
|
|||||||
|
2004-06-24 Alan Modra <amodra@bigpond.net.au>
|
||||||
|
|
||||||
|
* i386.h (i386_optab): Remove fildd, fistpd and fisttpd.
|
||||||
|
|
||||||
2004-05-24 Peter Barada <peter@the-baradas.com>
|
2004-05-24 Peter Barada <peter@the-baradas.com>
|
||||||
|
|
||||||
* m68k.h: Add 'size' to m68k_opcode.
|
* m68k.h: Add 'size' to m68k_opcode.
|
||||||
|
@ -583,7 +583,6 @@ static const template i386_optab[] = {
|
|||||||
{"fld", 1, 0xdb, 5, 0, x_FP|Modrm, { LLongMem, 0, 0} },
|
{"fld", 1, 0xdb, 5, 0, x_FP|Modrm, { LLongMem, 0, 0} },
|
||||||
{"fild", 1, 0xdf, 0, 0, sl_FP|FloatMF|Modrm, { ShortMem|LongMem, 0, 0} },
|
{"fild", 1, 0xdf, 0, 0, sl_FP|FloatMF|Modrm, { ShortMem|LongMem, 0, 0} },
|
||||||
/* Intel Syntax */
|
/* Intel Syntax */
|
||||||
{"fildd", 1, 0xdf, 5, 0, FP|Modrm, { LLongMem, 0, 0} },
|
|
||||||
{"fildq", 1, 0xdf, 5, 0, FP|Modrm, { LLongMem, 0, 0} },
|
{"fildq", 1, 0xdf, 5, 0, FP|Modrm, { LLongMem, 0, 0} },
|
||||||
{"fildll", 1, 0xdf, 5, 0, FP|Modrm, { LLongMem, 0, 0} },
|
{"fildll", 1, 0xdf, 5, 0, FP|Modrm, { LLongMem, 0, 0} },
|
||||||
{"fldt", 1, 0xdb, 5, 0, FP|Modrm, { LLongMem, 0, 0} },
|
{"fldt", 1, 0xdb, 5, 0, FP|Modrm, { LLongMem, 0, 0} },
|
||||||
@ -603,7 +602,6 @@ static const template i386_optab[] = {
|
|||||||
{"fstp", 1, 0xdb, 7, 0, x_FP|Modrm, { LLongMem, 0, 0} },
|
{"fstp", 1, 0xdb, 7, 0, x_FP|Modrm, { LLongMem, 0, 0} },
|
||||||
{"fistp", 1, 0xdf, 3, 0, sl_FP|FloatMF|Modrm, { ShortMem|LongMem, 0, 0} },
|
{"fistp", 1, 0xdf, 3, 0, sl_FP|FloatMF|Modrm, { ShortMem|LongMem, 0, 0} },
|
||||||
/* Intel Syntax */
|
/* Intel Syntax */
|
||||||
{"fistpd", 1, 0xdf, 7, 0, FP|Modrm, { LLongMem, 0, 0} },
|
|
||||||
{"fistpq", 1, 0xdf, 7, 0, FP|Modrm, { LLongMem, 0, 0} },
|
{"fistpq", 1, 0xdf, 7, 0, FP|Modrm, { LLongMem, 0, 0} },
|
||||||
{"fistpll",1, 0xdf, 7, 0, FP|Modrm, { LLongMem, 0, 0} },
|
{"fistpll",1, 0xdf, 7, 0, FP|Modrm, { LLongMem, 0, 0} },
|
||||||
{"fstpt", 1, 0xdb, 7, 0, FP|Modrm, { LLongMem, 0, 0} },
|
{"fstpt", 1, 0xdb, 7, 0, FP|Modrm, { LLongMem, 0, 0} },
|
||||||
@ -1308,7 +1306,6 @@ static const template i386_optab[] = {
|
|||||||
{"addsubps", 2, 0xf20fd0, X, CpuPNI, FP|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
|
{"addsubps", 2, 0xf20fd0, X, CpuPNI, FP|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
|
||||||
{"fisttp", 1, 0xdf, 1, CpuPNI, sl_FP|FloatMF|Modrm, { ShortMem|LongMem, 0, 0} },
|
{"fisttp", 1, 0xdf, 1, CpuPNI, sl_FP|FloatMF|Modrm, { ShortMem|LongMem, 0, 0} },
|
||||||
/* Intel Syntax */
|
/* Intel Syntax */
|
||||||
{"fisttpd", 1, 0xdd, 1, CpuPNI, FP|Modrm, { LLongMem, 0, 0} },
|
|
||||||
{"fisttpq", 1, 0xdd, 1, CpuPNI, FP|Modrm, { LLongMem, 0, 0} },
|
{"fisttpq", 1, 0xdd, 1, CpuPNI, FP|Modrm, { LLongMem, 0, 0} },
|
||||||
{"fisttpll", 1, 0xdd, 1, CpuPNI, FP|Modrm, { LLongMem, 0, 0} },
|
{"fisttpll", 1, 0xdd, 1, CpuPNI, FP|Modrm, { LLongMem, 0, 0} },
|
||||||
{"haddpd", 2, 0x660f7c, X, CpuPNI, FP|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
|
{"haddpd", 2, 0x660f7c, X, CpuPNI, FP|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
|
||||||
|
@ -1,3 +1,15 @@
|
|||||||
|
2004-06-24 Alan Modra <amodra@bigpond.net.au>
|
||||||
|
|
||||||
|
* i386-dis.c (x_mode): Comment.
|
||||||
|
(two_source_ops): File scope.
|
||||||
|
(float_mem): Correct fisttpll and fistpll.
|
||||||
|
(float_mem_mode): New table.
|
||||||
|
(dofloat): Use it.
|
||||||
|
(OP_E): Correct intel mode PTR output.
|
||||||
|
(ptr_reg): Use open_char and close_char.
|
||||||
|
(PNI_Fixup): Handle possible suffix on sidt. Use op1out etc. for
|
||||||
|
operands. Set two_source_ops.
|
||||||
|
|
||||||
2004-06-15 Alan Modra <amodra@bigpond.net.au>
|
2004-06-15 Alan Modra <amodra@bigpond.net.au>
|
||||||
|
|
||||||
* arc-ext.c (build_ARC_extmap): Use bfd_get_section_size
|
* arc-ext.c (build_ARC_extmap): Use bfd_get_section_size
|
||||||
|
@ -312,7 +312,7 @@ fetch_data (struct disassemble_info *info, bfd_byte *addr)
|
|||||||
#define w_mode 3 /* word operand */
|
#define w_mode 3 /* word operand */
|
||||||
#define d_mode 4 /* double word operand */
|
#define d_mode 4 /* double word operand */
|
||||||
#define q_mode 5 /* quad word operand */
|
#define q_mode 5 /* quad word operand */
|
||||||
#define x_mode 6
|
#define x_mode 6 /* 80 bit float operand */
|
||||||
#define m_mode 7 /* d_mode in 32bit, q_mode in 64bit mode. */
|
#define m_mode 7 /* d_mode in 32bit, q_mode in 64bit mode. */
|
||||||
#define cond_jump_mode 8
|
#define cond_jump_mode 8
|
||||||
#define loop_jcxz_mode 9
|
#define loop_jcxz_mode 9
|
||||||
@ -1881,6 +1881,7 @@ prefix_name (int pref, int sizeflag)
|
|||||||
|
|
||||||
static char op1out[100], op2out[100], op3out[100];
|
static char op1out[100], op2out[100], op3out[100];
|
||||||
static int op_ad, op_index[3];
|
static int op_ad, op_index[3];
|
||||||
|
static int two_source_ops;
|
||||||
static bfd_vma op_address[3];
|
static bfd_vma op_address[3];
|
||||||
static bfd_vma op_riprel[3];
|
static bfd_vma op_riprel[3];
|
||||||
static bfd_vma start_pc;
|
static bfd_vma start_pc;
|
||||||
@ -1932,7 +1933,6 @@ print_insn (bfd_vma pc, disassemble_info *info)
|
|||||||
{
|
{
|
||||||
const struct dis386 *dp;
|
const struct dis386 *dp;
|
||||||
int i;
|
int i;
|
||||||
int two_source_ops;
|
|
||||||
char *first, *second, *third;
|
char *first, *second, *third;
|
||||||
int needcomma;
|
int needcomma;
|
||||||
unsigned char uses_SSE_prefix;
|
unsigned char uses_SSE_prefix;
|
||||||
@ -2364,7 +2364,7 @@ static const char *float_mem[] = {
|
|||||||
"fdivr{l||l|}",
|
"fdivr{l||l|}",
|
||||||
/* dd */
|
/* dd */
|
||||||
"fld{l||l|}",
|
"fld{l||l|}",
|
||||||
"fisttpll",
|
"fisttp{ll||ll|}",
|
||||||
"fst{l||l|}",
|
"fst{l||l|}",
|
||||||
"fstp{l||l|}",
|
"fstp{l||l|}",
|
||||||
"frstor",
|
"frstor",
|
||||||
@ -2388,7 +2388,82 @@ static const char *float_mem[] = {
|
|||||||
"fbld",
|
"fbld",
|
||||||
"fild{ll||ll|}",
|
"fild{ll||ll|}",
|
||||||
"fbstp",
|
"fbstp",
|
||||||
"fistpll",
|
"fistp{ll||ll|}",
|
||||||
|
};
|
||||||
|
|
||||||
|
static const unsigned char float_mem_mode[] = {
|
||||||
|
/* d8 */
|
||||||
|
d_mode,
|
||||||
|
d_mode,
|
||||||
|
d_mode,
|
||||||
|
d_mode,
|
||||||
|
d_mode,
|
||||||
|
d_mode,
|
||||||
|
d_mode,
|
||||||
|
d_mode,
|
||||||
|
/* d9 */
|
||||||
|
d_mode,
|
||||||
|
0,
|
||||||
|
d_mode,
|
||||||
|
d_mode,
|
||||||
|
0,
|
||||||
|
w_mode,
|
||||||
|
0,
|
||||||
|
w_mode,
|
||||||
|
/* da */
|
||||||
|
d_mode,
|
||||||
|
d_mode,
|
||||||
|
d_mode,
|
||||||
|
d_mode,
|
||||||
|
d_mode,
|
||||||
|
d_mode,
|
||||||
|
d_mode,
|
||||||
|
d_mode,
|
||||||
|
/* db */
|
||||||
|
d_mode,
|
||||||
|
d_mode,
|
||||||
|
d_mode,
|
||||||
|
d_mode,
|
||||||
|
0,
|
||||||
|
x_mode,
|
||||||
|
0,
|
||||||
|
x_mode,
|
||||||
|
/* dc */
|
||||||
|
q_mode,
|
||||||
|
q_mode,
|
||||||
|
q_mode,
|
||||||
|
q_mode,
|
||||||
|
q_mode,
|
||||||
|
q_mode,
|
||||||
|
q_mode,
|
||||||
|
q_mode,
|
||||||
|
/* dd */
|
||||||
|
q_mode,
|
||||||
|
q_mode,
|
||||||
|
q_mode,
|
||||||
|
q_mode,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
w_mode,
|
||||||
|
/* de */
|
||||||
|
w_mode,
|
||||||
|
w_mode,
|
||||||
|
w_mode,
|
||||||
|
w_mode,
|
||||||
|
w_mode,
|
||||||
|
w_mode,
|
||||||
|
w_mode,
|
||||||
|
w_mode,
|
||||||
|
/* df */
|
||||||
|
w_mode,
|
||||||
|
w_mode,
|
||||||
|
w_mode,
|
||||||
|
w_mode,
|
||||||
|
x_mode,
|
||||||
|
q_mode,
|
||||||
|
x_mode,
|
||||||
|
q_mode
|
||||||
};
|
};
|
||||||
|
|
||||||
#define ST OP_ST, 0
|
#define ST OP_ST, 0
|
||||||
@ -2567,14 +2642,11 @@ dofloat (int sizeflag)
|
|||||||
|
|
||||||
if (mod != 3)
|
if (mod != 3)
|
||||||
{
|
{
|
||||||
putop (float_mem[(floatop - 0xd8) * 8 + reg], sizeflag);
|
int fp_indx = (floatop - 0xd8) * 8 + reg;
|
||||||
|
|
||||||
|
putop (float_mem[fp_indx], sizeflag);
|
||||||
obufp = op1out;
|
obufp = op1out;
|
||||||
if (floatop == 0xdb)
|
OP_E (float_mem_mode[fp_indx], sizeflag);
|
||||||
OP_E (x_mode, sizeflag);
|
|
||||||
else if (floatop == 0xdd)
|
|
||||||
OP_E (d_mode, sizeflag);
|
|
||||||
else
|
|
||||||
OP_E (v_mode, sizeflag);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
/* Skip mod/rm byte. */
|
/* Skip mod/rm byte. */
|
||||||
@ -3135,9 +3207,15 @@ OP_E (int bytemode, int sizeflag)
|
|||||||
oappend ("WORD PTR ");
|
oappend ("WORD PTR ");
|
||||||
break;
|
break;
|
||||||
case v_mode:
|
case v_mode:
|
||||||
|
if (sizeflag & DFLAG)
|
||||||
oappend ("DWORD PTR ");
|
oappend ("DWORD PTR ");
|
||||||
|
else
|
||||||
|
oappend ("WORD PTR ");
|
||||||
break;
|
break;
|
||||||
case d_mode:
|
case d_mode:
|
||||||
|
oappend ("DWORD PTR ");
|
||||||
|
break;
|
||||||
|
case q_mode:
|
||||||
oappend ("QWORD PTR ");
|
oappend ("QWORD PTR ");
|
||||||
break;
|
break;
|
||||||
case m_mode:
|
case m_mode:
|
||||||
@ -3776,11 +3854,8 @@ static void
|
|||||||
ptr_reg (int code, int sizeflag)
|
ptr_reg (int code, int sizeflag)
|
||||||
{
|
{
|
||||||
const char *s;
|
const char *s;
|
||||||
if (intel_syntax)
|
|
||||||
oappend ("[");
|
|
||||||
else
|
|
||||||
oappend ("(");
|
|
||||||
|
|
||||||
|
*obufp++ = open_char;
|
||||||
USED_REX (REX_MODE64);
|
USED_REX (REX_MODE64);
|
||||||
if (rex & REX_MODE64)
|
if (rex & REX_MODE64)
|
||||||
{
|
{
|
||||||
@ -3794,10 +3869,8 @@ ptr_reg (int code, int sizeflag)
|
|||||||
else
|
else
|
||||||
s = names16[code - eAX_reg];
|
s = names16[code - eAX_reg];
|
||||||
oappend (s);
|
oappend (s);
|
||||||
if (intel_syntax)
|
*obufp++ = close_char;
|
||||||
oappend ("]");
|
*obufp = 0;
|
||||||
else
|
|
||||||
oappend (")");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -4162,21 +4235,29 @@ SIMD_Fixup (int extrachar, int sizeflag ATTRIBUTE_UNUSED)
|
|||||||
static void
|
static void
|
||||||
PNI_Fixup (int extrachar ATTRIBUTE_UNUSED, int sizeflag)
|
PNI_Fixup (int extrachar ATTRIBUTE_UNUSED, int sizeflag)
|
||||||
{
|
{
|
||||||
if (mod == 3 && reg == 1)
|
if (mod == 3 && reg == 1 && rm <= 1)
|
||||||
{
|
{
|
||||||
char *p = obuf + strlen (obuf);
|
|
||||||
|
|
||||||
/* Override "sidt". */
|
/* Override "sidt". */
|
||||||
|
char *p = obuf + strlen (obuf) - 4;
|
||||||
|
|
||||||
|
/* We might have a suffix. */
|
||||||
|
if (*p == 'i')
|
||||||
|
--p;
|
||||||
|
|
||||||
if (rm)
|
if (rm)
|
||||||
{
|
{
|
||||||
/* mwait %eax,%ecx */
|
/* mwait %eax,%ecx */
|
||||||
strcpy (p - 4, "mwait %eax,%ecx");
|
strcpy (p, "mwait");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* monitor %eax,%ecx,%edx" */
|
/* monitor %eax,%ecx,%edx" */
|
||||||
strcpy (p - 4, "monitor %eax,%ecx,%edx");
|
strcpy (p, "monitor");
|
||||||
|
strcpy (op3out, names32[2]);
|
||||||
}
|
}
|
||||||
|
strcpy (op1out, names32[0]);
|
||||||
|
strcpy (op2out, names32[1]);
|
||||||
|
two_source_ops = 1;
|
||||||
|
|
||||||
codep++;
|
codep++;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user