|
@@ -47,7 +47,7 @@ typedef union {
|
|
|
|
|
|
/*
|
|
|
* Arch-specific headers can provide any combination of
|
|
|
- * AV_[RW][BLN](16|24|32|64) and AV_(COPY|SWAP|ZERO)(64|128) macros.
|
|
|
+ * AV_[RW][BLN](16|24|32|48|64) and AV_(COPY|SWAP|ZERO)(64|128) macros.
|
|
|
* Preprocessor symbols must be defined, even if these are implemented
|
|
|
* as inline functions.
|
|
|
*/
|
|
@@ -114,6 +114,18 @@ typedef union {
|
|
|
# define AV_WN32(p, v) AV_WB32(p, v)
|
|
|
# endif
|
|
|
|
|
|
+# if defined(AV_RN48) && !defined(AV_RB48)
|
|
|
+# define AV_RB48(p) AV_RN48(p)
|
|
|
+# elif !defined(AV_RN48) && defined(AV_RB48)
|
|
|
+# define AV_RN48(p) AV_RB48(p)
|
|
|
+# endif
|
|
|
+
|
|
|
+# if defined(AV_WN48) && !defined(AV_WB48)
|
|
|
+# define AV_WB48(p, v) AV_WN48(p, v)
|
|
|
+# elif !defined(AV_WN48) && defined(AV_WB48)
|
|
|
+# define AV_WN48(p, v) AV_WB48(p, v)
|
|
|
+# endif
|
|
|
+
|
|
|
# if defined(AV_RN64) && !defined(AV_RB64)
|
|
|
# define AV_RB64(p) AV_RN64(p)
|
|
|
# elif !defined(AV_RN64) && defined(AV_RB64)
|
|
@@ -164,6 +176,18 @@ typedef union {
|
|
|
# define AV_WN32(p, v) AV_WL32(p, v)
|
|
|
# endif
|
|
|
|
|
|
+# if defined(AV_RN48) && !defined(AV_RL48)
|
|
|
+# define AV_RL48(p) AV_RN48(p)
|
|
|
+# elif !defined(AV_RN48) && defined(AV_RL48)
|
|
|
+# define AV_RN48(p) AV_RL48(p)
|
|
|
+# endif
|
|
|
+
|
|
|
+# if defined(AV_WN48) && !defined(AV_WL48)
|
|
|
+# define AV_WL48(p, v) AV_WN48(p, v)
|
|
|
+# elif !defined(AV_WN48) && defined(AV_WL48)
|
|
|
+# define AV_WN48(p, v) AV_WL48(p, v)
|
|
|
+# endif
|
|
|
+
|
|
|
# if defined(AV_RN64) && !defined(AV_RL64)
|
|
|
# define AV_RL64(p) AV_RN64(p)
|
|
|
# elif !defined(AV_RN64) && defined(AV_RL64)
|
|
@@ -436,6 +460,48 @@ union unaligned_16 { uint16_t l; } __attribute__((packed)) av_alias;
|
|
|
} while(0)
|
|
|
#endif
|
|
|
|
|
|
+#ifndef AV_RB48
|
|
|
+# define AV_RB48(x) \
|
|
|
+ (((uint64_t)((const uint8_t*)(x))[0] << 40) | \
|
|
|
+ ((uint64_t)((const uint8_t*)(x))[1] << 32) | \
|
|
|
+ ((uint64_t)((const uint8_t*)(x))[2] << 24) | \
|
|
|
+ ((uint64_t)((const uint8_t*)(x))[3] << 16) | \
|
|
|
+ ((uint64_t)((const uint8_t*)(x))[4] << 8) | \
|
|
|
+ (uint64_t)((const uint8_t*)(x))[5])
|
|
|
+#endif
|
|
|
+#ifndef AV_WB48
|
|
|
+# define AV_WB48(p, darg) do { \
|
|
|
+ uint64_t d = (darg); \
|
|
|
+ ((uint8_t*)(p))[5] = (d); \
|
|
|
+ ((uint8_t*)(p))[4] = (d)>>8; \
|
|
|
+ ((uint8_t*)(p))[3] = (d)>>16; \
|
|
|
+ ((uint8_t*)(p))[2] = (d)>>24; \
|
|
|
+ ((uint8_t*)(p))[1] = (d)>>32; \
|
|
|
+ ((uint8_t*)(p))[0] = (d)>>40; \
|
|
|
+ } while(0)
|
|
|
+#endif
|
|
|
+
|
|
|
+#ifndef AV_RL48
|
|
|
+# define AV_RL48(x) \
|
|
|
+ (((uint64_t)((const uint8_t*)(x))[5] << 40) | \
|
|
|
+ ((uint64_t)((const uint8_t*)(x))[4] << 32) | \
|
|
|
+ ((uint64_t)((const uint8_t*)(x))[3] << 24) | \
|
|
|
+ ((uint64_t)((const uint8_t*)(x))[2] << 16) | \
|
|
|
+ ((uint64_t)((const uint8_t*)(x))[1] << 8) | \
|
|
|
+ (uint64_t)((const uint8_t*)(x))[0])
|
|
|
+#endif
|
|
|
+#ifndef AV_WL48
|
|
|
+# define AV_WL48(p, darg) do { \
|
|
|
+ uint64_t d = (darg); \
|
|
|
+ ((uint8_t*)(p))[0] = (d); \
|
|
|
+ ((uint8_t*)(p))[1] = (d)>>8; \
|
|
|
+ ((uint8_t*)(p))[2] = (d)>>16; \
|
|
|
+ ((uint8_t*)(p))[3] = (d)>>24; \
|
|
|
+ ((uint8_t*)(p))[4] = (d)>>32; \
|
|
|
+ ((uint8_t*)(p))[5] = (d)>>40; \
|
|
|
+ } while(0)
|
|
|
+#endif
|
|
|
+
|
|
|
/*
|
|
|
* The AV_[RW]NA macros access naturally aligned data
|
|
|
* in a type-safe way.
|