* i386-dis.c (twobyte_has_modrm): Update table.
(need_modrm): Give it file scope. (MODRM_CHECK): Define. (dofloat): Use MODRM_CHECK. (OP_E): Likewise. (OP_EM): Likewise. (OP_EX): Likewise. and fix testsuite yet again now that we are getting correct disassembly.
This commit is contained in:
parent
25bc089505
commit
4bba68155d
4 changed files with 29 additions and 10 deletions
|
@ -1,7 +1,7 @@
|
|||
2001-05-12 Alan Modra <amodra@one.net.au>
|
||||
|
||||
* gas/i386/sse2.s: Correct cvtps2dq, movdq2q, and movq2dq
|
||||
* gas/i386/sse2.d: Likewise. Fix pmuludq too.
|
||||
* gas/i386/sse2.d: Likewise. Fix pmuludq and punpckhqdq too.
|
||||
|
||||
* gas/i386/ssemmx2.d: Correct movq.
|
||||
|
||||
|
|
|
@ -152,5 +152,5 @@ Disassembly of section .text:
|
|||
26b: f2 0f 70 c8 01[ ]+pshuflw \$0x1,%xmm0,%xmm1
|
||||
270: 66 0f 73 f8 01[ ]+pslldq \$0x1,%xmm0
|
||||
275: 66 0f 73 d8 01[ ]+psrldq \$0x1,%xmm0
|
||||
27a: 66 0f 6d c8[ ]+punpckhqdq %xmm0,%xmm3
|
||||
27a: 66 0f 6d c8[ ]+punpckhqdq %xmm0,%xmm1
|
||||
27e: 89 f6[ ]+mov[ ]+%esi,%esi
|
||||
|
|
|
@ -2,6 +2,13 @@
|
|||
|
||||
* i386-dis.c (prefix_user_table): Correct movq2dq, movdq2q, and
|
||||
movq operands.
|
||||
(twobyte_has_modrm): Update table.
|
||||
(need_modrm): Give it file scope.
|
||||
(MODRM_CHECK): Define.
|
||||
(dofloat): Use MODRM_CHECK.
|
||||
(OP_E): Likewise.
|
||||
(OP_EM): Likewise.
|
||||
(OP_EX): Likewise.
|
||||
|
||||
2001-05-07 Frank Ch. Eigler <fche@redhat.com>
|
||||
|
||||
|
|
|
@ -2228,20 +2228,20 @@ static const unsigned char twobyte_has_modrm[256] = {
|
|||
/* ------------------------------- */
|
||||
/* 00 */ 1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1, /* 0f */
|
||||
/* 10 */ 1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0, /* 1f */
|
||||
/* 20 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 2f */
|
||||
/* 20 */ 1,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1, /* 2f */
|
||||
/* 30 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 3f */
|
||||
/* 40 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 4f */
|
||||
/* 50 */ 1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1, /* 5f */
|
||||
/* 60 */ 1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1, /* 6f */
|
||||
/* 50 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 5f */
|
||||
/* 60 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 6f */
|
||||
/* 70 */ 1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1, /* 7f */
|
||||
/* 80 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 8f */
|
||||
/* 90 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 9f */
|
||||
/* a0 */ 0,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1, /* af */
|
||||
/* a0 */ 0,0,0,1,1,1,0,0,0,0,0,1,1,1,1,1, /* af */
|
||||
/* b0 */ 1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1, /* bf */
|
||||
/* c0 */ 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, /* cf */
|
||||
/* d0 */ 0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1, /* df */
|
||||
/* e0 */ 1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1, /* ef */
|
||||
/* f0 */ 0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0 /* ff */
|
||||
/* d0 */ 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* df */
|
||||
/* e0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* ef */
|
||||
/* f0 */ 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0 /* ff */
|
||||
/* ------------------------------- */
|
||||
/* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
|
||||
};
|
||||
|
@ -2279,8 +2279,14 @@ static disassemble_info *the_info;
|
|||
static int mod;
|
||||
static int rm;
|
||||
static int reg;
|
||||
static unsigned char need_modrm;
|
||||
static void oappend PARAMS ((const char *s));
|
||||
|
||||
/* If we are accessing mod/rm/reg without need_modrm set, then the
|
||||
values are stale. Hitting this abort likely indicates that you
|
||||
need to update onebyte_has_modrm or twobyte_has_modrm. */
|
||||
#define MODRM_CHECK if (!need_modrm) abort ()
|
||||
|
||||
static const char *names64[] = {
|
||||
"%rax","%rcx","%rdx","%rbx", "%rsp","%rbp","%rsi","%rdi",
|
||||
"%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15"
|
||||
|
@ -2989,7 +2995,6 @@ print_insn_i386 (pc, info)
|
|||
int two_source_ops;
|
||||
char *first, *second, *third;
|
||||
int needcomma;
|
||||
unsigned char need_modrm;
|
||||
unsigned char uses_SSE_prefix;
|
||||
VOLATILE int sizeflag;
|
||||
VOLATILE int orig_sizeflag;
|
||||
|
@ -3624,6 +3629,8 @@ dofloat (sizeflag)
|
|||
OP_E (v_mode, sizeflag);
|
||||
return;
|
||||
}
|
||||
/* skip mod/rm byte */
|
||||
MODRM_CHECK;
|
||||
codep++;
|
||||
|
||||
dp = &float_reg[floatop - 0xd8][reg];
|
||||
|
@ -4038,6 +4045,7 @@ OP_E (bytemode, sizeflag)
|
|||
add += 8;
|
||||
|
||||
/* skip mod/rm byte */
|
||||
MODRM_CHECK;
|
||||
codep++;
|
||||
|
||||
if (mod == 3)
|
||||
|
@ -4927,6 +4935,8 @@ OP_EM (bytemode, sizeflag)
|
|||
if (rex & REX_EXTZ)
|
||||
add = 8;
|
||||
|
||||
/* skip mod/rm byte */
|
||||
MODRM_CHECK;
|
||||
codep++;
|
||||
used_prefixes |= (prefixes & PREFIX_DATA);
|
||||
if (prefixes & PREFIX_DATA)
|
||||
|
@ -4951,6 +4961,8 @@ OP_EX (bytemode, sizeflag)
|
|||
if (rex & REX_EXTZ)
|
||||
add = 8;
|
||||
|
||||
/* skip mod/rm byte */
|
||||
MODRM_CHECK;
|
||||
codep++;
|
||||
sprintf (scratchbuf, "%%xmm%d", rm + add);
|
||||
oappend (scratchbuf);
|
||||
|
|
Loading…
Reference in a new issue