{"type": "func", "start": 370540, "end": 370920, "name": "sub_5A76C", "pseudocode": "// \n// sub_5A76C from 0x5a76c to 0x5a8e8 (380 bytes)\n// \n// 2 xrefs:\n// > sub_5A244 @ 0x5a29c\n// > FMOD::Channel::setLoopPoints @ 0xcf074\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_5A76C(__int64 a1, unsigned int a2, unsigned int a3, unsigned int a4, unsigned int a5)\n{\n  __int64 v5; // x9\n  __int64 result; // x0\n  __int64 v9; // x22\n  unsigned int v11; // w8\n  __int64 v12; // [xsp+8h] [xbp-38h] BYREF\n\n  v12 = 0;\n  v5 = *(_QWORD *)(a1 + 472);\n  if ( !v5 || !*(_QWORD *)(a1 + 32) )\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      v11 = a2;\n      switch ( a3 )\n      {\n        case 1u:\n          v11 = (unsigned int)(float)((float)((float)((float)a2 * 0.001) * *(float *)(v9 + 108)) + 0.5);\n          break;\n        case 4u:\n          sub_5C214(a2, (char *)&v12 + 4, *(unsigned int *)(v9 + 104), *(unsigned int *)(v9 + 40));\n          goto LABEL_17;\n        case 2u:\n          break;\n        default:\nLABEL_17:\n          switch ( a5 )\n          {\n            case 1u:\n              LODWORD(v12) = (unsigned int)(float)((float)((float)((float)a4 * 0.001) * *(float *)(v9 + 108)) + 0.5);\n              break;\n            case 4u:\n              sub_5C214(a4, &v12, *(unsigned int *)(v9 + 104), *(unsigned int *)(v9 + 40));\n              break;\n            case 2u:\n              LODWORD(v12) = a4;\n              break;\n          }\n          if ( (unsigned int)v12 > HIDWORD(v12) )\n            return (*(__int64 (__fastcall **)(_QWORD))(**(_QWORD **)(a1 + 472) + 144LL))(*(_QWORD *)(a1 + 472));\n          return 31;\n      }\n      HIDWORD(v12) = v11;\n      goto LABEL_17;\n    }\n  }\n  return result;\n}", "assembly": "; \n; sub_5A76C from 0x5a76c to 0x5a8e8 (380 bytes)\n; \n; 2 xrefs:\n; > sub_5A244 @ 0x5a29c\n; > FMOD::Channel::setLoopPoints @ 0xcf074\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\nSUB             SP, SP, #0x50                                          ; +0x0, 0x5a76c\nSTP             X22, X21, [SP,#0x40+var_20]                            ; +0x4, 0x5a770\nSTP             X20, X19, [SP,#0x40+var_10]                            ; +0x8, 0x5a774\nSTP             X29, X30, [SP,#0x40+var_s0]                            ; +0xc, 0x5a778\nSTR             XZR, [SP,#0x40+var_38]                                 ; +0x10, 0x5a77c\nLDR             X9, [X0,#0x1D8]                                        ; +0x14, 0x5a780\nSTR             D8, [SP,#0x40+var_30]                                  ; +0x18, 0x5a784\nSTR             X23, [SP,#0x40+var_28]                                 ; +0x1c, 0x5a788\nADD             X29, SP, #0x40                                         ; +0x20, 0x5a78c\nCBZ             X9, loc_5A818                                          ; +0x24, 0x5a790\nLDR             X10, [X0,#0x20]                                        ; +0x28, 0x5a794\nMOV             X19, X0                                                ; +0x2c, 0x5a798\nCBZ             X10, loc_5A818                                         ; +0x30, 0x5a79c\nCMP             W2, #4                                                 ; +0x34, 0x5a7a0\nMOV             W0, #0x13                                              ; +0x38, 0x5a7a4\nB.HI            loc_5A81C                                              ; +0x3c, 0x5a7a8\nMOV             W10, #1                                                ; +0x40, 0x5a7ac\nLSL             W10, W10, W2                                           ; +0x44, 0x5a7b0\nMOV             W11, #0x16                                             ; +0x48, 0x5a7b4\nTST             W10, W11                                               ; +0x4c, 0x5a7b8\nB.EQ            loc_5A81C                                              ; +0x50, 0x5a7bc\nMOV             W21, W4                                                ; +0x54, 0x5a7c0\nCMP             W4, #4                                                 ; +0x58, 0x5a7c4\nMOV             W0, #0x13                                              ; +0x5c, 0x5a7c8\nB.HI            loc_5A81C                                              ; +0x60, 0x5a7cc\nMOV             W10, #1                                                ; +0x64, 0x5a7d0\nLSL             W10, W10, W21                                          ; +0x68, 0x5a7d4\nMOV             W11, #0x16                                             ; +0x6c, 0x5a7d8\nTST             W10, W11                                               ; +0x70, 0x5a7dc\nB.EQ            loc_5A81C                                              ; +0x74, 0x5a7e0\nLDR             X22, [X9,#0x28]                                        ; +0x78, 0x5a7e4\nCBZ             X22, loc_5A8E0                                         ; +0x7c, 0x5a7e8\nMOV             W20, W3                                                ; +0x80, 0x5a7ec\nMOV             W8, W1                                                 ; +0x84, 0x5a7f0\nCMP             W2, #1                                                 ; +0x88, 0x5a7f4\nADRP            X23, #dword_2F10C@PAGE                                 ; +0x8c, 0x5a7f8\nFMOV            S8, #0.5                                               ; +0x90, 0x5a7fc\nB.EQ            loc_5A834                                              ; +0x94, 0x5a800\nCMP             W2, #4                                                 ; +0x98, 0x5a804\nB.EQ            loc_5A854                                              ; +0x9c, 0x5a808\nCMP             W2, #2                                                 ; +0xa0, 0x5a80c\nB.EQ            loc_5A84C                                              ; +0xa4, 0x5a810\nB               loc_5A868                                              ; +0xa8, 0x5a814\nMOV             W0, #0x1E                                              ; +0xac, 0x5a818\nLDP             X29, X30, [SP,#0x40+var_s0]                            ; +0xb0, 0x5a81c\nLDP             X20, X19, [SP,#0x40+var_10]                            ; +0xb4, 0x5a820\nLDP             X22, X21, [SP,#0x40+var_20]                            ; +0xb8, 0x5a824\nLDR             X23, [SP,#0x40+var_28]                                 ; +0xbc, 0x5a828\nLDR             D8, [SP,#0x40+var_30]                                  ; +0xc0, 0x5a82c\nB               loc_5C6BC                                              ; +0xc4, 0x5a830\nLDR             S0, [X23,#dword_2F10C@PAGEOFF]                         ; +0xc8, 0x5a834\nLDR             S1, [X22,#0x6C]                                        ; +0xcc, 0x5a838\nUCVTF           S2, W8                                                 ; +0xd0, 0x5a83c\nFMUL            S0, S2, S0                                             ; +0xd4, 0x5a840\nFMADD           S0, S0, S1, S8                                         ; +0xd8, 0x5a844\nFCVTZU          W8, S0                                                 ; +0xdc, 0x5a848\nSTR             W8, [SP,#0x40+var_38+4]                                ; +0xe0, 0x5a84c\nB               loc_5A868                                              ; +0xe4, 0x5a850\nLDR             W2, [X22,#0x68]                                        ; +0xe8, 0x5a854\nLDR             W3, [X22,#0x28]                                        ; +0xec, 0x5a858\nADD             X1, SP, #0x40+var_38+4                                 ; +0xf0, 0x5a85c\nMOV             W0, W8                                                 ; +0xf4, 0x5a860\nBL              sub_5C214                                              ; +0xf8, 0x5a864\nCMP             W21, #1                                                ; +0xfc, 0x5a868\nB.EQ            loc_5A888                                              ; +0x100, 0x5a86c\nCMP             W21, #4                                                ; +0x104, 0x5a870\nB.EQ            loc_5A8A8                                              ; +0x108, 0x5a874\nCMP             W21, #2                                                ; +0x10c, 0x5a878\nB.NE            loc_5A8BC                                              ; +0x110, 0x5a87c\nSTR             W20, [SP,#0x40+var_38]                                 ; +0x114, 0x5a880\nB               loc_5A8BC                                              ; +0x118, 0x5a884\nLDR             S0, [X23,#dword_2F10C@PAGEOFF]                         ; +0x11c, 0x5a888\nLDR             S1, [X22,#0x6C]                                        ; +0x120, 0x5a88c\nUCVTF           S2, W20                                                ; +0x124, 0x5a890\nFMUL            S0, S2, S0                                             ; +0x128, 0x5a894\nFMADD           S0, S0, S1, S8                                         ; +0x12c, 0x5a898\nFCVTZU          W8, S0                                                 ; +0x130, 0x5a89c\nSTR             W8, [SP,#0x40+var_38]                                  ; +0x134, 0x5a8a0\nB               loc_5A8BC                                              ; +0x138, 0x5a8a4\nLDR             W2, [X22,#0x68]                                        ; +0x13c, 0x5a8a8\nLDR             W3, [X22,#0x28]                                        ; +0x140, 0x5a8ac\nADD             X1, SP, #0x40+var_38                                   ; +0x144, 0x5a8b0\nMOV             W0, W20                                                ; +0x148, 0x5a8b4\nBL              sub_5C214                                              ; +0x14c, 0x5a8b8\nLDP             W8, W1, [SP,#0x40+var_38]                              ; +0x150, 0x5a8bc\nSUBS            W8, W8, W1                                             ; +0x154, 0x5a8c0\nB.LS            loc_5A8E0                                              ; +0x158, 0x5a8c4\nLDR             X0, [X19,#0x1D8]                                       ; +0x15c, 0x5a8c8\nADD             W2, W8, #1                                             ; +0x160, 0x5a8cc\nLDR             X9, [X0]                                               ; +0x164, 0x5a8d0\nLDR             X9, [X9,#0x90]                                         ; +0x168, 0x5a8d4\nBLR             X9                                                     ; +0x16c, 0x5a8d8\nB               loc_5A81C                                              ; +0x170, 0x5a8dc\nMOV             W0, #0x1F                                              ; +0x174, 0x5a8e0\nB               loc_5A81C                                              ; +0x178, 0x5a8e4", "xrefs": ["sub_5A244 @ 0x5a29c", "FMOD::Channel::setLoopPoints @ 0xcf074"], "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"}