diff options
| author | Stephen Canon <scanon@apple.com> | 2010-07-03 21:47:50 +0000 |
|---|---|---|
| committer | Stephen Canon <scanon@apple.com> | 2010-07-03 21:47:50 +0000 |
| commit | 909f6c7bc47cf36ef2c5f8d07b687b614adac7b3 (patch) | |
| tree | 70c9b5045a963ed09fd745348fb3fd160de52f1b | |
| parent | f02ec12796336cc382338f2a6a70be177397f780 (diff) | |
| download | bcm5719-llvm-909f6c7bc47cf36ef2c5f8d07b687b614adac7b3.tar.gz bcm5719-llvm-909f6c7bc47cf36ef2c5f8d07b687b614adac7b3.zip | |
Further cleanup of ARM bswap implementations, thanks to John Tytgat
llvm-svn: 107576
| -rw-r--r-- | compiler-rt/lib/arm/bswapdi2.S | 32 | ||||
| -rw-r--r-- | compiler-rt/lib/arm/bswapsi2.S | 18 |
2 files changed, 23 insertions, 27 deletions
diff --git a/compiler-rt/lib/arm/bswapdi2.S b/compiler-rt/lib/arm/bswapdi2.S index 19311caad4a..d3ca33a341c 100644 --- a/compiler-rt/lib/arm/bswapdi2.S +++ b/compiler-rt/lib/arm/bswapdi2.S @@ -14,25 +14,23 @@ // // Reverse all the bytes in a 64-bit integer. // - .align 2 +.align 2 DEFINE_COMPILERRT_FUNCTION(__bswapdi2) #if __ARM_ARCH_5TEJ__ || __ARM_ARCH_4T__ - mov r12, #0xff00 - - and r3, r12, r0, lsr #8 - and r2, r12, r0 - orr r3, r3, r0, lsr #24 - orr r3, r3, r0, lsl #24 - orr r2, r3, r2, lsl #8 // r2 = rev(r0) - - and r3, r12, r1, lsr #8 - and r0, r12, r1 - orr r3, r3, r1, lsr #24 - orr r3, r3, r1, lsl #24 - orr r0, r3, r0, lsl #8 // r0 = rev(r1) + // before armv6 does not have "rev" instruction + // r2 = rev(r0) + eor r2, r0, r0, ror #16 + bic r2, r2, #0xff0000 + mov r2, r2, lsr #8 + eor r2, r2, r0, ror #8 + // r0 = rev(r1) + eor r0, r1, r1, ror #16 + bic r0, r0, #0xff0000 + mov r0, r0, lsr #8 + eor r0, r0, r1, ror #8 #else - rev r2, r0 // r2 = rev(r0) - rev r0, r1 // r0 = rev(r1) + rev r2, r0 // r2 = rev(r0) + rev r0, r1 // r0 = rev(r1) #endif - mov r1, r2 // r1 = r2 = rev(r0) + mov r1, r2 // r1 = r2 = rev(r0) bx lr diff --git a/compiler-rt/lib/arm/bswapsi2.S b/compiler-rt/lib/arm/bswapsi2.S index 7e3ab7f48c5..0a0c073706c 100644 --- a/compiler-rt/lib/arm/bswapsi2.S +++ b/compiler-rt/lib/arm/bswapsi2.S @@ -14,17 +14,15 @@ // // Reverse all the bytes in a 32-bit integer. // - .align 2 +.align 2 DEFINE_COMPILERRT_FUNCTION(__bswapsi2) #if __ARM_ARCH_5TEJ__ || __ARM_ARCH_4T__ - // before armv6 does not have "rev" instruction - mov r1, #0xff00 - and r2, r1, r0, lsr #8 - and r1, r1, r0 - orr r2, r2, r0, lsr #24 - orr r2, r2, r0, lsl #24 - orr r0, r2, r1, lsl #8 + // before armv6 does not have "rev" instruction + eor r1, r0, r0, ror #16 + bic r1, r1, #0xff0000 + mov r1, r1, lsr #8 + eor r0, r1, r0, ror #8 #else - rev r0, r0 // reverse bytes in parameter and put into result register + rev r0, r0 #endif - bx lr + bx lr |

