diff options
author | sunyuechi <sunyuechi@iscas.ac.cn> | 2023-11-18 10:58:17 +0800 |
---|---|---|
committer | Rémi Denis-Courmont <remi@remlab.net> | 2023-11-27 17:55:24 +0200 |
commit | ea6817d2a7561e758cd6a28903044efa8217cf69 (patch) | |
tree | 13eb20e82248688da264fc875dd067a236ab975f /tests/checkasm | |
parent | d526a34c20647f54a2cd8f5871b7dc24214578fe (diff) | |
download | ffmpeg-ea6817d2a7561e758cd6a28903044efa8217cf69.tar.gz |
checkasm: test for dcmul_add
Signed-off-by: Rémi Denis-Courmont <remi@remlab.net>
Diffstat (limited to 'tests/checkasm')
-rw-r--r-- | tests/checkasm/af_afir.c | 141 |
1 files changed, 98 insertions, 43 deletions
diff --git a/tests/checkasm/af_afir.c b/tests/checkasm/af_afir.c index 08c55dacfc..6cb59dbb6c 100644 --- a/tests/checkasm/af_afir.c +++ b/tests/checkasm/af_afir.c @@ -33,64 +33,119 @@ do { \ int i; \ double bmg[2], stddev = 10.0, mean = 0.0; \ \ - for (i = 0; i < LEN*2+8; i += 2) { \ + for (i = 0; i < BUF_SIZE; i += 2) { \ av_bmg_get(&checkasm_lfg, bmg); \ buf[i] = bmg[0] * stddev + mean; \ buf[i + 1] = bmg[1] * stddev + mean; \ } \ } while(0); -static void test_fcmul_add(const float *src0, const float *src1, const float *src2) +static void test_fcmul_add(AudioFIRDSPContext *fir) { - LOCAL_ALIGNED_32(float, cdst, [LEN*2+8]); - LOCAL_ALIGNED_32(float, odst, [LEN*2+8]); - int i; - - declare_func(void, float *sum, const float *t, const float *c, - ptrdiff_t len); - - memcpy(cdst, src0, (LEN*2+8) * sizeof(float)); - memcpy(odst, src0, (LEN*2+8) * sizeof(float)); - call_ref(cdst, src1, src2, LEN); - call_new(odst, src1, src2, LEN); - for (i = 0; i <= LEN*2; i++) { - int idx = i & ~1; - float cre = src2[idx]; - float cim = src2[idx + 1]; - float tre = src1[idx]; - float tim = src1[idx + 1]; - double t = fabs(src0[i]) + - fabs(tre) + fabs(tim) + fabs(cre) + fabs(cim) + - fabs(tre * cre) + fabs(tim * cim) + - fabs(tre * cim) + fabs(tim * cre) + - fabs(tre * cre - tim * cim) + - fabs(tre * cim + tim * cre) + - fabs(cdst[i]) + 1.0; - if (!float_near_abs_eps(cdst[i], odst[i], t * 2 * FLT_EPSILON)) { - fprintf(stderr, "%d: %- .12f - %- .12f = % .12g\n", - i, cdst[i], odst[i], cdst[i] - odst[i]); - fail(); - break; +#define BUF_SIZE LEN*2+8 + LOCAL_ALIGNED_32(float, src0, [BUF_SIZE]); + LOCAL_ALIGNED_32(float, src1, [BUF_SIZE]); + LOCAL_ALIGNED_32(float, src2, [BUF_SIZE]); + + randomize_buffer(src0); + randomize_buffer(src1); + randomize_buffer(src2); + + if (check_func(fir->fcmul_add, "fcmul_add")) { + LOCAL_ALIGNED_32(float, cdst, [BUF_SIZE]); + LOCAL_ALIGNED_32(float, odst, [BUF_SIZE]); + int i; + + declare_func(void, float *sum, const float *t, const float *c, + ptrdiff_t len); + + memcpy(cdst, src0, (BUF_SIZE) * sizeof(float)); + memcpy(odst, src0, (BUF_SIZE) * sizeof(float)); + call_ref(cdst, src1, src2, LEN); + call_new(odst, src1, src2, LEN); + for (i = 0; i <= LEN*2; i++) { + int idx = i & ~1; + float cre = src2[idx]; + float cim = src2[idx + 1]; + float tre = src1[idx]; + float tim = src1[idx + 1]; + double t = fabs(src0[i]) + + fabs(tre) + fabs(tim) + fabs(cre) + fabs(cim) + + fabs(tre * cre) + fabs(tim * cim) + + fabs(tre * cim) + fabs(tim * cre) + + fabs(tre * cre - tim * cim) + + fabs(tre * cim + tim * cre) + + fabs(cdst[i]) + 1.0; + if (!float_near_abs_eps(cdst[i], odst[i], t * 2 * FLT_EPSILON)) { + fprintf(stderr, "%d: %- .12f - %- .12f = % .12g\n", + i, cdst[i], odst[i], cdst[i] - odst[i]); + fail(); + break; + } } + memcpy(odst, src0, (BUF_SIZE) * sizeof(float)); + bench_new(odst, src1, src2, LEN); } - memcpy(odst, src0, (LEN*2+8) * sizeof(float)); - bench_new(odst, src1, src2, LEN); + + report("fcmul_add"); } -void checkasm_check_afir(void) +static void test_dcmul_add(AudioFIRDSPContext *fir) { - LOCAL_ALIGNED_32(float, src0, [LEN*2+8]); - LOCAL_ALIGNED_32(float, src1, [LEN*2+8]); - LOCAL_ALIGNED_32(float, src2, [LEN*2+8]); - AudioFIRDSPContext fir = { 0 }; - - ff_afir_init(&fir); +#define BUF_SIZE LEN*2+8 + LOCAL_ALIGNED_32(double, src0, [BUF_SIZE]); + LOCAL_ALIGNED_32(double, src1, [BUF_SIZE]); + LOCAL_ALIGNED_32(double, src2, [BUF_SIZE]); randomize_buffer(src0); randomize_buffer(src1); randomize_buffer(src2); - if (check_func(fir.fcmul_add, "fcmul_add")) - test_fcmul_add(src0, src1, src2); - report("fcmul_add"); + if (check_func(fir->dcmul_add, "dcmul_add")) { + LOCAL_ALIGNED_32(double, cdst, [BUF_SIZE]); + LOCAL_ALIGNED_32(double, odst, [BUF_SIZE]); + int i; + + declare_func(void, double *sum, const double *t, const double *c, + ptrdiff_t len); + + memcpy(cdst, src0, (BUF_SIZE) * sizeof(double)); + memcpy(odst, src0, (BUF_SIZE) * sizeof(double)); + call_ref(cdst, src1, src2, LEN); + call_new(odst, src1, src2, LEN); + for (i = 0; i <= LEN*2; i++) { + int idx = i & ~1; + double cre = src2[idx]; + double cim = src2[idx + 1]; + double tre = src1[idx]; + double tim = src1[idx + 1]; + double t = fabs(src0[i]) + + fabs(tre) + fabs(tim) + fabs(cre) + fabs(cim) + + fabs(tre * cre) + fabs(tim * cim) + + fabs(tre * cim) + fabs(tim * cre) + + fabs(tre * cre - tim * cim) + + fabs(tre * cim + tim * cre) + + fabs(cdst[i]) + 1.0; + if (!double_near_abs_eps(cdst[i], odst[i], t * 2 * FLT_EPSILON)) { + fprintf(stderr, "%d: %- .12f - %- .12f = % .12g\n", + i, cdst[i], odst[i], cdst[i] - odst[i]); + fail(); + break; + } + } + memcpy(odst, src0, (BUF_SIZE) * sizeof(double)); + bench_new(odst, src1, src2, LEN); + } + + report("dcmul_add"); +} + + +void checkasm_check_afir(void) +{ + AudioFIRDSPContext fir = { 0 }; + + ff_afir_init(&fir); + test_fcmul_add(&fir); + test_dcmul_add(&fir); } |