1cabdff1aSopenharmony_ci/* 2cabdff1aSopenharmony_ci * Copyright (c) 2015 Henrik Gramner 3cabdff1aSopenharmony_ci * 4cabdff1aSopenharmony_ci * This file is part of FFmpeg. 5cabdff1aSopenharmony_ci * 6cabdff1aSopenharmony_ci * FFmpeg is free software; you can redistribute it and/or modify 7cabdff1aSopenharmony_ci * it under the terms of the GNU General Public License as published by 8cabdff1aSopenharmony_ci * the Free Software Foundation; either version 2 of the License, or 9cabdff1aSopenharmony_ci * (at your option) any later version. 10cabdff1aSopenharmony_ci * 11cabdff1aSopenharmony_ci * FFmpeg is distributed in the hope that it will be useful, 12cabdff1aSopenharmony_ci * but WITHOUT ANY WARRANTY; without even the implied warranty of 13cabdff1aSopenharmony_ci * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14cabdff1aSopenharmony_ci * GNU General Public License for more details. 15cabdff1aSopenharmony_ci * 16cabdff1aSopenharmony_ci * You should have received a copy of the GNU General Public License along 17cabdff1aSopenharmony_ci * with FFmpeg; if not, write to the Free Software Foundation, Inc., 18cabdff1aSopenharmony_ci * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 19cabdff1aSopenharmony_ci */ 20cabdff1aSopenharmony_ci 21cabdff1aSopenharmony_ci#include <string.h> 22cabdff1aSopenharmony_ci#include "checkasm.h" 23cabdff1aSopenharmony_ci#include "libavcodec/bswapdsp.h" 24cabdff1aSopenharmony_ci#include "libavutil/common.h" 25cabdff1aSopenharmony_ci#include "libavutil/internal.h" 26cabdff1aSopenharmony_ci#include "libavutil/intreadwrite.h" 27cabdff1aSopenharmony_ci#include "libavutil/mem_internal.h" 28cabdff1aSopenharmony_ci 29cabdff1aSopenharmony_ci#define BUF_SIZE 512 30cabdff1aSopenharmony_ci 31cabdff1aSopenharmony_ci#define randomize_buffers() \ 32cabdff1aSopenharmony_ci do { \ 33cabdff1aSopenharmony_ci int i; \ 34cabdff1aSopenharmony_ci for (i = 0; i < BUF_SIZE; i += 4) { \ 35cabdff1aSopenharmony_ci uint32_t r = rnd(); \ 36cabdff1aSopenharmony_ci AV_WN32A(src0 + i, r); \ 37cabdff1aSopenharmony_ci AV_WN32A(src1 + i, r); \ 38cabdff1aSopenharmony_ci r = rnd(); \ 39cabdff1aSopenharmony_ci AV_WN32A(dst0 + i, r); \ 40cabdff1aSopenharmony_ci AV_WN32A(dst1 + i, r); \ 41cabdff1aSopenharmony_ci } \ 42cabdff1aSopenharmony_ci } while (0) 43cabdff1aSopenharmony_ci 44cabdff1aSopenharmony_ci#define check_bswap(type) \ 45cabdff1aSopenharmony_ci do { \ 46cabdff1aSopenharmony_ci int w; \ 47cabdff1aSopenharmony_ci declare_func(void, type *dst, const type *src, int w); \ 48cabdff1aSopenharmony_ci \ 49cabdff1aSopenharmony_ci for (w = 0; w < BUF_SIZE / sizeof(type); w++) { \ 50cabdff1aSopenharmony_ci int offset = (BUF_SIZE / sizeof(type) - w) & 15; /* Test various alignments */ \ 51cabdff1aSopenharmony_ci randomize_buffers(); \ 52cabdff1aSopenharmony_ci call_ref((type *)dst0 + offset, (type *)src0 + offset, w); \ 53cabdff1aSopenharmony_ci call_new((type *)dst1 + offset, (type *)src1 + offset, w); \ 54cabdff1aSopenharmony_ci if (memcmp(src0, src1, BUF_SIZE) || memcmp(dst0, dst1, BUF_SIZE)) \ 55cabdff1aSopenharmony_ci fail(); \ 56cabdff1aSopenharmony_ci bench_new((type *)dst1 + offset, (type *)src1 + offset, w); \ 57cabdff1aSopenharmony_ci } \ 58cabdff1aSopenharmony_ci } while (0) 59cabdff1aSopenharmony_ci 60cabdff1aSopenharmony_civoid checkasm_check_bswapdsp(void) 61cabdff1aSopenharmony_ci{ 62cabdff1aSopenharmony_ci LOCAL_ALIGNED_16(uint8_t, src0, [BUF_SIZE]); 63cabdff1aSopenharmony_ci LOCAL_ALIGNED_16(uint8_t, src1, [BUF_SIZE]); 64cabdff1aSopenharmony_ci LOCAL_ALIGNED_16(uint8_t, dst0, [BUF_SIZE]); 65cabdff1aSopenharmony_ci LOCAL_ALIGNED_16(uint8_t, dst1, [BUF_SIZE]); 66cabdff1aSopenharmony_ci BswapDSPContext h; 67cabdff1aSopenharmony_ci 68cabdff1aSopenharmony_ci ff_bswapdsp_init(&h); 69cabdff1aSopenharmony_ci 70cabdff1aSopenharmony_ci if (check_func(h.bswap_buf, "bswap_buf")) 71cabdff1aSopenharmony_ci check_bswap(uint32_t); 72cabdff1aSopenharmony_ci 73cabdff1aSopenharmony_ci if (check_func(h.bswap16_buf, "bswap16_buf")) 74cabdff1aSopenharmony_ci check_bswap(uint16_t); 75cabdff1aSopenharmony_ci 76cabdff1aSopenharmony_ci report("bswap"); 77cabdff1aSopenharmony_ci} 78