ppc64: [baseline] replace GetSharedFunctionInfoBytecode
Change-Id: I933301cf9b81ef6a5cc5ec891611464a1e0a1e48 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3645029 Commit-Queue: Junliang Yan <junyan@redhat.com> Reviewed-by: Milad Farazmand <mfarazma@redhat.com> Cr-Commit-Position: refs/heads/main@{#80499}
This commit is contained in:
parent
f00727d2d0
commit
26d0ca4112
@ -65,7 +65,7 @@ static void GetSharedFunctionInfoBytecodeOrBaseline(MacroAssembler* masm,
|
|||||||
__ bne(&done);
|
__ bne(&done);
|
||||||
__ LoadTaggedPointerField(
|
__ LoadTaggedPointerField(
|
||||||
sfi_data,
|
sfi_data,
|
||||||
FieldMemOperand(sfi_data, InterpreterData::kBytecodeArrayOffset));
|
FieldMemOperand(sfi_data, InterpreterData::kBytecodeArrayOffset), r0);
|
||||||
|
|
||||||
__ bind(&done);
|
__ bind(&done);
|
||||||
}
|
}
|
||||||
@ -661,19 +661,6 @@ void Builtins::Generate_JSBuiltinsConstructStub(MacroAssembler* masm) {
|
|||||||
Generate_JSBuiltinsConstructStubHelper(masm);
|
Generate_JSBuiltinsConstructStubHelper(masm);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void GetSharedFunctionInfoBytecode(MacroAssembler* masm,
|
|
||||||
Register sfi_data,
|
|
||||||
Register scratch1) {
|
|
||||||
Label done;
|
|
||||||
|
|
||||||
__ CompareObjectType(sfi_data, scratch1, scratch1, INTERPRETER_DATA_TYPE);
|
|
||||||
__ bne(&done);
|
|
||||||
__ LoadTaggedPointerField(
|
|
||||||
sfi_data,
|
|
||||||
FieldMemOperand(sfi_data, InterpreterData::kBytecodeArrayOffset), r0);
|
|
||||||
__ bind(&done);
|
|
||||||
}
|
|
||||||
|
|
||||||
// static
|
// static
|
||||||
void Builtins::Generate_ResumeGeneratorTrampoline(MacroAssembler* masm) {
|
void Builtins::Generate_ResumeGeneratorTrampoline(MacroAssembler* masm) {
|
||||||
// ----------- S t a t e -------------
|
// ----------- S t a t e -------------
|
||||||
@ -763,13 +750,15 @@ void Builtins::Generate_ResumeGeneratorTrampoline(MacroAssembler* masm) {
|
|||||||
|
|
||||||
// Underlying function needs to have bytecode available.
|
// Underlying function needs to have bytecode available.
|
||||||
if (FLAG_debug_code) {
|
if (FLAG_debug_code) {
|
||||||
|
Label is_baseline;
|
||||||
__ LoadTaggedPointerField(
|
__ LoadTaggedPointerField(
|
||||||
r6, FieldMemOperand(r7, JSFunction::kSharedFunctionInfoOffset), r0);
|
r6, FieldMemOperand(r7, JSFunction::kSharedFunctionInfoOffset), r0);
|
||||||
__ LoadTaggedPointerField(
|
__ LoadTaggedPointerField(
|
||||||
r6, FieldMemOperand(r6, SharedFunctionInfo::kFunctionDataOffset), r0);
|
r6, FieldMemOperand(r6, SharedFunctionInfo::kFunctionDataOffset), r0);
|
||||||
GetSharedFunctionInfoBytecode(masm, r6, r3);
|
GetSharedFunctionInfoBytecodeOrBaseline(masm, r6, ip, &is_baseline);
|
||||||
__ CompareObjectType(r6, r6, r6, BYTECODE_ARRAY_TYPE);
|
__ CompareObjectType(r6, r6, r6, BYTECODE_ARRAY_TYPE);
|
||||||
__ Assert(eq, AbortReason::kMissingBytecodeArray);
|
__ Assert(eq, AbortReason::kMissingBytecodeArray);
|
||||||
|
__ bind(&is_baseline);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Resume (Ignition/TurboFan) generator object.
|
// Resume (Ignition/TurboFan) generator object.
|
||||||
@ -1527,7 +1516,10 @@ void Builtins::Generate_InterpreterEntryTrampoline(MacroAssembler* masm) {
|
|||||||
__ LoadTaggedPointerField(
|
__ LoadTaggedPointerField(
|
||||||
kInterpreterBytecodeArrayRegister,
|
kInterpreterBytecodeArrayRegister,
|
||||||
FieldMemOperand(r7, SharedFunctionInfo::kFunctionDataOffset), r0);
|
FieldMemOperand(r7, SharedFunctionInfo::kFunctionDataOffset), r0);
|
||||||
GetSharedFunctionInfoBytecode(masm, kInterpreterBytecodeArrayRegister, ip);
|
|
||||||
|
Label is_baseline;
|
||||||
|
GetSharedFunctionInfoBytecodeOrBaseline(
|
||||||
|
masm, kInterpreterBytecodeArrayRegister, ip, &is_baseline);
|
||||||
|
|
||||||
// The bytecode array could have been flushed from the shared function info,
|
// The bytecode array could have been flushed from the shared function info,
|
||||||
// if so, call into CompileLazy.
|
// if so, call into CompileLazy.
|
||||||
@ -1715,6 +1707,40 @@ void Builtins::Generate_InterpreterEntryTrampoline(MacroAssembler* masm) {
|
|||||||
MaybeOptimizeCodeOrTailCallOptimizedCodeSlot(masm, optimization_state,
|
MaybeOptimizeCodeOrTailCallOptimizedCodeSlot(masm, optimization_state,
|
||||||
feedback_vector);
|
feedback_vector);
|
||||||
|
|
||||||
|
__ bind(&is_baseline);
|
||||||
|
{
|
||||||
|
// Load the feedback vector from the closure.
|
||||||
|
__ LoadTaggedPointerField(
|
||||||
|
feedback_vector,
|
||||||
|
FieldMemOperand(closure, JSFunction::kFeedbackCellOffset), r0);
|
||||||
|
__ LoadTaggedPointerField(
|
||||||
|
feedback_vector, FieldMemOperand(feedback_vector, Cell::kValueOffset),
|
||||||
|
r0);
|
||||||
|
|
||||||
|
Label install_baseline_code;
|
||||||
|
// Check if feedback vector is valid. If not, call prepare for baseline to
|
||||||
|
// allocate it.
|
||||||
|
__ LoadTaggedPointerField(
|
||||||
|
ip, FieldMemOperand(feedback_vector, HeapObject::kMapOffset), r0);
|
||||||
|
__ LoadU16(ip, FieldMemOperand(ip, Map::kInstanceTypeOffset));
|
||||||
|
__ CmpS32(ip, Operand(FEEDBACK_VECTOR_TYPE), r0);
|
||||||
|
__ b(ne, &install_baseline_code);
|
||||||
|
|
||||||
|
// Check for an tiering state.
|
||||||
|
LoadTieringStateAndJumpIfNeedsProcessing(masm, optimization_state,
|
||||||
|
feedback_vector,
|
||||||
|
&has_optimized_code_or_state);
|
||||||
|
|
||||||
|
// Load the baseline code into the closure.
|
||||||
|
__ mr(r5, kInterpreterBytecodeArrayRegister);
|
||||||
|
static_assert(kJavaScriptCallCodeStartRegister == r5, "ABI mismatch");
|
||||||
|
ReplaceClosureCodeWithOptimizedCode(masm, r5, closure, ip, r6);
|
||||||
|
__ JumpCodeObject(r5);
|
||||||
|
|
||||||
|
__ bind(&install_baseline_code);
|
||||||
|
GenerateTailCallToReturnedCode(masm, Runtime::kInstallBaselineCode);
|
||||||
|
}
|
||||||
|
|
||||||
__ bind(&compile_lazy);
|
__ bind(&compile_lazy);
|
||||||
GenerateTailCallToReturnedCode(masm, Runtime::kCompileLazy);
|
GenerateTailCallToReturnedCode(masm, Runtime::kCompileLazy);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user