media/libvpx/vpx_ports/mem_ops_aligned.h

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/media/libvpx/vpx_ports/mem_ops_aligned.h	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,157 @@
     1.4 +/*
     1.5 + *  Copyright (c) 2010 The WebM project authors. All Rights Reserved.
     1.6 + *
     1.7 + *  Use of this source code is governed by a BSD-style license
     1.8 + *  that can be found in the LICENSE file in the root of the source
     1.9 + *  tree. An additional intellectual property rights grant can be found
    1.10 + *  in the file PATENTS.  All contributing project authors may
    1.11 + *  be found in the AUTHORS file in the root of the source tree.
    1.12 + */
    1.13 +
    1.14 +
    1.15 +/* \file
    1.16 + * \brief Provides portable memory access primitives for operating on aligned
    1.17 + *        data
    1.18 + *
    1.19 + * This file is split from mem_ops.h for easier maintenance. See mem_ops.h
    1.20 + * for a more detailed description of these primitives.
    1.21 + */
    1.22 +#ifndef INCLUDED_BY_MEM_OPS_H
    1.23 +#error Include mem_ops.h, not mem_ops_aligned.h directly.
    1.24 +#endif
    1.25 +
    1.26 +/* Architectures that provide instructions for doing this byte swapping
    1.27 + * could redefine these macros.
    1.28 + */
    1.29 +#define swap_endian_16(val,raw) do {\
    1.30 +    val = ((raw>>8) & 0x00ff) \
    1.31 +          | ((raw<<8) & 0xff00);\
    1.32 +  } while(0)
    1.33 +#define swap_endian_32(val,raw) do {\
    1.34 +    val = ((raw>>24) & 0x000000ff) \
    1.35 +          | ((raw>>8)  & 0x0000ff00) \
    1.36 +          | ((raw<<8)  & 0x00ff0000) \
    1.37 +          | ((raw<<24) & 0xff000000); \
    1.38 +  } while(0)
    1.39 +#define swap_endian_16_se(val,raw) do {\
    1.40 +    swap_endian_16(val,raw);\
    1.41 +    val = ((val << 16) >> 16);\
    1.42 +  } while(0)
    1.43 +#define swap_endian_32_se(val,raw) swap_endian_32(val,raw)
    1.44 +
    1.45 +#define mem_get_ne_aligned_generic(end,sz) \
    1.46 +  static unsigned MEM_VALUE_T mem_get_##end##sz##_aligned(const void *vmem) {\
    1.47 +    const uint##sz##_t *mem = (const uint##sz##_t *)vmem;\
    1.48 +    return *mem;\
    1.49 +  }
    1.50 +
    1.51 +#define mem_get_sne_aligned_generic(end,sz) \
    1.52 +  static signed MEM_VALUE_T mem_get_s##end##sz##_aligned(const void *vmem) {\
    1.53 +    const int##sz##_t *mem = (const int##sz##_t *)vmem;\
    1.54 +    return *mem;\
    1.55 +  }
    1.56 +
    1.57 +#define mem_get_se_aligned_generic(end,sz) \
    1.58 +  static unsigned MEM_VALUE_T mem_get_##end##sz##_aligned(const void *vmem) {\
    1.59 +    const uint##sz##_t *mem = (const uint##sz##_t *)vmem;\
    1.60 +    unsigned MEM_VALUE_T val, raw = *mem;\
    1.61 +    swap_endian_##sz(val,raw);\
    1.62 +    return val;\
    1.63 +  }
    1.64 +
    1.65 +#define mem_get_sse_aligned_generic(end,sz) \
    1.66 +  static signed MEM_VALUE_T mem_get_s##end##sz##_aligned(const void *vmem) {\
    1.67 +    const int##sz##_t *mem = (const int##sz##_t *)vmem;\
    1.68 +    unsigned MEM_VALUE_T val, raw = *mem;\
    1.69 +    swap_endian_##sz##_se(val,raw);\
    1.70 +    return val;\
    1.71 +  }
    1.72 +
    1.73 +#define mem_put_ne_aligned_generic(end,sz) \
    1.74 +  static void mem_put_##end##sz##_aligned(void *vmem, MEM_VALUE_T val) {\
    1.75 +    uint##sz##_t *mem = (uint##sz##_t *)vmem;\
    1.76 +    *mem = (uint##sz##_t)val;\
    1.77 +  }
    1.78 +
    1.79 +#define mem_put_se_aligned_generic(end,sz) \
    1.80 +  static void mem_put_##end##sz##_aligned(void *vmem, MEM_VALUE_T val) {\
    1.81 +    uint##sz##_t *mem = (uint##sz##_t *)vmem, raw;\
    1.82 +    swap_endian_##sz(raw,val);\
    1.83 +    *mem = (uint##sz##_t)raw;\
    1.84 +  }
    1.85 +
    1.86 +#include "vpx_config.h"
    1.87 +#if CONFIG_BIG_ENDIAN
    1.88 +#define mem_get_be_aligned_generic(sz)  mem_get_ne_aligned_generic(be,sz)
    1.89 +#define mem_get_sbe_aligned_generic(sz) mem_get_sne_aligned_generic(be,sz)
    1.90 +#define mem_get_le_aligned_generic(sz)  mem_get_se_aligned_generic(le,sz)
    1.91 +#define mem_get_sle_aligned_generic(sz) mem_get_sse_aligned_generic(le,sz)
    1.92 +#define mem_put_be_aligned_generic(sz)  mem_put_ne_aligned_generic(be,sz)
    1.93 +#define mem_put_le_aligned_generic(sz)  mem_put_se_aligned_generic(le,sz)
    1.94 +#else
    1.95 +#define mem_get_be_aligned_generic(sz)  mem_get_se_aligned_generic(be,sz)
    1.96 +#define mem_get_sbe_aligned_generic(sz) mem_get_sse_aligned_generic(be,sz)
    1.97 +#define mem_get_le_aligned_generic(sz)  mem_get_ne_aligned_generic(le,sz)
    1.98 +#define mem_get_sle_aligned_generic(sz) mem_get_sne_aligned_generic(le,sz)
    1.99 +#define mem_put_be_aligned_generic(sz)  mem_put_se_aligned_generic(be,sz)
   1.100 +#define mem_put_le_aligned_generic(sz)  mem_put_ne_aligned_generic(le,sz)
   1.101 +#endif
   1.102 +
   1.103 +#undef  mem_get_be16_aligned
   1.104 +#define mem_get_be16_aligned mem_ops_wrap_symbol(mem_get_be16_aligned)
   1.105 +mem_get_be_aligned_generic(16)
   1.106 +
   1.107 +#undef  mem_get_be32_aligned
   1.108 +#define mem_get_be32_aligned mem_ops_wrap_symbol(mem_get_be32_aligned)
   1.109 +mem_get_be_aligned_generic(32)
   1.110 +
   1.111 +#undef  mem_get_le16_aligned
   1.112 +#define mem_get_le16_aligned mem_ops_wrap_symbol(mem_get_le16_aligned)
   1.113 +mem_get_le_aligned_generic(16)
   1.114 +
   1.115 +#undef  mem_get_le32_aligned
   1.116 +#define mem_get_le32_aligned mem_ops_wrap_symbol(mem_get_le32_aligned)
   1.117 +mem_get_le_aligned_generic(32)
   1.118 +
   1.119 +#undef  mem_get_sbe16_aligned
   1.120 +#define mem_get_sbe16_aligned mem_ops_wrap_symbol(mem_get_sbe16_aligned)
   1.121 +mem_get_sbe_aligned_generic(16)
   1.122 +
   1.123 +#undef  mem_get_sbe32_aligned
   1.124 +#define mem_get_sbe32_aligned mem_ops_wrap_symbol(mem_get_sbe32_aligned)
   1.125 +mem_get_sbe_aligned_generic(32)
   1.126 +
   1.127 +#undef  mem_get_sle16_aligned
   1.128 +#define mem_get_sle16_aligned mem_ops_wrap_symbol(mem_get_sle16_aligned)
   1.129 +mem_get_sle_aligned_generic(16)
   1.130 +
   1.131 +#undef  mem_get_sle32_aligned
   1.132 +#define mem_get_sle32_aligned mem_ops_wrap_symbol(mem_get_sle32_aligned)
   1.133 +mem_get_sle_aligned_generic(32)
   1.134 +
   1.135 +#undef  mem_put_be16_aligned
   1.136 +#define mem_put_be16_aligned mem_ops_wrap_symbol(mem_put_be16_aligned)
   1.137 +mem_put_be_aligned_generic(16)
   1.138 +
   1.139 +#undef  mem_put_be32_aligned
   1.140 +#define mem_put_be32_aligned mem_ops_wrap_symbol(mem_put_be32_aligned)
   1.141 +mem_put_be_aligned_generic(32)
   1.142 +
   1.143 +#undef  mem_put_le16_aligned
   1.144 +#define mem_put_le16_aligned mem_ops_wrap_symbol(mem_put_le16_aligned)
   1.145 +mem_put_le_aligned_generic(16)
   1.146 +
   1.147 +#undef  mem_put_le32_aligned
   1.148 +#define mem_put_le32_aligned mem_ops_wrap_symbol(mem_put_le32_aligned)
   1.149 +mem_put_le_aligned_generic(32)
   1.150 +
   1.151 +#undef mem_get_ne_aligned_generic
   1.152 +#undef mem_get_se_aligned_generic
   1.153 +#undef mem_get_sne_aligned_generic
   1.154 +#undef mem_get_sse_aligned_generic
   1.155 +#undef mem_put_ne_aligned_generic
   1.156 +#undef mem_put_se_aligned_generic
   1.157 +#undef swap_endian_16
   1.158 +#undef swap_endian_32
   1.159 +#undef swap_endian_16_se
   1.160 +#undef swap_endian_32_se

mercurial