Qemu中的ARM NEON支持
Android SDK附带的Android仿真器支持NEON指令集仿真(测试自己)。 它基于QEMU。Qemu中的ARM NEON支持
我最近试图用QEMU(仿真Cortex-A9)创建一个自定义虚拟机,并安装了一些ARMEL Linux发行版。
但是,安装后/proc/cpuinfo
在CPU功能中没有显示neon
。 实际上Android模拟器有什么窍门,NEON似乎可以在虚拟机内部使用?
这些值存储在elf_hwcap
(请参见kernel/setup.c)。 vfp/vfpmodule.c检测到NEON
支持并在elf_hwcap
中设置了一点。从这个代码具体而言,
/*
* Check for the presence of the Advanced SIMD
* load/store instructions, integer and single
* precision floating point operations. Only check
* for NEON if the hardware has the MVFR registers.
*/
if ((read_cpuid_id() & 0x000f0000) == 0x000f0000) {
#ifdef CONFIG_NEON
if ((fmrx(MVFR1) & 0x000fff00) == 0x00011100)
elf_hwcap |= HWCAP_NEON;
#endif
#ifdef CONFIG_VFPv3
if ((fmrx(MVFR1) & 0xf0000000) == 0x10000000)
elf_hwcap |= HWCAP_VFPv4;
#endif
}
的read_cpuid_id()
为它获取一个CPU ID位图的协处理器CP15的宏。 fmrx()
也使用另一个VFP协处理器寄存器。因此,您正在使用的仿真器没有正确响应来自任一协处理器寄存器的MRC
指令;或者它可能不支持NEON
仿真。
所以霓虹灯没有在/ proc/cpuinfo中列出并不一定意味着仿真不被支持,对吧? – NumberFour 2013-03-25 08:56:40
@NumberFour这是正确的。你应该小心,Linux可以通过* undefined instructions * exception模拟Neon。然后你会在超级面罩下模仿NEON。我只看到[alignment.c](https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/tree/arch/arm/mm/alignment.c),[vfpdouble .c](https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/tree/arch/arm/vfp/vfpdouble.c)和[vfpsingle.c]( https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/tree/arch/arm/vfp/vfpsingle.c)似乎在模拟指令。 – 2013-03-25 13:46:34
它是一个比你更新的版本或您的配置不同。 – auselen 2013-03-24 15:43:26