2
我一直使用下的gcc/x86的這個小功能做int16_t的快速字節交換:意義(等於VS加等)
static inline int16_t MySwapInt16t(int16_t val)
{
__asm__ ("xchgb %b0, %h0" : "=Q" (val) : "0" (val));
return val;
}
...同時通過瀏覽今天別人的代碼就行,我看到他也有類似的功能,看起來像這樣:
static inline int16_t HisSwapInt16t(int16_t val)
{
__asm__ ("xchgb %h0, %b0" : "+Q" (val));
return val;
}
我的功能和他的功能(AFAICT)之間的區別是:
- 他指定 「+ Q」 代替
- %H0和%B0的位置互換 「= Q」
- 他沒有: 「0」(VAL)在他的函數的末尾子句
據我所知,這兩種方案似乎正常工作,但內聯彙編是有點黑色藝術的我,所以能有人見地的解釋:
- 什麼是三個不同的意義以上所列?
- 是兩種實現更好或比其他更快的一個,或者將它們都進行等價?