我正在使用支持avx和avx2的最新型号i7 cpu,并且据说virtualbox支持avx和avx2,因此以下代码为什么会挂起?
vmovdqa ymm0, qqword[testmem]
testmem在其他地方定义为
align 32
testmem: rb 128
如果我用
movdqa xmm0, dqword[testmem]
它工作正常。
FASM 1.72,Windows 10,i7-7700hq,VirtualBox 5.2.6
编辑:
这是一个UEFI应用程序(显然可以在64位模式下运行),除非出现上述说明,否则运行良好。
编辑
尝试添加
mov rcx, 0
xgetbv
or rax, 0007h
xsetbv
在代码开始时,但没有帮助。
最佳答案
确定找到了答案。我知道这是一个比较深奥的问题,但以防万一,这可以帮助其他人,例如如何启用AVX
mov rax, cr4
or eax, 0x40000 ; bit 18 for oxsave bit
mov cr4, rax
xor rcx, rcx
xgetbv
or rax, 6
xsetbv
我所缺少的是将CR4寄存器的第18位设置为启用OSXSAVE,这是启用AVX之前的要求。