Remove quickened bytecode support from interpreters.

We no longer generate them, so mark them as unused.

Bug: 170086509
Test: m test-art-host-gtest
Test: test.py -r -b --host
Change-Id: I71f81e5923f745b8f6efa80db16e978635ed65c4
diff --git a/runtime/interpreter/interpreter_common.h b/runtime/interpreter/interpreter_common.h
index ad6ceae..65bff8e 100644
--- a/runtime/interpreter/interpreter_common.h
+++ b/runtime/interpreter/interpreter_common.h
@@ -228,7 +228,7 @@
 
 // Handles all invoke-XXX/range instructions except for invoke-polymorphic[/range].
 // Returns true on success, otherwise throws an exception and returns false.
-template<InvokeType type, bool is_range, bool do_access_check, bool is_mterp, bool is_quick = false>
+template<InvokeType type, bool is_range, bool do_access_check, bool is_mterp>
 static ALWAYS_INLINE bool DoInvoke(Thread* self,
                                    ShadowFrame& shadow_frame,
                                    const Instruction* inst,
@@ -250,9 +250,7 @@
   InterpreterCache* tls_cache = self->GetInterpreterCache();
   size_t tls_value;
   ArtMethod* resolved_method;
-  if (is_quick) {
-    resolved_method = nullptr;  // We don't know/care what the original method was.
-  } else if (!IsNterpSupported() && LIKELY(tls_cache->Get(inst, &tls_value))) {
+  if (!IsNterpSupported() && LIKELY(tls_cache->Get(inst, &tls_value))) {
     resolved_method = reinterpret_cast<ArtMethod*>(tls_value);
   } else {
     ClassLinker* const class_linker = Runtime::Current()->GetClassLinker();
@@ -274,19 +272,8 @@
   ObjPtr<mirror::Object> receiver =
       (type == kStatic) ? nullptr : shadow_frame.GetVRegReference(vregC);
   ArtMethod* called_method;
-  if (is_quick) {
-    if (UNLIKELY(receiver == nullptr)) {
-      // We lost the reference to the method index so we cannot get a more precise exception.
-      ThrowNullPointerExceptionFromDexPC();
-      return false;
-    }
-    DCHECK(receiver->GetClass()->ShouldHaveEmbeddedVTable());
-    called_method = receiver->GetClass()->GetEmbeddedVTableEntry(
-        /*vtable_idx=*/ method_idx, Runtime::Current()->GetClassLinker()->GetImagePointerSize());
-  } else {
-    called_method = FindMethodToCall<type, do_access_check>(
-        method_idx, resolved_method, &receiver, sf_method, self);
-  }
+  called_method = FindMethodToCall<type, do_access_check>(
+      method_idx, resolved_method, &receiver, sf_method, self);
   if (UNLIKELY(called_method == nullptr)) {
     CHECK(self->IsExceptionPending());
     result->SetJ(0);
@@ -566,71 +553,6 @@
   return true;
 }
 
-// Handles iget-quick, iget-wide-quick and iget-object-quick instructions.
-// Returns true on success, otherwise throws an exception and returns false.
-template<Primitive::Type field_type>
-ALWAYS_INLINE bool DoIGetQuick(ShadowFrame& shadow_frame, const Instruction* inst,
-                               uint16_t inst_data) REQUIRES_SHARED(Locks::mutator_lock_) {
-  ObjPtr<mirror::Object> obj = shadow_frame.GetVRegReference(inst->VRegB_22c(inst_data));
-  if (UNLIKELY(obj == nullptr)) {
-    // We lost the reference to the field index so we cannot get a more
-    // precised exception message.
-    ThrowNullPointerExceptionFromDexPC();
-    return false;
-  }
-  MemberOffset field_offset(inst->VRegC_22c());
-  // Report this field access to instrumentation if needed. Since we only have the offset of
-  // the field from the base of the object, we need to look for it first.
-  instrumentation::Instrumentation* instrumentation = Runtime::Current()->GetInstrumentation();
-  if (UNLIKELY(instrumentation->HasFieldReadListeners())) {
-    ArtField* f = ArtField::FindInstanceFieldWithOffset(obj->GetClass(),
-                                                        field_offset.Uint32Value());
-    DCHECK(f != nullptr);
-    DCHECK(!f->IsStatic());
-    Thread* self = Thread::Current();
-    StackHandleScope<1> hs(self);
-    // Save obj in case the instrumentation event has thread suspension.
-    HandleWrapperObjPtr<mirror::Object> h = hs.NewHandleWrapper(&obj);
-    instrumentation->FieldReadEvent(self,
-                                    obj,
-                                    shadow_frame.GetMethod(),
-                                    shadow_frame.GetDexPC(),
-                                    f);
-    if (UNLIKELY(self->IsExceptionPending())) {
-      return false;
-    }
-  }
-  // Note: iget-x-quick instructions are only for non-volatile fields.
-  const uint32_t vregA = inst->VRegA_22c(inst_data);
-  switch (field_type) {
-    case Primitive::kPrimInt:
-      shadow_frame.SetVReg(vregA, static_cast<int32_t>(obj->GetField32(field_offset)));
-      break;
-    case Primitive::kPrimBoolean:
-      shadow_frame.SetVReg(vregA, static_cast<int32_t>(obj->GetFieldBoolean(field_offset)));
-      break;
-    case Primitive::kPrimByte:
-      shadow_frame.SetVReg(vregA, static_cast<int32_t>(obj->GetFieldByte(field_offset)));
-      break;
-    case Primitive::kPrimChar:
-      shadow_frame.SetVReg(vregA, static_cast<int32_t>(obj->GetFieldChar(field_offset)));
-      break;
-    case Primitive::kPrimShort:
-      shadow_frame.SetVReg(vregA, static_cast<int32_t>(obj->GetFieldShort(field_offset)));
-      break;
-    case Primitive::kPrimLong:
-      shadow_frame.SetVRegLong(vregA, static_cast<int64_t>(obj->GetField64(field_offset)));
-      break;
-    case Primitive::kPrimNot:
-      shadow_frame.SetVRegReference(vregA, obj->GetFieldObject<mirror::Object>(field_offset));
-      break;
-    default:
-      LOG(FATAL) << "Unreachable: " << field_type;
-      UNREACHABLE();
-  }
-  return true;
-}
-
 static inline bool CheckWriteConstraint(Thread* self, ObjPtr<mirror::Object> obj)
     REQUIRES_SHARED(Locks::mutator_lock_) {
   Runtime* runtime = Runtime::Current();
@@ -706,81 +628,6 @@
                                                                                   value);
 }
 
-// Handles iput-quick, iput-wide-quick and iput-object-quick instructions.
-// Returns true on success, otherwise throws an exception and returns false.
-template<Primitive::Type field_type, bool transaction_active>
-ALWAYS_INLINE bool DoIPutQuick(const ShadowFrame& shadow_frame, const Instruction* inst,
-                               uint16_t inst_data) REQUIRES_SHARED(Locks::mutator_lock_) {
-  ObjPtr<mirror::Object> obj = shadow_frame.GetVRegReference(inst->VRegB_22c(inst_data));
-  if (UNLIKELY(obj == nullptr)) {
-    // We lost the reference to the field index so we cannot get a more
-    // precised exception message.
-    ThrowNullPointerExceptionFromDexPC();
-    return false;
-  }
-  MemberOffset field_offset(inst->VRegC_22c());
-  const uint32_t vregA = inst->VRegA_22c(inst_data);
-  // Report this field modification to instrumentation if needed. Since we only have the offset of
-  // the field from the base of the object, we need to look for it first.
-  instrumentation::Instrumentation* instrumentation = Runtime::Current()->GetInstrumentation();
-  if (UNLIKELY(instrumentation->HasFieldWriteListeners())) {
-    ArtField* f = ArtField::FindInstanceFieldWithOffset(obj->GetClass(),
-                                                        field_offset.Uint32Value());
-    DCHECK(f != nullptr);
-    DCHECK(!f->IsStatic());
-    JValue field_value = GetFieldValue<field_type>(shadow_frame, vregA);
-    Thread* self = Thread::Current();
-    StackHandleScope<2> hs(self);
-    // Save obj in case the instrumentation event has thread suspension.
-    HandleWrapperObjPtr<mirror::Object> h = hs.NewHandleWrapper(&obj);
-    mirror::Object* fake_root = nullptr;
-    HandleWrapper<mirror::Object> ret(hs.NewHandleWrapper<mirror::Object>(
-        field_type == Primitive::kPrimNot ? field_value.GetGCRoot() : &fake_root));
-    instrumentation->FieldWriteEvent(self,
-                                     obj,
-                                     shadow_frame.GetMethod(),
-                                     shadow_frame.GetDexPC(),
-                                     f,
-                                     field_value);
-    if (UNLIKELY(self->IsExceptionPending())) {
-      return false;
-    }
-    if (UNLIKELY(shadow_frame.GetForcePopFrame())) {
-      // Don't actually set the field. The next instruction will force us to pop.
-      DCHECK(Runtime::Current()->AreNonStandardExitsEnabled());
-      return true;
-    }
-  }
-  // Note: iput-x-quick instructions are only for non-volatile fields.
-  switch (field_type) {
-    case Primitive::kPrimBoolean:
-      obj->SetFieldBoolean<transaction_active>(field_offset, shadow_frame.GetVReg(vregA));
-      break;
-    case Primitive::kPrimByte:
-      obj->SetFieldByte<transaction_active>(field_offset, shadow_frame.GetVReg(vregA));
-      break;
-    case Primitive::kPrimChar:
-      obj->SetFieldChar<transaction_active>(field_offset, shadow_frame.GetVReg(vregA));
-      break;
-    case Primitive::kPrimShort:
-      obj->SetFieldShort<transaction_active>(field_offset, shadow_frame.GetVReg(vregA));
-      break;
-    case Primitive::kPrimInt:
-      obj->SetField32<transaction_active>(field_offset, shadow_frame.GetVReg(vregA));
-      break;
-    case Primitive::kPrimLong:
-      obj->SetField64<transaction_active>(field_offset, shadow_frame.GetVRegLong(vregA));
-      break;
-    case Primitive::kPrimNot:
-      obj->SetFieldObject<transaction_active>(field_offset, shadow_frame.GetVRegReference(vregA));
-      break;
-    default:
-      LOG(FATAL) << "Unreachable: " << field_type;
-      UNREACHABLE();
-  }
-  return true;
-}
-
 // Handles string resolution for const-string and const-string-jumbo instructions. Also ensures the
 // java.lang.String class is initialized.
 static inline ObjPtr<mirror::String> ResolveString(Thread* self,
diff --git a/runtime/interpreter/interpreter_switch_impl-inl.h b/runtime/interpreter/interpreter_switch_impl-inl.h
index 0467239..4b3f8c6 100644
--- a/runtime/interpreter/interpreter_switch_impl-inl.h
+++ b/runtime/interpreter/interpreter_switch_impl-inl.h
@@ -323,26 +323,15 @@
         Self(), shadow_frame_, inst_, inst_data_);
   }
 
-  template<Primitive::Type field_type>
-  HANDLER_ATTRIBUTES bool HandleGetQuick() {
-    return DoIGetQuick<field_type>(shadow_frame_, inst_, inst_data_);
-  }
-
   template<FindFieldType find_type, Primitive::Type field_type>
   HANDLER_ATTRIBUTES bool HandlePut() {
     return DoFieldPut<find_type, field_type, do_access_check, transaction_active>(
         Self(), shadow_frame_, inst_, inst_data_);
   }
 
-  template<Primitive::Type field_type>
-  HANDLER_ATTRIBUTES bool HandlePutQuick() {
-    return DoIPutQuick<field_type, transaction_active>(
-        shadow_frame_, inst_, inst_data_);
-  }
-
-  template<InvokeType type, bool is_range, bool is_quick = false>
+  template<InvokeType type, bool is_range>
   HANDLER_ATTRIBUTES bool HandleInvoke() {
-    bool success = DoInvoke<type, is_range, do_access_check, /*is_mterp=*/ false, is_quick>(
+    bool success = DoInvoke<type, is_range, do_access_check, /*is_mterp=*/ false>(
         Self(), shadow_frame_, inst_, inst_data_, ResultRegister());
     return PossiblyHandlePendingExceptionOnInvoke(!success);
   }
@@ -929,31 +918,31 @@
   }
 
   HANDLER_ATTRIBUTES bool IGET_QUICK() {
-    return HandleGetQuick<Primitive::kPrimInt>();
+    return HandleUnused();
   }
 
   HANDLER_ATTRIBUTES bool IGET_WIDE_QUICK() {
-    return HandleGetQuick<Primitive::kPrimLong>();
+    return HandleUnused();
   }
 
   HANDLER_ATTRIBUTES bool IGET_OBJECT_QUICK() {
-    return HandleGetQuick<Primitive::kPrimNot>();
+    return HandleUnused();
   }
 
   HANDLER_ATTRIBUTES bool IGET_BOOLEAN_QUICK() {
-    return HandleGetQuick<Primitive::kPrimBoolean>();
+    return HandleUnused();
   }
 
   HANDLER_ATTRIBUTES bool IGET_BYTE_QUICK() {
-    return HandleGetQuick<Primitive::kPrimByte>();
+    return HandleUnused();
   }
 
   HANDLER_ATTRIBUTES bool IGET_CHAR_QUICK() {
-    return HandleGetQuick<Primitive::kPrimChar>();
+    return HandleUnused();
   }
 
   HANDLER_ATTRIBUTES bool IGET_SHORT_QUICK() {
-    return HandleGetQuick<Primitive::kPrimShort>();
+    return HandleUnused();
   }
 
   HANDLER_ATTRIBUTES bool SGET_BOOLEAN() {
@@ -1013,31 +1002,31 @@
   }
 
   HANDLER_ATTRIBUTES bool IPUT_QUICK() {
-    return HandlePutQuick<Primitive::kPrimInt>();
+    return HandleUnused();
   }
 
   HANDLER_ATTRIBUTES bool IPUT_BOOLEAN_QUICK() {
-    return HandlePutQuick<Primitive::kPrimBoolean>();
+    return HandleUnused();
   }
 
   HANDLER_ATTRIBUTES bool IPUT_BYTE_QUICK() {
-    return HandlePutQuick<Primitive::kPrimByte>();
+    return HandleUnused();
   }
 
   HANDLER_ATTRIBUTES bool IPUT_CHAR_QUICK() {
-    return HandlePutQuick<Primitive::kPrimChar>();
+    return HandleUnused();
   }
 
   HANDLER_ATTRIBUTES bool IPUT_SHORT_QUICK() {
-    return HandlePutQuick<Primitive::kPrimShort>();
+    return HandleUnused();
   }
 
   HANDLER_ATTRIBUTES bool IPUT_WIDE_QUICK() {
-    return HandlePutQuick<Primitive::kPrimLong>();
+    return HandleUnused();
   }
 
   HANDLER_ATTRIBUTES bool IPUT_OBJECT_QUICK() {
-    return HandlePutQuick<Primitive::kPrimNot>();
+    return HandleUnused();
   }
 
   HANDLER_ATTRIBUTES bool SPUT_BOOLEAN() {
@@ -1109,11 +1098,11 @@
   }
 
   HANDLER_ATTRIBUTES bool INVOKE_VIRTUAL_QUICK() {
-    return HandleInvoke<kVirtual, /*is_range=*/ false, /*is_quick=*/ true>();
+    return HandleUnused();
   }
 
   HANDLER_ATTRIBUTES bool INVOKE_VIRTUAL_RANGE_QUICK() {
-    return HandleInvoke<kVirtual, /*is_range=*/ true, /*is_quick=*/ true>();
+    return HandleUnused();
   }
 
   HANDLER_ATTRIBUTES bool INVOKE_POLYMORPHIC() {
diff --git a/runtime/interpreter/mterp/arm/invoke.S b/runtime/interpreter/mterp/arm/invoke.S
index 08fd1bb..8e5ecd0 100644
--- a/runtime/interpreter/mterp/arm/invoke.S
+++ b/runtime/interpreter/mterp/arm/invoke.S
@@ -112,10 +112,10 @@
     /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */
 
 %def op_invoke_virtual_quick():
-%  invoke(helper="MterpInvokeVirtualQuick")
+%  unused()
 
 %def op_invoke_virtual_range():
 %  invoke(helper="MterpInvokeVirtualRange")
 
 %def op_invoke_virtual_range_quick():
-%  invoke(helper="MterpInvokeVirtualQuickRange")
+%  unused()
diff --git a/runtime/interpreter/mterp/arm/object.S b/runtime/interpreter/mterp/arm/object.S
index a044d91..adbd405 100644
--- a/runtime/interpreter/mterp/arm/object.S
+++ b/runtime/interpreter/mterp/arm/object.S
@@ -88,80 +88,40 @@
 %  op_iget(load="ldrb", helper="MterpIGetU8")
 
 %def op_iget_boolean_quick():
-%  op_iget_quick(load="ldrb")
+%  unused()
 
 %def op_iget_byte():
 %  op_iget(load="ldrsb", helper="MterpIGetI8")
 
 %def op_iget_byte_quick():
-%  op_iget_quick(load="ldrsb")
+%  unused()
 
 %def op_iget_char():
 %  op_iget(load="ldrh", helper="MterpIGetU16")
 
 %def op_iget_char_quick():
-%  op_iget_quick(load="ldrh")
+%  unused()
 
 %def op_iget_object():
 %  op_iget(is_object=True, helper="MterpIGetObj")
 
 %def op_iget_object_quick():
-    /* For: iget-object-quick */
-    /* op vA, vB, offset@CCCC */
-    mov     r2, rINST, lsr #12          @ r2<- B
-    FETCH r1, 1                         @ r1<- field byte offset
-    EXPORT_PC
-    GET_VREG r0, r2                     @ r0<- object we're operating on
-    bl      artIGetObjectFromMterp      @ (obj, offset)
-    ldr     r3, [rSELF, #THREAD_EXCEPTION_OFFSET]
-    ubfx    r2, rINST, #8, #4           @ r2<- A
-    PREFETCH_INST 2
-    cmp     r3, #0
-    bne     MterpPossibleException      @ bail out
-    SET_VREG_OBJECT r0, r2              @ fp[A]<- r0
-    ADVANCE 2                           @ advance rPC
-    GET_INST_OPCODE ip                  @ extract opcode from rINST
-    GOTO_OPCODE ip                      @ jump to next instruction
+%  unused()
 
 %def op_iget_quick(load="ldr"):
-    /* For: iget-quick, iget-boolean-quick, iget-byte-quick, iget-char-quick, iget-short-quick */
-    /* op vA, vB, offset@CCCC */
-    mov     r2, rINST, lsr #12          @ r2<- B
-    FETCH r1, 1                         @ r1<- field byte offset
-    GET_VREG r3, r2                     @ r3<- object we're operating on
-    ubfx    r2, rINST, #8, #4           @ r2<- A
-    cmp     r3, #0                      @ check object for null
-    beq     common_errNullObject        @ object was null
-    $load   r0, [r3, r1]                @ r0<- obj.field
-    FETCH_ADVANCE_INST 2                @ advance rPC, load rINST
-    SET_VREG r0, r2                     @ fp[A]<- r0
-    GET_INST_OPCODE ip                  @ extract opcode from rINST
-    GOTO_OPCODE ip                      @ jump to next instruction
+%  unused()
 
 %def op_iget_short():
 %  op_iget(load="ldrsh", helper="MterpIGetI16")
 
 %def op_iget_short_quick():
-%  op_iget_quick(load="ldrsh")
+%  unused()
 
 %def op_iget_wide():
 %  op_iget(is_wide=True, helper="MterpIGetU64")
 
 %def op_iget_wide_quick():
-    /* iget-wide-quick vA, vB, offset@CCCC */
-    mov     r2, rINST, lsr #12          @ r2<- B
-    FETCH ip, 1                         @ ip<- field byte offset
-    GET_VREG r3, r2                     @ r3<- object we're operating on
-    ubfx    r2, rINST, #8, #4           @ r2<- A
-    cmp     r3, #0                      @ check object for null
-    beq     common_errNullObject        @ object was null
-    ldrd    r0, [r3, ip]                @ r0<- obj.field (64 bits, aligned)
-    FETCH_ADVANCE_INST 2                @ advance rPC, load rINST
-    VREG_INDEX_TO_ADDR r3, r2           @ r3<- &fp[A]
-    CLEAR_SHADOW_PAIR r2, ip, lr        @ Zero out the shadow regs
-    GET_INST_OPCODE ip                  @ extract opcode from rINST
-    SET_VREG_WIDE_BY_ADDR r0, r1, r3    @ fp[A]<- r0/r1
-    GOTO_OPCODE ip                      @ jump to next instruction
+%  unused()
 
 %def op_instance_of():
     /*
@@ -195,73 +155,40 @@
 %  op_iput(helper="MterpIPutU8")
 
 %def op_iput_boolean_quick():
-%  op_iput_quick(store="strb")
+%  unused()
 
 %def op_iput_byte():
 %  op_iput(helper="MterpIPutI8")
 
 %def op_iput_byte_quick():
-%  op_iput_quick(store="strb")
+%  unused()
 
 %def op_iput_char():
 %  op_iput(helper="MterpIPutU16")
 
 %def op_iput_char_quick():
-%  op_iput_quick(store="strh")
+%  unused()
 
 %def op_iput_object():
 %  op_iput(helper="MterpIPutObj")
 
 %def op_iput_object_quick():
-    EXPORT_PC
-    add     r0, rFP, #OFF_FP_SHADOWFRAME
-    mov     r1, rPC
-    mov     r2, rINST
-    bl      MterpIputObjectQuick
-    cmp     r0, #0
-    beq     MterpException
-    FETCH_ADVANCE_INST 2                @ advance rPC, load rINST
-    GET_INST_OPCODE ip                  @ extract opcode from rINST
-    GOTO_OPCODE ip                      @ jump to next instruction
+%  unused()
 
 %def op_iput_quick(store="str"):
-    /* For: iput-quick, iput-object-quick */
-    /* op vA, vB, offset@CCCC */
-    mov     r2, rINST, lsr #12          @ r2<- B
-    FETCH r1, 1                         @ r1<- field byte offset
-    GET_VREG r3, r2                     @ r3<- fp[B], the object pointer
-    ubfx    r2, rINST, #8, #4           @ r2<- A
-    cmp     r3, #0                      @ check object for null
-    beq     common_errNullObject        @ object was null
-    GET_VREG r0, r2                     @ r0<- fp[A]
-    FETCH_ADVANCE_INST 2                @ advance rPC, load rINST
-    $store     r0, [r3, r1]             @ obj.field<- r0
-    GET_INST_OPCODE ip                  @ extract opcode from rINST
-    GOTO_OPCODE ip                      @ jump to next instruction
+%  unused()
 
 %def op_iput_short():
 %  op_iput(helper="MterpIPutI16")
 
 %def op_iput_short_quick():
-%  op_iput_quick(store="strh")
+%  unused()
 
 %def op_iput_wide():
 %  op_iput(helper="MterpIPutU64")
 
 %def op_iput_wide_quick():
-    /* iput-wide-quick vA, vB, offset@CCCC */
-    mov     r2, rINST, lsr #12          @ r2<- B
-    FETCH r3, 1                         @ r3<- field byte offset
-    GET_VREG r2, r2                     @ r2<- fp[B], the object pointer
-    ubfx    r0, rINST, #8, #4           @ r0<- A
-    cmp     r2, #0                      @ check object for null
-    beq     common_errNullObject        @ object was null
-    VREG_INDEX_TO_ADDR r0, r0           @ r0<- &fp[A]
-    GET_VREG_WIDE_BY_ADDR r0, r1, r0    @ r0/r1<- fp[A]/fp[A+1]
-    FETCH_ADVANCE_INST 2                @ advance rPC, load rINST
-    strd    r0, [r2, r3]                @ obj.field<- r0/r1
-    GET_INST_OPCODE ip                  @ extract opcode from rINST
-    GOTO_OPCODE ip                      @ jump to next instruction
+%  unused()
 
 %def op_new_instance():
     /*
diff --git a/runtime/interpreter/mterp/arm64/invoke.S b/runtime/interpreter/mterp/arm64/invoke.S
index 4844213..2348608 100644
--- a/runtime/interpreter/mterp/arm64/invoke.S
+++ b/runtime/interpreter/mterp/arm64/invoke.S
@@ -101,10 +101,10 @@
     /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */
 
 %def op_invoke_virtual_quick():
-%  invoke(helper="MterpInvokeVirtualQuick")
+%  unused()
 
 %def op_invoke_virtual_range():
 %  invoke(helper="MterpInvokeVirtualRange")
 
 %def op_invoke_virtual_range_quick():
-%  invoke(helper="MterpInvokeVirtualQuickRange")
+%  unused()
diff --git a/runtime/interpreter/mterp/arm64/object.S b/runtime/interpreter/mterp/arm64/object.S
index 3cc688e..73ce5e0 100644
--- a/runtime/interpreter/mterp/arm64/object.S
+++ b/runtime/interpreter/mterp/arm64/object.S
@@ -84,76 +84,40 @@
 %  op_iget(load="ldrb", helper="MterpIGetU8")
 
 %def op_iget_boolean_quick():
-%  op_iget_quick(load="ldrb")
+%  unused()
 
 %def op_iget_byte():
 %  op_iget(load="ldrsb", helper="MterpIGetI8")
 
 %def op_iget_byte_quick():
-%  op_iget_quick(load="ldrsb")
+%  unused()
 
 %def op_iget_char():
 %  op_iget(load="ldrh", helper="MterpIGetU16")
 
 %def op_iget_char_quick():
-%  op_iget_quick(load="ldrh")
+%  unused()
 
 %def op_iget_object():
 %  op_iget(is_object=True, helper="MterpIGetObj")
 
 %def op_iget_object_quick():
-    /* For: iget-object-quick */
-    /* op vA, vB, offset//CCCC */
-    lsr     w2, wINST, #12              // w2<- B
-    FETCH w1, 1                         // w1<- field byte offset
-    EXPORT_PC
-    GET_VREG w0, w2                     // w0<- object we're operating on
-    bl      artIGetObjectFromMterp      // (obj, offset)
-    ldr     x3, [xSELF, #THREAD_EXCEPTION_OFFSET]
-    ubfx    w2, wINST, #8, #4           // w2<- A
-    PREFETCH_INST 2
-    cbnz    w3, MterpPossibleException      // bail out
-    SET_VREG_OBJECT w0, w2              // fp[A]<- w0
-    ADVANCE 2                           // advance rPC
-    GET_INST_OPCODE ip                  // extract opcode from wINST
-    GOTO_OPCODE ip                      // jump to next instruction
+%  unused()
 
 %def op_iget_quick(load="ldr", extend=""):
-    /* For: iget-quick, iget-boolean-quick, iget-byte-quick, iget-char-quick, iget-short-quick */
-    /* op vA, vB, offset//CCCC */
-    lsr     w2, wINST, #12              // w2<- B
-    FETCH w1, 1                         // w1<- field byte offset
-    GET_VREG w3, w2                     // w3<- object we're operating on
-    ubfx    w2, wINST, #8, #4           // w2<- A
-    cbz     w3, common_errNullObject    // object was null
-    $load   w0, [x3, x1]                // w0<- obj.field
-    FETCH_ADVANCE_INST 2                // advance rPC, load rINST
-    $extend
-    SET_VREG w0, w2                     // fp[A]<- w0
-    GET_INST_OPCODE ip                  // extract opcode from rINST
-    GOTO_OPCODE ip                      // jump to next instruction
+%  unused()
 
 %def op_iget_short():
 %  op_iget(load="ldrsh", helper="MterpIGetI16")
 
 %def op_iget_short_quick():
-%  op_iget_quick(load="ldrsh")
+%  unused()
 
 %def op_iget_wide():
 %  op_iget(is_wide=True, helper="MterpIGetU64")
 
 %def op_iget_wide_quick():
-    /* iget-wide-quick vA, vB, offset//CCCC */
-    lsr     w2, wINST, #12              // w2<- B
-    FETCH w4, 1                         // w4<- field byte offset
-    GET_VREG w3, w2                     // w3<- object we're operating on
-    ubfx    w2, wINST, #8, #4           // w2<- A
-    cbz     w3, common_errNullObject    // object was null
-    ldr     x0, [x3, x4]                // x0<- obj.field
-    FETCH_ADVANCE_INST 2                // advance rPC, load wINST
-    SET_VREG_WIDE x0, w2
-    GET_INST_OPCODE ip                  // extract opcode from wINST
-    GOTO_OPCODE ip                      // jump to next instruction
+%  unused()
 
 %def op_instance_of():
     /*
@@ -186,69 +150,40 @@
 %  op_iput(helper="MterpIPutU8")
 
 %def op_iput_boolean_quick():
-%  op_iput_quick(store="strb")
+%  unused()
 
 %def op_iput_byte():
 %  op_iput(helper="MterpIPutI8")
 
 %def op_iput_byte_quick():
-%  op_iput_quick(store="strb")
+%  unused()
 
 %def op_iput_char():
 %  op_iput(helper="MterpIPutU16")
 
 %def op_iput_char_quick():
-%  op_iput_quick(store="strh")
+%  unused()
 
 %def op_iput_object():
 %  op_iput(helper="MterpIPutObj")
 
 %def op_iput_object_quick():
-    EXPORT_PC
-    add     x0, xFP, #OFF_FP_SHADOWFRAME
-    mov     x1, xPC
-    mov     w2, wINST
-    bl      MterpIputObjectQuick
-    cbz     w0, MterpException
-    FETCH_ADVANCE_INST 2                // advance rPC, load rINST
-    GET_INST_OPCODE ip                  // extract opcode from rINST
-    GOTO_OPCODE ip                      // jump to next instruction
+%  unused()
 
 %def op_iput_quick(store="str"):
-    /* For: iput-quick, iput-object-quick */
-    /* op vA, vB, offset//CCCC */
-    lsr     w2, wINST, #12              // w2<- B
-    FETCH w1, 1                         // w1<- field byte offset
-    GET_VREG w3, w2                     // w3<- fp[B], the object pointer
-    ubfx    w2, wINST, #8, #4           // w2<- A
-    cbz     w3, common_errNullObject    // object was null
-    GET_VREG w0, w2                     // w0<- fp[A]
-    FETCH_ADVANCE_INST 2                // advance rPC, load rINST
-    $store     w0, [x3, x1]             // obj.field<- w0
-    GET_INST_OPCODE ip                  // extract opcode from rINST
-    GOTO_OPCODE ip                      // jump to next instruction
+%  unused()
 
 %def op_iput_short():
 %  op_iput(helper="MterpIPutI16")
 
 %def op_iput_short_quick():
-%  op_iput_quick(store="strh")
+%  unused()
 
 %def op_iput_wide():
 %  op_iput(helper="MterpIPutU64")
 
 %def op_iput_wide_quick():
-    /* iput-wide-quick vA, vB, offset//CCCC */
-    lsr     w2, wINST, #12              // w2<- B
-    FETCH w3, 1                         // w3<- field byte offset
-    GET_VREG w2, w2                     // w2<- fp[B], the object pointer
-    ubfx    w0, wINST, #8, #4           // w0<- A
-    cbz     w2, common_errNullObject    // object was null
-    GET_VREG_WIDE x0, w0                // x0<- fp[A]
-    FETCH_ADVANCE_INST 2                // advance rPC, load wINST
-    str     x0, [x2, x3]                // obj.field<- x0
-    GET_INST_OPCODE ip                  // extract opcode from wINST
-    GOTO_OPCODE ip                      // jump to next instruction
+%  unused()
 
 %def op_new_instance():
     /*
diff --git a/runtime/interpreter/mterp/arm64ng/invoke.S b/runtime/interpreter/mterp/arm64ng/invoke.S
index ac45a35..4983201 100644
--- a/runtime/interpreter/mterp/arm64ng/invoke.S
+++ b/runtime/interpreter/mterp/arm64ng/invoke.S
@@ -172,23 +172,8 @@
 %def op_invoke_virtual_range():
 %  invoke_virtual(helper="NterpCommonInvokeInstanceRange", range="1")
 
-%def invoke_virtual_quick(helper="", range=""):
-   EXPORT_PC
-   FETCH w2, 1  // offset
-   // First argument is the 'this' pointer.
-   FETCH w1, 2 // arguments
-   .if !$range
-   and w1, w1, #0xf
-   .endif
-   GET_VREG w1, w1
-   // Note: if w1 is null, this will be handled by our SIGSEGV handler.
-   ldr w0, [x1, #MIRROR_OBJECT_CLASS_OFFSET]
-   add w0, w0, #MIRROR_CLASS_VTABLE_OFFSET_64
-   ldr x0, [x0, w2, uxtw #3]
-   b $helper
-
 %def op_invoke_virtual_quick():
-%  invoke_virtual_quick(helper="NterpCommonInvokeInstance", range="0")
+%  unused()
 
 %def op_invoke_virtual_range_quick():
-%  invoke_virtual_quick(helper="NterpCommonInvokeInstanceRange", range="1")
+%  unused()
diff --git a/runtime/interpreter/mterp/arm64ng/object.S b/runtime/interpreter/mterp/arm64ng/object.S
index a66dab1..fafc2d2 100644
--- a/runtime/interpreter/mterp/arm64ng/object.S
+++ b/runtime/interpreter/mterp/arm64ng/object.S
@@ -130,59 +130,25 @@
 %  op_iget(load="ldr", volatile_load="ldar", maybe_extend="", wide="0", is_object="1")
 
 %def op_iget_boolean_quick():
-%  op_iget_quick(load="ldrb")
+%  unused()
 
 %def op_iget_byte_quick():
-%  op_iget_quick(load="ldrsb")
+%  unused()
 
 %def op_iget_char_quick():
-%  op_iget_quick(load="ldrh")
+%  unused()
 
 %def op_iget_object_quick():
-   /* For: iget-object-quick */
-   /* op vA, vB, offset//CCCC */
-   lsr     w2, wINST, #12              // w2<- B
-   FETCH w1, 1                         // w1<- field byte offset
-   GET_VREG w0, w2                     // w0<- object we're operating on
-   cbz     x0, common_errNullObject    // bail if null object.
-   ldr     w0, [x0, x1]
-   cbnz    wMR, 2f
-1:
-   ubfx    w2, wINST, #8, #4           // w2<- A
-   PREFETCH_INST 2
-   SET_VREG_OBJECT w0, w2              // fp[A]<- w0
-   ADVANCE 2                           // advance rPC
-   GET_INST_OPCODE ip                  // extract opcode from wINST
-   GOTO_OPCODE ip                      // jump to next instruction
-2:
-   bl      art_quick_read_barrier_mark_reg00
-   b       1b
+%  unused()
 
 %def op_iget_quick(load="ldr", wide="0"):
-   /* For: iget-quick, iget-boolean-quick, iget-byte-quick, iget-char-quick, iget-short-quick, iget-wide-quick */
-   /* op vA, vB, offset@CCCC */
-   lsr     w2, wINST, #12              // w2<- B
-   FETCH w1, 1                         // w1<- field byte offset
-   GET_VREG w0, w2                     // w0<- object we're operating on
-   cbz     x0, common_errNullObject    // bail if null object.
-   ubfx    w2, wINST, #8, #4           // w2<- A
-   PREFETCH_INST 2
-   .if $wide
-   ${load} x0, [x0, x1]
-   SET_VREG_WIDE x0, w2                // fp[A]<- x0
-   .else
-   ${load} w0, [x0, x1]
-   SET_VREG w0, w2                     // fp[A]<- w0
-   .endif
-   ADVANCE 2                           // advance rPC
-   GET_INST_OPCODE ip                  // extract opcode from wINST
-   GOTO_OPCODE ip                      // jump to next instruction
+%  unused()
 
 %def op_iget_short_quick():
-%  op_iget_quick(load="ldrsh")
+%  unused()
 
 %def op_iget_wide_quick():
-%  op_iget_quick(load="ldr", wide="1")
+%  unused()
 
 %def op_iput_boolean():
 %  op_iput(store="strb", volatile_store="stlrb", wide="0", is_object="0")
@@ -262,42 +228,25 @@
 %  op_iput(store="str", volatile_store="stlr", wide="0", is_object="1")
 
 %def op_iput_boolean_quick():
-%  op_iput_quick(store="strb")
+%  unused()
 
 %def op_iput_byte_quick():
-%  op_iput_quick(store="strb")
+%  unused()
 
 %def op_iput_char_quick():
-%  op_iput_quick(store="strh")
+%  unused()
 
 %def op_iput_quick(store="str", wide="0", is_object="0"):
-   /* op vA, vB, offset@CCCC */
-   lsr     w2, wINST, #12              // w2<- B
-   FETCH w1, 1                         // w1<- field byte offset
-   GET_VREG w3, w2                     // w3<- fp[B], the object pointer
-   ubfx    w2, wINST, #8, #4           // w2<- A
-   cbz     w3, common_errNullObject    // object was null
-   .if $wide
-   GET_VREG_WIDE x0, w2                // x0<- fp[A]
-   FETCH_ADVANCE_INST 2                // advance rPC, load rINST
-   $store  x0, [x3, x1]                // obj.field<- x0
-   .else
-   GET_VREG w0, w2                     // w0<- fp[A]
-   FETCH_ADVANCE_INST 2                // advance rPC, load rINST
-   $store  w0, [x3, x1]                // obj.field<- w0
-   WRITE_BARRIER_IF_OBJECT $is_object, w0, w3, .L${opcode}_skip_write_barrier
-   .endif
-   GET_INST_OPCODE ip                  // extract opcode from rINST
-   GOTO_OPCODE ip                      // jump to next instruction
+%  unused()
 
 %def op_iput_object_quick():
-%  op_iput_quick(store="str", wide="0", is_object="1")
+%  unused()
 
 %def op_iput_short_quick():
-%  op_iput_quick(store="strh")
+%  unused()
 
 %def op_iput_wide_quick():
-%  op_iput_quick(store="str", wide="1", is_object="0")
+%  unused()
 
 %def op_sget_boolean():
 %  op_sget(load="ldrb", volatile_load="ldarb", maybe_extend="", wide="0", is_object="0")
diff --git a/runtime/interpreter/mterp/armng/invoke.S b/runtime/interpreter/mterp/armng/invoke.S
index 3dfdab1..6163322 100644
--- a/runtime/interpreter/mterp/armng/invoke.S
+++ b/runtime/interpreter/mterp/armng/invoke.S
@@ -179,23 +179,8 @@
 %def op_invoke_virtual_range():
 %  invoke_virtual(helper="NterpCommonInvokeInstanceRange", range="1")
 
-%def invoke_virtual_quick(helper="", range=""):
-   EXPORT_PC
-   FETCH r2, 1  // offset
-   // First argument is the 'this' pointer.
-   FETCH r1, 2 // arguments
-   .if !$range
-   and r1, r1, #0xf
-   .endif
-   GET_VREG r1, r1
-   // Note: if r1 is null, this will be handled by our SIGSEGV handler.
-   ldr r0, [r1, #MIRROR_OBJECT_CLASS_OFFSET]
-   add r0, r0, #MIRROR_CLASS_VTABLE_OFFSET_32
-   ldr r0, [r0, r2, lsl #2]
-   b $helper
-
 %def op_invoke_virtual_quick():
-%  invoke_virtual_quick(helper="NterpCommonInvokeInstance", range="0")
+%  unused()
 
 %def op_invoke_virtual_range_quick():
-%  invoke_virtual_quick(helper="NterpCommonInvokeInstanceRange", range="1")
+%  unused()
diff --git a/runtime/interpreter/mterp/armng/object.S b/runtime/interpreter/mterp/armng/object.S
index ee382d5..992feeb 100644
--- a/runtime/interpreter/mterp/armng/object.S
+++ b/runtime/interpreter/mterp/armng/object.S
@@ -146,65 +146,25 @@
 %  op_iget(load="ldr", wide="0", is_object="1")
 
 %def op_iget_boolean_quick():
-%  op_iget_quick(load="ldrb")
+%  unused()
 
 %def op_iget_byte_quick():
-%  op_iget_quick(load="ldrsb")
+%  unused()
 
 %def op_iget_char_quick():
-%  op_iget_quick(load="ldrh")
+%  unused()
 
 %def op_iget_object_quick():
-   /* For: iget-object-quick */
-   /* op vA, vB, offset@CCCC */
-   mov     r2, rINST, lsr #12          @ r2<- B
-   FETCH r1, 1                         @ r1<- field byte offset
-   EXPORT_PC
-   GET_VREG r0, r2                     @ r0<- object we're operating on
-   cmp     r0, #0
-   beq     common_errNullObject
-   ldr     r0, [r0, r1]
-   cmp     rMR, #0
-   bne     2f
-1:
-   ubfx    r2, rINST, #8, #4           @ r2<- A
-   FETCH_ADVANCE_INST 2
-   SET_VREG_OBJECT r0, r2              @ fp[A]<- r0
-   GET_INST_OPCODE ip                  @ extract opcode from rINST
-   GOTO_OPCODE ip                      @ jump to next instruction
-2:
-   bl      art_quick_read_barrier_mark_reg00
-   b       1b
+%  unused()
 
 %def op_iget_quick(load="ldr", wide="0"):
-   /* For: iget-quick, iget-boolean-quick, iget-byte-quick, iget-char-quick, iget-short-quick,
-    * iget-wide-quick */
-   /* op vA, vB, offset@CCCC */
-   mov     r2, rINST, lsr #12          @ r2<- B
-   FETCH r1, 1                         @ r1<- field byte offset
-   GET_VREG r3, r2                     @ r3<- object we're operating on
-   ubfx    r2, rINST, #8, #4           @ r2<- A
-   cmp     r3, #0                      @ check object for null
-   beq     common_errNullObject        @ object was null
-   FETCH_ADVANCE_INST 2                @ advance rPC, load rINST
-   .if $wide
-   ldrd    r0, [r3, r1]                @ r0<- obj.field (64 bits, aligned)
-   VREG_INDEX_TO_ADDR r3, r2           @ r3<- &fp[A]
-   CLEAR_SHADOW_PAIR r2, ip, lr        @ Zero out the shadow regs
-   GET_INST_OPCODE ip                  @ extract opcode from rINST
-   SET_VREG_WIDE_BY_ADDR r0, r1, r3    @ fp[A]<- r0/r1
-   .else
-   $load   r0, [r3, r1]                @ r0<- obj.field
-   SET_VREG r0, r2                     @ fp[A]<- r0
-   GET_INST_OPCODE ip                  @ extract opcode from rINST
-   .endif
-   GOTO_OPCODE ip                      @ jump to next instruction
+%  unused()
 
 %def op_iget_short_quick():
-%  op_iget_quick(load="ldrsh")
+%  unused()
 
 %def op_iget_wide_quick():
-%  op_iget_quick(load="ldr", wide="1")
+%  unused()
 
 %def op_iput_boolean():
 %  op_iput(store="strb", wide="0", is_object="0")
@@ -300,45 +260,25 @@
 %  op_iput(store="str", wide="0", is_object="1")
 
 %def op_iput_boolean_quick():
-%  op_iput_quick(store="strb")
+%  unused()
 
 %def op_iput_byte_quick():
-%  op_iput_quick(store="strb")
+%  unused()
 
 %def op_iput_char_quick():
-%  op_iput_quick(store="strh")
+%  unused()
 
 %def op_iput_object_quick():
-%  op_iput_quick(store="str", wide="0", is_object="1")
+%  unused()
 
 %def op_iput_quick(store="str", wide="0", is_object="0"):
-   /* For: iput-quick, iput-object-quick */
-   /* op vA, vB, offset@CCCC */
-   mov     r2, rINST, lsr #12          @ r2<- B
-   FETCH ip, 1                         @ r1<- field byte offset
-   GET_VREG r3, r2                     @ r3<- fp[B], the object pointer
-   ubfx    r2, rINST, #8, #4           @ r2<- A
-   cmp     r3, #0                      @ check object for null
-   beq     common_errNullObject        @ object was null
-   .if $wide
-   VREG_INDEX_TO_ADDR r0, r2           @ r0<- &fp[A]
-   GET_VREG_WIDE_BY_ADDR r0, r1, r0    @ r0/r1<- fp[A]/fp[A+1]
-   FETCH_ADVANCE_INST 2                @ advance rPC, load rINST
-   strd    r0, [r3, ip]                @ obj.field<- r0/r1
-   .else
-   GET_VREG r0, r2                     @ r0<- fp[A]
-   FETCH_ADVANCE_INST 2                @ advance rPC, load rINST
-   $store  r0, [r3, ip]                @ obj.field<- r0
-   .endif
-   WRITE_BARRIER_IF_OBJECT $is_object, r0, r3, .L${opcode}_skip_write_barrier, r2
-   GET_INST_OPCODE ip                  @ extract opcode from rINST
-   GOTO_OPCODE ip                      @ jump to next instruction
+%  unused()
 
 %def op_iput_short_quick():
-%  op_iput_quick(store="strh")
+%  unused()
 
 %def op_iput_wide_quick():
-%  op_iput_quick(store="str", wide="1", is_object="0")
+%  unused()
 
 %def op_sget_boolean():
 %  op_sget(load="ldrb", wide="0", is_object="0")
diff --git a/runtime/interpreter/mterp/mterp.cc b/runtime/interpreter/mterp/mterp.cc
index 5927c92..ae5e470 100644
--- a/runtime/interpreter/mterp/mterp.cc
+++ b/runtime/interpreter/mterp/mterp.cc
@@ -243,28 +243,6 @@
       self, *shadow_frame, inst, inst_data, result_register) ? 1u : 0u;
 }
 
-extern "C" size_t MterpInvokeVirtualQuick(Thread* self,
-                                          ShadowFrame* shadow_frame,
-                                          uint16_t* dex_pc_ptr,
-                                          uint16_t inst_data)
-    REQUIRES_SHARED(Locks::mutator_lock_) {
-  JValue* result_register = shadow_frame->GetResultRegister();
-  const Instruction* inst = Instruction::At(dex_pc_ptr);
-  return DoInvoke<kVirtual, /*is_range=*/ false, /*do_access_check=*/ false, /*is_mterp=*/ true,
-      /*is_quick=*/ true>(self, *shadow_frame, inst, inst_data, result_register) ? 1u : 0u;
-}
-
-extern "C" size_t MterpInvokeVirtualQuickRange(Thread* self,
-                                               ShadowFrame* shadow_frame,
-                                               uint16_t* dex_pc_ptr,
-                                               uint16_t inst_data)
-    REQUIRES_SHARED(Locks::mutator_lock_) {
-  JValue* result_register = shadow_frame->GetResultRegister();
-  const Instruction* inst = Instruction::At(dex_pc_ptr);
-  return DoInvoke<kVirtual, /*is_range=*/ true, /*do_access_check=*/ false, /*is_mterp=*/ true,
-      /*is_quick=*/ true>(self, *shadow_frame, inst, inst_data, result_register) ? 1u : 0u;
-}
-
 extern "C" void MterpThreadFenceForConstructor() {
   QuasiAtomic::ThreadFenceForConstructor();
 }
@@ -400,14 +378,6 @@
   return 1u;
 }
 
-extern "C" size_t MterpIputObjectQuick(ShadowFrame* shadow_frame,
-                                       uint16_t* dex_pc_ptr,
-                                       uint32_t inst_data)
-    REQUIRES_SHARED(Locks::mutator_lock_) {
-  const Instruction* inst = Instruction::At(dex_pc_ptr);
-  return DoIPutQuick<Primitive::kPrimNot, false>(*shadow_frame, inst, inst_data) ? 1u : 0u;
-}
-
 extern "C" size_t MterpAputObject(ShadowFrame* shadow_frame,
                                   uint16_t* dex_pc_ptr,
                                   uint32_t inst_data)
diff --git a/runtime/interpreter/mterp/x86/invoke.S b/runtime/interpreter/mterp/x86/invoke.S
index 06cd904..ec4f8f9 100644
--- a/runtime/interpreter/mterp/x86/invoke.S
+++ b/runtime/interpreter/mterp/x86/invoke.S
@@ -112,10 +112,10 @@
     /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */
 
 %def op_invoke_virtual_quick():
-%  invoke(helper="MterpInvokeVirtualQuick")
+%  unused()
 
 %def op_invoke_virtual_range():
 %  invoke(helper="MterpInvokeVirtualRange")
 
 %def op_invoke_virtual_range_quick():
-%  invoke(helper="MterpInvokeVirtualQuickRange")
+%  unused()
diff --git a/runtime/interpreter/mterp/x86/object.S b/runtime/interpreter/mterp/x86/object.S
index a47fa3a..e8f1dba 100644
--- a/runtime/interpreter/mterp/x86/object.S
+++ b/runtime/interpreter/mterp/x86/object.S
@@ -43,77 +43,40 @@
 %  op_iget(helper="MterpIGetU8")
 
 %def op_iget_boolean_quick():
-%  op_iget_quick(load="movsbl")
+%  unused()
 
 %def op_iget_byte():
 %  op_iget(helper="MterpIGetI8")
 
 %def op_iget_byte_quick():
-%  op_iget_quick(load="movsbl")
+%  unused()
 
 %def op_iget_char():
 %  op_iget(helper="MterpIGetU16")
 
 %def op_iget_char_quick():
-%  op_iget_quick(load="movzwl")
+%  unused()
 
 %def op_iget_object():
 %  op_iget(is_object="1", helper="MterpIGetObj")
 
 %def op_iget_object_quick():
-    /* For: iget-object-quick */
-    /* op vA, vB, offset@CCCC */
-    movzbl  rINSTbl, %ecx                   # ecx <- BA
-    sarl    $$4, %ecx                       # ecx <- B
-    GET_VREG %ecx, %ecx                     # vB (object we're operating on)
-    movzwl  2(rPC), %eax                    # eax <- field byte offset
-    movl    %ecx, OUT_ARG0(%esp)
-    movl    %eax, OUT_ARG1(%esp)
-    EXPORT_PC
-    call    SYMBOL(artIGetObjectFromMterp)  # (obj, offset)
-    movl    rSELF, %ecx
-    RESTORE_IBASE_FROM_SELF %ecx
-    cmpl    $$0, THREAD_EXCEPTION_OFFSET(%ecx)
-    jnz     MterpException                  # bail out
-    andb    $$0xf,rINSTbl                   # rINST <- A
-    SET_VREG_OBJECT %eax, rINST             # fp[A] <- value
-    ADVANCE_PC_FETCH_AND_GOTO_NEXT 2
+%  unused()
 
 %def op_iget_quick(load="movl"):
-    /* For: iget-quick, iget-boolean-quick, iget-byte-quick, iget-char-quick, iget-short-quick */
-    /* op vA, vB, offset@CCCC */
-    movzbl  rINSTbl, %ecx                   # ecx <- BA
-    sarl    $$4, %ecx                       # ecx <- B
-    GET_VREG %ecx, %ecx                     # vB (object we're operating on)
-    movzwl  2(rPC), %eax                    # eax <- field byte offset
-    testl   %ecx, %ecx                      # is object null?
-    je      common_errNullObject
-    ${load} (%ecx,%eax,1), %eax
-    andb    $$0xf,rINSTbl                   # rINST <- A
-    SET_VREG %eax, rINST                    # fp[A] <- value
-    ADVANCE_PC_FETCH_AND_GOTO_NEXT 2
+%  unused()
 
 %def op_iget_short():
 %  op_iget(helper="MterpIGetI16")
 
 %def op_iget_short_quick():
-%  op_iget_quick(load="movswl")
+%  unused()
 
 %def op_iget_wide():
 %  op_iget(helper="MterpIGetU64")
 
 %def op_iget_wide_quick():
-    /* iget-wide-quick vA, vB, offset@CCCC */
-    movzbl  rINSTbl, %ecx                   # ecx <- BA
-    sarl    $$4, %ecx                       # ecx <- B
-    GET_VREG %ecx, %ecx                     # vB (object we're operating on)
-    movzwl  2(rPC), %eax                    # eax <- field byte offset
-    testl   %ecx, %ecx                      # is object null?
-    je      common_errNullObject
-    movq    (%ecx,%eax,1), %xmm0
-    andb    $$0xf, rINSTbl                  # rINST <- A
-    SET_WIDE_FP_VREG %xmm0, rINST
-    ADVANCE_PC_FETCH_AND_GOTO_NEXT 2
+%  unused()
 
 %def op_instance_of():
 /*
@@ -150,72 +113,40 @@
 %  op_iput(helper="MterpIPutU8")
 
 %def op_iput_boolean_quick():
-%  op_iput_quick(reg="rINSTbl", store="movb")
+%  unused()
 
 %def op_iput_byte():
 %  op_iput(helper="MterpIPutI8")
 
 %def op_iput_byte_quick():
-%  op_iput_quick(reg="rINSTbl", store="movb")
+%  unused()
 
 %def op_iput_char():
 %  op_iput(helper="MterpIPutU16")
 
 %def op_iput_char_quick():
-%  op_iput_quick(reg="rINSTw", store="movw")
+%  unused()
 
 %def op_iput_object():
 %  op_iput(is_object="1", helper="MterpIPutObj")
 
 %def op_iput_object_quick():
-    EXPORT_PC
-    leal    OFF_FP_SHADOWFRAME(rFP), %eax
-    movl    %eax, OUT_ARG0(%esp)
-    movl    rPC, OUT_ARG1(%esp)
-    REFRESH_INST ${opnum}
-    movl    rINST, OUT_ARG2(%esp)
-    call    SYMBOL(MterpIputObjectQuick)
-    testb   %al, %al
-    jz      MterpException
-    RESTORE_IBASE
-    ADVANCE_PC_FETCH_AND_GOTO_NEXT 2
+%  unused()
 
 %def op_iput_quick(reg="rINST", store="movl"):
-    /* For: iput-quick, iput-object-quick */
-    /* op vA, vB, offset@CCCC */
-    movzbl  rINSTbl, %ecx                   # ecx <- BA
-    sarl    $$4, %ecx                       # ecx <- B
-    GET_VREG %ecx, %ecx                     # vB (object we're operating on)
-    testl   %ecx, %ecx                      # is object null?
-    je      common_errNullObject
-    andb    $$0xf, rINSTbl                  # rINST <- A
-    GET_VREG rINST, rINST                   # rINST <- v[A]
-    movzwl  2(rPC), %eax                    # eax <- field byte offset
-    ${store}    ${reg}, (%ecx,%eax,1)
-    ADVANCE_PC_FETCH_AND_GOTO_NEXT 2
+%  unused()
 
 %def op_iput_short():
 %  op_iput(helper="MterpIPutI16")
 
 %def op_iput_short_quick():
-%  op_iput_quick(reg="rINSTw", store="movw")
+%  unused()
 
 %def op_iput_wide():
 %  op_iput(helper="MterpIPutU64")
 
 %def op_iput_wide_quick():
-    /* iput-wide-quick vA, vB, offset@CCCC */
-    movzbl    rINSTbl, %ecx                 # ecx<- BA
-    sarl      $$4, %ecx                     # ecx<- B
-    GET_VREG  %ecx, %ecx                    # vB (object we're operating on)
-    testl     %ecx, %ecx                    # is object null?
-    je        common_errNullObject
-    movzwl    2(rPC), %eax                  # eax<- field byte offset
-    leal      (%ecx,%eax,1), %ecx           # ecx<- Address of 64-bit target
-    andb      $$0xf, rINSTbl                # rINST<- A
-    GET_WIDE_FP_VREG %xmm0, rINST           # xmm0<- fp[A]/fp[A+1]
-    movq      %xmm0, (%ecx)                 # obj.field<- r0/r1
-    ADVANCE_PC_FETCH_AND_GOTO_NEXT 2
+%  unused()
 
 %def op_new_instance():
 /*
diff --git a/runtime/interpreter/mterp/x86_64/invoke.S b/runtime/interpreter/mterp/x86_64/invoke.S
index 15b48c9..35fdbcd 100644
--- a/runtime/interpreter/mterp/x86_64/invoke.S
+++ b/runtime/interpreter/mterp/x86_64/invoke.S
@@ -106,10 +106,10 @@
     /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */
 
 %def op_invoke_virtual_quick():
-%  invoke(helper="MterpInvokeVirtualQuick")
+%  unused()
 
 %def op_invoke_virtual_range():
 %  invoke(helper="MterpInvokeVirtualRange")
 
 %def op_invoke_virtual_range_quick():
-%  invoke(helper="MterpInvokeVirtualQuickRange")
+%  unused()
diff --git a/runtime/interpreter/mterp/x86_64/object.S b/runtime/interpreter/mterp/x86_64/object.S
index fa85f69..afbcb50 100644
--- a/runtime/interpreter/mterp/x86_64/object.S
+++ b/runtime/interpreter/mterp/x86_64/object.S
@@ -35,70 +35,40 @@
 %  op_iget(helper="MterpIGetU8")
 
 %def op_iget_boolean_quick():
-%  op_iget_quick(load="movsbl")
+%  unused()
 
 %def op_iget_byte():
 %  op_iget(helper="MterpIGetI8")
 
 %def op_iget_byte_quick():
-%  op_iget_quick(load="movsbl")
+%  unused()
 
 %def op_iget_char():
 %  op_iget(helper="MterpIGetU16")
 
 %def op_iget_char_quick():
-%  op_iget_quick(load="movzwl")
+%  unused()
 
 %def op_iget_object():
 %  op_iget(is_object="1", helper="MterpIGetObj")
 
 %def op_iget_object_quick():
-    /* For: iget-object-quick */
-    /* op vA, vB, offset@CCCC */
-    .extern artIGetObjectFromMterp
-    movzbq  rINSTbl, %rcx                   # rcx <- BA
-    sarl    $$4, %ecx                       # ecx <- B
-    GET_VREG OUT_32_ARG0, %rcx              # vB (object we're operating on)
-    movzwl  2(rPC), OUT_32_ARG1             # eax <- field byte offset
-    EXPORT_PC
-    callq   SYMBOL(artIGetObjectFromMterp)  # (obj, offset)
-    movq    rSELF, %rcx
-    cmpq    $$0, THREAD_EXCEPTION_OFFSET(%rcx)
-    jnz     MterpException                  # bail out
-    andb    $$0xf, rINSTbl                  # rINST <- A
-    SET_VREG_OBJECT %eax, rINSTq            # fp[A] <- value
-    ADVANCE_PC_FETCH_AND_GOTO_NEXT 2
+%  unused()
 
 %def op_iget_quick(load="movl", wide="0"):
-    /* For: iget-quick, iget-boolean-quick, iget-byte-quick, iget-char-quick, iget-short-quick, iget-wide-quick */
-    /* op vA, vB, offset@CCCC */
-    movl    rINST, %ecx                     # rcx <- BA
-    sarl    $$4, %ecx                       # ecx <- B
-    GET_VREG %ecx, %rcx                     # vB (object we're operating on)
-    movzwq  2(rPC), %rax                    # eax <- field byte offset
-    testl   %ecx, %ecx                      # is object null?
-    je      common_errNullObject
-    andb    $$0xf,rINSTbl                   # rINST <- A
-    .if $wide
-    movq (%rcx,%rax,1), %rax
-    SET_WIDE_VREG %rax, rINSTq              # fp[A] <- value
-    .else
-    ${load} (%rcx,%rax,1), %eax
-    SET_VREG %eax, rINSTq                   # fp[A] <- value
-    .endif
-    ADVANCE_PC_FETCH_AND_GOTO_NEXT 2
+%  unused()
 
 %def op_iget_short():
 %  op_iget(helper="MterpIGetI16")
 
 %def op_iget_short_quick():
-%  op_iget_quick(load="movswl")
+%  unused()
 
 %def op_iget_wide():
 %  op_iget(helper="MterpIGetU64")
 
 %def op_iget_wide_quick():
-%  op_iget_quick(load="movswl", wide="1")
+%  unused()
 
 %def op_instance_of():
 /*
@@ -131,70 +101,40 @@
 %  op_iput(helper="MterpIPutU8")
 
 %def op_iput_boolean_quick():
-%  op_iput_quick(reg="rINSTbl", store="movb")
+%  unused()
 
 %def op_iput_byte():
 %  op_iput(helper="MterpIPutI8")
 
 %def op_iput_byte_quick():
-%  op_iput_quick(reg="rINSTbl", store="movb")
+%  unused()
 
 %def op_iput_char():
 %  op_iput(helper="MterpIPutU16")
 
 %def op_iput_char_quick():
-%  op_iput_quick(reg="rINSTw", store="movw")
+%  unused()
 
 %def op_iput_object():
 %  op_iput(is_object="1", helper="MterpIPutObj")
 
 %def op_iput_object_quick():
-    EXPORT_PC
-    leaq    OFF_FP_SHADOWFRAME(rFP), OUT_ARG0
-    movq    rPC, OUT_ARG1
-    REFRESH_INST ${opnum}
-    movl    rINST, OUT_32_ARG2
-    call    SYMBOL(MterpIputObjectQuick)
-    testb   %al, %al
-    jz      MterpException
-    ADVANCE_PC_FETCH_AND_GOTO_NEXT 2
+%  unused()
 
 %def op_iput_quick(reg="rINST", store="movl"):
-    /* For: iput-quick, iput-object-quick */
-    /* op vA, vB, offset@CCCC */
-    movzbq  rINSTbl, %rcx                   # rcx <- BA
-    sarl    $$4, %ecx                       # ecx <- B
-    GET_VREG %ecx, %rcx                     # vB (object we're operating on)
-    testl   %ecx, %ecx                      # is object null?
-    je      common_errNullObject
-    andb    $$0xf, rINSTbl                  # rINST <- A
-    GET_VREG rINST, rINSTq                  # rINST <- v[A]
-    movzwq  2(rPC), %rax                    # rax <- field byte offset
-    ${store}    ${reg}, (%rcx,%rax,1)
-    ADVANCE_PC_FETCH_AND_GOTO_NEXT 2
+%  unused()
 
 %def op_iput_short():
 %  op_iput(helper="MterpIPutI16")
 
 %def op_iput_short_quick():
-%  op_iput_quick(reg="rINSTw", store="movw")
+%  unused()
 
 %def op_iput_wide():
 %  op_iput(helper="MterpIPutU64")
 
 %def op_iput_wide_quick():
-    /* iput-wide-quick vA, vB, offset@CCCC */
-    movzbq    rINSTbl, %rcx                 # rcx<- BA
-    sarl      $$4, %ecx                     # ecx<- B
-    GET_VREG  %ecx, %rcx                    # vB (object we're operating on)
-    testl     %ecx, %ecx                    # is object null?
-    je        common_errNullObject
-    movzwq    2(rPC), %rax                  # rax<- field byte offset
-    leaq      (%rcx,%rax,1), %rcx           # ecx<- Address of 64-bit target
-    andb      $$0xf, rINSTbl                # rINST<- A
-    GET_WIDE_VREG %rax, rINSTq              # rax<- fp[A]/fp[A+1]
-    movq      %rax, (%rcx)                  # obj.field<- r0/r1
-    ADVANCE_PC_FETCH_AND_GOTO_NEXT 2
+%  unused()
 
 %def op_new_instance():
 /*
diff --git a/runtime/interpreter/mterp/x86_64ng/invoke.S b/runtime/interpreter/mterp/x86_64ng/invoke.S
index ebe2fcf..6ae43c9 100644
--- a/runtime/interpreter/mterp/x86_64ng/invoke.S
+++ b/runtime/interpreter/mterp/x86_64ng/invoke.S
@@ -172,27 +172,10 @@
 %  invoke_virtual(helper="NterpCommonInvokeInstance", range="0")
 
 %def op_invoke_virtual_quick():
-   EXPORT_PC
-   movzwl 2(rPC), %eax // offset
-   // First argument is the 'this' pointer.
-   movzwl 4(rPC), %r11d // arguments
-   andq $$0xf, %r11
-   movl (rFP, %r11, 4), %esi
-   // Note: if esi is null, this will be handled by our SIGSEGV handler.
-   movl MIRROR_OBJECT_CLASS_OFFSET(%esi), %edx
-   movq MIRROR_CLASS_VTABLE_OFFSET_64(%edx, %eax, 8), %rdi
-   jmp NterpCommonInvokeInstance
+%  unused()
 
 %def op_invoke_virtual_range():
 %  invoke_virtual(helper="NterpCommonInvokeInstanceRange", range="1")
 
 %def op_invoke_virtual_range_quick():
-   EXPORT_PC
-   movzwl 2(rPC), %eax // offset
-   // First argument is the 'this' pointer.
-   movzwl 4(rPC), %r11d // arguments
-   movl (rFP, %r11, 4), %esi
-   // Note: if esi is null, this will be handled by our SIGSEGV handler.
-   movl MIRROR_OBJECT_CLASS_OFFSET(%esi), %edx
-   movq MIRROR_CLASS_VTABLE_OFFSET_64(%edx, %eax, 8), %rdi
-   jmp NterpCommonInvokeInstanceRange
+%  unused()
diff --git a/runtime/interpreter/mterp/x86_64ng/object.S b/runtime/interpreter/mterp/x86_64ng/object.S
index cb231e3..cb81a91 100644
--- a/runtime/interpreter/mterp/x86_64ng/object.S
+++ b/runtime/interpreter/mterp/x86_64ng/object.S
@@ -5,72 +5,40 @@
    jmp NterpGetBooleanInstanceField
 
 %def op_iget_boolean_quick():
-%  op_iget_quick(load="movsbl")
+%  unused()
 
 %def op_iget_byte():
    jmp NterpGetByteInstanceField
 
 %def op_iget_byte_quick():
-%  op_iget_quick(load="movsbl")
+%  unused()
 
 %def op_iget_char():
    jmp NterpGetCharInstanceField
 
 %def op_iget_char_quick():
-%  op_iget_quick(load="movzwl")
+%  unused()
 
 %def op_iget_object():
     jmp NterpGetObjectInstanceField
 
 %def op_iget_object_quick():
-   movzwq  2(rPC), %rax                    # eax <- field byte offset
-   movl    rINST, %ecx                     # rcx <- BA
-   sarl    $$4, %ecx                       # ecx <- B
-   GET_VREG %ecx, %rcx                     # vB (object we're operating on)
-   testl   %ecx, %ecx                      # is object null?
-   je      common_errNullObject
-   testb $$READ_BARRIER_TEST_VALUE, GRAY_BYTE_OFFSET(%ecx)
-   movl (%rcx,%rax,1), %eax
-   jnz 2f
-1:
-   andb    $$0xf,rINSTbl                   # rINST <- A
-   SET_VREG_OBJECT %eax, rINSTq            # fp[A] <- value
-   ADVANCE_PC_FETCH_AND_GOTO_NEXT 2
-2:
-   // reg00 is eax
-   call art_quick_read_barrier_mark_reg00
-   jmp 1b
+%  unused()
 
 %def op_iget_quick(load="movl", wide="0"):
-    /* For: iget-quick, iget-boolean-quick, iget-byte-quick, iget-char-quick, iget-short-quick, iget-wide-quick */
-    /* op vA, vB, offset@CCCC */
-    movl    rINST, %ecx                     # rcx <- BA
-    sarl    $$4, %ecx                       # ecx <- B
-    GET_VREG %ecx, %rcx                     # vB (object we're operating on)
-    movzwq  2(rPC), %rax                    # eax <- field byte offset
-    testl   %ecx, %ecx                      # is object null?
-    je      common_errNullObject
-    andb    $$0xf,rINSTbl                   # rINST <- A
-    .if $wide
-    movq (%rcx,%rax,1), %rax
-    SET_WIDE_VREG %rax, rINSTq              # fp[A] <- value
-    .else
-    ${load} (%rcx,%rax,1), %eax
-    SET_VREG %eax, rINSTq                   # fp[A] <- value
-    .endif
-    ADVANCE_PC_FETCH_AND_GOTO_NEXT 2
+%  unused()
 
 %def op_iget_short():
    jmp NterpGetShortInstanceField
 
 %def op_iget_short_quick():
-%  op_iget_quick(load="movswl")
+%  unused()
 
 %def op_iget_wide():
    jmp NterpGetWideInstanceField
 
 %def op_iget_wide_quick():
-%  op_iget_quick(load="movq", wide="1")
+%  unused()
 
 %def op_instance_of():
    jmp NterpInstanceOf
@@ -85,77 +53,40 @@
    jmp NterpPutBooleanInstanceField
 
 %def op_iput_boolean_quick():
-%  op_iput_quick(reg="rINSTbl", store="movb")
+%  unused()
 
 %def op_iput_byte():
    jmp NterpPutByteInstanceField
 
 %def op_iput_byte_quick():
-%  op_iput_quick(reg="rINSTbl", store="movb")
+%  unused()
 
 %def op_iput_char():
    jmp NterpPutCharInstanceField
 
 %def op_iput_char_quick():
-%  op_iput_quick(reg="rINSTw", store="movw")
+%  unused()
 
 %def op_iput_object():
     jmp NterpPutObjectInstanceField
 
 %def op_iput_object_quick():
-   movzwq  2(rPC), %rax                    # eax <- field byte offset
-   movzbq  rINSTbl, %rcx                   # rcx <- BA
-   sarl    $$4, %ecx                       # ecx <- B
-   GET_VREG %ecx, %rcx                     # vB (object we're operating on)
-   testl   %ecx, %ecx                      # is object null?
-   je      common_errNullObject
-   andb    $$0xf, rINSTbl                  # rINST <- A
-   GET_VREG rINST, rINSTq                  # rINST <- v[A]
-   movl rINST, (%rcx,%rax,1)
-   testl rINST, rINST
-   je 1f
-   movq rSELF:THREAD_CARD_TABLE_OFFSET, %rax
-   shrq $$CARD_TABLE_CARD_SHIFT, %rcx
-   movb %al, (%rcx, %rax, 1)
-1:
-   ADVANCE_PC_FETCH_AND_GOTO_NEXT 2
+%  unused()
 
 %def op_iput_quick(reg="rINST", store="movl"):
-    /* For: iput-quick, iput-object-quick */
-    /* op vA, vB, offset@CCCC */
-    movzbq  rINSTbl, %rcx                   # rcx <- BA
-    sarl    $$4, %ecx                       # ecx <- B
-    GET_VREG %ecx, %rcx                     # vB (object we're operating on)
-    testl   %ecx, %ecx                      # is object null?
-    je      common_errNullObject
-    andb    $$0xf, rINSTbl                  # rINST <- A
-    GET_VREG rINST, rINSTq                  # rINST <- v[A]
-    movzwq  2(rPC), %rax                    # rax <- field byte offset
-    ${store}    ${reg}, (%rcx,%rax,1)
-    ADVANCE_PC_FETCH_AND_GOTO_NEXT 2
+%  unused()
 
 %def op_iput_short():
    jmp NterpPutShortInstanceField
 
 %def op_iput_short_quick():
-%  op_iput_quick(reg="rINSTw", store="movw")
+%  unused()
 
 %def op_iput_wide():
    jmp NterpPutWideInstanceField
 
 %def op_iput_wide_quick():
-    /* iput-wide-quick vA, vB, offset@CCCC */
-    movzbq    rINSTbl, %rcx                 # rcx<- BA
-    sarl      $$4, %ecx                     # ecx<- B
-    GET_VREG  %ecx, %rcx                    # vB (object we're operating on)
-    testl     %ecx, %ecx                    # is object null?
-    je        common_errNullObject
-    movzwq    2(rPC), %rax                  # rax<- field byte offset
-    leaq      (%rcx,%rax,1), %rcx           # ecx<- Address of 64-bit target
-    andb      $$0xf, rINSTbl                # rINST<- A
-    GET_WIDE_VREG %rax, rINSTq              # rax<- fp[A]/fp[A+1]
-    movq      %rax, (%rcx)                  # obj.field<- r0/r1
-    ADVANCE_PC_FETCH_AND_GOTO_NEXT 2
+%  unused()
 
 %def op_sget(load="movl", wide="0"):
    jmp NterpGetIntStaticField