From: Jan Beulich Date: Tue, 25 Jun 2019 07:27:05 +0000 (+0200) Subject: x86: simplify OP_I64() X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=a280ab8e81498c6049dca79f64bd0cc02ead01ab;p=binutils-gdb.git x86: simplify OP_I64() The only meaningful difference from OP_I() is the handling of the VEX.W=1 case in 64-bit mode for bytemode being v_mode. Funnel everything else into OP_I(), and drop no longer needed local variables. --- diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog index e02fd084003..78a8792a9e2 100644 --- a/opcodes/ChangeLog +++ b/opcodes/ChangeLog @@ -1,3 +1,8 @@ +2019-06-25 Jan Beulich + + * i386-dis.c (OP_I64): Forword more cases to OP_I(). Drop local + variables. + 2019-06-25 Jan Beulich * i386-dis.c (prefix_table): Use Edq for cvtsi2ss and cvtsi2sd. diff --git a/opcodes/i386-dis.c b/opcodes/i386-dis.c index f7d9641ecbd..b9527ae84fe 100644 --- a/opcodes/i386-dis.c +++ b/opcodes/i386-dis.c @@ -14788,53 +14788,16 @@ OP_I (int bytemode, int sizeflag) static void OP_I64 (int bytemode, int sizeflag) { - bfd_signed_vma op; - bfd_signed_vma mask = -1; - - if (address_mode != mode_64bit) + if (bytemode != v_mode || address_mode != mode_64bit || !(rex & REX_W)) { OP_I (bytemode, sizeflag); return; } - switch (bytemode) - { - case b_mode: - FETCH_DATA (the_info, codep + 1); - op = *codep++; - mask = 0xff; - break; - case v_mode: - USED_REX (REX_W); - if (rex & REX_W) - op = get64 (); - else - { - if (sizeflag & DFLAG) - { - op = get32 (); - mask = 0xffffffff; - } - else - { - op = get16 (); - mask = 0xfffff; - } - used_prefixes |= (prefixes & PREFIX_DATA); - } - break; - case w_mode: - mask = 0xfffff; - op = get16 (); - break; - default: - oappend (INTERNAL_DISASSEMBLER_ERROR); - return; - } + USED_REX (REX_W); - op &= mask; scratchbuf[0] = '$'; - print_operand_value (scratchbuf + 1, 1, op); + print_operand_value (scratchbuf + 1, 1, get64 ()); oappend_maybe_intel (scratchbuf); scratchbuf[0] = '\0'; }