mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
d4cfe0793f
This updates our in-tree copy of libvpx to match the 1.2.0 git tag. All but one of the patches we were carrying are in this upstream version. Our update.sh script should copy the new files needed but will not remove the old ones for you. Runtime cpu detection was rewritten upstream. We now generate per-platform headers for this and include the correct one from a vpx_rtcd.h wrapper like we were already doing for vpx_config.h This revision includes improved assembly optimizations and should be faster on all platforms. Includes work by Jan Gerber and Ralph Giles. --HG-- rename : media/libvpx/vp8/common/arm/neon/save_neon_reg.asm => media/libvpx/vp8/common/arm/neon/save_reg_neon.asm rename : media/libvpx/vp8/common/arm/armv6/vp8_mse16x16_armv6.asm => media/libvpx/vp8/encoder/arm/armv6/vp8_mse16x16_armv6.asm rename : media/libvpx/vp8/common/arm/neon/vp8_mse16x16_neon.asm => media/libvpx/vp8/encoder/arm/neon/vp8_mse16x16_neon.asm rename : media/libvpx/vp8/encoder/x86/x86_csystemdependent.c => media/libvpx/vp8/encoder/x86/vp8_enc_stubs_mmx.c rename : media/libvpx/vpx_config_arm-linux-gcc.c => media/libvpx/vpx_config_armv7-android-gcc.c rename : media/libvpx/vpx_config_arm-linux-gcc.h => media/libvpx/vpx_config_armv7-android-gcc.h
158 lines
5.6 KiB
C
158 lines
5.6 KiB
C
/*
|
|
* Copyright (c) 2010 The WebM project authors. All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license
|
|
* that can be found in the LICENSE file in the root of the source
|
|
* tree. An additional intellectual property rights grant can be found
|
|
* in the file PATENTS. All contributing project authors may
|
|
* be found in the AUTHORS file in the root of the source tree.
|
|
*/
|
|
|
|
|
|
/* \file
|
|
* \brief Provides portable memory access primitives for operating on aligned
|
|
* data
|
|
*
|
|
* This file is split from mem_ops.h for easier maintenance. See mem_ops.h
|
|
* for a more detailed description of these primitives.
|
|
*/
|
|
#ifndef INCLUDED_BY_MEM_OPS_H
|
|
#error Include mem_ops.h, not mem_ops_aligned.h directly.
|
|
#endif
|
|
|
|
/* Architectures that provide instructions for doing this byte swapping
|
|
* could redefine these macros.
|
|
*/
|
|
#define swap_endian_16(val,raw) do {\
|
|
val = ((raw>>8) & 0x00ff) \
|
|
| ((raw<<8) & 0xff00);\
|
|
} while(0)
|
|
#define swap_endian_32(val,raw) do {\
|
|
val = ((raw>>24) & 0x000000ff) \
|
|
| ((raw>>8) & 0x0000ff00) \
|
|
| ((raw<<8) & 0x00ff0000) \
|
|
| ((raw<<24) & 0xff000000); \
|
|
} while(0)
|
|
#define swap_endian_16_se(val,raw) do {\
|
|
swap_endian_16(val,raw);\
|
|
val = ((val << 16) >> 16);\
|
|
} while(0)
|
|
#define swap_endian_32_se(val,raw) swap_endian_32(val,raw)
|
|
|
|
#define mem_get_ne_aligned_generic(end,sz) \
|
|
static unsigned MEM_VALUE_T mem_get_##end##sz##_aligned(const void *vmem) {\
|
|
const uint##sz##_t *mem = (const uint##sz##_t *)vmem;\
|
|
return *mem;\
|
|
}
|
|
|
|
#define mem_get_sne_aligned_generic(end,sz) \
|
|
static signed MEM_VALUE_T mem_get_s##end##sz##_aligned(const void *vmem) {\
|
|
const int##sz##_t *mem = (const int##sz##_t *)vmem;\
|
|
return *mem;\
|
|
}
|
|
|
|
#define mem_get_se_aligned_generic(end,sz) \
|
|
static unsigned MEM_VALUE_T mem_get_##end##sz##_aligned(const void *vmem) {\
|
|
const uint##sz##_t *mem = (const uint##sz##_t *)vmem;\
|
|
unsigned MEM_VALUE_T val, raw = *mem;\
|
|
swap_endian_##sz(val,raw);\
|
|
return val;\
|
|
}
|
|
|
|
#define mem_get_sse_aligned_generic(end,sz) \
|
|
static signed MEM_VALUE_T mem_get_s##end##sz##_aligned(const void *vmem) {\
|
|
const int##sz##_t *mem = (const int##sz##_t *)vmem;\
|
|
unsigned MEM_VALUE_T val, raw = *mem;\
|
|
swap_endian_##sz##_se(val,raw);\
|
|
return val;\
|
|
}
|
|
|
|
#define mem_put_ne_aligned_generic(end,sz) \
|
|
static void mem_put_##end##sz##_aligned(void *vmem, MEM_VALUE_T val) {\
|
|
uint##sz##_t *mem = (uint##sz##_t *)vmem;\
|
|
*mem = (uint##sz##_t)val;\
|
|
}
|
|
|
|
#define mem_put_se_aligned_generic(end,sz) \
|
|
static void mem_put_##end##sz##_aligned(void *vmem, MEM_VALUE_T val) {\
|
|
uint##sz##_t *mem = (uint##sz##_t *)vmem, raw;\
|
|
swap_endian_##sz(raw,val);\
|
|
*mem = (uint##sz##_t)raw;\
|
|
}
|
|
|
|
#include "vpx_config.h"
|
|
#if CONFIG_BIG_ENDIAN
|
|
#define mem_get_be_aligned_generic(sz) mem_get_ne_aligned_generic(be,sz)
|
|
#define mem_get_sbe_aligned_generic(sz) mem_get_sne_aligned_generic(be,sz)
|
|
#define mem_get_le_aligned_generic(sz) mem_get_se_aligned_generic(le,sz)
|
|
#define mem_get_sle_aligned_generic(sz) mem_get_sse_aligned_generic(le,sz)
|
|
#define mem_put_be_aligned_generic(sz) mem_put_ne_aligned_generic(be,sz)
|
|
#define mem_put_le_aligned_generic(sz) mem_put_se_aligned_generic(le,sz)
|
|
#else
|
|
#define mem_get_be_aligned_generic(sz) mem_get_se_aligned_generic(be,sz)
|
|
#define mem_get_sbe_aligned_generic(sz) mem_get_sse_aligned_generic(be,sz)
|
|
#define mem_get_le_aligned_generic(sz) mem_get_ne_aligned_generic(le,sz)
|
|
#define mem_get_sle_aligned_generic(sz) mem_get_sne_aligned_generic(le,sz)
|
|
#define mem_put_be_aligned_generic(sz) mem_put_se_aligned_generic(be,sz)
|
|
#define mem_put_le_aligned_generic(sz) mem_put_ne_aligned_generic(le,sz)
|
|
#endif
|
|
|
|
#undef mem_get_be16_aligned
|
|
#define mem_get_be16_aligned mem_ops_wrap_symbol(mem_get_be16_aligned)
|
|
mem_get_be_aligned_generic(16)
|
|
|
|
#undef mem_get_be32_aligned
|
|
#define mem_get_be32_aligned mem_ops_wrap_symbol(mem_get_be32_aligned)
|
|
mem_get_be_aligned_generic(32)
|
|
|
|
#undef mem_get_le16_aligned
|
|
#define mem_get_le16_aligned mem_ops_wrap_symbol(mem_get_le16_aligned)
|
|
mem_get_le_aligned_generic(16)
|
|
|
|
#undef mem_get_le32_aligned
|
|
#define mem_get_le32_aligned mem_ops_wrap_symbol(mem_get_le32_aligned)
|
|
mem_get_le_aligned_generic(32)
|
|
|
|
#undef mem_get_sbe16_aligned
|
|
#define mem_get_sbe16_aligned mem_ops_wrap_symbol(mem_get_sbe16_aligned)
|
|
mem_get_sbe_aligned_generic(16)
|
|
|
|
#undef mem_get_sbe32_aligned
|
|
#define mem_get_sbe32_aligned mem_ops_wrap_symbol(mem_get_sbe32_aligned)
|
|
mem_get_sbe_aligned_generic(32)
|
|
|
|
#undef mem_get_sle16_aligned
|
|
#define mem_get_sle16_aligned mem_ops_wrap_symbol(mem_get_sle16_aligned)
|
|
mem_get_sle_aligned_generic(16)
|
|
|
|
#undef mem_get_sle32_aligned
|
|
#define mem_get_sle32_aligned mem_ops_wrap_symbol(mem_get_sle32_aligned)
|
|
mem_get_sle_aligned_generic(32)
|
|
|
|
#undef mem_put_be16_aligned
|
|
#define mem_put_be16_aligned mem_ops_wrap_symbol(mem_put_be16_aligned)
|
|
mem_put_be_aligned_generic(16)
|
|
|
|
#undef mem_put_be32_aligned
|
|
#define mem_put_be32_aligned mem_ops_wrap_symbol(mem_put_be32_aligned)
|
|
mem_put_be_aligned_generic(32)
|
|
|
|
#undef mem_put_le16_aligned
|
|
#define mem_put_le16_aligned mem_ops_wrap_symbol(mem_put_le16_aligned)
|
|
mem_put_le_aligned_generic(16)
|
|
|
|
#undef mem_put_le32_aligned
|
|
#define mem_put_le32_aligned mem_ops_wrap_symbol(mem_put_le32_aligned)
|
|
mem_put_le_aligned_generic(32)
|
|
|
|
#undef mem_get_ne_aligned_generic
|
|
#undef mem_get_se_aligned_generic
|
|
#undef mem_get_sne_aligned_generic
|
|
#undef mem_get_sse_aligned_generic
|
|
#undef mem_put_ne_aligned_generic
|
|
#undef mem_put_se_aligned_generic
|
|
#undef swap_endian_16
|
|
#undef swap_endian_32
|
|
#undef swap_endian_16_se
|
|
#undef swap_endian_32_se
|