2011-02-08 4 views
1

채널당 32 비트의 128 비트 NEON 레지스터에 ARGB 픽셀이 저장되어 있습니다. 8 비트 채널 ARGB (축소 및 포화)로 메모리에 저장해야합니다.NEON : 128 비트 ARGB를 채도가있는 32 비트 ARGB로 변환하는 방법은 무엇입니까?

나는 내 결과가 vmla.32 q1, q2, d0; 내가 몇 가지 사이클을 직접 저장하는 mul 명령을 통해 좁아 지거나 채도를 얻을 수 있는지 궁금해.

그것에 대해 가장 좋은 방법은 무엇입니까?

+0

은 부호가없는 색상 구성 요소입니까, 아니면 32 비트 구성 요소가 음수가 될 수 있습니까 (예 : 0으로 채도가 필요합니까)? –

답변

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에서 포화 연산을 사용할 수 있고 시작하기 위해 확대를 피할 수 있습니까? 아니면 그 헤드 룸이 모두 필요합니까?