{"type": "func", "start": 370140, "end": 370508, "name": "sub_5A5DC", "pseudocode": "// \n// sub_5A5DC from 0x5a5dc to 0x5a74c (368 bytes)\n// \n// 2 xrefs:\n// > sub_59CF0 @ 0x59d54\n// > FMOD::Channel::getLoopPoints @ 0xcf204\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\n__int64 __fastcall sub_5A5DC(__int64 a1, unsigned int *a2, unsigned int a3, unsigned int *a4, unsigned int a5)\n{\n  __int64 v5; // x8\n  __int64 result; // x0\n  __int64 v9; // x22\n  unsigned int v11; // w8\n  unsigned int v12; // w8\n\n  v5 = *(_QWORD *)(a1 + 472);\n  if ( !v5 )\n    return 30;\n  result = 19;\n  if ( a3 <= 4 && ((1 << a3) & 0x16) != 0 )\n  {\n    result = 19;\n    if ( a5 <= 4 && ((1 << a5) & 0x16) != 0 )\n    {\n      v9 = *(_QWORD *)(v5 + 40);\n      if ( !v9 )\n        return 31;\n      if ( a2 )\n      {\n        switch ( a3 )\n        {\n          case 1u:\n            v11 = (unsigned int)(float)((float)((float)((float)*(unsigned int *)(v5 + 88) * 1000.0)\n                                              / *(float *)(v9 + 108))\n                                      + 0.5);\n            goto LABEL_15;\n          case 4u:\n            sub_5C280(*(unsigned int *)(v5 + 88), a2, *(unsigned int *)(v9 + 104), *(unsigned int *)(v9 + 40), 1);\n            if ( a4 )\n              goto LABEL_17;\n            return 0;\n          case 2u:\n            v11 = *(_DWORD *)(v5 + 88);\nLABEL_15:\n            *a2 = v11;\n            break;\n        }\n      }\n      if ( a4 )\n      {\nLABEL_17:\n        v12 = *(_DWORD *)(*(_QWORD *)(a1 + 472) + 88LL) + *(_DWORD *)(*(_QWORD *)(a1 + 472) + 92LL) - 1;\n        switch ( a5 )\n        {\n          case 1u:\n            result = 0;\n            v12 = (unsigned int)(float)((float)((float)((float)v12 * 1000.0) / *(float *)(v9 + 108)) + 0.5);\n            goto LABEL_24;\n          case 4u:\n            sub_5C280(v12, a4, *(unsigned int *)(v9 + 104), *(unsigned int *)(v9 + 40), 1);\n            break;\n          case 2u:\n            result = 0;\nLABEL_24:\n            *a4 = v12;\n            return result;\n        }\n      }\n      return 0;\n    }\n  }\n  return result;\n}", "assembly": "; \n; sub_5A5DC from 0x5a5dc to 0x5a74c (368 bytes)\n; \n; 2 xrefs:\n; > sub_59CF0 @ 0x59d54\n; > FMOD::Channel::getLoopPoints @ 0xcf204\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\nSTR             D8, [SP,#-0x10+var_30]!                                ; +0x0, 0x5a5dc\nSTP             X22, X21, [SP,#0x30+var_20]                            ; +0x4, 0x5a5e0\nSTP             X20, X19, [SP,#0x30+var_10]                            ; +0x8, 0x5a5e4\nSTP             X29, X30, [SP,#0x30+var_s0]                            ; +0xc, 0x5a5e8\nLDR             X8, [X0,#0x1D8]                                        ; +0x10, 0x5a5ec\nADD             X29, SP, #0x30                                         ; +0x14, 0x5a5f0\nCBZ             X8, loc_5A674                                          ; +0x18, 0x5a5f4\nMOV             X21, X0                                                ; +0x1c, 0x5a5f8\nCMP             W2, #4                                                 ; +0x20, 0x5a5fc\nMOV             W0, #0x13                                              ; +0x24, 0x5a600\nB.HI            loc_5A744                                              ; +0x28, 0x5a604\nMOV             W9, #1                                                 ; +0x2c, 0x5a608\nLSL             W9, W9, W2                                             ; +0x30, 0x5a60c\nMOV             W10, #0x16                                             ; +0x34, 0x5a610\nTST             W9, W10                                                ; +0x38, 0x5a614\nB.EQ            loc_5A744                                              ; +0x3c, 0x5a618\nMOV             W20, W4                                                ; +0x40, 0x5a61c\nCMP             W4, #4                                                 ; +0x44, 0x5a620\nMOV             W0, #0x13                                              ; +0x48, 0x5a624\nB.HI            loc_5A744                                              ; +0x4c, 0x5a628\nMOV             W9, #1                                                 ; +0x50, 0x5a62c\nLSL             W9, W9, W20                                            ; +0x54, 0x5a630\nMOV             W10, #0x16                                             ; +0x58, 0x5a634\nTST             W9, W10                                                ; +0x5c, 0x5a638\nB.EQ            loc_5A744                                              ; +0x60, 0x5a63c\nLDR             X22, [X8,#0x28]                                        ; +0x64, 0x5a640\nCBZ             X22, loc_5A67C                                         ; +0x68, 0x5a644\nMOV             X19, X3                                                ; +0x6c, 0x5a648\nFMOV            S8, #0.5                                               ; +0x70, 0x5a64c\nCBZ             X1, loc_5A6AC                                          ; +0x74, 0x5a650\nCMP             W2, #1                                                 ; +0x78, 0x5a654\nB.EQ            loc_5A684                                              ; +0x7c, 0x5a658\nCMP             W2, #4                                                 ; +0x80, 0x5a65c\nB.EQ            loc_5A6E0                                              ; +0x84, 0x5a660\nCMP             W2, #2                                                 ; +0x88, 0x5a664\nB.NE            loc_5A6AC                                              ; +0x8c, 0x5a668\nLDR             W8, [X8,#0x58]                                         ; +0x90, 0x5a66c\nB               loc_5A6A8                                              ; +0x94, 0x5a670\nMOV             W0, #0x1E                                              ; +0x98, 0x5a674\nB               loc_5A744                                              ; +0x9c, 0x5a678\nMOV             W0, #0x1F                                              ; +0xa0, 0x5a67c\nB               loc_5A744                                              ; +0xa4, 0x5a680\nLDR             S0, [X8,#0x58]                                         ; +0xa8, 0x5a684\nLDR             S1, [X22,#0x6C]                                        ; +0xac, 0x5a688\nMOV             W8, #0x447A0000                                        ; +0xb0, 0x5a68c\nFMOV            S2, W8                                                 ; +0xb4, 0x5a690\nUCVTF           S0, S0                                                 ; +0xb8, 0x5a694\nFMUL            S0, S0, S2                                             ; +0xbc, 0x5a698\nFDIV            S0, S0, S1                                             ; +0xc0, 0x5a69c\nFADD            S0, S0, S8                                             ; +0xc4, 0x5a6a0\nFCVTZU          W8, S0                                                 ; +0xc8, 0x5a6a4\nSTR             W8, [X1]                                               ; +0xcc, 0x5a6a8\nCBZ             X19, loc_5A740                                         ; +0xd0, 0x5a6ac\nLDR             X8, [X21,#0x1D8]                                       ; +0xd4, 0x5a6b0\nCMP             W20, #1                                                ; +0xd8, 0x5a6b4\nLDP             W9, W8, [X8,#0x58]                                     ; +0xdc, 0x5a6b8\nADD             W8, W9, W8                                             ; +0xe0, 0x5a6bc\nSUB             W8, W8, #1                                             ; +0xe4, 0x5a6c0\nB.EQ            loc_5A6FC                                              ; +0xe8, 0x5a6c4\nCMP             W20, #4                                                ; +0xec, 0x5a6c8\nB.EQ            loc_5A728                                              ; +0xf0, 0x5a6cc\nCMP             W20, #2                                                ; +0xf4, 0x5a6d0\nB.NE            loc_5A740                                              ; +0xf8, 0x5a6d4\nMOV             W0, WZR                                                ; +0xfc, 0x5a6d8\nB               loc_5A720                                              ; +0x100, 0x5a6dc\nLDR             W0, [X8,#0x58]                                         ; +0x104, 0x5a6e0\nLDR             W2, [X22,#0x68]                                        ; +0x108, 0x5a6e4\nLDR             W3, [X22,#0x28]                                        ; +0x10c, 0x5a6e8\nMOV             W4, #1                                                 ; +0x110, 0x5a6ec\nBL              sub_5C280                                              ; +0x114, 0x5a6f0\nCBNZ            X19, loc_5A6B0                                         ; +0x118, 0x5a6f4\nB               loc_5A740                                              ; +0x11c, 0x5a6f8\nLDR             S0, [X22,#0x6C]                                        ; +0x120, 0x5a6fc\nMOV             W9, #0x447A0000                                        ; +0x124, 0x5a700\nUCVTF           S1, W8                                                 ; +0x128, 0x5a704\nFMOV            S2, W9                                                 ; +0x12c, 0x5a708\nFMUL            S1, S1, S2                                             ; +0x130, 0x5a70c\nFDIV            S0, S1, S0                                             ; +0x134, 0x5a710\nFADD            S0, S0, S8                                             ; +0x138, 0x5a714\nMOV             W0, WZR                                                ; +0x13c, 0x5a718\nFCVTZU          W8, S0                                                 ; +0x140, 0x5a71c\nSTR             W8, [X19]                                              ; +0x144, 0x5a720\nB               loc_5A744                                              ; +0x148, 0x5a724\nLDR             W2, [X22,#0x68]                                        ; +0x14c, 0x5a728\nLDR             W3, [X22,#0x28]                                        ; +0x150, 0x5a72c\nMOV             W4, #1                                                 ; +0x154, 0x5a730\nMOV             W0, W8                                                 ; +0x158, 0x5a734\nMOV             X1, X19                                                ; +0x15c, 0x5a738\nBL              sub_5C280                                              ; +0x160, 0x5a73c\nMOV             W0, WZR                                                ; +0x164, 0x5a740\nLDP             X29, X30, [SP,#0x30+var_s0]                            ; +0x168, 0x5a744\nB               loc_5C5CC                                              ; +0x16c, 0x5a748", "xrefs": ["sub_59CF0 @ 0x59d54", "FMOD::Channel::getLoopPoints @ 0xcf204"], "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"}