{"type": "func", "start": 6442463536, "end": 6442464140, "name": "sub_180003130", "pseudocode": "// \n// sub_180003130 from 0x180003130 to 0x18000338c (604 bytes)\n// \n// 5 xrefs:\n// > sub_180009770 @ 0x180009a91\n// > <???> @ 0x18017d45c\n// > <???> @ 0x18017d494\n// > <???> @ 0x1801a78a8\n// > <???> @ 0x1801f6180\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_180003130(__int64 a1, __m128 *a2, __int64 a3, int a4)\n{\n  unsigned int v4; // r15d\n  __m128i v7; // xmm6\n  __m128 v9; // xmm7\n  __m128 v10; // xmm8\n  int v11; // edi\n  int v12; // ebp\n  __int64 v13; // rdi\n  __m128i v14; // xmm0\n  int v15; // ebp\n  __int64 v16; // rcx\n  __int64 v17; // rdi\n  __int64 v18; // r12\n  __int64 v19; // r13\n  __m128i v20; // xmm0\n\n  v4 = *(char *)(a1 + 102);\n  v7 = _mm_loadu_si128((const __m128i *)a1);\n  v9 = *(__m128 *)(a1 + 16);\n  v10 = *(__m128 *)(a1 + 32);\n  _mm_prefetch(*(const char **)(a1 + 48), 1);\n  _mm_prefetch(*(const char **)(a1 + 56), 1);\n  v11 = a4 >> 2;\n  switch ( *(_BYTE *)(a1 + 100) )\n  {\n    case 0:\n    case 1:\n      for ( ; v11; --v11 )\n      {\n        *a2 = _mm_add_ps(\n                _mm_add_ps(_mm_mul_ps(_mm_cvtepi32_ps(_mm_and_si128(sub_180002960(a1, a3), v7)), v10), v9),\n                *a2);\n        ++a2;\n      }\n      break;\n    case 2:\n    case 3:\n      v12 = a4 >> 3;\n      if ( a4 >> 3 )\n      {\n        v13 = v11 / 2;\n        do\n        {\n          v14 = sub_180002960(a1, a3);\n          *a2 = _mm_add_ps(_mm_add_ps(_mm_mul_ps(_mm_cvtepi32_ps(_mm_and_si128(v14, v7)), v10), v9), *a2);\n          a2[v13] = _mm_add_ps(\n                      _mm_add_ps(_mm_mul_ps(_mm_cvtepi32_ps(_mm_and_si128(_mm_srai_epi32(v14, v4), v7)), v10), v9),\n                      a2[v13]);\n          ++a2;\n          --v12;\n        }\n        while ( v12 );\n      }\n      break;\n    case 4:\n    case 5:\n    case 6:\n    case 7:\n      v15 = a4 >> 4;\n      if ( a4 >> 4 )\n      {\n        v16 = v11 / 4;\n        v17 = v16;\n        v18 = 2 * v16;\n        v19 = 3 * v16;\n        do\n        {\n          v20 = sub_180002960(a1, a3);\n          *a2 = _mm_add_ps(_mm_add_ps(_mm_mul_ps(_mm_cvtepi32_ps(_mm_and_si128(v20, v7)), v10), v9), *a2);\n          a2[v17] = _mm_add_ps(\n                      _mm_add_ps(_mm_mul_ps(_mm_cvtepi32_ps(_mm_and_si128(_mm_srai_epi32(v20, v4), v7)), v10), v9),\n                      a2[v17]);\n          a2[v18] = _mm_add_ps(\n                      _mm_add_ps(_mm_mul_ps(_mm_cvtepi32_ps(_mm_and_si128(_mm_srai_epi32(v20, 2 * v4), v7)), v10), v9),\n                      a2[v18]);\n          a2[v19] = _mm_add_ps(\n                      _mm_add_ps(_mm_mul_ps(_mm_cvtepi32_ps(_mm_and_si128(_mm_srai_epi32(v20, 3 * v4), v7)), v10), v9),\n                      a2[v19]);\n          ++a2;\n          --v15;\n        }\n        while ( v15 );\n      }\n      break;\n    default:\n      return 0;\n  }\n  return 0;\n}", "assembly": "; \n; sub_180003130 from 0x180003130 to 0x18000338c (604 bytes)\n; \n; 5 xrefs:\n; > sub_180009770 @ 0x180009a91\n; > <???> @ 0x18017d45c\n; > <???> @ 0x18017d494\n; > <???> @ 0x1801a78a8\n; > <???> @ 0x1801f6180\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, 0x180003130\npush    rsi                                                            ; +0x2, 0x180003132\npush    rdi                                                            ; +0x3, 0x180003133\npush    r14                                                            ; +0x4, 0x180003134\npush    r15                                                            ; +0x6, 0x180003136\nsub     rsp, 50h                                                       ; +0x8, 0x180003138\nmovsx   r15d, byte ptr [rcx+66h]                                       ; +0xc, 0x18000313c\nmov     edi, r9d                                                       ; +0x11, 0x180003141\nmov     rax, [rcx+30h]                                                 ; +0x14, 0x180003144\nmov     r14, r8                                                        ; +0x18, 0x180003148\nmovaps  [rsp+78h+var_38], xmm6                                         ; +0x1b, 0x18000314b\nmov     rbx, rdx                                                       ; +0x20, 0x180003150\nmovdqu  xmm6, xmmword ptr [rcx]                                        ; +0x23, 0x180003153\nmov     rsi, rcx                                                       ; +0x27, 0x180003157\nmovaps  [rsp+78h+var_48], xmm7                                         ; +0x2a, 0x18000315a\nmovups  xmm7, xmmword ptr [rcx+10h]                                    ; +0x2f, 0x18000315f\nmovaps  [rsp+78h+var_58], xmm8                                         ; +0x33, 0x180003163\nmovups  xmm8, xmmword ptr [rcx+20h]                                    ; +0x39, 0x180003169\nprefetcht0 byte ptr [rax]                                              ; +0x3e, 0x18000316e\nmov     rax, [rcx+38h]                                                 ; +0x41, 0x180003171\nprefetcht0 byte ptr [rax]                                              ; +0x45, 0x180003175\nmovsx   rax, byte ptr [rcx+64h]                                        ; +0x48, 0x180003178\nsar     edi, 2                                                         ; +0x4d, 0x18000317d\ncmp     eax, 7; switch 8 cases                                         ; +0x50, 0x180003180\nja      def_1800031A2; jumptable 00000001800031A2 default case         ; +0x53, 0x180003183\nlea     rdx, cs:180000000h                                             ; +0x59, 0x180003189\nmov     [rsp+78h+arg_0], rbp                                           ; +0x60, 0x180003190\nmov     ecx, ds:(jpt_1800031A2 - 180000000h)[rdx+rax*4]                ; +0x68, 0x180003198\nadd     rcx, rdx                                                       ; +0x6f, 0x18000319f\njmp     rcx; switch jump                                               ; +0x72, 0x1800031a2\ntest    edi, edi; jumptable 00000001800031A2 cases 0,1                 ; +0x74, 0x1800031a4\njz      loc_180003343                                                  ; +0x76, 0x1800031a6\nnop     dword ptr [rax+00h]                                            ; +0x7c, 0x1800031ac\nmov     rdx, r14                                                       ; +0x80, 0x1800031b0\nmov     rcx, rsi                                                       ; +0x83, 0x1800031b3\ncall    sub_180002960                                                  ; +0x86, 0x1800031b6\npand    xmm0, xmm6                                                     ; +0x8b, 0x1800031bb\ncvtdq2ps xmm1, xmm0                                                    ; +0x8f, 0x1800031bf\nmulps   xmm1, xmm8                                                     ; +0x92, 0x1800031c2\naddps   xmm1, xmm7                                                     ; +0x96, 0x1800031c6\naddps   xmm1, xmmword ptr [rbx]                                        ; +0x99, 0x1800031c9\nmovups  xmmword ptr [rbx], xmm1                                        ; +0x9c, 0x1800031cc\nadd     rbx, 10h                                                       ; +0x9f, 0x1800031cf\nsub     edi, 1                                                         ; +0xa3, 0x1800031d3\njnz     short loc_1800031B0                                            ; +0xa6, 0x1800031d6\njmp     loc_180003343                                                  ; +0xa8, 0x1800031d8\nmov     ebp, edi; jumptable 00000001800031A2 cases 2,3                 ; +0xad, 0x1800031dd\nsar     ebp, 1                                                         ; +0xaf, 0x1800031df\njz      loc_180003343                                                  ; +0xb1, 0x1800031e1\nmov     eax, edi                                                       ; +0xb7, 0x1800031e7\ncdq                                                                    ; +0xb9, 0x1800031e9\nsub     eax, edx                                                       ; +0xba, 0x1800031ea\nsar     eax, 1                                                         ; +0xbc, 0x1800031ec\nmovsxd  rdi, eax                                                       ; +0xbe, 0x1800031ee\nadd     rdi, rdi                                                       ; +0xc1, 0x1800031f1\nmov     rdx, r14                                                       ; +0xc4, 0x1800031f4\nmov     rcx, rsi                                                       ; +0xc7, 0x1800031f7\ncall    sub_180002960                                                  ; +0xca, 0x1800031fa\nmovdqa  xmm1, xmm0                                                     ; +0xcf, 0x1800031ff\nmovdqa  xmm3, xmm0                                                     ; +0xd3, 0x180003203\nmovd    xmm0, r15d                                                     ; +0xd7, 0x180003207\npand    xmm1, xmm6                                                     ; +0xdc, 0x18000320c\npsrad   xmm3, xmm0                                                     ; +0xe0, 0x180003210\ncvtdq2ps xmm2, xmm1                                                    ; +0xe4, 0x180003214\npand    xmm3, xmm6                                                     ; +0xe7, 0x180003217\nmulps   xmm2, xmm8                                                     ; +0xeb, 0x18000321b\ncvtdq2ps xmm0, xmm3                                                    ; +0xef, 0x18000321f\naddps   xmm2, xmm7                                                     ; +0xf2, 0x180003222\nmulps   xmm0, xmm8                                                     ; +0xf5, 0x180003225\naddps   xmm2, xmmword ptr [rbx]                                        ; +0xf9, 0x180003229\naddps   xmm0, xmm7                                                     ; +0xfc, 0x18000322c\nmovups  xmmword ptr [rbx], xmm2                                        ; +0xff, 0x18000322f\naddps   xmm0, xmmword ptr [rbx+rdi*8]                                  ; +0x102, 0x180003232\nmovups  xmmword ptr [rbx+rdi*8], xmm0                                  ; +0x106, 0x180003236\nadd     rbx, 10h                                                       ; +0x10a, 0x18000323a\nsub     ebp, 1                                                         ; +0x10e, 0x18000323e\njnz     short loc_1800031F4                                            ; +0x111, 0x180003241\njmp     loc_180003343                                                  ; +0x113, 0x180003243\nmov     ebp, edi; jumptable 00000001800031A2 cases 4-7                 ; +0x118, 0x180003248\nsar     ebp, 2                                                         ; +0x11a, 0x18000324a\ntest    ebp, ebp                                                       ; +0x11d, 0x18000324d\njz      loc_180003343                                                  ; +0x11f, 0x18000324f\nmov     eax, edi                                                       ; +0x125, 0x180003255\nmov     [rsp+78h+arg_8], r12                                           ; +0x127, 0x180003257\ncdq                                                                    ; +0x12f, 0x18000325f\nmov     [rsp+78h+arg_10], r13                                          ; +0x130, 0x180003260\nand     edx, 3                                                         ; +0x138, 0x180003268\nadd     eax, edx                                                       ; +0x13b, 0x18000326b\nsar     eax, 2                                                         ; +0x13d, 0x18000326d\nmovsxd  rcx, eax                                                       ; +0x140, 0x180003270\nmov     rdi, rcx                                                       ; +0x143, 0x180003273\nmov     r12, rcx                                                       ; +0x146, 0x180003276\nadd     rdi, rdi                                                       ; +0x149, 0x180003279\nshl     r12, 5                                                         ; +0x14c, 0x18000327c\nlea     r13, [rcx+rcx*2]                                               ; +0x150, 0x180003280\nadd     r13, r13                                                       ; +0x154, 0x180003284\nnop     word ptr [rax+rax+00000000h]                                   ; +0x157, 0x180003287\nmov     rdx, r14                                                       ; +0x160, 0x180003290\nmov     rcx, rsi                                                       ; +0x163, 0x180003293\ncall    sub_180002960                                                  ; +0x166, 0x180003296\nmovdqa  xmm3, xmm0                                                     ; +0x16b, 0x18000329b\nlea     eax, [r15+r15]                                                 ; +0x16f, 0x18000329f\nmovdqa  xmm1, xmm0                                                     ; +0x173, 0x1800032a3\nmovd    xmm0, r15d                                                     ; +0x177, 0x1800032a7\npand    xmm1, xmm6                                                     ; +0x17c, 0x1800032ac\ncvtdq2ps xmm2, xmm1                                                    ; +0x180, 0x1800032b0\nmovdqa  xmm1, xmm3                                                     ; +0x183, 0x1800032b3\npsrad   xmm1, xmm0                                                     ; +0x187, 0x1800032b7\nmulps   xmm2, xmm8                                                     ; +0x18b, 0x1800032bb\npand    xmm1, xmm6                                                     ; +0x18f, 0x1800032bf\ncvtdq2ps xmm0, xmm1                                                    ; +0x193, 0x1800032c3\nmovdqa  xmm1, xmm3                                                     ; +0x196, 0x1800032c6\naddps   xmm2, xmm7                                                     ; +0x19a, 0x1800032ca\nmulps   xmm0, xmm8                                                     ; +0x19d, 0x1800032cd\naddps   xmm2, xmmword ptr [rbx]                                        ; +0x1a1, 0x1800032d1\naddps   xmm0, xmm7                                                     ; +0x1a4, 0x1800032d4\nmovups  xmmword ptr [rbx], xmm2                                        ; +0x1a7, 0x1800032d7\naddps   xmm0, xmmword ptr [rbx+rdi*8]                                  ; +0x1aa, 0x1800032da\nmovups  xmmword ptr [rbx+rdi*8], xmm0                                  ; +0x1ae, 0x1800032de\nmovd    xmm0, eax                                                      ; +0x1b2, 0x1800032e2\nlea     eax, [r15+r15*2]                                               ; +0x1b6, 0x1800032e6\npsrad   xmm1, xmm0                                                     ; +0x1ba, 0x1800032ea\npand    xmm1, xmm6                                                     ; +0x1be, 0x1800032ee\ncvtdq2ps xmm0, xmm1                                                    ; +0x1c2, 0x1800032f2\nmulps   xmm0, xmm8                                                     ; +0x1c5, 0x1800032f5\naddps   xmm0, xmm7                                                     ; +0x1c9, 0x1800032f9\naddps   xmm0, xmmword ptr [r12+rbx]                                    ; +0x1cc, 0x1800032fc\nmovups  xmmword ptr [r12+rbx], xmm0                                    ; +0x1d1, 0x180003301\nmovd    xmm0, eax                                                      ; +0x1d6, 0x180003306\npsrad   xmm3, xmm0                                                     ; +0x1da, 0x18000330a\npand    xmm3, xmm6                                                     ; +0x1de, 0x18000330e\ncvtdq2ps xmm0, xmm3                                                    ; +0x1e2, 0x180003312\nmulps   xmm0, xmm8                                                     ; +0x1e5, 0x180003315\naddps   xmm0, xmm7                                                     ; +0x1e9, 0x180003319\naddps   xmm0, xmmword ptr [rbx+r13*8]                                  ; +0x1ec, 0x18000331c\nmovups  xmmword ptr [rbx+r13*8], xmm0                                  ; +0x1f1, 0x180003321\nadd     rbx, 10h                                                       ; +0x1f6, 0x180003326\nsub     ebp, 1                                                         ; +0x1fa, 0x18000332a\njnz     loc_180003290                                                  ; +0x1fd, 0x18000332d\nmov     r13, [rsp+78h+arg_10]                                          ; +0x203, 0x180003333\nmov     r12, [rsp+78h+arg_8]                                           ; +0x20b, 0x18000333b\nmov     rbp, [rsp+78h+arg_0]                                           ; +0x213, 0x180003343\nmovaps  xmm6, [rsp+78h+var_38]; jumptable 00000001800031A2 default case ; +0x21b, 0x18000334b\nxor     eax, eax                                                       ; +0x220, 0x180003350\nmovaps  xmm7, [rsp+78h+var_48]                                         ; +0x222, 0x180003352\nmovaps  xmm8, [rsp+78h+var_58]                                         ; +0x227, 0x180003357\nadd     rsp, 50h                                                       ; +0x22d, 0x18000335d\npop     r15                                                            ; +0x231, 0x180003361\npop     r14                                                            ; +0x233, 0x180003363\npop     rdi                                                            ; +0x235, 0x180003365\npop     rsi                                                            ; +0x236, 0x180003366\npop     rbx                                                            ; +0x237, 0x180003367\nretn                                                                   ; +0x238, 0x180003368\nalign 4                                                                ; +0x239, 0x180003369\ndd offset loc_1800031A4 - 180000000h; jump table for switch statement  ; +0x23c, 0x18000336c", "xrefs": ["sub_180009770 @ 0x180009a91", "<???> @ 0x18017d45c", "<???> @ 0x18017d494", "<???> @ 0x1801a78a8", "<???> @ 0x1801f6180"], "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"}