This commit is contained in:
Merry 2022-11-27 18:28:55 +00:00 committed by Liam
parent a3fc95204b
commit 59ccccdc26

View file

@ -24,7 +24,20 @@ static void EmitCoprocessorException() {
} }
static void CallCoprocCallback(oaknut::CodeGenerator& code, EmitContext& ctx, A32::Coprocessor::Callback callback, IR::Inst* inst = nullptr, std::optional<Argument::copyable_reference> arg0 = {}, std::optional<Argument::copyable_reference> arg1 = {}) { static void CallCoprocCallback(oaknut::CodeGenerator& code, EmitContext& ctx, A32::Coprocessor::Callback callback, IR::Inst* inst = nullptr, std::optional<Argument::copyable_reference> arg0 = {}, std::optional<Argument::copyable_reference> arg1 = {}) {
const auto Xresult = ctx.reg_alloc.PrepareForCallReg(inst, {}, arg0, arg1); if (inst) {
const auto Xresult = ctx.reg_alloc.PrepareForCallReg(inst, {}, arg0, arg1);
if (callback.user_arg) {
code.MOV(X0, reinterpret_cast<u64>(*callback.user_arg));
}
code.MOV(Xscratch0, reinterpret_cast<u64>(callback.function));
code.BLR(Xscratch0);
code.MOV(Xresult, X0);
return;
}
ctx.reg_alloc.PrepareForCall({}, arg0, arg1);
if (callback.user_arg) { if (callback.user_arg) {
code.MOV(X0, reinterpret_cast<u64>(*callback.user_arg)); code.MOV(X0, reinterpret_cast<u64>(*callback.user_arg));
@ -32,7 +45,6 @@ static void CallCoprocCallback(oaknut::CodeGenerator& code, EmitContext& ctx, A3
code.MOV(Xscratch0, reinterpret_cast<u64>(callback.function)); code.MOV(Xscratch0, reinterpret_cast<u64>(callback.function));
code.BLR(Xscratch0); code.BLR(Xscratch0);
code.MOV(Xresult, X0);
} }
template<> template<>