{"type": "func", "start": 1063552, "end": 1064084, "name": "sub_103A80", "pseudocode": "// \n// sub_103A80 from 0x103a80 to 0x103c94 (532 bytes)\n// \n// 1 xrefs:\n// > <???> @ 0x11f740\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_103A80(int8x16_t *a1, float32x4_t *a2, __int64 a3, int a4)\n{\n  unsigned int v4; // w9\n  int v5; // w8\n  int v6; // w9\n  int v8; // w23\n  int v9; // w9\n  __int64 v10; // x23\n  int v11; // w22\n  __int64 v12; // x24\n  __int64 v13; // x25\n  int8x16_t v14; // q0\n  int v15; // w22\n  __int64 v16; // x23\n  long double v17; // q0\n  int16x8_t v18; // q0\n  float32x4_t v19; // q1\n  int8x16_t v20; // q3\n  float32x4_t v21; // q4\n  float32x4_t v22; // q5\n  int16x8_t i; // [xsp+0h] [xbp-A0h]\n  int16x8_t v25; // [xsp+10h] [xbp-90h]\n  int16x8_t v26; // [xsp+20h] [xbp-80h]\n  int16x8_t j; // [xsp+20h] [xbp-80h]\n  float32x4_t v28; // [xsp+30h] [xbp-70h]\n  float32x4_t v29; // [xsp+40h] [xbp-60h]\n  int8x16_t v30; // [xsp+50h] [xbp-50h]\n\n  v4 = a1[6].n128_u8[4];\n  if ( v4 <= 7 )\n  {\n    v5 = a1[6].n128_u8[6];\n    v6 = 1 << v4;\n    v30 = *a1;\n    v29 = a1[1];\n    v8 = a4 >> 2;\n    v28 = a1[2];\n    if ( (v6 & 0xF0) != 0 )\n    {\n      v9 = v8 / 4;\n      v26 = vdupq_n_s16(-v5);\n      v25 = vdupq_n_s16(-2 * v5);\n      v10 = v8 / 4;\n      v11 = a4 >> 4;\n      v12 = 2 * v9;\n      v13 = 3 * v9;\n      for ( i = vdupq_n_s16(-3 * v5); v11; ++a2 )\n      {\n        *(long double *)&v14 = sub_104768();\n        --v11;\n        *a2 = vaddq_f32(vmlaq_f32(v29, vcvtq_f32_u32(vandq_s8(v14, v30)), v28), *a2);\n        a2[v10] = vaddq_f32(vmlaq_f32(v29, vcvtq_f32_u32(vandq_s8(v30, vshlq_s16(v14, v26))), v28), a2[v10]);\n        a2[v12] = vaddq_f32(vmlaq_f32(v29, vcvtq_f32_u32(vandq_s8(v30, vshlq_s16(v14, v25))), v28), a2[v12]);\n        a2[v13] = vaddq_f32(vmlaq_f32(v29, vcvtq_f32_u32(vandq_s8(v30, vshlq_s16(v14, i))), v28), a2[v13]);\n      }\n    }\n    else if ( (v6 & 3) != 0 )\n    {\n      for ( ; v8; ++a2 )\n      {\n        --v8;\n        *a2 = vmlaq_f32(vaddq_f32(*a2, v29), vcvtq_f32_u32(vandq_s8(COERCE_INT8X16_T(sub_104768()), v30)), v28);\n      }\n    }\n    else\n    {\n      v15 = a4 >> 3;\n      v16 = v8 / 2;\n      for ( j = vdupq_n_s16(-v5); v15; ++a2 )\n      {\n        v17 = sub_104768();\n        --v15;\n        *(long double *)&v18 = sub_104804(v17, *(long double *)a2);\n        *a2 = v19;\n        a2[v16] = vmlaq_f32(vaddq_f32(a2[v16], v21), vcvtq_f32_u32(vandq_s8(v20, vshlq_s16(v18, j))), v22);\n      }\n    }\n  }\n  return 0;\n}", "assembly": "; \n; sub_103A80 from 0x103a80 to 0x103c94 (532 bytes)\n; \n; 1 xrefs:\n; > <???> @ 0x11f740\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, #0xB0                                          ; +0x0, 0x103a80\nSTP             X24, X23, [SP,#0xA0+var_30]                            ; +0x4, 0x103a84\nSTP             X22, X21, [SP,#0xA0+var_20]                            ; +0x8, 0x103a88\nSTP             X20, X19, [SP,#0xA0+var_10]                            ; +0xc, 0x103a8c\nSTP             X29, X30, [SP,#0xA0+var_s0]                            ; +0x10, 0x103a90\nLDRB            W9, [X0,#0x64]                                         ; +0x14, 0x103a94\nSTR             X25, [SP,#0xA0+var_40]                                 ; +0x18, 0x103a98\nADD             X29, SP, #0xA0                                         ; +0x1c, 0x103a9c\nCMP             W9, #7                                                 ; +0x20, 0x103aa0\nB.HI            loc_103C74                                             ; +0x24, 0x103aa4\nLDR             Q0, [X0]                                               ; +0x28, 0x103aa8\nLDRB            W8, [X0,#0x66]                                         ; +0x2c, 0x103aac\nMOV             W10, #1                                                ; +0x30, 0x103ab0\nLSL             W9, W10, W9                                            ; +0x34, 0x103ab4\nSTR             Q0, [SP,#0xA0+var_50]                                  ; +0x38, 0x103ab8\nLDR             Q0, [X0,#0x10]                                         ; +0x3c, 0x103abc\nMOV             X19, X2                                                ; +0x40, 0x103ac0\nMOV             X20, X0                                                ; +0x44, 0x103ac4\nMOV             X21, X1                                                ; +0x48, 0x103ac8\nSTR             Q0, [SP,#0xA0+var_60]                                  ; +0x4c, 0x103acc\nLDR             Q0, [X0,#0x20]                                         ; +0x50, 0x103ad0\nTST             W9, #0xF0                                              ; +0x54, 0x103ad4\nASR             W23, W3, #2                                            ; +0x58, 0x103ad8\nSTR             Q0, [SP,#0xA0+var_70]                                  ; +0x5c, 0x103adc\nB.EQ            loc_103BC8                                             ; +0x60, 0x103ae0\nNEG             W10, W8                                                ; +0x64, 0x103ae4\nMOV             W9, #4                                                 ; +0x68, 0x103ae8\nNEG             W11, W8,LSL#1                                          ; +0x6c, 0x103aec\nDUP             V0.8H, W10                                             ; +0x70, 0x103af0\nSUB             W8, W8, W8,LSL#2                                       ; +0x74, 0x103af4\nSDIV            W9, W23, W9                                            ; +0x78, 0x103af8\nSTR             Q0, [SP,#0xA0+var_80]                                  ; +0x7c, 0x103afc\nDUP             V0.8H, W11                                             ; +0x80, 0x103b00\nSTR             Q0, [SP,#0xA0+var_90]                                  ; +0x84, 0x103b04\nDUP             V0.8H, W8                                              ; +0x88, 0x103b08\nSXTW            X23, W9                                                ; +0x8c, 0x103b0c\nLSL             W8, W9, #1                                             ; +0x90, 0x103b10\nADD             W9, W9, W9,LSL#1                                       ; +0x94, 0x103b14\nASR             W22, W3, #4                                            ; +0x98, 0x103b18\nSXTW            X24, W8                                                ; +0x9c, 0x103b1c\nSXTW            X25, W9                                                ; +0xa0, 0x103b20\nSTR             Q0, [SP,#0xA0+var_A0]                                  ; +0xa4, 0x103b24\nCBZ             W22, loc_103C74                                        ; +0xa8, 0x103b28\nBL              sub_104768                                             ; +0xac, 0x103b2c\nLDP             Q6, Q5, [SP,#0xA0+var_60]                              ; +0xb0, 0x103b30\nLDP             Q1, Q7, [SP,#0xA0+var_80]                              ; +0xb4, 0x103b34\nLDR             Q4, [X21]                                              ; +0xb8, 0x103b38\nSUB             W22, W22, #1                                           ; +0xbc, 0x103b3c\nAND             V2.16B, V0.16B, V5.16B                                 ; +0xc0, 0x103b40\nMOV             V3.16B, V6.16B                                         ; +0xc4, 0x103b44\nUCVTF           V2.4S, V2.4S                                           ; +0xc8, 0x103b48\nFMLA            V3.4S, V2.4S, V7.4S                                    ; +0xcc, 0x103b4c\nFADD            V3.4S, V3.4S, V4.4S                                    ; +0xd0, 0x103b50\nLDP             Q16, Q2, [SP,#0xA0+var_A0]                             ; +0xd4, 0x103b54\nSTR             Q3, [X21]                                              ; +0xd8, 0x103b58\nSSHL            V1.8H, V0.8H, V1.8H                                    ; +0xdc, 0x103b5c\nLDR             Q3, [X21,X23,LSL#4]                                    ; +0xe0, 0x103b60\nAND             V1.16B, V5.16B, V1.16B                                 ; +0xe4, 0x103b64\nMOV             V4.16B, V6.16B                                         ; +0xe8, 0x103b68\nUCVTF           V1.4S, V1.4S                                           ; +0xec, 0x103b6c\nFMLA            V4.4S, V1.4S, V7.4S                                    ; +0xf0, 0x103b70\nFADD            V3.4S, V4.4S, V3.4S                                    ; +0xf4, 0x103b74\nSTR             Q3, [X21,X23,LSL#4]                                    ; +0xf8, 0x103b78\nSSHL            V2.8H, V0.8H, V2.8H                                    ; +0xfc, 0x103b7c\nLDR             Q3, [X21,X24,LSL#4]                                    ; +0x100, 0x103b80\nAND             V2.16B, V5.16B, V2.16B                                 ; +0x104, 0x103b84\nMOV             V1.16B, V6.16B                                         ; +0x108, 0x103b88\nUCVTF           V2.4S, V2.4S                                           ; +0x10c, 0x103b8c\nFMLA            V1.4S, V2.4S, V7.4S                                    ; +0x110, 0x103b90\nFADD            V1.4S, V1.4S, V3.4S                                    ; +0x114, 0x103b94\nSTR             Q1, [X21,X24,LSL#4]                                    ; +0x118, 0x103b98\nSSHL            V0.8H, V0.8H, V16.8H                                   ; +0x11c, 0x103b9c\nLDR             Q1, [X21,X25,LSL#4]                                    ; +0x120, 0x103ba0\nAND             V0.16B, V5.16B, V0.16B                                 ; +0x124, 0x103ba4\nMOV             V4.16B, V6.16B                                         ; +0x128, 0x103ba8\nUCVTF           V0.4S, V0.4S                                           ; +0x12c, 0x103bac\nFMLA            V4.4S, V0.4S, V7.4S                                    ; +0x130, 0x103bb0\nFADD            V0.4S, V4.4S, V1.4S                                    ; +0x134, 0x103bb4\nSTR             Q0, [X21,X25,LSL#4]                                    ; +0x138, 0x103bb8\nADD             X21, X21, #0x10                                        ; +0x13c, 0x103bbc\nCBNZ            W22, loc_103B2C                                        ; +0x140, 0x103bc0\nB               loc_103C74                                             ; +0x144, 0x103bc4\nTST             W9, #3                                                 ; +0x148, 0x103bc8\nB.EQ            loc_103C10                                             ; +0x14c, 0x103bcc\nCBZ             W23, loc_103C74                                        ; +0x150, 0x103bd0\nBL              sub_104768                                             ; +0x154, 0x103bd4\nMOV             X8, X21                                                ; +0x158, 0x103bd8\nLDR             Q1, [X8],#0x10                                         ; +0x15c, 0x103bdc\nLDR             Q2, [SP,#0xA0+var_50]                                  ; +0x160, 0x103be0\nSUB             W23, W23, #1                                           ; +0x164, 0x103be4\nAND             V0.16B, V0.16B, V2.16B                                 ; +0x168, 0x103be8\nLDR             Q2, [SP,#0xA0+var_60]                                  ; +0x16c, 0x103bec\nUCVTF           V0.4S, V0.4S                                           ; +0x170, 0x103bf0\nFADD            V1.4S, V1.4S, V2.4S                                    ; +0x174, 0x103bf4\nLDR             Q2, [SP,#0xA0+var_70]                                  ; +0x178, 0x103bf8\nFMLA            V1.4S, V0.4S, V2.4S                                    ; +0x17c, 0x103bfc\nSTR             Q1, [X21]                                              ; +0x180, 0x103c00\nMOV             X21, X8                                                ; +0x184, 0x103c04\nCBNZ            W23, loc_103BD4                                        ; +0x188, 0x103c08\nB               loc_103C74                                             ; +0x18c, 0x103c0c\nMOV             W9, #2                                                 ; +0x190, 0x103c10\nNEG             W8, W8                                                 ; +0x194, 0x103c14\nSDIV            W9, W23, W9                                            ; +0x198, 0x103c18\nASR             W22, W3, #3                                            ; +0x19c, 0x103c1c\nDUP             V0.8H, W8                                              ; +0x1a0, 0x103c20\nSXTW            X23, W9                                                ; +0x1a4, 0x103c24\nSTR             Q0, [SP,#0xA0+var_80]                                  ; +0x1a8, 0x103c28\nCBZ             W22, loc_103C74                                        ; +0x1ac, 0x103c2c\nBL              sub_104768                                             ; +0x1b0, 0x103c30\nLDP             Q4, Q3, [SP,#0xA0+var_60]                              ; +0x1b4, 0x103c34\nLDR             Q1, [X21]                                              ; +0x1b8, 0x103c38\nLDR             Q5, [SP,#0xA0+var_70]                                  ; +0x1bc, 0x103c3c\nSUB             W22, W22, #1                                           ; +0x1c0, 0x103c40\nBL              sub_104804                                             ; +0x1c4, 0x103c44\nLDR             Q2, [SP,#0xA0+var_80]                                  ; +0x1c8, 0x103c48\nSTR             Q1, [X21]                                              ; +0x1cc, 0x103c4c\nLDR             Q1, [X21,X23,LSL#4]                                    ; +0x1d0, 0x103c50\nSSHL            V0.8H, V0.8H, V2.8H                                    ; +0x1d4, 0x103c54\nAND             V0.16B, V3.16B, V0.16B                                 ; +0x1d8, 0x103c58\nUCVTF           V0.4S, V0.4S                                           ; +0x1dc, 0x103c5c\nFADD            V1.4S, V1.4S, V4.4S                                    ; +0x1e0, 0x103c60\nFMLA            V1.4S, V0.4S, V5.4S                                    ; +0x1e4, 0x103c64\nSTR             Q1, [X21,X23,LSL#4]                                    ; +0x1e8, 0x103c68\nADD             X21, X21, #0x10                                        ; +0x1ec, 0x103c6c\nCBNZ            W22, loc_103C30                                        ; +0x1f0, 0x103c70\nLDP             X29, X30, [SP,#0xA0+var_s0]                            ; +0x1f4, 0x103c74\nLDP             X20, X19, [SP,#0xA0+var_10]                            ; +0x1f8, 0x103c78\nLDP             X22, X21, [SP,#0xA0+var_20]                            ; +0x1fc, 0x103c7c\nLDP             X24, X23, [SP,#0xA0+var_30]                            ; +0x200, 0x103c80\nLDR             X25, [SP,#0xA0+var_40]                                 ; +0x204, 0x103c84\nMOV             X0, XZR                                                ; +0x208, 0x103c88\nADD             SP, SP, #0xB0                                          ; +0x20c, 0x103c8c\nRET                                                                    ; +0x210, 0x103c90", "xrefs": ["<???> @ 0x11f740"], "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"}