如何使用 Delphi 2007 检查一个盒子是否支持 AVX。
我的问题仅限于查询 CPU 中的支持(假设操作系统正常/带有 SP1 的 Windows 7)。
由 Chris Lomont撰写的题为Intel® Advanced Vector Extensions 简介的 PDF 文档 解释了如何做到这一点,并提供了一个示例代码实现,但使用 c++。
它也可以在这个页面上找到。
如何使用 Delphi 2007 检查一个盒子是否支持 AVX。
我的问题仅限于查询 CPU 中的支持(假设操作系统正常/带有 SP1 的 Windows 7)。
由 Chris Lomont撰写的题为Intel® Advanced Vector Extensions 简介的 PDF 文档 解释了如何做到这一点,并提供了一个示例代码实现,但使用 c++。
它也可以在这个页面上找到。
这是英特尔博客上给出的汇编代码的翻译:
function isAvxSupported: Boolean;
asm
{$IFDEF CPUX86}
push ebx
{$ENDIF}
{$IFDEF CPUX64}
mov r10, rbx
{$ENDIF}
xor eax, eax
cpuid
cmp eax, 1
jb @not_supported
mov eax, 1
cpuid
and ecx, 018000000h
cmp ecx, 018000000h
jne @not_supported
xor ecx, ecx
db 0Fh, 01h, 0D0h //XGETBV
and eax, 110b
cmp eax, 110b
jne @not_supported
mov eax, 1
jmp @done
@not_supported:
xor eax, eax
@done:
{$IFDEF CPUX86}
pop ebx
{$ENDIF}
{$IFDEF CPUX64}
mov rbx, r10
{$ENDIF}
end;
此代码适用于 32 位和 64 位版本的 Delphi。
更新:感谢@PhiS 添加了注册保存代码。