{"type": "func", "start": 382860, "end": 383276, "name": "sub_5D78C", "pseudocode": "// \n// sub_5D78C from 0x5d78c to 0x5d92c (416 bytes)\n// \n// 2 xrefs:\n// > sub_5EFBC @ 0x5f078\n// > sub_5EFBC @ 0x5f080\n// \n// This function is hookable on this platform!\n// \n// Using BromaIDA 8.0.0 @ https://github.com/Stazzical/BromaIDA\n// Using bindings at commit ba9f177b at Thu Jul 16 22:52:06 2026 from https://github.com/geode-sdk/bindings\n// \n\nbool __fastcall sub_5D78C(__int64 a1, float32x2_t *a2)\n{\n  float v2; // s0\n  float v3; // s20\n  float v4; // s4\n  float v5; // s1\n  float v6; // s2\n  float v7; // s5\n  float v8; // s17\n  float v9; // s7\n  float v10; // s16\n  float v11; // s18\n  float v12; // s6\n  float v13; // s19\n  bool v14; // nf\n  float v15; // s20\n  float v16; // s6\n  __int64 v17; // x8\n  unsigned __int64 v18; // x9\n  float *v19; // x11\n  float v20; // s3\n  float v21; // s4\n  float v22; // s5\n  __int64 v23; // x13\n  __int64 v24; // x14\n  float *v25; // x14\n  float v26; // s6\n  float v27; // s7\n  float v28; // t1\n  float32x2_t v29; // d0\n  float32x2_t v30; // d1\n  float v31; // s2\n\n  v3 = *(float *)(a1 + 160);\n  v2 = *(float *)(a1 + 164);\n  v4 = a2->n64_f32[1];\n  v5 = *(float *)(a1 + 168);\n  v6 = *(float *)(a1 + 172);\n  v7 = a2[1].n64_f32[0];\n  v8 = a2[1].n64_f32[1];\n  v10 = a2[2].n64_f32[0];\n  v9 = a2[2].n64_f32[1];\n  v11 = (float)((float)(a2->n64_f32[0] * v2) + (float)(v4 * v5)) + (float)(v7 * v6);\n  v12 = v11 - v3;\n  v13 = (float)((float)(v8 * v2) + (float)(v10 * v5)) + (float)(v9 * v6);\n  v14 = (float)(v11 - v3) < 0.0;\n  v15 = v13 - v3;\n  if ( !v14 && v15 >= 0.0 || v12 <= 0.0 && v15 <= 0.0 || v12 > 0.0 && (*(_DWORD *)(a1 + 184) & 0x10000) == 0 )\n    return 1;\n  v16 = v12 / (float)(v11 - v13);\n  v17 = 0;\n  v18 = (unsigned __int16)*(_DWORD *)(a1 + 184);\n  v19 = (float *)(a1 + 196);\n  v20 = a2->n64_f32[0] + (float)(v16 * (float)(v8 - a2->n64_f32[0]));\n  v21 = v4 + (float)(v16 * (float)(v10 - v4));\n  v22 = v7 + (float)(v16 * (float)(v9 - v7));\n  do\n  {\n    v23 = v17;\n    if ( v18 == v17 )\n      break;\n    ++v17;\n    v24 = v23 + 1 < v18 ? v23 + 1 : 0LL;\n    v25 = (float *)(a1 + 188 + 12 * v24);\n    v26 = *(v19 - 2);\n    v27 = *(v19 - 1);\n    v28 = *v19;\n    v19 += 3;\n  }\n  while ( (float)((float)((float)((float)-(float)((float)(v5 * (float)(v25[2] - v28))\n                                                - (float)(v6 * (float)(v25[1] - v27)))\n                                * (float)(v20 - v26))\n                        + (float)((float)-(float)((float)(v6 * (float)(*v25 - v26)) - (float)(v2 * (float)(v25[2] - v28)))\n                                * (float)(v21 - v27)))\n                + (float)((float)-(float)((float)(v2 * (float)(v25[1] - v27)) - (float)(v5 * (float)(*v25 - v26)))\n                        * (float)(v22 - v28))) <= 0.0 );\n  if ( (_DWORD)v18 != (_DWORD)v23 )\n    return 1;\n  v29.n64_f32[0] = 1.0 - *(float *)(a1 + 176);\n  if ( (*(_BYTE *)(**(_QWORD **)(a2[4].n64_u64[0] + 24) + 122LL) & 4) != 0 )\n  {\n    v30.n64_u32[0] = a2[3].n64_u32[0];\n    v31 = 1.0 - *(float *)(a1 + 180);\n    if ( v29.n64_f32[0] < v30.n64_f32[0] || v29.n64_f32[0] == v30.n64_f32[0] && v31 < a2[3].n64_f32[1] )\n    {\n      a2[3].n64_u32[0] = v29.n64_u32[0];\n      a2[3].n64_f32[1] = v31;\n      v30.n64_u32[0] = v29.n64_u32[0];\n    }\n  }\n  else\n  {\n    v29.n64_f32[1] = 1.0 - *(float *)(a1 + 180);\n    v30.n64_u64[0] = vmul_f32(a2[3], v29).n64_u64[0];\n    a2[3].n64_u64[0] = v30.n64_u64[0];\n  }\n  return v30.n64_f32[0] >= 0.05 || a2[3].n64_f32[1] >= 0.05;\n}", "assembly": "; \n; sub_5D78C from 0x5d78c to 0x5d92c (416 bytes)\n; \n; 2 xrefs:\n; > sub_5EFBC @ 0x5f078\n; > sub_5EFBC @ 0x5f080\n; \n; This function is hookable on this platform!\n; \n; Using BromaIDA 8.0.0 @ https:;github.com/Stazzical/BromaIDA\n; Using bindings at commit ba9f177b at Thu Jul 16 22:52:06 2026 from https:;github.com/geode-sdk/bindings\n; \n\nLDP             S20, S0, [X0,#0xA0]                                    ; +0x0, 0x5d78c\nLDP             S3, S4, [X1]                                           ; +0x4, 0x5d790\nLDP             S1, S2, [X0,#0xA8]                                     ; +0x8, 0x5d794\nLDP             S5, S17, [X1,#8]                                       ; +0xc, 0x5d798\nLDP             S16, S7, [X1,#0x10]                                    ; +0x10, 0x5d79c\nFMUL            S6, S3, S0                                             ; +0x14, 0x5d7a0\nFMADD           S6, S4, S1, S6                                         ; +0x18, 0x5d7a4\nFMUL            S18, S17, S0                                           ; +0x1c, 0x5d7a8\nFMADD           S19, S16, S1, S18                                      ; +0x20, 0x5d7ac\nFMADD           S18, S5, S2, S6                                        ; +0x24, 0x5d7b0\nFSUB            S6, S18, S20                                           ; +0x28, 0x5d7b4\nFMADD           S19, S7, S2, S19                                       ; +0x2c, 0x5d7b8\nFCMP            S6, #0.0                                               ; +0x30, 0x5d7bc\nFSUB            S20, S19, S20                                          ; +0x34, 0x5d7c0\nB.LT            loc_5D7D0                                              ; +0x38, 0x5d7c4\nFCMP            S20, #0.0                                              ; +0x3c, 0x5d7c8\nB.GE            loc_5D924                                              ; +0x40, 0x5d7cc\nFCMP            S6, #0.0                                               ; +0x44, 0x5d7d0\nB.GT            loc_5D7E0                                              ; +0x48, 0x5d7d4\nFCMP            S20, #0.0                                              ; +0x4c, 0x5d7d8\nB.LE            loc_5D924                                              ; +0x50, 0x5d7dc\nLDR             W9, [X0,#0xB8]                                         ; +0x54, 0x5d7e0\nFCMP            S6, #0.0                                               ; +0x58, 0x5d7e4\nB.LE            loc_5D7F0                                              ; +0x5c, 0x5d7e8\nTBZ             W9, #0x10, loc_5D924                                   ; +0x60, 0x5d7ec\nFSUB            S18, S18, S19                                          ; +0x64, 0x5d7f0\nFSUB            S17, S17, S3                                           ; +0x68, 0x5d7f4\nFSUB            S16, S16, S4                                           ; +0x6c, 0x5d7f8\nFSUB            S7, S7, S5                                             ; +0x70, 0x5d7fc\nFDIV            S6, S6, S18                                            ; +0x74, 0x5d800\nMOV             X8, XZR                                                ; +0x78, 0x5d804\nADD             X10, X0, #0xBC                                         ; +0x7c, 0x5d808\nAND             X9, X9, #0xFFFF                                        ; +0x80, 0x5d80c\nADD             X11, X0, #0xC4                                         ; +0x84, 0x5d810\nFMADD           S3, S6, S17, S3                                        ; +0x88, 0x5d814\nFMADD           S4, S6, S16, S4                                        ; +0x8c, 0x5d818\nFMADD           S5, S6, S7, S5                                         ; +0x90, 0x5d81c\nMOV             W12, #0xC                                              ; +0x94, 0x5d820\nMOV             X13, X8                                                ; +0x98, 0x5d824\nCMP             X9, X8                                                 ; +0x9c, 0x5d828\nB.EQ            loc_5D894                                              ; +0xa0, 0x5d82c\nADD             X8, X13, #1                                            ; +0xa4, 0x5d830\nCMP             X8, X9                                                 ; +0xa8, 0x5d834\nCSINC           X14, XZR, X13, CS                                      ; +0xac, 0x5d838\nMADD            X14, X14, X12, X10                                     ; +0xb0, 0x5d83c\nLDP             S6, S7, [X11,#-8]                                      ; +0xb4, 0x5d840\nLDR             S16, [X11],#0xC                                        ; +0xb8, 0x5d844\nLDP             S17, S18, [X14]                                        ; +0xbc, 0x5d848\nLDR             S19, [X14,#8]                                          ; +0xc0, 0x5d84c\nFSUB            S20, S3, S6                                            ; +0xc4, 0x5d850\nFSUB            S21, S4, S7                                            ; +0xc8, 0x5d854\nFSUB            S6, S17, S6                                            ; +0xcc, 0x5d858\nFSUB            S17, S19, S16                                          ; +0xd0, 0x5d85c\nFSUB            S7, S18, S7                                            ; +0xd4, 0x5d860\nFMUL            S18, S1, S17                                           ; +0xd8, 0x5d864\nFMUL            S19, S2, S6                                            ; +0xdc, 0x5d868\nFNMSUB          S18, S2, S7, S18                                       ; +0xe0, 0x5d86c\nFMUL            S7, S0, S7                                             ; +0xe4, 0x5d870\nFNMSUB          S17, S0, S17, S19                                      ; +0xe8, 0x5d874\nFNMSUB          S6, S1, S6, S7                                         ; +0xec, 0x5d878\nFMUL            S7, S18, S20                                           ; +0xf0, 0x5d87c\nFMADD           S7, S17, S21, S7                                       ; +0xf4, 0x5d880\nFSUB            S16, S5, S16                                           ; +0xf8, 0x5d884\nFMADD           S6, S6, S16, S7                                        ; +0xfc, 0x5d888\nFCMP            S6, #0.0                                               ; +0x100, 0x5d88c\nB.LE            loc_5D824                                              ; +0x104, 0x5d890\nCMP             W9, W13                                                ; +0x108, 0x5d894\nB.NE            loc_5D924                                              ; +0x10c, 0x5d898\nLDR             X8, [X1,#0x20]                                         ; +0x110, 0x5d89c\nLDR             S0, [X0,#0xB0]                                         ; +0x114, 0x5d8a0\nFMOV            S2, #1.0                                               ; +0x118, 0x5d8a4\nLDR             X8, [X8,#0x18]                                         ; +0x11c, 0x5d8a8\nFSUB            S0, S2, S0                                             ; +0x120, 0x5d8ac\nLDR             X8, [X8]                                               ; +0x124, 0x5d8b0\nLDRB            W8, [X8,#0x7A]                                         ; +0x128, 0x5d8b4\nTBNZ            W8, #2, loc_5D8D8                                      ; +0x12c, 0x5d8b8\nLDR             S1, [X0,#0xB4]                                         ; +0x130, 0x5d8bc\nLDR             D3, [X1,#0x18]                                         ; +0x134, 0x5d8c0\nFSUB            S1, S2, S1                                             ; +0x138, 0x5d8c4\nINS             V0.S[1], V1.S[0]                                       ; +0x13c, 0x5d8c8\nFMUL            V1.2S, V3.2S, V0.2S                                    ; +0x140, 0x5d8cc\nSTR             D1, [X1,#0x18]                                         ; +0x144, 0x5d8d0\nB               loc_5D904                                              ; +0x148, 0x5d8d4\nLDR             S1, [X1,#0x18]                                         ; +0x14c, 0x5d8d8\nLDR             S3, [X0,#0xB4]                                         ; +0x150, 0x5d8dc\nFCMP            S0, S1                                                 ; +0x154, 0x5d8e0\nFSUB            S2, S2, S3                                             ; +0x158, 0x5d8e4\nB.LT            loc_5D8FC                                              ; +0x15c, 0x5d8e8\nB.NE            loc_5D904                                              ; +0x160, 0x5d8ec\nLDR             S3, [X1,#0x1C]                                         ; +0x164, 0x5d8f0\nFCMP            S2, S3                                                 ; +0x168, 0x5d8f4\nB.GE            loc_5D904                                              ; +0x16c, 0x5d8f8\nSTP             S0, S2, [X1,#0x18]                                     ; +0x170, 0x5d8fc\nMOV             V1.16B, V0.16B                                         ; +0x174, 0x5d900\nADRP            X8, #dword_2F02C@PAGE                                  ; +0x178, 0x5d904\nLDR             S0, [X8,#dword_2F02C@PAGEOFF]                          ; +0x17c, 0x5d908\nFCMP            S1, S0                                                 ; +0x180, 0x5d90c\nB.GE            loc_5D924                                              ; +0x184, 0x5d910\nLDR             S1, [X1,#0x1C]                                         ; +0x188, 0x5d914\nFCMP            S1, S0                                                 ; +0x18c, 0x5d918\nB.GE            loc_5D924                                              ; +0x190, 0x5d91c\nB               loc_5F2D4                                              ; +0x194, 0x5d920\nMOV             W0, #1                                                 ; +0x198, 0x5d924\nRET                                                                    ; +0x19c, 0x5d928", "xrefs": ["sub_5EFBC @ 0x5f078", "sub_5EFBC @ 0x5f080"], "is_objc": false, "is_arm32": false, "is_arm64": false, "bida_info": "8.0.0 @ https://github.com/Stazzical/BromaIDA", "bindings_info": "commit ba9f177b at Thu Jul 16 22:52:06 2026 from https://github.com/geode-sdk/bindings"}