DSPJIT: RegCache: Fix writing immediates to guest registers
This commit is contained in:
parent
5440ddde14
commit
6873443a9a
|
@ -854,6 +854,23 @@ void DSPJitRegCache::writeReg(int dreg, OpArg arg)
|
||||||
{
|
{
|
||||||
OpArg reg;
|
OpArg reg;
|
||||||
getReg(dreg, reg, false);
|
getReg(dreg, reg, false);
|
||||||
|
if (arg.IsImm()) {
|
||||||
|
switch(regs[dreg].size) {
|
||||||
|
case 2: emitter.MOV(16, reg, Imm16(arg.offset)); break;
|
||||||
|
case 4: emitter.MOV(32, reg, Imm32(arg.offset)); break;
|
||||||
|
#ifdef _M_X64
|
||||||
|
case 8:
|
||||||
|
if ((s32)arg.offset == (s64)arg.offset)
|
||||||
|
emitter.MOV(64, reg, Imm32(arg.offset));
|
||||||
|
else
|
||||||
|
emitter.MOV(64, reg, Imm64(arg.offset));
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
default:
|
||||||
|
_assert_msg_(DSPLLE, 0, "unsupported memory size");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
switch(regs[dreg].size) {
|
switch(regs[dreg].size) {
|
||||||
case 2: emitter.MOV(16, reg, arg); break;
|
case 2: emitter.MOV(16, reg, arg); break;
|
||||||
case 4: emitter.MOV(32, reg, arg); break;
|
case 4: emitter.MOV(32, reg, arg); break;
|
||||||
|
@ -864,6 +881,7 @@ void DSPJitRegCache::writeReg(int dreg, OpArg arg)
|
||||||
_assert_msg_(DSPLLE, 0, "unsupported memory size");
|
_assert_msg_(DSPLLE, 0, "unsupported memory size");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
putReg(dreg, true);
|
putReg(dreg, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue