{"type": "func", "start": 1072824, "end": 1073088, "name": "Biquad_Filter", "pseudocode": "// \n// Biquad_Filter from 0x105eb8 to 0x105fc0 (264 bytes)\n// \n// 5 xrefs:\n// > Pole_Zero_Filter_Phase @ 0x105eb4\n// > .Biquad_Filter @ 0x109e9c\n// > <???> @ 0x6280\n// > .Biquad_Filter @ 0x109e94\n// > <???> @ 0x111810\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 Biquad_Filter(\n        float *a1,\n        __int16 a2,\n        _DWORD *a3,\n        __int16 a4,\n        __int64 a5,\n        float *a6,\n        __int16 a7,\n        double a8,\n        double a9,\n        double a10,\n        double a11,\n        double a12,\n        double a13,\n        double a14,\n        double a15)\n{\n  float v15; // s17\n  float v16; // s18\n  float v17; // s19\n  float v18; // s5\n  float v19; // s3\n  float v20; // s16\n  unsigned int v21; // w4\n  float v22; // s7\n  __int64 v23; // x8\n  __int64 v24; // x7\n  __int64 v25; // x1\n  __int64 v26; // x3\n  float v27; // s1\n  float v28; // s2\n  float v29; // s1\n  __int64 v31; // x0\n  __int128 v32; // [xsp+10h] [xbp+10h]\n\n  *(float *)&a9 = a6[1];\n  *(float *)&a8 = *a6;\n  *(float *)&a12 = a6[3];\n  *(float *)&a14 = a6[2];\n  LODWORD(a15) = *(_DWORD *)a5;\n  v15 = *(float *)(a5 + 8);\n  v16 = *(float *)(a5 + 12);\n  v17 = *(float *)(a5 + 16);\n  if ( (a7 & 1) != 0 )\n  {\n    v31 = __assert2(\n            \"../../src/pl2_encode_subroutine.c\",\n            1881,\n            \"Biquad_Filter\",\n            \"0 == dspsBlockSize % 2\",\n            a8,\n            a9,\n            a10,\n            a11,\n            a12,\n            a13,\n            a14,\n            a15);\n    return PLII_Encode(v31);\n  }\n  else\n  {\n    v18 = a6[2];\n    v19 = a6[3];\n    if ( a7 )\n    {\n      v20 = -*(float *)(a5 + 4);\n      v21 = a7 & 1;\n      v22 = -*(float *)&a15;\n      v23 = a2;\n      v24 = a4;\n      v25 = 8LL * a2;\n      v26 = 8LL * a4;\n      do\n      {\n        v21 += 2;\n        v18 = a1[v23];\n        v19 = *a1;\n        a1 = (float *)((char *)a1 + v25);\n        v27 = (float)(*(float *)&a12 * v17) + (float)(*(float *)&a9 * v20);\n        v28 = (float)(*(float *)&a14 * v17) + (float)(*(float *)&a8 * v20);\n        *(float *)&a12 = v19;\n        v29 = (float)(v27 + (float)(*(float *)&a8 * v22)) + (float)(*(float *)&a14 * v16);\n        *(float *)&a14 = v18;\n        *(float *)&a9 = v29 + (float)(v19 * v15);\n        *(float *)&a8 = (float)((float)(v28 + (float)(v18 * v15)) + (float)(v19 * v16)) + (float)(*(float *)&a9 * v22);\n        *a3 = LODWORD(a9);\n        a3[v24] = LODWORD(a8);\n        a3 = (_DWORD *)((char *)a3 + v26);\n      }\n      while ( v21 < a7 );\n    }\n    *(_QWORD *)&v32 = __PAIR64__(LODWORD(a9), LODWORD(a8));\n    *((_QWORD *)&v32 + 1) = __PAIR64__(LODWORD(v19), LODWORD(v18));\n    *(_OWORD *)a6 = v32;\n    return 0;\n  }\n}", "assembly": "; \n; Biquad_Filter from 0x105eb8 to 0x105fc0 (264 bytes)\n; \n; 5 xrefs:\n; > Pole_Zero_Filter_Phase @ 0x105eb4\n; > .Biquad_Filter @ 0x109e9c\n; > <???> @ 0x6280\n; > .Biquad_Filter @ 0x109e94\n; > <???> @ 0x111810\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\nSTP             X29, X30, [SP,#var_20]!                                ; +0x0, 0x105eb8\nSXTH            W6, W6                                                 ; +0x4, 0x105ebc\nSXTH            X1, W1                                                 ; +0x8, 0x105ec0\nMOV             X29, SP                                                ; +0xc, 0x105ec4\nSXTH            X3, W3                                                 ; +0x10, 0x105ec8\nAND             W7, W6, #1                                             ; +0x14, 0x105ecc\nLDR             S1, [X5,#4]                                            ; +0x18, 0x105ed0\nLDR             S0, [X5]                                               ; +0x1c, 0x105ed4\nLDR             S4, [X5,#0xC]                                          ; +0x20, 0x105ed8\nLDR             S6, [X5,#8]                                            ; +0x24, 0x105edc\nLDR             S16, [X4,#4]                                           ; +0x28, 0x105ee0\nLDR             S7, [X4]                                               ; +0x2c, 0x105ee4\nLDR             S17, [X4,#8]                                           ; +0x30, 0x105ee8\nLDR             S18, [X4,#0xC]                                         ; +0x34, 0x105eec\nLDR             S19, [X4,#0x10]                                        ; +0x38, 0x105ef0\nTBNZ            W6, #0, loc_105F9C                                     ; +0x3c, 0x105ef4\nFMOV            S5, S6                                                 ; +0x40, 0x105ef8\nFMOV            S3, S4                                                 ; +0x44, 0x105efc\nCBZ             W6, loc_105F74                                         ; +0x48, 0x105f00\nFNEG            S16, S16                                               ; +0x4c, 0x105f04\nMOV             W4, W7                                                 ; +0x50, 0x105f08\nFNEG            S7, S7                                                 ; +0x54, 0x105f0c\nLSL             X8, X1, #2                                             ; +0x58, 0x105f10\nLSL             X7, X3, #2                                             ; +0x5c, 0x105f14\nLSL             X1, X1, #3                                             ; +0x60, 0x105f18\nLSL             X3, X3, #3                                             ; +0x64, 0x105f1c\nFMUL            S4, S4, S19                                            ; +0x68, 0x105f20\nADD             W4, W4, #2                                             ; +0x6c, 0x105f24\nFMUL            S2, S6, S19                                            ; +0x70, 0x105f28\nCMP             W4, W6                                                 ; +0x74, 0x105f2c\nLDR             S5, [X0,X8]                                            ; +0x78, 0x105f30\nLDR             S3, [X0]                                               ; +0x7c, 0x105f34\nADD             X0, X0, X1                                             ; +0x80, 0x105f38\nFMADD           S1, S1, S16, S4                                        ; +0x84, 0x105f3c\nFMADD           S2, S0, S16, S2                                        ; +0x88, 0x105f40\nFMOV            S4, S3                                                 ; +0x8c, 0x105f44\nFMADD           S1, S0, S7, S1                                         ; +0x90, 0x105f48\nFMADD           S0, S5, S17, S2                                        ; +0x94, 0x105f4c\nFMADD           S1, S6, S18, S1                                        ; +0x98, 0x105f50\nFMADD           S0, S3, S18, S0                                        ; +0x9c, 0x105f54\nFMOV            S6, S5                                                 ; +0xa0, 0x105f58\nFMADD           S1, S3, S17, S1                                        ; +0xa4, 0x105f5c\nFMADD           S0, S1, S7, S0                                         ; +0xa8, 0x105f60\nSTR             S1, [X2]                                               ; +0xac, 0x105f64\nSTR             S0, [X2,X7]                                            ; +0xb0, 0x105f68\nADD             X2, X2, X3                                             ; +0xb4, 0x105f6c\nB.CC            loc_105F20                                             ; +0xb8, 0x105f70\nADD             X1, X29, #0x20+var_10                                  ; +0xbc, 0x105f74\nMOV             W0, #0                                                 ; +0xc0, 0x105f78\nSTR             S0, [X29,#0x20+var_10]                                 ; +0xc4, 0x105f7c\nSTR             S1, [X29,#0x20+var_C]                                  ; +0xc8, 0x105f80\nSTR             S5, [X29,#0x20+var_8]                                  ; +0xcc, 0x105f84\nSTR             S3, [X29,#0x20+var_4]                                  ; +0xd0, 0x105f88\nLDR             Q0, [X1]                                               ; +0xd4, 0x105f8c\nLDP             X29, X30, [SP+0x20+var_20],#0x20                       ; +0xd8, 0x105f90\nSTR             Q0, [X5]                                               ; +0xdc, 0x105f94\nRET                                                                    ; +0xe0, 0x105f98\nADRP            X2, #aPoleZeroFilter_1@PAGE; \"Pole_Zero_Filter\"        ; +0xe4, 0x105f9c\nADRP            X0, #aSrcPl2EncodeSu@PAGE; \"../../src/pl2_encode_subroutine.c\" ; +0xe8, 0x105fa0\nADD             X2, X2, #aPoleZeroFilter_1@PAGEOFF; \"Pole_Zero_Filter\" ; +0xec, 0x105fa4\nADRP            X3, #a0Dspsblocksize@PAGE; \"0 == dspsBlockSize % 2\"    ; +0xf0, 0x105fa8\nADD             X0, X0, #aSrcPl2EncodeSu@PAGEOFF; \"../../src/pl2_encode_subroutine.c\" ; +0xf4, 0x105fac\nMOV             W1, #0x759                                             ; +0xf8, 0x105fb0\nADD             X2, X2, #0x40 ; '@'                                    ; +0xfc, 0x105fb4\nADD             X3, X3, #a0Dspsblocksize@PAGEOFF; \"0 == dspsBlockSize % 2\" ; +0x100, 0x105fb8\nBL              .__assert2                                             ; +0x104, 0x105fbc", "xrefs": ["Pole_Zero_Filter_Phase @ 0x105eb4", ".Biquad_Filter @ 0x109e9c", "<???> @ 0x6280", ".Biquad_Filter @ 0x109e94", "<???> @ 0x111810"], "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"}