Coverage Report

Created: 2025-06-22 08:04

/src/aom/aom_util/endian_inl.h
Line
Count
Source (jump to first uncovered line)
1
/*
2
 * Copyright (c) 2016, Alliance for Open Media. All rights reserved.
3
 *
4
 * This source code is subject to the terms of the BSD 2 Clause License and
5
 * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
6
 * was not distributed with this source code in the LICENSE file, you can
7
 * obtain it at www.aomedia.org/license/software. If the Alliance for Open
8
 * Media Patent License 1.0 was not distributed with this source code in the
9
 * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
10
 */
11
//
12
// Endian related functions.
13
14
#ifndef AOM_AOM_UTIL_ENDIAN_INL_H_
15
#define AOM_AOM_UTIL_ENDIAN_INL_H_
16
17
#include <stdlib.h>
18
19
#include "config/aom_config.h"
20
21
#include "aom/aom_integer.h"
22
23
#if defined(__GNUC__)
24
#define LOCAL_GCC_VERSION ((__GNUC__ << 8) | __GNUC_MINOR__)
25
#define LOCAL_GCC_PREREQ(maj, min) (LOCAL_GCC_VERSION >= (((maj) << 8) | (min)))
26
#else
27
#define LOCAL_GCC_VERSION 0
28
#define LOCAL_GCC_PREREQ(maj, min) 0
29
#endif
30
31
// handle clang compatibility
32
#ifndef __has_builtin
33
#define __has_builtin(x) 0
34
#endif
35
36
// some endian fix (e.g.: mips-gcc doesn't define __BIG_ENDIAN__)
37
#if !defined(WORDS_BIGENDIAN) &&                   \
38
    (defined(__BIG_ENDIAN__) || defined(_M_PPC) || \
39
     (defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)))
40
#define WORDS_BIGENDIAN
41
#endif
42
43
#if defined(WORDS_BIGENDIAN)
44
#define HToLE32 BSwap32
45
#define HToLE16 BSwap16
46
#define HToBE64(x) (x)
47
#define HToBE32(x) (x)
48
#else
49
#define HToLE32(x) (x)
50
#define HToLE16(x) (x)
51
0
#define HToBE64(X) BSwap64(X)
52
#define HToBE32(X) BSwap32(X)
53
#endif
54
55
#if LOCAL_GCC_PREREQ(4, 8) || __has_builtin(__builtin_bswap16)
56
#define HAVE_BUILTIN_BSWAP16
57
#endif
58
59
#if LOCAL_GCC_PREREQ(4, 3) || __has_builtin(__builtin_bswap32)
60
#define HAVE_BUILTIN_BSWAP32
61
#endif
62
63
#if LOCAL_GCC_PREREQ(4, 3) || __has_builtin(__builtin_bswap64)
64
#define HAVE_BUILTIN_BSWAP64
65
#endif
66
67
0
static inline uint16_t BSwap16(uint16_t x) {
68
0
#if defined(HAVE_BUILTIN_BSWAP16)
69
0
  return __builtin_bswap16(x);
70
0
#elif defined(_MSC_VER)
71
0
  return _byteswap_ushort(x);
72
0
#else
73
0
  // gcc will recognize a 'rorw $8, ...' here:
74
0
  return (x >> 8) | ((x & 0xff) << 8);
75
0
#endif  // HAVE_BUILTIN_BSWAP16
76
0
}
Unexecuted instantiation: av1_cx_iface.c:BSwap16
Unexecuted instantiation: allintra_vis.c:BSwap16
Unexecuted instantiation: av1_quantize.c:BSwap16
Unexecuted instantiation: bitstream.c:BSwap16
Unexecuted instantiation: context_tree.c:BSwap16
Unexecuted instantiation: encodeframe.c:BSwap16
Unexecuted instantiation: encodeframe_utils.c:BSwap16
Unexecuted instantiation: encodemb.c:BSwap16
Unexecuted instantiation: encodemv.c:BSwap16
Unexecuted instantiation: encoder.c:BSwap16
Unexecuted instantiation: encoder_utils.c:BSwap16
Unexecuted instantiation: encodetxb.c:BSwap16
Unexecuted instantiation: ethread.c:BSwap16
Unexecuted instantiation: firstpass.c:BSwap16
Unexecuted instantiation: global_motion_facade.c:BSwap16
Unexecuted instantiation: level.c:BSwap16
Unexecuted instantiation: lookahead.c:BSwap16
Unexecuted instantiation: mcomp.c:BSwap16
Unexecuted instantiation: mv_prec.c:BSwap16
Unexecuted instantiation: palette.c:BSwap16
Unexecuted instantiation: partition_search.c:BSwap16
Unexecuted instantiation: partition_strategy.c:BSwap16
Unexecuted instantiation: pass2_strategy.c:BSwap16
Unexecuted instantiation: pickcdef.c:BSwap16
Unexecuted instantiation: picklpf.c:BSwap16
Unexecuted instantiation: pickrst.c:BSwap16
Unexecuted instantiation: ratectrl.c:BSwap16
Unexecuted instantiation: rd.c:BSwap16
Unexecuted instantiation: rdopt.c:BSwap16
Unexecuted instantiation: nonrd_pickmode.c:BSwap16
Unexecuted instantiation: nonrd_opt.c:BSwap16
Unexecuted instantiation: segmentation.c:BSwap16
Unexecuted instantiation: speed_features.c:BSwap16
Unexecuted instantiation: superres_scale.c:BSwap16
Unexecuted instantiation: svc_layercontext.c:BSwap16
Unexecuted instantiation: temporal_filter.c:BSwap16
Unexecuted instantiation: tokenize.c:BSwap16
Unexecuted instantiation: tpl_model.c:BSwap16
Unexecuted instantiation: tx_search.c:BSwap16
Unexecuted instantiation: txb_rdopt.c:BSwap16
Unexecuted instantiation: intra_mode_search.c:BSwap16
Unexecuted instantiation: var_based_part.c:BSwap16
Unexecuted instantiation: av1_noise_estimate.c:BSwap16
Unexecuted instantiation: bitwriter.c:BSwap16
Unexecuted instantiation: entenc.c:BSwap16
Unexecuted instantiation: binary_codes_writer.c:BSwap16
Unexecuted instantiation: aq_complexity.c:BSwap16
Unexecuted instantiation: aq_cyclicrefresh.c:BSwap16
Unexecuted instantiation: aq_variance.c:BSwap16
Unexecuted instantiation: compound_type.c:BSwap16
Unexecuted instantiation: encode_strategy.c:BSwap16
Unexecuted instantiation: global_motion.c:BSwap16
Unexecuted instantiation: gop_structure.c:BSwap16
Unexecuted instantiation: interp_search.c:BSwap16
Unexecuted instantiation: motion_search_facade.c:BSwap16
77
78
0
static inline uint32_t BSwap32(uint32_t x) {
79
0
#if defined(HAVE_BUILTIN_BSWAP32)
80
0
  return __builtin_bswap32(x);
81
0
#elif defined(__i386__) || defined(__x86_64__)
82
0
  uint32_t swapped_bytes;
83
0
  __asm__ volatile("bswap %0" : "=r"(swapped_bytes) : "0"(x));
84
0
  return swapped_bytes;
85
0
#elif defined(_MSC_VER)
86
0
  return (uint32_t)_byteswap_ulong(x);
87
0
#else
88
0
  return (x >> 24) | ((x >> 8) & 0xff00) | ((x << 8) & 0xff0000) | (x << 24);
89
0
#endif  // HAVE_BUILTIN_BSWAP32
90
0
}
Unexecuted instantiation: av1_cx_iface.c:BSwap32
Unexecuted instantiation: allintra_vis.c:BSwap32
Unexecuted instantiation: av1_quantize.c:BSwap32
Unexecuted instantiation: bitstream.c:BSwap32
Unexecuted instantiation: context_tree.c:BSwap32
Unexecuted instantiation: encodeframe.c:BSwap32
Unexecuted instantiation: encodeframe_utils.c:BSwap32
Unexecuted instantiation: encodemb.c:BSwap32
Unexecuted instantiation: encodemv.c:BSwap32
Unexecuted instantiation: encoder.c:BSwap32
Unexecuted instantiation: encoder_utils.c:BSwap32
Unexecuted instantiation: encodetxb.c:BSwap32
Unexecuted instantiation: ethread.c:BSwap32
Unexecuted instantiation: firstpass.c:BSwap32
Unexecuted instantiation: global_motion_facade.c:BSwap32
Unexecuted instantiation: level.c:BSwap32
Unexecuted instantiation: lookahead.c:BSwap32
Unexecuted instantiation: mcomp.c:BSwap32
Unexecuted instantiation: mv_prec.c:BSwap32
Unexecuted instantiation: palette.c:BSwap32
Unexecuted instantiation: partition_search.c:BSwap32
Unexecuted instantiation: partition_strategy.c:BSwap32
Unexecuted instantiation: pass2_strategy.c:BSwap32
Unexecuted instantiation: pickcdef.c:BSwap32
Unexecuted instantiation: picklpf.c:BSwap32
Unexecuted instantiation: pickrst.c:BSwap32
Unexecuted instantiation: ratectrl.c:BSwap32
Unexecuted instantiation: rd.c:BSwap32
Unexecuted instantiation: rdopt.c:BSwap32
Unexecuted instantiation: nonrd_pickmode.c:BSwap32
Unexecuted instantiation: nonrd_opt.c:BSwap32
Unexecuted instantiation: segmentation.c:BSwap32
Unexecuted instantiation: speed_features.c:BSwap32
Unexecuted instantiation: superres_scale.c:BSwap32
Unexecuted instantiation: svc_layercontext.c:BSwap32
Unexecuted instantiation: temporal_filter.c:BSwap32
Unexecuted instantiation: tokenize.c:BSwap32
Unexecuted instantiation: tpl_model.c:BSwap32
Unexecuted instantiation: tx_search.c:BSwap32
Unexecuted instantiation: txb_rdopt.c:BSwap32
Unexecuted instantiation: intra_mode_search.c:BSwap32
Unexecuted instantiation: var_based_part.c:BSwap32
Unexecuted instantiation: av1_noise_estimate.c:BSwap32
Unexecuted instantiation: bitwriter.c:BSwap32
Unexecuted instantiation: entenc.c:BSwap32
Unexecuted instantiation: binary_codes_writer.c:BSwap32
Unexecuted instantiation: aq_complexity.c:BSwap32
Unexecuted instantiation: aq_cyclicrefresh.c:BSwap32
Unexecuted instantiation: aq_variance.c:BSwap32
Unexecuted instantiation: compound_type.c:BSwap32
Unexecuted instantiation: encode_strategy.c:BSwap32
Unexecuted instantiation: global_motion.c:BSwap32
Unexecuted instantiation: gop_structure.c:BSwap32
Unexecuted instantiation: interp_search.c:BSwap32
Unexecuted instantiation: motion_search_facade.c:BSwap32
91
92
0
static inline uint64_t BSwap64(uint64_t x) {
93
0
#if defined(HAVE_BUILTIN_BSWAP64)
94
0
  return __builtin_bswap64(x);
95
#elif defined(__x86_64__)
96
  uint64_t swapped_bytes;
97
  __asm__ volatile("bswapq %0" : "=r"(swapped_bytes) : "0"(x));
98
  return swapped_bytes;
99
#elif defined(_MSC_VER)
100
  return (uint64_t)_byteswap_uint64(x);
101
#else   // generic code for swapping 64-bit values (suggested by bdb@)
102
  x = ((x & 0xffffffff00000000ull) >> 32) | ((x & 0x00000000ffffffffull) << 32);
103
  x = ((x & 0xffff0000ffff0000ull) >> 16) | ((x & 0x0000ffff0000ffffull) << 16);
104
  x = ((x & 0xff00ff00ff00ff00ull) >> 8) | ((x & 0x00ff00ff00ff00ffull) << 8);
105
  return x;
106
#endif  // HAVE_BUILTIN_BSWAP64
107
0
}
Unexecuted instantiation: av1_cx_iface.c:BSwap64
Unexecuted instantiation: allintra_vis.c:BSwap64
Unexecuted instantiation: av1_quantize.c:BSwap64
Unexecuted instantiation: bitstream.c:BSwap64
Unexecuted instantiation: context_tree.c:BSwap64
Unexecuted instantiation: encodeframe.c:BSwap64
Unexecuted instantiation: encodeframe_utils.c:BSwap64
Unexecuted instantiation: encodemb.c:BSwap64
Unexecuted instantiation: encodemv.c:BSwap64
Unexecuted instantiation: encoder.c:BSwap64
Unexecuted instantiation: encoder_utils.c:BSwap64
Unexecuted instantiation: encodetxb.c:BSwap64
Unexecuted instantiation: ethread.c:BSwap64
Unexecuted instantiation: firstpass.c:BSwap64
Unexecuted instantiation: global_motion_facade.c:BSwap64
Unexecuted instantiation: level.c:BSwap64
Unexecuted instantiation: lookahead.c:BSwap64
Unexecuted instantiation: mcomp.c:BSwap64
Unexecuted instantiation: mv_prec.c:BSwap64
Unexecuted instantiation: palette.c:BSwap64
Unexecuted instantiation: partition_search.c:BSwap64
Unexecuted instantiation: partition_strategy.c:BSwap64
Unexecuted instantiation: pass2_strategy.c:BSwap64
Unexecuted instantiation: pickcdef.c:BSwap64
Unexecuted instantiation: picklpf.c:BSwap64
Unexecuted instantiation: pickrst.c:BSwap64
Unexecuted instantiation: ratectrl.c:BSwap64
Unexecuted instantiation: rd.c:BSwap64
Unexecuted instantiation: rdopt.c:BSwap64
Unexecuted instantiation: nonrd_pickmode.c:BSwap64
Unexecuted instantiation: nonrd_opt.c:BSwap64
Unexecuted instantiation: segmentation.c:BSwap64
Unexecuted instantiation: speed_features.c:BSwap64
Unexecuted instantiation: superres_scale.c:BSwap64
Unexecuted instantiation: svc_layercontext.c:BSwap64
Unexecuted instantiation: temporal_filter.c:BSwap64
Unexecuted instantiation: tokenize.c:BSwap64
Unexecuted instantiation: tpl_model.c:BSwap64
Unexecuted instantiation: tx_search.c:BSwap64
Unexecuted instantiation: txb_rdopt.c:BSwap64
Unexecuted instantiation: intra_mode_search.c:BSwap64
Unexecuted instantiation: var_based_part.c:BSwap64
Unexecuted instantiation: av1_noise_estimate.c:BSwap64
Unexecuted instantiation: bitwriter.c:BSwap64
Unexecuted instantiation: entenc.c:BSwap64
Unexecuted instantiation: binary_codes_writer.c:BSwap64
Unexecuted instantiation: aq_complexity.c:BSwap64
Unexecuted instantiation: aq_cyclicrefresh.c:BSwap64
Unexecuted instantiation: aq_variance.c:BSwap64
Unexecuted instantiation: compound_type.c:BSwap64
Unexecuted instantiation: encode_strategy.c:BSwap64
Unexecuted instantiation: global_motion.c:BSwap64
Unexecuted instantiation: gop_structure.c:BSwap64
Unexecuted instantiation: interp_search.c:BSwap64
Unexecuted instantiation: motion_search_facade.c:BSwap64
108
109
#endif  // AOM_AOM_UTIL_ENDIAN_INL_H_