summaryrefslogtreecommitdiff
path: root/src/compiler/codegen/MethodCodegenDriver.cc
diff options
context:
space:
mode:
author Brian Carlstrom <bdc@google.com> 2012-03-19 22:34:31 -0700
committer Brian Carlstrom <bdc@google.com> 2012-03-19 22:59:13 -0700
commitf582258f0e296223a091fd64231a203ad71e9649 (patch)
tree23049122f075220421803a1745cf634337360a40 /src/compiler/codegen/MethodCodegenDriver.cc
parenta7c12688da57ea052e127776ad3043ca5079488d (diff)
oat file patching
Change-Id: Idbbdf19f3a77498d79d043fd33ca12ce39cafbb7
Diffstat (limited to 'src/compiler/codegen/MethodCodegenDriver.cc')
-rw-r--r--src/compiler/codegen/MethodCodegenDriver.cc10
1 files changed, 7 insertions, 3 deletions
diff --git a/src/compiler/codegen/MethodCodegenDriver.cc b/src/compiler/codegen/MethodCodegenDriver.cc
index 59aa4caec4..8f4df4714f 100644
--- a/src/compiler/codegen/MethodCodegenDriver.cc
+++ b/src/compiler/codegen/MethodCodegenDriver.cc
@@ -55,6 +55,7 @@ RegLocation oatGetReturn(CompilationUnit* cUnit, bool isFloat)
void genInvoke(CompilationUnit* cUnit, MIR* mir, InvokeType type, bool isRange)
{
DecodedInstruction* dInsn = &mir->dalvikInsn;
+ InvokeType originalType = type; // avoiding mutation by ComputeInvokeInfo
int callState = 0;
LIR* nullCk;
LIR** pNullCk = NULL;
@@ -103,16 +104,19 @@ void genInvoke(CompilationUnit* cUnit, MIR* mir, InvokeType type, bool isRange)
if (!isRange) {
callState = genDalvikArgsNoRange(cUnit, mir, dInsn, callState, pNullCk,
nextCallInsn, dexMethodIdx,
- vtableIdx, directCode, directMethod, skipThis);
+ vtableIdx, directCode, directMethod,
+ originalType, skipThis);
} else {
callState = genDalvikArgsRange(cUnit, mir, dInsn, callState, pNullCk,
nextCallInsn, dexMethodIdx, vtableIdx,
- directCode, directMethod, skipThis);
+ directCode, directMethod, originalType,
+ skipThis);
}
// Finish up any of the call sequence not interleaved in arg loading
while (callState >= 0) {
callState = nextCallInsn(cUnit, mir, callState, dexMethodIdx,
- vtableIdx, directCode, directMethod);
+ vtableIdx, directCode, directMethod,
+ originalType);
}
if (DISPLAY_MISSING_TARGETS) {
genShowTarget(cUnit);