History

checkasm: hevc_pel: Use helpers for checking for writes out of bounds

This allows catching whether the functions write outside of the designated rectangle, and if run with "checkasm -v", it also prints out on which side of the rectangle the overwrite was.

Martin Storsjö committed 1 year ago

Commit 4d4b3011 parent f6cd9bf1 file · +90 −67Browse files

Unified · Split

tests/checkasm/hevc_pel.c+90−67
@@ -44,9 +44,14 @@ static const int offsets[] = {0, 255, -1 }; · 43 unmodified lines
4444 uint32_t r = rnd() & mask; \
4545 AV_WN32A(buf0 + k, r); \
4646 AV_WN32A(buf1 + k, r); \
47− if (k >= BUF_SIZE) \
48− continue; \
49− r = rnd(); \
47+ } \
48+ } while (0)
49+
50+#define randomize_buffers_dst() \
51+ do { \
52+ int k; \
53+ for (k = 0; k < BUF_SIZE; k += 4) { \
54+ uint32_t r = rnd(); \
5055 AV_WN32A(dst0 + k, r); \
5156 AV_WN32A(dst1 + k, r); \
5257 } \
@@ -100,6 +105,7 @@ static void checkasm_check_hevc_qpel(void) · 47 unmodified lines
100105 "put_hevc_%s%d_%d", type, sizes[size], bit_depth)) {
101106 int16_t *dstw0 = (int16_t *) dst0, *dstw1 = (int16_t *) dst1;
102107 randomize_buffers();
108+ randomize_buffers_dst();
103109 call_ref(dstw0, src0, sizes[size] * SIZEOF_PIXEL, sizes[size], i, j, sizes[size]);
104110 call_new(dstw1, src1, sizes[size] * SIZEOF_PIXEL, sizes[size], i, j, sizes[size]);
105111 checkasm_check(int16_t, dstw0, MAX_PB_SIZE * sizeof(int16_t),
@@ -118,8 +124,8 @@ static void checkasm_check_hevc_qpel_uni(void) · 12 unmodified lines
118124 {
119125 LOCAL_ALIGNED_32(uint8_t, buf0, [BUF_SIZE + SRC_EXTRA]);
120126 LOCAL_ALIGNED_32(uint8_t, buf1, [BUF_SIZE + SRC_EXTRA]);
121− LOCAL_ALIGNED_32(uint8_t, dst0, [BUF_SIZE]);
122− LOCAL_ALIGNED_32(uint8_t, dst1, [BUF_SIZE]);
127+ PIXEL_RECT(dst0, 64, 64);
128+ PIXEL_RECT(dst1, 64, 64);
123129
124130 HEVCDSPContext h;
125131 int size, bit_depth, i, j;
@@ -143,16 +149,18 @@ static void checkasm_check_hevc_qpel_uni(void) · 17 unmodified lines
143149 if (check_func(h.put_hevc_qpel_uni[size][j][i],
144150 "put_hevc_%s%d_%d", type, sizes[size], bit_depth)) {
145151 randomize_buffers();
146− call_ref(dst0, sizes[size] * SIZEOF_PIXEL,
152+ CLEAR_PIXEL_RECT(dst0);
153+ CLEAR_PIXEL_RECT(dst1);
154+ call_ref(dst0, dst0_stride,
147155 src0, sizes[size] * SIZEOF_PIXEL,
148156 sizes[size], i, j, sizes[size]);
149− call_new(dst1, sizes[size] * SIZEOF_PIXEL,
157+ call_new(dst1, dst1_stride,
150158 src1, sizes[size] * SIZEOF_PIXEL,
151159 sizes[size], i, j, sizes[size]);
152− checkasm_check_pixel(dst0, sizes[size] * SIZEOF_PIXEL,
153− dst1, sizes[size] * SIZEOF_PIXEL,
154− size[sizes], size[sizes], "dst");
155− bench_new(dst1, sizes[size] * SIZEOF_PIXEL,
160+ checkasm_check_pixel_padded(dst0, dst0_stride,
161+ dst1, dst1_stride,
162+ size[sizes], size[sizes], "dst");
163+ bench_new(dst1, dst1_stride,
156164 src1, sizes[size] * SIZEOF_PIXEL,
157165 sizes[size], i, j, sizes[size]);
158166 }
@@ -167,8 +175,8 @@ static void checkasm_check_hevc_qpel_uni_w(void) · 8 unmodified lines
167175 {
168176 LOCAL_ALIGNED_32(uint8_t, buf0, [BUF_SIZE + SRC_EXTRA]);
169177 LOCAL_ALIGNED_32(uint8_t, buf1, [BUF_SIZE + SRC_EXTRA]);
170− LOCAL_ALIGNED_32(uint8_t, dst0, [BUF_SIZE]);
171− LOCAL_ALIGNED_32(uint8_t, dst1, [BUF_SIZE]);
178+ PIXEL_RECT(dst0, 64, 64);
179+ PIXEL_RECT(dst1, 64, 64);
172180
173181 HEVCDSPContext h;
174182 int size, bit_depth, i, j;
@@ -196,16 +204,18 @@ static void checkasm_check_hevc_qpel_uni_w(void) · 21 unmodified lines
196204 for (wx = weights; *wx >= 0; wx++) {
197205 for (ox = offsets; *ox >= 0; ox++) {
198206 randomize_buffers();
199− call_ref(dst0, sizes[size] * SIZEOF_PIXEL,
207+ CLEAR_PIXEL_RECT(dst0);
208+ CLEAR_PIXEL_RECT(dst1);
209+ call_ref(dst0, dst0_stride,
200210 src0, sizes[size] * SIZEOF_PIXEL,
201211 sizes[size], *denom, *wx, *ox, i, j, sizes[size]);
202− call_new(dst1, sizes[size] * SIZEOF_PIXEL,
212+ call_new(dst1, dst1_stride,
203213 src1, sizes[size] * SIZEOF_PIXEL,
204214 sizes[size], *denom, *wx, *ox, i, j, sizes[size]);
205− checkasm_check_pixel(dst0, sizes[size] * SIZEOF_PIXEL,
206− dst1, sizes[size] * SIZEOF_PIXEL,
207− size[sizes], size[sizes], "dst");
208− bench_new(dst1, sizes[size] * SIZEOF_PIXEL,
215+ checkasm_check_pixel_padded(dst0, dst0_stride,
216+ dst1, dst1_stride,
217+ size[sizes], size[sizes], "dst");
218+ bench_new(dst1, dst1_stride,
209219 src1, sizes[size] * SIZEOF_PIXEL,
210220 sizes[size], *denom, *wx, *ox, i, j, sizes[size]);
211221 }
@@ -223,8 +233,8 @@ static void checkasm_check_hevc_qpel_bi(void) · 11 unmodified lines
223233 {
224234 LOCAL_ALIGNED_32(uint8_t, buf0, [BUF_SIZE + SRC_EXTRA]);
225235 LOCAL_ALIGNED_32(uint8_t, buf1, [BUF_SIZE + SRC_EXTRA]);
226− LOCAL_ALIGNED_32(uint8_t, dst0, [BUF_SIZE]);
227− LOCAL_ALIGNED_32(uint8_t, dst1, [BUF_SIZE]);
236+ PIXEL_RECT(dst0, 64, 64);
237+ PIXEL_RECT(dst1, 64, 64);
228238 LOCAL_ALIGNED_32(int16_t, ref0, [BUF_SIZE]);
229239 LOCAL_ALIGNED_32(int16_t, ref1, [BUF_SIZE]);
230240
@@ -251,16 +261,18 @@ static void checkasm_check_hevc_qpel_bi(void) · 20 unmodified lines
251261 if (check_func(h.put_hevc_qpel_bi[size][j][i],
252262 "put_hevc_%s%d_%d", type, sizes[size], bit_depth)) {
253263 randomize_buffers_ref();
254− call_ref(dst0, sizes[size] * SIZEOF_PIXEL,
264+ CLEAR_PIXEL_RECT(dst0);
265+ CLEAR_PIXEL_RECT(dst1);
266+ call_ref(dst0, dst0_stride,
255267 src0, sizes[size] * SIZEOF_PIXEL,
256268 ref0, sizes[size], i, j, sizes[size]);
257− call_new(dst1, sizes[size] * SIZEOF_PIXEL,
269+ call_new(dst1, dst1_stride,
258270 src1, sizes[size] * SIZEOF_PIXEL,
259271 ref1, sizes[size], i, j, sizes[size]);
260− checkasm_check_pixel(dst0, sizes[size] * SIZEOF_PIXEL,
261− dst1, sizes[size] * SIZEOF_PIXEL,
262− size[sizes], size[sizes], "dst");
263− bench_new(dst1, sizes[size] * SIZEOF_PIXEL,
272+ checkasm_check_pixel_padded(dst0, dst0_stride,
273+ dst1, dst1_stride,
274+ size[sizes], size[sizes], "dst");
275+ bench_new(dst1, dst1_stride,
264276 src1, sizes[size] * SIZEOF_PIXEL,
265277 ref1, sizes[size], i, j, sizes[size]);
266278 }
@@ -275,8 +287,8 @@ static void checkasm_check_hevc_qpel_bi_w(void) · 8 unmodified lines
275287 {
276288 LOCAL_ALIGNED_32(uint8_t, buf0, [BUF_SIZE + SRC_EXTRA]);
277289 LOCAL_ALIGNED_32(uint8_t, buf1, [BUF_SIZE + SRC_EXTRA]);
278− LOCAL_ALIGNED_32(uint8_t, dst0, [BUF_SIZE]);
279− LOCAL_ALIGNED_32(uint8_t, dst1, [BUF_SIZE]);
290+ PIXEL_RECT(dst0, 64, 64);
291+ PIXEL_RECT(dst1, 64, 64);
280292 LOCAL_ALIGNED_32(int16_t, ref0, [BUF_SIZE]);
281293 LOCAL_ALIGNED_32(int16_t, ref1, [BUF_SIZE]);
282294
@@ -308,16 +320,18 @@ static void checkasm_check_hevc_qpel_bi_w(void) · 25 unmodified lines
308320 for (wx = weights; *wx >= 0; wx++) {
309321 for (ox = offsets; *ox >= 0; ox++) {
310322 randomize_buffers_ref();
311− call_ref(dst0, sizes[size] * SIZEOF_PIXEL,
323+ CLEAR_PIXEL_RECT(dst0);
324+ CLEAR_PIXEL_RECT(dst1);
325+ call_ref(dst0, dst0_stride,
312326 src0, sizes[size] * SIZEOF_PIXEL,
313327 ref0, sizes[size], *denom, *wx, *wx, *ox, *ox, i, j, sizes[size]);
314− call_new(dst1, sizes[size] * SIZEOF_PIXEL,
328+ call_new(dst1, dst1_stride,
315329 src1, sizes[size] * SIZEOF_PIXEL,
316330 ref1, sizes[size], *denom, *wx, *wx, *ox, *ox, i, j, sizes[size]);
317− checkasm_check_pixel(dst0, sizes[size] * SIZEOF_PIXEL,
318− dst1, sizes[size] * SIZEOF_PIXEL,
319− size[sizes], size[sizes], "dst");
320− bench_new(dst1, sizes[size] * SIZEOF_PIXEL,
331+ checkasm_check_pixel_padded(dst0, dst0_stride,
332+ dst1, dst1_stride,
333+ size[sizes], size[sizes], "dst");
334+ bench_new(dst1, dst1_stride,
321335 src1, sizes[size] * SIZEOF_PIXEL,
322336 ref1, sizes[size], *denom, *wx, *wx, *ox, *ox, i, j, sizes[size]);
323337 }
@@ -364,6 +378,7 @@ static void checkasm_check_hevc_epel(void) · 40 unmodified lines
364378 "put_hevc_%s%d_%d", type, sizes[size], bit_depth)) {
365379 int16_t *dstw0 = (int16_t *) dst0, *dstw1 = (int16_t *) dst1;
366380 randomize_buffers();
381+ randomize_buffers_dst();
367382 call_ref(dstw0, src0, sizes[size] * SIZEOF_PIXEL, sizes[size], i, j, sizes[size]);
368383 call_new(dstw1, src1, sizes[size] * SIZEOF_PIXEL, sizes[size], i, j, sizes[size]);
369384 checkasm_check(int16_t, dstw0, MAX_PB_SIZE * sizeof(int16_t),
@@ -382,8 +397,8 @@ static void checkasm_check_hevc_epel_uni(void) · 12 unmodified lines
382397 {
383398 LOCAL_ALIGNED_32(uint8_t, buf0, [BUF_SIZE]);
384399 LOCAL_ALIGNED_32(uint8_t, buf1, [BUF_SIZE]);
385− LOCAL_ALIGNED_32(uint8_t, dst0, [BUF_SIZE]);
386− LOCAL_ALIGNED_32(uint8_t, dst1, [BUF_SIZE]);
400+ PIXEL_RECT(dst0, 64, 64);
401+ PIXEL_RECT(dst1, 64, 64);
387402
388403 HEVCDSPContext h;
389404 int size, bit_depth, i, j;
@@ -407,16 +422,18 @@ static void checkasm_check_hevc_epel_uni(void) · 17 unmodified lines
407422 if (check_func(h.put_hevc_epel_uni[size][j][i],
408423 "put_hevc_%s%d_%d", type, sizes[size], bit_depth)) {
409424 randomize_buffers();
410− call_ref(dst0, sizes[size] * SIZEOF_PIXEL,
425+ CLEAR_PIXEL_RECT(dst0);
426+ CLEAR_PIXEL_RECT(dst1);
427+ call_ref(dst0, dst0_stride,
411428 src0, sizes[size] * SIZEOF_PIXEL,
412429 sizes[size], i, j, sizes[size]);
413− call_new(dst1, sizes[size] * SIZEOF_PIXEL,
430+ call_new(dst1, dst1_stride,
414431 src1, sizes[size] * SIZEOF_PIXEL,
415432 sizes[size], i, j, sizes[size]);
416− checkasm_check_pixel(dst0, sizes[size] * SIZEOF_PIXEL,
417− dst1, sizes[size] * SIZEOF_PIXEL,
418− size[sizes], size[sizes], "dst");
419− bench_new(dst1, sizes[size] * SIZEOF_PIXEL,
433+ checkasm_check_pixel_padded(dst0, dst0_stride,
434+ dst1, dst1_stride,
435+ size[sizes], size[sizes], "dst");
436+ bench_new(dst1, dst1_stride,
420437 src1, sizes[size] * SIZEOF_PIXEL,
421438 sizes[size], i, j, sizes[size]);
422439 }
@@ -431,8 +448,8 @@ static void checkasm_check_hevc_epel_uni_w(void) · 8 unmodified lines
431448 {
432449 LOCAL_ALIGNED_32(uint8_t, buf0, [BUF_SIZE]);
433450 LOCAL_ALIGNED_32(uint8_t, buf1, [BUF_SIZE]);
434− LOCAL_ALIGNED_32(uint8_t, dst0, [BUF_SIZE]);
435− LOCAL_ALIGNED_32(uint8_t, dst1, [BUF_SIZE]);
451+ PIXEL_RECT(dst0, 64, 64);
452+ PIXEL_RECT(dst1, 64, 64);
436453
437454 HEVCDSPContext h;
438455 int size, bit_depth, i, j;
@@ -460,16 +477,18 @@ static void checkasm_check_hevc_epel_uni_w(void) · 21 unmodified lines
460477 for (wx = weights; *wx >= 0; wx++) {
461478 for (ox = offsets; *ox >= 0; ox++) {
462479 randomize_buffers();
463− call_ref(dst0, sizes[size] * SIZEOF_PIXEL,
480+ CLEAR_PIXEL_RECT(dst0);
481+ CLEAR_PIXEL_RECT(dst1);
482+ call_ref(dst0, dst0_stride,
464483 src0, sizes[size] * SIZEOF_PIXEL,
465484 sizes[size], *denom, *wx, *ox, i, j, sizes[size]);
466− call_new(dst1, sizes[size] * SIZEOF_PIXEL,
485+ call_new(dst1, dst1_stride,
467486 src1, sizes[size] * SIZEOF_PIXEL,
468487 sizes[size], *denom, *wx, *ox, i, j, sizes[size]);
469− checkasm_check_pixel(dst0, sizes[size] * SIZEOF_PIXEL,
470− dst1, sizes[size] * SIZEOF_PIXEL,
471− size[sizes], size[sizes], "dst");
472− bench_new(dst1, sizes[size] * SIZEOF_PIXEL,
488+ checkasm_check_pixel_padded(dst0, dst0_stride,
489+ dst1, dst1_stride,
490+ size[sizes], size[sizes], "dst");
491+ bench_new(dst1, dst1_stride,
473492 src1, sizes[size] * SIZEOF_PIXEL,
474493 sizes[size], *denom, *wx, *ox, i, j, sizes[size]);
475494 }
@@ -487,8 +506,8 @@ static void checkasm_check_hevc_epel_bi(void) · 11 unmodified lines
487506 {
488507 LOCAL_ALIGNED_32(uint8_t, buf0, [BUF_SIZE]);
489508 LOCAL_ALIGNED_32(uint8_t, buf1, [BUF_SIZE]);
490− LOCAL_ALIGNED_32(uint8_t, dst0, [BUF_SIZE]);
491− LOCAL_ALIGNED_32(uint8_t, dst1, [BUF_SIZE]);
509+ PIXEL_RECT(dst0, 64, 64);
510+ PIXEL_RECT(dst1, 64, 64);
492511 LOCAL_ALIGNED_32(int16_t, ref0, [BUF_SIZE]);
493512 LOCAL_ALIGNED_32(int16_t, ref1, [BUF_SIZE]);
494513
@@ -515,16 +534,18 @@ static void checkasm_check_hevc_epel_bi(void) · 20 unmodified lines
515534 if (check_func(h.put_hevc_epel_bi[size][j][i],
516535 "put_hevc_%s%d_%d", type, sizes[size], bit_depth)) {
517536 randomize_buffers_ref();
518− call_ref(dst0, sizes[size] * SIZEOF_PIXEL,
537+ CLEAR_PIXEL_RECT(dst0);
538+ CLEAR_PIXEL_RECT(dst1);
539+ call_ref(dst0, dst0_stride,
519540 src0, sizes[size] * SIZEOF_PIXEL,
520541 ref0, sizes[size], i, j, sizes[size]);
521− call_new(dst1, sizes[size] * SIZEOF_PIXEL,
542+ call_new(dst1, dst1_stride,
522543 src1, sizes[size] * SIZEOF_PIXEL,
523544 ref1, sizes[size], i, j, sizes[size]);
524− checkasm_check_pixel(dst0, sizes[size] * SIZEOF_PIXEL,
525− dst1, sizes[size] * SIZEOF_PIXEL,
526− size[sizes], size[sizes], "dst");
527− bench_new(dst1, sizes[size] * SIZEOF_PIXEL,
545+ checkasm_check_pixel_padded(dst0, dst0_stride,
546+ dst1, dst1_stride,
547+ size[sizes], size[sizes], "dst");
548+ bench_new(dst1, dst1_stride,
528549 src1, sizes[size] * SIZEOF_PIXEL,
529550 ref1, sizes[size], i, j, sizes[size]);
530551 }
@@ -539,8 +560,8 @@ static void checkasm_check_hevc_epel_bi_w(void) · 8 unmodified lines
539560 {
540561 LOCAL_ALIGNED_32(uint8_t, buf0, [BUF_SIZE]);
541562 LOCAL_ALIGNED_32(uint8_t, buf1, [BUF_SIZE]);
542− LOCAL_ALIGNED_32(uint8_t, dst0, [BUF_SIZE]);
543− LOCAL_ALIGNED_32(uint8_t, dst1, [BUF_SIZE]);
563+ PIXEL_RECT(dst0, 64, 64);
564+ PIXEL_RECT(dst1, 64, 64);
544565 LOCAL_ALIGNED_32(int16_t, ref0, [BUF_SIZE]);
545566 LOCAL_ALIGNED_32(int16_t, ref1, [BUF_SIZE]);
546567
@@ -572,16 +593,18 @@ static void checkasm_check_hevc_epel_bi_w(void) · 25 unmodified lines
572593 for (wx = weights; *wx >= 0; wx++) {
573594 for (ox = offsets; *ox >= 0; ox++) {
574595 randomize_buffers_ref();
575− call_ref(dst0, sizes[size] * SIZEOF_PIXEL,
596+ CLEAR_PIXEL_RECT(dst0);
597+ CLEAR_PIXEL_RECT(dst1);
598+ call_ref(dst0, dst0_stride,
576599 src0, sizes[size] * SIZEOF_PIXEL,
577600 ref0, sizes[size], *denom, *wx, *wx, *ox, *ox, i, j, sizes[size]);
578− call_new(dst1, sizes[size] * SIZEOF_PIXEL,
601+ call_new(dst1, dst1_stride,
579602 src1, sizes[size] * SIZEOF_PIXEL,
580603 ref1, sizes[size], *denom, *wx, *wx, *ox, *ox, i, j, sizes[size]);
581− checkasm_check_pixel(dst0, sizes[size] * SIZEOF_PIXEL,
582− dst1, sizes[size] * SIZEOF_PIXEL,
583− size[sizes], size[sizes], "dst");
584− bench_new(dst1, sizes[size] * SIZEOF_PIXEL,
604+ checkasm_check_pixel_padded(dst0, dst0_stride,
605+ dst1, dst1_stride,
606+ size[sizes], size[sizes], "dst");
607+ bench_new(dst1, dst1_stride,
585608 src1, sizes[size] * SIZEOF_PIXEL,
586609 ref1, sizes[size], *denom, *wx, *wx, *ox, *ox, i, j, sizes[size]);
587610 }

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t