{"type": "func", "start": 1072632, "end": 1072824, "name": "Pole_Zero_Filter_Phase", "pseudocode": "// \n// Pole_Zero_Filter_Phase from 0x105df8 to 0x105eb8 (192 bytes)\n// \n// 5 xrefs:\n// > Pole_Zero_Filter @ 0x105df4\n// > .Pole_Zero_Filter_Phase @ 0x109e6c\n// > <???> @ 0x59e0\n// > .Pole_Zero_Filter_Phase @ 0x109e64\n// > <???> @ 0x1117f8\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_Phase(\n        float *a1,\n        __int16 a2,\n        float *a3,\n        __int16 a4,\n        _DWORD *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{\n  float v14; // s2\n  float v15; // s4\n  unsigned int v16; // w4\n  __int64 v17; // x8\n  __int64 v18; // x7\n  __int64 v19; // x1\n  __int64 v20; // x3\n  float v21; // s1\n  float v22; // s3\n  float v23; // s3\n  __int64 v25; // x0\n\n  *(float *)&a8 = *a6;\n  *(float *)&a13 = a6[1];\n  LODWORD(a12) = *a5;\n  LODWORD(a14) = a5[1];\n  if ( (a7 & 1) != 0 )\n  {\n    v25 = __assert2(\n            \"../../src/pl2_encode_subroutine.c\",\n            1782,\n            \"Pole_Zero_Filter_Phase\",\n            \"0 == dspsBlockSize % 2\",\n            a8,\n            a9,\n            a10,\n            a11,\n            a12,\n            a13,\n            a14);\n    return Biquad_Filter(v25);\n  }\n  else\n  {\n    v14 = a6[1];\n    if ( a7 )\n    {\n      v15 = -*(float *)&a12;\n      v16 = a7 & 1;\n      v17 = a2;\n      v18 = a4;\n      v19 = 8LL * a2;\n      v20 = 8LL * a4;\n      do\n      {\n        v21 = *a1;\n        v16 += 2;\n        v14 = a1[v17];\n        v22 = *a1 * *(float *)&a14;\n        a1 = (float *)((char *)a1 + v19);\n        v23 = (float)(v22 + (float)(*(float *)&a8 * v15)) + *(float *)&a13;\n        *(float *)&a13 = v14;\n        *(float *)&a8 = (float)(v21 + (float)(v14 * *(float *)&a14)) + (float)(v23 * v15);\n        *a3 = v23;\n        a3[v18] = *(float *)&a8;\n        a3 = (float *)((char *)a3 + v20);\n      }\n      while ( v16 < a7 );\n    }\n    *a6 = *(float *)&a8;\n    a6[1] = v14;\n    return 0;\n  }\n}", "assembly": "; \n; Pole_Zero_Filter_Phase from 0x105df8 to 0x105eb8 (192 bytes)\n; \n; 5 xrefs:\n; > Pole_Zero_Filter @ 0x105df4\n; > .Pole_Zero_Filter_Phase @ 0x109e6c\n; > <???> @ 0x59e0\n; > .Pole_Zero_Filter_Phase @ 0x109e64\n; > <???> @ 0x1117f8\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, 0x105df8\nSXTH            W6, W6                                                 ; +0x4, 0x105dfc\nSXTH            X1, W1                                                 ; +0x8, 0x105e00\nMOV             X29, SP                                                ; +0xc, 0x105e04\nSXTH            X3, W3                                                 ; +0x10, 0x105e08\nAND             W7, W6, #1                                             ; +0x14, 0x105e0c\nLDR             S0, [X5]                                               ; +0x18, 0x105e10\nLDR             S5, [X5,#4]                                            ; +0x1c, 0x105e14\nLDR             S4, [X4]                                               ; +0x20, 0x105e18\nLDR             S6, [X4,#4]                                            ; +0x24, 0x105e1c\nTBNZ            W6, #0, loc_105E94                                     ; +0x28, 0x105e20\nFMOV            S2, S5                                                 ; +0x2c, 0x105e24\nCBZ             W6, loc_105E80                                         ; +0x30, 0x105e28\nFNEG            S4, S4                                                 ; +0x34, 0x105e2c\nMOV             W4, W7                                                 ; +0x38, 0x105e30\nLSL             X8, X1, #2                                             ; +0x3c, 0x105e34\nLSL             X7, X3, #2                                             ; +0x40, 0x105e38\nLSL             X1, X1, #3                                             ; +0x44, 0x105e3c\nLSL             X3, X3, #3                                             ; +0x48, 0x105e40\nLDR             S1, [X0]                                               ; +0x4c, 0x105e44\nADD             W4, W4, #2                                             ; +0x50, 0x105e48\nLDR             S2, [X0,X8]                                            ; +0x54, 0x105e4c\nCMP             W4, W6                                                 ; +0x58, 0x105e50\nFMUL            S3, S1, S6                                             ; +0x5c, 0x105e54\nADD             X0, X0, X1                                             ; +0x60, 0x105e58\nFMADD           S1, S2, S6, S1                                         ; +0x64, 0x105e5c\nFMADD           S0, S0, S4, S3                                         ; +0x68, 0x105e60\nFADD            S3, S0, S5                                             ; +0x6c, 0x105e64\nFMOV            S5, S2                                                 ; +0x70, 0x105e68\nFMADD           S0, S3, S4, S1                                         ; +0x74, 0x105e6c\nSTR             S3, [X2]                                               ; +0x78, 0x105e70\nSTR             S0, [X2,X7]                                            ; +0x7c, 0x105e74\nADD             X2, X2, X3                                             ; +0x80, 0x105e78\nB.CC            loc_105E44                                             ; +0x84, 0x105e7c\nMOV             W0, #0                                                 ; +0x88, 0x105e80\nSTR             S0, [X5]                                               ; +0x8c, 0x105e84\nSTR             S2, [X5,#4]                                            ; +0x90, 0x105e88\nLDP             X29, X30, [SP+var_s0],#0x10                            ; +0x94, 0x105e8c\nRET                                                                    ; +0x98, 0x105e90\nADRP            X2, #aPoleZeroFilter_1@PAGE; \"Pole_Zero_Filter\"        ; +0x9c, 0x105e94\nADRP            X0, #aSrcPl2EncodeSu@PAGE; \"../../src/pl2_encode_subroutine.c\" ; +0xa0, 0x105e98\nADD             X2, X2, #aPoleZeroFilter_1@PAGEOFF; \"Pole_Zero_Filter\" ; +0xa4, 0x105e9c\nADRP            X3, #a0Dspsblocksize@PAGE; \"0 == dspsBlockSize % 2\"    ; +0xa8, 0x105ea0\nADD             X0, X0, #aSrcPl2EncodeSu@PAGEOFF; \"../../src/pl2_encode_subroutine.c\" ; +0xac, 0x105ea4\nMOV             W1, #0x6F6                                             ; +0xb0, 0x105ea8\nADD             X2, X2, #0x20 ; ' '                                    ; +0xb4, 0x105eac\nADD             X3, X3, #a0Dspsblocksize@PAGEOFF; \"0 == dspsBlockSize % 2\" ; +0xb8, 0x105eb0\nBL              .__assert2                                             ; +0xbc, 0x105eb4", "xrefs": ["Pole_Zero_Filter @ 0x105df4", ".Pole_Zero_Filter_Phase @ 0x109e6c", "<???> @ 0x59e0", ".Pole_Zero_Filter_Phase @ 0x109e64", "<???> @ 0x1117f8"], "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"}