Arm 如何使用neon Intrinsic加载3个浮动
我正在尝试将此neon代码转换为内部函数:Arm 如何使用neon Intrinsic加载3个浮动,arm,neon,intrinsics,Arm,Neon,Intrinsics,我正在尝试将此neon代码转换为内部函数: vld1.32 {d0}, [%[pInVertex1]] flds s2, [%[pInVertex1], #8] 这会将3个32位浮点从变量pInVertex1加载到d0和d1寄存器中。 我找不到任何与instrinsics相同的版本。有vld1q_f32,但仅适用于4个浮点数。有谁知道这样做的有效方法(我的意思是不需要额外复制)?在Aarch32中只写入3个32位浮点的唯一指令是
vld1.32 {d0}, [%[pInVertex1]]
flds s2, [%[pInVertex1], #8]
这会将3个32位浮点从变量pInVertex1加载到d0和d1寄存器中。
我找不到任何与instrinsics相同的版本。有vld1q_f32,但仅适用于4个浮点数。有谁知道这样做的有效方法(我的意思是不需要额外复制)?在Aarch32中只写入3个32位浮点的唯一指令是多加载指令:
r0 holds the address of the structure
FLDMIAS r0, {s0-s2}
这可以在VFP或Neon代码中使用
我不知道相应的内部指令。在Aarch32中只写入3个32位浮点的唯一指令是多加载指令:
r0 holds the address of the structure
FLDMIAS r0, {s0-s2}
这可以在VFP或Neon代码中使用
我不知道相应的内在特性。在中,我将XMLoadFloat3
的ARM-NEON版本实现为:
float32x2_t x = vld1_f32( reinterpret_cast<const float*>(pSource) );
float32x2_t zero = vdup_n_f32(0);
float32x2_t y = vld1_lane_f32( reinterpret_cast<const float*>(pSource)+2, zero, 0 );
return vcombine_f32( x, y );
float32x2\u t x=vld1\u f32(重新解释铸造(pSource));
float32x2_t zero=vdup_n_f32(0);
浮动32x2_t y=vld1_车道_f32(重新解释铸造(pSource)+2,零,0);
返回vcombine_f32(x,y);
在中,我将XMLoadFloat3的ARM-NEON版本实现为:
float32x2_t x = vld1_f32( reinterpret_cast<const float*>(pSource) );
float32x2_t zero = vdup_n_f32(0);
float32x2_t y = vld1_lane_f32( reinterpret_cast<const float*>(pSource)+2, zero, 0 );
return vcombine_f32( x, y );
float32x2\u t x=vld1\u f32(重新解释铸造(pSource));
float32x2_t zero=vdup_n_f32(0);
浮动32x2_t y=vld1_车道_f32(重新解释铸造(pSource)+2,零,0);
返回vcombine_f32(x,y);
是否可以调整寄存器的使用,使其能够与单车道vld3
一起工作,即s0
,s2
,s4
而不是s0
,s1
,s2
?(尽管我不确定在intrinsics中会是什么样子。)否则,可能值得考虑的是,用一个vld1
加载4个元素并忽略其中一个将不会比两个单独的指令(可能更多)更有效,假设a)垃圾s3
是可以的,并且b)您布局数据,这样读取到最后就不会有问题。也许,我可以这样做,但它只适用于加载值。当我将3个值写入数组时,我也遇到了同样的问题。如果我写4个值,那么我将覆盖来自不同顶点的数据。是否可以调整寄存器的使用,使其能够与单通道vld3
一起工作,即s0
,s2
,s4
而不是s0
,s1
,s2
?(尽管我不确定在intrinsics中会是什么样子。)否则,可能值得考虑的是,用一个vld1
加载4个元素并忽略其中一个将不会比两个单独的指令(可能更多)更有效,假设a)垃圾s3
是可以的,并且b)您布局数据,这样读取到最后就不会有问题。也许,我可以这样做,但它只适用于加载值。当我将3个值写入数组时,我也遇到了同样的问题。如果我写了4个值,那么我将覆盖来自不同顶点的数据。谢谢,知道这一点很有用。所以,这是我需要的FLDMIAS的内在版本。谢谢,知道这一点很有用。所以,我需要的是FLDMIAS的内在版本。