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 Christoph Oelckers
parent ac462638d3
commit a8ce626708

View file

@ -1461,18 +1461,38 @@ JitFuncPtr JitCompile(VMScriptFunction *sfunc)
case OP_ADDA_RR: // pA = pB + dkC case OP_ADDA_RR: // pA = pB + dkC
{ {
auto tmp = cc.newIntPtr(); auto tmp = cc.newIntPtr();
Label label = cc.newLabel();
cc.mov(tmp, regA[B]); 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.add(tmp, regD[C]);
cc.bind(label);
cc.mov(regA[a], tmp); cc.mov(regA[a], tmp);
break; break;
} }
case OP_ADDA_RK: case OP_ADDA_RK:
{ {
auto tmp = cc.newIntPtr(); auto tmp = cc.newIntPtr();
Label label = cc.newLabel();
cc.mov(tmp, regA[B]); 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.add(tmp, konstd[C]);
cc.bind(label);
cc.mov(regA[a], tmp); cc.mov(regA[a], tmp);
break; break;
} }