bswapsi2.S revision 276789
1276789Sdim//===------- bswapsi2 - Implement bswapsi2 --------------------------------===// 2276789Sdim// 3276789Sdim// The LLVM Compiler Infrastructure 4276789Sdim// 5276789Sdim// This file is dual licensed under the MIT and the University of Illinois Open 6276789Sdim// Source Licenses. See LICENSE.TXT for details. 7276789Sdim// 8276789Sdim//===----------------------------------------------------------------------===// 9276789Sdim 10276789Sdim#include "../assembly.h" 11276789Sdim 12276789Sdim .syntax unified 13276789Sdim .text 14276789Sdim#if __ARM_ARCH_ISA_THUMB == 2 15276789Sdim .thumb 16276789Sdim#endif 17276789Sdim 18276789Sdim// 19276789Sdim// extern uint32_t __bswapsi2(uint32_t); 20276789Sdim// 21276789Sdim// Reverse all the bytes in a 32-bit integer. 22276789Sdim// 23276789Sdim .p2align 2 24276789Sdim#if __ARM_ARCH_ISA_THUMB == 2 25276789SdimDEFINE_COMPILERRT_THUMB_FUNCTION(__bswapsi2) 26276789Sdim#else 27276789SdimDEFINE_COMPILERRT_FUNCTION(__bswapsi2) 28276789Sdim#endif 29276789Sdim#if __ARM_ARCH < 6 30276789Sdim // before armv6 does not have "rev" instruction 31276789Sdim eor r1, r0, r0, ror #16 32276789Sdim bic r1, r1, #0xff0000 33276789Sdim mov r1, r1, lsr #8 34276789Sdim eor r0, r1, r0, ror #8 35276789Sdim#else 36276789Sdim rev r0, r0 37276789Sdim#endif 38276789Sdim JMP(lr) 39276789SdimEND_COMPILERRT_FUNCTION(__bswapsi2) 40