Is it possible that my 32bit (i686) VM does not support 32bit instructions?
我的32位(i686)VM是否可能不支持32位指令?
I am getting a SIGILL in the 32bit ipp library when run on a test VM.
在测试VM上运行时,我在32位ipp库中获得了SIGILL。
lscpu:
lscpu:
Architecture: i686 CPU op-mode(s): 64-bit CPU(s): 2 Thread(s) per core: 1 Core(s) per socket: 1 CPU socket(s): 2 Vendor ID: GenuineIntel CPU family: 6 Model: 45 Stepping: 7 CPU MHz: 1995.192 L1d cache: 32K L1i cache: 32K L2 cache: 256K L3 cache: 20480K
架构:i686 CPU操作模式:64位CPU:每个核心2个线程:每个插槽1个核心:1个CPU插槽:2个供应商ID:GenuineIntel CPU系列: 6型号:45步进:7 CPU MHz:1995.192 L1d缓存:32K L1i缓存:32K L2缓存:256K L3缓存:20480K
Does the "op-mode: 64bit" imply that this VM only supports 64bit instructions? My (64bit) baremetal desktop reports: CPU op-mode(s): 32-bit, 64-bit
which implies to me that 64bit
is not a superset of 32bit
and that my i686 VM is actually not capable of executing 32bit instructions?
“op-mode:64bit”是否意味着此VM仅支持64位指令?我的(64位)裸机桌面报告:CPU操作模式:32位,64位,这意味着64位不是32位的超集,而我的i686虚拟机实际上无法执行32位指令?
Is this logic correct? If so am I right in the suspicion that this is the reason the 32bit ipp SIGILL's (it calls a 32bit instruction and fails?)
这个逻辑是否正确?如果是这样,我怀疑这是32位ipp SIGILL的原因(它调用32位指令并失败?)
1 个解决方案
#1
0
As long as you can run an 32-bit OS inside your VM at all, your virtual CPU supports Intel 32 bit instructions. Most likely it is bugs in your library that cause it to SIGILL. Attaching a debugger and looking at the actual instruction bytes (opcode) should sched more light on what might've gone wrong.
只要您可以在VM中运行32位操作系统,您的虚拟CPU就支持Intel 32位指令。很可能是你的库中存在导致SIGILL的错误。附加一个调试器并查看实际的指令字节(操作码)应该可以解决可能出错的问题。
Answering your second question: no, Intel 64 (or AMD64) is not a strict superset of Intel 32 architecture. Certain instructions are not encodable or have assumed a new meaning. The most prominent example are 0x40-0x4F which were INC and DEC on 32-bit systems but are parts of opcode (so called REX prefix) in Inlte 64 architecture. But in the case of using a VM that abstracts host architecture from target architecture, it really should not matter.
回答你的第二个问题:不,英特尔64(或AMD64)不是英特尔32架构的严格超集。某些指令不可编码或具有新的含义。最突出的例子是0x40-0x4F,它是32位系统上的INC和DEC,但是Inlte 64架构中的操作码(所谓的REX前缀)的一部分。但是在使用从目标体系结构中抽象主机体系结构的VM的情况下,它确实无关紧要。
#1
0
As long as you can run an 32-bit OS inside your VM at all, your virtual CPU supports Intel 32 bit instructions. Most likely it is bugs in your library that cause it to SIGILL. Attaching a debugger and looking at the actual instruction bytes (opcode) should sched more light on what might've gone wrong.
只要您可以在VM中运行32位操作系统,您的虚拟CPU就支持Intel 32位指令。很可能是你的库中存在导致SIGILL的错误。附加一个调试器并查看实际的指令字节(操作码)应该可以解决可能出错的问题。
Answering your second question: no, Intel 64 (or AMD64) is not a strict superset of Intel 32 architecture. Certain instructions are not encodable or have assumed a new meaning. The most prominent example are 0x40-0x4F which were INC and DEC on 32-bit systems but are parts of opcode (so called REX prefix) in Inlte 64 architecture. But in the case of using a VM that abstracts host architecture from target architecture, it really should not matter.
回答你的第二个问题:不,英特尔64(或AMD64)不是英特尔32架构的严格超集。某些指令不可编码或具有新的含义。最突出的例子是0x40-0x4F,它是32位系统上的INC和DEC,但是Inlte 64架构中的操作码(所谓的REX前缀)的一部分。但是在使用从目标体系结构中抽象主机体系结构的VM的情况下,它确实无关紧要。