1*3cab2bb3Spatrick//===------- bswapsi2 - Implement bswapsi2 --------------------------------===// 2*3cab2bb3Spatrick// 3*3cab2bb3Spatrick// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*3cab2bb3Spatrick// See https://llvm.org/LICENSE.txt for license information. 5*3cab2bb3Spatrick// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*3cab2bb3Spatrick// 7*3cab2bb3Spatrick//===----------------------------------------------------------------------===// 8*3cab2bb3Spatrick 9*3cab2bb3Spatrick#include "../assembly.h" 10*3cab2bb3Spatrick 11*3cab2bb3Spatrick .syntax unified 12*3cab2bb3Spatrick .text 13*3cab2bb3Spatrick DEFINE_CODE_STATE 14*3cab2bb3Spatrick 15*3cab2bb3Spatrick// 16*3cab2bb3Spatrick// extern uint32_t __bswapsi2(uint32_t); 17*3cab2bb3Spatrick// 18*3cab2bb3Spatrick// Reverse all the bytes in a 32-bit integer. 19*3cab2bb3Spatrick// 20*3cab2bb3Spatrick .p2align 2 21*3cab2bb3SpatrickDEFINE_COMPILERRT_FUNCTION(__bswapsi2) 22*3cab2bb3Spatrick#if __ARM_ARCH < 6 23*3cab2bb3Spatrick // before armv6 does not have "rev" instruction 24*3cab2bb3Spatrick eor r1, r0, r0, ror #16 25*3cab2bb3Spatrick bic r1, r1, #0xff0000 26*3cab2bb3Spatrick mov r1, r1, lsr #8 27*3cab2bb3Spatrick eor r0, r1, r0, ror #8 28*3cab2bb3Spatrick#else 29*3cab2bb3Spatrick rev r0, r0 30*3cab2bb3Spatrick#endif 31*3cab2bb3Spatrick JMP(lr) 32*3cab2bb3SpatrickEND_COMPILERRT_FUNCTION(__bswapsi2) 33*3cab2bb3Spatrick 34*3cab2bb3SpatrickNO_EXEC_STACK_DIRECTIVE 35*3cab2bb3Spatrick 36