Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arm 如何使用neon Intrinsic加载3个浮动_Arm_Neon_Intrinsics - Fatal编程技术网

Arm 如何使用neon Intrinsic加载3个浮动

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位浮点的唯一指令是

我正在尝试将此neon代码转换为内部函数:

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的内在版本。