Coverage Report

Created: 2025-06-13 07:07

/src/aom/aom_ports/mem_ops.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
#ifndef AOM_AOM_PORTS_MEM_OPS_H_
13
#define AOM_AOM_PORTS_MEM_OPS_H_
14
15
/* \file
16
 * \brief Provides portable memory access primitives
17
 *
18
 * This function provides portable primitives for getting and setting of
19
 * signed and unsigned integers in 16, 24, and 32 bit sizes. The operations
20
 * can be performed on unaligned data regardless of hardware support for
21
 * unaligned accesses.
22
 *
23
 * The type used to pass the integral values may be changed by defining
24
 * MEM_VALUE_T with the appropriate type. The type given must be an integral
25
 * numeric type.
26
 *
27
 * The actual functions instantiated have the MEM_VALUE_T type name pasted
28
 * on to the symbol name. This allows the developer to instantiate these
29
 * operations for multiple types within the same translation unit. This is
30
 * of somewhat questionable utility, but the capability exists nonetheless.
31
 * Users not making use of this functionality should call the functions
32
 * without the type name appended, and the preprocessor will take care of
33
 * it.
34
 *
35
 * NOTE: This code is not supported on platforms where char > 1 octet ATM.
36
 */
37
38
#ifndef MAU_T
39
/* Minimum Access Unit for this target */
40
#define MAU_T unsigned char
41
#endif
42
43
#ifndef MEM_VALUE_T
44
#define MEM_VALUE_T int
45
#endif
46
47
#undef MEM_VALUE_T_SZ_BITS
48
#define MEM_VALUE_T_SZ_BITS (sizeof(MEM_VALUE_T) << 3)
49
50
#undef mem_ops_wrap_symbol
51
301k
#define mem_ops_wrap_symbol(fn) mem_ops_wrap_symbol2(fn, MEM_VALUE_T)
52
#undef mem_ops_wrap_symbol2
53
301k
#define mem_ops_wrap_symbol2(fn, typ) mem_ops_wrap_symbol3(fn, typ)
54
#undef mem_ops_wrap_symbol3
55
301k
#define mem_ops_wrap_symbol3(fn, typ) fn##_as_##typ
56
57
/*
58
 * Include aligned access routines
59
 */
60
#define INCLUDED_BY_MEM_OPS_H
61
#include "mem_ops_aligned.h"
62
#undef INCLUDED_BY_MEM_OPS_H
63
64
#undef mem_get_be16
65
#define mem_get_be16 mem_ops_wrap_symbol(mem_get_be16)
66
0
static unsigned MEM_VALUE_T mem_get_be16(const void *vmem) {
67
0
  unsigned MEM_VALUE_T val;
68
0
  const MAU_T *mem = (const MAU_T *)vmem;
69
0
70
0
  val = mem[0] << 8;
71
0
  val |= mem[1];
72
0
  return val;
73
0
}
Unexecuted instantiation: av1_dec_fuzzer.cc:mem_get_be16_as_int(void const*)
Unexecuted instantiation: av1_dx_iface.c:mem_get_be16_as_int
Unexecuted instantiation: decodeframe.c:mem_get_be16_as_int
Unexecuted instantiation: obu.c:mem_get_be16_as_int
74
75
#undef mem_get_be24
76
#define mem_get_be24 mem_ops_wrap_symbol(mem_get_be24)
77
0
static unsigned MEM_VALUE_T mem_get_be24(const void *vmem) {
78
0
  unsigned MEM_VALUE_T val;
79
0
  const MAU_T *mem = (const MAU_T *)vmem;
80
0
81
0
  val = mem[0] << 16;
82
0
  val |= mem[1] << 8;
83
0
  val |= mem[2];
84
0
  return val;
85
0
}
Unexecuted instantiation: av1_dec_fuzzer.cc:mem_get_be24_as_int(void const*)
Unexecuted instantiation: av1_dx_iface.c:mem_get_be24_as_int
Unexecuted instantiation: decodeframe.c:mem_get_be24_as_int
Unexecuted instantiation: obu.c:mem_get_be24_as_int
86
87
#undef mem_get_be32
88
#define mem_get_be32 mem_ops_wrap_symbol(mem_get_be32)
89
0
static unsigned MEM_VALUE_T mem_get_be32(const void *vmem) {
90
0
  unsigned MEM_VALUE_T val;
91
0
  const MAU_T *mem = (const MAU_T *)vmem;
92
0
93
0
  val = ((unsigned MEM_VALUE_T)mem[0]) << 24;
94
0
  val |= mem[1] << 16;
95
0
  val |= mem[2] << 8;
96
0
  val |= mem[3];
97
0
  return val;
98
0
}
Unexecuted instantiation: av1_dec_fuzzer.cc:mem_get_be32_as_int(void const*)
Unexecuted instantiation: av1_dx_iface.c:mem_get_be32_as_int
Unexecuted instantiation: decodeframe.c:mem_get_be32_as_int
Unexecuted instantiation: obu.c:mem_get_be32_as_int
99
100
#undef mem_get_le16
101
7.03k
#define mem_get_le16 mem_ops_wrap_symbol(mem_get_le16)
102
7.03k
static unsigned MEM_VALUE_T mem_get_le16(const void *vmem) {
103
7.03k
  unsigned MEM_VALUE_T val;
104
7.03k
  const MAU_T *mem = (const MAU_T *)vmem;
105
106
7.03k
  val = mem[1] << 8;
107
7.03k
  val |= mem[0];
108
7.03k
  return val;
109
7.03k
}
Unexecuted instantiation: av1_dec_fuzzer.cc:mem_get_le16_as_int(void const*)
Unexecuted instantiation: av1_dx_iface.c:mem_get_le16_as_int
decodeframe.c:mem_get_le16_as_int
Line
Count
Source
102
7.03k
static unsigned MEM_VALUE_T mem_get_le16(const void *vmem) {
103
7.03k
  unsigned MEM_VALUE_T val;
104
7.03k
  const MAU_T *mem = (const MAU_T *)vmem;
105
106
7.03k
  val = mem[1] << 8;
107
7.03k
  val |= mem[0];
108
7.03k
  return val;
109
7.03k
}
Unexecuted instantiation: obu.c:mem_get_le16_as_int
110
111
#undef mem_get_le24
112
1.37k
#define mem_get_le24 mem_ops_wrap_symbol(mem_get_le24)
113
1.37k
static unsigned MEM_VALUE_T mem_get_le24(const void *vmem) {
114
1.37k
  unsigned MEM_VALUE_T val;
115
1.37k
  const MAU_T *mem = (const MAU_T *)vmem;
116
117
1.37k
  val = mem[2] << 16;
118
1.37k
  val |= mem[1] << 8;
119
1.37k
  val |= mem[0];
120
1.37k
  return val;
121
1.37k
}
Unexecuted instantiation: av1_dec_fuzzer.cc:mem_get_le24_as_int(void const*)
Unexecuted instantiation: av1_dx_iface.c:mem_get_le24_as_int
decodeframe.c:mem_get_le24_as_int
Line
Count
Source
113
1.37k
static unsigned MEM_VALUE_T mem_get_le24(const void *vmem) {
114
1.37k
  unsigned MEM_VALUE_T val;
115
1.37k
  const MAU_T *mem = (const MAU_T *)vmem;
116
117
1.37k
  val = mem[2] << 16;
118
1.37k
  val |= mem[1] << 8;
119
1.37k
  val |= mem[0];
120
1.37k
  return val;
121
1.37k
}
Unexecuted instantiation: obu.c:mem_get_le24_as_int
122
123
#undef mem_get_le32
124
293k
#define mem_get_le32 mem_ops_wrap_symbol(mem_get_le32)
125
293k
static unsigned MEM_VALUE_T mem_get_le32(const void *vmem) {
126
293k
  unsigned MEM_VALUE_T val;
127
293k
  const MAU_T *mem = (const MAU_T *)vmem;
128
129
293k
  val = ((unsigned MEM_VALUE_T)mem[3]) << 24;
130
293k
  val |= mem[2] << 16;
131
293k
  val |= mem[1] << 8;
132
293k
  val |= mem[0];
133
293k
  return val;
134
293k
}
av1_dec_fuzzer.cc:mem_get_le32_as_int(void const*)
Line
Count
Source
125
292k
static unsigned MEM_VALUE_T mem_get_le32(const void *vmem) {
126
292k
  unsigned MEM_VALUE_T val;
127
292k
  const MAU_T *mem = (const MAU_T *)vmem;
128
129
292k
  val = ((unsigned MEM_VALUE_T)mem[3]) << 24;
130
292k
  val |= mem[2] << 16;
131
292k
  val |= mem[1] << 8;
132
292k
  val |= mem[0];
133
292k
  return val;
134
292k
}
Unexecuted instantiation: av1_dx_iface.c:mem_get_le32_as_int
decodeframe.c:mem_get_le32_as_int
Line
Count
Source
125
1.04k
static unsigned MEM_VALUE_T mem_get_le32(const void *vmem) {
126
1.04k
  unsigned MEM_VALUE_T val;
127
1.04k
  const MAU_T *mem = (const MAU_T *)vmem;
128
129
1.04k
  val = ((unsigned MEM_VALUE_T)mem[3]) << 24;
130
1.04k
  val |= mem[2] << 16;
131
1.04k
  val |= mem[1] << 8;
132
1.04k
  val |= mem[0];
133
1.04k
  return val;
134
1.04k
}
Unexecuted instantiation: obu.c:mem_get_le32_as_int
135
136
#define mem_get_s_generic(end, sz)                                            \
137
0
  static inline signed MEM_VALUE_T mem_get_s##end##sz(const void *vmem) {     \
138
0
    const MAU_T *mem = (const MAU_T *)vmem;                                   \
139
0
    signed MEM_VALUE_T val = mem_get_##end##sz(mem);                          \
140
0
    return (val << (MEM_VALUE_T_SZ_BITS - sz)) >> (MEM_VALUE_T_SZ_BITS - sz); \
141
0
  }
Unexecuted instantiation: av1_dec_fuzzer.cc:mem_get_sbe16_as_int(void const*)
Unexecuted instantiation: av1_dec_fuzzer.cc:mem_get_sbe24_as_int(void const*)
Unexecuted instantiation: av1_dec_fuzzer.cc:mem_get_sbe32_as_int(void const*)
Unexecuted instantiation: av1_dec_fuzzer.cc:mem_get_sle16_as_int(void const*)
Unexecuted instantiation: av1_dec_fuzzer.cc:mem_get_sle24_as_int(void const*)
Unexecuted instantiation: av1_dec_fuzzer.cc:mem_get_sle32_as_int(void const*)
Unexecuted instantiation: av1_dx_iface.c:mem_get_sbe16_as_int
Unexecuted instantiation: av1_dx_iface.c:mem_get_sbe24_as_int
Unexecuted instantiation: av1_dx_iface.c:mem_get_sbe32_as_int
Unexecuted instantiation: av1_dx_iface.c:mem_get_sle16_as_int
Unexecuted instantiation: av1_dx_iface.c:mem_get_sle24_as_int
Unexecuted instantiation: av1_dx_iface.c:mem_get_sle32_as_int
Unexecuted instantiation: decodeframe.c:mem_get_sbe16_as_int
Unexecuted instantiation: decodeframe.c:mem_get_sbe24_as_int
Unexecuted instantiation: decodeframe.c:mem_get_sbe32_as_int
Unexecuted instantiation: decodeframe.c:mem_get_sle16_as_int
Unexecuted instantiation: decodeframe.c:mem_get_sle24_as_int
Unexecuted instantiation: decodeframe.c:mem_get_sle32_as_int
Unexecuted instantiation: obu.c:mem_get_sbe16_as_int
Unexecuted instantiation: obu.c:mem_get_sbe24_as_int
Unexecuted instantiation: obu.c:mem_get_sbe32_as_int
Unexecuted instantiation: obu.c:mem_get_sle16_as_int
Unexecuted instantiation: obu.c:mem_get_sle24_as_int
Unexecuted instantiation: obu.c:mem_get_sle32_as_int
142
143
/* clang-format off */
144
#undef  mem_get_sbe16
145
#define mem_get_sbe16 mem_ops_wrap_symbol(mem_get_sbe16)
146
mem_get_s_generic(be, 16)
147
148
#undef  mem_get_sbe24
149
#define mem_get_sbe24 mem_ops_wrap_symbol(mem_get_sbe24)
150
mem_get_s_generic(be, 24)
151
152
#undef  mem_get_sbe32
153
#define mem_get_sbe32 mem_ops_wrap_symbol(mem_get_sbe32)
154
mem_get_s_generic(be, 32)
155
156
#undef  mem_get_sle16
157
#define mem_get_sle16 mem_ops_wrap_symbol(mem_get_sle16)
158
mem_get_s_generic(le, 16)
159
160
#undef  mem_get_sle24
161
#define mem_get_sle24 mem_ops_wrap_symbol(mem_get_sle24)
162
mem_get_s_generic(le, 24)
163
164
#undef  mem_get_sle32
165
#define mem_get_sle32 mem_ops_wrap_symbol(mem_get_sle32)
166
mem_get_s_generic(le, 32)
167
168
#undef  mem_put_be16
169
#define mem_put_be16 mem_ops_wrap_symbol(mem_put_be16)
170
0
static inline void mem_put_be16(void *vmem, MEM_VALUE_T val) {
171
0
  MAU_T *mem = (MAU_T *)vmem;
172
0
173
0
  mem[0] = (MAU_T)((val >> 8) & 0xff);
174
0
  mem[1] = (MAU_T)((val >> 0) & 0xff);
175
0
}
Unexecuted instantiation: av1_dec_fuzzer.cc:mem_put_be16_as_int(void*, int)
Unexecuted instantiation: av1_dx_iface.c:mem_put_be16_as_int
Unexecuted instantiation: decodeframe.c:mem_put_be16_as_int
Unexecuted instantiation: obu.c:mem_put_be16_as_int
176
177
#undef  mem_put_be24
178
#define mem_put_be24 mem_ops_wrap_symbol(mem_put_be24)
179
0
static inline void mem_put_be24(void *vmem, MEM_VALUE_T val) {
180
0
  MAU_T *mem = (MAU_T *)vmem;
181
0
182
0
  mem[0] = (MAU_T)((val >> 16) & 0xff);
183
0
  mem[1] = (MAU_T)((val >>  8) & 0xff);
184
0
  mem[2] = (MAU_T)((val >>  0) & 0xff);
185
0
}
Unexecuted instantiation: av1_dec_fuzzer.cc:mem_put_be24_as_int(void*, int)
Unexecuted instantiation: av1_dx_iface.c:mem_put_be24_as_int
Unexecuted instantiation: decodeframe.c:mem_put_be24_as_int
Unexecuted instantiation: obu.c:mem_put_be24_as_int
186
187
#undef  mem_put_be32
188
#define mem_put_be32 mem_ops_wrap_symbol(mem_put_be32)
189
0
static inline void mem_put_be32(void *vmem, MEM_VALUE_T val) {
190
0
  MAU_T *mem = (MAU_T *)vmem;
191
0
192
0
  mem[0] = (MAU_T)((val >> 24) & 0xff);
193
0
  mem[1] = (MAU_T)((val >> 16) & 0xff);
194
0
  mem[2] = (MAU_T)((val >>  8) & 0xff);
195
0
  mem[3] = (MAU_T)((val >>  0) & 0xff);
196
0
}
Unexecuted instantiation: av1_dec_fuzzer.cc:mem_put_be32_as_int(void*, int)
Unexecuted instantiation: av1_dx_iface.c:mem_put_be32_as_int
Unexecuted instantiation: decodeframe.c:mem_put_be32_as_int
Unexecuted instantiation: obu.c:mem_put_be32_as_int
197
198
#undef  mem_put_le16
199
#define mem_put_le16 mem_ops_wrap_symbol(mem_put_le16)
200
0
static inline void mem_put_le16(void *vmem, MEM_VALUE_T val) {
201
0
  MAU_T *mem = (MAU_T *)vmem;
202
0
203
0
  mem[0] = (MAU_T)((val >> 0) & 0xff);
204
0
  mem[1] = (MAU_T)((val >> 8) & 0xff);
205
0
}
Unexecuted instantiation: av1_dec_fuzzer.cc:mem_put_le16_as_int(void*, int)
Unexecuted instantiation: av1_dx_iface.c:mem_put_le16_as_int
Unexecuted instantiation: decodeframe.c:mem_put_le16_as_int
Unexecuted instantiation: obu.c:mem_put_le16_as_int
206
207
#undef  mem_put_le24
208
#define mem_put_le24 mem_ops_wrap_symbol(mem_put_le24)
209
0
static inline void mem_put_le24(void *vmem, MEM_VALUE_T val) {
210
0
  MAU_T *mem = (MAU_T *)vmem;
211
0
212
0
  mem[0] = (MAU_T)((val >>  0) & 0xff);
213
0
  mem[1] = (MAU_T)((val >>  8) & 0xff);
214
0
  mem[2] = (MAU_T)((val >> 16) & 0xff);
215
0
}
Unexecuted instantiation: av1_dec_fuzzer.cc:mem_put_le24_as_int(void*, int)
Unexecuted instantiation: av1_dx_iface.c:mem_put_le24_as_int
Unexecuted instantiation: decodeframe.c:mem_put_le24_as_int
Unexecuted instantiation: obu.c:mem_put_le24_as_int
216
217
#undef  mem_put_le32
218
#define mem_put_le32 mem_ops_wrap_symbol(mem_put_le32)
219
0
static inline void mem_put_le32(void *vmem, MEM_VALUE_T val) {
220
0
  MAU_T *mem = (MAU_T *)vmem;
221
0
222
0
  mem[0] = (MAU_T)((val >>  0) & 0xff);
223
0
  mem[1] = (MAU_T)((val >>  8) & 0xff);
224
0
  mem[2] = (MAU_T)((val >> 16) & 0xff);
225
0
  mem[3] = (MAU_T)((val >> 24) & 0xff);
226
0
}
Unexecuted instantiation: av1_dec_fuzzer.cc:mem_put_le32_as_int(void*, int)
Unexecuted instantiation: av1_dx_iface.c:mem_put_le32_as_int
Unexecuted instantiation: decodeframe.c:mem_put_le32_as_int
Unexecuted instantiation: obu.c:mem_put_le32_as_int
227
/* clang-format on */
228
#endif  // AOM_AOM_PORTS_MEM_OPS_H_