diff --git a/src/compiler/codegen/arm/MethodCodegenDriver.cc b/src/compiler/codegen/arm/MethodCodegenDriver.cc
index 9e026be..80118d8 100644
--- a/src/compiler/codegen/arm/MethodCodegenDriver.cc
+++ b/src/compiler/codegen/arm/MethodCodegenDriver.cc
@@ -187,8 +187,7 @@
     oatFlushAllRegs(cUnit);
     if (SLOW_FIELD_PATH || field == NULL) {
         // Slow path
-        LOG(INFO) << "Field " << fieldNameFromIndex(cUnit->method, fieldIdx)
-            << " unresolved at compile time";
+        warnIfUnresolved(cUnit, fieldIdx, field);
         int funcOffset = isObject ? OFFSETOF_MEMBER(Thread, pSetObjStatic)
                                   : OFFSETOF_MEMBER(Thread, pSet32Static);
         loadWordDisp(cUnit, rSELF, funcOffset, rLR);
@@ -252,8 +251,7 @@
     bool isVolatile = false;
 #endif
     if (SLOW_FIELD_PATH || field == NULL || isVolatile) {
-        LOG(INFO) << "Field " << fieldNameFromIndex(cUnit->method, fieldIdx)
-            << " unresolved at compile time";
+        warnIfUnresolved(cUnit, fieldIdx, field);
         loadWordDisp(cUnit, rSELF, OFFSETOF_MEMBER(Thread, pSet64Static), rLR);
         loadConstant(cUnit, r0, mir->dalvikInsn.vB);
         loadCurrMethodDirect(cUnit, r1);
@@ -304,8 +302,7 @@
 #endif
     oatFlushAllRegs(cUnit);
     if (SLOW_FIELD_PATH || field == NULL || isVolatile) {
-        LOG(INFO) << "Field " << fieldNameFromIndex(cUnit->method, fieldIdx)
-            << " unresolved at compile time";
+        warnIfUnresolved(cUnit, fieldIdx, field);
         loadWordDisp(cUnit, rSELF, OFFSETOF_MEMBER(Thread, pGet64Static), rLR);
         loadConstant(cUnit, r0, mir->dalvikInsn.vB);
         loadCurrMethodDirect(cUnit, r1);
@@ -354,9 +351,8 @@
                      (mir->dalvikInsn.opcode == OP_SGET_OBJECT_VOLATILE));
     oatFlushAllRegs(cUnit);
     if (SLOW_FIELD_PATH || field == NULL) {
-        LOG(INFO) << "Field " << fieldNameFromIndex(cUnit->method, fieldIdx)
-            << " unresolved at compile time";
         // Slow path
+        warnIfUnresolved(cUnit, fieldIdx, field);
         int funcOffset = isObject ? OFFSETOF_MEMBER(Thread, pGetObjStatic)
                                   : OFFSETOF_MEMBER(Thread, pGet32Static);
         loadWordDisp(cUnit, rSELF, funcOffset, rLR);
diff --git a/src/compiler/codegen/arm/Thumb2/Gen.cc b/src/compiler/codegen/arm/Thumb2/Gen.cc
index 173aa64..5ef7687 100644
--- a/src/compiler/codegen/arm/Thumb2/Gen.cc
+++ b/src/compiler/codegen/arm/Thumb2/Gen.cc
@@ -37,6 +37,15 @@
     return class_name + "." + field_name;
 }
 
+void warnIfUnresolved(CompilationUnit* cUnit, int fieldIdx, Field* field) {
+  if (field == NULL) {
+    LOG(INFO) << "Field " << fieldNameFromIndex(cUnit->method, fieldIdx)
+              << " unresolved at compile time";
+  } else {
+    // We also use the slow path for wide volatile fields.
+  }
+}
+
 /*
  * Construct an s4 from two consecutive half-words of switch data.
  * This needs to check endianness because the DEX optimizer only swaps
@@ -403,12 +412,11 @@
  * Helper function for Iget/put when field not resolved at compile time.
  * Will trash call temps and return with the field offset in r0.
  */
-STATIC void getFieldOffset(CompilationUnit* cUnit, MIR* mir)
+STATIC void getFieldOffset(CompilationUnit* cUnit, MIR* mir, Field* fieldPtr)
 {
     int fieldIdx = mir->dalvikInsn.vC;
     oatFlushAllRegs(cUnit);
-    LOG(INFO) << "Field " << fieldNameFromIndex(cUnit->method, fieldIdx)
-        << " unresolved at compile time";
+    warnIfUnresolved(cUnit, fieldIdx, fieldPtr);
     oatLockCallTemps(cUnit);  // Explicit register usage
     loadCurrMethodDirect(cUnit, r1);              // arg1 <= Method*
     loadWordDisp(cUnit, r1,
@@ -447,7 +455,7 @@
     RegLocation rlResult;
     RegisterClass regClass = oatRegClassBySize(size);
     if (SLOW_FIELD_PATH || fieldPtr == NULL) {
-        getFieldOffset(cUnit, mir);
+        getFieldOffset(cUnit, mir, fieldPtr);
         // Field offset in r0
         rlObj = loadValue(cUnit, rlObj, kCoreReg);
         rlResult = oatEvalLoc(cUnit, rlDest, regClass, true);
@@ -481,7 +489,7 @@
         GetResolvedField(mir->dalvikInsn.vC);
     RegisterClass regClass = oatRegClassBySize(size);
     if (SLOW_FIELD_PATH || fieldPtr == NULL) {
-        getFieldOffset(cUnit, mir);
+        getFieldOffset(cUnit, mir, fieldPtr);
         // Field offset in r0
         rlObj = loadValue(cUnit, rlObj, kCoreReg);
         rlSrc = loadValue(cUnit, rlSrc, regClass);
@@ -525,7 +533,7 @@
     bool isVolatile = false;
 #endif
     if ((fieldPtr == NULL) || isVolatile) {
-        getFieldOffset(cUnit, mir);
+        getFieldOffset(cUnit, mir, fieldPtr);
         // Field offset in r0
         rlObj = loadValue(cUnit, rlObj, kCoreReg);
         rlResult = oatEvalLoc(cUnit, rlDest, kAnyReg, true);
@@ -563,7 +571,7 @@
     bool isVolatile = false;
 #endif
     if ((fieldPtr == NULL) || isVolatile) {
-        getFieldOffset(cUnit, mir);
+        getFieldOffset(cUnit, mir, fieldPtr);
         // Field offset in r0
         rlObj = loadValue(cUnit, rlObj, kCoreReg);
         rlSrc = loadValueWide(cUnit, rlSrc, kAnyReg);
