我有这段代码:
@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 Error] SDIMAIN.pas(718):E2003未声明的标识符:'PUNPCKDQ'
我做错了什么,或者Delphi 2007不支持全套MMX / SSE指令?
答案 0 :(得分:4)
快速Google提供有关PUNPCKLDQ
而不是PUNPCKDQ的信息。
D2007接受PUNPCKLDQ
更好的是它还支持PUNPCKHDQ
,它允许您将高阶双字转换为低双字,使您能够将其加载到通用寄存器中。
答案 1 :(得分:3)
Delphi 2007支持MMX和SSE指令集。当然,Delphi 2010和XE支持SSE4.2指令集(但到目前为止还没有支持AVX)。
但是,德尔福抱怨你的“PUNPCKDQ
”指令是正确的:如果你搜索Intel® 64 and IA-32 Architectures Software Developer’s Manual(特别是卷2A和2B是相关的),你将找不到该名称的指令。也就是说,这是你的错误,而不是德尔福缺乏对这条指令的支持。