summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Treehugger Robot <treehugger-gerrit@google.com> 2017-09-13 11:28:14 +0000
committer Gerrit Code Review <noreply-gerritcodereview@google.com> 2017-09-13 11:28:14 +0000
commit640a32f7d7ed4f4720282c63e4aa5ab62dbcd9ee (patch)
tree0acf91737b29f2c4659968478e0946c5d36afe9f
parent857a1605b93e85e75f3dcb8cec8446f19dbf9b70 (diff)
parenta710d91a57c5c7de0f448c2dbfaa24cac53b52f9 (diff)
Merge "ART: Pass current Thread* to Jit::ShouldUsePriorityThreadWeight()."
-rw-r--r--runtime/interpreter/mterp/arm/entry.S1
-rw-r--r--runtime/interpreter/mterp/arm64/entry.S1
-rw-r--r--runtime/interpreter/mterp/mips/entry.S3
-rw-r--r--runtime/interpreter/mterp/mips64/entry.S1
-rw-r--r--runtime/interpreter/mterp/mterp.cc8
-rw-r--r--runtime/interpreter/mterp/out/mterp_arm.S1
-rw-r--r--runtime/interpreter/mterp/out/mterp_arm64.S1
-rw-r--r--runtime/interpreter/mterp/out/mterp_mips.S3
-rw-r--r--runtime/interpreter/mterp/out/mterp_mips64.S2
-rw-r--r--runtime/interpreter/mterp/out/mterp_x86.S2
-rw-r--r--runtime/interpreter/mterp/out/mterp_x86_64.S10
-rw-r--r--runtime/interpreter/mterp/x86/entry.S2
-rw-r--r--runtime/interpreter/mterp/x86_64/entry.S3
-rw-r--r--runtime/interpreter/mterp/x86_64/footer.S2
-rw-r--r--runtime/interpreter/mterp/x86_64/header.S5
-rw-r--r--runtime/jit/jit.cc7
-rw-r--r--runtime/jit/jit.h2
17 files changed, 37 insertions, 17 deletions
diff --git a/runtime/interpreter/mterp/arm/entry.S b/runtime/interpreter/mterp/arm/entry.S
index e53c0544c6..ce14b548d0 100644
--- a/runtime/interpreter/mterp/arm/entry.S
+++ b/runtime/interpreter/mterp/arm/entry.S
@@ -67,6 +67,7 @@ ENTRY ExecuteMterpImpl
/* Set up for backwards branches & osr profiling */
ldr r0, [rFP, #OFF_FP_METHOD]
add r1, rFP, #OFF_FP_SHADOWFRAME
+ mov r2, rSELF
bl MterpSetUpHotnessCountdown
mov rPROFILE, r0 @ Starting hotness countdown to rPROFILE
diff --git a/runtime/interpreter/mterp/arm64/entry.S b/runtime/interpreter/mterp/arm64/entry.S
index 441c1a1e88..73c5a88e5f 100644
--- a/runtime/interpreter/mterp/arm64/entry.S
+++ b/runtime/interpreter/mterp/arm64/entry.S
@@ -60,6 +60,7 @@ ExecuteMterpImpl:
/* Set up for backwards branches & osr profiling */
ldr x0, [xFP, #OFF_FP_METHOD]
add x1, xFP, #OFF_FP_SHADOWFRAME
+ mov x2, xSELF
bl MterpSetUpHotnessCountdown
mov wPROFILE, w0 // Starting hotness countdown to xPROFILE
diff --git a/runtime/interpreter/mterp/mips/entry.S b/runtime/interpreter/mterp/mips/entry.S
index c806a679b9..f617a4d08b 100644
--- a/runtime/interpreter/mterp/mips/entry.S
+++ b/runtime/interpreter/mterp/mips/entry.S
@@ -63,7 +63,8 @@ ExecuteMterpImpl:
/* Set up for backwards branches & osr profiling */
lw a0, OFF_FP_METHOD(rFP)
addu a1, rFP, OFF_FP_SHADOWFRAME
- JAL(MterpSetUpHotnessCountdown) # (method, shadow_frame)
+ move a2, rSELF
+ JAL(MterpSetUpHotnessCountdown) # (method, shadow_frame, self)
move rPROFILE, v0 # Starting hotness countdown to rPROFILE
/* start executing the instruction at rPC */
diff --git a/runtime/interpreter/mterp/mips64/entry.S b/runtime/interpreter/mterp/mips64/entry.S
index cc48d45298..5536966be2 100644
--- a/runtime/interpreter/mterp/mips64/entry.S
+++ b/runtime/interpreter/mterp/mips64/entry.S
@@ -82,6 +82,7 @@ ExecuteMterpImpl:
/* Set up for backwards branches & osr profiling */
ld a0, OFF_FP_METHOD(rFP)
daddu a1, rFP, OFF_FP_SHADOWFRAME
+ move a2, rSELF
jal MterpSetUpHotnessCountdown
move rPROFILE, v0 # Starting hotness countdown to rPROFILE
diff --git a/runtime/interpreter/mterp/mterp.cc b/runtime/interpreter/mterp/mterp.cc
index b8a7a2ad3f..6c2475391b 100644
--- a/runtime/interpreter/mterp/mterp.cc
+++ b/runtime/interpreter/mterp/mterp.cc
@@ -888,7 +888,9 @@ extern "C" mirror::Object* artIGetObjectFromMterp(mirror::Object* obj,
* to the full instrumentation via MterpAddHotnessBatch. Called once on entry to the method,
* and regenerated following batch updates.
*/
-extern "C" ssize_t MterpSetUpHotnessCountdown(ArtMethod* method, ShadowFrame* shadow_frame)
+extern "C" ssize_t MterpSetUpHotnessCountdown(ArtMethod* method,
+ ShadowFrame* shadow_frame,
+ Thread* self)
REQUIRES_SHARED(Locks::mutator_lock_) {
uint16_t hotness_count = method->GetCounter();
int32_t countdown_value = jit::kJitHotnessDisabled;
@@ -906,7 +908,7 @@ extern "C" ssize_t MterpSetUpHotnessCountdown(ArtMethod* method, ShadowFrame* sh
} else {
countdown_value = jit::kJitCheckForOSR;
}
- if (jit::Jit::ShouldUsePriorityThreadWeight()) {
+ if (jit::Jit::ShouldUsePriorityThreadWeight(self)) {
int32_t priority_thread_weight = jit->PriorityThreadWeight();
countdown_value = std::min(countdown_value, countdown_value / priority_thread_weight);
}
@@ -935,7 +937,7 @@ extern "C" ssize_t MterpAddHotnessBatch(ArtMethod* method,
int16_t count = shadow_frame->GetCachedHotnessCountdown() - shadow_frame->GetHotnessCountdown();
jit->AddSamples(self, method, count, /*with_backedges*/ true);
}
- return MterpSetUpHotnessCountdown(method, shadow_frame);
+ return MterpSetUpHotnessCountdown(method, shadow_frame, self);
}
extern "C" size_t MterpMaybeDoOnStackReplacement(Thread* self,
diff --git a/runtime/interpreter/mterp/out/mterp_arm.S b/runtime/interpreter/mterp/out/mterp_arm.S
index e2b693f269..d6a27b8fc9 100644
--- a/runtime/interpreter/mterp/out/mterp_arm.S
+++ b/runtime/interpreter/mterp/out/mterp_arm.S
@@ -386,6 +386,7 @@ ENTRY ExecuteMterpImpl
/* Set up for backwards branches & osr profiling */
ldr r0, [rFP, #OFF_FP_METHOD]
add r1, rFP, #OFF_FP_SHADOWFRAME
+ mov r2, rSELF
bl MterpSetUpHotnessCountdown
mov rPROFILE, r0 @ Starting hotness countdown to rPROFILE
diff --git a/runtime/interpreter/mterp/out/mterp_arm64.S b/runtime/interpreter/mterp/out/mterp_arm64.S
index ef5a4daa51..3d05996521 100644
--- a/runtime/interpreter/mterp/out/mterp_arm64.S
+++ b/runtime/interpreter/mterp/out/mterp_arm64.S
@@ -401,6 +401,7 @@ ExecuteMterpImpl:
/* Set up for backwards branches & osr profiling */
ldr x0, [xFP, #OFF_FP_METHOD]
add x1, xFP, #OFF_FP_SHADOWFRAME
+ mov x2, xSELF
bl MterpSetUpHotnessCountdown
mov wPROFILE, w0 // Starting hotness countdown to xPROFILE
diff --git a/runtime/interpreter/mterp/out/mterp_mips.S b/runtime/interpreter/mterp/out/mterp_mips.S
index 636289798c..144c8e5165 100644
--- a/runtime/interpreter/mterp/out/mterp_mips.S
+++ b/runtime/interpreter/mterp/out/mterp_mips.S
@@ -797,7 +797,8 @@ ExecuteMterpImpl:
/* Set up for backwards branches & osr profiling */
lw a0, OFF_FP_METHOD(rFP)
addu a1, rFP, OFF_FP_SHADOWFRAME
- JAL(MterpSetUpHotnessCountdown) # (method, shadow_frame)
+ move a2, rSELF
+ JAL(MterpSetUpHotnessCountdown) # (method, shadow_frame, self)
move rPROFILE, v0 # Starting hotness countdown to rPROFILE
/* start executing the instruction at rPC */
diff --git a/runtime/interpreter/mterp/out/mterp_mips64.S b/runtime/interpreter/mterp/out/mterp_mips64.S
index bc0d90c7cb..28f1887539 100644
--- a/runtime/interpreter/mterp/out/mterp_mips64.S
+++ b/runtime/interpreter/mterp/out/mterp_mips64.S
@@ -383,6 +383,7 @@ ExecuteMterpImpl:
/* Set up for backwards branches & osr profiling */
ld a0, OFF_FP_METHOD(rFP)
daddu a1, rFP, OFF_FP_SHADOWFRAME
+ move a2, rSELF
jal MterpSetUpHotnessCountdown
move rPROFILE, v0 # Starting hotness countdown to rPROFILE
@@ -3764,7 +3765,6 @@ artMterpAsmInstructionStart = .L_op_nop
GOTO_OPCODE v0 # jump to next instruction
-
/* ------------------------------ */
.balign 128
.L_op_float_to_double: /* 0x89 */
diff --git a/runtime/interpreter/mterp/out/mterp_x86.S b/runtime/interpreter/mterp/out/mterp_x86.S
index 21d9671f8b..169501d563 100644
--- a/runtime/interpreter/mterp/out/mterp_x86.S
+++ b/runtime/interpreter/mterp/out/mterp_x86.S
@@ -387,6 +387,8 @@ SYMBOL(ExecuteMterpImpl):
movl %eax, OUT_ARG0(%esp)
leal OFF_FP_SHADOWFRAME(rFP), %ecx
movl %ecx, OUT_ARG1(%esp)
+ movl rSELF, %eax
+ movl %eax, OUT_ARG2(%esp)
call SYMBOL(MterpSetUpHotnessCountdown)
/* Starting ibase */
diff --git a/runtime/interpreter/mterp/out/mterp_x86_64.S b/runtime/interpreter/mterp/out/mterp_x86_64.S
index b5a5ae5963..b643072dde 100644
--- a/runtime/interpreter/mterp/out/mterp_x86_64.S
+++ b/runtime/interpreter/mterp/out/mterp_x86_64.S
@@ -198,9 +198,12 @@ unspecified registers or condition codes.
* restore it in such cases also.
*
*/
+.macro REFRESH_IBASE_REG self_reg
+ movq THREAD_CURRENT_IBASE_OFFSET(\self_reg), rIBASE
+.endm
.macro REFRESH_IBASE
movq rSELF, rIBASE
- movq THREAD_CURRENT_IBASE_OFFSET(rIBASE), rIBASE
+ REFRESH_IBASE_REG rIBASE
.endm
/*
@@ -364,9 +367,10 @@ SYMBOL(ExecuteMterpImpl):
/* Starting ibase */
movq IN_ARG0, rSELF
- REFRESH_IBASE
+ REFRESH_IBASE_REG IN_ARG0
/* Set up for backwards branches & osr profiling */
+ movq IN_ARG0, OUT_ARG2 /* Set up OUT_ARG2 before clobbering IN_ARG0 */
movq OFF_FP_METHOD(rFP), OUT_ARG0
leaq OFF_FP_SHADOWFRAME(rFP), OUT_ARG1
call SYMBOL(MterpSetUpHotnessCountdown)
@@ -11908,7 +11912,7 @@ MterpCommonTakenBranch:
.L_resume_backward_branch:
movq rSELF, %rax
testl $(THREAD_SUSPEND_OR_CHECKPOINT_REQUEST), THREAD_FLAGS_OFFSET(%rax)
- REFRESH_IBASE
+ REFRESH_IBASE_REG %rax
leaq (rPC, rINSTq, 2), rPC
FETCH_INST
jnz .L_suspend_request_pending
diff --git a/runtime/interpreter/mterp/x86/entry.S b/runtime/interpreter/mterp/x86/entry.S
index 384dd9a5bb..34adf53b99 100644
--- a/runtime/interpreter/mterp/x86/entry.S
+++ b/runtime/interpreter/mterp/x86/entry.S
@@ -69,6 +69,8 @@ SYMBOL(ExecuteMterpImpl):
movl %eax, OUT_ARG0(%esp)
leal OFF_FP_SHADOWFRAME(rFP), %ecx
movl %ecx, OUT_ARG1(%esp)
+ movl rSELF, %eax
+ movl %eax, OUT_ARG2(%esp)
call SYMBOL(MterpSetUpHotnessCountdown)
/* Starting ibase */
diff --git a/runtime/interpreter/mterp/x86_64/entry.S b/runtime/interpreter/mterp/x86_64/entry.S
index d992956769..0f969eb79f 100644
--- a/runtime/interpreter/mterp/x86_64/entry.S
+++ b/runtime/interpreter/mterp/x86_64/entry.S
@@ -63,9 +63,10 @@ SYMBOL(ExecuteMterpImpl):
/* Starting ibase */
movq IN_ARG0, rSELF
- REFRESH_IBASE
+ REFRESH_IBASE_REG IN_ARG0
/* Set up for backwards branches & osr profiling */
+ movq IN_ARG0, OUT_ARG2 /* Set up OUT_ARG2 before clobbering IN_ARG0 */
movq OFF_FP_METHOD(rFP), OUT_ARG0
leaq OFF_FP_SHADOWFRAME(rFP), OUT_ARG1
call SYMBOL(MterpSetUpHotnessCountdown)
diff --git a/runtime/interpreter/mterp/x86_64/footer.S b/runtime/interpreter/mterp/x86_64/footer.S
index ed5e5eabfa..ac6cd19f4e 100644
--- a/runtime/interpreter/mterp/x86_64/footer.S
+++ b/runtime/interpreter/mterp/x86_64/footer.S
@@ -152,7 +152,7 @@ MterpCommonTakenBranch:
.L_resume_backward_branch:
movq rSELF, %rax
testl $$(THREAD_SUSPEND_OR_CHECKPOINT_REQUEST), THREAD_FLAGS_OFFSET(%rax)
- REFRESH_IBASE
+ REFRESH_IBASE_REG %rax
leaq (rPC, rINSTq, 2), rPC
FETCH_INST
jnz .L_suspend_request_pending
diff --git a/runtime/interpreter/mterp/x86_64/header.S b/runtime/interpreter/mterp/x86_64/header.S
index 7699fc4dd7..f229e84eb8 100644
--- a/runtime/interpreter/mterp/x86_64/header.S
+++ b/runtime/interpreter/mterp/x86_64/header.S
@@ -191,9 +191,12 @@ unspecified registers or condition codes.
* restore it in such cases also.
*
*/
+.macro REFRESH_IBASE_REG self_reg
+ movq THREAD_CURRENT_IBASE_OFFSET(\self_reg), rIBASE
+.endm
.macro REFRESH_IBASE
movq rSELF, rIBASE
- movq THREAD_CURRENT_IBASE_OFFSET(rIBASE), rIBASE
+ REFRESH_IBASE_REG rIBASE
.endm
/*
diff --git a/runtime/jit/jit.cc b/runtime/jit/jit.cc
index 7abf52ea60..8c27bfe85e 100644
--- a/runtime/jit/jit.cc
+++ b/runtime/jit/jit.cc
@@ -144,9 +144,8 @@ JitOptions* JitOptions::CreateFromRuntimeArguments(const RuntimeArgumentMap& opt
return jit_options;
}
-bool Jit::ShouldUsePriorityThreadWeight() {
- return Runtime::Current()->InJankPerceptibleProcessState()
- && Thread::Current()->IsJitSensitiveThread();
+bool Jit::ShouldUsePriorityThreadWeight(Thread* self) {
+ return self->IsJitSensitiveThread() && Runtime::Current()->InJankPerceptibleProcessState();
}
void Jit::DumpInfo(std::ostream& os) {
@@ -653,7 +652,7 @@ void Jit::AddSamples(Thread* self, ArtMethod* method, uint16_t count, bool with_
DCHECK_LE(priority_thread_weight_, hot_method_threshold_);
int32_t starting_count = method->GetCounter();
- if (Jit::ShouldUsePriorityThreadWeight()) {
+ if (Jit::ShouldUsePriorityThreadWeight(self)) {
count *= priority_thread_weight_;
}
int32_t new_count = starting_count + count; // int32 here to avoid wrap-around;
diff --git a/runtime/jit/jit.h b/runtime/jit/jit.h
index 51e49ec489..791c3386cf 100644
--- a/runtime/jit/jit.h
+++ b/runtime/jit/jit.h
@@ -152,7 +152,7 @@ class Jit {
bool CanInvokeCompiledCode(ArtMethod* method);
// Return whether the runtime should use a priority thread weight when sampling.
- static bool ShouldUsePriorityThreadWeight();
+ static bool ShouldUsePriorityThreadWeight(Thread* self);
// If an OSR compiled version is available for `method`,
// and `dex_pc + dex_pc_offset` is an entry point of that compiled