3 * This file is part of FFmpeg.
5 * FFmpeg is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
10 * FFmpeg is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License along
16 * with FFmpeg; if not, write to the Free Software Foundation, Inc.,
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
22 #include "libavutil/common.h"
23 #include "libavutil/intreadwrite.h"
24 #include "libavutil/mem.h"
26 #include "libswscale/rgb2rgb.h"
30 #define randomize_buffers(buf, size) \
33 for (j = 0; j < size; j+=4) \
34 AV_WN32(buf + j, rnd()); \
37 static const uint8_t width[] = {12, 16, 20, 32, 36, 128};
39 #define MAX_STRIDE 128
41 static void check_shuffle_bytes(void * func, const char * report)
44 LOCAL_ALIGNED_32(uint8_t, src0, [MAX_STRIDE]);
45 LOCAL_ALIGNED_32(uint8_t, src1, [MAX_STRIDE]);
46 LOCAL_ALIGNED_32(uint8_t, dst0, [MAX_STRIDE]);
47 LOCAL_ALIGNED_32(uint8_t, dst1, [MAX_STRIDE]);
49 declare_func_emms(AV_CPU_FLAG_MMX, void, const uint8_t *src, uint8_t *dst, int src_size);
51 memset(dst0, 0, MAX_STRIDE);
52 memset(dst1, 0, MAX_STRIDE);
53 randomize_buffers(src0, MAX_STRIDE);
54 memcpy(src1, src0, MAX_STRIDE);
56 if (check_func(func, "%s", report)) {
57 for (i = 0; i < 6; i ++) {
58 call_ref(src0, dst0, width[i]);
59 call_new(src1, dst1, width[i]);
60 if (memcmp(dst0, dst1, MAX_STRIDE))
63 bench_new(src0, dst0, width[5]);
67 void checkasm_check_sw_rgb(void)
69 ff_sws_rgb2rgb_init();
71 check_shuffle_bytes(shuffle_bytes_2103, "shuffle_bytes_2103");
72 report("shuffle_bytes_2103");
74 check_shuffle_bytes(shuffle_bytes_0321, "shuffle_bytes_0321");
75 report("shuffle_bytes_0321");
77 check_shuffle_bytes(shuffle_bytes_1230, "shuffle_bytes_1230");
78 report("shuffle_bytes_1230");
80 check_shuffle_bytes(shuffle_bytes_3012, "shuffle_bytes_3012");
81 report("shuffle_bytes_3012");
83 check_shuffle_bytes(shuffle_bytes_3210, "shuffle_bytes_3210");
84 report("shuffle_bytes_3210");