2016-02-01 129 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