x86: simplify OP_I64()
authorJan Beulich <jbeulich@novell.com>
Tue, 25 Jun 2019 07:27:05 +0000 (09:27 +0200)
committerJan Beulich <jbeulich@suse.com>
Tue, 25 Jun 2019 07:35:17 +0000 (09:35 +0200)
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.

opcodes/ChangeLog
opcodes/i386-dis.c

index e02fd084003f5bbfa1b2cae8aa1b7d8840631202..78a8792a9e2662efcf078f093993fe8d81198872 100644 (file)
@@ -1,3 +1,8 @@
+2019-06-25  Jan Beulich  <jbeulich@suse.com>
+
+       * i386-dis.c (OP_I64): Forword more cases to OP_I(). Drop local
+       variables.
+
 2019-06-25  Jan Beulich  <jbeulich@suse.com>
 
        * i386-dis.c (prefix_table): Use Edq for cvtsi2ss and cvtsi2sd.
index f7d9641ecbd8da8cb50247a629f006acd7f7741b..b9527ae84fef20b28d113d419e308154f8a650a8 100644 (file)
@@ -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';
 }