mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-19 17:18:24 +08:00
Wed Feb 14 19:01:27 1996 Alan Modra <alan@spri.levels.unisa.edu.au>
* i386-dis.c (onebyte_has_modrm): New static array. (twobyte_has_modrm): New static array. (print_insn_i386): Only fetch the mod/reg/rm byte if it is needed.
This commit is contained in:
@ -1,3 +1,14 @@
|
|||||||
|
Wed Feb 14 19:01:27 1996 Alan Modra <alan@spri.levels.unisa.edu.au>
|
||||||
|
|
||||||
|
* i386-dis.c (onebyte_has_modrm): New static array.
|
||||||
|
(twobyte_has_modrm): New static array.
|
||||||
|
(print_insn_i386): Only fetch the mod/reg/rm byte if it is needed.
|
||||||
|
|
||||||
|
Tue Feb 13 15:15:01 1996 Ian Lance Taylor <ian@cygnus.com>
|
||||||
|
|
||||||
|
* Makefile.in ($(SHLINK)): Check ts against $(SHLIB), not
|
||||||
|
$(SHLINK).
|
||||||
|
|
||||||
Mon Feb 12 16:26:06 1996 Michael Meissner <meissner@tiktok.cygnus.com>
|
Mon Feb 12 16:26:06 1996 Michael Meissner <meissner@tiktok.cygnus.com>
|
||||||
|
|
||||||
* ppc-opc.c (PPC): Undef, so default defination on Windows NT
|
* ppc-opc.c (PPC): Undef, so default defination on Windows NT
|
||||||
|
@ -685,6 +685,44 @@ struct dis386 dis386_twobyte[] = {
|
|||||||
{ "(bad)" }, { "(bad)" }, { "(bad)" }, { "(bad)" },
|
{ "(bad)" }, { "(bad)" }, { "(bad)" }, { "(bad)" },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const unsigned char onebyte_has_modrm[256] = {
|
||||||
|
1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,
|
||||||
|
1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,
|
||||||
|
1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,
|
||||||
|
1,1,1,1,0,0,0,0,1,1,1,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,0,0,0,
|
||||||
|
0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0,
|
||||||
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||||
|
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||||
|
1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0,
|
||||||
|
1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,
|
||||||
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||||
|
0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1
|
||||||
|
};
|
||||||
|
|
||||||
|
static const unsigned char twobyte_has_modrm[256] = {
|
||||||
|
1,1,1,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,
|
||||||
|
1,1,1,1,1,1,1,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,
|
||||||
|
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,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,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,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||||
|
0,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1,
|
||||||
|
1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,
|
||||||
|
1,1,1,1,1,1,1,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,0,0,0,0,0,0,0,
|
||||||
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||||
|
};
|
||||||
|
|
||||||
static char obuf[100];
|
static char obuf[100];
|
||||||
static char *obufp;
|
static char *obufp;
|
||||||
static char scratchbuf[100];
|
static char scratchbuf[100];
|
||||||
@ -993,6 +1031,7 @@ print_insn_i386 (pc, info)
|
|||||||
int enter_instruction;
|
int enter_instruction;
|
||||||
char *first, *second, *third;
|
char *first, *second, *third;
|
||||||
int needcomma;
|
int needcomma;
|
||||||
|
unsigned char need_modrm;
|
||||||
|
|
||||||
struct dis_private priv;
|
struct dis_private priv;
|
||||||
bfd_byte *inbuf = priv.the_buffer;
|
bfd_byte *inbuf = priv.the_buffer;
|
||||||
@ -1058,20 +1097,22 @@ print_insn_i386 (pc, info)
|
|||||||
{
|
{
|
||||||
FETCH_DATA (info, codep + 2);
|
FETCH_DATA (info, codep + 2);
|
||||||
dp = &dis386_twobyte[*++codep];
|
dp = &dis386_twobyte[*++codep];
|
||||||
|
need_modrm = twobyte_has_modrm[*codep];
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
dp = &dis386[*codep];
|
dp = &dis386[*codep];
|
||||||
|
need_modrm = onebyte_has_modrm[*codep];
|
||||||
|
}
|
||||||
codep++;
|
codep++;
|
||||||
|
|
||||||
/* Fetch the mod/reg/rm byte. FIXME: We should be only fetching
|
if (need_modrm)
|
||||||
this if we need it. As it is, this code loses if there is a
|
{
|
||||||
one-byte instruction (without a mod/reg/rm byte) at the end of
|
|
||||||
the address space. */
|
|
||||||
|
|
||||||
FETCH_DATA (info, codep + 1);
|
FETCH_DATA (info, codep + 1);
|
||||||
mod = (*codep >> 6) & 3;
|
mod = (*codep >> 6) & 3;
|
||||||
reg = (*codep >> 3) & 7;
|
reg = (*codep >> 3) & 7;
|
||||||
rm = *codep & 7;
|
rm = *codep & 7;
|
||||||
|
}
|
||||||
|
|
||||||
if (dp->name == NULL && dp->bytemode1 == FLOATCODE)
|
if (dp->name == NULL && dp->bytemode1 == FLOATCODE)
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user