RISC-V堆栈指针

  • Post author:
  • Post category:其他


RISC-V使用“full-descending”堆栈模型,堆栈寄存器用的是x2通用寄存器,要求128位对齐。

mingdu.zheng

at

gmail

dot

com


http://blog.csdn.net/zoomdy/article/details/79358412

RISC-V堆栈寄存器用的是x2,这在

The RISC-V Instruction Set Manual Volume I: User-Level ISA

Chapter 20 RISC-V Assembly Programmer’s Handbook 约定。在没有“C”扩展的情况下,理论上讲可以使用x1~x31中的任何一个寄存器作为堆栈寄存器,使用x2仅仅是软件接口上的约定。引入“C”扩展的情况下,“C”扩展包含的堆栈相关Load/Store指令明确使用x2作为堆栈指针,这就不仅仅是一种约定了,而是强制规定了。

堆栈是向下生长,并且要求128位(即16字节)对齐,这在

RISC-V ELF psABI specification

约定:

The stack grows downwards and the stack pointer shall be aligned to a 128-bit boundary upon procedure entry.

为什么要求128位对齐?RISC-V在设计的时候已经在考虑128位系统,即RV128I,RV128I的通用寄存器是128位宽的。如果是RV32E,那么堆栈只要32位对齐就可以了。

堆栈指针当前值是指向堆栈的有效数据,我没有找到明确指出这一条的文档,是从现有的堆栈指针初始化代码和C程序反汇编中得出的结论,RISC-V用的应该是“full-descending”堆栈模型。将数据存储到堆栈之前要首先将堆栈指针递减,递减值必须是16的整数倍。



版权声明:本文为zoomdy原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。