Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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
Arrays 迭代寄存器?_Arrays_Assembly_Iteration_X86 64_Gnu Assembler - Fatal编程技术网

Arrays 迭代寄存器?

Arrays 迭代寄存器?,arrays,assembly,iteration,x86-64,gnu-assembler,Arrays,Assembly,Iteration,X86 64,Gnu Assembler,假设我在内存中有一个4到2字节长的整数数组。 在执行只读计算之前,我想将整个阵列加载到simd寄存器中 leaq myArray,%rax // myArray being a 64bits long array of 4 2 bytes elements movq 0(%rax),%xmm0 // low part of %xmm0 now contains my whole array 根据记忆,我会: movw 0(%rax),%cx // first element of array

假设我在内存中有一个4到2字节长的整数数组。 在执行只读计算之前,我想将整个阵列加载到simd寄存器中

leaq myArray,%rax // myArray being a 64bits long array of 4 2 bytes elements
movq 0(%rax),%xmm0 // low part of %xmm0 now contains my whole array
根据记忆,我会:

movw 0(%rax),%cx // first element of array in memory
movw 2(%rax),%dx // second element of array in memory
movw 4(%rax),%r8w // third element of array in memory
movw 6(%rax),%r9w // last element of array in memory
但我想做一些事情,比如:

movw %xmm0[0],%cx // first element of %xmm0
movw %xmm0[2],%dx // first element of %xmm0
movw %xmm0[4],%r8w // first element of %xmm0
movw %xmm0[6],%r9w // first element of %xmm0

有没有一种方法可以遍历寄存器或直接在寄存器的内容上使用(基、偏移、乘法器)?

不清楚您想要什么,但可能您正在寻找
PINSRW
/
PEXTRW
@Jester谢谢,我会调查的。我有一个循环,它将数组中的每个元素彼此进行比较,我正试图优化这些元素,但似乎最昂贵的操作是内存获取。我想将数组复制到寄存器中,这样可以避免每次比较其中一个数组元素时都从内存中提取数组元素。您可能希望使用并行比较,而不是将项目复制到字寄存器中。听起来像是XY问题,您应该指定您真正想要做的事情。不要使用
lea
,只需使用
movq myArray,%xmm0
。如果要在数组中遍历指针,或使用另一个寄存器对其进行索引,则只需要整数寄存器中的地址。