annotate intreadwrite.h @ 728:1fa3820b1a84 libavutil

ARM asm for AV_RN*() ARMv6 and later support unaligned loads and stores for single word/halfword but not double/multiple. GCC is ignorant of this and will always use bytewise accesses for unaligned data. Casting to an int32_t pointer is dangerous since a load/store double or multiple instruction might be used (this happens with some code in FFmpeg). Implementing the AV_[RW]* macros with inline asm using only supported instructions gives fast and safe unaligned accesses. ARM RVCT does the right thing with generic code. This gives an overall speedup of up to 10%.
author mru
date Sat, 18 Apr 2009 00:00:28 +0000
parents 98b64f65be0d
children 753953ed8ff0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
263
4a904af6d8f4 Add missing license headers.
diego
parents: 235
diff changeset
1 /*
4a904af6d8f4 Add missing license headers.
diego
parents: 235
diff changeset
2 * This file is part of FFmpeg.
4a904af6d8f4 Add missing license headers.
diego
parents: 235
diff changeset
3 *
4a904af6d8f4 Add missing license headers.
diego
parents: 235
diff changeset
4 * FFmpeg is free software; you can redistribute it and/or
4a904af6d8f4 Add missing license headers.
diego
parents: 235
diff changeset
5 * modify it under the terms of the GNU Lesser General Public
4a904af6d8f4 Add missing license headers.
diego
parents: 235
diff changeset
6 * License as published by the Free Software Foundation; either
4a904af6d8f4 Add missing license headers.
diego
parents: 235
diff changeset
7 * version 2.1 of the License, or (at your option) any later version.
4a904af6d8f4 Add missing license headers.
diego
parents: 235
diff changeset
8 *
4a904af6d8f4 Add missing license headers.
diego
parents: 235
diff changeset
9 * FFmpeg is distributed in the hope that it will be useful,
4a904af6d8f4 Add missing license headers.
diego
parents: 235
diff changeset
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
4a904af6d8f4 Add missing license headers.
diego
parents: 235
diff changeset
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
4a904af6d8f4 Add missing license headers.
diego
parents: 235
diff changeset
12 * Lesser General Public License for more details.
4a904af6d8f4 Add missing license headers.
diego
parents: 235
diff changeset
13 *
4a904af6d8f4 Add missing license headers.
diego
parents: 235
diff changeset
14 * You should have received a copy of the GNU Lesser General Public
4a904af6d8f4 Add missing license headers.
diego
parents: 235
diff changeset
15 * License along with FFmpeg; if not, write to the Free Software
4a904af6d8f4 Add missing license headers.
diego
parents: 235
diff changeset
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
4a904af6d8f4 Add missing license headers.
diego
parents: 235
diff changeset
17 */
4a904af6d8f4 Add missing license headers.
diego
parents: 235
diff changeset
18
567
bd4052d9050c Globally rename the header inclusion guard names.
stefano
parents: 525
diff changeset
19 #ifndef AVUTIL_INTREADWRITE_H
bd4052d9050c Globally rename the header inclusion guard names.
stefano
parents: 525
diff changeset
20 #define AVUTIL_INTREADWRITE_H
152
5b211d03227b Move BE_*/LE_*/ST*/LD* macros to a common place. Some further
reimar
parents:
diff changeset
21
343
f21d1907d47c include all prerequisites in header files
mru
parents: 336
diff changeset
22 #include <stdint.h>
469
bdc8433d739e Add #include "config.h" to headers that need it.
diego
parents: 444
diff changeset
23 #include "config.h"
350
c2034e89e9a2 intreadwrite.h needs bswap.h if HAVE_FAST_UNALIGNED is set, so include it.
reimar
parents: 343
diff changeset
24 #include "bswap.h"
343
f21d1907d47c include all prerequisites in header files
mru
parents: 336
diff changeset
25
727
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
26 /*
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
27 * Arch-specific headers can provide any combination of
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
28 * AV_[RW][BLN](16|32|64) macros. Preprocessor symbols must be
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
29 * defined, even if these are implemented as inline functions.
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
30 */
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
31
728
1fa3820b1a84 ARM asm for AV_RN*()
mru
parents: 727
diff changeset
32 #if ARCH_ARM
1fa3820b1a84 ARM asm for AV_RN*()
mru
parents: 727
diff changeset
33 # include "arm/intreadwrite.h"
1fa3820b1a84 ARM asm for AV_RN*()
mru
parents: 727
diff changeset
34 #endif
727
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
35
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
36 /*
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
37 * Define AV_[RW]N helper macros to simplify definitions not provided
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
38 * by per-arch headers.
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
39 */
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
40
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
41 #if defined(__GNUC__)
152
5b211d03227b Move BE_*/LE_*/ST*/LD* macros to a common place. Some further
reimar
parents:
diff changeset
42
5b211d03227b Move BE_*/LE_*/ST*/LD* macros to a common place. Some further
reimar
parents:
diff changeset
43 struct unaligned_64 { uint64_t l; } __attribute__((packed));
5b211d03227b Move BE_*/LE_*/ST*/LD* macros to a common place. Some further
reimar
parents:
diff changeset
44 struct unaligned_32 { uint32_t l; } __attribute__((packed));
5b211d03227b Move BE_*/LE_*/ST*/LD* macros to a common place. Some further
reimar
parents:
diff changeset
45 struct unaligned_16 { uint16_t l; } __attribute__((packed));
5b211d03227b Move BE_*/LE_*/ST*/LD* macros to a common place. Some further
reimar
parents:
diff changeset
46
727
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
47 # define AV_RN(s, p) (((const struct unaligned_##s *) (p))->l)
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
48 # define AV_WN(s, p, v) (((struct unaligned_##s *) (p))->l) = (v)
152
5b211d03227b Move BE_*/LE_*/ST*/LD* macros to a common place. Some further
reimar
parents:
diff changeset
49
525
0d4beab5e3c9 intreadwrite: support DEC compiler __unaligned type qualifier
mru
parents: 524
diff changeset
50 #elif defined(__DECC)
0d4beab5e3c9 intreadwrite: support DEC compiler __unaligned type qualifier
mru
parents: 524
diff changeset
51
727
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
52 # define AV_RN(s, p) (*((const __unaligned uint##s##_t*)(p)))
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
53 # define AV_WN(s, p, v) *((__unaligned uint##s##_t*)(p)) = (v)
525
0d4beab5e3c9 intreadwrite: support DEC compiler __unaligned type qualifier
mru
parents: 524
diff changeset
54
727
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
55 #elif HAVE_FAST_UNALIGNED
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
56
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
57 # define AV_RN(s, p) (*((const uint##s##_t*)(p)))
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
58 # define AV_WN(s, p, v) *((uint##s##_t*)(p)) = (v)
525
0d4beab5e3c9 intreadwrite: support DEC compiler __unaligned type qualifier
mru
parents: 524
diff changeset
59
0d4beab5e3c9 intreadwrite: support DEC compiler __unaligned type qualifier
mru
parents: 524
diff changeset
60 #else
152
5b211d03227b Move BE_*/LE_*/ST*/LD* macros to a common place. Some further
reimar
parents:
diff changeset
61
727
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
62 #ifndef AV_RB16
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
63 #define AV_RB16(x) ((((const uint8_t*)(x))[0] << 8) | \
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
64 ((const uint8_t*)(x))[1])
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
65 #endif
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
66 #ifndef AV_WB16
336
f340106d09ac Proper fix for r8963
ramiro
parents: 335
diff changeset
67 #define AV_WB16(p, d) do { \
235
ee010796c631 simplify and remove useless index in AV_W*
michael
parents: 232
diff changeset
68 ((uint8_t*)(p))[1] = (d); \
336
f340106d09ac Proper fix for r8963
ramiro
parents: 335
diff changeset
69 ((uint8_t*)(p))[0] = (d)>>8; } while(0)
727
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
70 #endif
232
9845a508ffbd add AV_WB/WL for lswriting, similar to AV_RB/RL (also increment version)
alex
parents: 231
diff changeset
71
727
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
72 #ifndef AV_RL16
444
f771a4fd3534 Do not cast const away.
michael
parents: 392
diff changeset
73 #define AV_RL16(x) ((((const uint8_t*)(x))[1] << 8) | \
f771a4fd3534 Do not cast const away.
michael
parents: 392
diff changeset
74 ((const uint8_t*)(x))[0])
727
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
75 #endif
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
76 #ifndef AV_WL16
336
f340106d09ac Proper fix for r8963
ramiro
parents: 335
diff changeset
77 #define AV_WL16(p, d) do { \
326
46b4da5bf9ed cosmetics: Reorder endianness macros by bit depth, alignment prettyprinting.
diego
parents: 282
diff changeset
78 ((uint8_t*)(p))[0] = (d); \
336
f340106d09ac Proper fix for r8963
ramiro
parents: 335
diff changeset
79 ((uint8_t*)(p))[1] = (d)>>8; } while(0)
727
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
80 #endif
326
46b4da5bf9ed cosmetics: Reorder endianness macros by bit depth, alignment prettyprinting.
diego
parents: 282
diff changeset
81
727
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
82 #ifndef AV_RB32
444
f771a4fd3534 Do not cast const away.
michael
parents: 392
diff changeset
83 #define AV_RB32(x) ((((const uint8_t*)(x))[0] << 24) | \
f771a4fd3534 Do not cast const away.
michael
parents: 392
diff changeset
84 (((const uint8_t*)(x))[1] << 16) | \
f771a4fd3534 Do not cast const away.
michael
parents: 392
diff changeset
85 (((const uint8_t*)(x))[2] << 8) | \
f771a4fd3534 Do not cast const away.
michael
parents: 392
diff changeset
86 ((const uint8_t*)(x))[3])
727
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
87 #endif
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
88 #ifndef AV_WB32
336
f340106d09ac Proper fix for r8963
ramiro
parents: 335
diff changeset
89 #define AV_WB32(p, d) do { \
235
ee010796c631 simplify and remove useless index in AV_W*
michael
parents: 232
diff changeset
90 ((uint8_t*)(p))[3] = (d); \
ee010796c631 simplify and remove useless index in AV_W*
michael
parents: 232
diff changeset
91 ((uint8_t*)(p))[2] = (d)>>8; \
ee010796c631 simplify and remove useless index in AV_W*
michael
parents: 232
diff changeset
92 ((uint8_t*)(p))[1] = (d)>>16; \
336
f340106d09ac Proper fix for r8963
ramiro
parents: 335
diff changeset
93 ((uint8_t*)(p))[0] = (d)>>24; } while(0)
727
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
94 #endif
232
9845a508ffbd add AV_WB/WL for lswriting, similar to AV_RB/RL (also increment version)
alex
parents: 231
diff changeset
95
727
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
96 #ifndef AV_RL32
444
f771a4fd3534 Do not cast const away.
michael
parents: 392
diff changeset
97 #define AV_RL32(x) ((((const uint8_t*)(x))[3] << 24) | \
f771a4fd3534 Do not cast const away.
michael
parents: 392
diff changeset
98 (((const uint8_t*)(x))[2] << 16) | \
f771a4fd3534 Do not cast const away.
michael
parents: 392
diff changeset
99 (((const uint8_t*)(x))[1] << 8) | \
f771a4fd3534 Do not cast const away.
michael
parents: 392
diff changeset
100 ((const uint8_t*)(x))[0])
727
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
101 #endif
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
102 #ifndef AV_WL32
336
f340106d09ac Proper fix for r8963
ramiro
parents: 335
diff changeset
103 #define AV_WL32(p, d) do { \
235
ee010796c631 simplify and remove useless index in AV_W*
michael
parents: 232
diff changeset
104 ((uint8_t*)(p))[0] = (d); \
ee010796c631 simplify and remove useless index in AV_W*
michael
parents: 232
diff changeset
105 ((uint8_t*)(p))[1] = (d)>>8; \
ee010796c631 simplify and remove useless index in AV_W*
michael
parents: 232
diff changeset
106 ((uint8_t*)(p))[2] = (d)>>16; \
336
f340106d09ac Proper fix for r8963
ramiro
parents: 335
diff changeset
107 ((uint8_t*)(p))[3] = (d)>>24; } while(0)
727
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
108 #endif
152
5b211d03227b Move BE_*/LE_*/ST*/LD* macros to a common place. Some further
reimar
parents:
diff changeset
109
727
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
110 #ifndef AV_RB64
444
f771a4fd3534 Do not cast const away.
michael
parents: 392
diff changeset
111 #define AV_RB64(x) (((uint64_t)((const uint8_t*)(x))[0] << 56) | \
f771a4fd3534 Do not cast const away.
michael
parents: 392
diff changeset
112 ((uint64_t)((const uint8_t*)(x))[1] << 48) | \
f771a4fd3534 Do not cast const away.
michael
parents: 392
diff changeset
113 ((uint64_t)((const uint8_t*)(x))[2] << 40) | \
f771a4fd3534 Do not cast const away.
michael
parents: 392
diff changeset
114 ((uint64_t)((const uint8_t*)(x))[3] << 32) | \
f771a4fd3534 Do not cast const away.
michael
parents: 392
diff changeset
115 ((uint64_t)((const uint8_t*)(x))[4] << 24) | \
f771a4fd3534 Do not cast const away.
michael
parents: 392
diff changeset
116 ((uint64_t)((const uint8_t*)(x))[5] << 16) | \
f771a4fd3534 Do not cast const away.
michael
parents: 392
diff changeset
117 ((uint64_t)((const uint8_t*)(x))[6] << 8) | \
f771a4fd3534 Do not cast const away.
michael
parents: 392
diff changeset
118 (uint64_t)((const uint8_t*)(x))[7])
727
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
119 #endif
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
120 #ifndef AV_WB64
336
f340106d09ac Proper fix for r8963
ramiro
parents: 335
diff changeset
121 #define AV_WB64(p, d) do { \
335
62dad9741857 add AV_[RW][BL]64 support
ivo
parents: 328
diff changeset
122 ((uint8_t*)(p))[7] = (d); \
62dad9741857 add AV_[RW][BL]64 support
ivo
parents: 328
diff changeset
123 ((uint8_t*)(p))[6] = (d)>>8; \
62dad9741857 add AV_[RW][BL]64 support
ivo
parents: 328
diff changeset
124 ((uint8_t*)(p))[5] = (d)>>16; \
62dad9741857 add AV_[RW][BL]64 support
ivo
parents: 328
diff changeset
125 ((uint8_t*)(p))[4] = (d)>>24; \
62dad9741857 add AV_[RW][BL]64 support
ivo
parents: 328
diff changeset
126 ((uint8_t*)(p))[3] = (d)>>32; \
62dad9741857 add AV_[RW][BL]64 support
ivo
parents: 328
diff changeset
127 ((uint8_t*)(p))[2] = (d)>>40; \
62dad9741857 add AV_[RW][BL]64 support
ivo
parents: 328
diff changeset
128 ((uint8_t*)(p))[1] = (d)>>48; \
336
f340106d09ac Proper fix for r8963
ramiro
parents: 335
diff changeset
129 ((uint8_t*)(p))[0] = (d)>>56; } while(0)
727
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
130 #endif
335
62dad9741857 add AV_[RW][BL]64 support
ivo
parents: 328
diff changeset
131
727
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
132 #ifndef AV_RL64
444
f771a4fd3534 Do not cast const away.
michael
parents: 392
diff changeset
133 #define AV_RL64(x) (((uint64_t)((const uint8_t*)(x))[7] << 56) | \
f771a4fd3534 Do not cast const away.
michael
parents: 392
diff changeset
134 ((uint64_t)((const uint8_t*)(x))[6] << 48) | \
f771a4fd3534 Do not cast const away.
michael
parents: 392
diff changeset
135 ((uint64_t)((const uint8_t*)(x))[5] << 40) | \
f771a4fd3534 Do not cast const away.
michael
parents: 392
diff changeset
136 ((uint64_t)((const uint8_t*)(x))[4] << 32) | \
f771a4fd3534 Do not cast const away.
michael
parents: 392
diff changeset
137 ((uint64_t)((const uint8_t*)(x))[3] << 24) | \
f771a4fd3534 Do not cast const away.
michael
parents: 392
diff changeset
138 ((uint64_t)((const uint8_t*)(x))[2] << 16) | \
f771a4fd3534 Do not cast const away.
michael
parents: 392
diff changeset
139 ((uint64_t)((const uint8_t*)(x))[1] << 8) | \
f771a4fd3534 Do not cast const away.
michael
parents: 392
diff changeset
140 (uint64_t)((const uint8_t*)(x))[0])
727
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
141 #endif
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
142 #ifndef AV_WL64
336
f340106d09ac Proper fix for r8963
ramiro
parents: 335
diff changeset
143 #define AV_WL64(p, d) do { \
335
62dad9741857 add AV_[RW][BL]64 support
ivo
parents: 328
diff changeset
144 ((uint8_t*)(p))[0] = (d); \
62dad9741857 add AV_[RW][BL]64 support
ivo
parents: 328
diff changeset
145 ((uint8_t*)(p))[1] = (d)>>8; \
62dad9741857 add AV_[RW][BL]64 support
ivo
parents: 328
diff changeset
146 ((uint8_t*)(p))[2] = (d)>>16; \
62dad9741857 add AV_[RW][BL]64 support
ivo
parents: 328
diff changeset
147 ((uint8_t*)(p))[3] = (d)>>24; \
62dad9741857 add AV_[RW][BL]64 support
ivo
parents: 328
diff changeset
148 ((uint8_t*)(p))[4] = (d)>>32; \
62dad9741857 add AV_[RW][BL]64 support
ivo
parents: 328
diff changeset
149 ((uint8_t*)(p))[5] = (d)>>40; \
62dad9741857 add AV_[RW][BL]64 support
ivo
parents: 328
diff changeset
150 ((uint8_t*)(p))[6] = (d)>>48; \
336
f340106d09ac Proper fix for r8963
ramiro
parents: 335
diff changeset
151 ((uint8_t*)(p))[7] = (d)>>56; } while(0)
727
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
152 #endif
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
153
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
154 #ifdef WORDS_BIGENDIAN
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
155 # define AV_RN(s, p) AV_RB##s(p)
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
156 # define AV_WN(s, p, v) AV_WB##s(p, v)
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
157 #else
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
158 # define AV_RN(s, p) AV_RL##s(p)
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
159 # define AV_WN(s, p, v) AV_WL##s(p, v)
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
160 #endif
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
161
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
162 #endif /* HAVE_FAST_UNALIGNED */
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
163
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
164 #ifndef AV_RN16
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
165 # define AV_RN16(p) AV_RN(16, p)
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
166 #endif
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
167
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
168 #ifndef AV_RN32
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
169 # define AV_RN32(p) AV_RN(32, p)
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
170 #endif
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
171
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
172 #ifndef AV_RN64
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
173 # define AV_RN64(p) AV_RN(64, p)
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
174 #endif
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
175
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
176 #ifndef AV_WN16
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
177 # define AV_WN16(p, v) AV_WN(16, p, v)
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
178 #endif
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
179
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
180 #ifndef AV_WN32
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
181 # define AV_WN32(p, v) AV_WN(32, p, v)
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
182 #endif
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
183
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
184 #ifndef AV_WN64
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
185 # define AV_WN64(p, v) AV_WN(64, p, v)
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
186 #endif
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
187
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
188 #ifdef WORDS_BIGENDIAN
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
189 # define AV_RB(s, p) AV_RN(s, p)
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
190 # define AV_WB(s, p, v) AV_WN(s, p, v)
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
191 # define AV_RL(s, p) bswap_##s(AV_RN(s, p))
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
192 # define AV_WL(s, p, v) AV_WN(s, p, bswap_##s(v))
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
193 #else
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
194 # define AV_RB(s, p) bswap_##s(AV_RN(s, p))
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
195 # define AV_WB(s, p, v) AV_WN(s, p, bswap_##s(v))
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
196 # define AV_RL(s, p) AV_RN(s, p)
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
197 # define AV_WL(s, p, v) AV_WN(s, p, v)
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
198 #endif
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
199
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
200 #define AV_RB8(x) (((const uint8_t*)(x))[0])
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
201 #define AV_WB8(p, d) do { ((uint8_t*)(p))[0] = (d); } while(0)
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
202
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
203 #define AV_RL8(x) AV_RB8(x)
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
204 #define AV_WL8(p, d) AV_WB8(p, d)
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
205
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
206 #ifndef AV_RB16
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
207 # define AV_RB16(p) AV_RB(16, p)
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
208 #endif
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
209 #ifndef AV_WB16
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
210 # define AV_WB16(p, v) AV_WB(16, p, v)
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
211 #endif
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
212
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
213 #ifndef AV_RL16
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
214 # define AV_RL16(p) AV_RL(16, p)
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
215 #endif
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
216 #ifndef AV_WL16
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
217 # define AV_WL16(p, v) AV_WL(16, p, v)
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
218 #endif
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
219
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
220 #ifndef AV_RB32
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
221 # define AV_RB32(p) AV_RB(32, p)
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
222 #endif
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
223 #ifndef AV_WB32
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
224 # define AV_WB32(p, v) AV_WB(32, p, v)
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
225 #endif
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
226
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
227 #ifndef AV_RL32
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
228 # define AV_RL32(p) AV_RL(32, p)
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
229 #endif
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
230 #ifndef AV_WL32
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
231 # define AV_WL32(p, v) AV_WL(32, p, v)
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
232 #endif
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
233
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
234 #ifndef AV_RB64
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
235 # define AV_RB64(p) AV_RB(64, p)
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
236 #endif
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
237 #ifndef AV_WB64
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
238 # define AV_WB64(p, v) AV_WB(64, p, v)
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
239 #endif
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
240
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
241 #ifndef AV_RL64
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
242 # define AV_RL64(p) AV_RL(64, p)
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
243 #endif
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
244 #ifndef AV_WL64
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
245 # define AV_WL64(p, v) AV_WL(64, p, v)
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
246 #endif
524
3cb148a1c8cd Rearrange AV_[RW][BL]*() macros
mru
parents: 469
diff changeset
247
3cb148a1c8cd Rearrange AV_[RW][BL]*() macros
mru
parents: 469
diff changeset
248 #define AV_RB24(x) ((((const uint8_t*)(x))[0] << 16) | \
3cb148a1c8cd Rearrange AV_[RW][BL]*() macros
mru
parents: 469
diff changeset
249 (((const uint8_t*)(x))[1] << 8) | \
3cb148a1c8cd Rearrange AV_[RW][BL]*() macros
mru
parents: 469
diff changeset
250 ((const uint8_t*)(x))[2])
3cb148a1c8cd Rearrange AV_[RW][BL]*() macros
mru
parents: 469
diff changeset
251 #define AV_WB24(p, d) do { \
3cb148a1c8cd Rearrange AV_[RW][BL]*() macros
mru
parents: 469
diff changeset
252 ((uint8_t*)(p))[2] = (d); \
3cb148a1c8cd Rearrange AV_[RW][BL]*() macros
mru
parents: 469
diff changeset
253 ((uint8_t*)(p))[1] = (d)>>8; \
3cb148a1c8cd Rearrange AV_[RW][BL]*() macros
mru
parents: 469
diff changeset
254 ((uint8_t*)(p))[0] = (d)>>16; } while(0)
3cb148a1c8cd Rearrange AV_[RW][BL]*() macros
mru
parents: 469
diff changeset
255
3cb148a1c8cd Rearrange AV_[RW][BL]*() macros
mru
parents: 469
diff changeset
256 #define AV_RL24(x) ((((const uint8_t*)(x))[2] << 16) | \
3cb148a1c8cd Rearrange AV_[RW][BL]*() macros
mru
parents: 469
diff changeset
257 (((const uint8_t*)(x))[1] << 8) | \
3cb148a1c8cd Rearrange AV_[RW][BL]*() macros
mru
parents: 469
diff changeset
258 ((const uint8_t*)(x))[0])
3cb148a1c8cd Rearrange AV_[RW][BL]*() macros
mru
parents: 469
diff changeset
259 #define AV_WL24(p, d) do { \
3cb148a1c8cd Rearrange AV_[RW][BL]*() macros
mru
parents: 469
diff changeset
260 ((uint8_t*)(p))[0] = (d); \
3cb148a1c8cd Rearrange AV_[RW][BL]*() macros
mru
parents: 469
diff changeset
261 ((uint8_t*)(p))[1] = (d)>>8; \
3cb148a1c8cd Rearrange AV_[RW][BL]*() macros
mru
parents: 469
diff changeset
262 ((uint8_t*)(p))[2] = (d)>>16; } while(0)
335
62dad9741857 add AV_[RW][BL]64 support
ivo
parents: 328
diff changeset
263
567
bd4052d9050c Globally rename the header inclusion guard names.
stefano
parents: 525
diff changeset
264 #endif /* AVUTIL_INTREADWRITE_H */