/* Note: Powerquad has a hardware limitation, when using it for FIR increment calculation, the address of pSrc needs to be a continuous address.  */
void arm_fir_f32(const arm_fir_instance_f32 *S, const float32_t *pSrc, float32_t *pDst, uint32_t blockSize)
/* Note: Powerquad has a hardware limitation, when using it for FIR increment calculation, the address of pSrc needs to be a continuous address.  */
void arm_fir_f32(const arm_fir_instance_f32 *S, const float32_t *pSrc, float32_t *pDst, uint32_t blockSize)
{
    assert(NULL != S);
    assert(NULL != pSrc);
    assert(NULL != pDst);
    uint32_t curOffset;
    PQ_SET_F32_CONFIG;
    curOffset = *(uint32_t *)(void *)(S->pState);
    if (curOffset == 0U)
    {
        PQ_FIR(POWERQUAD, pSrc, (int32_t)blockSize, &(S->pState[1]), (int32_t)S->numTaps, pDst, PQ_FIR_FIR);
    }
    else
    {
        _arm_fir_increment(pSrc, blockSize, &S->pState[1], S->numTaps, pDst, curOffset, sizeof(*pSrc));
    }
    *(uint32_t *)(void *)(S->pState) = curOffset + blockSize;
    PQ_WaitDone(POWERQUAD);
}