diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2007-01-13 16:48:00 +0000 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2007-01-13 16:48:00 +0000 |
commit | 99018f420ad6949183a05e15a39c2538e7be57cb (patch) | |
tree | bc8650b5029da8c287063b497d5a92b7af1f7226 /gas/config | |
parent | 97bac0d9c5e105dc9eb202fc11d87a43dc0b3c32 (diff) | |
download | gdb-99018f420ad6949183a05e15a39c2538e7be57cb.zip gdb-99018f420ad6949183a05e15a39c2538e7be57cb.tar.gz gdb-99018f420ad6949183a05e15a39c2538e7be57cb.tar.bz2 |
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.
Diffstat (limited to 'gas/config')
-rw-r--r-- | gas/config/tc-i386.c | 30 |
1 files changed, 15 insertions, 15 deletions
diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c index 889bfc3..2f50bcf 100644 --- a/gas/config/tc-i386.c +++ b/gas/config/tc-i386.c @@ -3443,9 +3443,12 @@ build_modrm_byte (void) if (i.mem_operands) { unsigned int fake_zero_displacement = 0; - unsigned int op = ((i.types[0] & AnyMem) - ? 0 - : (i.types[1] & AnyMem) ? 1 : 2); + unsigned int op; + + for (op = 0; op < i.operands; op++) + if ((i.types[op] & AnyMem)) + break; + assert (op < i.operands); default_seg = &ds; @@ -3616,18 +3619,15 @@ build_modrm_byte (void) registers are coded into the i.rm.reg field. */ if (i.reg_operands) { - unsigned int op = - ((i.types[0] - & (Reg | RegMMX | RegXMM - | SReg2 | SReg3 - | Control | Debug | Test)) - ? 0 - : ((i.types[1] - & (Reg | RegMMX | RegXMM - | SReg2 | SReg3 - | Control | Debug | Test)) - ? 1 - : 2)); + unsigned int op; + + for (op = 0; op < i.operands; op++) + if ((i.types[op] & (Reg | RegMMX | RegXMM + | SReg2 | SReg3 + | Control | Debug | Test))) + break; + assert (op < i.operands); + /* If there is an extension opcode to put here, the register number must be put into the regmem field. */ if (i.tm.extension_opcode != None) |