Skip to content

Instantly share code, notes, and snippets.

@y-ack
Last active May 12, 2018 14:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save y-ack/1dcff249d41ddc22d933ca88cce1736a to your computer and use it in GitHub Desktop.
Save y-ack/1dcff249d41ddc22d933ca88cce1736a to your computer and use it in GitHub Desktop.
code (hex)instruction
36CHKLABEL
37CHKCALL
38CHKVAR
39???
3A???
3B???
3CPOP
3DSHIFT
3ELEN
3FASC
40CHR$
41VAL
42STR$
43HEX$
44LEFT$
45RIGHT$
46RND
47RNDF
48ABS
49SGN
4ARAD
4BDEG
4CMIN
4DMAX
4ESQRT
4FLOG
50EXP
51POW
52CEIL
53ROUND
54FLOOR
55SIN
56COS
57TAN
58ASIN
59ACOS
5AATAN
5BATAN(2)
5CSINH
5DCOSH
5ETANH

Different somehow:

5FPRINT
60INPUT
61LINPUT
62XON
63XOFF
//----- (001986D0) --------------------------------------------------------
//bookmark bytecode interpreter
int __fastcall sub_1986D0(int **arg1, int arg2, int arg3, int arg4)
{
int v4; // r6@0
int v5; // r2@1
__int64 v6; // r0@2
int v7; // r5@8
int v8; // r6@8
int v9; // r2@8
int v10; // r3@8
signed int v11; // r4@8
int v12; // r3@9
int v13; // r5@17
int v14; // r7@17
int v15; // r2@17
int v16; // r3@17
int v17; // r3@18
int v18; // r4@24
int v19; // r5@24
signed int v20; // r0@24
int v21; // r2@24
int v22; // r3@24
signed int v23; // r5@27
int v24; // r5@32
int v25; // r7@32
signed int v26; // r0@32
int v27; // r3@32
_WORD *v28; // r0@34
int v30; // r0@38
int v31; // r4@47
int v32; // r5@47
int v33; // r3@50
_WORD *v34; // r0@51
int v35; // r5@59
int v36; // r4@59
int v37; // r3@59
int v38; // r3@60
double *v39; // r1@62
int v40; // r5@67
int v41; // r4@67
int v42; // r3@67
double *v43; // r1@70
int v44; // r5@75
int v45; // r4@75
signed int v46; // r0@75
int v47; // r3@75
int v48; // r3@76
int v49; // r5@83
int v50; // r4@83
signed int v51; // r0@83
int v52; // r3@83
int v53; // r3@84
int v54; // r4@92
int v55; // r5@92
int v56; // r3@93
int v60; // r4@101
int v61; // r5@101
int v62; // r3@102
int v63; // r3@104
int v64; // r1@106
int v65; // r4@112
int v66; // r5@112
int v67; // r3@112
int v68; // r5@127
int v69; // r4@127
int v70; // r4@131
int v71; // r5@131
int v72; // r4@138
int v73; // r5@138
int v74; // r3@139
int v75; // r4@148
int v76; // r5@148
int v77; // r5@153
int v78; // r4@153
int v79; // r3@153
int v80; // r3@160
int v83; // r4@167
int v84; // r5@167
int v85; // r3@168
int v86; // r3@170
int v87; // r4@177
int v88; // r5@177
int v89; // r3@178
int v90; // r3@180
int v91; // r5@190
int v92; // r4@190
int v93; // r3@191
int v94; // r3@193
int v95; // r4@200
int v96; // r5@200
int v97; // r4@205
int v98; // r5@205
int v99; // r4@210
int v100; // r5@210
int v101; // r3@213
int v102; // r4@219
int v103; // r5@219
int v104; // r3@220
int v105; // r4@231
int v106; // r5@231
int v107; // r3@232
int v108; // r4@243
int v109; // r5@243
int v110; // r5@248
int v111; // r4@248
int v112; // r3@248
int v115; // r4@256
int v116; // r5@256
int v117; // r4@261
int v118; // r5@261
int v119; // r4@266
int v120; // r5@266
int v122; // [sp+4h] [bp-6Ch]@25
double v123; // [sp+8h] [bp-68h]@9
double v124; // [sp+10h] [bp-60h]@106
double v125; // [sp+18h] [bp-58h]@8
double v126; // [sp+20h] [bp-50h]@18
int v127; // [sp+28h] [bp-48h]@64
unsigned int *v128[4]; // [sp+30h] [bp-40h]@77
char v129; // [sp+40h] [bp-30h]@160
v5 = (arg2 & 0x7F) - 54;
switch ( arg2 & 0x7F )
{
case 0x36:
LODWORD(v6) = sub_1951C0(arg1, arg2);
return v6;
case 0x37:
LODWORD(v6) = sub_194A70(arg1, arg2);
return v6;
case 0x38:
LODWORD(v6) = sub_1948C8(arg1, arg2);
return v6;
case 0x39:
LODWORD(v6) = sub_19A33C((int)arg1, arg2, v5, arg4);
return v6;
case 0x3A:
LODWORD(v6) = sub_199FAC((int)arg1, arg2, v5, arg4);
return v6;
case 0x3B:
LODWORD(v6) = sub_19BCF4((int)arg1);
return v6;
case 0x3C:
v7 = (int)arg1;
v8 = arg2;
LOBYTE(v125) = 0;
v11 = sub_1BB2C0(arg1, (unsigned int)(arg2 << 19) >> 29, (int)&v125);
if ( v11
|| (v11 = sub_147BE4((_BYTE **)HIDWORD(v125), (int)&v123, v9, v10)) != 0
|| (v11 = sub_1BACEC(v7, (unsigned int)(v8 << 17) >> 30, (int)&v123, v12),
(*(void (__fastcall **)(double *))(LODWORD(v123) + 12))(&v123),
v11) )
{
*(_DWORD *)(v7 + 24) = dword_2DBCE4;
if ( LOBYTE(v125) )
(*(void (**)(void))(*(_DWORD *)HIDWORD(v125) + 12))();
goto LABEL_88;
}
if ( LOBYTE(v125) )
(*(void (**)(void))(*(_DWORD *)HIDWORD(v125) + 12))();
LODWORD(v6) = 0;
return v6;
case 0x3D:
v13 = (int)arg1;
v14 = arg2;
LOBYTE(v123) = 0;
v11 = sub_1BB2C0(arg1, (unsigned int)(arg2 << 19) >> 29, (int)&v123);
if ( v11
|| (v11 = sub_147EB0((_BYTE **)HIDWORD(v123), (int)&v126, v15, v16)) != 0
|| (v11 = sub_1BACEC(v13, (unsigned int)(v14 << 17) >> 30, (int)&v126, v17),
(*(void (__fastcall **)(double *))(LODWORD(v126) + 12))(&v126),
v11) )
{
*(_DWORD *)(v13 + 24) = dword_2DBCE8;
if ( !LOBYTE(v123) )
goto LABEL_88;
goto LABEL_44;
}
if ( !LOBYTE(v123) )
goto LABEL_271;
goto LABEL_23;
case 0x3E:
v18 = (int)arg1;
v19 = arg2;
LOBYTE(v123) = 0;
v20 = sub_1BB2C0(arg1, (unsigned int)(arg2 << 19) >> 29, (int)&v123);
if ( v20
|| (v20 = sub_147B6C(SHIDWORD(v123), &v122, v21, v22)) != 0
|| (v20 = sub_1BB104(v18, (unsigned int)(v19 << 17) >> 30, v122)) != 0 )
{
v23 = v20;
*(_DWORD *)(v18 + 24) = dword_2DBCEC;
if ( LOBYTE(v123) )
(*(void (**)(void))(*(_DWORD *)HIDWORD(v123) + 12))();
LODWORD(v6) = v23;
return v6;
}
if ( LOBYTE(v123) )
goto LABEL_23;
goto LABEL_271;
case 0x3F:
v24 = (int)arg1;
v25 = arg2;
v11 = 0;
LOBYTE(v123) = 0;
v26 = sub_1BB2C0(arg1, (unsigned int)(arg2 << 19) >> 29, (int)&v123);
if ( v26 )
goto LABEL_43;
if ( *(_BYTE *)(*(_DWORD *)HIDWORD(v123) + 2) )
{
v28 = (_WORD *)(*(int (**)(void))(*(_DWORD *)HIDWORD(v123) + 80))();
_ZF = v28 == 0;
if ( v28 )
_ZF = HIDWORD(v126) == 0;
if ( !_ZF )
{
v4 = *v28;
goto LABEL_39;
}
v30 = 4;
}
else
{
v30 = 8;
}
v26 = sub_1E8FF4(v30, 0, 0, v27);
if ( v26 )
goto LABEL_43;
LABEL_39:
v26 = sub_1BB104(v24, (unsigned int)(v25 << 17) >> 30, v4);
if ( v26 )
{
LABEL_43:
v11 = v26;
*(_DWORD *)(v24 + 24) = dword_2DBCF0;
if ( !LOBYTE(v123) )
goto LABEL_88;
goto LABEL_44;
}
if ( LOBYTE(v123) )
goto LABEL_44;
LABEL_88:
LODWORD(v6) = v11;
return v6;
case 0x40:
v31 = (int)arg1;
v32 = arg2;
LODWORD(v6) = sub_1BAA0C(arg1, (unsigned int)(arg2 << 19) >> 29, &v123, arg4);
if ( (_DWORD)v6 )
goto LABEL_57;
LODWORD(v6) = (*(int (__fastcall **)(double *, double *))(LODWORD(v123) + 64))(&v123, &v126);
if ( (_DWORD)v6 )
{
dword_2DC668 = 0;
}
else
{
if ( sub_1D6888((unsigned int **)&v125, 1, 0) )
{
v34 = (_WORD *)LODWORD(v125);
if ( LODWORD(v125) )
v34 = (_WORD *)(*(_DWORD *)LODWORD(v125) + 24);
*v34 = LOWORD(v126);
goto LABEL_56;
}
LODWORD(v6) = sub_1E8FF4(11, -1, 0, v33);
}
if ( (_DWORD)v6 )
goto LABEL_57;
LABEL_56:
LODWORD(v6) = sub_1BAC3C(v31, (unsigned int)(v32 << 17) >> 30, (int *)&v125);
if ( !(_DWORD)v6 )
return v6;
LABEL_57:
*(_DWORD *)(v31 + 24) = dword_2DBCF4;
return v6;
case 0x41:
LODWORD(v6) = sub_19B494(arg1, arg2);
return v6;
case 0x42:
v35 = (int)arg1;
v36 = arg2;
LODWORD(v6) = sub_1BAA0C(arg1, (unsigned int)(arg2 << 19) >> 29, &v125, arg4);
if ( (_DWORD)v6
|| (LODWORD(v6) = sub_1BAA0C((int **)v35, (unsigned int)(v36 << 22) >> 29, &v123, v37), (_DWORD)v6)
|| (!*(_BYTE *)(LODWORD(v123) + 4) ? (v39 = &v123) : (v39 = 0),
(LODWORD(v6) = sub_1D2FC0((int)&v125, (int)v39, (unsigned int **)&v127, v38), (_DWORD)v6)
|| (LODWORD(v6) = sub_1BAC3C(v35, (unsigned int)(v36 << 17) >> 30, &v127), (_DWORD)v6)) )
{
*(_DWORD *)(v35 + 24) = dword_2DBCFC;
}
return v6;
case 0x43:
v40 = (int)arg1;
v41 = arg2;
LODWORD(v6) = sub_1BAA0C(arg1, (unsigned int)(arg2 << 19) >> 29, &v125, arg4);
if ( (_DWORD)v6
|| (LODWORD(v6) = sub_1BAA0C((int **)v40, (unsigned int)(v41 << 22) >> 29, &v123, v42), (_DWORD)v6)
|| (!*(_BYTE *)(LODWORD(v123) + 4) ? (v43 = &v123) : (v43 = 0),
(LODWORD(v6) = sub_1D36E0((int)&v125, (int)v43, (unsigned int **)&v127), (_DWORD)v6)
|| (LODWORD(v
6) = sub_1BAC3C(v40, (unsigned int)(v41 << 17) >> 30, &v127), (_DWORD)v6)) )
{
*(_DWORD *)(v40 + 24) = dword_2DBD00;
}
return v6;
case 0x44:
v44 = (int)arg1;
v45 = arg2;
LOBYTE(v123) = 0;
v46 = sub_1BB2C0(arg1, (unsigned int)(arg2 << 19) >> 29, (int)&v123);
if ( v46
|| (v46 = sub_1BAA0C((int **)v44, (unsigned int)(v45 << 22) >> 29, &v126, v47)) != 0
|| (v46 = sub_147CB8(SHIDWORD(v123), (int)&v126, v128, v48)) != 0
|| (v46 = sub_1BAC3C(v44, (unsigned int)(v45 << 17) >> 30, (int *)v128)) != 0 )
{
v11 = v46;
*(_DWORD *)(v44 + 24) = dword_2DBD04;
if ( !LOBYTE(v123) )
goto LABEL_88;
goto LABEL_44;
}
if ( LOBYTE(v123) )
goto LABEL_23;
goto LABEL_271;
case 0x45:
v49 = (int)arg1;
v50 = arg2;
LOBYTE(v123) = 0;
v51 = sub_1BB2C0(arg1, (unsigned int)(arg2 << 19) >> 29, (int)&v123);
if ( !v51 )
{
v51 = sub_1BAA0C((int **)v49, (unsigned int)(v50 << 22) >> 29, &v126, v52);
if ( !v51 )
{
v51 = sub_147DB4(SHIDWORD(v123), (int)&v126, v128, v53);
if ( !v51 )
{
v51 = sub_1BAC3C(v49, (unsigned int)(v50 << 17) >> 30, (int *)v128);
if ( !v51 )
{
if ( LOBYTE(v123) )
LABEL_23:
(*(void (**)(void))(*(_DWORD *)HIDWORD(v123) + 12))();
goto LABEL_271;
}
}
}
}
v11 = v51;
*(_DWORD *)(v49 + 24) = dword_2DBD08;
if ( LOBYTE(v123) )
LABEL_44:
(*(void (**)(void))(*(_DWORD *)HIDWORD(v123) + 12))();
goto LABEL_88;
case 0x46:
LODWORD(v6) = sub_19B00C(arg1, arg2, v5, arg4);
return v6;
case 0x47: //RNDF?
v54 = (int)arg1;
v55 = arg2;
LODWORD(v6) = sub_1BAA0C(arg1, (unsigned int)(arg2 << 19) >> 29, &v123, arg4);
if ( (_DWORD)v6 )
goto LABEL_100;
LODWORD(v6) = (*(int (__fastcall **)(double *, double *))(LODWORD(v123) + 64))(&v123, &v125);
if ( (_DWORD)v6 )
goto LABEL_96;
if ( LODWORD(v125) < 8 )
{
sub_1D2D08(SLODWORD(v125));
__asm { VMOV.F64 D8, D0 }
}
else
{
LODWORD(v6) = sub_1E8FF4(10, 0, 0, v56);
LABEL_96:
if ( (_DWORD)v6 )
goto LABEL_100;
}
__asm { VMOV.F64 D0, D8 }
LODWORD(v6) = sub_1BA8C0(v54, (unsigned int)(v55 << 17) >> 30);
if ( !(_DWORD)v6 )
return v6;
LABEL_100:
*(_DWORD *)(v54 + 24) = dword_2DBD10;
return v6;
case 0x48: //ABS?
v60 = (int)arg1;
v61 = arg2;
LODWORD(v6) = sub_1BAA0C(arg1, (unsigned int)(arg2 << 19) >> 29, &v123, arg4);
if ( (_DWORD)v6 )
goto LABEL_111;
sub_1BADD4(&v126);
if ( *(_BYTE *)LODWORD(v123) )
{
if ( *(_BYTE *)LODWORD(v123) == 1 )
{
__asm
{
VLDR D0, [SP,#0x70+var_60]
VABS.F64 D0, D0
}
sub_1D3D70(&v126);
}
else
{
LODWORD(v6) = sub_1E8FF4(8, 0, 0, v62);
if ( (_DWORD)v6 )
goto LABEL_111;
}
}
else
{
v64 = LODWORD(v124);
if ( SLODWORD(v124) < 0 )
v64 = -LODWORD(v124);
sub_1D85B4((int)&v126, v64);
}
LODWORD(v6) = sub_1BACEC(v60, (unsigned int)(v61 << 17) >> 30, (int)&v126, v63);
if ( !(_DWORD)v6 )
return v6;
LABEL_111:
*(_DWORD *)(v60 + 24) = dword_2DBD14;
return v6;
case 0x49: // SGN
v65 = (int)arg1;
v66 = arg2;
LODWORD(v6) = sub_1BAA0C(arg1, (unsigned int)(arg2 << 19) >> 29, &v123, arg4);
if ( (_DWORD)v6 )
goto LABEL_123;
if ( !*(_BYTE *)LODWORD(v123) )
{
if ( LODWORD(v124) )
{
if ( SLODWORD(v124) < 0 )
{
LABEL_119:
v4 = -1;
goto LABEL_122;
}
LABEL_121:
v4 = 1;
goto LABEL_122;
}
LABEL_120:
v4 = 0;
goto LABEL_122;
}
if ( *(_BYTE *)LODWORD(v123) == 1 )
{
__asm
{
VLDR D1, =0.0
VLDR D0, [SP,#0x70+var_60]
VCMP.F64 D0, D1
VMRS APSR_nzcv, FPSCR
}
if ( !_ZF )
{
__asm
{
VCMPE.F64 D1, D0
VMRS APSR_nzcv, FPSCR
}
if ( !((unsigned __int8)(_NF ^ _VF) | _ZF) )
goto LABEL_119;
goto LABEL_121;
}
goto LABEL_120;
}
LODWORD(v6) = sub_1E8FF4(8, 0, 0, v67);
if ( (_DWORD)v6 )
goto LABEL_123;
LABEL_122:
LODWORD(v6) = sub_1BB104(v65, (unsigned int)(v66 << 17) >> 30, v4);
if ( !(_DWORD)v6 )
return v6;
LABEL_123:
*(_DWORD *)(v65 + 24) = dword_2DBD18;
return v6;
case 0x4A:
v68 = (int)arg1;
v69 = arg2;
LODWORD(v6) = sub_1BAA0C(arg1, (unsigned int)(arg2 << 19) >> 29, &v123, arg4);
if ( !(_DWORD)v6 )
{
LODWORD(v6) = (*(int (__fastcall **)(double *, double *))(LODWORD(v123) + 68))(&v123, &v125);
if ( !(_DWORD)v6 )
{
__asm
{
VLDR D0, [SP,#0x70+var_58]
VLDR D1, =3.14159265
VLDR D2, =0.00555555556
VMUL.F64 D0, D0, D1
VMUL.F64 D0, D0, D2
}
LODWORD(v6) = sub_1BA8C0(v68, (unsigned int)(v69 << 17) >> 30);
if ( !(_DWORD)v6 )
goto LABEL_271;
}
}
*(_DWORD *)(v68 + 24) = dword_2DBD1C;
return v6;
case 0x4B:
v70 = (int)arg1;
v71 = arg2;
LODWORD(v6) = sub_1BAA0C(arg1, (unsigned int)(arg2 << 19) >> 29, &v124, arg4);
if ( (_DWORD)v6 )
goto LABEL_135;
LODWORD(v6) = (*(int (__fastcall **)(double *, double *))(LODWORD(v124) + 68))(&v124, &v123);
if ( (_DWORD)v6 )
{
dword_2DC668 = 0;
}
else
{
__asm
{
VLDR D2, =180.0
VLDR D0, [SP,#0x70+var_68]
VLDR D1, =0.318309886
VMUL.F64 D0, D0, D2
VMUL.F64 D0, D0, D1
}
LODWORD(v6) = sub_1BA8C0(v70, (unsigned int)(v71 << 17) >> 30);
if ( !(_DWORD)v6 )
goto LABEL_271;
}
LABEL_135:
*(_DWORD *)(v70 + 24) = dword_2DBD20;
return v6;
case 0x4C:
LODWORD(v6) = sub_19ABC0(arg1, arg2, v5, arg4);
return v6;
case 0x4D:
LODWORD(v6) = sub_19AA74(arg1, arg2, v5, arg4);
return v6;
case 0x4E:
v72 = (int)arg1;
v73 = arg2;
LODWORD(v6) = sub_1BAA0C(arg1, (unsigned int)(arg2 << 19) >> 29, &v123, arg4);
if ( (_DWORD)v6 )
goto LABEL_146;
LODWORD(v6) = (*(int (__fastcall **)(double *, double *))(LODWORD(v123) + 68))(&v123, &v125);
if ( (_DWORD)v6 )
{
dword_2DC668 = 0;
}
else
{
__asm
{
VLDR D0, [SP,#0x70+var_58]
VLDR D1, =0.0
VCMPE.F64 D0, D1
VMRS APSR_nzcv, FPSCR
}
if ( _CF )
{
__asm { VSQRTCS.F64 D8, D0 }
goto LABEL_145;
}
LODWORD(v6) = sub_1E8FF4(10, 0, 0, v74);
}
if ( (_DWORD)v6 )
goto LABEL_146;
LABEL_145:
__asm { VMOV.F64 D0, D8 }
LODWORD(v6) = sub_1BA8C0(v72, (unsigned int)(v73 << 17) >> 30);
if ( !(_DWORD)v6 )
return v6;
LABEL_146:
*(_DWORD *)(v72 + 24) = dword_2DBD2C;
return v6;
case 0x4F:
LODWORD(v6) = sub_19A8B0(arg1, arg2, v5, arg4);
return v6;
case 0x50:
v75 = (int)arg1;
v76 = arg2;
LODWORD(v6) = sub_1BAA0C(arg1, (unsigned int)(arg2 << 19) >> 29, &v123, arg4);
if ( (_DWORD)v6 )
goto LABEL_152;
LODWORD(v6) = (*(int (__fastcall **)(_DWORD, _DWORD))(LODWORD(v123) + 68))(&v123, &v125);
if ( (_DWORD)v6 )
{
dword_2DC668 = 0;
}
else
{
__asm { VLDR D0, [SP,#0x70+var_58] }
sub_1D39A8();
LODWORD(v6) = sub_1BA8C0(v75, (unsigned int)(v76 << 17) >> 30);
if ( !(_DWORD)v6 )
goto LABEL_271;
}
LABEL_152:
*(_DWORD *)(v75 + 24) = dword_2DBD34;
return v6;
case 0x51:
v77 = (int)arg1;
v78 = arg2;
LODWORD(v6) = sub_1BAA0C(arg1, (unsigned int)(arg2 << 19) >> 29, &v125, arg4);
if ( (_DWORD)v6 )
goto LABEL_166;
LODWORD(v6) = sub_1BAA0C((int **)v77, (unsigned int)(v78 << 22) >> 29, &v127, v79);
if ( (_DWORD)v6 )
goto LABEL_166;
LODWORD(v6) = (*(int (__fastcall **)(double *, double *))(LODWORD(v125) + 68))(&v125, &v123);
if ( (_DWORD)v6 )
{
dword_2DC668 = 0;
}
else
{
LODWORD(v6) = (*(int (__fastcall **)(int *, double *))(v127 + 68))(&v127, &v124);
if ( (_DWORD)v6 )
{
dword_2DC668 = 1;
}
else
{
__asm
{
VLDR D8, =0.0
VLDR D0, [SP,#0x70+var_68]
VCMPE.F64 D0, D8
VMRS APSR_nzcv, FPSCR
}
if ( _CF )
goto LABEL_276;
__asm { VLDR D0, [SP,#0x70+var_60] }
sub_1D32D8((int)&v129);
__asm
{
VCMP.F64 D0, D8
VMRS APSR_nzcv, FPSCR
}
if ( _ZF )
{
LABEL_276:
_R0 = &v123;
__asm { VLDMIA R0, {D0-D1} }
sub_275950();
__asm { VMOV.F64 D9, D0 }
goto LABEL_165;
}
LODWORD(v6) = sub_1E8FF4(4, -1, 0, v80);
}
}
if ( (_DWORD)v6 )
goto LABEL_166;
LABEL_165:
__asm { VMOV.F64 D0, D9 }
LODWORD(v6) = sub_1BA8C0(v77, (unsigned int)(v78 << 17) >> 30);
if ( !(_DWORD)v6 )
return v6;
LABEL_166:
*(_DWORD *)(v77 + 24) = dword_2DBD38;
return v6;
case 0x52:
v83 = (int)arg1;
v84 = arg2;
LODWORD(v6) = sub_1BAA0C(arg1, (unsigned int)(arg2 << 19) >> 29, &v125, arg4);
if ( (_DWORD)v6 )
goto LABEL_277;
sub_1BADD4(&v123);
if ( *(_BYTE *)LODWORD(v125) )
{
if ( *(_BYTE *)LODWORD(v125) == 1 )
{
__asm { VLDR D0, [SP,#0x70+var_50] }
sub_1D6740();
LODWORD(v6) = (*(int (__fastcall **)(double *))(LODWORD(v123) + 24))(&v123);
}
else
{
LODWORD(v6) = sub_1E8FF4(8, 0, 0, v85);
}
}
else
{
LODWORD(v6) = (*(int (__fastcall **)(double *, _DWORD))(LODWORD(v123) + 20))(&v123, LODWORD(v126));
}
if ( (_DWORD)v6 || (LODWORD(v6) = sub_1BACEC(v83, (unsigned int)(v84 << 17) >> 30, (int)&v123, v86), (_DWORD)v6) )
LABEL_277:
*(_DWORD *)(v83 + 24) = dword_2DBD3C;
return v6;
case 0x53:
v87 = (int)arg1;
v88 = arg2;
LODWORD(v6) = sub_1BAA0C(arg1, (unsigned int)(arg2 << 19) >> 29, &v127, arg4);
if ( (_DWORD)v6 )
goto LABEL_278;
sub_1BADD4(&v124);
if ( *(_BYTE *)v127 )
{
if ( *(_BYTE *)v127 == 1 )
{
__asm
{
VLDR D1, =0.0
VLDR D0, [SP,#0x70+var_40]
VCMPE.F64 D0, D1
VMRS APSR_nzcv, FPSCR
VLDR D1, =0.5
}
if ( _CF )
{
__asm { VADD.F64 D0, D0, D1 }
sub_1D6950();
}
else
{
__asm { VSUB.F64 D0, D0, D1 }
sub_1D6740();
}
LODWORD(v6) = (*(int (__fastcall **)(double *))(LODWORD(v124) + 24))(&v124);
}
else
{
LODWORD(v6) = sub_1E8FF4(8, 0, 0, v89);
}
}
else
{
LODWORD(v6) = (*(int (__fastcall **)(double *, unsigned int *))(LODWORD(v124) + 20))(&v124, v128[0]);
}
if ( (_DWORD)v6 || (LODWORD(v6) = sub_1BACEC(v87, (unsigned int)(v88 << 17) >> 30, (int)&v124, v90), (_DWORD)v6) )
LABEL_278:
*(_DWORD *)(v87 + 24) = dword_2DBD40;
return v6;
case 0x54:
v91 = (int)arg1;
v92 = arg2;
LODWORD(v6) = sub_1BAA0C(arg1, (unsigned int)(arg2 << 19) >> 29, &v125, arg4);
if ( (_DWORD)v6 )
goto LABEL_279;
sub_1BADD4(&v123);
if ( *(_BYTE *)LODWORD(v125) )
{
if ( *(_BYTE *)LODWORD(v125) == 1 )
{
__asm { VLDR D0, [SP,#0x70+var_50] }
sub_1D6950();
LODWORD(v6) = (*(int (__fastcall **)(double *))(LODWORD(v123) + 24))(&v123);
}
else
{
LODWORD(v6) = sub_1E8FF4(8, 0, 0, v93);
}
}
else
{
LODWORD(v6) = (*(int (__fastcall **)(double *, _DWORD))(LODWORD(v123) + 20))(&v123, LODWORD(v126));
}
if ( (_DWORD)v6 || (LODWORD(v6) = sub_1BACEC(v91, (unsigned int)(v92 << 17) >> 30, (int)&v123, v94), (_DWORD)v6) )
LABEL_279:
*(_DWORD *)(v91 + 24) = dword_2DBD44;
return v6;
case 0x55:
v95 = (int)arg1;
v96 = arg2;
LODWORD(v6) = sub_1BAA0C(arg1, (unsigned int)(arg2 << 19) >> 29, &v123, arg4);
if ( (_DWORD)v6 )
goto LABEL_204;
LODWORD(v6) = (*(int (__fastcall **)(_DWORD, _DWORD))(LODWORD(v123) + 68))(&v123, &v125);
if ( (_DWORD)v6 )
{
dword_2DC668 = 0;
}
else
{
__asm { VLDR D0, [SP,#0x70+var_58] }
sub_1D31C8();
LODWORD(v6) = sub_1BA8C0(v95, (unsigned int)(v96 << 17) >> 30);
if ( !(_DWORD)v6 )
goto LABEL_271;
}
LABEL_204:
*(_DWORD *)(v95 + 24) = dword_2DBD48;
return v6;
case 0x56:
v97 = (int)arg1;
v98 = arg2;
LODWORD(v6) = sub_1BAA0C(arg1, (unsigned int)(arg2 << 19) >> 29, &v123, arg4);
if ( (_DWORD)v6 )
goto LABEL_209;
LODWORD(v6) = (*(int (__fastcall **)(_DWORD, _DWORD))(LODWORD(v123) + 68))(&v123, &v125);
if ( (_DWORD)v6 )
{
dword_2DC668 = 0;
}
else
{
__asm { VLDR D0, [SP,#0x70+var_58] }
sub_1D3C88();
LODWORD(v6) = sub_1BA8C0(v97, (unsigned int)(v98 << 17) >> 30);
if ( !(_DWORD)v6 )
goto LABEL_271;
}
LABEL_209:
*(_DWORD *)(v97 + 24) = dword_2DBD4C;
return v6;
case 0x57:
v99 = (int)arg1;
v100 = arg2;
LODWORD(v6) = sub_1BAA0C(arg1, (unsigned int)(arg2 << 19) >> 29, &v123, arg4);
if ( (_DWORD)v6 )
goto LABEL_218;
LODWORD(v6) = (*(int (__fastcall **)(_DWORD, _DWORD))(LODWORD(v123) + 68))(&v123, &v125);
if ( (_DWORD)v6 )
{
dword_2DC668 = 0;
}
else
{
__asm { VLDR D0, [SP,#0x70+var_58] }
sub_276600();
__asm
{
VLDR D1, =1.79769313e308
VMOV.F64 D8, D0
VCMP.F64 D0, D1
VMRS APSR_nzcv, FPSCR
}
if ( !_ZF )
goto LABEL_217;
LODWORD(v6) = sub_1E8FF4(9, 0, 0, v101);
}
if ( (_DWORD)v6 )
goto LABEL_218;
LABEL_217:
__asm { VMOV.F64 D0, D8 }
LODWORD(v6) = sub_1BA8C0(v99, (unsigned int)(v100 << 17) >> 30);
if ( !(_DWORD)v6 )
return v6;
LABEL_218:
*(_DWORD *)(v99 + 24) = dword_2DBD50;
return v6;
case 0x58:
v102 = (int)arg1;
v103 = arg2;
LODWORD(v6) = sub_1BAA0C(arg1, (unsigned int)(arg2 << 19) >> 29, &v123, arg4);
if ( (_DWORD)v6 )
goto LABEL_230;
LODWORD(v6) = (*(int (__fastcall **)(_DWORD, _DWORD))(LODWORD(v123) + 68))(&v123, &v125);
if ( (_DWORD)v6 )
{
dword_2DC668 = 0;
}
else
{
__asm
{
VLDR D0, [SP,#0x70+var_58]
VLDR D1, =-1.0
VCMPE.F64 D0, D1
VMRS APSR_nzcv, FPSCR
}
if ( _CF )
{
__asm
{
VLDR D1, =1.0
VCMPE.F64 D0, D1
VMRS APSR_nzcv, FPSCR
}
if ( (unsigned __int8)(_NF ^ _VF) | _ZF )
{
sub_275308(v6);
__asm { VMOV.F64 D8, D0 }
goto LABEL_229;
}
}
LODWORD(v6) = sub_1E8FF4(10, 0, 0, v104);
}
if ( (_DWORD)v6 )
goto LABEL_230;
LABEL_229:
__asm { VMOV.F64 D0, D8 }
LODWORD(v6) = sub_1BA8C0(v102, (unsigned int)(v103 << 17) >> 30);
if ( !(_DWORD)v6 )
return v6;
LABEL_230:
*(_DWORD *)(v102 + 24) = dword_2DBD54;
return v6;
case 0x59:
v105 = (int)arg1;
v106 = arg2;
LODWORD(v6) = sub_1BAA0C(arg1, (unsigned int)(arg2 << 19) >> 29, &v124, arg4);
if ( (_DWORD)v6 )
goto LABEL_242;
LODWORD(v6) = (*(int (__fastcall **)(double *, double *))(LODWORD(v124) + 68))(&v124, &v123);
if ( (_DWORD)v6 )
{
dword_2DC668 = 0;
}
else
{
__asm
{
VLDR D0, [SP,#0x70+var_68]
VLDR D1, =-1.0
VCMPE.F64 D0, D1
VMRS APSR_nzcv, FPSCR
}
if ( _CF )
{
__asm
{
VLDR D1, =1.0
VCMPE.F64 D0, D1
VMRS APSR_nzcv, FPSCR
}
if ( (unsigned __int8)(_NF ^ _VF) | _ZF )
{
sub_2750A8();
__asm { VMOV.F64 D8, D0 }
goto LABEL_241;
}
}
LODWORD(v6) = sub_1E8FF4(10, 0, 0, v107);
}
if ( (_DWORD)v6 )
goto LABEL_242;
LABEL_241:
__asm { VMOV.F64 D0, D8 }
LODWORD(v6) = sub_1BA8C0(v105, (unsigned int)(v106 << 17) >> 30);
if ( !(_DWORD)v6 )
return v6;
LABEL_242:
*(_DWORD *)(v105 + 24) = dword_2DBD58;
return v6;
case 0x5A:
v108 = (int)arg1;
v109 = arg2;
LODWORD(v6) = sub_1BAA0C(arg1, (unsigned int)(arg2 << 19) >> 29, &v123, arg4);
if ( (_DWORD)v6 )
goto LABEL_247;
LODWORD(v6) = (*(int (__fastcall **)(_DWORD, _DWORD))(LODWORD(v123) + 68))(&v123, &v125);
if ( (_DWORD)v6 )
{
dword_2DC668 = 0;
}
else
{
__asm { VLDR D0, [SP,#0x70+var_58] }
sub_1D2D68(v6);
LODWORD(v6) = sub_1BA8C0(v108, (unsigned int)(v109 << 17) >> 30);
if ( !(_DWORD)v6 )
goto LABEL_271;
}
LABEL_247:
*(_DWORD *)(v108 + 24) = dword_2DBD5C;
return v6;
case 0x5B:
v110 = (int)arg1;
v111 = arg2;
LODWORD(v6) = sub_1BAA0C(arg1, (unsigned int)(arg2 << 19) >> 29, &v125, arg4);
if ( (_DWORD)v6 )
goto LABEL_255;
LODWORD(v6) = sub_1BAA0C((int **)v110, (unsigned int)(v111 << 22) >> 29, &v127, v112);
if ( (_DWORD)v6 )
goto LABEL_255;
LODWORD(v6) = (*(int (__fastcall **)(double *, double *))(LODWORD(v125) + 68))(&v125, &v123);
if ( (_DWORD)v6 )
{
dword_2DC668 = 0;
}
else
{
LODWORD(v6) = (*(int (__fastcall **)(int *, double *))(v127 + 68))(&v127, &v124);
if ( (_DWORD)v6 )
{
dword_2DC668 = 1;
}
else
{
_R0 = &v123;
__asm { VLDMIA R0, {D0-D1} }
sub_275570();
LODWORD(v6) = sub_1BA8C0(v110, (unsigned int)(v111 << 17) >> 30);
if ( !(_DWORD)v6 )
goto LABEL_271;
}
}
LABEL_255:
*(_DWORD *)(v110 + 24) = dword_2DBD5C;
return v6;
case 0x5C:
v115 = (int)arg1;
v116 = arg2;
LODWORD(v6) = sub_1BAA0C(arg1, (unsigned int)(arg2 << 19) >> 29, &v123, arg4);
if ( (_DWORD)v6 )
goto LABEL_260;
LODWORD(v6) = (*(int (__fastcall **)(_DWORD, _DWORD))(LODWORD(v123) + 68))(&v123, &v125);
if ( (_DWORD)v6 )
{
dword_2DC668 = 0;
}
else
{
__asm { VLDR D0, [SP,#0x70+var_58] }
sub_276418();
LODWORD(v6) = sub_1BA8C0(v115, (unsigned int)(v116 << 17) >> 30);
if ( !(_DWORD)v6 )
goto LABEL_271;
}
LABEL_260:
*(_DWORD *)(v115 + 24) = dword_2DBD64;
return v6;
case 0x5D:
v117 = (int)arg1;
v118 = arg2;
LODWORD(v6) = sub_1BAA0C(arg1, (unsigned int)(arg2 << 19) >> 29, &v123, arg4);
if ( (_DWORD)v6 )
goto LABEL_265;
LODWORD(v6) = (*(int (__fastcall **)(_DWORD, _DWORD))(LODWORD(v123) + 68))(&v123, &v125);
if ( (_DWORD)v6 )
{
dword_2DC668 = 0;
}
else
{
__asm { VLDR D0, [SP,#0x70+var_58] }
sub_2757B0(v6);
LODWORD(v6) = sub_1BA8C0(v117, (unsigned int)(v118 << 17) >> 30);
if ( !(_DWORD)v6 )
goto LABEL_271;
}
LABEL_265:
*(_DWORD *)(v117 + 24) = dword_2DBD68;
return v6;
case 0x5E:
v119 = (int)arg1;
v120 = arg2;
LODWORD(v6) = sub_1BAA0C(arg1, (unsigned int)(arg2 << 19) >> 29, &v123, arg4);
if ( (_DWORD)v6 )
goto LABEL_270;
LODWORD(v6) = (*(int (__fastcall **)(_DWORD, _DWORD))(LODWORD(v123) + 68))(&v123, &v125);
if ( (_DWORD)v6 )
{
dword_2DC668 = 0;
}
else
{
__asm { VLDR D0, [SP,#0x70+var_58] }
sub_2766B0();
LODWORD(v6) = sub_1BA8C0(v119, (unsigned int)(v120 << 17) >> 30);
if ( !(_DWORD)v6 )
{
LABEL_271:
LODWORD(v6) = 0;
return v6;
}
}
LABEL_270:
*(_DWORD *)(v119 + 24) = dword_2DBD6C;
return v6;
default:
LODWORD(v6) = sub_1E8FF4(2, -1, 0, arg4);
return v6;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment