3
팔 어셈블리 및 NEON SIMD 명령어를 사용합니다. 두 개의 Q 레지스터에있는 16 비트 부호없는 값의 최대 값을 얻고이를 임계 값과 비교하려고합니다. 모든 16 비트 값이 임계 값보다 작 으면 함수를 호출합니다. 하나 이상의 값이 임계 값보다 큰 경우 다른 함수를 호출합니다.플래그에 영향을 미치는 네온 어셈블리 벡터 명령어
다음 SIMD 명령어가 최대가됩니다.
// 임계 값은 r은
vdup.16 q15, threshold
vmax.u16 q12, q14, q13
vcgt.u16 q11, q12, q15
가 FPSCR 플래그에 영향을 VCGT합니까
등록입니까? 나는 그렇게 생각하지 않는다. 그렇다면 q11이 0인지 아닌지를 확인해야합니다. 그것이 zeor 인 경우 function1을 호출하고, 그렇지 않으면 function2를 호출하십시오. 내가 4 개 R 레지스터에 Q11를 이동하지 않고 그것을 할 수있는 방법if (q11 == 0)
//call function1
else
//call function2
같은 것?
감사합니다.
두 경우 모두 결과를 계산하고 싶지 않습니다. 한 번에 하나의 사례 만 임계 값을 기준으로 선택하여 프로그램 속도를 높이고 싶습니다. 그래서 내가 질문을 올렸다. 나는 다른 길을 찾을 것이다. 어쨌든 고마워. – Ammar
q13의 값을 좁히고 다른 방법으로 벡터를 0과 비교합니다. – Ammar
NEON이 작동하는 동안에는 어떤 종류의 함수 호출도 피해야합니다. ARM 레지스터가 함수 호출에서 발생하는 메모리에 액세스하자 마자 파이프 라인이 정지되어 보통 약 12 사이클을 낭비하게됩니다. –