Delphi поддерживает все инструкции MMX / SSE? - PullRequest
2 голосов
/ 21 июня 2011

У меня есть этот фрагмент кода:

@combinerows:
    mov esi,eax
    and edi,Row1Mask
    and ebx,Row2Mask
    or ebx,edi
    //NewQ:= (Row1 and Row1Mask) or (Row2 and Row2Mask);

  //Result:= NewQ xor q;
  PUNPCKDQ mm4,mm5   <-- I get an error here
  //mov eax,[eax].q
  movd eax,mm4

  //q:= NewQ;
  mov [esi].q,ebx
  xor eax,ebx  //Return difference.

Я получаю эту ошибку:

[Ошибка Паскаля] SDIMAIN.pas (718): E2003 Необъявленный идентификатор: 'PUNPCKDQ'

Я что-то не так делаю или Delphi 2007 не поддерживает полный набор инструкций MMX / SSE?

Ответы [ 2 ]

4 голосов
/ 21 июня 2011

Быстрый Google дает информацию о PUNPCKLDQ, а не PUNPCKDQ.

D2007 принимает PUNPCKLDQ
и что еще лучше, он также поддерживает PUNPCKHDQ, что позволяет вам переводить высокоуровневое двойное слово в нижнее двойное, что позволяет загрузить его в регистр общего назначения.

3 голосов
/ 21 июня 2011

Delphi 2007 поддерживает наборы команд MMX и SSE.Конечно, Delphi 2010 и XE поддерживают вплоть до наборов инструкций SSE4.2 (но пока не поддерживают AVX).

Тем не менее, Delphi вправе жаловаться на вашу инструкцию "PUNPCKDQ": если вы ищете в Руководстве разработчика программного обеспечения для Intel® 64 и IA-32 Architectures (особенно тома 2A и 2Bбыть актуальным), вы не найдете инструкцию с таким именем.То есть это ваша ошибка, а не отсутствие поддержки Delphi для этой инструкции.

...