Switch-interpreter: Add helpers to get opcode arguments.

Add trivial helpers to get opcodes arguments (A/B/C).

Ensure the generic getters in Instruction can take
advantage of knowing the format at compile-time.

As the first step, I have simplified the code only where
the argument is used as index for SetVReg/GetVReg calls.

Test: ART_USE_CXX_INTERPRETER=true ./art/test.py -b --host
Test: ART_USE_CXX_INTERPRETER=true ./art/tools/run-jdwp-tests.sh \
      --mode=host --variant=X32 --debug --no-jit
Change-Id: I765c0eb16438806c3624fabe3aade040c7bb3387
diff --git a/dexlayout/dex_ir_builder.cc b/dexlayout/dex_ir_builder.cc
index f4195b2..5636e2c 100644
--- a/dexlayout/dex_ir_builder.cc
+++ b/dexlayout/dex_ir_builder.cc
@@ -25,6 +25,7 @@
 #include "dex/class_accessor-inl.h"
 #include "dex/code_item_accessors-inl.h"
 #include "dex/dex_file_exception_helpers.h"
+#include "dex/dex_instruction-inl.h"
 #include "dexlayout.h"
 
 namespace art {
diff --git a/libdexfile/dex/dex_instruction-inl.h b/libdexfile/dex/dex_instruction-inl.h
index e0cffdd..88e9381 100644
--- a/libdexfile/dex/dex_instruction-inl.h
+++ b/libdexfile/dex/dex_instruction-inl.h
@@ -57,33 +57,38 @@
 }
 
 inline int32_t Instruction::VRegA() const {
-  switch (FormatOf(Opcode())) {
-    case k10t: return VRegA_10t();
-    case k10x: return VRegA_10x();
-    case k11n: return VRegA_11n();
-    case k11x: return VRegA_11x();
-    case k12x: return VRegA_12x();
+  return VRegA(FormatOf(Opcode()), Fetch16(0));
+}
+
+inline int32_t Instruction::VRegA(Format format, uint16_t inst_data) const {
+  DCHECK_EQ(format, FormatOf(Opcode()));
+  switch (format) {
+    case k10t: return VRegA_10t(inst_data);
+    case k10x: return VRegA_10x(inst_data);
+    case k11n: return VRegA_11n(inst_data);
+    case k11x: return VRegA_11x(inst_data);
+    case k12x: return VRegA_12x(inst_data);
     case k20t: return VRegA_20t();
-    case k21c: return VRegA_21c();
-    case k21h: return VRegA_21h();
-    case k21s: return VRegA_21s();
-    case k21t: return VRegA_21t();
-    case k22b: return VRegA_22b();
-    case k22c: return VRegA_22c();
-    case k22s: return VRegA_22s();
-    case k22t: return VRegA_22t();
-    case k22x: return VRegA_22x();
-    case k23x: return VRegA_23x();
+    case k21c: return VRegA_21c(inst_data);
+    case k21h: return VRegA_21h(inst_data);
+    case k21s: return VRegA_21s(inst_data);
+    case k21t: return VRegA_21t(inst_data);
+    case k22b: return VRegA_22b(inst_data);
+    case k22c: return VRegA_22c(inst_data);
+    case k22s: return VRegA_22s(inst_data);
+    case k22t: return VRegA_22t(inst_data);
+    case k22x: return VRegA_22x(inst_data);
+    case k23x: return VRegA_23x(inst_data);
     case k30t: return VRegA_30t();
-    case k31c: return VRegA_31c();
-    case k31i: return VRegA_31i();
-    case k31t: return VRegA_31t();
+    case k31c: return VRegA_31c(inst_data);
+    case k31i: return VRegA_31i(inst_data);
+    case k31t: return VRegA_31t(inst_data);
     case k32x: return VRegA_32x();
-    case k35c: return VRegA_35c();
-    case k3rc: return VRegA_3rc();
-    case k45cc: return VRegA_45cc();
-    case k4rcc: return VRegA_4rcc();
-    case k51l: return VRegA_51l();
+    case k35c: return VRegA_35c(inst_data);
+    case k3rc: return VRegA_3rc(inst_data);
+    case k45cc: return VRegA_45cc(inst_data);
+    case k4rcc: return VRegA_4rcc(inst_data);
+    case k51l: return VRegA_51l(inst_data);
     default:
       LOG(FATAL) << "Tried to access vA of instruction " << Name() << " which has no A operand.";
       exit(EXIT_FAILURE);
@@ -255,17 +260,22 @@
 }
 
 inline int32_t Instruction::VRegB() const {
-  switch (FormatOf(Opcode())) {
-    case k11n: return VRegB_11n();
-    case k12x: return VRegB_12x();
+  return VRegB(FormatOf(Opcode()), Fetch16(0));
+}
+
+inline int32_t Instruction::VRegB(Format format, uint16_t inst_data) const {
+  DCHECK_EQ(format, FormatOf(Opcode()));
+  switch (format) {
+    case k11n: return VRegB_11n(inst_data);
+    case k12x: return VRegB_12x(inst_data);
     case k21c: return VRegB_21c();
     case k21h: return VRegB_21h();
     case k21s: return VRegB_21s();
     case k21t: return VRegB_21t();
     case k22b: return VRegB_22b();
-    case k22c: return VRegB_22c();
-    case k22s: return VRegB_22s();
-    case k22t: return VRegB_22t();
+    case k22c: return VRegB_22c(inst_data);
+    case k22s: return VRegB_22s(inst_data);
+    case k22t: return VRegB_22t(inst_data);
     case k22x: return VRegB_22x();
     case k23x: return VRegB_23x();
     case k31c: return VRegB_31c();
@@ -412,7 +422,12 @@
 }
 
 inline int32_t Instruction::VRegC() const {
-  switch (FormatOf(Opcode())) {
+  return VRegC(FormatOf(Opcode()));
+}
+
+inline int32_t Instruction::VRegC(Format format) const {
+  DCHECK_EQ(format, FormatOf(Opcode()));
+  switch (format) {
     case k22b: return VRegC_22b();
     case k22c: return VRegC_22c();
     case k22s: return VRegC_22s();
diff --git a/libdexfile/dex/dex_instruction.cc b/libdexfile/dex/dex_instruction.cc
index f36a2aa..37fc455 100644
--- a/libdexfile/dex/dex_instruction.cc
+++ b/libdexfile/dex/dex_instruction.cc
@@ -510,6 +510,7 @@
       }
       break;
     case k51l: os << StringPrintf("%s v%d, #%+" PRId64, opcode, VRegA_51l(), VRegB_51l()); break;
+    case kInvalidFormat: os << "<invalid-opcode-format>";
   }
   return os.str();
 }
diff --git a/libdexfile/dex/dex_instruction.h b/libdexfile/dex/dex_instruction.h
index 4b38904..a783301 100644
--- a/libdexfile/dex/dex_instruction.h
+++ b/libdexfile/dex/dex_instruction.h
@@ -123,6 +123,7 @@
     k4rcc,  // op {VCCCC .. v(CCCC+AA-1)}, meth@BBBB, proto@HHHH (AA: count)
 
     k51l,  // op vAA, #+BBBBBBBBBBBBBBBB
+    kInvalidFormat,
   };
 
   enum IndexType : uint8_t {
@@ -291,6 +292,7 @@
   // VRegA
   bool HasVRegA() const;
   ALWAYS_INLINE int32_t VRegA() const;
+  ALWAYS_INLINE int32_t VRegA(Format format, uint16_t inst_data) const;
 
   int8_t VRegA_10t() const {
     return VRegA_10t(Fetch16(0));
@@ -393,7 +395,8 @@
 
   // VRegB
   bool HasVRegB() const;
-  int32_t VRegB() const;
+  ALWAYS_INLINE int32_t VRegB() const;
+  ALWAYS_INLINE int32_t VRegB(Format format, uint16_t inst_data) const;
 
   bool HasWideVRegB() const;
   uint64_t WideVRegB() const;
@@ -441,7 +444,8 @@
 
   // VRegC
   bool HasVRegC() const;
-  int32_t VRegC() const;
+  ALWAYS_INLINE int32_t VRegC() const;
+  ALWAYS_INLINE int32_t VRegC(Format format) const;
 
   int8_t VRegC_22b() const;
   uint16_t VRegC_22c() const;
diff --git a/runtime/interpreter/interpreter_switch_impl-inl.h b/runtime/interpreter/interpreter_switch_impl-inl.h
index 1a88f1b..7553527 100644
--- a/runtime/interpreter/interpreter_switch_impl-inl.h
+++ b/runtime/interpreter/interpreter_switch_impl-inl.h
@@ -46,7 +46,7 @@
 // Helper methods may return boolean value - in which case 'false' always means
 // "stop executing current opcode" (which does not necessarily exit the interpreter loop).
 //
-template<bool do_access_check, bool transaction_active>
+template<bool do_access_check, bool transaction_active, Instruction::Format kFormat>
 class InstructionHandler {
  public:
   ALWAYS_INLINE WARN_UNUSED bool CheckForceReturn()
@@ -110,7 +110,7 @@
     //    address even in the handler copy. Make a copy of them just for the call as well.
     const Instruction* inst_copy = inst;
     bool exit_loop_copy = exit_interpreter_loop;
-    InstructionHandler<do_access_check, transaction_active> handler_copy(
+    InstructionHandler<do_access_check, transaction_active, kFormat> handler_copy(
         ctx, instrumentation, self, shadow_frame, dex_pc, inst_copy, inst_data, exit_loop_copy);
     bool result = handler_copy.HandlePendingExceptionWithInstrumentationImpl(instr);
     inst = inst_copy;
@@ -357,78 +357,78 @@
   }
 
   ALWAYS_INLINE void MOVE() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVReg(inst->VRegA_12x(inst_data),
-                         shadow_frame.GetVReg(inst->VRegB_12x(inst_data)));
+    shadow_frame.SetVReg(A(),
+                         shadow_frame.GetVReg(B()));
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void MOVE_FROM16() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVReg(inst->VRegA_22x(inst_data),
-                         shadow_frame.GetVReg(inst->VRegB_22x()));
+    shadow_frame.SetVReg(A(),
+                         shadow_frame.GetVReg(B()));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void MOVE_16() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVReg(inst->VRegA_32x(),
-                         shadow_frame.GetVReg(inst->VRegB_32x()));
+    shadow_frame.SetVReg(A(),
+                         shadow_frame.GetVReg(B()));
     inst = inst->Next_3xx();
   }
 
   ALWAYS_INLINE void MOVE_WIDE() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegLong(inst->VRegA_12x(inst_data),
-                             shadow_frame.GetVRegLong(inst->VRegB_12x(inst_data)));
+    shadow_frame.SetVRegLong(A(),
+                             shadow_frame.GetVRegLong(B()));
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void MOVE_WIDE_FROM16() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegLong(inst->VRegA_22x(inst_data),
-                             shadow_frame.GetVRegLong(inst->VRegB_22x()));
+    shadow_frame.SetVRegLong(A(),
+                             shadow_frame.GetVRegLong(B()));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void MOVE_WIDE_16() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegLong(inst->VRegA_32x(),
-                             shadow_frame.GetVRegLong(inst->VRegB_32x()));
+    shadow_frame.SetVRegLong(A(),
+                             shadow_frame.GetVRegLong(B()));
     inst = inst->Next_3xx();
   }
 
   ALWAYS_INLINE void MOVE_OBJECT() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegReference(inst->VRegA_12x(inst_data),
-                                  shadow_frame.GetVRegReference(inst->VRegB_12x(inst_data)));
+    shadow_frame.SetVRegReference(A(),
+                                  shadow_frame.GetVRegReference(B()));
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void MOVE_OBJECT_FROM16() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegReference(inst->VRegA_22x(inst_data),
-                                  shadow_frame.GetVRegReference(inst->VRegB_22x()));
+    shadow_frame.SetVRegReference(A(),
+                                  shadow_frame.GetVRegReference(B()));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void MOVE_OBJECT_16() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegReference(inst->VRegA_32x(),
-                                  shadow_frame.GetVRegReference(inst->VRegB_32x()));
+    shadow_frame.SetVRegReference(A(),
+                                  shadow_frame.GetVRegReference(B()));
     inst = inst->Next_3xx();
   }
 
   ALWAYS_INLINE void MOVE_RESULT() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVReg(inst->VRegA_11x(inst_data), ResultRegister()->GetI());
+    shadow_frame.SetVReg(A(), ResultRegister()->GetI());
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void MOVE_RESULT_WIDE() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegLong(inst->VRegA_11x(inst_data), ResultRegister()->GetJ());
+    shadow_frame.SetVRegLong(A(), ResultRegister()->GetJ());
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void MOVE_RESULT_OBJECT() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegReference(inst->VRegA_11x(inst_data), ResultRegister()->GetL());
+    shadow_frame.SetVRegReference(A(), ResultRegister()->GetL());
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void MOVE_EXCEPTION() REQUIRES_SHARED(Locks::mutator_lock_) {
     ObjPtr<mirror::Throwable> exception = self->GetException();
     DCHECK(exception != nullptr) << "No pending exception on MOVE_EXCEPTION instruction";
-    shadow_frame.SetVRegReference(inst->VRegA_11x(inst_data), exception);
+    shadow_frame.SetVRegReference(A(), exception);
     self->ClearException();
     inst = inst->Next_1xx();
   }
@@ -489,7 +489,7 @@
   ALWAYS_INLINE void RETURN() REQUIRES_SHARED(Locks::mutator_lock_) {
     JValue result;
     result.SetJ(0);
-    result.SetI(shadow_frame.GetVReg(inst->VRegA_11x(inst_data)));
+    result.SetI(shadow_frame.GetVReg(A()));
     self->AllowThreadSuspension();
     if (!HandleMonitorChecks()) {
       return;
@@ -516,7 +516,7 @@
 
   ALWAYS_INLINE void RETURN_WIDE() REQUIRES_SHARED(Locks::mutator_lock_) {
     JValue result;
-    result.SetJ(shadow_frame.GetVRegLong(inst->VRegA_11x(inst_data)));
+    result.SetJ(shadow_frame.GetVRegLong(A()));
     self->AllowThreadSuspension();
     if (!HandleMonitorChecks()) {
       return;
@@ -631,22 +631,22 @@
   }
 
   ALWAYS_INLINE void CONST_WIDE_16() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegLong(inst->VRegA_21s(inst_data), inst->VRegB_21s());
+    shadow_frame.SetVRegLong(A(), inst->VRegB_21s());
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void CONST_WIDE_32() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegLong(inst->VRegA_31i(inst_data), inst->VRegB_31i());
+    shadow_frame.SetVRegLong(A(), inst->VRegB_31i());
     inst = inst->Next_3xx();
   }
 
   ALWAYS_INLINE void CONST_WIDE() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegLong(inst->VRegA_51l(inst_data), inst->VRegB_51l());
+    shadow_frame.SetVRegLong(A(), inst->VRegB_51l());
     inst = inst->Next_51l();
   }
 
   ALWAYS_INLINE void CONST_WIDE_HIGH16() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegLong(inst->VRegA_21h(inst_data),
+    shadow_frame.SetVRegLong(A(),
                              static_cast<uint64_t>(inst->VRegB_21h()) << 48);
     inst = inst->Next_2xx();
   }
@@ -658,7 +658,7 @@
     if (UNLIKELY(s == nullptr)) {
       HANDLE_PENDING_EXCEPTION();
     } else {
-      shadow_frame.SetVRegReference(inst->VRegA_21c(inst_data), s);
+      shadow_frame.SetVRegReference(A(), s);
       inst = inst->Next_2xx();
     }
   }
@@ -670,7 +670,7 @@
     if (UNLIKELY(s == nullptr)) {
       HANDLE_PENDING_EXCEPTION();
     } else {
-      shadow_frame.SetVRegReference(inst->VRegA_31c(inst_data), s);
+      shadow_frame.SetVRegReference(A(), s);
       inst = inst->Next_3xx();
     }
   }
@@ -684,7 +684,7 @@
     if (UNLIKELY(c == nullptr)) {
       HANDLE_PENDING_EXCEPTION();
     } else {
-      shadow_frame.SetVRegReference(inst->VRegA_21c(inst_data), c);
+      shadow_frame.SetVRegReference(A(), c);
       inst = inst->Next_2xx();
     }
   }
@@ -697,7 +697,7 @@
     if (UNLIKELY(mh == nullptr)) {
       HANDLE_PENDING_EXCEPTION();
     } else {
-      shadow_frame.SetVRegReference(inst->VRegA_21c(inst_data), mh);
+      shadow_frame.SetVRegReference(A(), mh);
       inst = inst->Next_2xx();
     }
   }
@@ -710,7 +710,7 @@
     if (UNLIKELY(mt == nullptr)) {
       HANDLE_PENDING_EXCEPTION();
     } else {
-      shadow_frame.SetVRegReference(inst->VRegA_21c(inst_data), mt);
+      shadow_frame.SetVRegReference(A(), mt);
       inst = inst->Next_2xx();
     }
   }
@@ -719,7 +719,7 @@
     if (!HandleAsyncException()) {
       return;
     }
-    ObjPtr<mirror::Object> obj = shadow_frame.GetVRegReference(inst->VRegA_11x(inst_data));
+    ObjPtr<mirror::Object> obj = shadow_frame.GetVRegReference(A());
     if (UNLIKELY(obj == nullptr)) {
       ThrowNullPointerExceptionFromInterpreter();
       HANDLE_PENDING_EXCEPTION();
@@ -733,7 +733,7 @@
     if (!HandleAsyncException()) {
       return;
     }
-    ObjPtr<mirror::Object> obj = shadow_frame.GetVRegReference(inst->VRegA_11x(inst_data));
+    ObjPtr<mirror::Object> obj = shadow_frame.GetVRegReference(A());
     if (UNLIKELY(obj == nullptr)) {
       ThrowNullPointerExceptionFromInterpreter();
       HANDLE_PENDING_EXCEPTION();
@@ -752,7 +752,7 @@
     if (UNLIKELY(c == nullptr)) {
       HANDLE_PENDING_EXCEPTION();
     } else {
-      ObjPtr<mirror::Object> obj = shadow_frame.GetVRegReference(inst->VRegA_21c(inst_data));
+      ObjPtr<mirror::Object> obj = shadow_frame.GetVRegReference(A());
       if (UNLIKELY(obj != nullptr && !obj->InstanceOf(c))) {
         ThrowClassCastException(c, obj->GetClass());
         HANDLE_PENDING_EXCEPTION();
@@ -771,20 +771,20 @@
     if (UNLIKELY(c == nullptr)) {
       HANDLE_PENDING_EXCEPTION();
     } else {
-      ObjPtr<mirror::Object> obj = shadow_frame.GetVRegReference(inst->VRegB_22c(inst_data));
-      shadow_frame.SetVReg(inst->VRegA_22c(inst_data),
+      ObjPtr<mirror::Object> obj = shadow_frame.GetVRegReference(B());
+      shadow_frame.SetVReg(A(),
                            (obj != nullptr && obj->InstanceOf(c)) ? 1 : 0);
       inst = inst->Next_2xx();
     }
   }
 
   ALWAYS_INLINE void ARRAY_LENGTH() REQUIRES_SHARED(Locks::mutator_lock_) {
-    ObjPtr<mirror::Object> array = shadow_frame.GetVRegReference(inst->VRegB_12x(inst_data));
+    ObjPtr<mirror::Object> array = shadow_frame.GetVRegReference(B());
     if (UNLIKELY(array == nullptr)) {
       ThrowNullPointerExceptionFromInterpreter();
       HANDLE_PENDING_EXCEPTION();
     } else {
-      shadow_frame.SetVReg(inst->VRegA_12x(inst_data), array->AsArray()->GetLength());
+      shadow_frame.SetVReg(A(), array->AsArray()->GetLength());
       inst = inst->Next_1xx();
     }
   }
@@ -815,13 +815,13 @@
                           obj->PrettyTypeOf().c_str());
         HANDLE_PENDING_EXCEPTION();
       }
-      shadow_frame.SetVRegReference(inst->VRegA_21c(inst_data), obj);
+      shadow_frame.SetVRegReference(A(), obj);
       inst = inst->Next_2xx();
     }
   }
 
   ALWAYS_INLINE void NEW_ARRAY() REQUIRES_SHARED(Locks::mutator_lock_) {
-    int32_t length = shadow_frame.GetVReg(inst->VRegB_22c(inst_data));
+    int32_t length = shadow_frame.GetVReg(B());
     ObjPtr<mirror::Object> obj = AllocArrayFromCode<do_access_check>(
         dex::TypeIndex(inst->VRegC_22c()),
         length,
@@ -831,7 +831,7 @@
     if (UNLIKELY(obj == nullptr)) {
       HANDLE_PENDING_EXCEPTION();
     } else {
-      shadow_frame.SetVRegReference(inst->VRegA_22c(inst_data), obj);
+      shadow_frame.SetVRegReference(A(), obj);
       inst = inst->Next_2xx();
     }
   }
@@ -854,7 +854,7 @@
     const uint16_t* payload_addr = reinterpret_cast<const uint16_t*>(inst) + inst->VRegB_31t();
     const Instruction::ArrayDataPayload* payload =
         reinterpret_cast<const Instruction::ArrayDataPayload*>(payload_addr);
-    ObjPtr<mirror::Object> obj = shadow_frame.GetVRegReference(inst->VRegA_31t(inst_data));
+    ObjPtr<mirror::Object> obj = shadow_frame.GetVRegReference(A());
     bool success = FillArrayData(obj, payload);
     if (!success) {
       HANDLE_PENDING_EXCEPTION();
@@ -870,7 +870,7 @@
       return;
     }
     ObjPtr<mirror::Object> exception =
-        shadow_frame.GetVRegReference(inst->VRegA_11x(inst_data));
+        shadow_frame.GetVRegReference(A());
     if (UNLIKELY(exception == nullptr)) {
       ThrowNullPointerException("throw with null exception");
     } else if (do_assignability_check && !exception->GetClass()->IsThrowableClass()) {
@@ -934,8 +934,8 @@
 
 
   ALWAYS_INLINE void CMPL_FLOAT() REQUIRES_SHARED(Locks::mutator_lock_) {
-    float val1 = shadow_frame.GetVRegFloat(inst->VRegB_23x());
-    float val2 = shadow_frame.GetVRegFloat(inst->VRegC_23x());
+    float val1 = shadow_frame.GetVRegFloat(B());
+    float val2 = shadow_frame.GetVRegFloat(C());
     int32_t result;
     if (val1 > val2) {
       result = 1;
@@ -944,13 +944,13 @@
     } else {
       result = -1;
     }
-    shadow_frame.SetVReg(inst->VRegA_23x(inst_data), result);
+    shadow_frame.SetVReg(A(), result);
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void CMPG_FLOAT() REQUIRES_SHARED(Locks::mutator_lock_) {
-    float val1 = shadow_frame.GetVRegFloat(inst->VRegB_23x());
-    float val2 = shadow_frame.GetVRegFloat(inst->VRegC_23x());
+    float val1 = shadow_frame.GetVRegFloat(B());
+    float val2 = shadow_frame.GetVRegFloat(C());
     int32_t result;
     if (val1 < val2) {
       result = -1;
@@ -959,13 +959,13 @@
     } else {
       result = 1;
     }
-    shadow_frame.SetVReg(inst->VRegA_23x(inst_data), result);
+    shadow_frame.SetVReg(A(), result);
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void CMPL_DOUBLE() REQUIRES_SHARED(Locks::mutator_lock_) {
-    double val1 = shadow_frame.GetVRegDouble(inst->VRegB_23x());
-    double val2 = shadow_frame.GetVRegDouble(inst->VRegC_23x());
+    double val1 = shadow_frame.GetVRegDouble(B());
+    double val2 = shadow_frame.GetVRegDouble(C());
     int32_t result;
     if (val1 > val2) {
       result = 1;
@@ -974,14 +974,14 @@
     } else {
       result = -1;
     }
-    shadow_frame.SetVReg(inst->VRegA_23x(inst_data), result);
+    shadow_frame.SetVReg(A(), result);
     inst = inst->Next_2xx();
   }
 
 
   ALWAYS_INLINE void CMPG_DOUBLE() REQUIRES_SHARED(Locks::mutator_lock_) {
-    double val1 = shadow_frame.GetVRegDouble(inst->VRegB_23x());
-    double val2 = shadow_frame.GetVRegDouble(inst->VRegC_23x());
+    double val1 = shadow_frame.GetVRegDouble(B());
+    double val2 = shadow_frame.GetVRegDouble(C());
     int32_t result;
     if (val1 < val2) {
       result = -1;
@@ -990,7 +990,7 @@
     } else {
       result = 1;
     }
-    shadow_frame.SetVReg(inst->VRegA_23x(inst_data), result);
+    shadow_frame.SetVReg(A(), result);
     inst = inst->Next_2xx();
   }
 
@@ -998,8 +998,8 @@
 
 
   ALWAYS_INLINE void CMP_LONG() REQUIRES_SHARED(Locks::mutator_lock_) {
-    int64_t val1 = shadow_frame.GetVRegLong(inst->VRegB_23x());
-    int64_t val2 = shadow_frame.GetVRegLong(inst->VRegC_23x());
+    int64_t val1 = shadow_frame.GetVRegLong(B());
+    int64_t val2 = shadow_frame.GetVRegLong(C());
     int32_t result;
     if (val1 > val2) {
       result = 1;
@@ -1008,13 +1008,13 @@
     } else {
       result = -1;
     }
-    shadow_frame.SetVReg(inst->VRegA_23x(inst_data), result);
+    shadow_frame.SetVReg(A(), result);
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void IF_EQ() REQUIRES_SHARED(Locks::mutator_lock_) {
-    if (shadow_frame.GetVReg(inst->VRegA_22t(inst_data)) ==
-        shadow_frame.GetVReg(inst->VRegB_22t(inst_data))) {
+    if (shadow_frame.GetVReg(A()) ==
+        shadow_frame.GetVReg(B())) {
       int16_t offset = inst->VRegC_22t();
       BRANCH_INSTRUMENTATION(offset);
       inst = inst->RelativeAt(offset);
@@ -1026,8 +1026,8 @@
   }
 
   ALWAYS_INLINE void IF_NE() REQUIRES_SHARED(Locks::mutator_lock_) {
-    if (shadow_frame.GetVReg(inst->VRegA_22t(inst_data)) !=
-        shadow_frame.GetVReg(inst->VRegB_22t(inst_data))) {
+    if (shadow_frame.GetVReg(A()) !=
+        shadow_frame.GetVReg(B())) {
       int16_t offset = inst->VRegC_22t();
       BRANCH_INSTRUMENTATION(offset);
       inst = inst->RelativeAt(offset);
@@ -1039,8 +1039,8 @@
   }
 
   ALWAYS_INLINE void IF_LT() REQUIRES_SHARED(Locks::mutator_lock_) {
-    if (shadow_frame.GetVReg(inst->VRegA_22t(inst_data)) <
-        shadow_frame.GetVReg(inst->VRegB_22t(inst_data))) {
+    if (shadow_frame.GetVReg(A()) <
+        shadow_frame.GetVReg(B())) {
       int16_t offset = inst->VRegC_22t();
       BRANCH_INSTRUMENTATION(offset);
       inst = inst->RelativeAt(offset);
@@ -1052,8 +1052,8 @@
   }
 
   ALWAYS_INLINE void IF_GE() REQUIRES_SHARED(Locks::mutator_lock_) {
-    if (shadow_frame.GetVReg(inst->VRegA_22t(inst_data)) >=
-        shadow_frame.GetVReg(inst->VRegB_22t(inst_data))) {
+    if (shadow_frame.GetVReg(A()) >=
+        shadow_frame.GetVReg(B())) {
       int16_t offset = inst->VRegC_22t();
       BRANCH_INSTRUMENTATION(offset);
       inst = inst->RelativeAt(offset);
@@ -1065,8 +1065,8 @@
   }
 
   ALWAYS_INLINE void IF_GT() REQUIRES_SHARED(Locks::mutator_lock_) {
-    if (shadow_frame.GetVReg(inst->VRegA_22t(inst_data)) >
-    shadow_frame.GetVReg(inst->VRegB_22t(inst_data))) {
+    if (shadow_frame.GetVReg(A()) >
+    shadow_frame.GetVReg(B())) {
       int16_t offset = inst->VRegC_22t();
       BRANCH_INSTRUMENTATION(offset);
       inst = inst->RelativeAt(offset);
@@ -1078,8 +1078,8 @@
   }
 
   ALWAYS_INLINE void IF_LE() REQUIRES_SHARED(Locks::mutator_lock_) {
-    if (shadow_frame.GetVReg(inst->VRegA_22t(inst_data)) <=
-        shadow_frame.GetVReg(inst->VRegB_22t(inst_data))) {
+    if (shadow_frame.GetVReg(A()) <=
+        shadow_frame.GetVReg(B())) {
       int16_t offset = inst->VRegC_22t();
       BRANCH_INSTRUMENTATION(offset);
       inst = inst->RelativeAt(offset);
@@ -1091,7 +1091,7 @@
   }
 
   ALWAYS_INLINE void IF_EQZ() REQUIRES_SHARED(Locks::mutator_lock_) {
-    if (shadow_frame.GetVReg(inst->VRegA_21t(inst_data)) == 0) {
+    if (shadow_frame.GetVReg(A()) == 0) {
       int16_t offset = inst->VRegB_21t();
       BRANCH_INSTRUMENTATION(offset);
       inst = inst->RelativeAt(offset);
@@ -1103,7 +1103,7 @@
   }
 
   ALWAYS_INLINE void IF_NEZ() REQUIRES_SHARED(Locks::mutator_lock_) {
-    if (shadow_frame.GetVReg(inst->VRegA_21t(inst_data)) != 0) {
+    if (shadow_frame.GetVReg(A()) != 0) {
       int16_t offset = inst->VRegB_21t();
       BRANCH_INSTRUMENTATION(offset);
       inst = inst->RelativeAt(offset);
@@ -1115,7 +1115,7 @@
   }
 
   ALWAYS_INLINE void IF_LTZ() REQUIRES_SHARED(Locks::mutator_lock_) {
-    if (shadow_frame.GetVReg(inst->VRegA_21t(inst_data)) < 0) {
+    if (shadow_frame.GetVReg(A()) < 0) {
       int16_t offset = inst->VRegB_21t();
       BRANCH_INSTRUMENTATION(offset);
       inst = inst->RelativeAt(offset);
@@ -1127,7 +1127,7 @@
   }
 
   ALWAYS_INLINE void IF_GEZ() REQUIRES_SHARED(Locks::mutator_lock_) {
-    if (shadow_frame.GetVReg(inst->VRegA_21t(inst_data)) >= 0) {
+    if (shadow_frame.GetVReg(A()) >= 0) {
       int16_t offset = inst->VRegB_21t();
       BRANCH_INSTRUMENTATION(offset);
       inst = inst->RelativeAt(offset);
@@ -1139,7 +1139,7 @@
   }
 
   ALWAYS_INLINE void IF_GTZ() REQUIRES_SHARED(Locks::mutator_lock_) {
-    if (shadow_frame.GetVReg(inst->VRegA_21t(inst_data)) > 0) {
+    if (shadow_frame.GetVReg(A()) > 0) {
       int16_t offset = inst->VRegB_21t();
       BRANCH_INSTRUMENTATION(offset);
       inst = inst->RelativeAt(offset);
@@ -1151,7 +1151,7 @@
   }
 
   ALWAYS_INLINE void IF_LEZ() REQUIRES_SHARED(Locks::mutator_lock_) {
-    if (shadow_frame.GetVReg(inst->VRegA_21t(inst_data)) <= 0) {
+    if (shadow_frame.GetVReg(A()) <= 0) {
       int16_t offset = inst->VRegB_21t();
       BRANCH_INSTRUMENTATION(offset);
       inst = inst->RelativeAt(offset);
@@ -1163,15 +1163,15 @@
   }
 
   ALWAYS_INLINE void AGET_BOOLEAN() REQUIRES_SHARED(Locks::mutator_lock_) {
-    ObjPtr<mirror::Object> a = shadow_frame.GetVRegReference(inst->VRegB_23x());
+    ObjPtr<mirror::Object> a = shadow_frame.GetVRegReference(B());
     if (UNLIKELY(a == nullptr)) {
       ThrowNullPointerExceptionFromInterpreter();
       HANDLE_PENDING_EXCEPTION();
     }
-    int32_t index = shadow_frame.GetVReg(inst->VRegC_23x());
+    int32_t index = shadow_frame.GetVReg(C());
     ObjPtr<mirror::BooleanArray> array = a->AsBooleanArray();
     if (array->CheckIsValidIndex(index)) {
-      shadow_frame.SetVReg(inst->VRegA_23x(inst_data), array->GetWithoutChecks(index));
+      shadow_frame.SetVReg(A(), array->GetWithoutChecks(index));
       inst = inst->Next_2xx();
     } else {
       HANDLE_PENDING_EXCEPTION();
@@ -1179,15 +1179,15 @@
   }
 
   ALWAYS_INLINE void AGET_BYTE() REQUIRES_SHARED(Locks::mutator_lock_) {
-    ObjPtr<mirror::Object> a = shadow_frame.GetVRegReference(inst->VRegB_23x());
+    ObjPtr<mirror::Object> a = shadow_frame.GetVRegReference(B());
     if (UNLIKELY(a == nullptr)) {
       ThrowNullPointerExceptionFromInterpreter();
       HANDLE_PENDING_EXCEPTION();
     }
-    int32_t index = shadow_frame.GetVReg(inst->VRegC_23x());
+    int32_t index = shadow_frame.GetVReg(C());
     ObjPtr<mirror::ByteArray> array = a->AsByteArray();
     if (array->CheckIsValidIndex(index)) {
-      shadow_frame.SetVReg(inst->VRegA_23x(inst_data), array->GetWithoutChecks(index));
+      shadow_frame.SetVReg(A(), array->GetWithoutChecks(index));
       inst = inst->Next_2xx();
     } else {
       HANDLE_PENDING_EXCEPTION();
@@ -1195,15 +1195,15 @@
   }
 
   ALWAYS_INLINE void AGET_CHAR() REQUIRES_SHARED(Locks::mutator_lock_) {
-    ObjPtr<mirror::Object> a = shadow_frame.GetVRegReference(inst->VRegB_23x());
+    ObjPtr<mirror::Object> a = shadow_frame.GetVRegReference(B());
     if (UNLIKELY(a == nullptr)) {
       ThrowNullPointerExceptionFromInterpreter();
       HANDLE_PENDING_EXCEPTION();
     }
-    int32_t index = shadow_frame.GetVReg(inst->VRegC_23x());
+    int32_t index = shadow_frame.GetVReg(C());
     ObjPtr<mirror::CharArray> array = a->AsCharArray();
     if (array->CheckIsValidIndex(index)) {
-      shadow_frame.SetVReg(inst->VRegA_23x(inst_data), array->GetWithoutChecks(index));
+      shadow_frame.SetVReg(A(), array->GetWithoutChecks(index));
       inst = inst->Next_2xx();
     } else {
       HANDLE_PENDING_EXCEPTION();
@@ -1211,15 +1211,15 @@
   }
 
   ALWAYS_INLINE void AGET_SHORT() REQUIRES_SHARED(Locks::mutator_lock_) {
-    ObjPtr<mirror::Object> a = shadow_frame.GetVRegReference(inst->VRegB_23x());
+    ObjPtr<mirror::Object> a = shadow_frame.GetVRegReference(B());
     if (UNLIKELY(a == nullptr)) {
       ThrowNullPointerExceptionFromInterpreter();
       HANDLE_PENDING_EXCEPTION();
     }
-    int32_t index = shadow_frame.GetVReg(inst->VRegC_23x());
+    int32_t index = shadow_frame.GetVReg(C());
     ObjPtr<mirror::ShortArray> array = a->AsShortArray();
     if (array->CheckIsValidIndex(index)) {
-      shadow_frame.SetVReg(inst->VRegA_23x(inst_data), array->GetWithoutChecks(index));
+      shadow_frame.SetVReg(A(), array->GetWithoutChecks(index));
       inst = inst->Next_2xx();
     } else {
       HANDLE_PENDING_EXCEPTION();
@@ -1227,16 +1227,16 @@
   }
 
   ALWAYS_INLINE void AGET() REQUIRES_SHARED(Locks::mutator_lock_) {
-    ObjPtr<mirror::Object> a = shadow_frame.GetVRegReference(inst->VRegB_23x());
+    ObjPtr<mirror::Object> a = shadow_frame.GetVRegReference(B());
     if (UNLIKELY(a == nullptr)) {
       ThrowNullPointerExceptionFromInterpreter();
       HANDLE_PENDING_EXCEPTION();
     }
-    int32_t index = shadow_frame.GetVReg(inst->VRegC_23x());
+    int32_t index = shadow_frame.GetVReg(C());
     DCHECK(a->IsIntArray() || a->IsFloatArray()) << a->PrettyTypeOf();
     ObjPtr<mirror::IntArray> array = ObjPtr<mirror::IntArray>::DownCast(a);
     if (array->CheckIsValidIndex(index)) {
-      shadow_frame.SetVReg(inst->VRegA_23x(inst_data), array->GetWithoutChecks(index));
+      shadow_frame.SetVReg(A(), array->GetWithoutChecks(index));
       inst = inst->Next_2xx();
     } else {
       HANDLE_PENDING_EXCEPTION();
@@ -1244,16 +1244,16 @@
   }
 
   ALWAYS_INLINE void AGET_WIDE() REQUIRES_SHARED(Locks::mutator_lock_) {
-    ObjPtr<mirror::Object> a = shadow_frame.GetVRegReference(inst->VRegB_23x());
+    ObjPtr<mirror::Object> a = shadow_frame.GetVRegReference(B());
     if (UNLIKELY(a == nullptr)) {
       ThrowNullPointerExceptionFromInterpreter();
       HANDLE_PENDING_EXCEPTION();
     }
-    int32_t index = shadow_frame.GetVReg(inst->VRegC_23x());
+    int32_t index = shadow_frame.GetVReg(C());
     DCHECK(a->IsLongArray() || a->IsDoubleArray()) << a->PrettyTypeOf();
     ObjPtr<mirror::LongArray> array = ObjPtr<mirror::LongArray>::DownCast(a);
     if (array->CheckIsValidIndex(index)) {
-      shadow_frame.SetVRegLong(inst->VRegA_23x(inst_data), array->GetWithoutChecks(index));
+      shadow_frame.SetVRegLong(A(), array->GetWithoutChecks(index));
       inst = inst->Next_2xx();
     } else {
       HANDLE_PENDING_EXCEPTION();
@@ -1261,15 +1261,15 @@
   }
 
   ALWAYS_INLINE void AGET_OBJECT() REQUIRES_SHARED(Locks::mutator_lock_) {
-    ObjPtr<mirror::Object> a = shadow_frame.GetVRegReference(inst->VRegB_23x());
+    ObjPtr<mirror::Object> a = shadow_frame.GetVRegReference(B());
     if (UNLIKELY(a == nullptr)) {
       ThrowNullPointerExceptionFromInterpreter();
       HANDLE_PENDING_EXCEPTION();
     }
-    int32_t index = shadow_frame.GetVReg(inst->VRegC_23x());
+    int32_t index = shadow_frame.GetVReg(C());
     ObjPtr<mirror::ObjectArray<mirror::Object>> array = a->AsObjectArray<mirror::Object>();
     if (array->CheckIsValidIndex(index)) {
-      shadow_frame.SetVRegReference(inst->VRegA_23x(inst_data), array->GetWithoutChecks(index));
+      shadow_frame.SetVRegReference(A(), array->GetWithoutChecks(index));
       inst = inst->Next_2xx();
     } else {
       HANDLE_PENDING_EXCEPTION();
@@ -1277,13 +1277,13 @@
   }
 
   ALWAYS_INLINE void APUT_BOOLEAN() REQUIRES_SHARED(Locks::mutator_lock_) {
-    ObjPtr<mirror::Object> a = shadow_frame.GetVRegReference(inst->VRegB_23x());
+    ObjPtr<mirror::Object> a = shadow_frame.GetVRegReference(B());
     if (UNLIKELY(a == nullptr)) {
       ThrowNullPointerExceptionFromInterpreter();
       HANDLE_PENDING_EXCEPTION();
     }
-    uint8_t val = shadow_frame.GetVReg(inst->VRegA_23x(inst_data));
-    int32_t index = shadow_frame.GetVReg(inst->VRegC_23x());
+    uint8_t val = shadow_frame.GetVReg(A());
+    int32_t index = shadow_frame.GetVReg(C());
     ObjPtr<mirror::BooleanArray> array = a->AsBooleanArray();
     if (array->CheckIsValidIndex(index)) {
       array->SetWithoutChecks<transaction_active>(index, val);
@@ -1294,13 +1294,13 @@
   }
 
   ALWAYS_INLINE void APUT_BYTE() REQUIRES_SHARED(Locks::mutator_lock_) {
-    ObjPtr<mirror::Object> a = shadow_frame.GetVRegReference(inst->VRegB_23x());
+    ObjPtr<mirror::Object> a = shadow_frame.GetVRegReference(B());
     if (UNLIKELY(a == nullptr)) {
       ThrowNullPointerExceptionFromInterpreter();
       HANDLE_PENDING_EXCEPTION();
     }
-    int8_t val = shadow_frame.GetVReg(inst->VRegA_23x(inst_data));
-    int32_t index = shadow_frame.GetVReg(inst->VRegC_23x());
+    int8_t val = shadow_frame.GetVReg(A());
+    int32_t index = shadow_frame.GetVReg(C());
     ObjPtr<mirror::ByteArray> array = a->AsByteArray();
     if (array->CheckIsValidIndex(index)) {
       array->SetWithoutChecks<transaction_active>(index, val);
@@ -1311,13 +1311,13 @@
   }
 
   ALWAYS_INLINE void APUT_CHAR() REQUIRES_SHARED(Locks::mutator_lock_) {
-    ObjPtr<mirror::Object> a = shadow_frame.GetVRegReference(inst->VRegB_23x());
+    ObjPtr<mirror::Object> a = shadow_frame.GetVRegReference(B());
     if (UNLIKELY(a == nullptr)) {
       ThrowNullPointerExceptionFromInterpreter();
       HANDLE_PENDING_EXCEPTION();
     }
-    uint16_t val = shadow_frame.GetVReg(inst->VRegA_23x(inst_data));
-    int32_t index = shadow_frame.GetVReg(inst->VRegC_23x());
+    uint16_t val = shadow_frame.GetVReg(A());
+    int32_t index = shadow_frame.GetVReg(C());
     ObjPtr<mirror::CharArray> array = a->AsCharArray();
     if (array->CheckIsValidIndex(index)) {
       array->SetWithoutChecks<transaction_active>(index, val);
@@ -1328,13 +1328,13 @@
   }
 
   ALWAYS_INLINE void APUT_SHORT() REQUIRES_SHARED(Locks::mutator_lock_) {
-    ObjPtr<mirror::Object> a = shadow_frame.GetVRegReference(inst->VRegB_23x());
+    ObjPtr<mirror::Object> a = shadow_frame.GetVRegReference(B());
     if (UNLIKELY(a == nullptr)) {
       ThrowNullPointerExceptionFromInterpreter();
       HANDLE_PENDING_EXCEPTION();
     }
-    int16_t val = shadow_frame.GetVReg(inst->VRegA_23x(inst_data));
-    int32_t index = shadow_frame.GetVReg(inst->VRegC_23x());
+    int16_t val = shadow_frame.GetVReg(A());
+    int32_t index = shadow_frame.GetVReg(C());
     ObjPtr<mirror::ShortArray> array = a->AsShortArray();
     if (array->CheckIsValidIndex(index)) {
       array->SetWithoutChecks<transaction_active>(index, val);
@@ -1345,13 +1345,13 @@
   }
 
   ALWAYS_INLINE void APUT() REQUIRES_SHARED(Locks::mutator_lock_) {
-    ObjPtr<mirror::Object> a = shadow_frame.GetVRegReference(inst->VRegB_23x());
+    ObjPtr<mirror::Object> a = shadow_frame.GetVRegReference(B());
     if (UNLIKELY(a == nullptr)) {
       ThrowNullPointerExceptionFromInterpreter();
       HANDLE_PENDING_EXCEPTION();
     }
-    int32_t val = shadow_frame.GetVReg(inst->VRegA_23x(inst_data));
-    int32_t index = shadow_frame.GetVReg(inst->VRegC_23x());
+    int32_t val = shadow_frame.GetVReg(A());
+    int32_t index = shadow_frame.GetVReg(C());
     DCHECK(a->IsIntArray() || a->IsFloatArray()) << a->PrettyTypeOf();
     ObjPtr<mirror::IntArray> array = ObjPtr<mirror::IntArray>::DownCast(a);
     if (array->CheckIsValidIndex(index)) {
@@ -1363,13 +1363,13 @@
   }
 
   ALWAYS_INLINE void APUT_WIDE() REQUIRES_SHARED(Locks::mutator_lock_) {
-    ObjPtr<mirror::Object> a = shadow_frame.GetVRegReference(inst->VRegB_23x());
+    ObjPtr<mirror::Object> a = shadow_frame.GetVRegReference(B());
     if (UNLIKELY(a == nullptr)) {
       ThrowNullPointerExceptionFromInterpreter();
       HANDLE_PENDING_EXCEPTION();
     }
-    int64_t val = shadow_frame.GetVRegLong(inst->VRegA_23x(inst_data));
-    int32_t index = shadow_frame.GetVReg(inst->VRegC_23x());
+    int64_t val = shadow_frame.GetVRegLong(A());
+    int32_t index = shadow_frame.GetVReg(C());
     DCHECK(a->IsLongArray() || a->IsDoubleArray()) << a->PrettyTypeOf();
     ObjPtr<mirror::LongArray> array = ObjPtr<mirror::LongArray>::DownCast(a);
     if (array->CheckIsValidIndex(index)) {
@@ -1381,13 +1381,13 @@
   }
 
   ALWAYS_INLINE void APUT_OBJECT() REQUIRES_SHARED(Locks::mutator_lock_) {
-    ObjPtr<mirror::Object> a = shadow_frame.GetVRegReference(inst->VRegB_23x());
+    ObjPtr<mirror::Object> a = shadow_frame.GetVRegReference(B());
     if (UNLIKELY(a == nullptr)) {
       ThrowNullPointerExceptionFromInterpreter();
       HANDLE_PENDING_EXCEPTION();
     }
-    int32_t index = shadow_frame.GetVReg(inst->VRegC_23x());
-    ObjPtr<mirror::Object> val = shadow_frame.GetVRegReference(inst->VRegA_23x(inst_data));
+    int32_t index = shadow_frame.GetVReg(C());
+    ObjPtr<mirror::Object> val = shadow_frame.GetVRegReference(A());
     ObjPtr<mirror::ObjectArray<mirror::Object>> array = a->AsObjectArray<mirror::Object>();
     if (array->CheckIsValidIndex(index) && array->CheckAssignable(val)) {
       array->SetWithoutChecks<transaction_active>(index, val);
@@ -1744,362 +1744,362 @@
 
   ALWAYS_INLINE void NEG_INT() REQUIRES_SHARED(Locks::mutator_lock_) {
     shadow_frame.SetVReg(
-        inst->VRegA_12x(inst_data), -shadow_frame.GetVReg(inst->VRegB_12x(inst_data)));
+        inst->VRegA_12x(inst_data), -shadow_frame.GetVReg(B()));
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void NOT_INT() REQUIRES_SHARED(Locks::mutator_lock_) {
     shadow_frame.SetVReg(
-        inst->VRegA_12x(inst_data), ~shadow_frame.GetVReg(inst->VRegB_12x(inst_data)));
+        inst->VRegA_12x(inst_data), ~shadow_frame.GetVReg(B()));
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void NEG_LONG() REQUIRES_SHARED(Locks::mutator_lock_) {
     shadow_frame.SetVRegLong(
-        inst->VRegA_12x(inst_data), -shadow_frame.GetVRegLong(inst->VRegB_12x(inst_data)));
+        inst->VRegA_12x(inst_data), -shadow_frame.GetVRegLong(B()));
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void NOT_LONG() REQUIRES_SHARED(Locks::mutator_lock_) {
     shadow_frame.SetVRegLong(
-        inst->VRegA_12x(inst_data), ~shadow_frame.GetVRegLong(inst->VRegB_12x(inst_data)));
+        inst->VRegA_12x(inst_data), ~shadow_frame.GetVRegLong(B()));
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void NEG_FLOAT() REQUIRES_SHARED(Locks::mutator_lock_) {
     shadow_frame.SetVRegFloat(
-        inst->VRegA_12x(inst_data), -shadow_frame.GetVRegFloat(inst->VRegB_12x(inst_data)));
+        inst->VRegA_12x(inst_data), -shadow_frame.GetVRegFloat(B()));
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void NEG_DOUBLE() REQUIRES_SHARED(Locks::mutator_lock_) {
     shadow_frame.SetVRegDouble(
-        inst->VRegA_12x(inst_data), -shadow_frame.GetVRegDouble(inst->VRegB_12x(inst_data)));
+        inst->VRegA_12x(inst_data), -shadow_frame.GetVRegDouble(B()));
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void INT_TO_LONG() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegLong(inst->VRegA_12x(inst_data),
-                             shadow_frame.GetVReg(inst->VRegB_12x(inst_data)));
+    shadow_frame.SetVRegLong(A(),
+                             shadow_frame.GetVReg(B()));
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void INT_TO_FLOAT() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegFloat(inst->VRegA_12x(inst_data),
-                              shadow_frame.GetVReg(inst->VRegB_12x(inst_data)));
+    shadow_frame.SetVRegFloat(A(),
+                              shadow_frame.GetVReg(B()));
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void INT_TO_DOUBLE() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegDouble(inst->VRegA_12x(inst_data),
-                               shadow_frame.GetVReg(inst->VRegB_12x(inst_data)));
+    shadow_frame.SetVRegDouble(A(),
+                               shadow_frame.GetVReg(B()));
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void LONG_TO_INT() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVReg(inst->VRegA_12x(inst_data),
-                         shadow_frame.GetVRegLong(inst->VRegB_12x(inst_data)));
+    shadow_frame.SetVReg(A(),
+                         shadow_frame.GetVRegLong(B()));
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void LONG_TO_FLOAT() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegFloat(inst->VRegA_12x(inst_data),
-                              shadow_frame.GetVRegLong(inst->VRegB_12x(inst_data)));
+    shadow_frame.SetVRegFloat(A(),
+                              shadow_frame.GetVRegLong(B()));
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void LONG_TO_DOUBLE() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegDouble(inst->VRegA_12x(inst_data),
-                               shadow_frame.GetVRegLong(inst->VRegB_12x(inst_data)));
+    shadow_frame.SetVRegDouble(A(),
+                               shadow_frame.GetVRegLong(B()));
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void FLOAT_TO_INT() REQUIRES_SHARED(Locks::mutator_lock_) {
-    float val = shadow_frame.GetVRegFloat(inst->VRegB_12x(inst_data));
+    float val = shadow_frame.GetVRegFloat(B());
     int32_t result = art_float_to_integral<int32_t, float>(val);
-    shadow_frame.SetVReg(inst->VRegA_12x(inst_data), result);
+    shadow_frame.SetVReg(A(), result);
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void FLOAT_TO_LONG() REQUIRES_SHARED(Locks::mutator_lock_) {
-    float val = shadow_frame.GetVRegFloat(inst->VRegB_12x(inst_data));
+    float val = shadow_frame.GetVRegFloat(B());
     int64_t result = art_float_to_integral<int64_t, float>(val);
-    shadow_frame.SetVRegLong(inst->VRegA_12x(inst_data), result);
+    shadow_frame.SetVRegLong(A(), result);
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void FLOAT_TO_DOUBLE() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegDouble(inst->VRegA_12x(inst_data),
-                               shadow_frame.GetVRegFloat(inst->VRegB_12x(inst_data)));
+    shadow_frame.SetVRegDouble(A(),
+                               shadow_frame.GetVRegFloat(B()));
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void DOUBLE_TO_INT() REQUIRES_SHARED(Locks::mutator_lock_) {
-    double val = shadow_frame.GetVRegDouble(inst->VRegB_12x(inst_data));
+    double val = shadow_frame.GetVRegDouble(B());
     int32_t result = art_float_to_integral<int32_t, double>(val);
-    shadow_frame.SetVReg(inst->VRegA_12x(inst_data), result);
+    shadow_frame.SetVReg(A(), result);
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void DOUBLE_TO_LONG() REQUIRES_SHARED(Locks::mutator_lock_) {
-    double val = shadow_frame.GetVRegDouble(inst->VRegB_12x(inst_data));
+    double val = shadow_frame.GetVRegDouble(B());
     int64_t result = art_float_to_integral<int64_t, double>(val);
-    shadow_frame.SetVRegLong(inst->VRegA_12x(inst_data), result);
+    shadow_frame.SetVRegLong(A(), result);
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void DOUBLE_TO_FLOAT() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegFloat(inst->VRegA_12x(inst_data),
-                              shadow_frame.GetVRegDouble(inst->VRegB_12x(inst_data)));
+    shadow_frame.SetVRegFloat(A(),
+                              shadow_frame.GetVRegDouble(B()));
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void INT_TO_BYTE() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVReg(inst->VRegA_12x(inst_data), static_cast<int8_t>(
-        shadow_frame.GetVReg(inst->VRegB_12x(inst_data))));
+    shadow_frame.SetVReg(A(), static_cast<int8_t>(
+        shadow_frame.GetVReg(B())));
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void INT_TO_CHAR() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVReg(inst->VRegA_12x(inst_data), static_cast<uint16_t>(
-        shadow_frame.GetVReg(inst->VRegB_12x(inst_data))));
+    shadow_frame.SetVReg(A(), static_cast<uint16_t>(
+        shadow_frame.GetVReg(B())));
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void INT_TO_SHORT() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVReg(inst->VRegA_12x(inst_data), static_cast<int16_t>(
-        shadow_frame.GetVReg(inst->VRegB_12x(inst_data))));
+    shadow_frame.SetVReg(A(), static_cast<int16_t>(
+        shadow_frame.GetVReg(B())));
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void ADD_INT() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVReg(inst->VRegA_23x(inst_data),
-                         SafeAdd(shadow_frame.GetVReg(inst->VRegB_23x()),
-                                 shadow_frame.GetVReg(inst->VRegC_23x())));
+    shadow_frame.SetVReg(A(),
+                         SafeAdd(shadow_frame.GetVReg(B()),
+                                 shadow_frame.GetVReg(C())));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void SUB_INT() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVReg(inst->VRegA_23x(inst_data),
-                         SafeSub(shadow_frame.GetVReg(inst->VRegB_23x()),
-                                 shadow_frame.GetVReg(inst->VRegC_23x())));
+    shadow_frame.SetVReg(A(),
+                         SafeSub(shadow_frame.GetVReg(B()),
+                                 shadow_frame.GetVReg(C())));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void MUL_INT() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVReg(inst->VRegA_23x(inst_data),
-                         SafeMul(shadow_frame.GetVReg(inst->VRegB_23x()),
-                                 shadow_frame.GetVReg(inst->VRegC_23x())));
+    shadow_frame.SetVReg(A(),
+                         SafeMul(shadow_frame.GetVReg(B()),
+                                 shadow_frame.GetVReg(C())));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void DIV_INT() REQUIRES_SHARED(Locks::mutator_lock_) {
     bool success = DoIntDivide(shadow_frame, inst->VRegA_23x(inst_data),
-                               shadow_frame.GetVReg(inst->VRegB_23x()),
-                               shadow_frame.GetVReg(inst->VRegC_23x()));
+                               shadow_frame.GetVReg(B()),
+                               shadow_frame.GetVReg(C()));
     POSSIBLY_HANDLE_PENDING_EXCEPTION(!success, Next_2xx);
   }
 
   ALWAYS_INLINE void REM_INT() REQUIRES_SHARED(Locks::mutator_lock_) {
     bool success = DoIntRemainder(shadow_frame, inst->VRegA_23x(inst_data),
-                                  shadow_frame.GetVReg(inst->VRegB_23x()),
-                                  shadow_frame.GetVReg(inst->VRegC_23x()));
+                                  shadow_frame.GetVReg(B()),
+                                  shadow_frame.GetVReg(C()));
     POSSIBLY_HANDLE_PENDING_EXCEPTION(!success, Next_2xx);
   }
 
   ALWAYS_INLINE void SHL_INT() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVReg(inst->VRegA_23x(inst_data),
-                         shadow_frame.GetVReg(inst->VRegB_23x()) <<
-                         (shadow_frame.GetVReg(inst->VRegC_23x()) & 0x1f));
+    shadow_frame.SetVReg(A(),
+                         shadow_frame.GetVReg(B()) <<
+                         (shadow_frame.GetVReg(C()) & 0x1f));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void SHR_INT() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVReg(inst->VRegA_23x(inst_data),
-                         shadow_frame.GetVReg(inst->VRegB_23x()) >>
-                         (shadow_frame.GetVReg(inst->VRegC_23x()) & 0x1f));
+    shadow_frame.SetVReg(A(),
+                         shadow_frame.GetVReg(B()) >>
+                         (shadow_frame.GetVReg(C()) & 0x1f));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void USHR_INT() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVReg(inst->VRegA_23x(inst_data),
-                         static_cast<uint32_t>(shadow_frame.GetVReg(inst->VRegB_23x())) >>
-                         (shadow_frame.GetVReg(inst->VRegC_23x()) & 0x1f));
+    shadow_frame.SetVReg(A(),
+                         static_cast<uint32_t>(shadow_frame.GetVReg(B())) >>
+                         (shadow_frame.GetVReg(C()) & 0x1f));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void AND_INT() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVReg(inst->VRegA_23x(inst_data),
-                         shadow_frame.GetVReg(inst->VRegB_23x()) &
-                         shadow_frame.GetVReg(inst->VRegC_23x()));
+    shadow_frame.SetVReg(A(),
+                         shadow_frame.GetVReg(B()) &
+                         shadow_frame.GetVReg(C()));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void OR_INT() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVReg(inst->VRegA_23x(inst_data),
-                         shadow_frame.GetVReg(inst->VRegB_23x()) |
-                         shadow_frame.GetVReg(inst->VRegC_23x()));
+    shadow_frame.SetVReg(A(),
+                         shadow_frame.GetVReg(B()) |
+                         shadow_frame.GetVReg(C()));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void XOR_INT() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVReg(inst->VRegA_23x(inst_data),
-                         shadow_frame.GetVReg(inst->VRegB_23x()) ^
-                         shadow_frame.GetVReg(inst->VRegC_23x()));
+    shadow_frame.SetVReg(A(),
+                         shadow_frame.GetVReg(B()) ^
+                         shadow_frame.GetVReg(C()));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void ADD_LONG() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegLong(inst->VRegA_23x(inst_data),
-                             SafeAdd(shadow_frame.GetVRegLong(inst->VRegB_23x()),
-                                     shadow_frame.GetVRegLong(inst->VRegC_23x())));
+    shadow_frame.SetVRegLong(A(),
+                             SafeAdd(shadow_frame.GetVRegLong(B()),
+                                     shadow_frame.GetVRegLong(C())));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void SUB_LONG() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegLong(inst->VRegA_23x(inst_data),
-                             SafeSub(shadow_frame.GetVRegLong(inst->VRegB_23x()),
-                                     shadow_frame.GetVRegLong(inst->VRegC_23x())));
+    shadow_frame.SetVRegLong(A(),
+                             SafeSub(shadow_frame.GetVRegLong(B()),
+                                     shadow_frame.GetVRegLong(C())));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void MUL_LONG() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegLong(inst->VRegA_23x(inst_data),
-                             SafeMul(shadow_frame.GetVRegLong(inst->VRegB_23x()),
-                                     shadow_frame.GetVRegLong(inst->VRegC_23x())));
+    shadow_frame.SetVRegLong(A(),
+                             SafeMul(shadow_frame.GetVRegLong(B()),
+                                     shadow_frame.GetVRegLong(C())));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void DIV_LONG() REQUIRES_SHARED(Locks::mutator_lock_) {
     DoLongDivide(shadow_frame, inst->VRegA_23x(inst_data),
-                 shadow_frame.GetVRegLong(inst->VRegB_23x()),
-                 shadow_frame.GetVRegLong(inst->VRegC_23x()));
+                 shadow_frame.GetVRegLong(B()),
+                 shadow_frame.GetVRegLong(C()));
     POSSIBLY_HANDLE_PENDING_EXCEPTION(self->IsExceptionPending(), Next_2xx);
   }
 
   ALWAYS_INLINE void REM_LONG() REQUIRES_SHARED(Locks::mutator_lock_) {
     DoLongRemainder(shadow_frame, inst->VRegA_23x(inst_data),
-                    shadow_frame.GetVRegLong(inst->VRegB_23x()),
-                    shadow_frame.GetVRegLong(inst->VRegC_23x()));
+                    shadow_frame.GetVRegLong(B()),
+                    shadow_frame.GetVRegLong(C()));
     POSSIBLY_HANDLE_PENDING_EXCEPTION(self->IsExceptionPending(), Next_2xx);
   }
 
   ALWAYS_INLINE void AND_LONG() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegLong(inst->VRegA_23x(inst_data),
-                             shadow_frame.GetVRegLong(inst->VRegB_23x()) &
-                             shadow_frame.GetVRegLong(inst->VRegC_23x()));
+    shadow_frame.SetVRegLong(A(),
+                             shadow_frame.GetVRegLong(B()) &
+                             shadow_frame.GetVRegLong(C()));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void OR_LONG() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegLong(inst->VRegA_23x(inst_data),
-                             shadow_frame.GetVRegLong(inst->VRegB_23x()) |
-                             shadow_frame.GetVRegLong(inst->VRegC_23x()));
+    shadow_frame.SetVRegLong(A(),
+                             shadow_frame.GetVRegLong(B()) |
+                             shadow_frame.GetVRegLong(C()));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void XOR_LONG() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegLong(inst->VRegA_23x(inst_data),
-                             shadow_frame.GetVRegLong(inst->VRegB_23x()) ^
-                             shadow_frame.GetVRegLong(inst->VRegC_23x()));
+    shadow_frame.SetVRegLong(A(),
+                             shadow_frame.GetVRegLong(B()) ^
+                             shadow_frame.GetVRegLong(C()));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void SHL_LONG() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegLong(inst->VRegA_23x(inst_data),
-                             shadow_frame.GetVRegLong(inst->VRegB_23x()) <<
-                             (shadow_frame.GetVReg(inst->VRegC_23x()) & 0x3f));
+    shadow_frame.SetVRegLong(A(),
+                             shadow_frame.GetVRegLong(B()) <<
+                             (shadow_frame.GetVReg(C()) & 0x3f));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void SHR_LONG() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegLong(inst->VRegA_23x(inst_data),
-                             shadow_frame.GetVRegLong(inst->VRegB_23x()) >>
-                             (shadow_frame.GetVReg(inst->VRegC_23x()) & 0x3f));
+    shadow_frame.SetVRegLong(A(),
+                             shadow_frame.GetVRegLong(B()) >>
+                             (shadow_frame.GetVReg(C()) & 0x3f));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void USHR_LONG() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegLong(inst->VRegA_23x(inst_data),
-                             static_cast<uint64_t>(shadow_frame.GetVRegLong(inst->VRegB_23x())) >>
-                             (shadow_frame.GetVReg(inst->VRegC_23x()) & 0x3f));
+    shadow_frame.SetVRegLong(A(),
+                             static_cast<uint64_t>(shadow_frame.GetVRegLong(B())) >>
+                             (shadow_frame.GetVReg(C()) & 0x3f));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void ADD_FLOAT() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegFloat(inst->VRegA_23x(inst_data),
-                              shadow_frame.GetVRegFloat(inst->VRegB_23x()) +
-                              shadow_frame.GetVRegFloat(inst->VRegC_23x()));
+    shadow_frame.SetVRegFloat(A(),
+                              shadow_frame.GetVRegFloat(B()) +
+                              shadow_frame.GetVRegFloat(C()));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void SUB_FLOAT() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegFloat(inst->VRegA_23x(inst_data),
-                              shadow_frame.GetVRegFloat(inst->VRegB_23x()) -
-                              shadow_frame.GetVRegFloat(inst->VRegC_23x()));
+    shadow_frame.SetVRegFloat(A(),
+                              shadow_frame.GetVRegFloat(B()) -
+                              shadow_frame.GetVRegFloat(C()));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void MUL_FLOAT() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegFloat(inst->VRegA_23x(inst_data),
-                              shadow_frame.GetVRegFloat(inst->VRegB_23x()) *
-                              shadow_frame.GetVRegFloat(inst->VRegC_23x()));
+    shadow_frame.SetVRegFloat(A(),
+                              shadow_frame.GetVRegFloat(B()) *
+                              shadow_frame.GetVRegFloat(C()));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void DIV_FLOAT() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegFloat(inst->VRegA_23x(inst_data),
-                              shadow_frame.GetVRegFloat(inst->VRegB_23x()) /
-                              shadow_frame.GetVRegFloat(inst->VRegC_23x()));
+    shadow_frame.SetVRegFloat(A(),
+                              shadow_frame.GetVRegFloat(B()) /
+                              shadow_frame.GetVRegFloat(C()));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void REM_FLOAT() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegFloat(inst->VRegA_23x(inst_data),
-                              fmodf(shadow_frame.GetVRegFloat(inst->VRegB_23x()),
-                                    shadow_frame.GetVRegFloat(inst->VRegC_23x())));
+    shadow_frame.SetVRegFloat(A(),
+                              fmodf(shadow_frame.GetVRegFloat(B()),
+                                    shadow_frame.GetVRegFloat(C())));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void ADD_DOUBLE() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegDouble(inst->VRegA_23x(inst_data),
-                               shadow_frame.GetVRegDouble(inst->VRegB_23x()) +
-                               shadow_frame.GetVRegDouble(inst->VRegC_23x()));
+    shadow_frame.SetVRegDouble(A(),
+                               shadow_frame.GetVRegDouble(B()) +
+                               shadow_frame.GetVRegDouble(C()));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void SUB_DOUBLE() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegDouble(inst->VRegA_23x(inst_data),
-                               shadow_frame.GetVRegDouble(inst->VRegB_23x()) -
-                               shadow_frame.GetVRegDouble(inst->VRegC_23x()));
+    shadow_frame.SetVRegDouble(A(),
+                               shadow_frame.GetVRegDouble(B()) -
+                               shadow_frame.GetVRegDouble(C()));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void MUL_DOUBLE() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegDouble(inst->VRegA_23x(inst_data),
-                               shadow_frame.GetVRegDouble(inst->VRegB_23x()) *
-                               shadow_frame.GetVRegDouble(inst->VRegC_23x()));
+    shadow_frame.SetVRegDouble(A(),
+                               shadow_frame.GetVRegDouble(B()) *
+                               shadow_frame.GetVRegDouble(C()));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void DIV_DOUBLE() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegDouble(inst->VRegA_23x(inst_data),
-                               shadow_frame.GetVRegDouble(inst->VRegB_23x()) /
-                               shadow_frame.GetVRegDouble(inst->VRegC_23x()));
+    shadow_frame.SetVRegDouble(A(),
+                               shadow_frame.GetVRegDouble(B()) /
+                               shadow_frame.GetVRegDouble(C()));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void REM_DOUBLE() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegDouble(inst->VRegA_23x(inst_data),
-                               fmod(shadow_frame.GetVRegDouble(inst->VRegB_23x()),
-                                    shadow_frame.GetVRegDouble(inst->VRegC_23x())));
+    shadow_frame.SetVRegDouble(A(),
+                               fmod(shadow_frame.GetVRegDouble(B()),
+                                    shadow_frame.GetVRegDouble(C())));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void ADD_INT_2ADDR() REQUIRES_SHARED(Locks::mutator_lock_) {
     uint4_t vregA = inst->VRegA_12x(inst_data);
     shadow_frame.SetVReg(vregA, SafeAdd(shadow_frame.GetVReg(vregA),
-                                        shadow_frame.GetVReg(inst->VRegB_12x(inst_data))));
+                                        shadow_frame.GetVReg(B())));
     inst = inst->Next_1xx();
   }
 
@@ -2107,7 +2107,7 @@
     uint4_t vregA = inst->VRegA_12x(inst_data);
     shadow_frame.SetVReg(vregA,
                          SafeSub(shadow_frame.GetVReg(vregA),
-                                 shadow_frame.GetVReg(inst->VRegB_12x(inst_data))));
+                                 shadow_frame.GetVReg(B())));
     inst = inst->Next_1xx();
   }
 
@@ -2115,21 +2115,21 @@
     uint4_t vregA = inst->VRegA_12x(inst_data);
     shadow_frame.SetVReg(vregA,
                          SafeMul(shadow_frame.GetVReg(vregA),
-                                 shadow_frame.GetVReg(inst->VRegB_12x(inst_data))));
+                                 shadow_frame.GetVReg(B())));
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void DIV_INT_2ADDR() REQUIRES_SHARED(Locks::mutator_lock_) {
     uint4_t vregA = inst->VRegA_12x(inst_data);
     bool success = DoIntDivide(shadow_frame, vregA, shadow_frame.GetVReg(vregA),
-                               shadow_frame.GetVReg(inst->VRegB_12x(inst_data)));
+                               shadow_frame.GetVReg(B()));
     POSSIBLY_HANDLE_PENDING_EXCEPTION(!success, Next_1xx);
   }
 
   ALWAYS_INLINE void REM_INT_2ADDR() REQUIRES_SHARED(Locks::mutator_lock_) {
     uint4_t vregA = inst->VRegA_12x(inst_data);
     bool success = DoIntRemainder(shadow_frame, vregA, shadow_frame.GetVReg(vregA),
-                                  shadow_frame.GetVReg(inst->VRegB_12x(inst_data)));
+                                  shadow_frame.GetVReg(B()));
     POSSIBLY_HANDLE_PENDING_EXCEPTION(!success, Next_1xx);
   }
 
@@ -2137,7 +2137,7 @@
     uint4_t vregA = inst->VRegA_12x(inst_data);
     shadow_frame.SetVReg(vregA,
                          shadow_frame.GetVReg(vregA) <<
-                         (shadow_frame.GetVReg(inst->VRegB_12x(inst_data)) & 0x1f));
+                         (shadow_frame.GetVReg(B()) & 0x1f));
     inst = inst->Next_1xx();
   }
 
@@ -2145,7 +2145,7 @@
     uint4_t vregA = inst->VRegA_12x(inst_data);
     shadow_frame.SetVReg(vregA,
                          shadow_frame.GetVReg(vregA) >>
-                         (shadow_frame.GetVReg(inst->VRegB_12x(inst_data)) & 0x1f));
+                         (shadow_frame.GetVReg(B()) & 0x1f));
     inst = inst->Next_1xx();
   }
 
@@ -2153,7 +2153,7 @@
     uint4_t vregA = inst->VRegA_12x(inst_data);
     shadow_frame.SetVReg(vregA,
                          static_cast<uint32_t>(shadow_frame.GetVReg(vregA)) >>
-                         (shadow_frame.GetVReg(inst->VRegB_12x(inst_data)) & 0x1f));
+                         (shadow_frame.GetVReg(B()) & 0x1f));
     inst = inst->Next_1xx();
   }
 
@@ -2161,7 +2161,7 @@
     uint4_t vregA = inst->VRegA_12x(inst_data);
     shadow_frame.SetVReg(vregA,
                          shadow_frame.GetVReg(vregA) &
-                         shadow_frame.GetVReg(inst->VRegB_12x(inst_data)));
+                         shadow_frame.GetVReg(B()));
     inst = inst->Next_1xx();
   }
 
@@ -2169,7 +2169,7 @@
     uint4_t vregA = inst->VRegA_12x(inst_data);
     shadow_frame.SetVReg(vregA,
                          shadow_frame.GetVReg(vregA) |
-                         shadow_frame.GetVReg(inst->VRegB_12x(inst_data)));
+                         shadow_frame.GetVReg(B()));
     inst = inst->Next_1xx();
   }
 
@@ -2177,7 +2177,7 @@
     uint4_t vregA = inst->VRegA_12x(inst_data);
     shadow_frame.SetVReg(vregA,
                          shadow_frame.GetVReg(vregA) ^
-                         shadow_frame.GetVReg(inst->VRegB_12x(inst_data)));
+                         shadow_frame.GetVReg(B()));
     inst = inst->Next_1xx();
   }
 
@@ -2185,7 +2185,7 @@
     uint4_t vregA = inst->VRegA_12x(inst_data);
     shadow_frame.SetVRegLong(vregA,
                              SafeAdd(shadow_frame.GetVRegLong(vregA),
-                                     shadow_frame.GetVRegLong(inst->VRegB_12x(inst_data))));
+                                     shadow_frame.GetVRegLong(B())));
     inst = inst->Next_1xx();
   }
 
@@ -2193,7 +2193,7 @@
     uint4_t vregA = inst->VRegA_12x(inst_data);
     shadow_frame.SetVRegLong(vregA,
                              SafeSub(shadow_frame.GetVRegLong(vregA),
-                                     shadow_frame.GetVRegLong(inst->VRegB_12x(inst_data))));
+                                     shadow_frame.GetVRegLong(B())));
     inst = inst->Next_1xx();
   }
 
@@ -2201,21 +2201,21 @@
     uint4_t vregA = inst->VRegA_12x(inst_data);
     shadow_frame.SetVRegLong(vregA,
                              SafeMul(shadow_frame.GetVRegLong(vregA),
-                                     shadow_frame.GetVRegLong(inst->VRegB_12x(inst_data))));
+                                     shadow_frame.GetVRegLong(B())));
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void DIV_LONG_2ADDR() REQUIRES_SHARED(Locks::mutator_lock_) {
     uint4_t vregA = inst->VRegA_12x(inst_data);
     DoLongDivide(shadow_frame, vregA, shadow_frame.GetVRegLong(vregA),
-                shadow_frame.GetVRegLong(inst->VRegB_12x(inst_data)));
+                shadow_frame.GetVRegLong(B()));
     POSSIBLY_HANDLE_PENDING_EXCEPTION(self->IsExceptionPending(), Next_1xx);
   }
 
   ALWAYS_INLINE void REM_LONG_2ADDR() REQUIRES_SHARED(Locks::mutator_lock_) {
     uint4_t vregA = inst->VRegA_12x(inst_data);
     DoLongRemainder(shadow_frame, vregA, shadow_frame.GetVRegLong(vregA),
-                    shadow_frame.GetVRegLong(inst->VRegB_12x(inst_data)));
+                    shadow_frame.GetVRegLong(B()));
     POSSIBLY_HANDLE_PENDING_EXCEPTION(self->IsExceptionPending(), Next_1xx);
   }
 
@@ -2223,7 +2223,7 @@
     uint4_t vregA = inst->VRegA_12x(inst_data);
     shadow_frame.SetVRegLong(vregA,
                              shadow_frame.GetVRegLong(vregA) &
-                             shadow_frame.GetVRegLong(inst->VRegB_12x(inst_data)));
+                             shadow_frame.GetVRegLong(B()));
     inst = inst->Next_1xx();
   }
 
@@ -2231,7 +2231,7 @@
     uint4_t vregA = inst->VRegA_12x(inst_data);
     shadow_frame.SetVRegLong(vregA,
                              shadow_frame.GetVRegLong(vregA) |
-                             shadow_frame.GetVRegLong(inst->VRegB_12x(inst_data)));
+                             shadow_frame.GetVRegLong(B()));
     inst = inst->Next_1xx();
   }
 
@@ -2239,7 +2239,7 @@
     uint4_t vregA = inst->VRegA_12x(inst_data);
     shadow_frame.SetVRegLong(vregA,
                              shadow_frame.GetVRegLong(vregA) ^
-                             shadow_frame.GetVRegLong(inst->VRegB_12x(inst_data)));
+                             shadow_frame.GetVRegLong(B()));
     inst = inst->Next_1xx();
   }
 
@@ -2247,7 +2247,7 @@
     uint4_t vregA = inst->VRegA_12x(inst_data);
     shadow_frame.SetVRegLong(vregA,
                              shadow_frame.GetVRegLong(vregA) <<
-                             (shadow_frame.GetVReg(inst->VRegB_12x(inst_data)) & 0x3f));
+                             (shadow_frame.GetVReg(B()) & 0x3f));
     inst = inst->Next_1xx();
   }
 
@@ -2255,7 +2255,7 @@
     uint4_t vregA = inst->VRegA_12x(inst_data);
     shadow_frame.SetVRegLong(vregA,
                              shadow_frame.GetVRegLong(vregA) >>
-                             (shadow_frame.GetVReg(inst->VRegB_12x(inst_data)) & 0x3f));
+                             (shadow_frame.GetVReg(B()) & 0x3f));
     inst = inst->Next_1xx();
   }
 
@@ -2263,7 +2263,7 @@
     uint4_t vregA = inst->VRegA_12x(inst_data);
     shadow_frame.SetVRegLong(vregA,
                              static_cast<uint64_t>(shadow_frame.GetVRegLong(vregA)) >>
-                             (shadow_frame.GetVReg(inst->VRegB_12x(inst_data)) & 0x3f));
+                             (shadow_frame.GetVReg(B()) & 0x3f));
     inst = inst->Next_1xx();
   }
 
@@ -2271,7 +2271,7 @@
     uint4_t vregA = inst->VRegA_12x(inst_data);
     shadow_frame.SetVRegFloat(vregA,
                               shadow_frame.GetVRegFloat(vregA) +
-                              shadow_frame.GetVRegFloat(inst->VRegB_12x(inst_data)));
+                              shadow_frame.GetVRegFloat(B()));
     inst = inst->Next_1xx();
   }
 
@@ -2279,7 +2279,7 @@
     uint4_t vregA = inst->VRegA_12x(inst_data);
     shadow_frame.SetVRegFloat(vregA,
                               shadow_frame.GetVRegFloat(vregA) -
-                              shadow_frame.GetVRegFloat(inst->VRegB_12x(inst_data)));
+                              shadow_frame.GetVRegFloat(B()));
     inst = inst->Next_1xx();
   }
 
@@ -2287,7 +2287,7 @@
     uint4_t vregA = inst->VRegA_12x(inst_data);
     shadow_frame.SetVRegFloat(vregA,
                               shadow_frame.GetVRegFloat(vregA) *
-                              shadow_frame.GetVRegFloat(inst->VRegB_12x(inst_data)));
+                              shadow_frame.GetVRegFloat(B()));
     inst = inst->Next_1xx();
   }
 
@@ -2295,7 +2295,7 @@
     uint4_t vregA = inst->VRegA_12x(inst_data);
     shadow_frame.SetVRegFloat(vregA,
                               shadow_frame.GetVRegFloat(vregA) /
-                              shadow_frame.GetVRegFloat(inst->VRegB_12x(inst_data)));
+                              shadow_frame.GetVRegFloat(B()));
     inst = inst->Next_1xx();
   }
 
@@ -2303,7 +2303,7 @@
     uint4_t vregA = inst->VRegA_12x(inst_data);
     shadow_frame.SetVRegFloat(vregA,
                               fmodf(shadow_frame.GetVRegFloat(vregA),
-                                    shadow_frame.GetVRegFloat(inst->VRegB_12x(inst_data))));
+                                    shadow_frame.GetVRegFloat(B())));
     inst = inst->Next_1xx();
   }
 
@@ -2311,7 +2311,7 @@
     uint4_t vregA = inst->VRegA_12x(inst_data);
     shadow_frame.SetVRegDouble(vregA,
                                shadow_frame.GetVRegDouble(vregA) +
-                               shadow_frame.GetVRegDouble(inst->VRegB_12x(inst_data)));
+                               shadow_frame.GetVRegDouble(B()));
     inst = inst->Next_1xx();
   }
 
@@ -2319,7 +2319,7 @@
     uint4_t vregA = inst->VRegA_12x(inst_data);
     shadow_frame.SetVRegDouble(vregA,
                                shadow_frame.GetVRegDouble(vregA) -
-                               shadow_frame.GetVRegDouble(inst->VRegB_12x(inst_data)));
+                               shadow_frame.GetVRegDouble(B()));
     inst = inst->Next_1xx();
   }
 
@@ -2327,7 +2327,7 @@
     uint4_t vregA = inst->VRegA_12x(inst_data);
     shadow_frame.SetVRegDouble(vregA,
                                shadow_frame.GetVRegDouble(vregA) *
-                               shadow_frame.GetVRegDouble(inst->VRegB_12x(inst_data)));
+                               shadow_frame.GetVRegDouble(B()));
     inst = inst->Next_1xx();
   }
 
@@ -2335,7 +2335,7 @@
     uint4_t vregA = inst->VRegA_12x(inst_data);
     shadow_frame.SetVRegDouble(vregA,
                                shadow_frame.GetVRegDouble(vregA) /
-                               shadow_frame.GetVRegDouble(inst->VRegB_12x(inst_data)));
+                               shadow_frame.GetVRegDouble(B()));
     inst = inst->Next_1xx();
   }
 
@@ -2343,134 +2343,134 @@
     uint4_t vregA = inst->VRegA_12x(inst_data);
     shadow_frame.SetVRegDouble(vregA,
                                fmod(shadow_frame.GetVRegDouble(vregA),
-                                    shadow_frame.GetVRegDouble(inst->VRegB_12x(inst_data))));
+                                    shadow_frame.GetVRegDouble(B())));
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void ADD_INT_LIT16() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVReg(inst->VRegA_22s(inst_data),
-                         SafeAdd(shadow_frame.GetVReg(inst->VRegB_22s(inst_data)),
+    shadow_frame.SetVReg(A(),
+                         SafeAdd(shadow_frame.GetVReg(B()),
                                  inst->VRegC_22s()));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void RSUB_INT() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVReg(inst->VRegA_22s(inst_data),
+    shadow_frame.SetVReg(A(),
                          SafeSub(inst->VRegC_22s(),
-                                 shadow_frame.GetVReg(inst->VRegB_22s(inst_data))));
+                                 shadow_frame.GetVReg(B())));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void MUL_INT_LIT16() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVReg(inst->VRegA_22s(inst_data),
-                         SafeMul(shadow_frame.GetVReg(inst->VRegB_22s(inst_data)),
+    shadow_frame.SetVReg(A(),
+                         SafeMul(shadow_frame.GetVReg(B()),
                                  inst->VRegC_22s()));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void DIV_INT_LIT16() REQUIRES_SHARED(Locks::mutator_lock_) {
     bool success = DoIntDivide(shadow_frame, inst->VRegA_22s(inst_data),
-                               shadow_frame.GetVReg(inst->VRegB_22s(inst_data)),
+                               shadow_frame.GetVReg(B()),
                                inst->VRegC_22s());
     POSSIBLY_HANDLE_PENDING_EXCEPTION(!success, Next_2xx);
   }
 
   ALWAYS_INLINE void REM_INT_LIT16() REQUIRES_SHARED(Locks::mutator_lock_) {
     bool success = DoIntRemainder(shadow_frame, inst->VRegA_22s(inst_data),
-                                  shadow_frame.GetVReg(inst->VRegB_22s(inst_data)),
+                                  shadow_frame.GetVReg(B()),
                                   inst->VRegC_22s());
     POSSIBLY_HANDLE_PENDING_EXCEPTION(!success, Next_2xx);
   }
 
   ALWAYS_INLINE void AND_INT_LIT16() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVReg(inst->VRegA_22s(inst_data),
-                         shadow_frame.GetVReg(inst->VRegB_22s(inst_data)) &
+    shadow_frame.SetVReg(A(),
+                         shadow_frame.GetVReg(B()) &
                          inst->VRegC_22s());
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void OR_INT_LIT16() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVReg(inst->VRegA_22s(inst_data),
-                         shadow_frame.GetVReg(inst->VRegB_22s(inst_data)) |
+    shadow_frame.SetVReg(A(),
+                         shadow_frame.GetVReg(B()) |
                          inst->VRegC_22s());
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void XOR_INT_LIT16() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVReg(inst->VRegA_22s(inst_data),
-                         shadow_frame.GetVReg(inst->VRegB_22s(inst_data)) ^
+    shadow_frame.SetVReg(A(),
+                         shadow_frame.GetVReg(B()) ^
                          inst->VRegC_22s());
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void ADD_INT_LIT8() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVReg(inst->VRegA_22b(inst_data),
-                         SafeAdd(shadow_frame.GetVReg(inst->VRegB_22b()), inst->VRegC_22b()));
+    shadow_frame.SetVReg(A(),
+                         SafeAdd(shadow_frame.GetVReg(B()), inst->VRegC_22b()));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void RSUB_INT_LIT8() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVReg(inst->VRegA_22b(inst_data),
-                         SafeSub(inst->VRegC_22b(), shadow_frame.GetVReg(inst->VRegB_22b())));
+    shadow_frame.SetVReg(A(),
+                         SafeSub(inst->VRegC_22b(), shadow_frame.GetVReg(B())));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void MUL_INT_LIT8() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVReg(inst->VRegA_22b(inst_data),
-                         SafeMul(shadow_frame.GetVReg(inst->VRegB_22b()), inst->VRegC_22b()));
+    shadow_frame.SetVReg(A(),
+                         SafeMul(shadow_frame.GetVReg(B()), inst->VRegC_22b()));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void DIV_INT_LIT8() REQUIRES_SHARED(Locks::mutator_lock_) {
     bool success = DoIntDivide(shadow_frame, inst->VRegA_22b(inst_data),
-                               shadow_frame.GetVReg(inst->VRegB_22b()), inst->VRegC_22b());
+                               shadow_frame.GetVReg(B()), inst->VRegC_22b());
     POSSIBLY_HANDLE_PENDING_EXCEPTION(!success, Next_2xx);
   }
 
   ALWAYS_INLINE void REM_INT_LIT8() REQUIRES_SHARED(Locks::mutator_lock_) {
     bool success = DoIntRemainder(shadow_frame, inst->VRegA_22b(inst_data),
-                                  shadow_frame.GetVReg(inst->VRegB_22b()), inst->VRegC_22b());
+                                  shadow_frame.GetVReg(B()), inst->VRegC_22b());
     POSSIBLY_HANDLE_PENDING_EXCEPTION(!success, Next_2xx);
   }
 
   ALWAYS_INLINE void AND_INT_LIT8() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVReg(inst->VRegA_22b(inst_data),
-                         shadow_frame.GetVReg(inst->VRegB_22b()) &
+    shadow_frame.SetVReg(A(),
+                         shadow_frame.GetVReg(B()) &
                          inst->VRegC_22b());
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void OR_INT_LIT8() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVReg(inst->VRegA_22b(inst_data),
-                         shadow_frame.GetVReg(inst->VRegB_22b()) |
+    shadow_frame.SetVReg(A(),
+                         shadow_frame.GetVReg(B()) |
                          inst->VRegC_22b());
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void XOR_INT_LIT8() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVReg(inst->VRegA_22b(inst_data),
-                         shadow_frame.GetVReg(inst->VRegB_22b()) ^
+    shadow_frame.SetVReg(A(),
+                         shadow_frame.GetVReg(B()) ^
                          inst->VRegC_22b());
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void SHL_INT_LIT8() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVReg(inst->VRegA_22b(inst_data),
-                         shadow_frame.GetVReg(inst->VRegB_22b()) <<
+    shadow_frame.SetVReg(A(),
+                         shadow_frame.GetVReg(B()) <<
                          (inst->VRegC_22b() & 0x1f));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void SHR_INT_LIT8() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVReg(inst->VRegA_22b(inst_data),
-                         shadow_frame.GetVReg(inst->VRegB_22b()) >>
+    shadow_frame.SetVReg(A(),
+                         shadow_frame.GetVReg(B()) >>
                          (inst->VRegC_22b() & 0x1f));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void USHR_INT_LIT8() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVReg(inst->VRegA_22b(inst_data),
-                         static_cast<uint32_t>(shadow_frame.GetVReg(inst->VRegB_22b())) >>
+    shadow_frame.SetVReg(A(),
+                         static_cast<uint32_t>(shadow_frame.GetVReg(B())) >>
                          (inst->VRegC_22b() & 0x1f));
     inst = inst->Next_2xx();
   }
@@ -2560,6 +2560,10 @@
   const uint16_t* Insns() { return ctx->accessor.Insns(); }
   JValue* ResultRegister() { return &ctx->result_register; }
 
+  ALWAYS_INLINE int32_t A() { return inst->VRegA(kFormat, inst_data); }
+  ALWAYS_INLINE int32_t B() { return inst->VRegB(kFormat, inst_data); }
+  ALWAYS_INLINE int32_t C() { return inst->VRegC(kFormat); }
+
   SwitchImplContext* const ctx;
   const instrumentation::Instrumentation* const instrumentation;
   Thread* const self;
@@ -2608,7 +2612,7 @@
     inst_data = inst->Fetch16(0);
     {
       bool exit_loop = false;
-      InstructionHandler<do_access_check, transaction_active> handler(
+      InstructionHandler<do_access_check, transaction_active, Instruction::kInvalidFormat> handler(
           ctx, instrumentation, self, shadow_frame, dex_pc, inst, inst_data, exit_loop);
       if (!handler.Preamble()) {
         if (UNLIKELY(exit_loop)) {
@@ -2621,10 +2625,10 @@
       }
     }
     switch (inst->Opcode(inst_data)) {
-#define OPCODE_CASE(OPCODE, OPCODE_NAME, pname, f, i, a, e, v)                                    \
+#define OPCODE_CASE(OPCODE, OPCODE_NAME, pname, FORMAT, i, a, e, v)                               \
       case OPCODE: {                                                                              \
         bool exit_loop = false;                                                                   \
-        InstructionHandler<do_access_check, transaction_active> handler(                          \
+        InstructionHandler<do_access_check, transaction_active, Instruction::FORMAT> handler(     \
             ctx, instrumentation, self, shadow_frame, dex_pc, inst, inst_data, exit_loop);        \
         handler.OPCODE_NAME();                                                                    \
         /* TODO: Advance 'inst' here, instead of explicitly in each handler */                    \