2

我有这段代码:

@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.

我收到此错误:

[Pascal 错误] SDIMAIN.pas(718):E2003 未声明的标识符:'PUNPCKDQ'

是我做错了什么,还是 Delphi 2007 不支持全套 MMX/SSE 指令?

4

2 回答 2

4

快速谷歌提供有关PUNPCKLDQ而不是 PUNPCKDQ 的信息。

D2007 接受PUNPCKLDQ
甚至更好地支持PUNPCKHDQ,它可以让您将高位 dword 传输到低位 dword,使您能够将其加载到通用寄存器中。

于 2011-06-20T21:51:12.323 回答
3

Delphi 2007 支持 MMX 和 SSE 指令集。当然,Delphi 2010 和 XE 最多支持 SSE4.2 指令集(但目前不支持 AVX)。

但是,Delphi 抱怨您的“ PUNPCKDQ”指令是正确的:如果您搜索英特尔® 64 和 IA-32 架构软件开发人员手册(尤其是第 2A 卷和第 2B 卷),您将找不到该名称的指令。即,这是您的错误,而不是 Delphi 不支持该指令。

于 2011-06-21T08:48:01.553 回答