2016-02-01 130 views

回答

5

是否有人需要获取ARM中的'REV'(反转字节顺序)指令?

还有一种更便于使用的“便携式”形式,适用于所有架构。它是__builtin_bswap32。例如,compiler explorer有,

unsigned int foo(unsigned int a) 
{ 
    return __builtin_bswap32(a); 
} 

给予,

foo(unsigned int): 
     rev  r0, r0 
     bx  lr 

这比__builtin_rev更好的方式是,因为它只能适用于特定ARM目标(当然仅限ARM的CPU)。你甚至可以在PowerPC,x86等上使用__builtin_bswap32

+1

还有'__builtin_bswap16'换成一个16位整数(编译成rev16 arm指令) – nos

+0

为了完整性,还有[关于窥视孔优化器-O2和更高](https://goo.gl/MNbb1K);) – Notlikethat

+0

__builtin_ *的列表在哪里? – joeforker