如何使用Delphi 2007检查盒子是否支持AVX.
我的问题仅限于查询cpu中的支持(假设操作系统正常/带有SP1的Windows 7).
PDF文件名为Introduction to Intel® Advanced Vector Extensions
作者Chris Lomont解释了如何做到这一点,并提供了一个示例代码实现,但在c.
它也可以在page获得.
解决方法
这是
Intel blog上给出的汇编代码的翻译:
- 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.