From 03fa263ba90e9f6b11231576c6b9cc434e67141d Mon Sep 17 00:00:00 2001 From: buzbee Date: Tue, 20 Sep 2011 17:10:57 -0700 Subject: 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 --- src/compiler/codegen/arm/MethodCodegenDriver.cc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'src/compiler/codegen/arm/MethodCodegenDriver.cc') 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; -- cgit v1.2.3-59-g8ed1b