24
24
#include <stdint.h>
25
25
#include "config.h"
27
#if ARCH_MIPS64 && HAVE_INLINE_ASM
29
29
#define AV_RN32 AV_RN32
30
30
static av_always_inline uint32_t AV_RN32(const void *p)
32
struct __attribute__((packed)) u32 { uint32_t v; };
34
const struct u32 *pl = (const struct u32 *)(q + 3 * !HAVE_BIGENDIAN);
35
const struct u32 *pr = (const struct u32 *)(q + 3 * HAVE_BIGENDIAN);
33
37
__asm__ ("lwl %0, %1 \n\t"
36
: "m"(*(const uint32_t *)((const uint8_t *)p+3*!HAVE_BIGENDIAN)),
37
"m"(*(const uint32_t *)((const uint8_t *)p+3*HAVE_BIGENDIAN)));
41
#define AV_WN32 AV_WN32
42
static av_always_inline void AV_WN32(void *p, uint32_t v)
44
__asm__ ("swl %2, %0 \n\t"
46
: "=m"(*(uint32_t *)((uint8_t *)p+3*!HAVE_BIGENDIAN)),
47
"=m"(*(uint32_t *)((uint8_t *)p+3*HAVE_BIGENDIAN))
53
#define AV_RN64 AV_RN64
54
static av_always_inline uint64_t AV_RN64(const void *p)
57
__asm__ ("ldl %0, %1 \n\t"
60
: "m"(*(const uint64_t *)((const uint8_t *)p+7*!HAVE_BIGENDIAN)),
61
"m"(*(const uint64_t *)((const uint8_t *)p+7*HAVE_BIGENDIAN)));
65
#define AV_WN64 AV_WN64
66
static av_always_inline void AV_WN64(void *p, uint64_t v)
68
__asm__ ("sdl %2, %0 \n\t"
70
: "=m"(*(uint64_t *)((uint8_t *)p+7*!HAVE_BIGENDIAN)),
71
"=m"(*(uint64_t *)((uint8_t *)p+7*HAVE_BIGENDIAN))
77
#define AV_RN64 AV_RN64
78
static av_always_inline uint64_t AV_RN64(const void *p)
80
union { uint64_t v; uint32_t hl[2]; } v;
82
v.hl[1] = AV_RN32((const uint8_t *)p + 4);
86
#define AV_WN64 AV_WN64
87
static av_always_inline void AV_WN64(void *p, uint64_t v)
89
union { uint64_t v; uint32_t hl[2]; } vv = { v };
91
AV_WN32((uint8_t *)p + 4, vv.hl[1]);
94
#endif /* ARCH_MIPS64 */
96
#endif /* HAVE_INLINE_ASM */
40
: "m"(*pl), "m"(*pr));
44
#endif /* ARCH_MIPS64 && HAVE_INLINE_ASM */
98
46
#endif /* AVUTIL_MIPS_INTREADWRITE_H */