2

对于 ARM Arch64 的 NEON 编码,如何将寄存器推入堆栈?似乎 STMFD 不是 Arch64 指令集的一部分?你只是将寄存器对一一保存到堆栈中吗?

4

1 回答 1

1

AArch64 的设计者特意去掉了STM/LDM指令,大概是为了简化指令调度和故障处理。

3.5 内存加载-存储
3.5.1 批量传输

A64 中不存在 LDM、STM、PUSH 和 POP 指令,但是可以使用 LDP 和 STP 指令构建批量传输,这些指令从连续的内存位置加载和存储一对独立的寄存器,并且在访问普通内存时支持未对齐的地址. LDNP 和 STNP 指令还提供“流”或“非临时”提示,表明数据不需要保留在缓存中。PRFM(预取存储器)指令还包括“流式”或“非临时”访问的提示,并允许将预取定位到特定的缓存级别。

(来自ARMv8 ISA 概述

所以是的,你应该使用多个STP/LDP指令。

于 2014-02-25T15:05:37.627 回答