// THIS FILE AUTOGENERATED FROM asm-nseel-x86-gcc.c by a2i.php void nseel_asm_1pdd(void) { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; mov edi, 0xfefefefe; sub esp, 16; fstp qword ptr [esp]; call edi; add esp, 16; _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } } void nseel_asm_2pdd(void) { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; mov edi, 0xfefefefe; sub esp, 16; fstp qword ptr [esp+8]; fstp qword ptr [esp]; call edi; add esp, 16; _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } } void nseel_asm_2pdds(void) { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; mov eax, 0xfefefefe; sub esp, 8; fstp qword ptr [esp]; push dword ptr [edi+4]; /* push parameter */ push dword ptr [edi]; /* push the rest of the parameter */ call eax; add esp, 16; fstp qword ptr [edi]; /* store result */ mov eax, edi; /* set return value */ // denormal-fix result (this is only currently used for pow_op, so we want this!) mov edx, dword ptr [edi+4]; add edx, 0x00100000; and edx, 0x7FF00000; cmp edx, 0x00200000; jg label_0; sub edx, edx; mov dword ptr [edi], edx; mov dword ptr [edi+4], edx; label_0: _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } } //--------------------------------------------------------------------------------------------------------------- void nseel_asm_invsqrt(void) { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; mov edx, 0x5f3759df; fst dword ptr [esi]; _emit 0xDC; // fmul qword ptr [0xfefefefe] _emit 0x0D; _emit 0xFE; _emit 0xFE; _emit 0xFE; _emit 0xFE; mov ecx, dword ptr [esi]; sar ecx, 1; sub edx, ecx; mov dword ptr [esi], edx; fmul dword ptr [esi]; fmul dword ptr [esi]; _emit 0xDC; // fadd qword ptr [0xfefefefe] _emit 0x05; _emit 0xFE; _emit 0xFE; _emit 0xFE; _emit 0xFE; fmul dword ptr [esi]; _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } } void nseel_asm_dbg_getstackptr(void) { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; #ifdef __clang__ ffree st(0); #else fstp st(0); #endif mov dword ptr [esi], esp; fild dword ptr [esi]; _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } } //--------------------------------------------------------------------------------------------------------------- void nseel_asm_sin(void) { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; fsin; _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } } //--------------------------------------------------------------------------------------------------------------- void nseel_asm_cos(void) { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; fcos; _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } } //--------------------------------------------------------------------------------------------------------------- void nseel_asm_tan(void) { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; fptan; fstp st(0); _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } } //--------------------------------------------------------------------------------------------------------------- void nseel_asm_sqr(void) { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; fmul st(0), st(0); _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } } //--------------------------------------------------------------------------------------------------------------- void nseel_asm_sqrt(void) { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; fabs; fsqrt; _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } } //--------------------------------------------------------------------------------------------------------------- void nseel_asm_log(void) { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; fldln2; fxch; fyl2x; _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } } //--------------------------------------------------------------------------------------------------------------- void nseel_asm_log10(void) { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; fldlg2; fxch; fyl2x; _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } } //--------------------------------------------------------------------------------------------------------------- void nseel_asm_abs(void) { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; fabs; _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } } //--------------------------------------------------------------------------------------------------------------- void nseel_asm_assign(void) { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; mov ecx, dword ptr [eax]; mov edx, dword ptr [eax+4]; mov eax, edx; add eax, 0x00100000; // if exponent is zero, make exponent 0x7ff, if 7ff, make 7fe and eax, 0x7ff00000; cmp eax, 0x00200000; jg label_1; sub ecx, ecx; sub edx, edx; label_1: mov eax, edi; mov dword ptr [edi], ecx; mov dword ptr [edi+4], edx; _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } } //--------------------------------------------------------------------------------------------------------------- void nseel_asm_assign_fromfp(void) { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; fstp qword ptr [edi]; mov edx, dword ptr [edi+4]; add edx, 0x00100000; and edx, 0x7FF00000; cmp edx, 0x00200000; mov eax, edi; jg label_2; sub edx, edx; mov dword ptr [edi], edx; mov dword ptr [edi+4], edx; label_2: _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } } //--------------------------------------------------------------------------------------------------------------- void nseel_asm_assign_fast_fromfp(void) { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; mov eax, edi; fstp qword ptr [edi]; _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } } //--------------------------------------------------------------------------------------------------------------- void nseel_asm_assign_fast(void) { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; mov ecx, dword ptr [eax]; mov dword ptr [edi], ecx; mov ecx, dword ptr [eax+4]; mov eax, edi; mov dword ptr [edi+4], ecx; _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } } //--------------------------------------------------------------------------------------------------------------- void nseel_asm_add(void) { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; #ifdef __clang__ faddp st(1); #else fadd; #endif _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } } void nseel_asm_add_op(void) { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; fadd qword ptr [edi]; mov eax, edi; fstp qword ptr [edi]; mov edx, dword ptr [edi+4]; add edx, 0x00100000; and edx, 0x7FF00000; cmp edx, 0x00200000; jg label_3; sub edx, edx; mov dword ptr [edi], edx; mov dword ptr [edi+4], edx; label_3: _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } } void nseel_asm_add_op_fast(void) { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; fadd qword ptr [edi]; mov eax, edi; fstp qword ptr [edi]; _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } } //--------------------------------------------------------------------------------------------------------------- void nseel_asm_sub(void) { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; #ifdef __clang__ fsubrp st(1), st(0); #else #ifdef __GNUC__ #ifdef __INTEL_COMPILER fsub; #else fsubr; // gnuc has fsub/fsubr backwards, ack #endif #else fsub; #endif #endif _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } } void nseel_asm_sub_op(void) { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; fsubr qword ptr [edi]; mov eax, edi; fstp qword ptr [edi]; mov edx, dword ptr [edi+4]; add edx, 0x00100000; and edx, 0x7FF00000; cmp edx, 0x00200000; jg label_4; sub edx, edx; mov dword ptr [edi], edx; mov dword ptr [edi+4], edx; label_4: _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } } void nseel_asm_sub_op_fast(void) { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; fsubr qword ptr [edi]; mov eax, edi; fstp qword ptr [edi]; _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } } //--------------------------------------------------------------------------------------------------------------- void nseel_asm_mul(void) { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; #ifdef __clang__ fmulp st(1), st(0); #else fmul; #endif _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } } void nseel_asm_mul_op(void) { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; fmul qword ptr [edi]; mov eax, edi; fstp qword ptr [edi]; mov edx, dword ptr [edi+4]; add edx, 0x00100000; and edx, 0x7FF00000; cmp edx, 0x00200000; jg label_5; sub edx, edx; mov dword ptr [edi], edx; mov dword ptr [edi+4], edx; label_5: _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } } void nseel_asm_mul_op_fast(void) { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; fmul qword ptr [edi]; mov eax, edi; fstp qword ptr [edi]; _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } } //--------------------------------------------------------------------------------------------------------------- void nseel_asm_div(void) { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; #ifdef __clang__ fdivrp st(1); #else #ifdef __GNUC__ #ifdef __INTEL_COMPILER fdiv; #else fdivr; // gcc inline asm seems to have fdiv/fdivr backwards #endif #else fdiv; #endif #endif _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } } void nseel_asm_div_op(void) { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; fld qword ptr [edi]; #ifdef __clang__ fdivp st(1); #else #ifndef __GNUC__ fdivr; #else #ifdef __INTEL_COMPILER fdivp st(1); #else fdiv; #endif #endif #endif mov eax, edi; fstp qword ptr [edi]; mov edx, dword ptr [edi+4]; add edx, 0x00100000; and edx, 0x7FF00000; cmp edx, 0x00200000; jg label_6; sub edx, edx; mov dword ptr [edi], edx; mov dword ptr [edi+4], edx; label_6: _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } } void nseel_asm_div_op_fast(void) { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; fld qword ptr [edi]; #ifdef __clang__ fdivp st(1); #else #ifndef __GNUC__ fdivr; #else #ifdef __INTEL_COMPILER fdivp st(1); #else fdiv; #endif #endif #endif mov eax, edi; fstp qword ptr [edi]; _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } } //--------------------------------------------------------------------------------------------------------------- void nseel_asm_mod(void) { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; fabs; fistp dword ptr [esi]; fabs; fistp dword ptr [esi+4]; xor edx, edx; cmp dword ptr [esi], 0; je label_7; // skip devide, set return to 0 mov eax, dword ptr [esi+4]; div dword ptr [esi]; label_7: mov dword ptr [esi], edx; fild dword ptr [esi]; _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } } void nseel_asm_shl(void) { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; fistp dword ptr [esi]; fistp dword ptr [esi+4]; mov ecx, dword ptr [esi]; mov eax, dword ptr [esi+4]; shl eax, cl; mov dword ptr [esi], eax; fild dword ptr [esi]; _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } } void nseel_asm_shr(void) { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; fistp dword ptr [esi]; fistp dword ptr [esi+4]; mov ecx, dword ptr [esi]; mov eax, dword ptr [esi+4]; sar eax, cl; mov dword ptr [esi], eax; fild dword ptr [esi]; _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } } void nseel_asm_mod_op(void) { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; fld qword ptr [edi]; fxch; fabs; fistp dword ptr [edi]; fabs; fistp dword ptr [esi]; xor edx, edx; cmp dword ptr [edi], 0; je label_8; // skip devide, set return to 0 mov eax, dword ptr [esi]; div dword ptr [edi]; label_8: mov dword ptr [edi], edx; fild dword ptr [edi]; mov eax, edi; fstp qword ptr [edi]; _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } } //--------------------------------------------------------------------------------------------------------------- void nseel_asm_or(void) { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; fistp qword ptr [esi]; fistp qword ptr [esi+8]; mov edi, dword ptr [esi+8]; mov ecx, dword ptr [esi+12]; or dword ptr [esi], edi; or dword ptr [esi+4], ecx; fild qword ptr [esi]; _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } } void nseel_asm_or0(void) { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; fistp qword ptr [esi]; fild qword ptr [esi]; _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } } void nseel_asm_or_op(void) { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; fld qword ptr [edi]; fxch; fistp qword ptr [edi]; fistp qword ptr [esi]; mov eax, dword ptr [esi]; mov ecx, dword ptr [esi+4]; or dword ptr [edi], eax; or dword ptr [edi+4], ecx; fild qword ptr [edi]; mov eax, edi; fstp qword ptr [edi]; _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } } void nseel_asm_xor(void) { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; fistp qword ptr [esi]; fistp qword ptr [esi+8]; mov edi, dword ptr [esi+8]; mov ecx, dword ptr [esi+12]; xor dword ptr [esi], edi; xor dword ptr [esi+4], ecx; fild qword ptr [esi]; _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } } void nseel_asm_xor_op(void) { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; fld qword ptr [edi]; fxch; fistp qword ptr [edi]; fistp qword ptr [esi]; mov eax, dword ptr [esi]; mov ecx, dword ptr [esi+4]; xor dword ptr [edi], eax; xor dword ptr [edi+4], ecx; fild qword ptr [edi]; mov eax, edi; fstp qword ptr [edi]; _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } } //--------------------------------------------------------------------------------------------------------------- void nseel_asm_and(void) { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; fistp qword ptr [esi]; fistp qword ptr [esi+8]; mov edi, dword ptr [esi+8]; mov ecx, dword ptr [esi+12]; and dword ptr [esi], edi; and dword ptr [esi+4], ecx; fild qword ptr [esi]; _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } } void nseel_asm_and_op(void) { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; fld qword ptr [edi]; fxch; fistp qword ptr [edi]; fistp qword ptr [esi]; mov eax, dword ptr [esi]; mov ecx, dword ptr [esi+4]; and dword ptr [edi], eax; and dword ptr [edi+4], ecx; fild qword ptr [edi]; mov eax, edi; fstp qword ptr [edi]; _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } } //--------------------------------------------------------------------------------------------------------------- void nseel_asm_uminus(void) { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; fchs; _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } } //--------------------------------------------------------------------------------------------------------------- void nseel_asm_sign(void) { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; fst dword ptr [esi]; mov ecx, dword ptr [esi]; mov edx, 0x7FFFFFFF; test ecx, edx; jz label_9; // zero zero, return the value passed directly // calculate sign inc edx; // edx becomes 0x8000... fstp st(0); fld1; test ecx, edx; jz label_9; fchs; label_9: _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } } //--------------------------------------------------------------------------------------------------------------- void nseel_asm_bnot(void) { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; test eax, eax; setz al; and eax, 0xff; _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } } //--------------------------------------------------------------------------------------------------------------- void nseel_asm_fcall(void) { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; mov edx, 0xfefefefe; sub esp, 12; /* keep stack 16 byte aligned, 4 bytes for return address */ call edx; add esp, 12; _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } } void nseel_asm_band(void) { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; test eax, eax; jz label_10; mov ecx, 0xfefefefe; sub esp, 12; call ecx; add esp, 12; label_10: _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } } void nseel_asm_bor(void) { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; test eax, eax; jnz label_11; mov ecx, 0xfefefefe; sub esp, 12; call ecx; add esp, 12; label_11: _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } } //--------------------------------------------------------------------------------------------------------------- void nseel_asm_equal(void) { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; #ifdef __clang__ fsubp st(1); #else fsub; #endif fabs; fcomp qword ptr [ebx+-8]; //[g_closefact] fstsw ax; and eax, 256; // old behavior: if 256 set, true (NaN means true) _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } } // //--------------------------------------------------------------------------------------------------------------- void nseel_asm_equal_exact(void) { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; fcompp; fstsw ax; // for equal 256 and 1024 should be clear, 16384 should be set and eax, 17664; // mask C4/C3/C1, bits 8/10/14, 16384|256|1024 -- if equals 16384, then equality cmp eax, 16384; je label_12; sub eax, eax; label_12: _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } } void nseel_asm_notequal_exact(void) { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; fcompp; fstsw ax; // for equal 256 and 1024 should be clear, 16384 should be set and eax, 17664; // mask C4/C3/C1, bits 8/10/14, 16384|256|1024 -- if equals 16384, then equality cmp eax, 16384; je label_13; sub eax, eax; label_13: xor eax, 16384; // flip the result _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } } // //--------------------------------------------------------------------------------------------------------------- void nseel_asm_notequal(void) { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; #ifdef __clang__ fsubp st(1); #else fsub; #endif fabs; fcomp qword ptr [ebx+-8]; //[g_closefact] fstsw ax; and eax, 256; xor eax, 256; // old behavior: if 256 set, FALSE (NaN makes for false) _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } } //--------------------------------------------------------------------------------------------------------------- void nseel_asm_above(void) { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; fcompp; fstsw ax; and eax, 1280; // (1024+256) old behavior: NaN would mean 1, preserve that _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } } //--------------------------------------------------------------------------------------------------------------- void nseel_asm_beloweq(void) { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; fcompp; fstsw ax; and eax, 256; // old behavior: NaN would be 0 (ugh) xor eax, 256; _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } } void nseel_asm_booltofp(void) { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; test eax, eax; jz label_14; fld1; jmp label_15; label_14: fldz; label_15: _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } } void nseel_asm_fptobool(void) { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; fabs; fcomp qword ptr [ebx+-8]; //[g_closefact] fstsw ax; and eax, 256; xor eax, 256; _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } } void nseel_asm_fptobool_rev(void) { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; fabs; fcomp qword ptr [ebx+-8]; //[g_closefact] fstsw ax; and eax, 256; _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } } void nseel_asm_min(void) { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; fld qword ptr [edi]; fcomp qword ptr [eax]; mov ecx, eax; fstsw ax; test eax, 256; mov eax, ecx; jz label_16; mov eax, edi; label_16: _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } } void nseel_asm_max(void) { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; fld qword ptr [edi]; fcomp qword ptr [eax]; mov ecx, eax; fstsw ax; test eax, 256; mov eax, ecx; jnz label_17; mov eax, edi; label_17: _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } } void nseel_asm_min_fp(void) { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; fcom; fstsw ax; test eax, 256; jz label_18; fxch; label_18: fstp st(0); _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } } void nseel_asm_max_fp(void) { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; fcom; fstsw ax; test eax, 256; jnz label_19; fxch; label_19: fstp st(0); _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } } // just generic functions left, yay void _asm_generic3parm(void) { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; mov edx, 0xfefefefe; push eax; // push parameter push edi; // push parameter mov edi, 0xfefefefe; push ecx; // push parameter push edx; // push context pointer call edi; add esp, 16; _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } } void _asm_generic3parm_retd(void) { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; sub esp, 16; mov edx, 0xfefefefe; mov dword ptr [esp+8], edi; mov edi, 0xfefefefe; mov dword ptr [esp+12], eax; mov dword ptr [esp+4], ecx; mov dword ptr [esp], edx; call edi; add esp, 16; _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } } void _asm_generic2parm(void) // this prob neds to be fixed for ppc { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; mov edx, 0xfefefefe; mov ecx, 0xfefefefe; sub esp, 4; // keep stack aligned push eax; // push parameter push edi; // push parameter push edx; // push context pointer call ecx; add esp, 16; _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } } void _asm_generic2parm_retd(void) { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; sub esp, 16; mov edx, 0xfefefefe; mov ecx, 0xfefefefe; mov dword ptr [esp], edx; mov dword ptr [esp+4], edi; mov dword ptr [esp+8], eax; call ecx; add esp, 16; _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } } void _asm_generic2xparm_retd(void) { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; sub esp, 16; mov edx, 0xfefefefe; // first parameter mov dword ptr [esp], edx; mov dword ptr [esp+8], edi; mov edx, 0xfefefefe; mov ecx, 0xfefefefe; // function mov dword ptr [esp+4], edx; mov dword ptr [esp+12], eax; call ecx; add esp, 16; _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } } void _asm_generic1parm(void) { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; mov edx, 0xfefefefe; sub esp, 8; // keep stack aligned mov ecx, 0xfefefefe; push eax; // push parameter push edx; // push context pointer call ecx; add esp, 16; _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } } void _asm_generic1parm_retd(void) // 1 parameter returning double { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; mov edx, 0xfefefefe; // context pointer mov ecx, 0xfefefefe; // func-addr sub esp, 16; mov dword ptr [esp+4], eax; // push parameter mov dword ptr [esp], edx; // push context pointer call ecx; add esp, 16; _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } } // this gets its own stub because it's pretty crucial for performance :/ void _asm_megabuf(void) { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; fadd qword ptr [ebx+-8]; fistp dword ptr [esi]; // check if (%esi) is in range, and buffer available, otherwise call function mov edi, dword ptr [esi]; cmp edi, ((NSEEL_RAM_BLOCKS*NSEEL_RAM_ITEMSPERBLOCK)); //REPLACE=((NSEEL_RAM_BLOCKS*NSEEL_RAM_ITEMSPERBLOCK)) jae label_20; mov eax, edi; shr eax, (NSEEL_RAM_ITEMSPERBLOCK_LOG2 - 2/*log2(sizeof(void *))*/ ); //REPLACE=(NSEEL_RAM_ITEMSPERBLOCK_LOG2 - 2/*log2(sizeof(void *))*/ ) and eax, ((NSEEL_RAM_BLOCKS-1)*4 /*sizeof(void*)*/ ); //REPLACE=((NSEEL_RAM_BLOCKS-1)*4 /*sizeof(void*)*/ ) mov eax, dword ptr [ebx+eax]; test eax, eax; jnz label_21; label_20: sub esp, 8; // keep stack aligned mov ecx, 0xfefefefe; push edi; // parameter push ebx; // push context pointer call ecx; add esp, 16; jmp label_22; label_21: and edi, (NSEEL_RAM_ITEMSPERBLOCK-1); //REPLACE=(NSEEL_RAM_ITEMSPERBLOCK-1) shl edi, 3; // 3 is log2(sizeof(EEL_F)) add eax, edi; label_22: _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; #ifndef _MSC_VER :: i; (((NSEEL_RAM_BLOCKS*NSEEL_RAM_ITEMSPERBLOCK))), i; ((NSEEL_RAM_ITEMSPERBLOCK_LOG2 - 2/*log2(sizeof(void *))*/ )), i; (((NSEEL_RAM_BLOCKS-1)*4 /*sizeof(void*)*/ )), i; ((NSEEL_RAM_ITEMSPERBLOCK-1 )) #endif } } void _asm_gmegabuf(void) { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; sub esp, 16; // keep stack aligned mov dword ptr [esp], 0xfefefefe; fadd qword ptr [ebx+-8]; mov edi, 0xfefefefe; fistp dword ptr [esp+4]; call edi; add esp, 16; _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } } void nseel_asm_stack_push(void) { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; mov edi, 0xfefefefe; mov ecx, dword ptr [eax]; mov edx, dword ptr [eax+4]; mov eax, dword ptr [edi]; add eax, 8; and eax, 0xfefefefe; or eax, 0xfefefefe; mov dword ptr [eax], ecx; mov dword ptr [eax+4], edx; mov dword ptr [edi], eax; _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } } void nseel_asm_stack_pop(void) { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; mov edi, 0xfefefefe; mov ecx, dword ptr [edi]; fld qword ptr [ecx]; sub ecx, 8; and ecx, 0xfefefefe; or ecx, 0xfefefefe; mov dword ptr [edi], ecx; fstp qword ptr [eax]; _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } } void nseel_asm_stack_pop_fast(void) { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; mov edi, 0xfefefefe; mov ecx, dword ptr [edi]; mov eax, ecx; sub ecx, 8; and ecx, 0xfefefefe; or ecx, 0xfefefefe; mov dword ptr [edi], ecx; _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } } void nseel_asm_stack_peek_int(void) { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; mov edi, 0xfefefefe; mov eax, dword ptr [edi]; mov edx, 0xfefefefe; sub eax, edx; and eax, 0xfefefefe; or eax, 0xfefefefe; _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } } void nseel_asm_stack_peek(void) { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; mov edi, 0xfefefefe; fistp dword ptr [esi]; mov eax, dword ptr [edi]; mov edx, dword ptr [esi]; shl edx, 3; // log2(sizeof(EEL_F)) sub eax, edx; and eax, 0xfefefefe; or eax, 0xfefefefe; _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } } void nseel_asm_stack_peek_top(void) { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; mov edi, 0xfefefefe; mov eax, dword ptr [edi]; _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } } void nseel_asm_stack_exch(void) { __asm { _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; mov edi, 0xfefefefe; mov ecx, dword ptr [edi]; fld qword ptr [ecx]; fld qword ptr [eax]; fstp qword ptr [ecx]; fstp qword ptr [eax]; _emit 0x89; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; _emit 0x90; } }