【发布时间】:2010-12-21 17:02:14
【问题描述】:
是否可以访问 mmx 寄存器中的单个字节,例如数组? 我有这个代码:
movq mm1,vector1
movq mm2,vector2
psubw mm1,mm2
我想把 mm1[1],mm1[2],mm1[3]....放到 c++ vars 中,比如:
int a,b=0;
mov a,mm1[1]
mov b,mm1[2]
谢谢。
【问题讨论】:
是否可以访问 mmx 寄存器中的单个字节,例如数组? 我有这个代码:
movq mm1,vector1
movq mm2,vector2
psubw mm1,mm2
我想把 mm1[1],mm1[2],mm1[3]....放到 c++ vars 中,比如:
int a,b=0;
mov a,mm1[1]
mov b,mm1[2]
谢谢。
【问题讨论】:
除非您想使用 VJo 的方法,否则无法直接寻址 MMX 寄存器中的字节,但这完全破坏了首先使用 MMX 的好处。
但是,如果您有合适格式的数据,则可以将它们全部放在寄存器中并执行一系列解包操作,这将转置数据。
顺便说一句,您为什么不使用 SSE1/2/3/4? MMX 相当过时。 IIRC SSE4 具有直接的 8/16/32/64 位提取指令。
【讨论】:
是的,有可能。
我可以展示 C++ 的 SSE2 的代码,但对于 MMX 类似:
__m128i a;
unsigned char *p = (unsigned char*) &a;
// access bytes pointed by pointer p
【讨论】: