Pointer addition opcodes must leave NULL pointers as they are.

This commit is contained in:
Chronos Ouroboros 2018-08-14 23:08:09 -03:00 committed by drfrag
parent 3c8aa9f641
commit 63cda1c13d

View file

@ -1461,18 +1461,38 @@ JitFuncPtr JitCompile(VMScriptFunction *sfunc)
case OP_ADDA_RR: // pA = pB + dkC
{
auto tmp = cc.newIntPtr();
Label label = cc.newLabel();
cc.mov(tmp, regA[B]);
// Check if zero, the first operand is zero, if it is, don't add.
cc.cmp(tmp, 0);
cc.je(label);
cc.add(tmp, regD[C]);
cc.bind(label);
cc.mov(regA[a], tmp);
break;
}
case OP_ADDA_RK:
{
auto tmp = cc.newIntPtr();
Label label = cc.newLabel();
cc.mov(tmp, regA[B]);
// Check if zero, the first operand is zero, if it is, don't add.
cc.cmp(tmp, 0);
cc.je(label);
cc.add(tmp, konstd[C]);
cc.bind(label);
cc.mov(regA[a], tmp);
break;
}