From 3272e2fe6bb8cc3719e974634b6798e3cdee0593 Mon Sep 17 00:00:00 2001 From: buzbee Date: Thu, 9 Sep 2010 14:07:01 -0700 Subject: JIT: Fix inconsistent handling of sub-word instance git/put The portable interpreter and fast interpreter use 32-bit accesses for all sub-word scalars. The JIT generated code to tailor the access to the data size. It doesn't matter which approach is taken, but all interpreters & JIT must be consistent. Changing the JIT to use 32-bit accesses for all sub-word instance scalars. Fix for Issue 2973137 Change-Id: I6108ccc98c1b43974373764913d5f8d0d8723cd4 --- vm/compiler/codegen/arm/CodegenDriver.c | 24 +++++------------------- 1 file changed, 5 insertions(+), 19 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 d0ef80847..e298f3d46 100644 --- a/vm/compiler/codegen/arm/CodegenDriver.c +++ b/vm/compiler/codegen/arm/CodegenDriver.c @@ -2321,24 +2321,20 @@ static bool handleFmt22c(CompilationUnit *cUnit, MIR *mir) // NOTE: intentional fallthrough case OP_IGET: case OP_IGET_OBJECT: - genIGet(cUnit, mir, kWord, fieldOffset, isVolatile); - break; case OP_IGET_BOOLEAN: - genIGet(cUnit, mir, kUnsignedByte, fieldOffset, isVolatile); - break; case OP_IGET_BYTE: - genIGet(cUnit, mir, kSignedByte, fieldOffset, isVolatile); - break; case OP_IGET_CHAR: - genIGet(cUnit, mir, kUnsignedHalf, fieldOffset, isVolatile); - break; case OP_IGET_SHORT: - genIGet(cUnit, mir, kSignedHalf, fieldOffset, isVolatile); + genIGet(cUnit, mir, kWord, fieldOffset, isVolatile); break; case OP_IPUT_WIDE: genIPutWide(cUnit, mir, fieldOffset); break; case OP_IPUT: + case OP_IPUT_SHORT: + case OP_IPUT_CHAR: + case OP_IPUT_BYTE: + case OP_IPUT_BOOLEAN: genIPut(cUnit, mir, kWord, fieldOffset, false, isVolatile); break; case OP_IPUT_VOLATILE: @@ -2348,16 +2344,6 @@ static bool handleFmt22c(CompilationUnit *cUnit, MIR *mir) case OP_IPUT_OBJECT: genIPut(cUnit, mir, kWord, fieldOffset, true, isVolatile); break; - case OP_IPUT_SHORT: - case OP_IPUT_CHAR: - genIPut(cUnit, mir, kUnsignedHalf, fieldOffset, false, isVolatile); - break; - case OP_IPUT_BYTE: - genIPut(cUnit, mir, kSignedByte, fieldOffset, false, isVolatile); - break; - case OP_IPUT_BOOLEAN: - genIPut(cUnit, mir, kUnsignedByte, fieldOffset, false, isVolatile); - break; case OP_IGET_WIDE_VOLATILE: case OP_IPUT_WIDE_VOLATILE: genInterpSingleStep(cUnit, mir); -- cgit v1.2.3