Доступ к частям регистра mm1 - PullRequest
0 голосов
/ 21 декабря 2010

Возможно ли получить доступ к одному байту в регистре 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 ]

5 голосов
/ 21 декабря 2010

Нет прямой возможности адресовать байты в регистрах MMX, если вы не хотите использовать подход VJo, но это полностью подрывает преимущества использования MMX.

Однако, если у вас есть данные в подходящем формате, возможно, можно поместить их все в регистры и выполнить несколько операций по распаковке, которые бы транспонировали данные.

Кстати, почему вы не используете SSE1 / 2/3/4? MMX довольно устарел. IIRC SSE4 имеет прямые 8/16/32/64-битные инструкции извлечения.

4 голосов
/ 21 декабря 2010

Да, это возможно.

Я могу показать код для SSE2 для c ++, но аналогично для MMX:

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