代码之家  ›  专栏  ›  技术社区  ›  GJ.

将两个x86 32位寄存器存储到128位xmm寄存器中

  •  9
  • GJ.  · 技术社区  · 16 年前

    有没有更快的方法将两个x86 32位寄存器存储在一个128位XMM寄存器中?

      movd  xmm0, edx
      movd  xmm1, eax
      pshufd xmm0, xmm0, $1
      por   xmm0, xmm1 
    

    因此,如果eax为0x12345678,edx为0x87654321,则xmm0中的结果必须为0x8765432112345678。

    谢谢

    2 回复  |  直到 8 年前
        1
  •  15
  •   Peter Cordes    8 年前

    使用SSE 4.1,您可以使用 movd xmm0, eax / pinsrd xmm0, edx, 1 按照2条说明进行。

    对于较旧的CPU,可以使用2 x movd 然后 punpckldq 共3条说明:

    movd xmm0, edx
    movd xmm1, eax
    punpckldq xmm0, xmm1
    
        2
  •  1
  •   Jens Björnhager    16 年前

    我对MMX不太了解,但也许你需要packsdw指令。

    packsdw指令接受两个 源操作数中的双字和 中的两个双字 目标操作数并转换这些操作数 通过饱和把四个有符号的词。 指令包含这四个字 将结果存储在 目的地MMX寄存器。

    (从 http://webster.cs.ucr.edu/AoA/Windows/HTML/TheMMXInstructionSeta2.html )

    编辑:我刚意识到那些是SSE寄存器。哦,好吧。

    编辑:我现在要闭嘴了。

    推荐文章