delphi – 如何探测英特尔®高级矢量扩展的可用性?

前端之家收集整理的这篇文章主要介绍了delphi – 如何探测英特尔®高级矢量扩展的可用性?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如何使用Delphi 2007检查盒子是否支持AVX.

我的问题仅限于查询cpu中的支持(假设操作系统正常/带有SP1的Windows 7).

PDF文件名为Introduction to Intel® Advanced Vector Extensions
作者Chris Lomont解释了如何做到这一点,并提供了一个示例代码实现,但在c.

它也可以在page获得.

解决方法

这是 Intel blog上给出的汇编代码的翻译:
  1. function isAvxSupported: Boolean;
  2. asm
  3. {$IFDEF cpuX86}
  4. push ebx
  5. {$ENDIF}
  6. {$IFDEF cpuX64}
  7. mov r10,rbx
  8. {$ENDIF}
  9. xor eax,eax
  10. cpuid
  11. cmp eax,1
  12. jb @not_supported
  13. mov eax,1
  14. cpuid
  15. and ecx,018000000h
  16. cmp ecx,018000000h
  17. jne @not_supported
  18. xor ecx,ecx
  19. db 0Fh,01h,0D0h //XGETBV
  20. and eax,110b
  21. cmp eax,110b
  22. jne @not_supported
  23. mov eax,1
  24. jmp @done
  25. @not_supported:
  26. xor eax,eax
  27. @done:
  28. {$IFDEF cpuX86}
  29. pop ebx
  30. {$ENDIF}
  31. {$IFDEF cpuX64}
  32. mov rbx,r10
  33. {$ENDIF}
  34. end;

代码适用于32位和64位版本的Delphi.

更新:注册保存代码,感谢@PhiS.

猜你在找的Delphi相关文章