2017-03-24 23 views
-1

이 질문은이 one과 매우 유사합니다.armv8-a : SIMD 레지스터가! = 0인지 테스트합니다.

하는 ARMv7-A, I 다음 어셈블리 코드가 있습니다

vcmp.f64 d0, #0 
vmrs APSR_nzcv, fpscr 
beq .jumpover 

가 어떻게 armv8-A이 코드를 변환 할 수 있습니까? v0.16b에 0이 아닌 픽셀이 있는지 테스트하고 싶습니다.

편집 # 1

내가 좋아하는 뭔가에 대해 생각했다 :

addv b0, v0.16b 
fcmp s0, #0.0 
beq .jumpover 

이 맞습니까? 또한 다음 문장을 읽었습니다. "부동 소수점 FCMP 및 FCCMP 명령어가 정수 조건 플래그를 직접 설정하고 FPSR에서 조건 플래그를 수정하지 않습니다." 나는 100 % 확신 할 수 없다.

+0

https://www.element14.com/community/servlet/JiveServlet/previewBody/41836-102-1-229511/ARM.Reference_Manual.pdf를 참조하십시오. 당신 같은 Lools들은 데이터 이동 지침을 원합니다. 당신은 umov w2, v0.8b [1] 다음 cmp w2, # 0 – InfinitelyManic

+0

정수 데이터 형식으로 데이터를 설명하지만 부동 소수점 비교 수행에 대해 이야기하기 때문에 질문이 이해가되지 않습니다. –

+0

ADDV d, Vn. 정수 요소를 스칼라 (벡터)에 합계합니다. /이 B/8B, B/16B, H/4H, H/8H, S/2S 또는 S/4S 인 경우. – InfinitelyManic

답변

1

SH1은 작업 용액을 발견

둘 다 일 동안 그것을해야
mov x0, v0.d[0] 
cmp x0, #0 
beq .jumpover 

mov x0, v0.d[1] 
cmp x0, #0 
beq .jumpover 

[0]과 D [1] 16 개 픽셀을 확인.

+1

예 - 이해가됩니다! – InfinitelyManic

0

smov w1, v1.h [0]의주기를 확인해야합니다. 하나의 SIMD 요소 인 일반 레지스터로 이동합니다. 코멘트에

data                                         
array: .byte 0,0,0,0,0,0,1,0                      
    .text                                         
      .global main                                      

    main:                                         
      ldr x20,=array     // array pointer                             
      ld1 {v0.8b}, [x20]    // just for eg.,                         
      cmgt v1.8b, v0.8b, #0   // any non-zero values ?                           
      addv b1, v1.8b     // vector reduce across lanes - element 0 in all sizes will hold some value :: conjecture          
      smov w1, v1.h[0]    // sign or unsigned - don't matter - index 0 will have some value - check cycles            
      cmp w1, #0      //                                
      cset w1, ne      // just to test - (branch) 
+0

제안에 감사드립니다. 나는 armv7-a에서 그런 식으로 일을했지만 완전히 비효율적이라고 생각합니다. SIMD 데이터에서 추출 할 가격을 8 번 지불하고 매번 비교하기 때문입니다. 나는 네온 전문가가 아니지만 그것이 비싼 슈퍼라고 들었다. – gregoiregentil

+1

아하이. 예, 일반 레지스터와 SIMD 레지스터 사이를 이동하는 것은 비용이 많이 듭니다. 111 페이지부터 시작되는 벡터 산술 (Vector Arithmetic) 섹션을 검토하십시오. 원하는 것일 수있는 벡터 비교 마스크가 있습니다. 내 대답은 삭제하겠습니다. – InfinitelyManic

+1

삭제되지 않은 원본 수정본, – InfinitelyManic