2007-01-13 H.J. Lu <hongjiu.lu@intel.com>

* config/tc-i386.c (build_modrm_byte): Check number of operands
	when procssing memory/register operand.
This commit is contained in:
H.J. Lu
2007-01-13 16:48:00 +00:00
parent 97bac0d9c5
commit 99018f420a
2 changed files with 20 additions and 15 deletions

View File

@ -1,3 +1,8 @@
2007-01-13 H.J. Lu <hongjiu.lu@intel.com>
* config/tc-i386.c (build_modrm_byte): Check number of operands
when procssing memory/register operand.
2007-01-12 Nick Clifton <nickc@redhat.com> 2007-01-12 Nick Clifton <nickc@redhat.com>
PR gas/3856 PR gas/3856

View File

@ -3443,9 +3443,12 @@ build_modrm_byte (void)
if (i.mem_operands) if (i.mem_operands)
{ {
unsigned int fake_zero_displacement = 0; unsigned int fake_zero_displacement = 0;
unsigned int op = ((i.types[0] & AnyMem) unsigned int op;
? 0
: (i.types[1] & AnyMem) ? 1 : 2); for (op = 0; op < i.operands; op++)
if ((i.types[op] & AnyMem))
break;
assert (op < i.operands);
default_seg = &ds; default_seg = &ds;
@ -3616,18 +3619,15 @@ build_modrm_byte (void)
registers are coded into the i.rm.reg field. */ registers are coded into the i.rm.reg field. */
if (i.reg_operands) if (i.reg_operands)
{ {
unsigned int op = unsigned int op;
((i.types[0]
& (Reg | RegMMX | RegXMM for (op = 0; op < i.operands; op++)
| SReg2 | SReg3 if ((i.types[op] & (Reg | RegMMX | RegXMM
| Control | Debug | Test)) | SReg2 | SReg3
? 0 | Control | Debug | Test)))
: ((i.types[1] break;
& (Reg | RegMMX | RegXMM assert (op < i.operands);
| SReg2 | SReg3
| Control | Debug | Test))
? 1
: 2));
/* If there is an extension opcode to put here, the register /* If there is an extension opcode to put here, the register
number must be put into the regmem field. */ number must be put into the regmem field. */
if (i.tm.extension_opcode != None) if (i.tm.extension_opcode != None)