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);
|
||||
__ LoadTaggedPointerField(
|
||||
sfi_data,
|
||||
FieldMemOperand(sfi_data, InterpreterData::kBytecodeArrayOffset));
|
||||
FieldMemOperand(sfi_data, InterpreterData::kBytecodeArrayOffset), r0);
|
||||
|
||||
__ bind(&done);
|
||||
}
|
||||
@ -661,19 +661,6 @@ void Builtins::Generate_JSBuiltinsConstructStub(MacroAssembler* 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
|
||||
void Builtins::Generate_ResumeGeneratorTrampoline(MacroAssembler* masm) {
|
||||
// ----------- S t a t e -------------
|
||||
@ -763,13 +750,15 @@ void Builtins::Generate_ResumeGeneratorTrampoline(MacroAssembler* masm) {
|
||||
|
||||
// Underlying function needs to have bytecode available.
|
||||
if (FLAG_debug_code) {
|
||||
Label is_baseline;
|
||||
__ LoadTaggedPointerField(
|
||||
r6, FieldMemOperand(r7, JSFunction::kSharedFunctionInfoOffset), r0);
|
||||
__ LoadTaggedPointerField(
|
||||
r6, FieldMemOperand(r6, SharedFunctionInfo::kFunctionDataOffset), r0);
|
||||
GetSharedFunctionInfoBytecode(masm, r6, r3);
|
||||
GetSharedFunctionInfoBytecodeOrBaseline(masm, r6, ip, &is_baseline);
|
||||
__ CompareObjectType(r6, r6, r6, BYTECODE_ARRAY_TYPE);
|
||||
__ Assert(eq, AbortReason::kMissingBytecodeArray);
|
||||
__ bind(&is_baseline);
|
||||
}
|
||||
|
||||
// Resume (Ignition/TurboFan) generator object.
|
||||
@ -1527,7 +1516,10 @@ void Builtins::Generate_InterpreterEntryTrampoline(MacroAssembler* masm) {
|
||||
__ LoadTaggedPointerField(
|
||||
kInterpreterBytecodeArrayRegister,
|
||||
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,
|
||||
// if so, call into CompileLazy.
|
||||
@ -1715,6 +1707,40 @@ void Builtins::Generate_InterpreterEntryTrampoline(MacroAssembler* masm) {
|
||||
MaybeOptimizeCodeOrTailCallOptimizedCodeSlot(masm, optimization_state,
|
||||
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);
|
||||
GenerateTailCallToReturnedCode(masm, Runtime::kCompileLazy);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user