我使用的是支持 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 之前的要求。
关于assembly - vmovdqa 无法在 virtualbox 中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48614808/