summaryrefslogtreecommitdiff
path: root/src/compiler/codegen/arm/MethodCodegenDriver.cc
diff options
context:
space:
mode:
author buzbee <buzbee@google.com> 2011-09-20 17:10:57 -0700
committer buzbee <buzbee@google.com> 2011-09-20 20:40:34 -0700
commit03fa263ba90e9f6b11231576c6b9cc434e67141d (patch)
treebcf4970d1f845f99b1df9133b85270e8eb284aca /src/compiler/codegen/arm/MethodCodegenDriver.cc
parent4a2b41793d18d402286ae37e9de4fd392bc75a08 (diff)
Rework type & size inference, literal usage
Fixes a bug in the old type inference mechanism (wasn't properly propogating type info across Phi & move nodes). Combined type and size inferences passes. Fixed long-standing bug in the code to load a special double-precision immediate (would have been extremely difficult to hit this in the field). Improved loading floating point immediates. Change-Id: I1ec72edc3b25525f14d965089f8952d4f0294942
Diffstat (limited to 'src/compiler/codegen/arm/MethodCodegenDriver.cc')
-rw-r--r--src/compiler/codegen/arm/MethodCodegenDriver.cc8
1 files changed, 4 insertions, 4 deletions
diff --git a/src/compiler/codegen/arm/MethodCodegenDriver.cc b/src/compiler/codegen/arm/MethodCodegenDriver.cc
index 0af213f6fc..8dc388c7e3 100644
--- a/src/compiler/codegen/arm/MethodCodegenDriver.cc
+++ b/src/compiler/codegen/arm/MethodCodegenDriver.cc
@@ -1182,10 +1182,10 @@ static bool compileDalvikInstruction(CompilationUnit* cUnit, MIR* mir,
case OP_CONST_WIDE_16:
case OP_CONST_WIDE_32:
- rlResult = oatEvalLoc(cUnit, rlDest, kCoreReg, true);
- loadConstantNoClobber(cUnit, rlResult.lowReg, mir->dalvikInsn.vB);
- //TUNING: do high separately to avoid load dependency
- opRegRegImm(cUnit, kOpAsr, rlResult.highReg, rlResult.lowReg, 31);
+ rlResult = oatEvalLoc(cUnit, rlDest, kAnyReg, true);
+ loadConstantValueWide(cUnit, rlResult.lowReg, rlResult.highReg,
+ mir->dalvikInsn.vB,
+ (mir->dalvikInsn.vB & 0x80000000) ? -1 : 0);
storeValueWide(cUnit, rlDest, rlResult);
break;