- fix CASTB opcode implementation

This commit is contained in:
Magnus Norddahl 2018-10-11 04:32:49 +02:00
parent fc870fce87
commit ade6ae24e9

View file

@ -165,8 +165,9 @@ void JitCompiler::EmitCASTB()
{ {
if (C == CASTB_I) if (C == CASTB_I)
{ {
cc.mov(regD[A], regD[B]); cc.cmp(regD[B], (int)0);
cc.shr(regD[A], 31); cc.setne(regD[A]);
cc.movzx(regD[A], regD[A].r8Lo()); // not sure if this is needed
} }
else if (C == CASTB_F) else if (C == CASTB_F)
{ {
@ -174,14 +175,16 @@ void JitCompiler::EmitCASTB()
auto one = newTempInt32(); auto one = newTempInt32();
cc.xorpd(zero, zero); cc.xorpd(zero, zero);
cc.mov(one, 1); cc.mov(one, 1);
cc.ucomisd(regF[A], zero); cc.xor_(regD[A], regD[A]);
cc.ucomisd(regF[B], zero);
cc.setp(regD[A]); cc.setp(regD[A]);
cc.cmovne(regD[A], one); cc.cmovne(regD[A], one);
} }
else if (C == CASTB_A) else if (C == CASTB_A)
{ {
cc.test(regA[A], regA[A]); cc.test(regA[B], regA[B]);
cc.setne(regD[A]); cc.setne(regD[A]);
cc.movzx(regD[A], regD[A].r8Lo()); // not sure if this is needed
} }
else else
{ {