backend/x64: Ensure all HostCalls are appropriately zero-extended
This commit is contained in:
parent
6c4fa780e0
commit
0a11e79b55
3 changed files with 5 additions and 0 deletions
|
@ -243,6 +243,7 @@ void A32EmitX64::EmitMemoryRead(A32EmitContext& ctx, IR::Inst* inst) {
|
|||
// Neither fastmem nor page table: Use callbacks
|
||||
ctx.reg_alloc.HostCall(inst, {}, args[0]);
|
||||
Devirtualize<callback>(conf.callbacks).EmitCall(code);
|
||||
code.ZeroExtendFrom(bitsize, code.ABI_RETURN);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -386,6 +387,7 @@ void A32EmitX64::ExclusiveReadMemory(A32EmitContext& ctx, IR::Inst* inst) {
|
|||
return (conf.callbacks->*callback)(vaddr);
|
||||
});
|
||||
});
|
||||
code.ZeroExtendFrom(bitsize, code.ABI_RETURN);
|
||||
}
|
||||
|
||||
template<size_t bitsize, auto callback>
|
||||
|
|
|
@ -406,6 +406,7 @@ void A64EmitX64::EmitMemoryRead(A64EmitContext& ctx, IR::Inst* inst) {
|
|||
} else {
|
||||
ctx.reg_alloc.HostCall(inst, {}, args[0]);
|
||||
Devirtualize<callback>(conf.callbacks).EmitCall(code);
|
||||
code.ZeroExtendFrom(bitsize, code.ABI_RETURN);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
@ -574,6 +575,7 @@ void A64EmitX64::EmitExclusiveReadMemory(A64EmitContext& ctx, IR::Inst* inst) {
|
|||
return (conf.callbacks->*callback)(vaddr);
|
||||
});
|
||||
});
|
||||
code.ZeroExtendFrom(bitsize, code.ABI_RETURN);
|
||||
} else {
|
||||
const Xbyak::Xmm result = ctx.reg_alloc.ScratchXmm();
|
||||
ctx.reg_alloc.Use(args[0], ABI_PARAM2);
|
||||
|
|
|
@ -15,6 +15,7 @@ void EmitX64::EmitSM4AccessSubstitutionBox(EmitContext& ctx, IR::Inst* inst) {
|
|||
|
||||
ctx.reg_alloc.HostCall(inst, args[0]);
|
||||
code.CallFunction(&Common::Crypto::SM4::AccessSubstitutionBox);
|
||||
code.movzx(code.ABI_RETURN.cvt32(), code.ABI_RETURN.cvt8());
|
||||
}
|
||||
|
||||
} // namespace Dynarmic::Backend::X64
|
||||
|
|
Loading…
Reference in a new issue