ARM to C 调用约定,NEON 寄存器保存

标签 arm neon abi

有一个similar post涵盖常规寄存器。 NEON寄存器怎么样。据我所知,必须在函数调用之间保留寄存器的上半部分或下半部分。
我在任何地方都找不到该信息,有人可以澄清一下吗?

谢谢

来自 the AAPCS, §5.1.1 Core registers :

  • r0-r3 是参数和临时寄存器; r0-r1 也是结果寄存器
  • r4-r8 是被调用者保存寄存器
  • r9 可能是被调用者保存寄存器(在 AAPCS 的某些变体上,它是一个特殊寄存器)
  • r10-r11 是被调用者保存寄存器
  • r12-r15 是特殊寄存器

  • 来自 the AAPCS, §5.1.2.1 VFP register usage conventions (VFP v2, v3 and the Advanced SIMD Extension) :
  • s16–s31 (d8–d15, q4–q7) 必须保留
  • s0–s15 (d0–d7, q0–q3) d16–d31 (q8–q15) 不需要保存
  • 最佳答案

    来自 the AAPCS, §5.1.2.1 :

  • s16–s31 (d8–d15, q4–q7) 必须保留
  • s0–s15 (d0–d7, q0–q3) d16–d31 (q8–q15) 不需要保存
  • 关于ARM to C 调用约定,NEON 寄存器保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5288390/

    相关文章:

    arm - Arm中的任务切换

    c++ - 无法将 qmake 文件添加到 Qt 版本 [armhf]

    范围内的恒定时间随机数

    c++ - 程序集用寄存器值替换常量

    c++ - 知道哪个编译器用 C++ 生成特定的二进制文件至关重要吗?

    c - visual studio c 库的 ABI 兼容性

    linux - 旧的 ARM32 二进制文件可以在 AARCH64 内核上运行吗?

    arm - 为什么 Clang 不对 AArch32 上的 __builtin_popcountll 使用 vcnt?

    C 嵌入式程序集错误 : ‘asm’ operand has impossible constraints

    c - ARM 过程调用标准是否允许与 C 标准相矛盾的 volatile 优化?