From b78c76f88ea42e7a3b295c210ca9ee86e7290043 Mon Sep 17 00:00:00 2001 From: buzbee Date: Thu, 30 Sep 2010 19:08:20 -0700 Subject: GC Card marking fix for SPUT_OBJECT - use correct object head Change-Id: I8b84a4f1e1690f5b62de7404ea6ede00317848bb --- vm/compiler/codegen/arm/CodegenDriver.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'vm/compiler/codegen/arm/CodegenDriver.c') diff --git a/vm/compiler/codegen/arm/CodegenDriver.c b/vm/compiler/codegen/arm/CodegenDriver.c index 706866252..657533bf0 100644 --- a/vm/compiler/codegen/arm/CodegenDriver.c +++ b/vm/compiler/codegen/arm/CodegenDriver.c @@ -1549,20 +1549,20 @@ static bool handleFmt21c_Fmt31c(CompilationUnit *cUnit, MIR *mir) 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); } -- cgit v1.2.3