!846 Refactor trampoline signature and name

Merge pull request !846 from songzhengchao/refactor0322
This commit is contained in:
openharmony_ci 2022-03-23 02:42:33 +00:00 committed by Gitee
commit db34e6272d
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
10 changed files with 126 additions and 182 deletions

View File

@ -417,10 +417,10 @@ DEF_CALL_SIGNATURE(HandleOverflow)
callSign->SetParameters(params.data());
}
DEF_CALL_SIGNATURE(RuntimeCallTrampolineInterpreterAsm)
DEF_CALL_SIGNATURE(AsmIntCallRuntime)
{
/* 3 : 3 input parameters */
CallSignature runtimeCallTrampoline("RuntimeCallTrampolineInterpreterAsm", 0, 3,
CallSignature runtimeCallTrampoline("AsmIntCallRuntime", 0, 3,
ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
*callSign = runtimeCallTrampoline;
std::array<VariableType, 3> params = { /* 3 : 3 input parameters */
@ -433,10 +433,10 @@ DEF_CALL_SIGNATURE(RuntimeCallTrampolineInterpreterAsm)
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB);
}
DEF_CALL_SIGNATURE(RuntimeCallTrampolineAot)
DEF_CALL_SIGNATURE(OptimizedCallRuntime)
{
/* 3 : 3 input parameters */
CallSignature runtimeCallTrampoline("RuntimeCallTrampolineAot", 0, 3,
CallSignature runtimeCallTrampoline("OptimizedCallRuntime", 0, 3,
ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
*callSign = runtimeCallTrampoline;
std::array<VariableType, 3> params = { /* 3 : 3 input parameters */
@ -449,10 +449,10 @@ DEF_CALL_SIGNATURE(RuntimeCallTrampolineAot)
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB);
}
DEF_CALL_SIGNATURE(AotCallAotTrampoline)
DEF_CALL_SIGNATURE(OptimizedCallOptimized)
{
/* 4 : 4 input parameters */
CallSignature runtimeCallTrampoline("AotCallAotTrampoline", 0, 4,
CallSignature runtimeCallTrampoline("OptimizedCallOptimized", 0, 4,
ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
*callSign = runtimeCallTrampoline;
std::array<VariableType, 4> params = { /* 4 : 4 input parameters */

View File

@ -244,9 +244,9 @@ private:
V(SingleStepDebugging) \
V(AsmInterpreterEntry) \
V(HandleOverflow) \
V(RuntimeCallTrampolineInterpreterAsm) \
V(RuntimeCallTrampolineAot) \
V(AotCallAotTrampoline) \
V(AsmIntCallRuntime) \
V(OptimizedCallRuntime) \
V(OptimizedCallOptimized) \
V(HandleCommonCall) \
V(DebugPrint) \
V(FatalPrint) \

View File

@ -341,7 +341,7 @@ GateRef CircuitBuilder::NewRuntimeCallGate(GateRef glue, GateRef target,
inputs.push_back(arg);
}
OpCode opcode(OpCode::RUNTIME_CALL);
const CallSignature *descriptor = RuntimeStubCSigns::Get(RTSTUB_ID(RuntimeCallTrampolineAot));
const CallSignature *descriptor = RuntimeStubCSigns::Get(RTSTUB_ID(OptimizedCallRuntime));
MachineType machineType = GetCallMachineTypeFromVariableType(descriptor->GetReturnType());
GateType type = VariableType2GateType(descriptor->GetReturnType());
// 2 : 2 means extra two input gates (target glue)
@ -354,7 +354,7 @@ GateRef CircuitBuilder::CallRuntimeVariadic(GateRef glue, GateRef target, GateRe
std::vector<GateRef> inputs {depend, target, glue};
inputs.insert(inputs.end(), args.begin(), args.end());
OpCode opcode(OpCode::RUNTIME_CALL);
const CallSignature *descriptor = RuntimeStubCSigns::Get(RTSTUB_ID(RuntimeCallTrampolineAot));
const CallSignature *descriptor = RuntimeStubCSigns::Get(RTSTUB_ID(OptimizedCallRuntime));
MachineType machineType = GetCallMachineTypeFromVariableType(descriptor->GetReturnType());
GateType type = VariableType2GateType(descriptor->GetReturnType());
// 2 : 2 means extra two input gates (target glue)

View File

@ -466,7 +466,7 @@ void LLVMIRBuilder::VisitRuntimeCall(GateRef gate, const std::vector<GateRef> &i
ASSERT(stubModule_ != nullptr);
LLVMValueRef callee;
LLVMValueRef rtoffset;
LLVMTypeRef rtfuncType = stubModule_->GetFunctionType(RTSTUB_ID(RuntimeCallTrampolineAot) +
LLVMTypeRef rtfuncType = stubModule_->GetFunctionType(RTSTUB_ID(OptimizedCallRuntime) +
NOGC_RTSTUB_CSIGNS_BEGIN);
LLVMTypeRef rtfuncTypePtr = LLVMPointerType(rtfuncType, 0);
LLVMValueRef glue = gateToLLVMMaps_[inList[2]]; // 2 : 2 means skip two input gates (target glue)
@ -475,12 +475,12 @@ void LLVMIRBuilder::VisitRuntimeCall(GateRef gate, const std::vector<GateRef> &i
circuit_->GetFrameType() == FrameType::OPTIMIZED_ENTRY_FRAME) {
rtoffset = LLVMConstInt(glue_type,
JSThread::GlueData::GetRTInterfacesOffset(compCfg_->Is32Bit()) +
(RTSTUB_ID(RuntimeCallTrampolineInterpreterAsm)) * slotSize_,
(RTSTUB_ID(AsmIntCallRuntime)) * slotSize_,
0);
} else {
rtoffset = LLVMConstInt(glue_type,
JSThread::GlueData::GetRTInterfacesOffset(compCfg_->Is32Bit()) +
(RTSTUB_ID(RuntimeCallTrampolineAot)) * slotSize_,
(RTSTUB_ID(OptimizedCallRuntime)) * slotSize_,
0);
}
LLVMValueRef rtbaseoffset = LLVMBuildAdd(builder_, glue, rtoffset, "");

View File

@ -94,17 +94,17 @@ HWTEST_F_L0(StubTest, FastAddTest)
assembler.Run();
// Testcase build and run
auto stubAddr = reinterpret_cast<uintptr_t>(assembler.GetFuncPtrFromCompiledModule(function));
JSTaggedType argv[2] = {JSTaggedValue(1).GetRawData(), JSTaggedValue(1).GetRawData()};
JSTaggedType argV[2] = {JSTaggedValue(1).GetRawData(), JSTaggedValue(1).GetRawData()};
JSTaggedValue resA(JSFunctionEntry(thread->GetGlueAddr(),
reinterpret_cast<uintptr_t>(thread->GetCurrentSPFrame()), 2, 2, stubAddr, argv[0], argv[1]));
argv[0] = JSTaggedValue(2).GetRawData();
argv[1] = JSTaggedValue(2).GetRawData();
reinterpret_cast<uintptr_t>(thread->GetCurrentSPFrame()), 2, 2, argV, stubAddr));
argV[0] = JSTaggedValue(2).GetRawData();
argV[1] = JSTaggedValue(2).GetRawData();
JSTaggedValue resB(JSFunctionEntry(thread->GetGlueAddr(),
reinterpret_cast<uintptr_t>(thread->GetCurrentSPFrame()), 2, 2, stubAddr, argv[0], argv[1]));
argv[0] = JSTaggedValue(11).GetRawData();
argv[1] = JSTaggedValue(11).GetRawData();
reinterpret_cast<uintptr_t>(thread->GetCurrentSPFrame()), 2, 2, argV, stubAddr));
argV[0] = JSTaggedValue(11).GetRawData();
argV[1] = JSTaggedValue(11).GetRawData();
JSTaggedValue resC(JSFunctionEntry(thread->GetGlueAddr(),
reinterpret_cast<uintptr_t>(thread->GetCurrentSPFrame()), 2, 2, stubAddr, argv[0], argv[1]));
reinterpret_cast<uintptr_t>(thread->GetCurrentSPFrame()), 2, 2, argV, stubAddr));
LOG_ECMA(INFO) << "res for FastAdd(1, 1) = " << resA.GetNumber();
LOG_ECMA(INFO) << "res for FastAdd(2, 2) = " << resB.GetNumber();
LOG_ECMA(INFO) << "res for FastAdd(11, 11) = " << resC.GetNumber();
@ -113,10 +113,10 @@ HWTEST_F_L0(StubTest, FastAddTest)
EXPECT_EQ(resC.GetNumber(), JSTaggedValue(22).GetNumber());
int x1 = 2147483647;
int y1 = 15;
argv[0] = JSTaggedValue(x1).GetRawData();
argv[1] = JSTaggedValue(y1).GetRawData();
argV[0] = JSTaggedValue(x1).GetRawData();
argV[1] = JSTaggedValue(y1).GetRawData();
JSTaggedValue resG(JSFunctionEntry(thread->GetGlueAddr(),
reinterpret_cast<uintptr_t>(thread->GetCurrentSPFrame()), 2, 2, stubAddr, argv[0], argv[1]));
reinterpret_cast<uintptr_t>(thread->GetCurrentSPFrame()), 2, 2, argV, stubAddr));
auto expectedG = FastRuntimeStub::FastAdd(JSTaggedValue(x1), JSTaggedValue(y1));
EXPECT_EQ(resG, expectedG);
}
@ -139,15 +139,15 @@ HWTEST_F_L0(StubTest, FastSubTest)
auto stubAddr = reinterpret_cast<uintptr_t>(assembler.GetFuncPtrFromCompiledModule(function));
JSTaggedType argv[2] = {JSTaggedValue(2).GetRawData(), JSTaggedValue(1).GetRawData()};
JSTaggedValue resA(JSFunctionEntry(thread->GetGlueAddr(),
reinterpret_cast<uintptr_t>(thread->GetCurrentSPFrame()), 2, 2, stubAddr, argv[0], argv[1]));
reinterpret_cast<uintptr_t>(thread->GetCurrentSPFrame()), 2, 2, argv, stubAddr));
argv[0] = JSTaggedValue(7).GetRawData(); // 7 : test case
argv[1] = JSTaggedValue(2).GetRawData(); // 2 : test case
JSTaggedValue resB(JSFunctionEntry(thread->GetGlueAddr(),
reinterpret_cast<uintptr_t>(thread->GetCurrentSPFrame()), 2, 2, stubAddr, argv[0], argv[1]));
reinterpret_cast<uintptr_t>(thread->GetCurrentSPFrame()), 2, 2, argv, stubAddr));
argv[0] = JSTaggedValue(11).GetRawData(); // 11 : test case
argv[1] = JSTaggedValue(11).GetRawData(); // 11 : test case
JSTaggedValue resC(JSFunctionEntry(thread->GetGlueAddr(),
reinterpret_cast<uintptr_t>(thread->GetCurrentSPFrame()), 2, 2, stubAddr, argv[0], argv[1]));
reinterpret_cast<uintptr_t>(thread->GetCurrentSPFrame()), 2, 2, argv, stubAddr));
LOG_ECMA(INFO) << "res for FastSub(2, 1) = " << resA.GetNumber();
LOG_ECMA(INFO) << "res for FastSub(7, 2) = " << resB.GetNumber();
LOG_ECMA(INFO) << "res for FastSub(11, 11) = " << resC.GetNumber();
@ -176,15 +176,15 @@ HWTEST_F_L0(StubTest, FastMulTest)
auto stubAddr = reinterpret_cast<uintptr_t>(assembler.GetFuncPtrFromCompiledModule(function));
JSTaggedType argv[2] = {JSTaggedValue(-2).GetRawData(), JSTaggedValue(1).GetRawData()};
JSTaggedValue resA(JSFunctionEntry(thread->GetGlueAddr(),
reinterpret_cast<uintptr_t>(thread->GetCurrentSPFrame()), 2, 2, stubAddr, argv[0], argv[1]));
reinterpret_cast<uintptr_t>(thread->GetCurrentSPFrame()), 2, 2, argv, stubAddr));
argv[0] = JSTaggedValue(-7).GetRawData(); // -7 : test case
argv[1] = JSTaggedValue(-2).GetRawData(); // -2 : test case
JSTaggedValue resB(JSFunctionEntry(thread->GetGlueAddr(),
reinterpret_cast<uintptr_t>(thread->GetCurrentSPFrame()), 2, 2, stubAddr, argv[0], argv[1]));
reinterpret_cast<uintptr_t>(thread->GetCurrentSPFrame()), 2, 2, argv, stubAddr));
argv[0] = JSTaggedValue(11).GetRawData(); // 11 : test case
argv[1] = JSTaggedValue(11).GetRawData(); // 11 : test case
JSTaggedValue resC(JSFunctionEntry(thread->GetGlueAddr(),
reinterpret_cast<uintptr_t>(thread->GetCurrentSPFrame()), 2, 2, stubAddr, argv[0], argv[1]));
reinterpret_cast<uintptr_t>(thread->GetCurrentSPFrame()), 2, 2, argv, stubAddr));
LOG_ECMA(INFO) << "res for FastMul(-2, 1) = " << std::dec << resA.GetNumber();
LOG_ECMA(INFO) << "res for FastMul(-7, -2) = " << std::dec << resB.GetNumber();
LOG_ECMA(INFO) << "res for FastMul(11, 11) = " << std::dec << resC.GetNumber();
@ -196,7 +196,7 @@ HWTEST_F_L0(StubTest, FastMulTest)
argv[0] = JSTaggedValue(x).GetRawData(); // 11 : test case
argv[1] = JSTaggedValue(y).GetRawData(); // 11 : test case
JSTaggedValue resD(JSFunctionEntry(thread->GetGlueAddr(),
reinterpret_cast<uintptr_t>(thread->GetCurrentSPFrame()), 2, 2, stubAddr, argv[0], argv[1]));
reinterpret_cast<uintptr_t>(thread->GetCurrentSPFrame()), 2, 2, argv, stubAddr));
JSTaggedValue expectedD = FastRuntimeStub::FastMul(JSTaggedValue(x), JSTaggedValue(y));
EXPECT_EQ(resD, expectedD);
x = -1;
@ -204,7 +204,7 @@ HWTEST_F_L0(StubTest, FastMulTest)
argv[0] = JSTaggedValue(x).GetRawData();
argv[1] = JSTaggedValue(y).GetRawData();
JSTaggedValue resE(JSFunctionEntry(thread->GetGlueAddr(),
reinterpret_cast<uintptr_t>(thread->GetCurrentSPFrame()), 2, 2, stubAddr, argv[0], argv[1]));
reinterpret_cast<uintptr_t>(thread->GetCurrentSPFrame()), 2, 2, argv, stubAddr));
JSTaggedValue expectedE = FastRuntimeStub::FastMul(JSTaggedValue(x), JSTaggedValue(y));
EXPECT_EQ(resE, expectedE);
x = -1;
@ -212,7 +212,7 @@ HWTEST_F_L0(StubTest, FastMulTest)
argv[0] = JSTaggedValue(x).GetRawData();
argv[1] = JSTaggedValue(y).GetRawData();
JSTaggedValue resF(JSFunctionEntry(thread->GetGlueAddr(),
reinterpret_cast<uintptr_t>(thread->GetCurrentSPFrame()), 2, 2, stubAddr, argv[0], argv[1]));
reinterpret_cast<uintptr_t>(thread->GetCurrentSPFrame()), 2, 2, argv, stubAddr));
JSTaggedValue expectedF = FastRuntimeStub::FastMul(JSTaggedValue(x), JSTaggedValue(y));
EXPECT_EQ(resF, expectedF);
int x1 = 2147483647;
@ -220,7 +220,7 @@ HWTEST_F_L0(StubTest, FastMulTest)
argv[0] = JSTaggedValue(x1).GetRawData();
argv[1] = JSTaggedValue(y1).GetRawData();
JSTaggedValue resG(JSFunctionEntry(thread->GetGlueAddr(),
reinterpret_cast<uintptr_t>(thread->GetCurrentSPFrame()), 2, 2, stubAddr, argv[0], argv[1]));
reinterpret_cast<uintptr_t>(thread->GetCurrentSPFrame()), 2, 2, argv, stubAddr));
auto expectedG = FastRuntimeStub::FastMul(JSTaggedValue(x1), JSTaggedValue(y1));
EXPECT_EQ(resG, expectedG);
}
@ -247,7 +247,7 @@ HWTEST_F_L0(StubTest, FastDivTest)
LOG_ECMA(INFO) << "x1 = " << x1 << " y1 = " << y1;
JSTaggedType argv[2] = {x1, y1};
JSTaggedValue res1(JSFunctionEntry(thread->GetGlueAddr(),
reinterpret_cast<uintptr_t>(thread->GetCurrentSPFrame()), 2, 2, stubAddr, argv[0], argv[1]));
reinterpret_cast<uintptr_t>(thread->GetCurrentSPFrame()), 2, 2, argv, stubAddr));
LOG_ECMA(INFO) << "res for FastDiv(50, 25) = " << res1.GetRawData();
auto expectedG1 = FastRuntimeStub::FastDiv(JSTaggedValue(x1), JSTaggedValue(y1));
EXPECT_EQ(res1, expectedG1);
@ -258,7 +258,7 @@ HWTEST_F_L0(StubTest, FastDivTest)
argv[0] = x2;
argv[1] = y2;
JSTaggedValue res2(JSFunctionEntry(thread->GetGlueAddr(),
reinterpret_cast<uintptr_t>(thread->GetCurrentSPFrame()), 2, 2, stubAddr, argv[0], argv[1]));
reinterpret_cast<uintptr_t>(thread->GetCurrentSPFrame()), 2, 2, argv, stubAddr));
LOG_ECMA(INFO) << "res for FastDiv(base::NAN_VALUE, 0) = " << res2.GetRawData();
auto expectedG2 = FastRuntimeStub::FastDiv(JSTaggedValue(x2), JSTaggedValue(y2));
EXPECT_EQ(res2, expectedG2);
@ -270,7 +270,7 @@ HWTEST_F_L0(StubTest, FastDivTest)
argv[1] = y3;
LOG_ECMA(INFO) << "x2 = " << x3 << " y2 = " << y3;
JSTaggedValue res3(JSFunctionEntry(thread->GetGlueAddr(),
reinterpret_cast<uintptr_t>(thread->GetCurrentSPFrame()), 2, 2, stubAddr, argv[0], argv[1]));
reinterpret_cast<uintptr_t>(thread->GetCurrentSPFrame()), 2, 2, argv, stubAddr));
LOG_ECMA(INFO) << "res for FastDiv(7, 0) = " << res3.GetRawData();
auto expectedG3 = FastRuntimeStub::FastDiv(JSTaggedValue(x3), JSTaggedValue(y3));
EXPECT_EQ(res3, expectedG3);
@ -599,8 +599,8 @@ HWTEST_F_L0(StubTest, JSEntryTest)
LLVMTypeRef funcType = LLVMFunctionType(llvmI32, argsTy.data(), argsTy.size(), 1);
LLVMValueRef runtimeFunc1 = LLVMAddFunction(module, "RuntimeFunc1", funcType);
std::vector<LLVMValueRef> argvalue = {value};
LLVMBuildCall(builder, runtimeFunc1, argvalue.data(), 1, "");
std::vector<LLVMValueRef> argValue = {value};
LLVMBuildCall(builder, runtimeFunc1, argValue.data(), 1, "");
LLVMValueRef retVal = LLVMConstInt(LLVMInt64Type(), 1, false);
LLVMBuildRet(builder, retVal);
@ -629,9 +629,9 @@ HWTEST_F_L0(StubTest, JSEntryTest)
LLVMValueRef stub3 = LLVMAddFunction(module, "stub3", LLVMFunctionType(LLVMInt64Type(), paramTys0, 1, 0));
/* stub2 call stub3 */
argvalue = {value2};
argValue = {value2};
LLVMBuildCall(builder, stub3, argvalue.data(), 1, "");
LLVMBuildCall(builder, stub3, argValue.data(), 1, "");
retVal = LLVMConstInt(LLVMInt64Type(), 2, false);
LLVMBuildRet(builder, retVal);
@ -652,8 +652,8 @@ HWTEST_F_L0(StubTest, JSEntryTest)
*/
/* stub2 call RuntimeFunc2 */
LLVMValueRef runtimeFunc2 = LLVMAddFunction(module, "RuntimeFunc2", funcType);
argvalue = {value3};
LLVMBuildCall(builder, runtimeFunc2, argvalue.data(), 1, "");
argValue = {value3};
LLVMBuildCall(builder, runtimeFunc2, argValue.data(), 1, "");
retVal = LLVMConstInt(LLVMInt64Type(), 3, false);
LLVMBuildRet(builder, retVal);
char *error = nullptr;
@ -682,7 +682,7 @@ HWTEST_F_L0(StubTest, JSEntryTest)
}
/*
verify modify llvm prologue : call main ok means don't destroy c abi
verify modify llvm prologue : call main ok means don't destory c abi
test:
main push rbp
push type
@ -796,9 +796,9 @@ HWTEST_F_L0(StubTest, CEntryFp)
LLVMTypeRef funcType = LLVMFunctionType(llvmI64, argsTy.data(), argsTy.size(), 1);
LLVMValueRef runTimeFunc = LLVMAddFunction(module, "RuntimeFunc", funcType);
std::vector<LLVMValueRef> argvalue = {value};
std::vector<LLVMValueRef> argValue = {value};
std::cout << std::endl;
LLVMValueRef retVal = LLVMBuildCall(builder, runTimeFunc, argvalue.data(), 1, "");
LLVMValueRef retVal = LLVMBuildCall(builder, runTimeFunc, argValue.data(), 1, "");
LLVMBuildRet(builder, retVal);
char *error = nullptr;
LLVMVerifyModule(module, LLVMAbortProcessAction, &error);
@ -1127,7 +1127,7 @@ HWTEST_F_L0(StubTest, FastTypeOfTest)
// obj is JSTaggedValue::VALUE_TRUE
JSTaggedType argv[1] = {JSTaggedValue::True().GetRawData()};
JSTaggedValue resultVal(JSFunctionEntry(thread->GetGlueAddr(),
reinterpret_cast<uintptr_t>(thread->GetCurrentSPFrame()), 1, 1, stubAddr, argv[0]));
reinterpret_cast<uintptr_t>(thread->GetCurrentSPFrame()), 1, 1, argv, stubAddr));
JSTaggedValue expectResult = FastRuntimeStub::FastTypeOf(thread, JSTaggedValue::True());
EXPECT_EQ(resultVal, globalConst->GetBooleanString());
EXPECT_EQ(resultVal, expectResult);
@ -1135,7 +1135,7 @@ HWTEST_F_L0(StubTest, FastTypeOfTest)
// obj is JSTaggedValue::VALUE_FALSE
argv[0] = JSTaggedValue::False().GetRawData();
JSTaggedValue resultVal2(JSFunctionEntry(thread->GetGlueAddr(),
reinterpret_cast<uintptr_t>(thread->GetCurrentSPFrame()), 1, 1, stubAddr, argv[0]));
reinterpret_cast<uintptr_t>(thread->GetCurrentSPFrame()), 1, 1, argv, stubAddr));
JSTaggedValue expectResult2 = FastRuntimeStub::FastTypeOf(thread, JSTaggedValue::False());
EXPECT_EQ(resultVal2, globalConst->GetBooleanString());
EXPECT_EQ(resultVal2, expectResult2);
@ -1143,7 +1143,7 @@ HWTEST_F_L0(StubTest, FastTypeOfTest)
// obj is JSTaggedValue::VALUE_NULL
argv[0] = JSTaggedValue::Null().GetRawData();
JSTaggedValue resultVal3(JSFunctionEntry(thread->GetGlueAddr(),
reinterpret_cast<uintptr_t>(thread->GetCurrentSPFrame()), 1, 1, stubAddr, argv[0]));
reinterpret_cast<uintptr_t>(thread->GetCurrentSPFrame()), 1, 1, argv, stubAddr));
JSTaggedValue expectResult3 = FastRuntimeStub::FastTypeOf(thread, JSTaggedValue::Null());
EXPECT_EQ(resultVal3, globalConst->GetObjectString());
EXPECT_EQ(resultVal3, expectResult3);
@ -1151,7 +1151,7 @@ HWTEST_F_L0(StubTest, FastTypeOfTest)
// obj is JSTaggedValue::VALUE_UNDEFINED
argv[0] = JSTaggedValue::Undefined().GetRawData();
JSTaggedValue resultVal4(JSFunctionEntry(thread->GetGlueAddr(),
reinterpret_cast<uintptr_t>(thread->GetCurrentSPFrame()), 1, 1, stubAddr, argv[0]));
reinterpret_cast<uintptr_t>(thread->GetCurrentSPFrame()), 1, 1, argv, stubAddr));
JSTaggedValue expectResult4 = FastRuntimeStub::FastTypeOf(thread, JSTaggedValue::Undefined());
EXPECT_EQ(resultVal4, globalConst->GetUndefinedString());
EXPECT_EQ(resultVal4, expectResult4);
@ -1159,7 +1159,7 @@ HWTEST_F_L0(StubTest, FastTypeOfTest)
// obj is IsNumber
argv[0] = JSTaggedValue(5).GetRawData();
JSTaggedValue resultVal5(JSFunctionEntry(thread->GetGlueAddr(),
reinterpret_cast<uintptr_t>(thread->GetCurrentSPFrame()), 1, 1, stubAddr, argv[0]));
reinterpret_cast<uintptr_t>(thread->GetCurrentSPFrame()), 1, 1, argv, stubAddr));
JSTaggedValue expectResult5 = FastRuntimeStub::FastTypeOf(thread, JSTaggedValue(5));
EXPECT_EQ(resultVal5, globalConst->GetNumberString());
EXPECT_EQ(resultVal5, expectResult5);
@ -1171,7 +1171,7 @@ HWTEST_F_L0(StubTest, FastTypeOfTest)
JSTaggedValue expectResult6 = FastRuntimeStub::FastTypeOf(thread, str1.GetTaggedValue());
argv[0] = str2.GetTaggedValue().GetRawData();
JSTaggedValue resultVal6(JSFunctionEntry(thread->GetGlueAddr(),
reinterpret_cast<uintptr_t>(thread->GetCurrentSPFrame()), 1, 1, stubAddr, argv[0]));
reinterpret_cast<uintptr_t>(thread->GetCurrentSPFrame()), 1, 1, argv, stubAddr));
EXPECT_EQ(resultVal6, globalConst->GetStringString());
EXPECT_EQ(resultVal6, expectResult6);
@ -1182,7 +1182,7 @@ HWTEST_F_L0(StubTest, FastTypeOfTest)
argv[0] = symbol.GetRawData();
JSTaggedValue resultVal7(JSFunctionEntry(thread->GetGlueAddr(),
reinterpret_cast<uintptr_t>(thread->GetCurrentSPFrame()), 1, 1, stubAddr, argv[0]));
reinterpret_cast<uintptr_t>(thread->GetCurrentSPFrame()), 1, 1, argv, stubAddr));
EXPECT_EQ(resultVal7, globalConst->GetSymbolString());
EXPECT_EQ(resultVal7, expectResult7);
@ -1192,7 +1192,7 @@ HWTEST_F_L0(StubTest, FastTypeOfTest)
JSTaggedValue expectResult8= FastRuntimeStub::FastTypeOf(thread, resolveCallable.GetTaggedValue());
argv[0] = resolveCallable.GetTaggedValue().GetRawData();
JSTaggedValue resultVal8(JSFunctionEntry(thread->GetGlueAddr(),
reinterpret_cast<uintptr_t>(thread->GetCurrentSPFrame()), 1, 1, stubAddr, argv[0]));
reinterpret_cast<uintptr_t>(thread->GetCurrentSPFrame()), 1, 1, argv, stubAddr));
EXPECT_EQ(resultVal8, globalConst->GetFunctionString());
EXPECT_EQ(resultVal8, expectResult8);
@ -1201,7 +1201,7 @@ HWTEST_F_L0(StubTest, FastTypeOfTest)
JSTaggedValue expectResult9= FastRuntimeStub::FastTypeOf(thread, object.GetTaggedValue());
argv[0] = object.GetTaggedValue().GetRawData();
JSTaggedValue resultVal9(JSFunctionEntry(thread->GetGlueAddr(),
reinterpret_cast<uintptr_t>(thread->GetCurrentSPFrame()), 1, 1, stubAddr, argv[0]));
reinterpret_cast<uintptr_t>(thread->GetCurrentSPFrame()), 1, 1, argv, stubAddr));
EXPECT_EQ(resultVal9, globalConst->GetObjectString());
EXPECT_EQ(resultVal9, expectResult9);
}
@ -1224,7 +1224,7 @@ HWTEST_F_L0(StubTest, FastEqualTest)
// test for 1 == 1
JSTaggedType argv[2] = {JSTaggedValue(1).GetRawData(), JSTaggedValue(1).GetRawData()};
JSTaggedValue resA(JSFunctionEntry(thread->GetGlueAddr(),
reinterpret_cast<uintptr_t>(thread->GetCurrentSPFrame()), 2, 2, stubAddr, argv[0], argv[1]));
reinterpret_cast<uintptr_t>(thread->GetCurrentSPFrame()), 2, 2, argv, stubAddr));
auto expectA = FastRuntimeStub::FastEqual(JSTaggedValue(1), JSTaggedValue(1));
EXPECT_EQ(resA, expectA);
@ -1233,7 +1233,7 @@ HWTEST_F_L0(StubTest, FastEqualTest)
argv[0] = JSTaggedValue(nan).GetRawData();
argv[1] = JSTaggedValue(nan).GetRawData();
JSTaggedValue resB(JSFunctionEntry(thread->GetGlueAddr(),
reinterpret_cast<uintptr_t>(thread->GetCurrentSPFrame()), 2, 2, stubAddr, argv[0], argv[1]));
reinterpret_cast<uintptr_t>(thread->GetCurrentSPFrame()), 2, 2, argv, stubAddr));
auto expectB = FastRuntimeStub::FastEqual(JSTaggedValue(nan), JSTaggedValue(nan));
EXPECT_EQ(resB, expectB);
@ -1241,7 +1241,7 @@ HWTEST_F_L0(StubTest, FastEqualTest)
argv[0] = JSTaggedValue::Undefined().GetRawData();
argv[1] = JSTaggedValue::Null().GetRawData();
JSTaggedValue resC(JSFunctionEntry(thread->GetGlueAddr(),
reinterpret_cast<uintptr_t>(thread->GetCurrentSPFrame()), 2, 2, stubAddr, argv[0], argv[1]));
reinterpret_cast<uintptr_t>(thread->GetCurrentSPFrame()), 2, 2, argv, stubAddr));
auto expectC = FastRuntimeStub::FastEqual(JSTaggedValue::Undefined(), JSTaggedValue::Null());
EXPECT_EQ(resC, expectC);
@ -1251,7 +1251,7 @@ HWTEST_F_L0(StubTest, FastEqualTest)
argv[0] = str.GetTaggedValue().GetRawData();
argv[1] = JSTaggedValue::Undefined().GetRawData();
JSTaggedValue resD(JSFunctionEntry(thread->GetGlueAddr(),
reinterpret_cast<uintptr_t>(thread->GetCurrentSPFrame()), 2, 2, stubAddr, argv[0], argv[1]));
reinterpret_cast<uintptr_t>(thread->GetCurrentSPFrame()), 2, 2, argv, stubAddr));
auto expectD = FastRuntimeStub::FastEqual(str.GetTaggedValue(), JSTaggedValue::Undefined());
EXPECT_EQ(resD, expectD);
@ -1259,7 +1259,7 @@ HWTEST_F_L0(StubTest, FastEqualTest)
argv[0] = JSTaggedValue::True().GetRawData();
argv[1] = JSTaggedValue::Hole().GetRawData();
JSTaggedValue resE(JSFunctionEntry(thread->GetGlueAddr(),
reinterpret_cast<uintptr_t>(thread->GetCurrentSPFrame()), 2, 2, stubAddr, argv[0], argv[1]));
reinterpret_cast<uintptr_t>(thread->GetCurrentSPFrame()), 2, 2, argv, stubAddr));
auto expectE = FastRuntimeStub::FastEqual(JSTaggedValue::True(), JSTaggedValue::Hole());
EXPECT_EQ(resE, expectE);
@ -1267,7 +1267,7 @@ HWTEST_F_L0(StubTest, FastEqualTest)
argv[0] = str.GetTaggedValue().GetRawData();
argv[1] = str.GetTaggedValue().GetRawData();
JSTaggedValue resF(JSFunctionEntry(thread->GetGlueAddr(),
reinterpret_cast<uintptr_t>(thread->GetCurrentSPFrame()), 2, 2, stubAddr, argv[0], argv[1]));
reinterpret_cast<uintptr_t>(thread->GetCurrentSPFrame()), 2, 2, argv, stubAddr));
auto expectF = FastRuntimeStub::FastEqual(str.GetTaggedValue(), str.GetTaggedValue());
EXPECT_EQ(resF, expectF);
@ -1275,7 +1275,7 @@ HWTEST_F_L0(StubTest, FastEqualTest)
argv[0] = JSTaggedValue(5.2).GetRawData();
argv[1] = JSTaggedValue(5.2).GetRawData();
JSTaggedValue resG(JSFunctionEntry(thread->GetGlueAddr(),
reinterpret_cast<uintptr_t>(thread->GetCurrentSPFrame()), 2, 2, stubAddr, argv[0], argv[1]));
reinterpret_cast<uintptr_t>(thread->GetCurrentSPFrame()), 2, 2, argv, stubAddr));
auto expectG = FastRuntimeStub::FastEqual(JSTaggedValue(5.2), JSTaggedValue(5.2));
EXPECT_EQ(resG, expectG);
@ -1283,7 +1283,7 @@ HWTEST_F_L0(StubTest, FastEqualTest)
argv[0] = JSTaggedValue::False().GetRawData();
argv[1] = JSTaggedValue::False().GetRawData();
JSTaggedValue resH(JSFunctionEntry(thread->GetGlueAddr(),
reinterpret_cast<uintptr_t>(thread->GetCurrentSPFrame()), 2, 2, stubAddr, argv[0], argv[1]));
reinterpret_cast<uintptr_t>(thread->GetCurrentSPFrame()), 2, 2, argv, stubAddr));
auto expectH = FastRuntimeStub::FastEqual(JSTaggedValue::False(), JSTaggedValue::False());
EXPECT_EQ(resH, expectH);
@ -1295,7 +1295,7 @@ HWTEST_F_L0(StubTest, FastEqualTest)
argv[0] = obj1.GetTaggedValue().GetRawData();
argv[1] = obj2.GetTaggedValue().GetRawData();
JSTaggedValue resI(JSFunctionEntry(thread->GetGlueAddr(),
reinterpret_cast<uintptr_t>(thread->GetCurrentSPFrame()), 2, 2, stubAddr, argv[0], argv[1]));
reinterpret_cast<uintptr_t>(thread->GetCurrentSPFrame()), 2, 2, argv, stubAddr));
auto expectI = FastRuntimeStub::FastEqual(obj1.GetTaggedValue(), obj2.GetTaggedValue());
EXPECT_EQ(resI, expectI);
}

View File

@ -30,9 +30,9 @@ class GlobalEnv;
class JSthread;
class JSFunction;
class ObjectFactory;
extern "C" JSTaggedType RuntimeCallTrampolineAot(uintptr_t glue, uint64_t runtime_id, uint64_t argc, ...);
extern "C" JSTaggedType RuntimeCallTrampolineInterpreterAsm(uintptr_t glue, uint64_t runtime_id, uint64_t argc, ...);
extern "C" JSTaggedType AotCallAotTrampoline(uintptr_t glue, uint32_t expectedNumArgs,
extern "C" JSTaggedType OptimizedCallRuntime(uintptr_t glue, uint64_t runtime_id, uint64_t argc, ...);
extern "C" JSTaggedType AsmIntCallRuntime(uintptr_t glue, uint64_t runtime_id, uint64_t argc, ...);
extern "C" JSTaggedType OptimizedCallOptimized(uintptr_t glue, uint32_t expectedNumArgs,
uint32_t actualNumArgs, uintptr_t codeAddr, ...);
extern "C" void HandleCommonCall(uintptr_t glue, uint64_t callType, uintptr_t sp, uint64_t funcReg,
uint64_t actualArgc, ...);
@ -42,9 +42,9 @@ extern "C" void HandleCommonCall(uintptr_t glue, uint64_t callType, uintptr_t sp
V(InsertOldToNewRememberedSet, 3) \
V(MarkingBarrier, 5) \
V(DoubleToInt, 1) \
V(RuntimeCallTrampolineAot, 3) \
V(AotCallAotTrampoline, 4) \
V(RuntimeCallTrampolineInterpreterAsm, 3) \
V(OptimizedCallRuntime, 3) \
V(OptimizedCallOptimized, 4) \
V(AsmIntCallRuntime, 3) \
V(HandleCommonCall, 5)
#define RUNTIME_STUB_WITH_GC_LIST(V) \

View File

@ -17,14 +17,14 @@
.global JSFunctionEntry
.type JSFunctionEntry, %function
.global RuntimeCallTrampolineAot
.type RuntimeCallTrampolineAot, %function
.global OptimizedCallRuntime
.type OptimizedCallRuntime, %function
.global RuntimeCallTrampolineInterpreterAsm
.type RuntimeCallTrampolineInterpreterAsm, %function
.global AsmIntCallRuntime
.type AsmIntCallRuntime, %function
.global AotCallAotTrampoline
.type AotCallAotTrampoline, %function
.global OptimizedCallOptimized
.type OptimizedCallOptimized, %function
.global HandleCommonCall
.type HandleCommonCall, %function
@ -62,16 +62,14 @@
#define ARGS_STACK_TOP_TO_FP_OFFSET (CALLEESAVE_REGS_SIZE + 2 * SLOT_SIZE)
// uint64_t JSFunctionEntry(uintptr_t glue, uintptr_t prevFp, uint32_t expectedNumArgs,
// uint32_t actualNumArgs, uintptr_t codeAddr, ...);
// uint32_t actualNumArgs, const JSTaggedType argV[], uintptr_t codeAddr);
// Input:
// %x0 - glue
// %x1 - prevFp
// %x2 - expectedNumArgs
// %x3 - actualNumArgs
// %x4 - codeAddr
// %x5 - argv[0]
// %x6 - argv[1]
// %x7 - argv[2]
// %x4 - argV
// %x5 - codeAddr
// construct Entry Frame
// +--------------------------+
// | returnaddress | ^
@ -112,47 +110,20 @@ JSFunctionEntry:
cmp w19, w3
csel w8, w19, w3, lo
cbz w8, .InvokeCompiledJSFunction
cmp w8, #1
b.ne .MoreThanOneArgv
str x5, [sp, #-8]!
b .CopyArgvEnd
.MoreThanOneArgv:
cmp w8, #2
b.ne .MoreThanTwoArgv
str x6, [sp, #-8]!
str x5, [sp, #-8]!
b .CopyArgvEnd
.MoreThanTwoArgv:
cmp w8, #3
b.ne .MoreThanThreeArgv
str x7, [sp, #-8]!
str x6, [sp, #-8]!
str x5, [sp, #-8]!
b .CopyArgvEnd
.MoreThanThreeArgv:
subs w8, w8, #3
add x9, x29, #ARGS_STACK_TOP_TO_FP_OFFSET
sub w9, w8, #1 // =1
add x9, x4, w9, uxtw #3
.LCopyArgLoop:
ldr x10, [x9], #-8
subs w8, w8, #1 // =1
str x10, [sp, #-8]!
b.ne .LCopyArgLoop
str x7, [sp, #-8]!
str x6, [sp, #-8]!
str x5, [sp, #-8]!
.CopyArgvEnd:
b .InvokeCompiledJSFunction
// Input:
// %x0 - glue
// argv push stack
.InvokeCompiledJSFunction:
mov x2, x4
mov x2, x5
blr x2
// pop argv
@ -207,7 +178,7 @@ JSFunctionEntry:
// current sp - 8: type
// current sp - 16: callee save x19
RuntimeCallTrampolineAot:
OptimizedCallRuntime:
stp x29, x30, [sp, #-16]! // save register for fp, rip
mov x29, sp // set frame pointer = callsiteFp
str x29, [x0, #ASM_GLUE_CURRENT_FRAME_OFFSET] // save to thread->currentFrame_
@ -233,7 +204,7 @@ RuntimeCallTrampolineAot:
ldp x29, x30, [sp], #16
ret
RuntimeCallTrampolineInterpreterAsm:
AsmIntCallRuntime:
str x30, [sp, #-8] // save register rip
add sp, sp, #-16
str x19, [sp, #-16] // callee save register
@ -261,7 +232,7 @@ RuntimeCallTrampolineInterpreterAsm:
ret
// extern "C" JSTaggedType AotCallAotTrampoline(uintptr_t glue, uint32_t expectedNumArgs,
// extern "C" JSTaggedType OptimizedCallOptimized(uintptr_t glue, uint32_t expectedNumArgs,
// uint32_t actualNumArgs, uintptr_t codeAddr, ...)
// Input:
// %x0 - glue
@ -282,7 +253,7 @@ RuntimeCallTrampolineInterpreterAsm:
// ...........................
// sp[- 8(N - 1)] - arg[0]
AotCallAotTrampoline:
OptimizedCallOptimized:
PUSH_CALLEE_SAVED_REGS
mov x20, x0

View File

@ -18,14 +18,14 @@
.global JSFunctionEntry
.type JSFunctionEntry, %function
.global RuntimeCallTrampolineAot
.type RuntimeCallTrampolineAot, %function
.global OptimizedCallRuntime
.type OptimizedCallRuntime, %function
.global RuntimeCallTrampolineInterpreterAsm
.type RuntimeCallTrampolineInterpreterAsm, %function
.global AsmIntCallRuntime
.type AsmIntCallRuntime, %function
.global AotCallAotTrampoline
.type AotCallAotTrampoline, %function
.global OptimizedCallOptimized
.type OptimizedCallOptimized, %function
.global HandleCommonCall
.type HandleCommonCall, %function
@ -59,29 +59,14 @@
#define ARGS_STACK_TOP_TO_FP_OFFSET (CALLEESAVE_REGS_SIZE + CALLER_SAVE_LR_SIZE)
// uint64_t JSFunctionEntry(uintptr_t glue, uintptr_t prevFp, uint32_t expectedNumArgs,
// uint32_t actualNumArgs, uintptr_t codeAddr, ...);
// uint32_t actualNumArgs, const JSTaggedType argV[], uintptr_t codeAddr);
// Input:
// %rdi - glue
// %rsi - prevFp
// %rdx - expectedNumArgs
// %ecx - actualNumArgs
// %r8 - codeAddr
// %r9 - argv[0]
// sp[0 * 8] - argv[1]
// sp[1 * 8] - argv[2]
// sp[2 * 8] - argv[3]
// .....
// sp[(N -1) * 8] - argv[N - 1]
// Output:
// stack as followsn from high address to lowAdress
// sp - argv[N - 1]
// sp[-8] - argv[N -2]
// ...........................
// sp[- 8(N - 1)] - arg[0]
// sp[-8(N)] - this
// sp[-8(N+1)] - newTarget
// sp[-8(N + 2)] - callTarget
// %r8 - argV
// %r9 - codeAddr
JSFunctionEntry:
PUSH_GENERAL_REGS
// construct the frame
@ -116,29 +101,16 @@ JSFunctionEntry:
cmovbe %ebx, %ecx
movl %ecx, %eax
// argV[0] - r9
addq $-1, %rax
cmpq $0, %rax
jbe .LCopyLoopEnd
// PUSH_GENERAL_REGS and return address alignment
movq %rbp, %r15
addq $FP_SIZE, %r15
addq $ARGS_STACK_TOP_TO_FP_OFFSET, %r15
.LCopyLoop:
movq -8(%r15, %rax, 8), %rcx
movq -8(%r8, %rax, 8), %rcx
pushq %rcx
addq $-1, %rax
jne .LCopyLoop
.LCopyLoopEnd:
// argV[0]
pushq %r9
movq %rdi, %rax // move glue to rax
call *%r8 // then call jsFunction
leaq (,%r14,8), %rcx
call *%r9 // then call jsFunction
leaq (,%r14,8), %rcx // todo:: fixed for 3 extra arguments
addq %rcx, %rsp
testb $1, %r14b // stack 16bytes align check
@ -155,7 +127,7 @@ JSFunctionEntry:
ret
// uint64_t AotCallAotTrampoline(uintptr_t glue, uint32_t expectedNumArgs,
// uint64_t OptimizedCallOptimized(uintptr_t glue, uint32_t expectedNumArgs,
// uint32_t actualNumArgs, uintptr_t codeAddr, ...);
// Input:
// %rdi - glue
@ -176,7 +148,7 @@ JSFunctionEntry:
// ...........................
// sp[- 8(N - 1)] - arg[0]
AotCallAotTrampoline:
OptimizedCallOptimized:
PUSH_GENERAL_REGS
// 16 bytes align check
@ -286,7 +258,7 @@ AotCallAotTrampoline:
// sp - 16: rbp <---------current rbp & current sp
// current sp - 8: type
RuntimeCallTrampolineAot:
OptimizedCallRuntime:
pushq %rbp
movq %rsp, %rbp // set frame pointer
movq %rbp, ASM_GLUE_CURRENT_FRAME_OFFSET(%rax) // save to thread->currentFrame_
@ -317,7 +289,7 @@ RuntimeCallTrampolineAot:
popq %rbp
ret
RuntimeCallTrampolineInterpreterAsm:
AsmIntCallRuntime:
pushq $0
movq %rsp, ASM_GLUE_LEAVE_FRAME_OFFSET(%rax) // save to thread->leaveFrame_
pushq $ASM_LEAVE_FRAME_TYPE

View File

@ -18,14 +18,14 @@
.global JSFunctionEntry
.type JSFunctionEntry, %function
.global RuntimeCallTrampolineAot
.type RuntimeCallTrampolineAot, %function
.global OptimizedCallRuntime
.type OptimizedCallRuntime, %function
.global RuntimeCallTrampolineInterpreterAsm
.type RuntimeCallTrampolineInterpreterAsm, %function
.global AsmIntCallRuntime
.type AsmIntCallRuntime, %function
.global AotCallAotTrampoline
.type AotCallAotTrampoline, %function
.global OptimizedCallOptimized
.type OptimizedCallOptimized, %function
.global HandleCommonCall
.type HandleCommonCall, %function
@ -36,7 +36,7 @@
#define ARGS_STACK_TOP_TO_FP_OFFSET (CALLEESAVE_REGS_SIZE + SLOT_SIZE)
// uint64_t JSFunctionEntry(uintptr_t glue, uintptr_t prevFp, uint32_t expectedNumArgs,
// uint32_t actualNumArgs, uintptr_t codeAddr, ...);
// uint32_t actualNumArgs, const JSTaggedType argV[], uintptr_t codeAddr);
// Input:
// %r0 - glue
// %r1 - prevFp
@ -72,14 +72,15 @@ JSFunctionEntry:
rscs r5, r4, #0
blo .LCopyExtraAument
.LCopyArguments:
ldr lr, [r11, #ARGS_STACK_TOP_TO_FP_OFFSET] // load js function code address
add r4, r11, #ARGS_STACK_TOP_TO_FP_OFFSET
add r4, r4, #SLOT_SIZE // skip argv[]
ldr lr, [r4] // load js function code address
cmp r8, r3
movls r3, r8
cmp r3, #0
beq .LInvokeJSFunction
add r4, r11, #ARGS_STACK_TOP_TO_FP_OFFSET
add r4, r4, #SLOT_SIZE // skip codeAddr,load argv[0] addr
add r4, r11, #ARGS_STACK_TOP_TO_FP_OFFSET // argv[]
add r5, r4, r3, lsl #3
.LCopyLoop:
sub r5, r5, #8
@ -132,9 +133,9 @@ JSFunctionEntry:
// | padding | v
// +--------------------------+ ---
.global RuntimeCallTrampolineAot
.type RuntimeCallTrampolineAot, %function
RuntimeCallTrampolineAot:
.global OptimizedCallRuntime
.type OptimizedCallRuntime, %function
OptimizedCallRuntime:
push {r11, lr} // save register for fp, rip
mov r11, sp // set frame pointer = callsiteFp
str r11, [r0, #ASM_GLUE_CURRENT_FRAME_OFFSET] // save to thread->currentFrame_
@ -161,9 +162,9 @@ RuntimeCallTrampolineAot:
pop {r11, lr}
bx lr
.global RuntimeCallTrampolineInterpreterAsm
.type RuntimeCallTrampolineInterpreterAsm, %function
RuntimeCallTrampolineInterpreterAsm:
.global AsmIntCallRuntime
.type AsmIntCallRuntime, %function
AsmIntCallRuntime:
add sp, sp, #-8
str lr, [sp, #4]
str sp, [r0, #ASM_GLUE_LEAVE_FRAME_OFFSET] // save to thread->currentFrame_
@ -191,7 +192,7 @@ RuntimeCallTrampolineInterpreterAsm:
bx lr
//extern "C" JSTaggedType AotCallAotTrampoline(uintptr_t glue, uint32_t expectedNumArgs,
//extern "C" JSTaggedType OptimizedCallOptimized(uintptr_t glue, uint32_t expectedNumArgs,
// uint32_t actualNumArgs, uintptr_t codeAddr, ...)
// Input:
// %r0 - glue
@ -199,9 +200,9 @@ RuntimeCallTrampolineInterpreterAsm:
// %r2 - actualNumArgs
// %r3 - codeAddr
.global AotCallAotTrampoline
.type AotCallAotTrampoline, %function
AotCallAotTrampoline:
.global OptimizedCallOptimized
.type OptimizedCallOptimized, %function
OptimizedCallOptimized:
push {r4, r5, r6, r7, r8, r9, r10, lr} // callee save
mov r8, r1 // save expected

View File

@ -22,8 +22,8 @@
namespace panda::ecmascript {
extern "C" JSTaggedType JSFunctionEntry(uintptr_t glue, uintptr_t prevFp, uint32_t expectedNumArgs,
uint32_t actualNumArgs, uintptr_t codeAddr, ...);
extern "C" JSTaggedType AotCallAotTrampoline(uintptr_t glue, uint32_t expectedNumArgs,
uint32_t actualNumArgs, const JSTaggedType argV[], uintptr_t codeAddr);
extern "C" JSTaggedType OptimizedCallOptimized(uintptr_t glue, uint32_t expectedNumArgs,
uint32_t actualNumArgs, uintptr_t codeAddr, ...);
} // panda::ecmascript
#endif // ECMASCRIPT_BRIDGE_H