2013-09-05 26 views
2

我想從128位的存儲器加載矢量: 我有這些指針:負載向量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); 

int8x16_t是矢量類型,創建以使其易於閱讀矢量佈局。

int8_t是什麼,你會叫一個字節。

閱讀它大聲應該聽起來像「加載到四寄存器從該字節流」。

如果您還檢查gcc arm intrinsics page,你不應該能夠找到任何指向這些矢量類型。他們的意思是映射到SIMD寄存器,並且通常不會指向寄存器的指針。

如果你想獲得更多關於霓虹燈編程的信息,你可以檢查ARM's website和這個blog series

+0

這不是真的清楚我在做差異:int8x16_t * P1 =(int8x16_t *)srcimg.data;並像你說的那樣用(int8_t *)srcimg.data進行轉換。我的意思是,在一種情況下,我們談論的是128位矢量,另一種情況下是一個字節。 – user2696208

+0

@ user2696208並且再一次的所有行爲取決於'vld1q_s8'如何讀取數據。 – auselen

+0

@ user2696208更新了答案。 – auselen