{"type": "func", "start": 1072436, "end": 1072632, "name": "Pole_Zero_Filter", "pseudocode": "// \n// Pole_Zero_Filter from 0x105d34 to 0x105df8 (196 bytes)\n// \n// 4 xrefs:\n// > .Pole_Zero_Filter @ 0x109e8c\n// > <???> @ 0x6b68\n// > .Pole_Zero_Filter @ 0x109e84\n// > <???> @ 0x111808\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 Pole_Zero_Filter(\n        float *a1,\n        __int16 a2,\n        float *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; // s16\n  float v16; // s5\n  float v17; // s6\n  unsigned int v18; // w4\n  __int64 v19; // x8\n  __int64 v20; // x7\n  __int64 v21; // x1\n  __int64 v22; // x3\n  float v23; // s1\n  float v24; // s0\n  float v25; // s0\n  __int64 v27; // x0\n\n  *(float *)&a10 = *a6;\n  *(float *)&a11 = a6[1];\n  LODWORD(a14) = *(_DWORD *)a5;\n  LODWORD(a15) = *(_DWORD *)(a5 + 4);\n  v15 = *(float *)(a5 + 8);\n  if ( (a7 & 1) != 0 )\n  {\n    v27 = __assert2(\n            \"../../src/pl2_encode_subroutine.c\",\n            1685,\n            \"Pole_Zero_Filter\",\n            \"0 == dspsBlockSize % 2\",\n            a8,\n            a9,\n            a10,\n            a11,\n            a12,\n            a13,\n            a14,\n            a15);\n    return Pole_Zero_Filter_Phase(v27);\n  }\n  else\n  {\n    v16 = a6[1];\n    if ( a7 )\n    {\n      v17 = -*(float *)&a14;\n      v18 = a7 & 1;\n      v19 = a2;\n      v20 = a4;\n      v21 = 8LL * a2;\n      v22 = 8LL * a4;\n      do\n      {\n        v18 += 2;\n        v23 = *a1;\n        v16 = a1[v19];\n        a1 = (float *)((char *)a1 + v21);\n        v24 = (float)(*(float *)&a11 * v15) + (float)(*(float *)&a10 * v17);\n        *(float *)&a11 = v16;\n        v25 = v24 + (float)(v23 * *(float *)&a15);\n        *(float *)&a10 = (float)((float)(v23 * v15) + (float)(v16 * *(float *)&a15)) + (float)(v25 * v17);\n        *a3 = v25;\n        a3[v20] = *(float *)&a10;\n        a3 = (float *)((char *)a3 + v22);\n      }\n      while ( v18 < a7 );\n    }\n    *a6 = *(float *)&a10;\n    a6[1] = v16;\n    return 0;\n  }\n}", "assembly": "; \n; Pole_Zero_Filter from 0x105d34 to 0x105df8 (196 bytes)\n; \n; 4 xrefs:\n; > .Pole_Zero_Filter @ 0x109e8c\n; > <???> @ 0x6b68\n; > .Pole_Zero_Filter @ 0x109e84\n; > <???> @ 0x111808\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,#-0x10+var_s0]!                          ; +0x0, 0x105d34\nSXTH            W6, W6                                                 ; +0x4, 0x105d38\nSXTH            X1, W1                                                 ; +0x8, 0x105d3c\nMOV             X29, SP                                                ; +0xc, 0x105d40\nSXTH            X3, W3                                                 ; +0x10, 0x105d44\nAND             W7, W6, #1                                             ; +0x14, 0x105d48\nLDR             S2, [X5]                                               ; +0x18, 0x105d4c\nLDR             S3, [X5,#4]                                            ; +0x1c, 0x105d50\nLDR             S6, [X4]                                               ; +0x20, 0x105d54\nLDR             S7, [X4,#4]                                            ; +0x24, 0x105d58\nLDR             S16, [X4,#8]                                           ; +0x28, 0x105d5c\nTBNZ            W6, #0, loc_105DD8                                     ; +0x2c, 0x105d60\nFMOV            S5, S3                                                 ; +0x30, 0x105d64\nCBZ             W6, loc_105DC4                                         ; +0x34, 0x105d68\nFNEG            S6, S6                                                 ; +0x38, 0x105d6c\nMOV             W4, W7                                                 ; +0x3c, 0x105d70\nLSL             X8, X1, #2                                             ; +0x40, 0x105d74\nLSL             X7, X3, #2                                             ; +0x44, 0x105d78\nLSL             X1, X1, #3                                             ; +0x48, 0x105d7c\nLSL             X3, X3, #3                                             ; +0x4c, 0x105d80\nFMUL            S0, S3, S16                                            ; +0x50, 0x105d84\nADD             W4, W4, #2                                             ; +0x54, 0x105d88\nLDR             S1, [X0]                                               ; +0x58, 0x105d8c\nCMP             W4, W6                                                 ; +0x5c, 0x105d90\nLDR             S5, [X0,X8]                                            ; +0x60, 0x105d94\nADD             X0, X0, X1                                             ; +0x64, 0x105d98\nFMUL            S4, S1, S16                                            ; +0x68, 0x105d9c\nFMADD           S0, S2, S6, S0                                         ; +0x6c, 0x105da0\nFMOV            S3, S5                                                 ; +0x70, 0x105da4\nFMADD           S2, S5, S7, S4                                         ; +0x74, 0x105da8\nFMADD           S0, S1, S7, S0                                         ; +0x78, 0x105dac\nFMADD           S2, S0, S6, S2                                         ; +0x7c, 0x105db0\nSTR             S0, [X2]                                               ; +0x80, 0x105db4\nSTR             S2, [X2,X7]                                            ; +0x84, 0x105db8\nADD             X2, X2, X3                                             ; +0x88, 0x105dbc\nB.CC            loc_105D84                                             ; +0x8c, 0x105dc0\nMOV             W0, #0                                                 ; +0x90, 0x105dc4\nSTR             S2, [X5]                                               ; +0x94, 0x105dc8\nSTR             S5, [X5,#4]                                            ; +0x98, 0x105dcc\nLDP             X29, X30, [SP+var_s0],#0x10                            ; +0x9c, 0x105dd0\nRET                                                                    ; +0xa0, 0x105dd4\nADRP            X0, #aSrcPl2EncodeSu@PAGE; \"../../src/pl2_encode_subroutine.c\" ; +0xa4, 0x105dd8\nADRP            X2, #aPoleZeroFilter_1@PAGE; \"Pole_Zero_Filter\"        ; +0xa8, 0x105ddc\nADRP            X3, #a0Dspsblocksize@PAGE; \"0 == dspsBlockSize % 2\"    ; +0xac, 0x105de0\nADD             X0, X0, #aSrcPl2EncodeSu@PAGEOFF; \"../../src/pl2_encode_subroutine.c\" ; +0xb0, 0x105de4\nMOV             W1, #0x695                                             ; +0xb4, 0x105de8\nADD             X2, X2, #aPoleZeroFilter_1@PAGEOFF; \"Pole_Zero_Filter\" ; +0xb8, 0x105dec\nADD             X3, X3, #a0Dspsblocksize@PAGEOFF; \"0 == dspsBlockSize % 2\" ; +0xbc, 0x105df0\nBL              .__assert2                                             ; +0xc0, 0x105df4", "xrefs": [".Pole_Zero_Filter @ 0x109e8c", "<???> @ 0x6b68", ".Pole_Zero_Filter @ 0x109e84", "<???> @ 0x111808"], "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"}