2011-02-08 82 views
1

我有一個ARGB像素存儲在一個128位的NEON寄存器,每個通道32位。我需要將它作爲8位通道ARGB(縮小和飽和)存儲到內存中。NEON:如何將飽和度的128位ARGB轉換爲32位ARGB?

我得到了我的結果後vmla.32 q1,q2,d0;想知道是否可以通過mul指令實現縮小或飽和,直接節省一些週期。

最好的辦法是什麼?

+0

是無符號的顏色分量,還是32位分量可以變爲負值(例如,飽和度也爲零)? – 2011-02-09 11:25:05

回答

1

有沒有這樣的編碼vmla.32 q1, q2, d0;我們假設你的意思是q0

簡單,天真的回答是:

vqmovn.s32 d0, q1 // saturate and narrow 32 -> 16 
vqmovn.s16 d0, q0 // saturate and narrow 16 -> 8 

這並簽署飽和度;如果您有無符號值,請使用.u32.u16類型,並且如果您有符號值但希望飽和爲無符號值,則使用vqmovun指令。

對於你是否可以做某種縮小乘法的問題,這很大程度上取決於確切的操作(以及所涉及的值);鑑於您使用的是vmla,但答案是「可能不是」。

您可以在NEON中使用飽和操作並避免擴大開始,或者您是否需要所有的擴展空間?