From 1b9f0c97ada321f4722312fb97acdf5cbb8bfb47 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Thu, 12 Nov 2009 02:21:46 +0000 Subject: [PATCH] 2009-11-11 H.J. Lu * config/tc-i386.c (build_modrm_byte): Don't set register operand twice. --- gas/ChangeLog | 5 +++++ gas/config/tc-i386.c | 28 ++++++++++++++++------------ 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/gas/ChangeLog b/gas/ChangeLog index a372f9a5c30..c239616a607 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,8 @@ +2009-11-11 H.J. Lu + + * config/tc-i386.c (build_modrm_byte): Don't set register + operand twice. + 2009-11-11 Jan Kratochvil * configure.in: Call ACX_LARGEFILE. Stop calling AC_SYS_LARGEFILE. diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c index 2996751e544..e787215ccca 100644 --- a/gas/config/tc-i386.c +++ b/gas/config/tc-i386.c @@ -5344,19 +5344,23 @@ build_modrm_byte (void) i.vex.register_specifier = i.op[vex_reg].regs; } - /* 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) + /* Don't set OP operand twice. */ + if (vex_reg != op) { - i.rm.regmem = i.op[op].regs->reg_num; - if ((i.op[op].regs->reg_flags & RegRex) != 0) - i.rex |= REX_B; - } - else - { - i.rm.reg = i.op[op].regs->reg_num; - if ((i.op[op].regs->reg_flags & RegRex) != 0) - i.rex |= REX_R; + /* 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) + { + i.rm.regmem = i.op[op].regs->reg_num; + if ((i.op[op].regs->reg_flags & RegRex) != 0) + i.rex |= REX_B; + } + else + { + i.rm.reg = i.op[op].regs->reg_num; + if ((i.op[op].regs->reg_flags & RegRex) != 0) + i.rex |= REX_R; + } } /* Now, if no memory operand has set i.rm.mode = 0, 1, 2 we -- 2.30.2