diff --git a/Source/ComplexMathFunctions/arm_cmplx_mult_cmplx_q15.c b/Source/ComplexMathFunctions/arm_cmplx_mult_cmplx_q15.c index 21ac664cd..e675cc379 100644 --- a/Source/ComplexMathFunctions/arm_cmplx_mult_cmplx_q15.c +++ b/Source/ComplexMathFunctions/arm_cmplx_mult_cmplx_q15.c @@ -64,13 +64,14 @@ ARM_DSP_ATTRIBUTE void arm_cmplx_mult_cmplx_q15( q15x8_t vecSrcC, vecSrcD; q15x8_t vecDst; + /* Scale inputs so the saturating multiply cannot clip before the 3.13 conversion. */ blkCnt = (numSamples >> 3); blkCnt -= 1; if (blkCnt > 0) { /* should give more freedom to generate stall free code */ - vecSrcA = vld1q(pSrcA); - vecSrcB = vld1q(pSrcB); + vecSrcA = vshrq(vld1q(pSrcA), 1); + vecSrcB = vshrq(vld1q(pSrcB), 1); pSrcA += 8; pSrcB += 8; @@ -79,26 +80,26 @@ ARM_DSP_ATTRIBUTE void arm_cmplx_mult_cmplx_q15( /* C[2 * i] = A[2 * i] * B[2 * i] - A[2 * i + 1] * B[2 * i + 1]. */ vecDst = vqdmlsdhq(vuninitializedq_s16(), vecSrcA, vecSrcB); - vecSrcC = vld1q(pSrcA); + vecSrcC = vshrq(vld1q(pSrcA), 1); pSrcA += 8; /* C[2 * i + 1] = A[2 * i] * B[2 * i + 1] + A[2 * i + 1] * B[2 * i]. */ vecDst = vqdmladhxq(vecDst, vecSrcA, vecSrcB); - vecSrcD = vld1q(pSrcB); + vecSrcD = vshrq(vld1q(pSrcB), 1); pSrcB += 8; - vstrhq_s16(pDst, vshrq(vecDst, 2)); + vstrhq_s16(pDst, vecDst); pDst += 8; vecDst = vqdmlsdhq(vuninitializedq_s16(), vecSrcC, vecSrcD); - vecSrcA = vld1q(pSrcA); + vecSrcA = vshrq(vld1q(pSrcA), 1); pSrcA += 8; vecDst = vqdmladhxq(vecDst, vecSrcC, vecSrcD); - vecSrcB = vld1q(pSrcB); + vecSrcB = vshrq(vld1q(pSrcB), 1); pSrcB += 8; - vstrhq_s16(pDst, vshrq(vecDst, 2)); + vstrhq_s16(pDst, vecDst); pDst += 8; /* @@ -109,18 +110,18 @@ ARM_DSP_ATTRIBUTE void arm_cmplx_mult_cmplx_q15( /* process last elements out of the loop avoid the armclang breaking the SW pipeline */ vecDst = vqdmlsdhq(vuninitializedq_s16(), vecSrcA, vecSrcB); - vecSrcC = vld1q(pSrcA); + vecSrcC = vshrq(vld1q(pSrcA), 1); vecDst = vqdmladhxq(vecDst, vecSrcA, vecSrcB); - vecSrcD = vld1q(pSrcB); + vecSrcD = vshrq(vld1q(pSrcB), 1); - vstrhq_s16(pDst, vshrq(vecDst, 2)); + vstrhq_s16(pDst, vecDst); pDst += 8; vecDst = vqdmlsdhq(vuninitializedq_s16(), vecSrcC, vecSrcD); vecDst = vqdmladhxq(vecDst, vecSrcC, vecSrcD); - vstrhq_s16(pDst, vshrq(vecDst, 2)); + vstrhq_s16(pDst, vecDst); pDst += 8; /* @@ -134,13 +135,12 @@ ARM_DSP_ATTRIBUTE void arm_cmplx_mult_cmplx_q15( pSrcA += 8; pSrcB += 8; - vecSrcA = vldrhq_z_s16(pSrcA, p); - vecSrcB = vldrhq_z_s16(pSrcB, p); + vecSrcA = vshrq(vldrhq_z_s16(pSrcA, p), 1); + vecSrcB = vshrq(vldrhq_z_s16(pSrcB, p), 1); vecDst = vqdmlsdhq_m(vuninitializedq_s16(), vecSrcA, vecSrcB, p); vecDst = vqdmladhxq_m(vecDst, vecSrcA, vecSrcB, p); - vecDst = vshrq_m(vuninitializedq_s16(), vecDst, 2, p); vstrhq_p_s16(pDst, vecDst, p); pDst += 8; @@ -154,13 +154,12 @@ ARM_DSP_ATTRIBUTE void arm_cmplx_mult_cmplx_q15( while (blkCnt > 0) { mve_pred16_t p = vctp16q(blkCnt); - vecSrcA = vldrhq_z_s16(pSrcA, p); - vecSrcB = vldrhq_z_s16(pSrcB, p); + vecSrcA = vshrq(vldrhq_z_s16(pSrcA, p), 1); + vecSrcB = vshrq(vldrhq_z_s16(pSrcB, p), 1); vecDst = vqdmlsdhq_m(vuninitializedq_s16(), vecSrcA, vecSrcB, p); vecDst = vqdmladhxq_m(vecDst, vecSrcA, vecSrcB, p); - vecDst = vshrq_m(vuninitializedq_s16(), vecDst, 2, p); vstrhq_p_s16(pDst, vecDst, p); pDst += 8; diff --git a/Source/ComplexMathFunctions/arm_cmplx_mult_cmplx_q31.c b/Source/ComplexMathFunctions/arm_cmplx_mult_cmplx_q31.c index 6a5c5d2ad..794c49b0a 100644 --- a/Source/ComplexMathFunctions/arm_cmplx_mult_cmplx_q31.c +++ b/Source/ComplexMathFunctions/arm_cmplx_mult_cmplx_q31.c @@ -64,12 +64,13 @@ ARM_DSP_ATTRIBUTE void arm_cmplx_mult_cmplx_q31( q31x4_t vecSrcC, vecSrcD; q31x4_t vecDst; + /* Scale inputs so the saturating multiply cannot clip before the 3.29 conversion. */ blkCnt = numSamples >> 2; blkCnt -= 1; if (blkCnt > 0) { /* should give more freedom to generate stall free code */ - vecSrcA = vld1q(pSrcA); - vecSrcB = vld1q(pSrcB); + vecSrcA = vshrq(vld1q(pSrcA), 1); + vecSrcB = vshrq(vld1q(pSrcB), 1); pSrcA += 4; pSrcB += 4; @@ -77,26 +78,26 @@ ARM_DSP_ATTRIBUTE void arm_cmplx_mult_cmplx_q31( /* C[2 * i] = A[2 * i] * B[2 * i] - A[2 * i + 1] * B[2 * i + 1]. */ vecDst = vqdmlsdhq(vuninitializedq_s32(), vecSrcA, vecSrcB); - vecSrcC = vld1q(pSrcA); + vecSrcC = vshrq(vld1q(pSrcA), 1); pSrcA += 4; /* C[2 * i + 1] = A[2 * i] * B[2 * i + 1] + A[2 * i + 1] * B[2 * i]. */ vecDst = vqdmladhxq(vecDst, vecSrcA, vecSrcB); - vecSrcD = vld1q(pSrcB); + vecSrcD = vshrq(vld1q(pSrcB), 1); pSrcB += 4; - vst1q(pDst, vshrq(vecDst, 2)); + vst1q(pDst, vecDst); pDst += 4; vecDst = vqdmlsdhq(vuninitializedq_s32(), vecSrcC, vecSrcD); - vecSrcA = vld1q(pSrcA); + vecSrcA = vshrq(vld1q(pSrcA), 1); pSrcA += 4; vecDst = vqdmladhxq(vecDst, vecSrcC, vecSrcD); - vecSrcB = vld1q(pSrcB); + vecSrcB = vshrq(vld1q(pSrcB), 1); pSrcB += 4; - vst1q(pDst, vshrq(vecDst, 2)); + vst1q(pDst, vecDst); pDst += 4; /* @@ -107,18 +108,18 @@ ARM_DSP_ATTRIBUTE void arm_cmplx_mult_cmplx_q31( /* process last elements out of the loop avoid the armclang breaking the SW pipeline */ vecDst = vqdmlsdhq(vuninitializedq_s32(), vecSrcA, vecSrcB); - vecSrcC = vld1q(pSrcA); + vecSrcC = vshrq(vld1q(pSrcA), 1); vecDst = vqdmladhxq(vecDst, vecSrcA, vecSrcB); - vecSrcD = vld1q(pSrcB); + vecSrcD = vshrq(vld1q(pSrcB), 1); - vst1q(pDst, vshrq(vecDst, 2)); + vst1q(pDst, vecDst); pDst += 4; vecDst = vqdmlsdhq(vuninitializedq_s32(), vecSrcC, vecSrcD); vecDst = vqdmladhxq(vecDst, vecSrcC, vecSrcD); - vst1q(pDst, vshrq(vecDst, 2)); + vst1q(pDst, vecDst); pDst += 4; /* @@ -131,13 +132,12 @@ ARM_DSP_ATTRIBUTE void arm_cmplx_mult_cmplx_q31( pSrcA += 4; pSrcB += 4; - vecSrcA = vldrwq_z_s32(pSrcA, p); - vecSrcB = vldrwq_z_s32(pSrcB, p); + vecSrcA = vshrq(vldrwq_z_s32(pSrcA, p), 1); + vecSrcB = vshrq(vldrwq_z_s32(pSrcB, p), 1); vecDst = vqdmlsdhq_m(vuninitializedq_s32(), vecSrcA, vecSrcB, p); vecDst = vqdmladhxq_m(vecDst, vecSrcA, vecSrcB, p); - vecDst = vshrq_m(vuninitializedq_s32(), vecDst, 2, p); vstrwq_p_s32(pDst, vecDst, p); pDst += 4; @@ -149,13 +149,12 @@ ARM_DSP_ATTRIBUTE void arm_cmplx_mult_cmplx_q31( while (blkCnt > 0) { mve_pred16_t p = vctp32q(blkCnt); - vecSrcA = vldrwq_z_s32(pSrcA, p); - vecSrcB = vldrwq_z_s32(pSrcB, p); + vecSrcA = vshrq(vldrwq_z_s32(pSrcA, p), 1); + vecSrcB = vshrq(vldrwq_z_s32(pSrcB, p), 1); vecDst = vqdmlsdhq_m(vuninitializedq_s32(), vecSrcA, vecSrcB, p); vecDst = vqdmladhxq_m(vecDst, vecSrcA, vecSrcB, p); - vecDst = vshrq_m(vuninitializedq_s32(), vecDst, 2, p); vstrwq_p_s32(pDst, vecDst, p); pDst += 4; diff --git a/Testing/PatternGeneration/ComplexMaths.py b/Testing/PatternGeneration/ComplexMaths.py index 109ca0244..de181cca4 100755 --- a/Testing/PatternGeneration/ComplexMaths.py +++ b/Testing/PatternGeneration/ComplexMaths.py @@ -5,7 +5,6 @@ # Those patterns are used for tests and benchmarks. -# For tests, there is the need to add tests for saturation def randComplex(nb): data = np.random.randn(2*nb) @@ -17,6 +16,30 @@ def asReal(a): #return(a.view(dtype=np.float64)) return(a.reshape(np.size(a)).view(dtype=np.float64)) +def saturationComplex(): + data1 = np.array([ + 1 + 1j, + 1 + 1j, + 1 - 1j, + 1 - 1j, + -1 + 1j, + -1 + 1j, + -1 - 1j, + -1 - 1j, + ]) + data2 = np.array([ + 1 + 1j, + 1 - 1j, + 1 + 1j, + -1 - 1j, + 1 + 1j, + -1 + 1j, + 1 + 1j, + -1 - 1j, + ]) + + return(np.resize(data1, 17), np.resize(data2, 17)) + def writeTests(config,format): NBSAMPLES=256 @@ -99,6 +122,14 @@ def writeTests(config,format): config.writeReferenceQ31(9, asReal(ref)) else: config.writeReference(9, asReal(ref)) + + if format == 31 or format == 15: + saturation1, saturation2 = saturationComplex() + config.writeInput(4, asReal(saturation1)) + config.writeInput(5, asReal(saturation2)) + + ref = saturation1 * saturation2 / 4 + config.writeReference(10, asReal(ref)) def generatePatterns(): PATTERNDIR = os.path.join("Patterns","DSP","ComplexMaths","ComplexMaths") @@ -124,4 +155,3 @@ def generatePatterns(): if __name__ == '__main__': generatePatterns() - diff --git a/Testing/Patterns/DSP/ComplexMaths/ComplexMathsQ15/Input4_q15.txt b/Testing/Patterns/DSP/ComplexMaths/ComplexMathsQ15/Input4_q15.txt new file mode 100644 index 000000000..6b42ff040 --- /dev/null +++ b/Testing/Patterns/DSP/ComplexMaths/ComplexMathsQ15/Input4_q15.txt @@ -0,0 +1,70 @@ +H +34 +// 1.00000000000000000 +0x7FFF +// 1.00000000000000000 +0x7FFF +// 1.00000000000000000 +0x7FFF +// 1.00000000000000000 +0x7FFF +// 1.00000000000000000 +0x7FFF +// -1.00000000000000000 +0x8000 +// 1.00000000000000000 +0x7FFF +// -1.00000000000000000 +0x8000 +// -1.00000000000000000 +0x8000 +// 1.00000000000000000 +0x7FFF +// -1.00000000000000000 +0x8000 +// 1.00000000000000000 +0x7FFF +// -1.00000000000000000 +0x8000 +// -1.00000000000000000 +0x8000 +// -1.00000000000000000 +0x8000 +// -1.00000000000000000 +0x8000 +// 1.00000000000000000 +0x7FFF +// 1.00000000000000000 +0x7FFF +// 1.00000000000000000 +0x7FFF +// 1.00000000000000000 +0x7FFF +// 1.00000000000000000 +0x7FFF +// -1.00000000000000000 +0x8000 +// 1.00000000000000000 +0x7FFF +// -1.00000000000000000 +0x8000 +// -1.00000000000000000 +0x8000 +// 1.00000000000000000 +0x7FFF +// -1.00000000000000000 +0x8000 +// 1.00000000000000000 +0x7FFF +// -1.00000000000000000 +0x8000 +// -1.00000000000000000 +0x8000 +// -1.00000000000000000 +0x8000 +// -1.00000000000000000 +0x8000 +// 1.00000000000000000 +0x7FFF +// 1.00000000000000000 +0x7FFF diff --git a/Testing/Patterns/DSP/ComplexMaths/ComplexMathsQ15/Input5_q15.txt b/Testing/Patterns/DSP/ComplexMaths/ComplexMathsQ15/Input5_q15.txt new file mode 100644 index 000000000..8b53beb8a --- /dev/null +++ b/Testing/Patterns/DSP/ComplexMaths/ComplexMathsQ15/Input5_q15.txt @@ -0,0 +1,70 @@ +H +34 +// 1.00000000000000000 +0x7FFF +// 1.00000000000000000 +0x7FFF +// 1.00000000000000000 +0x7FFF +// -1.00000000000000000 +0x8000 +// 1.00000000000000000 +0x7FFF +// 1.00000000000000000 +0x7FFF +// -1.00000000000000000 +0x8000 +// -1.00000000000000000 +0x8000 +// 1.00000000000000000 +0x7FFF +// 1.00000000000000000 +0x7FFF +// -1.00000000000000000 +0x8000 +// 1.00000000000000000 +0x7FFF +// 1.00000000000000000 +0x7FFF +// 1.00000000000000000 +0x7FFF +// -1.00000000000000000 +0x8000 +// -1.00000000000000000 +0x8000 +// 1.00000000000000000 +0x7FFF +// 1.00000000000000000 +0x7FFF +// 1.00000000000000000 +0x7FFF +// -1.00000000000000000 +0x8000 +// 1.00000000000000000 +0x7FFF +// 1.00000000000000000 +0x7FFF +// -1.00000000000000000 +0x8000 +// -1.00000000000000000 +0x8000 +// 1.00000000000000000 +0x7FFF +// 1.00000000000000000 +0x7FFF +// -1.00000000000000000 +0x8000 +// 1.00000000000000000 +0x7FFF +// 1.00000000000000000 +0x7FFF +// 1.00000000000000000 +0x7FFF +// -1.00000000000000000 +0x8000 +// -1.00000000000000000 +0x8000 +// 1.00000000000000000 +0x7FFF +// 1.00000000000000000 +0x7FFF diff --git a/Testing/Patterns/DSP/ComplexMaths/ComplexMathsQ15/Reference10_q15.txt b/Testing/Patterns/DSP/ComplexMaths/ComplexMathsQ15/Reference10_q15.txt new file mode 100644 index 000000000..2211e6788 --- /dev/null +++ b/Testing/Patterns/DSP/ComplexMaths/ComplexMathsQ15/Reference10_q15.txt @@ -0,0 +1,70 @@ +H +34 +// 0.00000000000000000 +0x0000 +// 0.50000000000000000 +0x4000 +// 0.50000000000000000 +0x4000 +// 0.00000000000000000 +0x0000 +// 0.50000000000000000 +0x4000 +// 0.00000000000000000 +0x0000 +// -0.50000000000000000 +0xC000 +// 0.00000000000000000 +0x0000 +// -0.50000000000000000 +0xC000 +// 0.00000000000000000 +0x0000 +// 0.00000000000000000 +0x0000 +// -0.50000000000000000 +0xC000 +// 0.00000000000000000 +0x0000 +// -0.50000000000000000 +0xC000 +// 0.00000000000000000 +0x0000 +// 0.50000000000000000 +0x4000 +// 0.00000000000000000 +0x0000 +// 0.50000000000000000 +0x4000 +// 0.50000000000000000 +0x4000 +// 0.00000000000000000 +0x0000 +// 0.50000000000000000 +0x4000 +// 0.00000000000000000 +0x0000 +// -0.50000000000000000 +0xC000 +// 0.00000000000000000 +0x0000 +// -0.50000000000000000 +0xC000 +// 0.00000000000000000 +0x0000 +// 0.00000000000000000 +0x0000 +// -0.50000000000000000 +0xC000 +// 0.00000000000000000 +0x0000 +// -0.50000000000000000 +0xC000 +// 0.00000000000000000 +0x0000 +// 0.50000000000000000 +0x4000 +// 0.00000000000000000 +0x0000 +// 0.50000000000000000 +0x4000 diff --git a/Testing/Patterns/DSP/ComplexMaths/ComplexMathsQ31/Input4_q31.txt b/Testing/Patterns/DSP/ComplexMaths/ComplexMathsQ31/Input4_q31.txt new file mode 100644 index 000000000..ef616ee24 --- /dev/null +++ b/Testing/Patterns/DSP/ComplexMaths/ComplexMathsQ31/Input4_q31.txt @@ -0,0 +1,70 @@ +W +34 +// 1.00000000000000000 +0x7FFFFFFF +// 1.00000000000000000 +0x7FFFFFFF +// 1.00000000000000000 +0x7FFFFFFF +// 1.00000000000000000 +0x7FFFFFFF +// 1.00000000000000000 +0x7FFFFFFF +// -1.00000000000000000 +0x80000000 +// 1.00000000000000000 +0x7FFFFFFF +// -1.00000000000000000 +0x80000000 +// -1.00000000000000000 +0x80000000 +// 1.00000000000000000 +0x7FFFFFFF +// -1.00000000000000000 +0x80000000 +// 1.00000000000000000 +0x7FFFFFFF +// -1.00000000000000000 +0x80000000 +// -1.00000000000000000 +0x80000000 +// -1.00000000000000000 +0x80000000 +// -1.00000000000000000 +0x80000000 +// 1.00000000000000000 +0x7FFFFFFF +// 1.00000000000000000 +0x7FFFFFFF +// 1.00000000000000000 +0x7FFFFFFF +// 1.00000000000000000 +0x7FFFFFFF +// 1.00000000000000000 +0x7FFFFFFF +// -1.00000000000000000 +0x80000000 +// 1.00000000000000000 +0x7FFFFFFF +// -1.00000000000000000 +0x80000000 +// -1.00000000000000000 +0x80000000 +// 1.00000000000000000 +0x7FFFFFFF +// -1.00000000000000000 +0x80000000 +// 1.00000000000000000 +0x7FFFFFFF +// -1.00000000000000000 +0x80000000 +// -1.00000000000000000 +0x80000000 +// -1.00000000000000000 +0x80000000 +// -1.00000000000000000 +0x80000000 +// 1.00000000000000000 +0x7FFFFFFF +// 1.00000000000000000 +0x7FFFFFFF diff --git a/Testing/Patterns/DSP/ComplexMaths/ComplexMathsQ31/Input5_q31.txt b/Testing/Patterns/DSP/ComplexMaths/ComplexMathsQ31/Input5_q31.txt new file mode 100644 index 000000000..ddd980df1 --- /dev/null +++ b/Testing/Patterns/DSP/ComplexMaths/ComplexMathsQ31/Input5_q31.txt @@ -0,0 +1,70 @@ +W +34 +// 1.00000000000000000 +0x7FFFFFFF +// 1.00000000000000000 +0x7FFFFFFF +// 1.00000000000000000 +0x7FFFFFFF +// -1.00000000000000000 +0x80000000 +// 1.00000000000000000 +0x7FFFFFFF +// 1.00000000000000000 +0x7FFFFFFF +// -1.00000000000000000 +0x80000000 +// -1.00000000000000000 +0x80000000 +// 1.00000000000000000 +0x7FFFFFFF +// 1.00000000000000000 +0x7FFFFFFF +// -1.00000000000000000 +0x80000000 +// 1.00000000000000000 +0x7FFFFFFF +// 1.00000000000000000 +0x7FFFFFFF +// 1.00000000000000000 +0x7FFFFFFF +// -1.00000000000000000 +0x80000000 +// -1.00000000000000000 +0x80000000 +// 1.00000000000000000 +0x7FFFFFFF +// 1.00000000000000000 +0x7FFFFFFF +// 1.00000000000000000 +0x7FFFFFFF +// -1.00000000000000000 +0x80000000 +// 1.00000000000000000 +0x7FFFFFFF +// 1.00000000000000000 +0x7FFFFFFF +// -1.00000000000000000 +0x80000000 +// -1.00000000000000000 +0x80000000 +// 1.00000000000000000 +0x7FFFFFFF +// 1.00000000000000000 +0x7FFFFFFF +// -1.00000000000000000 +0x80000000 +// 1.00000000000000000 +0x7FFFFFFF +// 1.00000000000000000 +0x7FFFFFFF +// 1.00000000000000000 +0x7FFFFFFF +// -1.00000000000000000 +0x80000000 +// -1.00000000000000000 +0x80000000 +// 1.00000000000000000 +0x7FFFFFFF +// 1.00000000000000000 +0x7FFFFFFF diff --git a/Testing/Patterns/DSP/ComplexMaths/ComplexMathsQ31/Reference10_q31.txt b/Testing/Patterns/DSP/ComplexMaths/ComplexMathsQ31/Reference10_q31.txt new file mode 100644 index 000000000..433af7fea --- /dev/null +++ b/Testing/Patterns/DSP/ComplexMaths/ComplexMathsQ31/Reference10_q31.txt @@ -0,0 +1,70 @@ +W +34 +// 0.00000000000000000 +0x00000000 +// 0.50000000000000000 +0x40000000 +// 0.50000000000000000 +0x40000000 +// 0.00000000000000000 +0x00000000 +// 0.50000000000000000 +0x40000000 +// 0.00000000000000000 +0x00000000 +// -0.50000000000000000 +0xC0000000 +// 0.00000000000000000 +0x00000000 +// -0.50000000000000000 +0xC0000000 +// 0.00000000000000000 +0x00000000 +// 0.00000000000000000 +0x00000000 +// -0.50000000000000000 +0xC0000000 +// 0.00000000000000000 +0x00000000 +// -0.50000000000000000 +0xC0000000 +// 0.00000000000000000 +0x00000000 +// 0.50000000000000000 +0x40000000 +// 0.00000000000000000 +0x00000000 +// 0.50000000000000000 +0x40000000 +// 0.50000000000000000 +0x40000000 +// 0.00000000000000000 +0x00000000 +// 0.50000000000000000 +0x40000000 +// 0.00000000000000000 +0x00000000 +// -0.50000000000000000 +0xC0000000 +// 0.00000000000000000 +0x00000000 +// -0.50000000000000000 +0xC0000000 +// 0.00000000000000000 +0x00000000 +// 0.00000000000000000 +0x00000000 +// -0.50000000000000000 +0xC0000000 +// 0.00000000000000000 +0x00000000 +// -0.50000000000000000 +0xC0000000 +// 0.00000000000000000 +0x00000000 +// 0.50000000000000000 +0x40000000 +// 0.00000000000000000 +0x00000000 +// 0.50000000000000000 +0x40000000 diff --git a/Testing/Source/Tests/ComplexTestsQ15.cpp b/Testing/Source/Tests/ComplexTestsQ15.cpp index 15ba86d9d..d6849ea6c 100755 --- a/Testing/Source/Tests/ComplexTestsQ15.cpp +++ b/Testing/Source/Tests/ComplexTestsQ15.cpp @@ -352,6 +352,13 @@ a double precision computation. ref.reload(ComplexTestsQ15::REF_MAG_Q15_ID,mgr,nb); input1.reload(ComplexTestsQ15::INPUT1_Q15_ID,mgr,nb << 1); + output.create(ref.nbSamples(),ComplexTestsQ15::OUT_SAMPLES_Q15_ID,mgr); + break; + case ComplexTestsQ15::TEST_CMPLX_MULT_CMPLX_Q15_28: + ref.reload(ComplexTestsQ15::REF_CMPLX_MULT_CMPLX_SAT_Q15_ID,mgr); + input1.reload(ComplexTestsQ15::INPUT_SAT1_Q15_ID,mgr); + input2.reload(ComplexTestsQ15::INPUT_SAT2_Q15_ID,mgr); + output.create(ref.nbSamples(),ComplexTestsQ15::OUT_SAMPLES_Q15_ID,mgr); break; } diff --git a/Testing/Source/Tests/ComplexTestsQ31.cpp b/Testing/Source/Tests/ComplexTestsQ31.cpp index a42731291..510a27ac2 100755 --- a/Testing/Source/Tests/ComplexTestsQ31.cpp +++ b/Testing/Source/Tests/ComplexTestsQ31.cpp @@ -306,6 +306,14 @@ a double precision computation. output.create(ref.nbSamples(),ComplexTestsQ31::OUT_SAMPLES_Q31_ID,mgr); break; + + case ComplexTestsQ31::TEST_CMPLX_MULT_CMPLX_Q31_24: + ref.reload(ComplexTestsQ31::REF_CMPLX_MULT_CMPLX_SAT_Q31_ID,mgr); + input1.reload(ComplexTestsQ31::INPUT_SAT1_Q31_ID,mgr); + input2.reload(ComplexTestsQ31::INPUT_SAT2_Q31_ID,mgr); + + output.create(ref.nbSamples(),ComplexTestsQ31::OUT_SAMPLES_Q31_ID,mgr); + break; } diff --git a/Testing/desc.txt b/Testing/desc.txt index 1721bbfba..80affb0be 100644 --- a/Testing/desc.txt +++ b/Testing/desc.txt @@ -1789,6 +1789,8 @@ group Root { Pattern INPUT1_Q31_ID : Input1_q31.txt Pattern INPUT2_Q31_ID : Input2_q31.txt Pattern INPUT3_Q31_ID : Input3_q31.txt + Pattern INPUT_SAT1_Q31_ID : Input4_q31.txt + Pattern INPUT_SAT2_Q31_ID : Input5_q31.txt Pattern REF_CONJ_Q31_ID : Reference1_q31.txt Pattern REF_DOT_PROD_3_Q31_ID : Reference2_q63.txt @@ -1798,6 +1800,7 @@ group Root { Pattern REF_MAG_SQUARED_Q31_ID : Reference6_q31.txt Pattern REF_CMPLX_MULT_CMPLX_Q31_ID : Reference7_q31.txt Pattern REF_CMPLX_MULT_REAL_Q31_ID : Reference8_q31.txt + Pattern REF_CMPLX_MULT_CMPLX_SAT_Q31_ID : Reference10_q31.txt Output OUT_SAMPLES_Q31_ID : Output Output OUT_STATE_Q31_ID : State @@ -1832,6 +1835,8 @@ group Root { Test long arm_cmplx_mag_squared_q31:test_cmplx_mag_squared_q31 Test long arm_cmplx_mult_cmplx_q31:test_cmplx_mult_cmplx_q31 Test long arm_cmplx_mult_real_q31:test_cmplx_mult_real_q31 + + Test saturation arm_cmplx_mult_cmplx_q31:test_cmplx_mult_cmplx_q31 } } @@ -1843,6 +1848,8 @@ group Root { Pattern INPUT1_Q15_ID : Input1_q15.txt Pattern INPUT2_Q15_ID : Input2_q15.txt Pattern INPUT3_Q15_ID : Input3_q15.txt + Pattern INPUT_SAT1_Q15_ID : Input4_q15.txt + Pattern INPUT_SAT2_Q15_ID : Input5_q15.txt Pattern REF_CONJ_Q15_ID : Reference1_q15.txt Pattern REF_DOT_PROD_3_Q15_ID : Reference2_q31.txt @@ -1852,6 +1859,7 @@ group Root { Pattern REF_MAG_SQUARED_Q15_ID : Reference6_q15.txt Pattern REF_CMPLX_MULT_CMPLX_Q15_ID : Reference7_q15.txt Pattern REF_CMPLX_MULT_REAL_Q15_ID : Reference8_q15.txt + Pattern REF_CMPLX_MULT_CMPLX_SAT_Q15_ID : Reference10_q15.txt Output OUT_SAMPLES_Q15_ID : Output Output OUT_STATE_Q15_ID : State @@ -1892,6 +1900,8 @@ group Root { Test nb=4n+1 arm_cmplx_mag_fast_q15:test_cmplx_mag_fast_q15 Test long arm_cmplx_mag_fast_q15:test_cmplx_mag_fast_q15 + Test saturation arm_cmplx_mult_cmplx_q15:test_cmplx_mult_cmplx_q15 + } }