diff --git a/vm/compiler/codegen/arm/CodegenDriver.c b/vm/compiler/codegen/arm/CodegenDriver.c
index 1272f9b..7d76e89 100644
--- a/vm/compiler/codegen/arm/CodegenDriver.c
+++ b/vm/compiler/codegen/arm/CodegenDriver.c
@@ -1607,9 +1607,11 @@
         }
         case OP_SGET:
         case OP_SGET_VOLATILE:
+        case OP_SGET_VOLATILE_JUMBO:
         case OP_SGET_JUMBO:
         case OP_SGET_OBJECT:
         case OP_SGET_OBJECT_VOLATILE:
+        case OP_SGET_OBJECT_VOLATILE_JUMBO:
         case OP_SGET_OBJECT_JUMBO:
         case OP_SGET_BOOLEAN:
         case OP_SGET_BOOLEAN_JUMBO:
@@ -1626,14 +1628,17 @@
                 mir->meta.calleeMethod : cUnit->method;
             void *fieldPtr = (void*)
               (method->clazz->pDvmDex->pResFields[mir->dalvikInsn.vB]);
+            Opcode opcode = mir->dalvikInsn.opcode;
 
             if (fieldPtr == NULL) {
                 LOGE("Unexpected null static field");
                 dvmAbort();
             }
 
-            isVolatile = (mir->dalvikInsn.opcode == OP_SGET_VOLATILE) ||
-                         (mir->dalvikInsn.opcode == OP_SGET_OBJECT_VOLATILE) ||
+            isVolatile = (opcode == OP_SGET_VOLATILE) ||
+                         (opcode == OP_SGET_VOLATILE_VOLATILE) ||
+                         (opcode == OP_SGET_OBJECT_VOLATILE) ||
+                         (opcode == OP_SGET_OBJECT_VOLATILE_JUMBO) ||
                          dvmIsVolatileField((Field *) fieldPtr);
 
             rlDest = dvmCompilerGetDest(cUnit, mir, 0);
@@ -1677,9 +1682,11 @@
         }
         case OP_SPUT:
         case OP_SPUT_VOLATILE:
+        case OP_SPUT_VOLATILE_JUMBO:
         case OP_SPUT_JUMBO:
         case OP_SPUT_OBJECT:
         case OP_SPUT_OBJECT_VOLATILE:
+        case OP_SPUT_OBJECT_VOLATILE_JUMBO:
         case OP_SPUT_OBJECT_JUMBO:
         case OP_SPUT_BOOLEAN:
         case OP_SPUT_BOOLEAN_JUMBO:
@@ -1698,14 +1705,18 @@
                 mir->meta.calleeMethod : cUnit->method;
             void *fieldPtr = (void*)
               (method->clazz->pDvmDex->pResFields[mir->dalvikInsn.vB]);
+            Opcode opcode = mir->dalvikInsn.opcode;
 
-            isVolatile = (mir->dalvikInsn.opcode == OP_SPUT_VOLATILE) ||
-                         (mir->dalvikInsn.opcode == OP_SPUT_OBJECT_VOLATILE) ||
+            isVolatile = (opcode == OP_SPUT_VOLATILE) ||
+                         (opcode == OP_SPUT_VOLATILE_JUMBO) ||
+                         (opcode == OP_SPUT_OBJECT_VOLATILE) ||
+                         (opcode == OP_SPUT_OBJECT_VOLATILE_JUMBO) ||
                          dvmIsVolatileField((Field *) fieldPtr);
 
-            isSputObject = (mir->dalvikInsn.opcode == OP_SPUT_OBJECT) ||
-                           (mir->dalvikInsn.opcode == OP_SPUT_OBJECT_JUMBO) ||
-                           (mir->dalvikInsn.opcode == OP_SPUT_OBJECT_VOLATILE);
+            isSputObject = (opcode == OP_SPUT_OBJECT) ||
+                           (opcode == OP_SPUT_OBJECT_JUMBO) ||
+                           (opcode == OP_SPUT_OBJECT_VOLATILE) ||
+                           (opcode == OP_SPUT_OBJECT_VOLATILE_JUMBO);
 
             if (fieldPtr == NULL) {
                 LOGE("Unexpected null static field");
@@ -1856,7 +1867,9 @@
             break;
         }
         case OP_SGET_WIDE_VOLATILE:
+        case OP_SGET_WIDE_VOLATILE_JUMBO:
         case OP_SPUT_WIDE_VOLATILE:
+        case OP_SPUT_WIDE_VOLATILE_JUMBO:
             genInterpSingleStep(cUnit, mir);
             break;
         default:
@@ -2367,15 +2380,19 @@
          * Wide volatiles currently handled via single step.
          * Add them here if generating in-line code.
          *     case OP_IGET_WIDE_VOLATILE:
+         *     case OP_IGET_WIDE_VOLATILE_JUMBO:
          *     case OP_IPUT_WIDE_VOLATILE:
+         *     case OP_IPUT_WIDE_VOLATILE_JUMBO:
          */
         case OP_IGET:
         case OP_IGET_VOLATILE:
+        case OP_IGET_VOLATILE_JUMBO:
         case OP_IGET_JUMBO:
         case OP_IGET_WIDE:
         case OP_IGET_WIDE_JUMBO:
         case OP_IGET_OBJECT:
         case OP_IGET_OBJECT_VOLATILE:
+        case OP_IGET_OBJECT_VOLATILE_JUMBO:
         case OP_IGET_OBJECT_JUMBO:
         case OP_IGET_BOOLEAN:
         case OP_IGET_BOOLEAN_JUMBO:
@@ -2387,11 +2404,13 @@
         case OP_IGET_SHORT_JUMBO:
         case OP_IPUT:
         case OP_IPUT_VOLATILE:
+        case OP_IPUT_VOLATILE_JUMBO:
         case OP_IPUT_JUMBO:
         case OP_IPUT_WIDE:
         case OP_IPUT_WIDE_JUMBO:
         case OP_IPUT_OBJECT:
         case OP_IPUT_OBJECT_VOLATILE:
+        case OP_IPUT_OBJECT_VOLATILE_JUMBO:
         case OP_IPUT_OBJECT_JUMBO:
         case OP_IPUT_BOOLEAN:
         case OP_IPUT_BOOLEAN_JUMBO:
@@ -2514,7 +2533,9 @@
             genIGetWide(cUnit, mir, fieldOffset);
             break;
         case OP_IGET_VOLATILE:
+        case OP_IGET_VOLATILE_JUMBO:
         case OP_IGET_OBJECT_VOLATILE:
+        case OP_IGET_OBJECT_VOLATILE_JUMBO:
             isVolatile = true;
             // NOTE: intentional fallthrough
         case OP_IGET:
@@ -2548,7 +2569,9 @@
             genIPut(cUnit, mir, kWord, fieldOffset, false, isVolatile);
             break;
         case OP_IPUT_VOLATILE:
+        case OP_IPUT_VOLATILE_JUMBO:
         case OP_IPUT_OBJECT_VOLATILE:
+        case OP_IPUT_OBJECT_VOLATILE_JUMBO:
             isVolatile = true;
             // NOTE: intentional fallthrough
         case OP_IPUT_OBJECT:
@@ -2556,7 +2579,9 @@
             genIPut(cUnit, mir, kWord, fieldOffset, true, isVolatile);
             break;
         case OP_IGET_WIDE_VOLATILE:
+        case OP_IGET_WIDE_VOLATILE_JUMBO:
         case OP_IPUT_WIDE_VOLATILE:
+        case OP_IPUT_WIDE_VOLATILE_JUMBO:
             genInterpSingleStep(cUnit, mir);
             break;
         default:
@@ -3335,10 +3360,8 @@
             genTrap(cUnit, mir->offset, pcrLabel);
             break;
         }
-        case OP_INVOKE_OBJECT_INIT_RANGE: {
-            genInterpSingleStep(cUnit, mir);
-            break;
-        }
+        case OP_INVOKE_OBJECT_INIT_JUMBO:
+        case OP_INVOKE_OBJECT_INIT_RANGE:
         case OP_FILLED_NEW_ARRAY:
         case OP_FILLED_NEW_ARRAY_RANGE:
         case OP_FILLED_NEW_ARRAY_JUMBO: {
