diff options
| author | buzbee <buzbee@google.com> | 2010-09-09 14:07:01 -0700 |
|---|---|---|
| committer | buzbee <buzbee@google.com> | 2010-09-09 16:44:56 -0700 |
| commit | 42feff164d6f4e2139e38f1557cf1455cb871771 (patch) | |
| tree | 14e9376b050a21f057603066cd39adbf58c544e5 /vm/compiler/codegen/arm/CodegenDriver.c | |
| parent | d394371bd84bacc51e96e2d2eacb8549d9110b1e (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.c | 24 |
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); |
