2
다음과 같이 두 부동 소수점 피연산자를 비교 한 비교 결과가 있습니다. 즉 : 내가 비교 결과에 기초 할 필요하면 다음을 수행 할 필요가NEON 팩 벡터 비교 결과 비트 맵
이neon_gt_res = vcgtq_f32(temp1, temp2);
if(neon_gt_res[0]) array[0] |= (unsigned char)0x01;
if(neon_gt_res[1]) array[0] |= (unsigned char)0x02;
if(neon_gt_res[2]) array[0] |= (unsigned char)0x04;
if(neon_gt_res[3]) array[0] |= (unsigned char)0x08;
그러나 이런 식으로 쓰는 것은 다시 다중 비교하는 것과 같습니다. 네온 C 내장 함수에서이를 어떻게 최적으로 작성합니까? 86에
,이 array[0] |= _mm_movemask_ps(cmp_gt_res);
'배열이 어떤 종류의 []'? 나는 그것이 바이트의 배열이라고 가정하고 있지만 C의 종류가 의미하는 것입니다. 비교 결과로 가면 '1 2 4 8' 벡터를 원할 것입니다. 그런 다음 NEON 레지스터의 하위 4 바이트에 그 결과를 저장하려면 셔플이 필요하다고 생각합니다. NEON은 잘 모릅니다.하지만 그렇게 할 수 있다면 아마도 배열의 32 비트로드를 수행하고 압축 된 OR을 수행하고 저장해야 할 것입니다. –
array []는 unsigned char 유형입니다. 비교 결과는 int32x4_t 유형이므로 따라서 해당 마스크를 사용할 수 없습니다. 이 다른 방법으로 도울 수 있습니까? – Lakshmi
NEON에는 비교 결과의 각 요소에서 1 바이트를 채우기 위해 사용할 수있는 바이트 셔플 (byte-shuffle) 지침이 없습니까? –