diff options
-rw-r--r-- | sys/arm/include/endian.h | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/sys/arm/include/endian.h b/sys/arm/include/endian.h index c99eaf7..715a945 100644 --- a/sys/arm/include/endian.h +++ b/sys/arm/include/endian.h @@ -99,13 +99,15 @@ __bswap32_var(__uint32_t v) static __inline __uint16_t __bswap16_var(__uint16_t v) { + __uint32_t ret = v & 0xffff; + __asm __volatile( "mov %0, %0, ror #8\n" "orr %0, %0, %0, lsr #16\n" "bic %0, %0, %0, lsl #16" - : "+r" (v)); + : "+r" (ret)); - return (v); + return ((__uint16_t)ret); } #ifdef __OPTIMIZE__ |