RISC-V堆栈指针

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的整数倍。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值