Save rest of ymms in SaveContext (#2512)

This commit is contained in:
Paris Oplopoios 2025-02-24 06:02:52 +02:00 committed by GitHub
parent 229740f557
commit 07baf17c2a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -225,9 +225,9 @@ static void SaveContext(Xbyak::CodeGenerator& c, bool save_flags = false) {
for (int reg = Xbyak::Operand::RAX; reg <= Xbyak::Operand::R15; reg++) {
c.push(Xbyak::Reg64(reg));
}
for (int reg = 0; reg <= 7; reg++) {
c.lea(rsp, ptr[rsp - 32]);
c.vmovdqu(ptr[rsp], Xbyak::Ymm(reg));
c.lea(rsp, ptr[rsp - 32 * 16]);
for (int reg = 0; reg <= 15; reg++) {
c.vmovdqu(ptr[rsp + 32 * reg], Xbyak::Ymm(reg));
}
if (save_flags) {
c.pushfq();
@ -241,12 +241,12 @@ static void RestoreContext(Xbyak::CodeGenerator& c, const Xbyak::Operand& dst,
if (restore_flags) {
c.popfq();
}
for (int reg = 7; reg >= 0; reg--) {
for (int reg = 15; reg >= 0; reg--) {
if ((!dst.isXMM() && !dst.isYMM()) || dst.getIdx() != reg) {
c.vmovdqu(Xbyak::Ymm(reg), ptr[rsp]);
c.vmovdqu(Xbyak::Ymm(reg), ptr[rsp + 32 * reg]);
}
c.lea(rsp, ptr[rsp + 32]);
}
c.lea(rsp, ptr[rsp + 32 * 16]);
for (int reg = Xbyak::Operand::R15; reg >= Xbyak::Operand::RAX; reg--) {
if (!dst.isREG() || dst.getIdx() != reg) {
c.pop(Xbyak::Reg64(reg));