从 xmm 寄存器提取数据到“标准”;变量,内在变量
如何从 xmm 寄存器中提取 2 个字节或任意数量的字节?
目前我正在使用一个数组来转储整个寄存器,然后访问我想要的字节。然而,这似乎没有那么有效。有没有办法有效地获取我感兴趣的字节?
(我在 Linux 64 位上使用 C 语言工作)
How can I extract 2 bytes or any amount of bytes from xmm register?
Currently I am using an array to dump the whole register and then I access the bytes that I want. However that seems not as efficient as it could be. Is there a way to efficiently get just the bytes I am interested in?
(I am working in C on Linux 64bit)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您可能需要的指令的助记符是
MOVD
和MOVQ
,相应的内在函数是_mm_cvtsi128_si32
和_mm_cvtsi128_si64
。The mnemonics for the instructions you probably want are
MOVD
andMOVQ
and corresponding intrinsics are_mm_cvtsi128_si32
and_mm_cvtsi128_si64
.使用 SSE2,您可以在中找到 _mm_extract_epi16 和 _mm_insert_epi16标头。
SSE4.1 在中添加 _mm_extract_epi8、_mm_extract_epi32、_mm_insert_epi8 和 _mm_insert_epi32标头。
您可以搜索其中任何一个以查找确切的语法和语义,但通常“提取”形式采用两个参数:一个 __m128i 和一个表示索引的常量整数。 “插入”形式采用 __m128i、一个值和一个索引。
With SSE2, you can find _mm_extract_epi16 and _mm_insert_epi16 in the <emmintrin.h> header.
SSE4.1 adds _mm_extract_epi8, _mm_extract_epi32, _mm_insert_epi8, and _mm_insert_epi32 in the <smmintrin.h> header.
You can search on any of these to find the exact syntax and semantics, but in general the "extract" forms take two arguments: An __m128i and a constant integer representing the index. The "insert" forms take an __m128i, a value, and an index.
在SSE4.1中引入了 INSERTPS 和 PINS 指令从 x86 寄存器内存位置读取 8、16 或 32 位,并将其插入到给定的目标 XMM 寄存器中的字段中通过立即数操作数。
EXTRACTPS 和 PEXTR 从源 XMM 寄存器读取一个字段并将其插入 x86 寄存器或内存位置。
In SSE4.1 introduced the INSERTPS and PINS instructions read 8, 16 or 32 bits from an x86 register memory location and insert it into a field in the destination XMM register given by an immediate operand.
The EXTRACTPS and PEXTR read a field from the source XMM register and insert it into an x86 register or memory location.