【发布时间】:2011-09-19 01:26:21
【问题描述】:
我有这段代码:
@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 指令?
【问题讨论】:
-
对于任何 Delphi 无法识别的助记符,您可以使用
DB命令插入原始指令字节。 -
我不知道 delphi 支持任何这样的指令。何时添加支持?
-
@David:我确定他们已经在 D7 中了。
-
无论如何,以防万一人们想知道:用
movd mm0,ebx替换push ebx更慢,而一次性加载两个整数的movq mm4,[eax]比使用mov ebx,[eax] + mov ecx,[eax+4]加载两个整数慢使用 mmx 寄存器作为虚拟堆栈确实可以释放esp以获得漂亮的东西。那确实起作用了。
标签: delphi delphi-2007 inline-assembly sse mmx