x86emul: fold SrcImmByte fetching
authorJan Beulich <jbeulich@suse.com>
Mon, 15 Aug 2016 10:21:24 +0000 (12:21 +0200)
committerJan Beulich <jbeulich@suse.com>
Mon, 15 Aug 2016 10:21:24 +0000 (12:21 +0200)
There's no need for having identical code spelled out twice.

Signed-off-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
xen/arch/x86/x86_emulate/x86_emulate.c

index 8c82d5933be34de0def1632372d3e957a57c66fe..85e20b63fbe87911556b2a0ed6ca8a9d12f9e167 100644 (file)
@@ -1979,9 +1979,14 @@ x86_emulate(
             goto done;
         break;
     case SrcImm:
+        if ( !(d & ByteOp) )
+            src.bytes = op_bytes != 8 ? op_bytes : 4;
+        else
+        {
+    case SrcImmByte:
+            src.bytes = 1;
+        }
         src.type  = OP_IMM;
-        src.bytes = (d & ByteOp) ? 1 : op_bytes;
-        if ( src.bytes == 8 ) src.bytes = 4;
         /* NB. Immediates are sign-extended as necessary. */
         switch ( src.bytes )
         {
@@ -1990,11 +1995,6 @@ x86_emulate(
         case 4: src.val = insn_fetch_type(int32_t); break;
         }
         break;
-    case SrcImmByte:
-        src.type  = OP_IMM;
-        src.bytes = 1;
-        src.val   = insn_fetch_type(int8_t);
-        break;
     }
 
     /* Decode and fetch the destination operand: register or memory. */