Delphi是否支持所有MMX / SSE指令?

时间:2011-06-20 21:37:59

标签: delphi delphi-2007 inline-assembly sse mmx

我有这段代码:

@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指令?

2 个答案:

答案 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是相关的),你将找不到该名称的指令。也就是说,这是你的错误,而不是德尔福缺乏对这条指令的支持。