You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FPC编译CVTSD2SS指令失败,Delphi可用汇编代码如何适配FPC

问题根因

FPC 内置汇编器对 SSE 指令的内存操作数尺寸推断逻辑与 Delphi 汇编器存在差异:CVTSD2SS 指令的源操作数要求为 64 位双精度浮点内存单元,但 FPC 默认将无尺寸标注的 [RAX] 推断为 128 位内存单元,与指令要求的操作数规格不匹配,因此触发操作数组合无效报错。

修改后可正常编译的代码

兼容原有写法的版本

procedure LoadSingle(P: Pointer); assembler;
asm
    MOV RAX, P
    CVTSD2SS XMM0, qword [RAX]
end;

仅需将 Delphi 语法中的 QWORD PTR 替换为 FPC 汇编器识别的 qword 尺寸标注即可解决编译错误。

优化版(Windows x64 平台适用)

基于 Windows x64 调用约定,第一个指针参数默认通过 RCX 寄存器传递,可省略不必要的寄存器拷贝操作,代码更精简高效:

procedure LoadSingle(P: Pointer); assembler;
asm
    CVTSD2SS XMM0, qword [RCX]
end;

内容的提问来源于stack exchange,提问作者Vlad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 14:18:04