summaryrefslogtreecommitdiffstats
path: root/compiler/common_compiler_test.h
diff options
context:
space:
mode:
authorAndreas Gampe <agampe@google.com>2014-03-10 13:37:40 -0700
committerAndreas Gampe <agampe@google.com>2014-03-12 15:16:12 -0700
commit36fea8dd490ab6439f391b8cd7f366c59f026fd2 (patch)
tree6720290f54717f7cee1116103cd1839147936146 /compiler/common_compiler_test.h
parent63dcdff34c40a64df6939ea5bba71813abd2acd3 (diff)
downloadart-36fea8dd490ab6439f391b8cd7f366c59f026fd2.zip
art-36fea8dd490ab6439f391b8cd7f366c59f026fd2.tar.gz
art-36fea8dd490ab6439f391b8cd7f366c59f026fd2.tar.bz2
Fixing structure of native frame for Generic JNI
This changes the layout of the callee-save frame used in generic JNI to be consistent with the JNI compiler, that is, the SIRT is inline (above the method reference). Now the location of the "this" object is consistent. Change-Id: Ibad0882680712cb640b4c70ada0229ef7cf4e62c
Diffstat (limited to 'compiler/common_compiler_test.h')
-rw-r--r--compiler/common_compiler_test.h9
1 files changed, 8 insertions, 1 deletions
diff --git a/compiler/common_compiler_test.h b/compiler/common_compiler_test.h
index def7b68..d28b0fe 100644
--- a/compiler/common_compiler_test.h
+++ b/compiler/common_compiler_test.h
@@ -219,8 +219,15 @@ class CommonCompilerTest : public CommonRuntimeTest {
} else {
const void* method_code = GetQuickGenericJniTrampoline();
mirror::ArtMethod* callee_save_method = runtime_->GetCalleeSaveMethod(Runtime::kRefsAndArgs);
+
+ // Compute Sirt size, as Sirt goes into frame
+ MethodHelper mh(method);
+ uint32_t sirt_refs = mh.GetNumberOfReferenceArgsWithoutReceiver() + 1;
+ uint32_t sirt_size = StackIndirectReferenceTable::SizeOf(sirt_refs);
+
OatFile::OatMethod oat_method = CreateOatMethod(method_code,
- callee_save_method->GetFrameSizeInBytes(),
+ callee_save_method->GetFrameSizeInBytes() +
+ sirt_size,
callee_save_method->GetCoreSpillMask(),
callee_save_method->GetFpSpillMask(),
nullptr,