Coverage Report

Created: 2026-10-28 07:01

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/avm/avm_ports/mem_ops_aligned.h
Line
Count
Source
1
/*
2
 * Copyright (c) 2021, Alliance for Open Media. All rights reserved
3
 *
4
 * This source code is subject to the terms of the BSD 3-Clause Clear License
5
 * and the Alliance for Open Media Patent License 1.0. If the BSD 3-Clause Clear
6
 * License was not distributed with this source code in the LICENSE file, you
7
 * can obtain it at aomedia.org/license/software-license/bsd-3-c-c/.  If the
8
 * Alliance for Open Media Patent License 1.0 was not distributed with this
9
 * source code in the PATENTS file, you can obtain it at
10
 * aomedia.org/license/patent-license/.
11
 */
12
13
#ifndef AVM_AVM_PORTS_MEM_OPS_ALIGNED_H_
14
#define AVM_AVM_PORTS_MEM_OPS_ALIGNED_H_
15
16
#include "avm/avm_integer.h"
17
18
/* \file
19
 * \brief Provides portable memory access primitives for operating on aligned
20
 *        data
21
 *
22
 * This file is split from mem_ops.h for easier maintenance. See mem_ops.h
23
 * for a more detailed description of these primitives.
24
 */
25
#ifndef INCLUDED_BY_MEM_OPS_H
26
#error Include mem_ops.h, not mem_ops_aligned.h directly.
27
#endif
28
29
/* Architectures that provide instructions for doing this byte swapping
30
 * could redefine these macros.
31
 */
32
#define swap_endian_16(val, raw)                                     \
33
  do {                                                               \
34
    val = (uint16_t)(((raw >> 8) & 0x00ff) | ((raw << 8) & 0xff00)); \
35
  } while (0)
36
#define swap_endian_32(val, raw)                                   \
37
  do {                                                             \
38
    val = ((raw >> 24) & 0x000000ff) | ((raw >> 8) & 0x0000ff00) | \
39
          ((raw << 8) & 0x00ff0000) | ((raw << 24) & 0xff000000);  \
40
  } while (0)
41
#define swap_endian_16_se(val, raw) \
42
  do {                              \
43
    swap_endian_16(val, raw);       \
44
    val = ((val << 16) >> 16);      \
45
  } while (0)
46
#define swap_endian_32_se(val, raw) swap_endian_32(val, raw)
47
48
#define mem_get_ne_aligned_generic(end, sz)                           \
49
  static AVM_INLINE unsigned MEM_VALUE_T mem_get_##end##sz##_aligned( \
50
0
      const void *vmem) {                                             \
51
0
    const uint##sz##_t *mem = (const uint##sz##_t *)vmem;             \
52
0
    return *mem;                                                      \
53
0
  }
Unexecuted instantiation: av2_dec_fuzzer.cc:mem_get_le16_aligned_as_int(void const*)
Unexecuted instantiation: av2_dec_fuzzer.cc:mem_get_le32_aligned_as_int(void const*)
Unexecuted instantiation: av2_dx_iface.c:mem_get_le16_aligned_as_int
Unexecuted instantiation: av2_dx_iface.c:mem_get_le32_aligned_as_int
Unexecuted instantiation: decodeframe.c:mem_get_le16_aligned_as_int
Unexecuted instantiation: decodeframe.c:mem_get_le32_aligned_as_int
Unexecuted instantiation: obu_fgm.c:mem_get_le16_aligned_as_int
Unexecuted instantiation: obu_fgm.c:mem_get_le32_aligned_as_int
Unexecuted instantiation: obu.c:mem_get_le16_aligned_as_int
Unexecuted instantiation: obu.c:mem_get_le32_aligned_as_int
Unexecuted instantiation: obu_ci.c:mem_get_le16_aligned_as_int
Unexecuted instantiation: obu_ci.c:mem_get_le32_aligned_as_int
Unexecuted instantiation: obu_buf.c:mem_get_le16_aligned_as_int
Unexecuted instantiation: obu_buf.c:mem_get_le32_aligned_as_int
Unexecuted instantiation: obu_qm.c:mem_get_le16_aligned_as_int
Unexecuted instantiation: obu_qm.c:mem_get_le32_aligned_as_int
54
55
#define mem_get_sne_aligned_generic(end, sz)                         \
56
  static AVM_INLINE signed MEM_VALUE_T mem_get_s##end##sz##_aligned( \
57
0
      const void *vmem) {                                            \
58
0
    const int##sz##_t *mem = (const int##sz##_t *)vmem;              \
59
0
    return *mem;                                                     \
60
0
  }
Unexecuted instantiation: av2_dec_fuzzer.cc:mem_get_sle16_aligned_as_int(void const*)
Unexecuted instantiation: av2_dec_fuzzer.cc:mem_get_sle32_aligned_as_int(void const*)
Unexecuted instantiation: av2_dx_iface.c:mem_get_sle16_aligned_as_int
Unexecuted instantiation: av2_dx_iface.c:mem_get_sle32_aligned_as_int
Unexecuted instantiation: decodeframe.c:mem_get_sle16_aligned_as_int
Unexecuted instantiation: decodeframe.c:mem_get_sle32_aligned_as_int
Unexecuted instantiation: obu_fgm.c:mem_get_sle16_aligned_as_int
Unexecuted instantiation: obu_fgm.c:mem_get_sle32_aligned_as_int
Unexecuted instantiation: obu.c:mem_get_sle16_aligned_as_int
Unexecuted instantiation: obu.c:mem_get_sle32_aligned_as_int
Unexecuted instantiation: obu_ci.c:mem_get_sle16_aligned_as_int
Unexecuted instantiation: obu_ci.c:mem_get_sle32_aligned_as_int
Unexecuted instantiation: obu_buf.c:mem_get_sle16_aligned_as_int
Unexecuted instantiation: obu_buf.c:mem_get_sle32_aligned_as_int
Unexecuted instantiation: obu_qm.c:mem_get_sle16_aligned_as_int
Unexecuted instantiation: obu_qm.c:mem_get_sle32_aligned_as_int
61
62
#define mem_get_se_aligned_generic(end, sz)                           \
63
  static AVM_INLINE unsigned MEM_VALUE_T mem_get_##end##sz##_aligned( \
64
0
      const void *vmem) {                                             \
65
0
    const uint##sz##_t *mem = (const uint##sz##_t *)vmem;             \
66
0
    unsigned MEM_VALUE_T val, raw = *mem;                             \
67
0
    swap_endian_##sz(val, raw);                                       \
68
0
    return val;                                                       \
69
0
  }
Unexecuted instantiation: av2_dec_fuzzer.cc:mem_get_be16_aligned_as_int(void const*)
Unexecuted instantiation: av2_dec_fuzzer.cc:mem_get_be32_aligned_as_int(void const*)
Unexecuted instantiation: av2_dx_iface.c:mem_get_be16_aligned_as_int
Unexecuted instantiation: av2_dx_iface.c:mem_get_be32_aligned_as_int
Unexecuted instantiation: decodeframe.c:mem_get_be16_aligned_as_int
Unexecuted instantiation: decodeframe.c:mem_get_be32_aligned_as_int
Unexecuted instantiation: obu_fgm.c:mem_get_be16_aligned_as_int
Unexecuted instantiation: obu_fgm.c:mem_get_be32_aligned_as_int
Unexecuted instantiation: obu.c:mem_get_be16_aligned_as_int
Unexecuted instantiation: obu.c:mem_get_be32_aligned_as_int
Unexecuted instantiation: obu_ci.c:mem_get_be16_aligned_as_int
Unexecuted instantiation: obu_ci.c:mem_get_be32_aligned_as_int
Unexecuted instantiation: obu_buf.c:mem_get_be16_aligned_as_int
Unexecuted instantiation: obu_buf.c:mem_get_be32_aligned_as_int
Unexecuted instantiation: obu_qm.c:mem_get_be16_aligned_as_int
Unexecuted instantiation: obu_qm.c:mem_get_be32_aligned_as_int
70
71
#define mem_get_sse_aligned_generic(end, sz)                         \
72
  static AVM_INLINE signed MEM_VALUE_T mem_get_s##end##sz##_aligned( \
73
0
      const void *vmem) {                                            \
74
0
    const int##sz##_t *mem = (const int##sz##_t *)vmem;              \
75
0
    unsigned MEM_VALUE_T val, raw = *mem;                            \
76
0
    swap_endian_##sz##_se(val, raw);                                 \
77
0
    return val;                                                      \
78
0
  }
Unexecuted instantiation: av2_dec_fuzzer.cc:mem_get_sbe16_aligned_as_int(void const*)
Unexecuted instantiation: av2_dec_fuzzer.cc:mem_get_sbe32_aligned_as_int(void const*)
Unexecuted instantiation: av2_dx_iface.c:mem_get_sbe16_aligned_as_int
Unexecuted instantiation: av2_dx_iface.c:mem_get_sbe32_aligned_as_int
Unexecuted instantiation: decodeframe.c:mem_get_sbe16_aligned_as_int
Unexecuted instantiation: decodeframe.c:mem_get_sbe32_aligned_as_int
Unexecuted instantiation: obu_fgm.c:mem_get_sbe16_aligned_as_int
Unexecuted instantiation: obu_fgm.c:mem_get_sbe32_aligned_as_int
Unexecuted instantiation: obu.c:mem_get_sbe16_aligned_as_int
Unexecuted instantiation: obu.c:mem_get_sbe32_aligned_as_int
Unexecuted instantiation: obu_ci.c:mem_get_sbe16_aligned_as_int
Unexecuted instantiation: obu_ci.c:mem_get_sbe32_aligned_as_int
Unexecuted instantiation: obu_buf.c:mem_get_sbe16_aligned_as_int
Unexecuted instantiation: obu_buf.c:mem_get_sbe32_aligned_as_int
Unexecuted instantiation: obu_qm.c:mem_get_sbe16_aligned_as_int
Unexecuted instantiation: obu_qm.c:mem_get_sbe32_aligned_as_int
79
80
#define mem_put_ne_aligned_generic(end, sz)                             \
81
  static AVM_INLINE void mem_put_##end##sz##_aligned(void *vmem,        \
82
0
                                                     MEM_VALUE_T val) { \
83
0
    uint##sz##_t *mem = (uint##sz##_t *)vmem;                           \
84
0
    *mem = (uint##sz##_t)val;                                           \
85
0
  }
Unexecuted instantiation: av2_dec_fuzzer.cc:mem_put_le16_aligned_as_int(void*, int)
Unexecuted instantiation: av2_dec_fuzzer.cc:mem_put_le32_aligned_as_int(void*, int)
Unexecuted instantiation: av2_dx_iface.c:mem_put_le16_aligned_as_int
Unexecuted instantiation: av2_dx_iface.c:mem_put_le32_aligned_as_int
Unexecuted instantiation: decodeframe.c:mem_put_le16_aligned_as_int
Unexecuted instantiation: decodeframe.c:mem_put_le32_aligned_as_int
Unexecuted instantiation: obu_fgm.c:mem_put_le16_aligned_as_int
Unexecuted instantiation: obu_fgm.c:mem_put_le32_aligned_as_int
Unexecuted instantiation: obu.c:mem_put_le16_aligned_as_int
Unexecuted instantiation: obu.c:mem_put_le32_aligned_as_int
Unexecuted instantiation: obu_ci.c:mem_put_le16_aligned_as_int
Unexecuted instantiation: obu_ci.c:mem_put_le32_aligned_as_int
Unexecuted instantiation: obu_buf.c:mem_put_le16_aligned_as_int
Unexecuted instantiation: obu_buf.c:mem_put_le32_aligned_as_int
Unexecuted instantiation: obu_qm.c:mem_put_le16_aligned_as_int
Unexecuted instantiation: obu_qm.c:mem_put_le32_aligned_as_int
86
87
#define mem_put_se_aligned_generic(end, sz)                             \
88
  static AVM_INLINE void mem_put_##end##sz##_aligned(void *vmem,        \
89
0
                                                     MEM_VALUE_T val) { \
90
0
    uint##sz##_t *mem = (uint##sz##_t *)vmem, raw;                      \
91
0
    swap_endian_##sz(raw, val);                                         \
92
0
    *mem = (uint##sz##_t)raw;                                           \
93
0
  }
Unexecuted instantiation: av2_dec_fuzzer.cc:mem_put_be16_aligned_as_int(void*, int)
Unexecuted instantiation: av2_dec_fuzzer.cc:mem_put_be32_aligned_as_int(void*, int)
Unexecuted instantiation: av2_dx_iface.c:mem_put_be16_aligned_as_int
Unexecuted instantiation: av2_dx_iface.c:mem_put_be32_aligned_as_int
Unexecuted instantiation: decodeframe.c:mem_put_be16_aligned_as_int
Unexecuted instantiation: decodeframe.c:mem_put_be32_aligned_as_int
Unexecuted instantiation: obu_fgm.c:mem_put_be16_aligned_as_int
Unexecuted instantiation: obu_fgm.c:mem_put_be32_aligned_as_int
Unexecuted instantiation: obu.c:mem_put_be16_aligned_as_int
Unexecuted instantiation: obu.c:mem_put_be32_aligned_as_int
Unexecuted instantiation: obu_ci.c:mem_put_be16_aligned_as_int
Unexecuted instantiation: obu_ci.c:mem_put_be32_aligned_as_int
Unexecuted instantiation: obu_buf.c:mem_put_be16_aligned_as_int
Unexecuted instantiation: obu_buf.c:mem_put_be32_aligned_as_int
Unexecuted instantiation: obu_qm.c:mem_put_be16_aligned_as_int
Unexecuted instantiation: obu_qm.c:mem_put_be32_aligned_as_int
94
95
#include "config/avm_config.h"
96
97
#if CONFIG_BIG_ENDIAN
98
#define mem_get_be_aligned_generic(sz) mem_get_ne_aligned_generic(be, sz)
99
#define mem_get_sbe_aligned_generic(sz) mem_get_sne_aligned_generic(be, sz)
100
#define mem_get_le_aligned_generic(sz) mem_get_se_aligned_generic(le, sz)
101
#define mem_get_sle_aligned_generic(sz) mem_get_sse_aligned_generic(le, sz)
102
#define mem_put_be_aligned_generic(sz) mem_put_ne_aligned_generic(be, sz)
103
#define mem_put_le_aligned_generic(sz) mem_put_se_aligned_generic(le, sz)
104
#else
105
#define mem_get_be_aligned_generic(sz) mem_get_se_aligned_generic(be, sz)
106
#define mem_get_sbe_aligned_generic(sz) mem_get_sse_aligned_generic(be, sz)
107
#define mem_get_le_aligned_generic(sz) mem_get_ne_aligned_generic(le, sz)
108
#define mem_get_sle_aligned_generic(sz) mem_get_sne_aligned_generic(le, sz)
109
#define mem_put_be_aligned_generic(sz) mem_put_se_aligned_generic(be, sz)
110
#define mem_put_le_aligned_generic(sz) mem_put_ne_aligned_generic(le, sz)
111
#endif
112
113
/* clang-format off */
114
#undef  mem_get_be16_aligned
115
#define mem_get_be16_aligned mem_ops_wrap_symbol(mem_get_be16_aligned)
116
mem_get_be_aligned_generic(16)
117
118
#undef  mem_get_be32_aligned
119
#define mem_get_be32_aligned mem_ops_wrap_symbol(mem_get_be32_aligned)
120
mem_get_be_aligned_generic(32)
121
122
#undef  mem_get_le16_aligned
123
#define mem_get_le16_aligned mem_ops_wrap_symbol(mem_get_le16_aligned)
124
mem_get_le_aligned_generic(16)
125
126
#undef  mem_get_le32_aligned
127
#define mem_get_le32_aligned mem_ops_wrap_symbol(mem_get_le32_aligned)
128
mem_get_le_aligned_generic(32)
129
130
#undef  mem_get_sbe16_aligned
131
#define mem_get_sbe16_aligned mem_ops_wrap_symbol(mem_get_sbe16_aligned)
132
mem_get_sbe_aligned_generic(16)
133
134
#undef  mem_get_sbe32_aligned
135
#define mem_get_sbe32_aligned mem_ops_wrap_symbol(mem_get_sbe32_aligned)
136
mem_get_sbe_aligned_generic(32)
137
138
#undef  mem_get_sle16_aligned
139
#define mem_get_sle16_aligned mem_ops_wrap_symbol(mem_get_sle16_aligned)
140
mem_get_sle_aligned_generic(16)
141
142
#undef  mem_get_sle32_aligned
143
#define mem_get_sle32_aligned mem_ops_wrap_symbol(mem_get_sle32_aligned)
144
mem_get_sle_aligned_generic(32)
145
146
#undef  mem_put_be16_aligned
147
#define mem_put_be16_aligned mem_ops_wrap_symbol(mem_put_be16_aligned)
148
mem_put_be_aligned_generic(16)
149
150
#undef  mem_put_be32_aligned
151
#define mem_put_be32_aligned mem_ops_wrap_symbol(mem_put_be32_aligned)
152
mem_put_be_aligned_generic(32)
153
154
#undef  mem_put_le16_aligned
155
#define mem_put_le16_aligned mem_ops_wrap_symbol(mem_put_le16_aligned)
156
mem_put_le_aligned_generic(16)
157
158
#undef  mem_put_le32_aligned
159
#define mem_put_le32_aligned mem_ops_wrap_symbol(mem_put_le32_aligned)
160
mem_put_le_aligned_generic(32)
161
162
#undef mem_get_ne_aligned_generic
163
#undef mem_get_se_aligned_generic
164
#undef mem_get_sne_aligned_generic
165
#undef mem_get_sse_aligned_generic
166
#undef mem_put_ne_aligned_generic
167
#undef mem_put_se_aligned_generic
168
#undef swap_endian_16
169
#undef swap_endian_32
170
#undef swap_endian_16_se
171
#undef swap_endian_32_se
172
/* clang-format on */
173
174
#endif  // AVM_AVM_PORTS_MEM_OPS_ALIGNED_H_