forked from Imagelibrary/binutils-gdb
gas/
2005-07-05 Jan Beulich <jbeulich@novell.com> * config/tc-i386.h (CpuSVME): New. (CpuUnknownFlags): Include CpuSVME. * config/tc-i386.c (cpu_arch): Add .pacifica and .svme. Add opteron as alias of sledgehammer. (md_assemble): Include invlpga in the check for insns with two source operands. (process_operands): Include SVME insns in the check for ignored segment overrides. Adjust diagnostic. (i386_index_check): Special-case SVME insns with memory operands. gas/testsuite/ 2005-07-05 Jan Beulich <jbeulich@novell.com> * gas/i386/svme.d: New. * gas/i386/svme.s: New. * gas/i386/svme64.d: New. * gas/i386/i386.exp: Run new tests. include/opcode/ 2005-07-05 Jan Beulich <jbeulich@novell.com> * i386.h (i386_optab): Add new insns. opcodes/ 2005-07-05 Jan Beulich <jbeulich@novell.com> * i386-dis.c (SVME_Fixup): New. (grps): Use it for the lidt entry. (PNI_Fixup): Call OP_M rather than OP_E. (INVLPG_Fixup): Likewise.
This commit is contained in:
@@ -95,6 +95,7 @@ static void OP_3DNowSuffix (int, int);
|
||||
static void OP_SIMD_Suffix (int, int);
|
||||
static void SIMD_Fixup (int, int);
|
||||
static void PNI_Fixup (int, int);
|
||||
static void SVME_Fixup (int, int);
|
||||
static void INVLPG_Fixup (int, int);
|
||||
static void BadOp (void);
|
||||
static void SEG_Fixup (int, int);
|
||||
@@ -1374,7 +1375,7 @@ static const struct dis386 grps[][8] = {
|
||||
{ "sgdtIQ", M, XX, XX },
|
||||
{ "sidtIQ", PNI_Fixup, 0, XX, XX },
|
||||
{ "lgdt{Q|Q||}", M, XX, XX },
|
||||
{ "lidt{Q|Q||}", M, XX, XX },
|
||||
{ "lidt{Q|Q||}", SVME_Fixup, 0, XX, XX },
|
||||
{ "smswQ", Ev, XX, XX },
|
||||
{ "(bad)", XX, XX, XX },
|
||||
{ "lmsw", Ew, XX, XX },
|
||||
@@ -4445,7 +4446,77 @@ PNI_Fixup (int extrachar ATTRIBUTE_UNUSED, int sizeflag)
|
||||
codep++;
|
||||
}
|
||||
else
|
||||
OP_E (0, sizeflag);
|
||||
OP_M (0, sizeflag);
|
||||
}
|
||||
|
||||
static void
|
||||
SVME_Fixup (int bytemode, int sizeflag)
|
||||
{
|
||||
const char *alt;
|
||||
char *p;
|
||||
|
||||
switch (*codep)
|
||||
{
|
||||
case 0xd8:
|
||||
alt = "vmrun";
|
||||
break;
|
||||
case 0xd9:
|
||||
alt = "vmmcall";
|
||||
break;
|
||||
case 0xda:
|
||||
alt = "vmload";
|
||||
break;
|
||||
case 0xdb:
|
||||
alt = "vmsave";
|
||||
break;
|
||||
case 0xdc:
|
||||
alt = "stgi";
|
||||
break;
|
||||
case 0xdd:
|
||||
alt = "clgi";
|
||||
break;
|
||||
case 0xde:
|
||||
alt = "skinit";
|
||||
break;
|
||||
case 0xdf:
|
||||
alt = "invlpga";
|
||||
break;
|
||||
default:
|
||||
OP_M (bytemode, sizeflag);
|
||||
return;
|
||||
}
|
||||
/* Override "lidt". */
|
||||
p = obuf + strlen (obuf) - 4;
|
||||
/* We might have a suffix. */
|
||||
if (*p == 'i')
|
||||
--p;
|
||||
strcpy (p, alt);
|
||||
if (!(prefixes & PREFIX_ADDR))
|
||||
{
|
||||
++codep;
|
||||
return;
|
||||
}
|
||||
used_prefixes |= PREFIX_ADDR;
|
||||
switch (*codep++)
|
||||
{
|
||||
case 0xdf:
|
||||
strcpy (op2out, names32[1]);
|
||||
two_source_ops = 1;
|
||||
/* Fall through. */
|
||||
case 0xd8:
|
||||
case 0xda:
|
||||
case 0xdb:
|
||||
*obufp++ = open_char;
|
||||
if (mode_64bit || (sizeflag & AFLAG))
|
||||
alt = names32[0];
|
||||
else
|
||||
alt = names16[0];
|
||||
strcpy (obufp, alt);
|
||||
obufp += strlen (alt);
|
||||
*obufp++ = close_char;
|
||||
*obufp = '\0';
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -4462,7 +4533,7 @@ INVLPG_Fixup (int bytemode, int sizeflag)
|
||||
alt = "rdtscp";
|
||||
break;
|
||||
default:
|
||||
OP_E (bytemode, sizeflag);
|
||||
OP_M (bytemode, sizeflag);
|
||||
return;
|
||||
}
|
||||
/* Override "invlpg". */
|
||||
|
||||
Reference in New Issue
Block a user