Unfotuanelly the code is quite big. But I can give you full assembly produced by AsmJit and few lines of code from my app the probably produced this instruction.
056C0540 55 push ebp
056C0541 8B EC mov ebp,esp
056C0543 53 push ebx
056C0544 56 push esi
056C0545 57 push edi
056C0546 83 EC 2C sub esp,2Ch
056C0549 8B 5D 0C mov ebx,dword ptr [ebp+0Ch]
056C054C 01 1D 88 E8 C1 04 add dword ptr ds:[4C1E888h],ebx
056C0552 8B 4D 08 mov ecx,dword ptr [ebp+8]
056C0555 8B 34 8D 38 3F C2 04 mov esi,dword ptr [ecx*4+4C23F38h]
056C055C 8B 3E mov edi,dword ptr [esi]
056C055E 90 nop
056C055F 01 1D 60 F4 C1 04 add dword ptr ds:[4C1F460h],ebx
056C0565 F7 DB neg ebx
056C0567 8B 0C BD 38 3F C2 04 mov ecx,dword ptr [edi*4+4C23F38h]
056C056E 8B 11 mov edx,dword ptr [ecx]
056C0570 90 nop
056C0571 01 1D 48 E8 C1 04 add dword ptr ds:[4C1E848h],ebx
056C05A1 83 EC 0C sub esp,0Ch
056C05A4 CC int 3
056C05A5 8B 4C 24 14 mov ecx,dword ptr [esp+14h]
056C05A9 83 C1 04 add ecx,4
056C05AC 8B 11 mov edx,dword ptr [ecx]
056C05AE 85 D2 test edx,edx
056C05B0 8B 5D 0C mov ebx,dword ptr [ebp+0Ch]
056C05B3 79 BC jns 056C0571
056C05B5 F7 DB neg ebx
056C05B7 CC int 3
056C05B8 83 C6 04 add esi,4
056C05BB 8B 3E mov edi,dword ptr [esi]
056C05BD 85 FF test edi,edi
056C05BF 79 9E jns 056C055F
056C05C1 83 C4 2C add esp,2Ch
056C05C4 5F pop edi
056C05C5 5E pop esi
056C05C6 5B pop ebx
056C05C7 8B E5 mov esp,ebp
056C05C9 5D pop ebp
056C05CA C3 ret
nop and int3 instructions in the code were used just as marks to find the place in my source that produced the code. The part of code which causes this bug is produced by this function.
void CScriptObject::Jit_performI(CSInteger *target, AsmJit::Compiler &c, CSInteger *src, AsmJit::GPVar &moznost, AsmJit::GPVar &i) {
void **vfptr=*((void***)this);
int vfptr_index=4;
#ifdef DEBUG
vfptr_index=6;
#endif // DEBUG
void *fn_performI=vfptr[vfptr_index];
// workaround
AsmJit::GPVar v1(c.newGP(AsmJit::VARIABLE_TYPE_GPD));
AsmJit::GPVar v2(c.newGP(AsmJit::VARIABLE_TYPE_GPD));
c.mov(v1, AsmJit::imm((int)this));
c.mov(v2, AsmJit::imm((int)src));
AsmJit::ECall *ctx=c.call(fn_performI);
ctx->setPrototype(AsmJit::CALL_CONV_MSTHISCALL, AsmJit::FunctionBuilder4<void, CScriptObject*, CSInteger*, int, int>());
//ctx->setArgument(0, AsmJit::imm((int)this));
//ctx->setArgument(1, AsmJit::imm((int)src));
ctx->setArgument(0, v1);
ctx->setArgument(1, v2);
ctx->setArgument(2, moznost);
ctx->setArgument(3, i);
//this->performI2(src, 10,20);
}