gas/testsuite/

2008-12-18  H.J. Lu  <hongjiu.lu@intel.com>

	* gas/i386/intel.d: Remove trailing white spaces after nop.
	* gas/i386/intelpic.d: Likewise.
	* gas/i386/nops16-1.d: Likewise.
	* gas/i386/nops-1-i686.d: Likewise.
	* gas/i386/nops-3.d: Likewise.
	* gas/i386/nops-3-i386.d: Likewise.
	* gas/i386/nops-3-i686.d: Likewise.
	* gas/i386/nops-4.d: Likewise.
	* gas/i386/nops-4-i386.d: Likewise.
	* gas/i386/nops-4-i686.d: Likewise.
	* gas/i386/opcode.d: Likewise.
	* gas/i386/opcode-suffix.d: Likewise.
	* gas/i386/reloc.d: Likewise.
	* gas/i386/tlsnopic.d: Likewise.
	* gas/i386/x86-64-nops-1.d: Likewise.
	* gas/i386/x86-64-nops-1-nocona.d: Likewise.
	* gas/i386/x86-64-nops-2.d: Likewise.
	* gas/i386/x86-64-nops-3.d: Likewise.
	* gas/i386/x86-64-nops-4-core2.d: Likewise.
	* gas/i386/x86-64-nops-4.d: Likewise.
	* gas/i386/x86-64-nops-4-k8.d: Likewise.
	* gas/i386/x86-64-opcode.d: Likewise.

ld/testsuite/

2008-12-18  H.J. Lu  <hongjiu.lu@intel.com>

	* ld-i386/tlsld1.dd: Remove trailing white spaces after nop.

opcodes/

2008-12-18  H.J. Lu  <hongjiu.lu@intel.com>

	* i386-dis.c (mnemonicendp): New.
	(op): Likewise.
	(print_insn): Use mnemonicendp.
	(OP_3DNowSuffix): Likewise.
	(CMP_Fixup): Likewise.
	(CMPXCHG8B_Fixup): Likewise.
	(CRC32_Fixup): Likewise.
	(OP_DREX_FCMP): Likewise.
	(OP_DREX_ICMP): Likewise.
	(VZERO_Fixup): Likewise.
	(VCMP_Fixup): Likewise.
	(PCLMUL_Fixup): Likewise.
	(VPERMIL2_Fixup): Likewise.
	(MOVBE_Fixup): Likewise.
	(putop): Update mnemonicendp.
	(oappend): Use stpcpy.
	(simd_cmp_op): Changed to struct op.
	(vex_cmp_op): Likewise.
	(pclmul_op): Likewise.
	(vpermil2_op): Likewise.
This commit is contained in:
H.J. Lu
2008-12-18 22:47:32 +00:00
parent 3914465446
commit ea397f5b07
27 changed files with 2814 additions and 2742 deletions

View File

@ -1,3 +1,28 @@
2008-12-18 H.J. Lu <hongjiu.lu@intel.com>
* gas/i386/intel.d: Remove trailing white spaces after nop.
* gas/i386/intelpic.d: Likewise.
* gas/i386/nops16-1.d: Likewise.
* gas/i386/nops-1-i686.d: Likewise.
* gas/i386/nops-3.d: Likewise.
* gas/i386/nops-3-i386.d: Likewise.
* gas/i386/nops-3-i686.d: Likewise.
* gas/i386/nops-4.d: Likewise.
* gas/i386/nops-4-i386.d: Likewise.
* gas/i386/nops-4-i686.d: Likewise.
* gas/i386/opcode.d: Likewise.
* gas/i386/opcode-suffix.d: Likewise.
* gas/i386/reloc.d: Likewise.
* gas/i386/tlsnopic.d: Likewise.
* gas/i386/x86-64-nops-1.d: Likewise.
* gas/i386/x86-64-nops-1-nocona.d: Likewise.
* gas/i386/x86-64-nops-2.d: Likewise.
* gas/i386/x86-64-nops-3.d: Likewise.
* gas/i386/x86-64-nops-4-core2.d: Likewise.
* gas/i386/x86-64-nops-4.d: Likewise.
* gas/i386/x86-64-nops-4-k8.d: Likewise.
* gas/i386/x86-64-opcode.d: Likewise.
2008-12-15 Richard Earnshaw <rearnsha@arm.com> 2008-12-15 Richard Earnshaw <rearnsha@arm.com>
* gas/arm/group-reloc-ldc.d: Disassembly of VFP instructions now uses * gas/arm/group-reloc-ldc.d: Disassembly of VFP instructions now uses

View File

@ -142,7 +142,7 @@ Disassembly of section .text:
*[0-9a-f]+: 8d 90 90 90 90 90[ ]+leal[ ]+-0x6f6f6f70\(%eax\),%edx *[0-9a-f]+: 8d 90 90 90 90 90[ ]+leal[ ]+-0x6f6f6f70\(%eax\),%edx
*[0-9a-f]+: 8e 90 90 90 90 90[ ]+movw[ ]+-0x6f6f6f70\(%eax\),%ss *[0-9a-f]+: 8e 90 90 90 90 90[ ]+movw[ ]+-0x6f6f6f70\(%eax\),%ss
*[0-9a-f]+: 8f 80 90 90 90 90[ ]+popl[ ]+-0x6f6f6f70\(%eax\) *[0-9a-f]+: 8f 80 90 90 90 90[ ]+popl[ ]+-0x6f6f6f70\(%eax\)
*[0-9a-f]+: 90[ ]+nop[ ]+ *[0-9a-f]+: 90[ ]+nop
*[0-9a-f]+: 91[ ]+xchgl[ ]+%eax,%ecx *[0-9a-f]+: 91[ ]+xchgl[ ]+%eax,%ecx
*[0-9a-f]+: 92[ ]+xchgl[ ]+%eax,%edx *[0-9a-f]+: 92[ ]+xchgl[ ]+%eax,%edx
*[0-9a-f]+: 93[ ]+xchgl[ ]+%eax,%ebx *[0-9a-f]+: 93[ ]+xchgl[ ]+%eax,%ebx

View File

@ -1,3 +1,7 @@
2008-12-18 H.J. Lu <hongjiu.lu@intel.com>
* ld-i386/tlsld1.dd: Remove trailing white spaces after nop.
2008-12-17 Hans-Peter Nilsson <hp@axis.com> 2008-12-17 Hans-Peter Nilsson <hp@axis.com>
* ld-cris/expalltst3, ld-cris/expdyn2.s, ld-cris/libdso-15.d: New * ld-cris/expalltst3, ld-cris/expdyn2.s, ld-cris/libdso-15.d: New

View File

@ -1,3 +1,26 @@
2008-12-18 H.J. Lu <hongjiu.lu@intel.com>
* i386-dis.c (mnemonicendp): New.
(op): Likewise.
(print_insn): Use mnemonicendp.
(OP_3DNowSuffix): Likewise.
(CMP_Fixup): Likewise.
(CMPXCHG8B_Fixup): Likewise.
(CRC32_Fixup): Likewise.
(OP_DREX_FCMP): Likewise.
(OP_DREX_ICMP): Likewise.
(VZERO_Fixup): Likewise.
(VCMP_Fixup): Likewise.
(PCLMUL_Fixup): Likewise.
(VPERMIL2_Fixup): Likewise.
(MOVBE_Fixup): Likewise.
(putop): Update mnemonicendp.
(oappend): Use stpcpy.
(simd_cmp_op): Changed to struct op.
(vex_cmp_op): Likewise.
(pclmul_op): Likewise.
(vpermil2_op): Likewise.
2008-12-15 Richard Earnshaw <rearnsha@arm.com> 2008-12-15 Richard Earnshaw <rearnsha@arm.com>
* arm-dis.c (coprocessor_opcodes): Disassemble VFP instructions using * arm-dis.c (coprocessor_opcodes): Disassemble VFP instructions using

View File

@ -1931,6 +1931,7 @@ static const unsigned char twobyte_has_modrm[256] = {
static char obuf[100]; static char obuf[100];
static char *obufp; static char *obufp;
static char *mnemonicendp;
static char scratchbuf[100]; static char scratchbuf[100];
static unsigned char *start_codep; static unsigned char *start_codep;
static unsigned char *insn_codep; static unsigned char *insn_codep;
@ -1961,6 +1962,12 @@ static unsigned char need_vex;
static unsigned char need_vex_reg; static unsigned char need_vex_reg;
static unsigned char vex_w_done; static unsigned char vex_w_done;
struct op
{
const char *name;
unsigned int len;
};
/* If we are accessing mod/rm/reg without need_modrm set, then the /* If we are accessing mod/rm/reg without need_modrm set, then the
values are stale. Hitting this abort likely indicates that you values are stale. Hitting this abort likely indicates that you
need to update onebyte_has_modrm or twobyte_has_modrm. */ need to update onebyte_has_modrm or twobyte_has_modrm. */
@ -10359,7 +10366,7 @@ print_insn (bfd_vma pc, disassemble_info *info)
if (prefix_obuf[0] != 0) if (prefix_obuf[0] != 0)
(*info->fprintf_func) (info->stream, "%s", prefix_obuf); (*info->fprintf_func) (info->stream, "%s", prefix_obuf);
obufp = obuf + strlen (obuf); obufp = mnemonicendp;
for (i = strlen (obuf) + strlen (prefix_obuf); i < 6; i++) for (i = strlen (obuf) + strlen (prefix_obuf); i < 6; i++)
oappend (" "); oappend (" ");
oappend (" "); oappend (" ");
@ -11184,14 +11191,14 @@ case_Q:
alt = 0; alt = 0;
} }
*obufp = 0; *obufp = 0;
mnemonicendp = obufp;
return 0; return 0;
} }
static void static void
oappend (const char *s) oappend (const char *s)
{ {
strcpy (obufp, s); obufp = stpcpy (obufp, s);
obufp += strlen (s);
} }
static void static void
@ -12769,7 +12776,7 @@ OP_3DNowSuffix (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
/* AMD 3DNow! instructions are specified by an opcode suffix in the /* AMD 3DNow! instructions are specified by an opcode suffix in the
place where an 8-bit immediate would normally go. ie. the last place where an 8-bit immediate would normally go. ie. the last
byte of the instruction. */ byte of the instruction. */
obufp = obuf + strlen (obuf); obufp = mnemonicendp;
mnemonic = Suffix3DNow[*codep++ & 0xff]; mnemonic = Suffix3DNow[*codep++ & 0xff];
if (mnemonic) if (mnemonic)
oappend (mnemonic); oappend (mnemonic);
@ -12783,17 +12790,19 @@ OP_3DNowSuffix (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
op_out[1][0] = '\0'; op_out[1][0] = '\0';
BadOp (); BadOp ();
} }
mnemonicendp = obufp;
} }
static const char *simd_cmp_op[] = { static struct op simd_cmp_op[] =
"eq", {
"lt", { STRING_COMMA_LEN ("eq") },
"le", { STRING_COMMA_LEN ("lt") },
"unord", { STRING_COMMA_LEN ("le") },
"neq", { STRING_COMMA_LEN ("unord") },
"nlt", { STRING_COMMA_LEN ("neq") },
"nle", { STRING_COMMA_LEN ("nlt") },
"ord" { STRING_COMMA_LEN ("nle") },
{ STRING_COMMA_LEN ("ord") }
}; };
static void static void
@ -12806,11 +12815,12 @@ CMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
if (cmp_type < ARRAY_SIZE (simd_cmp_op)) if (cmp_type < ARRAY_SIZE (simd_cmp_op))
{ {
char suffix [3]; char suffix [3];
char *p = obuf + strlen (obuf) - 2; char *p = mnemonicendp - 2;
suffix[0] = p[0]; suffix[0] = p[0];
suffix[1] = p[1]; suffix[1] = p[1];
suffix[2] = '\0'; suffix[2] = '\0';
sprintf (p, "%s%s", simd_cmp_op[cmp_type], suffix); sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
mnemonicendp += simd_cmp_op[cmp_type].len;
} }
else else
{ {
@ -12914,8 +12924,8 @@ CMPXCHG8B_Fixup (int bytemode, int sizeflag)
if (rex & REX_W) if (rex & REX_W)
{ {
/* Change cmpxchg8b to cmpxchg16b. */ /* Change cmpxchg8b to cmpxchg16b. */
char *p = obuf + strlen (obuf) - 2; char *p = mnemonicendp - 2;
strcpy (p, "16b"); mnemonicendp = stpcpy (p, "16b");
bytemode = o_mode; bytemode = o_mode;
} }
OP_M (bytemode, sizeflag); OP_M (bytemode, sizeflag);
@ -12947,19 +12957,19 @@ static void
CRC32_Fixup (int bytemode, int sizeflag) CRC32_Fixup (int bytemode, int sizeflag)
{ {
/* Add proper suffix to "crc32". */ /* Add proper suffix to "crc32". */
char *p = obuf + strlen (obuf); char *p = mnemonicendp;
switch (bytemode) switch (bytemode)
{ {
case b_mode: case b_mode:
if (intel_syntax) if (intel_syntax)
break; goto skip;
*p++ = 'b'; *p++ = 'b';
break; break;
case v_mode: case v_mode:
if (intel_syntax) if (intel_syntax)
break; goto skip;
USED_REX (REX_W); USED_REX (REX_W);
if (rex & REX_W) if (rex & REX_W)
@ -12974,8 +12984,10 @@ CRC32_Fixup (int bytemode, int sizeflag)
oappend (INTERNAL_DISASSEMBLER_ERROR); oappend (INTERNAL_DISASSEMBLER_ERROR);
break; break;
} }
mnemonicendp = p;
*p = '\0'; *p = '\0';
skip:
if (modrm.mod == 3) if (modrm.mod == 3)
{ {
int add; int add;
@ -13303,7 +13315,7 @@ OP_DREX_FCMP (int bytemode ATTRIBUTE_UNUSED,
else else
{ {
sprintf (scratchbuf, "com%s%s", cmp_test[byte], obuf+3); sprintf (scratchbuf, "com%s%s", cmp_test[byte], obuf+3);
strcpy (obuf, scratchbuf); mnemonicendp = stpcpy (obuf, scratchbuf);
codep++; codep++;
} }
} }
@ -13345,7 +13357,7 @@ OP_DREX_ICMP (int bytemode ATTRIBUTE_UNUSED,
else else
{ {
sprintf (scratchbuf, "pcom%s%s", cmp_test[byte], obuf+4); sprintf (scratchbuf, "pcom%s%s", cmp_test[byte], obuf+4);
strcpy (obuf, scratchbuf); mnemonicendp = stpcpy (obuf, scratchbuf);
codep++; codep++;
} }
} }
@ -13665,49 +13677,50 @@ VZERO_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
switch (vex.length) switch (vex.length)
{ {
case 128: case 128:
strcpy (obuf, "vzeroupper"); mnemonicendp = stpcpy (obuf, "vzeroupper");
break; break;
case 256: case 256:
strcpy (obuf, "vzeroall"); mnemonicendp = stpcpy (obuf, "vzeroall");
break; break;
default: default:
abort (); abort ();
} }
} }
static const char *vex_cmp_op[] = { static struct op vex_cmp_op[] =
"eq", {
"lt", { STRING_COMMA_LEN ("eq") },
"le", { STRING_COMMA_LEN ("lt") },
"unord", { STRING_COMMA_LEN ("le") },
"neq", { STRING_COMMA_LEN ("unord") },
"nlt", { STRING_COMMA_LEN ("neq") },
"nle", { STRING_COMMA_LEN ("nlt") },
"ord", { STRING_COMMA_LEN ("nle") },
"eq_uq", { STRING_COMMA_LEN ("ord") },
"nge", { STRING_COMMA_LEN ("eq_uq") },
"ngt", { STRING_COMMA_LEN ("nge") },
"false", { STRING_COMMA_LEN ("ngt") },
"neq_oq", { STRING_COMMA_LEN ("false") },
"ge", { STRING_COMMA_LEN ("neq_oq") },
"gt", { STRING_COMMA_LEN ("ge") },
"true", { STRING_COMMA_LEN ("gt") },
"eq_os", { STRING_COMMA_LEN ("true") },
"lt_oq", { STRING_COMMA_LEN ("eq_os") },
"le_oq", { STRING_COMMA_LEN ("lt_oq") },
"unord_s", { STRING_COMMA_LEN ("le_oq") },
"neq_us", { STRING_COMMA_LEN ("unord_s") },
"nlt_uq", { STRING_COMMA_LEN ("neq_us") },
"nle_uq", { STRING_COMMA_LEN ("nlt_uq") },
"ord_s", { STRING_COMMA_LEN ("nle_uq") },
"eq_us", { STRING_COMMA_LEN ("ord_s") },
"nge_uq", { STRING_COMMA_LEN ("eq_us") },
"ngt_uq", { STRING_COMMA_LEN ("nge_uq") },
"false_os", { STRING_COMMA_LEN ("ngt_uq") },
"neq_os", { STRING_COMMA_LEN ("false_os") },
"ge_oq", { STRING_COMMA_LEN ("neq_os") },
"gt_oq", { STRING_COMMA_LEN ("ge_oq") },
"true_us" { STRING_COMMA_LEN ("gt_oq") },
{ STRING_COMMA_LEN ("true_us") },
}; };
static void static void
@ -13720,11 +13733,12 @@ VCMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
if (cmp_type < ARRAY_SIZE (vex_cmp_op)) if (cmp_type < ARRAY_SIZE (vex_cmp_op))
{ {
char suffix [3]; char suffix [3];
char *p = obuf + strlen (obuf) - 2; char *p = mnemonicendp - 2;
suffix[0] = p[0]; suffix[0] = p[0];
suffix[1] = p[1]; suffix[1] = p[1];
suffix[2] = '\0'; suffix[2] = '\0';
sprintf (p, "%s%s", vex_cmp_op[cmp_type], suffix); sprintf (p, "%s%s", vex_cmp_op[cmp_type].name, suffix);
mnemonicendp += vex_cmp_op[cmp_type].len;
} }
else else
{ {
@ -13736,11 +13750,12 @@ VCMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
} }
} }
static const char *pclmul_op[] = { static const struct op pclmul_op[] =
"lql", {
"hql", { STRING_COMMA_LEN ("lql") },
"lqh", { STRING_COMMA_LEN ("hql") },
"hqh" { STRING_COMMA_LEN ("lqh") },
{ STRING_COMMA_LEN ("hqh") }
}; };
static void static void
@ -13765,12 +13780,13 @@ PCLMUL_Fixup (int bytemode ATTRIBUTE_UNUSED,
if (pclmul_type < ARRAY_SIZE (pclmul_op)) if (pclmul_type < ARRAY_SIZE (pclmul_op))
{ {
char suffix [4]; char suffix [4];
char *p = obuf + strlen (obuf) - 3; char *p = mnemonicendp - 3;
suffix[0] = p[0]; suffix[0] = p[0];
suffix[1] = p[1]; suffix[1] = p[1];
suffix[2] = p[2]; suffix[2] = p[2];
suffix[3] = '\0'; suffix[3] = '\0';
sprintf (p, "%s%s", pclmul_op[pclmul_type], suffix); sprintf (p, "%s%s", pclmul_op[pclmul_type].name, suffix);
mnemonicendp += pclmul_op[pclmul_type].len;
} }
else else
{ {
@ -13782,11 +13798,12 @@ PCLMUL_Fixup (int bytemode ATTRIBUTE_UNUSED,
} }
} }
static const char *vpermil2_op[] = { static const struct op vpermil2_op[] =
"td", {
"td", { STRING_COMMA_LEN ("td") },
"mo", { STRING_COMMA_LEN ("td") },
"mz" { STRING_COMMA_LEN ("mo") },
{ STRING_COMMA_LEN ("mz") }
}; };
static void static void
@ -13800,12 +13817,13 @@ VPERMIL2_Fixup (int bytemode ATTRIBUTE_UNUSED,
if (vpermil2_type < ARRAY_SIZE (vpermil2_op)) if (vpermil2_type < ARRAY_SIZE (vpermil2_op))
{ {
char suffix [4]; char suffix [4];
char *p = obuf + strlen (obuf) - 3; char *p = mnemonicendp - 3;
suffix[0] = p[0]; suffix[0] = p[0];
suffix[1] = p[1]; suffix[1] = p[1];
suffix[2] = p[2]; suffix[2] = p[2];
suffix[3] = '\0'; suffix[3] = '\0';
sprintf (p, "%s%s", vpermil2_op[vpermil2_type], suffix); sprintf (p, "%s%s", vpermil2_op[vpermil2_type].name, suffix);
mnemonicendp += vpermil2_op[vpermil2_type].len;
} }
else else
{ {
@ -13821,13 +13839,13 @@ static void
MOVBE_Fixup (int bytemode, int sizeflag) MOVBE_Fixup (int bytemode, int sizeflag)
{ {
/* Add proper suffix to "movbe". */ /* Add proper suffix to "movbe". */
char *p = obuf + strlen (obuf); char *p = mnemonicendp;
switch (bytemode) switch (bytemode)
{ {
case v_mode: case v_mode:
if (intel_syntax) if (intel_syntax)
break; goto skip;
USED_REX (REX_W); USED_REX (REX_W);
if (sizeflag & SUFFIX_ALWAYS) if (sizeflag & SUFFIX_ALWAYS)
@ -13845,7 +13863,9 @@ MOVBE_Fixup (int bytemode, int sizeflag)
oappend (INTERNAL_DISASSEMBLER_ERROR); oappend (INTERNAL_DISASSEMBLER_ERROR);
break; break;
} }
mnemonicendp = p;
*p = '\0'; *p = '\0';
skip:
OP_M (bytemode, sizeflag); OP_M (bytemode, sizeflag);
} }