diff --git a/src/backend/core/registers/Registers.cpp b/src/backend/core/registers/Registers.cpp index edadf2b9..ad97fb78 100644 --- a/src/backend/core/registers/Registers.cpp +++ b/src/backend/core/registers/Registers.cpp @@ -78,41 +78,81 @@ s8 Registers::Read(size_t idx) { #ifndef __aarch64__ template <> void Registers::Read(size_t idx, Xbyak::Reg reg) { + if(IsRegConstant(idx)) { + jit->code.mov(reg.cvt64(), Read(idx)); + return; + } + jit->code.mov(reg.cvt64(), jit->GPR(idx)); } template <> void Registers::Read(size_t idx, Xbyak::Reg reg) { + if(IsRegConstant(idx)) { + jit->code.mov(reg.cvt64(), Read(idx)); + return; + } + jit->code.mov(reg.cvt64(), jit->GPR(idx)); } template <> void Registers::Read(size_t idx, Xbyak::Reg reg) { + if(IsRegConstant(idx)) { + jit->code.mov(reg.cvt32(), Read(idx)); + return; + } + jit->code.mov(reg.cvt32(), jit->GPR(idx)); } template <> void Registers::Read(size_t idx, Xbyak::Reg reg) { + if(IsRegConstant(idx)) { + jit->code.mov(reg.cvt32(), Read(idx)); + return; + } + jit->code.mov(reg.cvt32(), jit->GPR(idx)); } template <> void Registers::Read(size_t idx, Xbyak::Reg reg) { + if(IsRegConstant(idx)) { + jit->code.mov(reg.cvt16(), Read(idx)); + return; + } + jit->code.mov(reg.cvt16(), jit->GPR(idx)); } template <> void Registers::Read(size_t idx, Xbyak::Reg reg) { + if(IsRegConstant(idx)) { + jit->code.mov(reg.cvt16(), Read(idx)); + return; + } + jit->code.mov(reg.cvt16(), jit->GPR(idx)); } template <> void Registers::Read(size_t idx, Xbyak::Reg reg) { + if(IsRegConstant(idx)) { + jit->code.mov(reg.cvt8(), Read(idx)); + return; + } + jit->code.mov(reg.cvt8(), jit->GPR(idx)); } template <> void Registers::Read(size_t idx, Xbyak::Reg reg) { + if(IsRegConstant(idx)) { + jit->code.mov(reg.cvt8(), Read(idx)); + return; + } + jit->code.mov(reg.cvt8(), jit->GPR(idx)); } #endif