{"type": "func", "start": 6442497792, "end": 6442498307, "name": "FMOD::ChannelControl::getFadePoints", "pseudocode": "// \n// FMOD::ChannelControl::getFadePoints from 0x18000b700 to 0x18000b903 (515 bytes)\n// \n// 4 xrefs:\n// > FMOD_ChannelGroup_GetFadePoints @ 0x1800c4fb9\n// > FMOD_Channel_GetFadePoints @ 0x1800c5589\n// > <???> @ 0x180194348\n// > <???> @ 0x1801f678c\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 FMOD::ChannelControl::getFadePoints(__int64 a1, unsigned int *a2, __int64 a3, __int64 a4)\n{\n  unsigned int v6; // ebx\n  int v8; // r15d\n  unsigned int v9; // ebp\n  unsigned int v10; // edx\n  unsigned int v11; // r10d\n  __int64 v12; // rax\n  __int64 v13; // rax\n  __int64 v14; // rcx\n  _QWORD *v15; // rax\n  int v16; // ebx\n  int v17; // ebx\n  int v18; // ebx\n  int v19; // eax\n  __int64 v21; // [rsp+30h] [rbp-158h] BYREF\n  __int64 v22; // [rsp+38h] [rbp-150h] BYREF\n  _BYTE v23[256]; // [rsp+40h] [rbp-148h] BYREF\n\n  v6 = 0;\n  v21 = 0;\n  v8 = a1;\n  v9 = sub_180012360(a1, &v22, &v21);\n  if ( v9\n    || (v9 = (*(__int64 (__fastcall **)(__int64, unsigned int *, __int64, __int64))(*(_QWORD *)v22 + 264LL))(\n               v22,\n               a2,\n               a3,\n               a4)) != 0 )\n  {\n    if ( *((char *)off_1801AED20 + 16) < 0 )\n    {\n      v16 = sub_1800F3060(v23, 256, a2);\n      v17 = sub_1800F2F70(&v23[v16]) + v16;\n      v18 = sub_1800F3280(&v23[v17], (unsigned int)(256 - v17), a3) + v17;\n      v19 = sub_1800F2F70(&v23[v18]);\n      sub_1800F30A0(&v23[v19 + v18], (unsigned int)(256 - (v19 + v18)), a4);\n      sub_1800B20E0(v9, 4, v8, (unsigned int)\"ChannelControl::getFadePoints\", (__int64)v23);\n    }\n  }\n  else if ( a3 )\n  {\n    v10 = *a2;\n    if ( *a2 )\n    {\n      if ( v10 < 8 )\n        goto LABEL_9;\n      v11 = 4;\n      do\n      {\n        v12 = v6;\n        v6 += 8;\n        *(__m128i *)(a3 + 8 * v12) = _mm_srl_epi64(_mm_loadu_si128((const __m128i *)(a3 + 8 * v12)), (__m128i)0x14uLL);\n        *(__m128i *)(a3 + 8LL * (v11 - 2)) = _mm_srl_epi64(\n                                               _mm_loadu_si128((const __m128i *)(a3 + 8LL * (v11 - 2))),\n                                               (__m128i)0x14uLL);\n        *(__m128i *)(a3 + 8LL * v11) = _mm_srl_epi64(\n                                         _mm_loadu_si128((const __m128i *)(a3 + 8LL * v11)),\n                                         (__m128i)0x14uLL);\n        v13 = v11 + 2;\n        v11 += 8;\n        *(__m128i *)(a3 + 8 * v13) = _mm_srl_epi64(_mm_loadu_si128((const __m128i *)(a3 + 8 * v13)), (__m128i)0x14uLL);\n      }\n      while ( v6 < (v10 & 0xFFFFFFF8) );\n      if ( v6 < v10 )\n      {\nLABEL_9:\n        v14 = v10 - v6;\n        v15 = (_QWORD *)(a3 + 8LL * v6);\n        do\n        {\n          *v15++ >>= 20;\n          --v14;\n        }\n        while ( v14 );\n      }\n    }\n  }\n  if ( v21 )\n    sub_180102320();\n  return v9;\n}", "assembly": "; \n; FMOD::ChannelControl::getFadePoints from 0x18000b700 to 0x18000b903 (515 bytes)\n; \n; 4 xrefs:\n; > FMOD_ChannelGroup_GetFadePoints @ 0x1800c4fb9\n; > FMOD_Channel_GetFadePoints @ 0x1800c5589\n; > <???> @ 0x180194348\n; > <???> @ 0x1801f678c\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\npush    rbx                                                            ; +0x0, 0x18000b700\npush    rbp                                                            ; +0x2, 0x18000b702\npush    rsi                                                            ; +0x3, 0x18000b703\npush    rdi                                                            ; +0x4, 0x18000b704\npush    r14                                                            ; +0x5, 0x18000b705\npush    r15                                                            ; +0x7, 0x18000b707\nsub     rsp, 158h                                                      ; +0x9, 0x18000b709\nmov     rax, cs:__security_cookie                                      ; +0x10, 0x18000b710\nxor     rax, rsp                                                       ; +0x17, 0x18000b717\nmov     [rsp+188h+var_48], rax                                         ; +0x1a, 0x18000b71a\nmov     rsi, r8                                                        ; +0x22, 0x18000b722\nmov     rdi, rdx                                                       ; +0x25, 0x18000b725\nxor     ebx, ebx                                                       ; +0x28, 0x18000b728\nlea     r8, [rsp+188h+var_158]                                         ; +0x2a, 0x18000b72a\nlea     rdx, [rsp+188h+var_150]                                        ; +0x2f, 0x18000b72f\nmov     [rsp+188h+var_158], rbx                                        ; +0x34, 0x18000b734\nmov     r14, r9                                                        ; +0x39, 0x18000b739\nmov     r15, rcx                                                       ; +0x3c, 0x18000b73c\ncall    sub_180012360                                                  ; +0x3f, 0x18000b73f\nmov     ebp, eax                                                       ; +0x44, 0x18000b744\ntest    eax, eax                                                       ; +0x46, 0x18000b746\njnz     loc_18000B823                                                  ; +0x48, 0x18000b748\nmov     rcx, [rsp+188h+var_150]                                        ; +0x4e, 0x18000b74e\nmov     r9, r14                                                        ; +0x53, 0x18000b753\nmov     r8, rsi                                                        ; +0x56, 0x18000b756\nmov     rdx, rdi                                                       ; +0x59, 0x18000b759\nmov     rax, [rcx]                                                     ; +0x5c, 0x18000b75c\ncall    qword ptr [rax+108h]                                           ; +0x5f, 0x18000b75f\nmov     ebp, eax                                                       ; +0x65, 0x18000b765\ntest    eax, eax                                                       ; +0x67, 0x18000b767\njnz     loc_18000B823                                                  ; +0x69, 0x18000b769\ntest    rsi, rsi                                                       ; +0x6f, 0x18000b76f\njz      loc_18000B8D2                                                  ; +0x72, 0x18000b772\nmov     edx, [rdi]                                                     ; +0x78, 0x18000b778\ntest    edx, edx                                                       ; +0x7a, 0x18000b77a\njz      loc_18000B8D2                                                  ; +0x7c, 0x18000b77c\ncmp     edx, 8                                                         ; +0x82, 0x18000b782\njb      short loc_18000B7F9                                            ; +0x85, 0x18000b785\nmov     eax, 14h                                                       ; +0x87, 0x18000b787\nlea     r10d, [rbx+4]                                                  ; +0x8c, 0x18000b78c\nmov     r8d, edx                                                       ; +0x90, 0x18000b790\nand     r8d, 0FFFFFFF8h                                                ; +0x93, 0x18000b793\nmovq    xmm1, rax                                                      ; +0x97, 0x18000b797\nnop     dword ptr [rax+00h]                                            ; +0x9c, 0x18000b79c\nmov     eax, ebx                                                       ; +0xa0, 0x18000b7a0\nadd     ebx, 8                                                         ; +0xa2, 0x18000b7a2\nmovdqu  xmm0, xmmword ptr [rsi+rax*8]                                  ; +0xa5, 0x18000b7a5\npsrlq   xmm0, xmm1                                                     ; +0xaa, 0x18000b7aa\nmovdqu  xmmword ptr [rsi+rax*8], xmm0                                  ; +0xae, 0x18000b7ae\nlea     eax, [r10-2]                                                   ; +0xb3, 0x18000b7b3\nmovdqu  xmm0, xmmword ptr [rsi+rax*8]                                  ; +0xb7, 0x18000b7b7\npsrlq   xmm0, xmm1                                                     ; +0xbc, 0x18000b7bc\nmovdqu  xmmword ptr [rsi+rax*8], xmm0                                  ; +0xc0, 0x18000b7c0\nmov     eax, r10d                                                      ; +0xc5, 0x18000b7c5\nmovdqu  xmm0, xmmword ptr [rsi+rax*8]                                  ; +0xc8, 0x18000b7c8\npsrlq   xmm0, xmm1                                                     ; +0xcd, 0x18000b7cd\nmovdqu  xmmword ptr [rsi+rax*8], xmm0                                  ; +0xd1, 0x18000b7d1\nlea     eax, [r10+2]                                                   ; +0xd6, 0x18000b7d6\nadd     r10d, 8                                                        ; +0xda, 0x18000b7da\nmovdqu  xmm0, xmmword ptr [rsi+rax*8]                                  ; +0xde, 0x18000b7de\npsrlq   xmm0, xmm1                                                     ; +0xe3, 0x18000b7e3\nmovdqu  xmmword ptr [rsi+rax*8], xmm0                                  ; +0xe7, 0x18000b7e7\ncmp     ebx, r8d                                                       ; +0xec, 0x18000b7ec\njb      short loc_18000B7A0                                            ; +0xef, 0x18000b7ef\ncmp     ebx, edx                                                       ; +0xf1, 0x18000b7f1\njnb     loc_18000B8D2                                                  ; +0xf3, 0x18000b7f3\nmov     eax, ebx                                                       ; +0xf9, 0x18000b7f9\nsub     edx, ebx                                                       ; +0xfb, 0x18000b7fb\nmov     ecx, edx                                                       ; +0xfd, 0x18000b7fd\nlea     rax, [rsi+rax*8]                                               ; +0xff, 0x18000b7ff\nnop     dword ptr [rax+00h]                                            ; +0x103, 0x18000b803\nnop     word ptr [rax+rax+00000000h]                                   ; +0x107, 0x18000b807\nshr     qword ptr [rax], 14h                                           ; +0x110, 0x18000b810\nlea     rax, [rax+8]                                                   ; +0x114, 0x18000b814\nsub     rcx, 1                                                         ; +0x118, 0x18000b818\njnz     short loc_18000B810                                            ; +0x11c, 0x18000b81c\njmp     loc_18000B8D2                                                  ; +0x11e, 0x18000b81e\nmov     rax, cs:off_1801AED20                                          ; +0x123, 0x18000b823\ntest    byte ptr [rax+10h], 80h                                        ; +0x12a, 0x18000b82a\njz      loc_18000B8D2                                                  ; +0x12e, 0x18000b82e\nmov     r8, rdi                                                        ; +0x134, 0x18000b834\nlea     rcx, [rsp+188h+var_148]                                        ; +0x137, 0x18000b837\nmov     edi, 100h                                                      ; +0x13c, 0x18000b83c\nmov     edx, edi                                                       ; +0x141, 0x18000b841\ncall    sub_1800F3060                                                  ; +0x143, 0x18000b843\nmovsxd  rbx, eax                                                       ; +0x148, 0x18000b848\nlea     rcx, [rsp+188h+var_148]                                        ; +0x14b, 0x18000b84b\nmov     edx, edi                                                       ; +0x150, 0x18000b850\nlea     r8, asc_18014572C; \", \"                                        ; +0x152, 0x18000b852\nsub     edx, ebx                                                       ; +0x159, 0x18000b859\nadd     rcx, rbx; void *                                               ; +0x15b, 0x18000b85b\ncall    sub_1800F2F70                                                  ; +0x15e, 0x18000b85e\nadd     ebx, eax                                                       ; +0x163, 0x18000b863\nmov     edx, edi                                                       ; +0x165, 0x18000b865\nlea     rax, [rsp+188h+var_148]                                        ; +0x167, 0x18000b867\nmovsxd  rcx, ebx                                                       ; +0x16c, 0x18000b86c\nadd     rcx, rax                                                       ; +0x16f, 0x18000b86f\nsub     edx, ebx                                                       ; +0x172, 0x18000b872\nmov     r8, rsi                                                        ; +0x174, 0x18000b874\ncall    sub_1800F3280                                                  ; +0x177, 0x18000b877\nadd     ebx, eax                                                       ; +0x17c, 0x18000b87c\nlea     rcx, [rsp+188h+var_148]                                        ; +0x17e, 0x18000b87e\nmovsxd  rax, ebx                                                       ; +0x183, 0x18000b883\nlea     r8, asc_18014572C; \", \"                                        ; +0x186, 0x18000b886\nmov     edx, edi                                                       ; +0x18d, 0x18000b88d\nadd     rcx, rax; void *                                               ; +0x18f, 0x18000b88f\nsub     edx, ebx                                                       ; +0x192, 0x18000b892\ncall    sub_1800F2F70                                                  ; +0x194, 0x18000b894\nadd     ebx, eax                                                       ; +0x199, 0x18000b899\nlea     rcx, [rsp+188h+var_148]                                        ; +0x19b, 0x18000b89b\nmovsxd  rax, ebx                                                       ; +0x1a0, 0x18000b8a0\nsub     edi, ebx                                                       ; +0x1a3, 0x18000b8a3\nadd     rcx, rax                                                       ; +0x1a5, 0x18000b8a5\nmov     edx, edi                                                       ; +0x1a8, 0x18000b8a8\nmov     r8, r14                                                        ; +0x1aa, 0x18000b8aa\ncall    sub_1800F30A0                                                  ; +0x1ad, 0x18000b8ad\nlea     rax, [rsp+188h+var_148]                                        ; +0x1b2, 0x18000b8b2\nmov     r8, r15                                                        ; +0x1b7, 0x18000b8b7\nlea     r9, aChannelcontrol_16; \"ChannelControl::getFadePoints\"        ; +0x1ba, 0x18000b8ba\nmov     [rsp+188h+var_168], rax                                        ; +0x1c1, 0x18000b8c1\nmov     edx, 4                                                         ; +0x1c6, 0x18000b8c6\nmov     ecx, ebp                                                       ; +0x1cb, 0x18000b8cb\ncall    sub_1800B20E0                                                  ; +0x1cd, 0x18000b8cd\nmov     rcx, [rsp+188h+var_158]                                        ; +0x1d2, 0x18000b8d2\ntest    rcx, rcx                                                       ; +0x1d7, 0x18000b8d7\njz      short loc_18000B8E1                                            ; +0x1da, 0x18000b8da\ncall    sub_180102320                                                  ; +0x1dc, 0x18000b8dc\nmov     eax, ebp                                                       ; +0x1e1, 0x18000b8e1\nmov     rcx, [rsp+188h+var_48]                                         ; +0x1e3, 0x18000b8e3\nxor     rcx, rsp; StackCookie                                          ; +0x1eb, 0x18000b8eb\ncall    __security_check_cookie                                        ; +0x1ee, 0x18000b8ee\nadd     rsp, 158h                                                      ; +0x1f3, 0x18000b8f3\npop     r15                                                            ; +0x1fa, 0x18000b8fa\npop     r14                                                            ; +0x1fc, 0x18000b8fc\npop     rdi                                                            ; +0x1fe, 0x18000b8fe\npop     rsi                                                            ; +0x1ff, 0x18000b8ff\npop     rbp                                                            ; +0x200, 0x18000b900\npop     rbx                                                            ; +0x201, 0x18000b901\nretn                                                                   ; +0x202, 0x18000b902", "xrefs": ["FMOD_ChannelGroup_GetFadePoints @ 0x1800c4fb9", "FMOD_Channel_GetFadePoints @ 0x1800c5589", "<???> @ 0x180194348", "<???> @ 0x1801f678c"], "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"}