"ARM体系结构过程调用标准"(AAPCS/EABI)声明(5.1.1)
"The role of register r9 is platform specific."
Run Code Online (Sandbox Code Playgroud)
但
"A virtual platform [...] may designate r9 as an additional callee-saved
variable register, v6."
Run Code Online (Sandbox Code Playgroud)
问题是:Linux内核是否将r9用于特殊用途?或者它是否用作普通的非易失性寄存器?
我有兴趣找到比较存储在Cortex-A9内核上的NEON寄存器(比如Q0和Q3)的值的最快方法(最低周期数)(允许VFP指令).
到目前为止,我有以下内容:
(1)使用VFP浮点比较:
vcmp.f64 d0, d6
vmrs APSR_nzcv, fpscr
vcmpeq.f64 d1, d7
vmrseq APSR_nzcv, fpscr
Run Code Online (Sandbox Code Playgroud)
如果64位"浮动"等同于NaN,则此版本将不起作用.
(2)使用NEON缩小和VFP比较(这次只有一次并且以NaN安全的方式):
vceq.i32 q15, q0, q3
vmovn.i32 d31, q15
vshl.s16 d31, d31, #8
vcmp.f64 d31, d29
vmrs APSR_nzcv, fpscr
Run Code Online (Sandbox Code Playgroud)
D29寄存器先前预先加载了正确的16位模式:
vmov.i16 d29, #65280 ; 0xff00
Run Code Online (Sandbox Code Playgroud)
我的问题是:有没有比这更好的了?我是否在监督一些明显的方法呢?
给定 PCI 设备的地址(即总线、设备、功能),如何在用户空间中使用 Win32 API 调用以编程方式读取该设备的配置空间(例如供应商 ID、设备 ID)?
在 Linux 上,打开 /sys/bus/pci/devices//config 文件并从正确的偏移量读取。