aboutsummaryrefslogtreecommitdiff
path: root/vm/compiler/codegen/arm/CodegenDriver.c
diff options
context:
space:
mode:
authorbuzbee <buzbee@google.com>2010-09-09 14:07:01 -0700
committerbuzbee <buzbee@google.com>2010-09-09 16:44:56 -0700
commit42feff164d6f4e2139e38f1557cf1455cb871771 (patch)
tree14e9376b050a21f057603066cd39adbf58c544e5 /vm/compiler/codegen/arm/CodegenDriver.c
parentd394371bd84bacc51e96e2d2eacb8549d9110b1e (diff)
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: I8b1e9e6be075012c7c174728b77c7a76884975b7
Diffstat (limited to 'vm/compiler/codegen/arm/CodegenDriver.c')
-rw-r--r--vm/compiler/codegen/arm/CodegenDriver.c24
1 files changed, 5 insertions, 19 deletions
diff --git a/vm/compiler/codegen/arm/CodegenDriver.c b/vm/compiler/codegen/arm/CodegenDriver.c
index a04371ea1..0b6e433e6 100644
--- a/vm/compiler/codegen/arm/CodegenDriver.c
+++ b/vm/compiler/codegen/arm/CodegenDriver.c
@@ -2328,24 +2328,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:
@@ -2355,16 +2351,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);