GC Card marking fix for SPUT_OBJECT - use correct object head

Change-Id: I8b84a4f1e1690f5b62de7404ea6ede00317848bb
diff --git a/vm/compiler/codegen/arm/CodegenDriver.c b/vm/compiler/codegen/arm/CodegenDriver.c
index 7068662..657533b 100644
--- a/vm/compiler/codegen/arm/CodegenDriver.c
+++ b/vm/compiler/codegen/arm/CodegenDriver.c
@@ -1549,20 +1549,20 @@
 
             rlSrc = dvmCompilerGetSrc(cUnit, mir, 0);
             rlSrc = loadValue(cUnit, rlSrc, kAnyReg);
-            loadConstant(cUnit, tReg,  (int) fieldPtr + valOffset);
+            loadConstant(cUnit, tReg,  (int) fieldPtr);
             if (isSputObject) {
                 objHead = dvmCompilerAllocTemp(cUnit);
-                loadConstant(cUnit, objHead, (intptr_t)method->clazz);
+                loadWordDisp(cUnit, tReg, offsetof(Field, clazz), objHead);
             }
             HEAP_ACCESS_SHADOW(true);
-            storeWordDisp(cUnit, tReg, 0 ,rlSrc.lowReg);
+            storeWordDisp(cUnit, tReg, valOffset ,rlSrc.lowReg);
             dvmCompilerFreeTemp(cUnit, tReg);
             HEAP_ACCESS_SHADOW(false);
             if (isVolatile) {
                 dvmCompilerGenMemBarrier(cUnit);
             }
             if (isSputObject) {
-                /* NOTE: marking card based object head */
+                /* NOTE: marking card based sfield->clazz */
                 markCard(cUnit, rlSrc.lowReg, objHead);
                 dvmCompilerFreeTemp(cUnit, objHead);
             }