访问mm1寄存器部件

时间:2010-12-21 17:02:14

标签: c++ x86 sse simd mmx

是否可以访问mmx寄存器中的单个字节,如数组? 我有这段代码:

movq mm1,vector1
movq mm2,vector2
psubw mm1,mm2

我想把mm1 [1],mm1 [2],mm1 [3] ....放到c ++变种中,比如:

int a,b=0;
mov a,mm1[1]
mov b,mm1[2]

感谢。

2 个答案:

答案 0 :(得分:5)

除非你想使用VJo的方法,否则没有直接的可能性来处理MMX寄存器中的字节,但这完全破坏了首先使用MMX的好处。

但是,如果您的数据格式良好,则可以将它们全部放在寄存器中并执行一系列解包操作,这将转置数据。

BTW为什么不使用SSE1 / 2/3/4? MMX已经过时了。 IIRC SSE4具有直接8/16/32/64位提取指令。

答案 1 :(得分:4)

是的,这是可能的。

我可以为c ++显示SSE2的代码,但与MMX类似:

__m128i a;
unsigned char *p = (unsigned char*) &a;
// access bytes pointed by pointer p