Permalink
Browse files

PowerPC: Fix overflow in LOAD/STORE_64LE (fixes #1089)

  • Loading branch information...
endrift committed May 26, 2018
1 parent 7f41dd3 commit c353e1254afbb7235911b406adad4d32db55085c
Showing with 5 additions and 4 deletions.
  1. +5 −4 include/mgba-util/common.h
@@ -136,12 +136,13 @@ typedef intptr_t ssize_t;
uint32_t lo; \
}; \
uint64_t b64; \
- } *bswap = (void*) &DEST; \
+ } bswap; \
const void* _ptr = (ARR); \
__asm__( \
"lwbrx %0, %2, %3 \n" \
"lwbrx %1, %2, %4 \n" \
- : "=&r"(bswap->lo), "=&r"(bswap->hi) : "b"(_ptr), "r"(_addr), "r"(_addr + 4)) ; \
+ : "=&r"(bswap.lo), "=&r"(bswap.hi) : "b"(_ptr), "r"(_addr), "r"(_addr + 4)) ; \
+ DEST = bswap.b64; \
}
#define STORE_64LE(SRC, ADDR, ARR) { \
@@ -152,12 +153,12 @@ typedef intptr_t ssize_t;
uint32_t lo; \
}; \
uint64_t b64; \
- } *bswap = (void*) &SRC; \
+ } bswap = { .b64 = SRC }; \
const void* _ptr = (ARR); \
__asm__( \
"stwbrx %0, %2, %3 \n" \
"stwbrx %1, %2, %4 \n" \
- : : "r"(bswap->hi), "r"(bswap->lo), "b"(_ptr), "r"(_addr), "r"(_addr + 4) : "memory"); \
+ : : "r"(bswap.hi), "r"(bswap.lo), "b"(_ptr), "r"(_addr), "r"(_addr + 4) : "memory"); \
}
#elif defined(__llvm__) || (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8)

0 comments on commit c353e12

Please sign in to comment.