mra*_*bat 0 delphi assembly freepascal
我已经为矩阵操作创建了一个非常好的汇编程序库,最初用于Delphi 2007+.
这段代码在Delphi下工作得很好,所以我也想支持Freepascal,直到我在一行上遇到汇编语法错误,我才走得很远:
divdp xmm1,[r9 + rax - 112];
Freepascal(实际上是Lazaraus)报告错误:无法识别的opcoded DIVP
我有点困惑,因为这是一个标准的汇编程序指令......任何人都知道如何"教"Freepascal来理解这种类型的指令?
(注意我不想介绍任何db指令......)
Ori*_*lor 10
在新系统上运行汇编代码总是很棘手.
首先,Delphi使用Intel x86汇编语法,其中寄存器名称是rax和xmm1; 而freepascal默认使用GNU/AT&T语法,其中操作数列在目标为最后一个,寄存器名称用%rax和%xmm1表示.如果您更喜欢Intel语法,可以通过在fpc命令行中添加"-Rintel"来切换默认语法,或者将asmmode intel指令添加到源代码文件的顶部:
{$ASMMODE INTEL}
Run Code Online (Sandbox Code Playgroud)
其次,divpd是SSE2指令,因此您可能需要启用SSE作为编译器的"FPU指令集".这似乎是我的fpc 2.6.2 64位安装的默认设置,但是您可能需要在fpc命令行中添加"-Cfsse3"标志.
这个SSE内联汇编一起使用我的freepascal编译器和默认标志.
{$ASMMODE INTEL}
Program ssedemo;
var
X: int32;
Begin
Writeln('Starting SSE now:');
asm
MOV EAX,40
CVTSI2SD XMM1,EAX
MOV ECX,10
CVTSI2SD XMM2,ECX
DIVSD XMM1,XMM2
CVTSD2SI EAX,XMM1
MOV X,EAX
end;
Writeln(X);
End.
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
395 次 |
最近记录: |