2013-09-05 5 views
2

: 나는이 포인터를 가지고 :로드 벡터 NEON의 내장 함수

int8x16_t* p1=(int8x16_t*)srcimg.data; 
int8x16_t* p2=(int8x16_t*)(srcimg.data+srcimg.cols); 

문제는로드 기능이 하나라는 것이다 :

int8x16_t vld1q_s8(__transfersize(16) int8_t const * ptr); 

함수가 int8_t * 값을 입력받는 이유를 이해할 수 없습니다.

나는 같은 것을 할 싶습니다 :?

int8x16_t vector; 
vector=vld1q_s8(p1); 

내가 그것을 할 수있는 방법을 주셔서 감사합니다.

답변

3

이미 아래처럼 작동해야합니다.

int8x16_t vector; 
vector=vld1q_s8((int8_t *) srcimg.data); 

은 벡터 레이아웃을 쉽게 읽을 수 있도록 작성된 벡터 유형입니다.

int8_t은 바이트라고합니다.

"이 바이트 스트림에서 쿼드 레지스터로로드"와 같이 소리내어 읽어야합니다.

gcc arm intrinsics page도 확인하면 해당 벡터 유형에 대한 포인터를 찾을 수 없어야합니다. 그들은 SIMD 레지스터에 매핑하는 것을 의미하며 일반적으로 레지스터에 대한 포인터를 말하지 않습니다.

네온 프로그래밍에 대한 자세한 내용을 보려면 ARM's websiteblog series을 확인하십시오.

+0

내가하는 일의 차이는 분명하지 않습니다. int8x16_t * p1 = (int8x16_t *) srcimg.data; 그리고 당신이 말했듯이 (int8_t *) srcimg.data를 사용하여 캐스트를 수행하십시오. 한 가지 경우에 우리는 128 비트의 벡터와 다른 경우에는 약 1 바이트에 대해 이야기하고 있습니다. – user2696208

+0

@ user2696208 그리고 다시 모든 행동은'vld1q_s8'가 어떻게 데이터를 읽는가에 달려 있습니다. – auselen

+0

@ user2696208 업데이트 된 답변 – auselen