Switch-interpreter: Add GetVReg/SetVReg forwarding helpers.

Reduce the opcode verbosity and reformat the file.

Test: diff libart.so disassembly
Change-Id: I5bc109b083743e0746424f1d25405ccc65200897
diff --git a/runtime/interpreter/interpreter_switch_impl-inl.h b/runtime/interpreter/interpreter_switch_impl-inl.h
index 90acc7e..c584127 100644
--- a/runtime/interpreter/interpreter_switch_impl-inl.h
+++ b/runtime/interpreter/interpreter_switch_impl-inl.h
@@ -396,78 +396,69 @@
   }
 
   ALWAYS_INLINE void MOVE() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVReg(A(),
-                         shadow_frame.GetVReg(B()));
+    SetVReg(A(), GetVReg(B()));
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void MOVE_FROM16() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVReg(A(),
-                         shadow_frame.GetVReg(B()));
+    SetVReg(A(), GetVReg(B()));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void MOVE_16() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVReg(A(),
-                         shadow_frame.GetVReg(B()));
+    SetVReg(A(), GetVReg(B()));
     inst = inst->Next_3xx();
   }
 
   ALWAYS_INLINE void MOVE_WIDE() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegLong(A(),
-                             shadow_frame.GetVRegLong(B()));
+    SetVRegLong(A(), GetVRegLong(B()));
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void MOVE_WIDE_FROM16() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegLong(A(),
-                             shadow_frame.GetVRegLong(B()));
+    SetVRegLong(A(), GetVRegLong(B()));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void MOVE_WIDE_16() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegLong(A(),
-                             shadow_frame.GetVRegLong(B()));
+    SetVRegLong(A(), GetVRegLong(B()));
     inst = inst->Next_3xx();
   }
 
   ALWAYS_INLINE void MOVE_OBJECT() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegReference(A(),
-                                  shadow_frame.GetVRegReference(B()));
+    SetVRegReference(A(), GetVRegReference(B()));
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void MOVE_OBJECT_FROM16() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegReference(A(),
-                                  shadow_frame.GetVRegReference(B()));
+    SetVRegReference(A(), GetVRegReference(B()));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void MOVE_OBJECT_16() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegReference(A(),
-                                  shadow_frame.GetVRegReference(B()));
+    SetVRegReference(A(), GetVRegReference(B()));
     inst = inst->Next_3xx();
   }
 
   ALWAYS_INLINE void MOVE_RESULT() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVReg(A(), ResultRegister()->GetI());
+    SetVReg(A(), ResultRegister()->GetI());
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void MOVE_RESULT_WIDE() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegLong(A(), ResultRegister()->GetJ());
+    SetVRegLong(A(), ResultRegister()->GetJ());
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void MOVE_RESULT_OBJECT() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegReference(A(), ResultRegister()->GetL());
+    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(A(), exception);
+    SetVRegReference(A(), exception);
     self->ClearException();
     inst = inst->Next_1xx();
   }
@@ -528,7 +519,7 @@
   ALWAYS_INLINE void RETURN() REQUIRES_SHARED(Locks::mutator_lock_) {
     JValue result;
     result.SetJ(0);
-    result.SetI(shadow_frame.GetVReg(A()));
+    result.SetI(GetVReg(A()));
     self->AllowThreadSuspension();
     if (!HandleMonitorChecks()) {
       return;
@@ -555,7 +546,7 @@
 
   ALWAYS_INLINE void RETURN_WIDE() REQUIRES_SHARED(Locks::mutator_lock_) {
     JValue result;
-    result.SetJ(shadow_frame.GetVRegLong(A()));
+    result.SetJ(GetVRegLong(A()));
     self->AllowThreadSuspension();
     if (!HandleMonitorChecks()) {
       return;
@@ -587,11 +578,11 @@
       return;
     }
     const size_t ref_idx = A();
-    ObjPtr<mirror::Object> obj_result = shadow_frame.GetVRegReference(ref_idx);
+    ObjPtr<mirror::Object> obj_result = GetVRegReference(ref_idx);
     if (do_assignability_check && obj_result != nullptr) {
       ObjPtr<mirror::Class> return_type = shadow_frame.GetMethod()->ResolveReturnType();
       // Re-load since it might have moved.
-      obj_result = shadow_frame.GetVRegReference(ref_idx);
+      obj_result = GetVRegReference(ref_idx);
       if (return_type == nullptr) {
         // Return the pending exception.
         HANDLE_PENDING_EXCEPTION();
@@ -620,7 +611,7 @@
       }
     }
     // Re-load since it might have moved during the MethodExitEvent.
-    result.SetL(shadow_frame.GetVRegReference(ref_idx));
+    result.SetL(GetVRegReference(ref_idx));
     if (ctx->interpret_one_instruction) {
       /* Signal mterp to return to caller */
       shadow_frame.SetDexPC(dex::kDexNoIndex);
@@ -632,9 +623,9 @@
   ALWAYS_INLINE void CONST_4() REQUIRES_SHARED(Locks::mutator_lock_) {
     uint4_t dst = inst->VRegA_11n(inst_data);
     int4_t val = inst->VRegB_11n(inst_data);
-    shadow_frame.SetVReg(dst, val);
+    SetVReg(dst, val);
     if (val == 0) {
-      shadow_frame.SetVRegReference(dst, nullptr);
+      SetVRegReference(dst, nullptr);
     }
     inst = inst->Next_1xx();
   }
@@ -642,9 +633,9 @@
   ALWAYS_INLINE void CONST_16() REQUIRES_SHARED(Locks::mutator_lock_) {
     uint8_t dst = A();
     int16_t val = B();
-    shadow_frame.SetVReg(dst, val);
+    SetVReg(dst, val);
     if (val == 0) {
-      shadow_frame.SetVRegReference(dst, nullptr);
+      SetVRegReference(dst, nullptr);
     }
     inst = inst->Next_2xx();
   }
@@ -652,9 +643,9 @@
   ALWAYS_INLINE void CONST() REQUIRES_SHARED(Locks::mutator_lock_) {
     uint8_t dst = A();
     int32_t val = B();
-    shadow_frame.SetVReg(dst, val);
+    SetVReg(dst, val);
     if (val == 0) {
-      shadow_frame.SetVRegReference(dst, nullptr);
+      SetVRegReference(dst, nullptr);
     }
     inst = inst->Next_3xx();
   }
@@ -662,54 +653,49 @@
   ALWAYS_INLINE void CONST_HIGH16() REQUIRES_SHARED(Locks::mutator_lock_) {
     uint8_t dst = A();
     int32_t val = static_cast<int32_t>(B() << 16);
-    shadow_frame.SetVReg(dst, val);
+    SetVReg(dst, val);
     if (val == 0) {
-      shadow_frame.SetVRegReference(dst, nullptr);
+      SetVRegReference(dst, nullptr);
     }
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void CONST_WIDE_16() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegLong(A(), B());
+    SetVRegLong(A(), B());
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void CONST_WIDE_32() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegLong(A(), B());
+    SetVRegLong(A(), B());
     inst = inst->Next_3xx();
   }
 
   ALWAYS_INLINE void CONST_WIDE() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegLong(A(), inst->WideVRegB());
+    SetVRegLong(A(), inst->WideVRegB());
     inst = inst->Next_51l();
   }
 
   ALWAYS_INLINE void CONST_WIDE_HIGH16() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegLong(A(),
-                             static_cast<uint64_t>(B()) << 48);
+    SetVRegLong(A(), static_cast<uint64_t>(B()) << 48);
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void CONST_STRING() REQUIRES_SHARED(Locks::mutator_lock_) {
-    ObjPtr<mirror::String> s = ResolveString(self,
-                                             shadow_frame,
-                                             dex::StringIndex(B()));
+    ObjPtr<mirror::String> s = ResolveString(self, shadow_frame, dex::StringIndex(B()));
     if (UNLIKELY(s == nullptr)) {
       HANDLE_PENDING_EXCEPTION();
     } else {
-      shadow_frame.SetVRegReference(A(), s);
+      SetVRegReference(A(), s);
       inst = inst->Next_2xx();
     }
   }
 
   ALWAYS_INLINE void CONST_STRING_JUMBO() REQUIRES_SHARED(Locks::mutator_lock_) {
-    ObjPtr<mirror::String> s = ResolveString(self,
-                                             shadow_frame,
-                                             dex::StringIndex(B()));
+    ObjPtr<mirror::String> s = ResolveString(self, shadow_frame, dex::StringIndex(B()));
     if (UNLIKELY(s == nullptr)) {
       HANDLE_PENDING_EXCEPTION();
     } else {
-      shadow_frame.SetVRegReference(A(), s);
+      SetVRegReference(A(), s);
       inst = inst->Next_3xx();
     }
   }
@@ -723,7 +709,7 @@
     if (UNLIKELY(c == nullptr)) {
       HANDLE_PENDING_EXCEPTION();
     } else {
-      shadow_frame.SetVRegReference(A(), c);
+      SetVRegReference(A(), c);
       inst = inst->Next_2xx();
     }
   }
@@ -736,7 +722,7 @@
     if (UNLIKELY(mh == nullptr)) {
       HANDLE_PENDING_EXCEPTION();
     } else {
-      shadow_frame.SetVRegReference(A(), mh);
+      SetVRegReference(A(), mh);
       inst = inst->Next_2xx();
     }
   }
@@ -749,7 +735,7 @@
     if (UNLIKELY(mt == nullptr)) {
       HANDLE_PENDING_EXCEPTION();
     } else {
-      shadow_frame.SetVRegReference(A(), mt);
+      SetVRegReference(A(), mt);
       inst = inst->Next_2xx();
     }
   }
@@ -758,7 +744,7 @@
     if (!HandleAsyncException()) {
       return;
     }
-    ObjPtr<mirror::Object> obj = shadow_frame.GetVRegReference(A());
+    ObjPtr<mirror::Object> obj = GetVRegReference(A());
     if (UNLIKELY(obj == nullptr)) {
       ThrowNullPointerExceptionFromInterpreter();
       HANDLE_PENDING_EXCEPTION();
@@ -772,7 +758,7 @@
     if (!HandleAsyncException()) {
       return;
     }
-    ObjPtr<mirror::Object> obj = shadow_frame.GetVRegReference(A());
+    ObjPtr<mirror::Object> obj = GetVRegReference(A());
     if (UNLIKELY(obj == nullptr)) {
       ThrowNullPointerExceptionFromInterpreter();
       HANDLE_PENDING_EXCEPTION();
@@ -791,7 +777,7 @@
     if (UNLIKELY(c == nullptr)) {
       HANDLE_PENDING_EXCEPTION();
     } else {
-      ObjPtr<mirror::Object> obj = shadow_frame.GetVRegReference(A());
+      ObjPtr<mirror::Object> obj = GetVRegReference(A());
       if (UNLIKELY(obj != nullptr && !obj->InstanceOf(c))) {
         ThrowClassCastException(c, obj->GetClass());
         HANDLE_PENDING_EXCEPTION();
@@ -810,20 +796,19 @@
     if (UNLIKELY(c == nullptr)) {
       HANDLE_PENDING_EXCEPTION();
     } else {
-      ObjPtr<mirror::Object> obj = shadow_frame.GetVRegReference(B());
-      shadow_frame.SetVReg(A(),
-                           (obj != nullptr && obj->InstanceOf(c)) ? 1 : 0);
+      ObjPtr<mirror::Object> obj = GetVRegReference(B());
+      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(B());
+    ObjPtr<mirror::Object> array = GetVRegReference(B());
     if (UNLIKELY(array == nullptr)) {
       ThrowNullPointerExceptionFromInterpreter();
       HANDLE_PENDING_EXCEPTION();
     } else {
-      shadow_frame.SetVReg(A(), array->AsArray()->GetLength());
+      SetVReg(A(), array->AsArray()->GetLength());
       inst = inst->Next_1xx();
     }
   }
@@ -854,13 +839,13 @@
                           obj->PrettyTypeOf().c_str());
         HANDLE_PENDING_EXCEPTION();
       }
-      shadow_frame.SetVRegReference(A(), obj);
+      SetVRegReference(A(), obj);
       inst = inst->Next_2xx();
     }
   }
 
   ALWAYS_INLINE void NEW_ARRAY() REQUIRES_SHARED(Locks::mutator_lock_) {
-    int32_t length = shadow_frame.GetVReg(B());
+    int32_t length = GetVReg(B());
     ObjPtr<mirror::Object> obj = AllocArrayFromCode<do_access_check>(
         dex::TypeIndex(C()),
         length,
@@ -870,7 +855,7 @@
     if (UNLIKELY(obj == nullptr)) {
       HANDLE_PENDING_EXCEPTION();
     } else {
-      shadow_frame.SetVRegReference(A(), obj);
+      SetVRegReference(A(), obj);
       inst = inst->Next_2xx();
     }
   }
@@ -893,7 +878,7 @@
     const uint16_t* payload_addr = reinterpret_cast<const uint16_t*>(inst) + B();
     const Instruction::ArrayDataPayload* payload =
         reinterpret_cast<const Instruction::ArrayDataPayload*>(payload_addr);
-    ObjPtr<mirror::Object> obj = shadow_frame.GetVRegReference(A());
+    ObjPtr<mirror::Object> obj = GetVRegReference(A());
     bool success = FillArrayData(obj, payload);
     if (!success) {
       HANDLE_PENDING_EXCEPTION();
@@ -908,8 +893,7 @@
     if (!HandleAsyncException()) {
       return;
     }
-    ObjPtr<mirror::Object> exception =
-        shadow_frame.GetVRegReference(A());
+    ObjPtr<mirror::Object> exception = GetVRegReference(A());
     if (UNLIKELY(exception == nullptr)) {
       ThrowNullPointerException("throw with null exception");
     } else if (do_assignability_check && !exception->GetClass()->IsThrowableClass()) {
@@ -971,10 +955,9 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wfloat-equal"
 
-
   ALWAYS_INLINE void CMPL_FLOAT() REQUIRES_SHARED(Locks::mutator_lock_) {
-    float val1 = shadow_frame.GetVRegFloat(B());
-    float val2 = shadow_frame.GetVRegFloat(C());
+    float val1 = GetVRegFloat(B());
+    float val2 = GetVRegFloat(C());
     int32_t result;
     if (val1 > val2) {
       result = 1;
@@ -983,13 +966,13 @@
     } else {
       result = -1;
     }
-    shadow_frame.SetVReg(A(), result);
+    SetVReg(A(), result);
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void CMPG_FLOAT() REQUIRES_SHARED(Locks::mutator_lock_) {
-    float val1 = shadow_frame.GetVRegFloat(B());
-    float val2 = shadow_frame.GetVRegFloat(C());
+    float val1 = GetVRegFloat(B());
+    float val2 = GetVRegFloat(C());
     int32_t result;
     if (val1 < val2) {
       result = -1;
@@ -998,13 +981,13 @@
     } else {
       result = 1;
     }
-    shadow_frame.SetVReg(A(), result);
+    SetVReg(A(), result);
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void CMPL_DOUBLE() REQUIRES_SHARED(Locks::mutator_lock_) {
-    double val1 = shadow_frame.GetVRegDouble(B());
-    double val2 = shadow_frame.GetVRegDouble(C());
+    double val1 = GetVRegDouble(B());
+    double val2 = GetVRegDouble(C());
     int32_t result;
     if (val1 > val2) {
       result = 1;
@@ -1013,14 +996,13 @@
     } else {
       result = -1;
     }
-    shadow_frame.SetVReg(A(), result);
+    SetVReg(A(), result);
     inst = inst->Next_2xx();
   }
 
-
   ALWAYS_INLINE void CMPG_DOUBLE() REQUIRES_SHARED(Locks::mutator_lock_) {
-    double val1 = shadow_frame.GetVRegDouble(B());
-    double val2 = shadow_frame.GetVRegDouble(C());
+    double val1 = GetVRegDouble(B());
+    double val2 = GetVRegDouble(C());
     int32_t result;
     if (val1 < val2) {
       result = -1;
@@ -1029,16 +1011,15 @@
     } else {
       result = 1;
     }
-    shadow_frame.SetVReg(A(), result);
+    SetVReg(A(), result);
     inst = inst->Next_2xx();
   }
 
 #pragma clang diagnostic pop
 
-
   ALWAYS_INLINE void CMP_LONG() REQUIRES_SHARED(Locks::mutator_lock_) {
-    int64_t val1 = shadow_frame.GetVRegLong(B());
-    int64_t val2 = shadow_frame.GetVRegLong(C());
+    int64_t val1 = GetVRegLong(B());
+    int64_t val2 = GetVRegLong(C());
     int32_t result;
     if (val1 > val2) {
       result = 1;
@@ -1047,13 +1028,12 @@
     } else {
       result = -1;
     }
-    shadow_frame.SetVReg(A(), result);
+    SetVReg(A(), result);
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void IF_EQ() REQUIRES_SHARED(Locks::mutator_lock_) {
-    if (shadow_frame.GetVReg(A()) ==
-        shadow_frame.GetVReg(B())) {
+    if (GetVReg(A()) == GetVReg(B())) {
       int16_t offset = C();
       BRANCH_INSTRUMENTATION(offset);
       inst = inst->RelativeAt(offset);
@@ -1065,8 +1045,7 @@
   }
 
   ALWAYS_INLINE void IF_NE() REQUIRES_SHARED(Locks::mutator_lock_) {
-    if (shadow_frame.GetVReg(A()) !=
-        shadow_frame.GetVReg(B())) {
+    if (GetVReg(A()) != GetVReg(B())) {
       int16_t offset = C();
       BRANCH_INSTRUMENTATION(offset);
       inst = inst->RelativeAt(offset);
@@ -1078,8 +1057,7 @@
   }
 
   ALWAYS_INLINE void IF_LT() REQUIRES_SHARED(Locks::mutator_lock_) {
-    if (shadow_frame.GetVReg(A()) <
-        shadow_frame.GetVReg(B())) {
+    if (GetVReg(A()) < GetVReg(B())) {
       int16_t offset = C();
       BRANCH_INSTRUMENTATION(offset);
       inst = inst->RelativeAt(offset);
@@ -1091,8 +1069,7 @@
   }
 
   ALWAYS_INLINE void IF_GE() REQUIRES_SHARED(Locks::mutator_lock_) {
-    if (shadow_frame.GetVReg(A()) >=
-        shadow_frame.GetVReg(B())) {
+    if (GetVReg(A()) >= GetVReg(B())) {
       int16_t offset = C();
       BRANCH_INSTRUMENTATION(offset);
       inst = inst->RelativeAt(offset);
@@ -1104,8 +1081,7 @@
   }
 
   ALWAYS_INLINE void IF_GT() REQUIRES_SHARED(Locks::mutator_lock_) {
-    if (shadow_frame.GetVReg(A()) >
-    shadow_frame.GetVReg(B())) {
+    if (GetVReg(A()) > GetVReg(B())) {
       int16_t offset = C();
       BRANCH_INSTRUMENTATION(offset);
       inst = inst->RelativeAt(offset);
@@ -1117,8 +1093,7 @@
   }
 
   ALWAYS_INLINE void IF_LE() REQUIRES_SHARED(Locks::mutator_lock_) {
-    if (shadow_frame.GetVReg(A()) <=
-        shadow_frame.GetVReg(B())) {
+    if (GetVReg(A()) <= GetVReg(B())) {
       int16_t offset = C();
       BRANCH_INSTRUMENTATION(offset);
       inst = inst->RelativeAt(offset);
@@ -1130,7 +1105,7 @@
   }
 
   ALWAYS_INLINE void IF_EQZ() REQUIRES_SHARED(Locks::mutator_lock_) {
-    if (shadow_frame.GetVReg(A()) == 0) {
+    if (GetVReg(A()) == 0) {
       int16_t offset = B();
       BRANCH_INSTRUMENTATION(offset);
       inst = inst->RelativeAt(offset);
@@ -1142,7 +1117,7 @@
   }
 
   ALWAYS_INLINE void IF_NEZ() REQUIRES_SHARED(Locks::mutator_lock_) {
-    if (shadow_frame.GetVReg(A()) != 0) {
+    if (GetVReg(A()) != 0) {
       int16_t offset = B();
       BRANCH_INSTRUMENTATION(offset);
       inst = inst->RelativeAt(offset);
@@ -1154,7 +1129,7 @@
   }
 
   ALWAYS_INLINE void IF_LTZ() REQUIRES_SHARED(Locks::mutator_lock_) {
-    if (shadow_frame.GetVReg(A()) < 0) {
+    if (GetVReg(A()) < 0) {
       int16_t offset = B();
       BRANCH_INSTRUMENTATION(offset);
       inst = inst->RelativeAt(offset);
@@ -1166,7 +1141,7 @@
   }
 
   ALWAYS_INLINE void IF_GEZ() REQUIRES_SHARED(Locks::mutator_lock_) {
-    if (shadow_frame.GetVReg(A()) >= 0) {
+    if (GetVReg(A()) >= 0) {
       int16_t offset = B();
       BRANCH_INSTRUMENTATION(offset);
       inst = inst->RelativeAt(offset);
@@ -1178,7 +1153,7 @@
   }
 
   ALWAYS_INLINE void IF_GTZ() REQUIRES_SHARED(Locks::mutator_lock_) {
-    if (shadow_frame.GetVReg(A()) > 0) {
+    if (GetVReg(A()) > 0) {
       int16_t offset = B();
       BRANCH_INSTRUMENTATION(offset);
       inst = inst->RelativeAt(offset);
@@ -1190,7 +1165,7 @@
   }
 
   ALWAYS_INLINE void IF_LEZ() REQUIRES_SHARED(Locks::mutator_lock_) {
-    if (shadow_frame.GetVReg(A()) <= 0) {
+    if (GetVReg(A()) <= 0) {
       int16_t offset = B();
       BRANCH_INSTRUMENTATION(offset);
       inst = inst->RelativeAt(offset);
@@ -1202,15 +1177,15 @@
   }
 
   ALWAYS_INLINE void AGET_BOOLEAN() REQUIRES_SHARED(Locks::mutator_lock_) {
-    ObjPtr<mirror::Object> a = shadow_frame.GetVRegReference(B());
+    ObjPtr<mirror::Object> a = GetVRegReference(B());
     if (UNLIKELY(a == nullptr)) {
       ThrowNullPointerExceptionFromInterpreter();
       HANDLE_PENDING_EXCEPTION();
     }
-    int32_t index = shadow_frame.GetVReg(C());
+    int32_t index = GetVReg(C());
     ObjPtr<mirror::BooleanArray> array = a->AsBooleanArray();
     if (array->CheckIsValidIndex(index)) {
-      shadow_frame.SetVReg(A(), array->GetWithoutChecks(index));
+      SetVReg(A(), array->GetWithoutChecks(index));
       inst = inst->Next_2xx();
     } else {
       HANDLE_PENDING_EXCEPTION();
@@ -1218,15 +1193,15 @@
   }
 
   ALWAYS_INLINE void AGET_BYTE() REQUIRES_SHARED(Locks::mutator_lock_) {
-    ObjPtr<mirror::Object> a = shadow_frame.GetVRegReference(B());
+    ObjPtr<mirror::Object> a = GetVRegReference(B());
     if (UNLIKELY(a == nullptr)) {
       ThrowNullPointerExceptionFromInterpreter();
       HANDLE_PENDING_EXCEPTION();
     }
-    int32_t index = shadow_frame.GetVReg(C());
+    int32_t index = GetVReg(C());
     ObjPtr<mirror::ByteArray> array = a->AsByteArray();
     if (array->CheckIsValidIndex(index)) {
-      shadow_frame.SetVReg(A(), array->GetWithoutChecks(index));
+      SetVReg(A(), array->GetWithoutChecks(index));
       inst = inst->Next_2xx();
     } else {
       HANDLE_PENDING_EXCEPTION();
@@ -1234,15 +1209,15 @@
   }
 
   ALWAYS_INLINE void AGET_CHAR() REQUIRES_SHARED(Locks::mutator_lock_) {
-    ObjPtr<mirror::Object> a = shadow_frame.GetVRegReference(B());
+    ObjPtr<mirror::Object> a = GetVRegReference(B());
     if (UNLIKELY(a == nullptr)) {
       ThrowNullPointerExceptionFromInterpreter();
       HANDLE_PENDING_EXCEPTION();
     }
-    int32_t index = shadow_frame.GetVReg(C());
+    int32_t index = GetVReg(C());
     ObjPtr<mirror::CharArray> array = a->AsCharArray();
     if (array->CheckIsValidIndex(index)) {
-      shadow_frame.SetVReg(A(), array->GetWithoutChecks(index));
+      SetVReg(A(), array->GetWithoutChecks(index));
       inst = inst->Next_2xx();
     } else {
       HANDLE_PENDING_EXCEPTION();
@@ -1250,15 +1225,15 @@
   }
 
   ALWAYS_INLINE void AGET_SHORT() REQUIRES_SHARED(Locks::mutator_lock_) {
-    ObjPtr<mirror::Object> a = shadow_frame.GetVRegReference(B());
+    ObjPtr<mirror::Object> a = GetVRegReference(B());
     if (UNLIKELY(a == nullptr)) {
       ThrowNullPointerExceptionFromInterpreter();
       HANDLE_PENDING_EXCEPTION();
     }
-    int32_t index = shadow_frame.GetVReg(C());
+    int32_t index = GetVReg(C());
     ObjPtr<mirror::ShortArray> array = a->AsShortArray();
     if (array->CheckIsValidIndex(index)) {
-      shadow_frame.SetVReg(A(), array->GetWithoutChecks(index));
+      SetVReg(A(), array->GetWithoutChecks(index));
       inst = inst->Next_2xx();
     } else {
       HANDLE_PENDING_EXCEPTION();
@@ -1266,16 +1241,16 @@
   }
 
   ALWAYS_INLINE void AGET() REQUIRES_SHARED(Locks::mutator_lock_) {
-    ObjPtr<mirror::Object> a = shadow_frame.GetVRegReference(B());
+    ObjPtr<mirror::Object> a = GetVRegReference(B());
     if (UNLIKELY(a == nullptr)) {
       ThrowNullPointerExceptionFromInterpreter();
       HANDLE_PENDING_EXCEPTION();
     }
-    int32_t index = shadow_frame.GetVReg(C());
+    int32_t index = 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(A(), array->GetWithoutChecks(index));
+      SetVReg(A(), array->GetWithoutChecks(index));
       inst = inst->Next_2xx();
     } else {
       HANDLE_PENDING_EXCEPTION();
@@ -1283,16 +1258,16 @@
   }
 
   ALWAYS_INLINE void AGET_WIDE() REQUIRES_SHARED(Locks::mutator_lock_) {
-    ObjPtr<mirror::Object> a = shadow_frame.GetVRegReference(B());
+    ObjPtr<mirror::Object> a = GetVRegReference(B());
     if (UNLIKELY(a == nullptr)) {
       ThrowNullPointerExceptionFromInterpreter();
       HANDLE_PENDING_EXCEPTION();
     }
-    int32_t index = shadow_frame.GetVReg(C());
+    int32_t index = 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(A(), array->GetWithoutChecks(index));
+      SetVRegLong(A(), array->GetWithoutChecks(index));
       inst = inst->Next_2xx();
     } else {
       HANDLE_PENDING_EXCEPTION();
@@ -1300,15 +1275,15 @@
   }
 
   ALWAYS_INLINE void AGET_OBJECT() REQUIRES_SHARED(Locks::mutator_lock_) {
-    ObjPtr<mirror::Object> a = shadow_frame.GetVRegReference(B());
+    ObjPtr<mirror::Object> a = GetVRegReference(B());
     if (UNLIKELY(a == nullptr)) {
       ThrowNullPointerExceptionFromInterpreter();
       HANDLE_PENDING_EXCEPTION();
     }
-    int32_t index = shadow_frame.GetVReg(C());
+    int32_t index = GetVReg(C());
     ObjPtr<mirror::ObjectArray<mirror::Object>> array = a->AsObjectArray<mirror::Object>();
     if (array->CheckIsValidIndex(index)) {
-      shadow_frame.SetVRegReference(A(), array->GetWithoutChecks(index));
+      SetVRegReference(A(), array->GetWithoutChecks(index));
       inst = inst->Next_2xx();
     } else {
       HANDLE_PENDING_EXCEPTION();
@@ -1316,13 +1291,13 @@
   }
 
   ALWAYS_INLINE void APUT_BOOLEAN() REQUIRES_SHARED(Locks::mutator_lock_) {
-    ObjPtr<mirror::Object> a = shadow_frame.GetVRegReference(B());
+    ObjPtr<mirror::Object> a = GetVRegReference(B());
     if (UNLIKELY(a == nullptr)) {
       ThrowNullPointerExceptionFromInterpreter();
       HANDLE_PENDING_EXCEPTION();
     }
-    uint8_t val = shadow_frame.GetVReg(A());
-    int32_t index = shadow_frame.GetVReg(C());
+    uint8_t val = GetVReg(A());
+    int32_t index = GetVReg(C());
     ObjPtr<mirror::BooleanArray> array = a->AsBooleanArray();
     if (array->CheckIsValidIndex(index)) {
       array->SetWithoutChecks<transaction_active>(index, val);
@@ -1333,13 +1308,13 @@
   }
 
   ALWAYS_INLINE void APUT_BYTE() REQUIRES_SHARED(Locks::mutator_lock_) {
-    ObjPtr<mirror::Object> a = shadow_frame.GetVRegReference(B());
+    ObjPtr<mirror::Object> a = GetVRegReference(B());
     if (UNLIKELY(a == nullptr)) {
       ThrowNullPointerExceptionFromInterpreter();
       HANDLE_PENDING_EXCEPTION();
     }
-    int8_t val = shadow_frame.GetVReg(A());
-    int32_t index = shadow_frame.GetVReg(C());
+    int8_t val = GetVReg(A());
+    int32_t index = GetVReg(C());
     ObjPtr<mirror::ByteArray> array = a->AsByteArray();
     if (array->CheckIsValidIndex(index)) {
       array->SetWithoutChecks<transaction_active>(index, val);
@@ -1350,13 +1325,13 @@
   }
 
   ALWAYS_INLINE void APUT_CHAR() REQUIRES_SHARED(Locks::mutator_lock_) {
-    ObjPtr<mirror::Object> a = shadow_frame.GetVRegReference(B());
+    ObjPtr<mirror::Object> a = GetVRegReference(B());
     if (UNLIKELY(a == nullptr)) {
       ThrowNullPointerExceptionFromInterpreter();
       HANDLE_PENDING_EXCEPTION();
     }
-    uint16_t val = shadow_frame.GetVReg(A());
-    int32_t index = shadow_frame.GetVReg(C());
+    uint16_t val = GetVReg(A());
+    int32_t index = GetVReg(C());
     ObjPtr<mirror::CharArray> array = a->AsCharArray();
     if (array->CheckIsValidIndex(index)) {
       array->SetWithoutChecks<transaction_active>(index, val);
@@ -1367,13 +1342,13 @@
   }
 
   ALWAYS_INLINE void APUT_SHORT() REQUIRES_SHARED(Locks::mutator_lock_) {
-    ObjPtr<mirror::Object> a = shadow_frame.GetVRegReference(B());
+    ObjPtr<mirror::Object> a = GetVRegReference(B());
     if (UNLIKELY(a == nullptr)) {
       ThrowNullPointerExceptionFromInterpreter();
       HANDLE_PENDING_EXCEPTION();
     }
-    int16_t val = shadow_frame.GetVReg(A());
-    int32_t index = shadow_frame.GetVReg(C());
+    int16_t val = GetVReg(A());
+    int32_t index = GetVReg(C());
     ObjPtr<mirror::ShortArray> array = a->AsShortArray();
     if (array->CheckIsValidIndex(index)) {
       array->SetWithoutChecks<transaction_active>(index, val);
@@ -1384,13 +1359,13 @@
   }
 
   ALWAYS_INLINE void APUT() REQUIRES_SHARED(Locks::mutator_lock_) {
-    ObjPtr<mirror::Object> a = shadow_frame.GetVRegReference(B());
+    ObjPtr<mirror::Object> a = GetVRegReference(B());
     if (UNLIKELY(a == nullptr)) {
       ThrowNullPointerExceptionFromInterpreter();
       HANDLE_PENDING_EXCEPTION();
     }
-    int32_t val = shadow_frame.GetVReg(A());
-    int32_t index = shadow_frame.GetVReg(C());
+    int32_t val = GetVReg(A());
+    int32_t index = GetVReg(C());
     DCHECK(a->IsIntArray() || a->IsFloatArray()) << a->PrettyTypeOf();
     ObjPtr<mirror::IntArray> array = ObjPtr<mirror::IntArray>::DownCast(a);
     if (array->CheckIsValidIndex(index)) {
@@ -1402,13 +1377,13 @@
   }
 
   ALWAYS_INLINE void APUT_WIDE() REQUIRES_SHARED(Locks::mutator_lock_) {
-    ObjPtr<mirror::Object> a = shadow_frame.GetVRegReference(B());
+    ObjPtr<mirror::Object> a = GetVRegReference(B());
     if (UNLIKELY(a == nullptr)) {
       ThrowNullPointerExceptionFromInterpreter();
       HANDLE_PENDING_EXCEPTION();
     }
-    int64_t val = shadow_frame.GetVRegLong(A());
-    int32_t index = shadow_frame.GetVReg(C());
+    int64_t val = GetVRegLong(A());
+    int32_t index = GetVReg(C());
     DCHECK(a->IsLongArray() || a->IsDoubleArray()) << a->PrettyTypeOf();
     ObjPtr<mirror::LongArray> array = ObjPtr<mirror::LongArray>::DownCast(a);
     if (array->CheckIsValidIndex(index)) {
@@ -1420,13 +1395,13 @@
   }
 
   ALWAYS_INLINE void APUT_OBJECT() REQUIRES_SHARED(Locks::mutator_lock_) {
-    ObjPtr<mirror::Object> a = shadow_frame.GetVRegReference(B());
+    ObjPtr<mirror::Object> a = GetVRegReference(B());
     if (UNLIKELY(a == nullptr)) {
       ThrowNullPointerExceptionFromInterpreter();
       HANDLE_PENDING_EXCEPTION();
     }
-    int32_t index = shadow_frame.GetVReg(C());
-    ObjPtr<mirror::Object> val = shadow_frame.GetVRegReference(A());
+    int32_t index = GetVReg(C());
+    ObjPtr<mirror::Object> val = 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);
@@ -1782,735 +1757,562 @@
   }
 
   ALWAYS_INLINE void NEG_INT() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVReg(
-        A(), -shadow_frame.GetVReg(B()));
+    SetVReg(A(), -GetVReg(B()));
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void NOT_INT() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVReg(
-        A(), ~shadow_frame.GetVReg(B()));
+    SetVReg(A(), ~GetVReg(B()));
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void NEG_LONG() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegLong(
-        A(), -shadow_frame.GetVRegLong(B()));
+    SetVRegLong(A(), -GetVRegLong(B()));
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void NOT_LONG() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegLong(
-        A(), ~shadow_frame.GetVRegLong(B()));
+    SetVRegLong(A(), ~GetVRegLong(B()));
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void NEG_FLOAT() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegFloat(
-        A(), -shadow_frame.GetVRegFloat(B()));
+    SetVRegFloat(A(), -GetVRegFloat(B()));
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void NEG_DOUBLE() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegDouble(
-        A(), -shadow_frame.GetVRegDouble(B()));
+    SetVRegDouble(A(), -GetVRegDouble(B()));
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void INT_TO_LONG() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegLong(A(),
-                             shadow_frame.GetVReg(B()));
+    SetVRegLong(A(), GetVReg(B()));
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void INT_TO_FLOAT() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegFloat(A(),
-                              shadow_frame.GetVReg(B()));
+    SetVRegFloat(A(), GetVReg(B()));
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void INT_TO_DOUBLE() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegDouble(A(),
-                               shadow_frame.GetVReg(B()));
+    SetVRegDouble(A(), GetVReg(B()));
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void LONG_TO_INT() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVReg(A(),
-                         shadow_frame.GetVRegLong(B()));
+    SetVReg(A(), GetVRegLong(B()));
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void LONG_TO_FLOAT() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegFloat(A(),
-                              shadow_frame.GetVRegLong(B()));
+    SetVRegFloat(A(), GetVRegLong(B()));
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void LONG_TO_DOUBLE() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegDouble(A(),
-                               shadow_frame.GetVRegLong(B()));
+    SetVRegDouble(A(), GetVRegLong(B()));
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void FLOAT_TO_INT() REQUIRES_SHARED(Locks::mutator_lock_) {
-    float val = shadow_frame.GetVRegFloat(B());
+    float val = GetVRegFloat(B());
     int32_t result = art_float_to_integral<int32_t, float>(val);
-    shadow_frame.SetVReg(A(), result);
+    SetVReg(A(), result);
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void FLOAT_TO_LONG() REQUIRES_SHARED(Locks::mutator_lock_) {
-    float val = shadow_frame.GetVRegFloat(B());
+    float val = GetVRegFloat(B());
     int64_t result = art_float_to_integral<int64_t, float>(val);
-    shadow_frame.SetVRegLong(A(), result);
+    SetVRegLong(A(), result);
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void FLOAT_TO_DOUBLE() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegDouble(A(),
-                               shadow_frame.GetVRegFloat(B()));
+    SetVRegDouble(A(), GetVRegFloat(B()));
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void DOUBLE_TO_INT() REQUIRES_SHARED(Locks::mutator_lock_) {
-    double val = shadow_frame.GetVRegDouble(B());
+    double val = GetVRegDouble(B());
     int32_t result = art_float_to_integral<int32_t, double>(val);
-    shadow_frame.SetVReg(A(), result);
+    SetVReg(A(), result);
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void DOUBLE_TO_LONG() REQUIRES_SHARED(Locks::mutator_lock_) {
-    double val = shadow_frame.GetVRegDouble(B());
+    double val = GetVRegDouble(B());
     int64_t result = art_float_to_integral<int64_t, double>(val);
-    shadow_frame.SetVRegLong(A(), result);
+    SetVRegLong(A(), result);
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void DOUBLE_TO_FLOAT() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegFloat(A(),
-                              shadow_frame.GetVRegDouble(B()));
+    SetVRegFloat(A(), GetVRegDouble(B()));
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void INT_TO_BYTE() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVReg(A(), static_cast<int8_t>(
-        shadow_frame.GetVReg(B())));
+    SetVReg(A(), static_cast<int8_t>(GetVReg(B())));
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void INT_TO_CHAR() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVReg(A(), static_cast<uint16_t>(
-        shadow_frame.GetVReg(B())));
+    SetVReg(A(), static_cast<uint16_t>(GetVReg(B())));
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void INT_TO_SHORT() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVReg(A(), static_cast<int16_t>(
-        shadow_frame.GetVReg(B())));
+    SetVReg(A(), static_cast<int16_t>(GetVReg(B())));
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void ADD_INT() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVReg(A(),
-                         SafeAdd(shadow_frame.GetVReg(B()),
-                                 shadow_frame.GetVReg(C())));
+    SetVReg(A(), SafeAdd(GetVReg(B()), GetVReg(C())));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void SUB_INT() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVReg(A(),
-                         SafeSub(shadow_frame.GetVReg(B()),
-                                 shadow_frame.GetVReg(C())));
+    SetVReg(A(), SafeSub(GetVReg(B()), GetVReg(C())));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void MUL_INT() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVReg(A(),
-                         SafeMul(shadow_frame.GetVReg(B()),
-                                 shadow_frame.GetVReg(C())));
+    SetVReg(A(), SafeMul(GetVReg(B()), GetVReg(C())));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void DIV_INT() REQUIRES_SHARED(Locks::mutator_lock_) {
-    bool success = DoIntDivide(shadow_frame, A(),
-                               shadow_frame.GetVReg(B()),
-                               shadow_frame.GetVReg(C()));
+    bool success = DoIntDivide(shadow_frame, A(), GetVReg(B()), GetVReg(C()));
     POSSIBLY_HANDLE_PENDING_EXCEPTION(!success, Next_2xx);
   }
 
   ALWAYS_INLINE void REM_INT() REQUIRES_SHARED(Locks::mutator_lock_) {
-    bool success = DoIntRemainder(shadow_frame, A(),
-                                  shadow_frame.GetVReg(B()),
-                                  shadow_frame.GetVReg(C()));
+    bool success = DoIntRemainder(shadow_frame, A(), GetVReg(B()), GetVReg(C()));
     POSSIBLY_HANDLE_PENDING_EXCEPTION(!success, Next_2xx);
   }
 
   ALWAYS_INLINE void SHL_INT() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVReg(A(),
-                         shadow_frame.GetVReg(B()) <<
-                         (shadow_frame.GetVReg(C()) & 0x1f));
+    SetVReg(A(), GetVReg(B()) << (GetVReg(C()) & 0x1f));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void SHR_INT() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVReg(A(),
-                         shadow_frame.GetVReg(B()) >>
-                         (shadow_frame.GetVReg(C()) & 0x1f));
+    SetVReg(A(), GetVReg(B()) >> (GetVReg(C()) & 0x1f));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void USHR_INT() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVReg(A(),
-                         static_cast<uint32_t>(shadow_frame.GetVReg(B())) >>
-                         (shadow_frame.GetVReg(C()) & 0x1f));
+    SetVReg(A(), static_cast<uint32_t>(GetVReg(B())) >> (GetVReg(C()) & 0x1f));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void AND_INT() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVReg(A(),
-                         shadow_frame.GetVReg(B()) &
-                         shadow_frame.GetVReg(C()));
+    SetVReg(A(), GetVReg(B()) & GetVReg(C()));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void OR_INT() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVReg(A(),
-                         shadow_frame.GetVReg(B()) |
-                         shadow_frame.GetVReg(C()));
+    SetVReg(A(), GetVReg(B()) | GetVReg(C()));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void XOR_INT() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVReg(A(),
-                         shadow_frame.GetVReg(B()) ^
-                         shadow_frame.GetVReg(C()));
+    SetVReg(A(), GetVReg(B()) ^ GetVReg(C()));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void ADD_LONG() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegLong(A(),
-                             SafeAdd(shadow_frame.GetVRegLong(B()),
-                                     shadow_frame.GetVRegLong(C())));
+    SetVRegLong(A(), SafeAdd(GetVRegLong(B()), GetVRegLong(C())));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void SUB_LONG() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegLong(A(),
-                             SafeSub(shadow_frame.GetVRegLong(B()),
-                                     shadow_frame.GetVRegLong(C())));
+    SetVRegLong(A(), SafeSub(GetVRegLong(B()), GetVRegLong(C())));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void MUL_LONG() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegLong(A(),
-                             SafeMul(shadow_frame.GetVRegLong(B()),
-                                     shadow_frame.GetVRegLong(C())));
+    SetVRegLong(A(), SafeMul(GetVRegLong(B()), GetVRegLong(C())));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void DIV_LONG() REQUIRES_SHARED(Locks::mutator_lock_) {
-    DoLongDivide(shadow_frame, A(),
-                 shadow_frame.GetVRegLong(B()),
-                 shadow_frame.GetVRegLong(C()));
+    DoLongDivide(shadow_frame, A(), GetVRegLong(B()), GetVRegLong(C()));
     POSSIBLY_HANDLE_PENDING_EXCEPTION(self->IsExceptionPending(), Next_2xx);
   }
 
   ALWAYS_INLINE void REM_LONG() REQUIRES_SHARED(Locks::mutator_lock_) {
-    DoLongRemainder(shadow_frame, A(),
-                    shadow_frame.GetVRegLong(B()),
-                    shadow_frame.GetVRegLong(C()));
+    DoLongRemainder(shadow_frame, A(), GetVRegLong(B()), GetVRegLong(C()));
     POSSIBLY_HANDLE_PENDING_EXCEPTION(self->IsExceptionPending(), Next_2xx);
   }
 
   ALWAYS_INLINE void AND_LONG() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegLong(A(),
-                             shadow_frame.GetVRegLong(B()) &
-                             shadow_frame.GetVRegLong(C()));
+    SetVRegLong(A(), GetVRegLong(B()) & GetVRegLong(C()));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void OR_LONG() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegLong(A(),
-                             shadow_frame.GetVRegLong(B()) |
-                             shadow_frame.GetVRegLong(C()));
+    SetVRegLong(A(), GetVRegLong(B()) | GetVRegLong(C()));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void XOR_LONG() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegLong(A(),
-                             shadow_frame.GetVRegLong(B()) ^
-                             shadow_frame.GetVRegLong(C()));
+    SetVRegLong(A(), GetVRegLong(B()) ^ GetVRegLong(C()));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void SHL_LONG() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegLong(A(),
-                             shadow_frame.GetVRegLong(B()) <<
-                             (shadow_frame.GetVReg(C()) & 0x3f));
+    SetVRegLong(A(), GetVRegLong(B()) << (GetVReg(C()) & 0x3f));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void SHR_LONG() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegLong(A(),
-                             shadow_frame.GetVRegLong(B()) >>
-                             (shadow_frame.GetVReg(C()) & 0x3f));
+    SetVRegLong(A(), GetVRegLong(B()) >> (GetVReg(C()) & 0x3f));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void USHR_LONG() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegLong(A(),
-                             static_cast<uint64_t>(shadow_frame.GetVRegLong(B())) >>
-                             (shadow_frame.GetVReg(C()) & 0x3f));
+    SetVRegLong(A(), static_cast<uint64_t>(GetVRegLong(B())) >> (GetVReg(C()) & 0x3f));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void ADD_FLOAT() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegFloat(A(),
-                              shadow_frame.GetVRegFloat(B()) +
-                              shadow_frame.GetVRegFloat(C()));
+    SetVRegFloat(A(), GetVRegFloat(B()) + GetVRegFloat(C()));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void SUB_FLOAT() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegFloat(A(),
-                              shadow_frame.GetVRegFloat(B()) -
-                              shadow_frame.GetVRegFloat(C()));
+    SetVRegFloat(A(), GetVRegFloat(B()) - GetVRegFloat(C()));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void MUL_FLOAT() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegFloat(A(),
-                              shadow_frame.GetVRegFloat(B()) *
-                              shadow_frame.GetVRegFloat(C()));
+    SetVRegFloat(A(), GetVRegFloat(B()) * GetVRegFloat(C()));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void DIV_FLOAT() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegFloat(A(),
-                              shadow_frame.GetVRegFloat(B()) /
-                              shadow_frame.GetVRegFloat(C()));
+    SetVRegFloat(A(), GetVRegFloat(B()) / GetVRegFloat(C()));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void REM_FLOAT() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegFloat(A(),
-                              fmodf(shadow_frame.GetVRegFloat(B()),
-                                    shadow_frame.GetVRegFloat(C())));
+    SetVRegFloat(A(), fmodf(GetVRegFloat(B()), GetVRegFloat(C())));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void ADD_DOUBLE() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegDouble(A(),
-                               shadow_frame.GetVRegDouble(B()) +
-                               shadow_frame.GetVRegDouble(C()));
+    SetVRegDouble(A(), GetVRegDouble(B()) + GetVRegDouble(C()));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void SUB_DOUBLE() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegDouble(A(),
-                               shadow_frame.GetVRegDouble(B()) -
-                               shadow_frame.GetVRegDouble(C()));
+    SetVRegDouble(A(), GetVRegDouble(B()) - GetVRegDouble(C()));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void MUL_DOUBLE() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegDouble(A(),
-                               shadow_frame.GetVRegDouble(B()) *
-                               shadow_frame.GetVRegDouble(C()));
+    SetVRegDouble(A(), GetVRegDouble(B()) * GetVRegDouble(C()));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void DIV_DOUBLE() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegDouble(A(),
-                               shadow_frame.GetVRegDouble(B()) /
-                               shadow_frame.GetVRegDouble(C()));
+    SetVRegDouble(A(), GetVRegDouble(B()) / GetVRegDouble(C()));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void REM_DOUBLE() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVRegDouble(A(),
-                               fmod(shadow_frame.GetVRegDouble(B()),
-                                    shadow_frame.GetVRegDouble(C())));
+    SetVRegDouble(A(), fmod(GetVRegDouble(B()), GetVRegDouble(C())));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void ADD_INT_2ADDR() REQUIRES_SHARED(Locks::mutator_lock_) {
     uint4_t vregA = A();
-    shadow_frame.SetVReg(vregA, SafeAdd(shadow_frame.GetVReg(vregA),
-                                        shadow_frame.GetVReg(B())));
+    SetVReg(vregA, SafeAdd(GetVReg(vregA), GetVReg(B())));
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void SUB_INT_2ADDR() REQUIRES_SHARED(Locks::mutator_lock_) {
     uint4_t vregA = A();
-    shadow_frame.SetVReg(vregA,
-                         SafeSub(shadow_frame.GetVReg(vregA),
-                                 shadow_frame.GetVReg(B())));
+    SetVReg(vregA, SafeSub(GetVReg(vregA), GetVReg(B())));
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void MUL_INT_2ADDR() REQUIRES_SHARED(Locks::mutator_lock_) {
     uint4_t vregA = A();
-    shadow_frame.SetVReg(vregA,
-                         SafeMul(shadow_frame.GetVReg(vregA),
-                                 shadow_frame.GetVReg(B())));
+    SetVReg(vregA, SafeMul(GetVReg(vregA), GetVReg(B())));
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void DIV_INT_2ADDR() REQUIRES_SHARED(Locks::mutator_lock_) {
     uint4_t vregA = A();
-    bool success = DoIntDivide(shadow_frame, vregA, shadow_frame.GetVReg(vregA),
-                               shadow_frame.GetVReg(B()));
+    bool success = DoIntDivide(shadow_frame, vregA, GetVReg(vregA), GetVReg(B()));
     POSSIBLY_HANDLE_PENDING_EXCEPTION(!success, Next_1xx);
   }
 
   ALWAYS_INLINE void REM_INT_2ADDR() REQUIRES_SHARED(Locks::mutator_lock_) {
     uint4_t vregA = A();
-    bool success = DoIntRemainder(shadow_frame, vregA, shadow_frame.GetVReg(vregA),
-                                  shadow_frame.GetVReg(B()));
+    bool success = DoIntRemainder(shadow_frame, vregA, GetVReg(vregA), GetVReg(B()));
     POSSIBLY_HANDLE_PENDING_EXCEPTION(!success, Next_1xx);
   }
 
   ALWAYS_INLINE void SHL_INT_2ADDR() REQUIRES_SHARED(Locks::mutator_lock_) {
     uint4_t vregA = A();
-    shadow_frame.SetVReg(vregA,
-                         shadow_frame.GetVReg(vregA) <<
-                         (shadow_frame.GetVReg(B()) & 0x1f));
+    SetVReg(vregA, GetVReg(vregA) << (GetVReg(B()) & 0x1f));
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void SHR_INT_2ADDR() REQUIRES_SHARED(Locks::mutator_lock_) {
     uint4_t vregA = A();
-    shadow_frame.SetVReg(vregA,
-                         shadow_frame.GetVReg(vregA) >>
-                         (shadow_frame.GetVReg(B()) & 0x1f));
+    SetVReg(vregA, GetVReg(vregA) >> (GetVReg(B()) & 0x1f));
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void USHR_INT_2ADDR() REQUIRES_SHARED(Locks::mutator_lock_) {
     uint4_t vregA = A();
-    shadow_frame.SetVReg(vregA,
-                         static_cast<uint32_t>(shadow_frame.GetVReg(vregA)) >>
-                         (shadow_frame.GetVReg(B()) & 0x1f));
+    SetVReg(vregA, static_cast<uint32_t>(GetVReg(vregA)) >> (GetVReg(B()) & 0x1f));
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void AND_INT_2ADDR() REQUIRES_SHARED(Locks::mutator_lock_) {
     uint4_t vregA = A();
-    shadow_frame.SetVReg(vregA,
-                         shadow_frame.GetVReg(vregA) &
-                         shadow_frame.GetVReg(B()));
+    SetVReg(vregA, GetVReg(vregA) & GetVReg(B()));
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void OR_INT_2ADDR() REQUIRES_SHARED(Locks::mutator_lock_) {
     uint4_t vregA = A();
-    shadow_frame.SetVReg(vregA,
-                         shadow_frame.GetVReg(vregA) |
-                         shadow_frame.GetVReg(B()));
+    SetVReg(vregA, GetVReg(vregA) | GetVReg(B()));
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void XOR_INT_2ADDR() REQUIRES_SHARED(Locks::mutator_lock_) {
     uint4_t vregA = A();
-    shadow_frame.SetVReg(vregA,
-                         shadow_frame.GetVReg(vregA) ^
-                         shadow_frame.GetVReg(B()));
+    SetVReg(vregA, GetVReg(vregA) ^ GetVReg(B()));
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void ADD_LONG_2ADDR() REQUIRES_SHARED(Locks::mutator_lock_) {
     uint4_t vregA = A();
-    shadow_frame.SetVRegLong(vregA,
-                             SafeAdd(shadow_frame.GetVRegLong(vregA),
-                                     shadow_frame.GetVRegLong(B())));
+    SetVRegLong(vregA, SafeAdd(GetVRegLong(vregA), GetVRegLong(B())));
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void SUB_LONG_2ADDR() REQUIRES_SHARED(Locks::mutator_lock_) {
     uint4_t vregA = A();
-    shadow_frame.SetVRegLong(vregA,
-                             SafeSub(shadow_frame.GetVRegLong(vregA),
-                                     shadow_frame.GetVRegLong(B())));
+    SetVRegLong(vregA, SafeSub(GetVRegLong(vregA), GetVRegLong(B())));
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void MUL_LONG_2ADDR() REQUIRES_SHARED(Locks::mutator_lock_) {
     uint4_t vregA = A();
-    shadow_frame.SetVRegLong(vregA,
-                             SafeMul(shadow_frame.GetVRegLong(vregA),
-                                     shadow_frame.GetVRegLong(B())));
+    SetVRegLong(vregA, SafeMul(GetVRegLong(vregA), GetVRegLong(B())));
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void DIV_LONG_2ADDR() REQUIRES_SHARED(Locks::mutator_lock_) {
     uint4_t vregA = A();
-    DoLongDivide(shadow_frame, vregA, shadow_frame.GetVRegLong(vregA),
-                shadow_frame.GetVRegLong(B()));
+    DoLongDivide(shadow_frame, vregA, GetVRegLong(vregA), GetVRegLong(B()));
     POSSIBLY_HANDLE_PENDING_EXCEPTION(self->IsExceptionPending(), Next_1xx);
   }
 
   ALWAYS_INLINE void REM_LONG_2ADDR() REQUIRES_SHARED(Locks::mutator_lock_) {
     uint4_t vregA = A();
-    DoLongRemainder(shadow_frame, vregA, shadow_frame.GetVRegLong(vregA),
-                    shadow_frame.GetVRegLong(B()));
+    DoLongRemainder(shadow_frame, vregA, GetVRegLong(vregA), GetVRegLong(B()));
     POSSIBLY_HANDLE_PENDING_EXCEPTION(self->IsExceptionPending(), Next_1xx);
   }
 
   ALWAYS_INLINE void AND_LONG_2ADDR() REQUIRES_SHARED(Locks::mutator_lock_) {
     uint4_t vregA = A();
-    shadow_frame.SetVRegLong(vregA,
-                             shadow_frame.GetVRegLong(vregA) &
-                             shadow_frame.GetVRegLong(B()));
+    SetVRegLong(vregA, GetVRegLong(vregA) & GetVRegLong(B()));
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void OR_LONG_2ADDR() REQUIRES_SHARED(Locks::mutator_lock_) {
     uint4_t vregA = A();
-    shadow_frame.SetVRegLong(vregA,
-                             shadow_frame.GetVRegLong(vregA) |
-                             shadow_frame.GetVRegLong(B()));
+    SetVRegLong(vregA, GetVRegLong(vregA) | GetVRegLong(B()));
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void XOR_LONG_2ADDR() REQUIRES_SHARED(Locks::mutator_lock_) {
     uint4_t vregA = A();
-    shadow_frame.SetVRegLong(vregA,
-                             shadow_frame.GetVRegLong(vregA) ^
-                             shadow_frame.GetVRegLong(B()));
+    SetVRegLong(vregA, GetVRegLong(vregA) ^ GetVRegLong(B()));
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void SHL_LONG_2ADDR() REQUIRES_SHARED(Locks::mutator_lock_) {
     uint4_t vregA = A();
-    shadow_frame.SetVRegLong(vregA,
-                             shadow_frame.GetVRegLong(vregA) <<
-                             (shadow_frame.GetVReg(B()) & 0x3f));
+    SetVRegLong(vregA, GetVRegLong(vregA) << (GetVReg(B()) & 0x3f));
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void SHR_LONG_2ADDR() REQUIRES_SHARED(Locks::mutator_lock_) {
     uint4_t vregA = A();
-    shadow_frame.SetVRegLong(vregA,
-                             shadow_frame.GetVRegLong(vregA) >>
-                             (shadow_frame.GetVReg(B()) & 0x3f));
+    SetVRegLong(vregA, GetVRegLong(vregA) >> (GetVReg(B()) & 0x3f));
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void USHR_LONG_2ADDR() REQUIRES_SHARED(Locks::mutator_lock_) {
     uint4_t vregA = A();
-    shadow_frame.SetVRegLong(vregA,
-                             static_cast<uint64_t>(shadow_frame.GetVRegLong(vregA)) >>
-                             (shadow_frame.GetVReg(B()) & 0x3f));
+    SetVRegLong(vregA, static_cast<uint64_t>(GetVRegLong(vregA)) >> (GetVReg(B()) & 0x3f));
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void ADD_FLOAT_2ADDR() REQUIRES_SHARED(Locks::mutator_lock_) {
     uint4_t vregA = A();
-    shadow_frame.SetVRegFloat(vregA,
-                              shadow_frame.GetVRegFloat(vregA) +
-                              shadow_frame.GetVRegFloat(B()));
+    SetVRegFloat(vregA, GetVRegFloat(vregA) + GetVRegFloat(B()));
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void SUB_FLOAT_2ADDR() REQUIRES_SHARED(Locks::mutator_lock_) {
     uint4_t vregA = A();
-    shadow_frame.SetVRegFloat(vregA,
-                              shadow_frame.GetVRegFloat(vregA) -
-                              shadow_frame.GetVRegFloat(B()));
+    SetVRegFloat(vregA, GetVRegFloat(vregA) - GetVRegFloat(B()));
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void MUL_FLOAT_2ADDR() REQUIRES_SHARED(Locks::mutator_lock_) {
     uint4_t vregA = A();
-    shadow_frame.SetVRegFloat(vregA,
-                              shadow_frame.GetVRegFloat(vregA) *
-                              shadow_frame.GetVRegFloat(B()));
+    SetVRegFloat(vregA, GetVRegFloat(vregA) * GetVRegFloat(B()));
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void DIV_FLOAT_2ADDR() REQUIRES_SHARED(Locks::mutator_lock_) {
     uint4_t vregA = A();
-    shadow_frame.SetVRegFloat(vregA,
-                              shadow_frame.GetVRegFloat(vregA) /
-                              shadow_frame.GetVRegFloat(B()));
+    SetVRegFloat(vregA, GetVRegFloat(vregA) / GetVRegFloat(B()));
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void REM_FLOAT_2ADDR() REQUIRES_SHARED(Locks::mutator_lock_) {
     uint4_t vregA = A();
-    shadow_frame.SetVRegFloat(vregA,
-                              fmodf(shadow_frame.GetVRegFloat(vregA),
-                                    shadow_frame.GetVRegFloat(B())));
+    SetVRegFloat(vregA, fmodf(GetVRegFloat(vregA), GetVRegFloat(B())));
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void ADD_DOUBLE_2ADDR() REQUIRES_SHARED(Locks::mutator_lock_) {
     uint4_t vregA = A();
-    shadow_frame.SetVRegDouble(vregA,
-                               shadow_frame.GetVRegDouble(vregA) +
-                               shadow_frame.GetVRegDouble(B()));
+    SetVRegDouble(vregA, GetVRegDouble(vregA) + GetVRegDouble(B()));
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void SUB_DOUBLE_2ADDR() REQUIRES_SHARED(Locks::mutator_lock_) {
     uint4_t vregA = A();
-    shadow_frame.SetVRegDouble(vregA,
-                               shadow_frame.GetVRegDouble(vregA) -
-                               shadow_frame.GetVRegDouble(B()));
+    SetVRegDouble(vregA, GetVRegDouble(vregA) - GetVRegDouble(B()));
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void MUL_DOUBLE_2ADDR() REQUIRES_SHARED(Locks::mutator_lock_) {
     uint4_t vregA = A();
-    shadow_frame.SetVRegDouble(vregA,
-                               shadow_frame.GetVRegDouble(vregA) *
-                               shadow_frame.GetVRegDouble(B()));
+    SetVRegDouble(vregA, GetVRegDouble(vregA) * GetVRegDouble(B()));
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void DIV_DOUBLE_2ADDR() REQUIRES_SHARED(Locks::mutator_lock_) {
     uint4_t vregA = A();
-    shadow_frame.SetVRegDouble(vregA,
-                               shadow_frame.GetVRegDouble(vregA) /
-                               shadow_frame.GetVRegDouble(B()));
+    SetVRegDouble(vregA, GetVRegDouble(vregA) / GetVRegDouble(B()));
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void REM_DOUBLE_2ADDR() REQUIRES_SHARED(Locks::mutator_lock_) {
     uint4_t vregA = A();
-    shadow_frame.SetVRegDouble(vregA,
-                               fmod(shadow_frame.GetVRegDouble(vregA),
-                                    shadow_frame.GetVRegDouble(B())));
+    SetVRegDouble(vregA, fmod(GetVRegDouble(vregA), GetVRegDouble(B())));
     inst = inst->Next_1xx();
   }
 
   ALWAYS_INLINE void ADD_INT_LIT16() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVReg(A(),
-                         SafeAdd(shadow_frame.GetVReg(B()),
-                                 C()));
+    SetVReg(A(), SafeAdd(GetVReg(B()), C()));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void RSUB_INT() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVReg(A(),
-                         SafeSub(C(),
-                                 shadow_frame.GetVReg(B())));
+    SetVReg(A(), SafeSub(C(), GetVReg(B())));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void MUL_INT_LIT16() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVReg(A(),
-                         SafeMul(shadow_frame.GetVReg(B()),
-                                 C()));
+    SetVReg(A(), SafeMul(GetVReg(B()), C()));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void DIV_INT_LIT16() REQUIRES_SHARED(Locks::mutator_lock_) {
-    bool success = DoIntDivide(shadow_frame, A(),
-                               shadow_frame.GetVReg(B()),
-                               C());
+    bool success = DoIntDivide(shadow_frame, A(), GetVReg(B()), C());
     POSSIBLY_HANDLE_PENDING_EXCEPTION(!success, Next_2xx);
   }
 
   ALWAYS_INLINE void REM_INT_LIT16() REQUIRES_SHARED(Locks::mutator_lock_) {
-    bool success = DoIntRemainder(shadow_frame, A(),
-                                  shadow_frame.GetVReg(B()),
-                                  C());
+    bool success = DoIntRemainder(shadow_frame, A(), GetVReg(B()), C());
     POSSIBLY_HANDLE_PENDING_EXCEPTION(!success, Next_2xx);
   }
 
   ALWAYS_INLINE void AND_INT_LIT16() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVReg(A(),
-                         shadow_frame.GetVReg(B()) &
-                         C());
+    SetVReg(A(), GetVReg(B()) & C());
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void OR_INT_LIT16() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVReg(A(),
-                         shadow_frame.GetVReg(B()) |
-                         C());
+    SetVReg(A(), GetVReg(B()) | C());
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void XOR_INT_LIT16() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVReg(A(),
-                         shadow_frame.GetVReg(B()) ^
-                         C());
+    SetVReg(A(), GetVReg(B()) ^ C());
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void ADD_INT_LIT8() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVReg(A(),
-                         SafeAdd(shadow_frame.GetVReg(B()), C()));
+    SetVReg(A(), SafeAdd(GetVReg(B()), C()));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void RSUB_INT_LIT8() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVReg(A(),
-                         SafeSub(C(), shadow_frame.GetVReg(B())));
+    SetVReg(A(), SafeSub(C(), GetVReg(B())));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void MUL_INT_LIT8() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVReg(A(),
-                         SafeMul(shadow_frame.GetVReg(B()), C()));
+    SetVReg(A(), SafeMul(GetVReg(B()), C()));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void DIV_INT_LIT8() REQUIRES_SHARED(Locks::mutator_lock_) {
-    bool success = DoIntDivide(shadow_frame, A(),
-                               shadow_frame.GetVReg(B()), C());
+    bool success = DoIntDivide(shadow_frame, A(), GetVReg(B()), C());
     POSSIBLY_HANDLE_PENDING_EXCEPTION(!success, Next_2xx);
   }
 
   ALWAYS_INLINE void REM_INT_LIT8() REQUIRES_SHARED(Locks::mutator_lock_) {
-    bool success = DoIntRemainder(shadow_frame, A(),
-                                  shadow_frame.GetVReg(B()), C());
+    bool success = DoIntRemainder(shadow_frame, A(), GetVReg(B()), C());
     POSSIBLY_HANDLE_PENDING_EXCEPTION(!success, Next_2xx);
   }
 
   ALWAYS_INLINE void AND_INT_LIT8() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVReg(A(),
-                         shadow_frame.GetVReg(B()) &
-                         C());
+    SetVReg(A(), GetVReg(B()) & C());
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void OR_INT_LIT8() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVReg(A(),
-                         shadow_frame.GetVReg(B()) |
-                         C());
+    SetVReg(A(), GetVReg(B()) | C());
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void XOR_INT_LIT8() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVReg(A(),
-                         shadow_frame.GetVReg(B()) ^
-                         C());
+    SetVReg(A(), GetVReg(B()) ^ C());
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void SHL_INT_LIT8() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVReg(A(),
-                         shadow_frame.GetVReg(B()) <<
-                         (C() & 0x1f));
+    SetVReg(A(), GetVReg(B()) << (C() & 0x1f));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void SHR_INT_LIT8() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVReg(A(),
-                         shadow_frame.GetVReg(B()) >>
-                         (C() & 0x1f));
+    SetVReg(A(), GetVReg(B()) >> (C() & 0x1f));
     inst = inst->Next_2xx();
   }
 
   ALWAYS_INLINE void USHR_INT_LIT8() REQUIRES_SHARED(Locks::mutator_lock_) {
-    shadow_frame.SetVReg(A(),
-                         static_cast<uint32_t>(shadow_frame.GetVReg(B())) >>
-                         (C() & 0x1f));
+    SetVReg(A(), static_cast<uint32_t>(GetVReg(B())) >> (C() & 0x1f));
     inst = inst->Next_2xx();
   }
 
@@ -2603,6 +2405,23 @@
   ALWAYS_INLINE int32_t B() { return inst->VRegB(kFormat, inst_data); }
   ALWAYS_INLINE int32_t C() { return inst->VRegC(kFormat); }
 
+  int32_t GetVReg(size_t i) const { return shadow_frame.GetVReg(i); }
+  int64_t GetVRegLong(size_t i) const { return shadow_frame.GetVRegLong(i); }
+  float GetVRegFloat(size_t i) const { return shadow_frame.GetVRegFloat(i); }
+  double GetVRegDouble(size_t i) const { return shadow_frame.GetVRegDouble(i); }
+  ObjPtr<mirror::Object> GetVRegReference(size_t i) const REQUIRES_SHARED(Locks::mutator_lock_) {
+    return shadow_frame.GetVRegReference(i);
+  }
+
+  void SetVReg(size_t i, int32_t val) { shadow_frame.SetVReg(i, val); }
+  void SetVRegLong(size_t i, int64_t val) { shadow_frame.SetVRegLong(i, val); }
+  void SetVRegFloat(size_t i, float val) { shadow_frame.SetVRegFloat(i, val); }
+  void SetVRegDouble(size_t i, double val) { shadow_frame.SetVRegDouble(i, val); }
+  void SetVRegReference(size_t i, ObjPtr<mirror::Object> val)
+      REQUIRES_SHARED(Locks::mutator_lock_) {
+    shadow_frame.SetVRegReference(i, val);
+  }
+
   SwitchImplContext* const ctx;
   const instrumentation::Instrumentation* const instrumentation;
   Thread* const self;