1
我有一個ARGB像素存儲在一個128位的NEON寄存器,每個通道32位。我需要將它作爲8位通道ARGB(縮小和飽和)存儲到內存中。NEON:如何將飽和度的128位ARGB轉換爲32位ARGB?
我得到了我的結果後vmla.32 q1,q2,d0;想知道是否可以通過mul指令實現縮小或飽和,直接節省一些週期。
最好的辦法是什麼?
我有一個ARGB像素存儲在一個128位的NEON寄存器,每個通道32位。我需要將它作爲8位通道ARGB(縮小和飽和)存儲到內存中。NEON:如何將飽和度的128位ARGB轉換爲32位ARGB?
我得到了我的結果後vmla.32 q1,q2,d0;想知道是否可以通過mul指令實現縮小或飽和,直接節省一些週期。
最好的辦法是什麼?
有沒有這樣的編碼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中使用飽和操作並避免擴大開始,或者您是否需要所有的擴展空間?
是無符號的顏色分量,還是32位分量可以變爲負值(例如,飽和度也爲零)? – 2011-02-09 11:25:05