Risc-v的栈布局

  1. 函数调用的栈布局

         RISC-V的函数调用约定,尽可能优先使用寄存器来传递参数。默认有8个整数寄存器a0-a7和8个浮点寄存器fa0-fa7可以用,其中前两个(a0,a1)、(fa0,fa1)也用来返回值传递。

函数参数是结构体时,则参数每一个字段按指针长度对齐,参数寄存器中保存的就是结构体最前面8个指针字长的参数数据。

浮点类型的参数将通过浮点寄存器fai传递,否则通过整数寄存器ai传递。

union类型的一部分或者struct数组的浮点参数将通过整数寄存器传递。

变长函数(variadic fuction)的所有参数(包括浮点)都通过整数寄存器传递。

比一个指针字长小的参数,通过参数寄存器的LSB传递。对应的通过栈传递的小于指针字的参数将出现在指针字的较低地址上(RISC-V默认为小端存储器系统)。

指针字的两倍长的参数通过栈传递的时候数据是自然对齐的,通过整数寄存器传递时,它们被放置在对齐的偶-奇( even-odd)寄存器对中, 其中的偶数编号寄存器保存了LSB。例如在RV32中,函数void foo(int, long long)通过a0传递它 的第一个参数,通过a2、a3传递第二个参数。寄存器a1中没有东西。 大小大于两倍指针字的参数,通过引用(reference)传递。

结构体中不能通过寄存器传递的部分参数将通过栈传递,栈指针sp指向第一个没有在寄存器中的参数。

函数的返回值存放在整数寄存器a0、a1或者浮点寄存器fa0、fa1中。不过只有当它们是原始参数或者是只包含1个或者2个浮点值的struct的时候,浮点值才通过浮点寄存器返回,其他两个指针字长类型的返回值放入a0和a1,更大的则全部通过存储器返回(此时这些存储器由调用者分配,并将它作为第一个隐藏参数传递给被调用者)。

在RISC-V调用约定标准中,栈是向下增长并且栈指针总是16字节对齐。

除了参数寄存器和返回值寄存器之外,7个整数寄存器t0-t6和12个浮点寄存器ft0-ft11是临时寄存器,它们在可以在调用过程中被修改,如果后面还有使用的话,则主调者必须先保存起来。12个整数寄存器s0-s11和12个浮点寄存器fs0-fs11在调用过程后被保持不变,如果被调者需要用的话,使用前需要先保存,使用后恢复。下表指明了在调用约定中每个整数寄存器和浮点寄存器扮演的角色。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
RISC-V的软件需求包括以下几个方面: 1. 编译器和工具链:开发RISC-V软件需要支持RISC-V指令集架构的编译器和相应的工具链,包括汇编器、链接器、调试器等。 2. 操作系统:RISC-V需要支持运行在其上的操作系统,例如Linux、FreeRTOS等。这些操作系统需要针对RISC-V进行移植和优化,提供适配RISC-V硬件的驱动程序和系统服务。 3. 库和框架:RISC-V软件开发需要一些常用的库和框架支持,例如C标准库、数学库、网络库、图形库等。此外,还需要针对RISC-V架构进行优化的特定库和框架,例如嵌入式库、向量化库等。 4. 开发工具和环境:为了方便RISC-V软件的开发和调试,还需要相应的开发工具和环境,例如集成开发环境(IDE)、仿真器、调试器等。 RISC-V虚拟化需要掌握以下知识: 1. 虚拟化原理:了解虚拟化的基本概念、原理和技术,包括虚拟机监控器(VMM)、虚拟机(VM)、虚拟化扩展指令等。 2. RISC-V架构和特性:深入了解RISC-V架构的特点和指令集扩展,如RISC-V Privileged Architecture、RISC-V Vector Extension等。 3. 虚拟化软件:熟悉常用的虚拟化软件,例如QEMU、KVM等,了解它们在RISC-V上的支持和使用。 4. 虚拟设备模拟和驱动开发:理解虚拟化环境下设备模拟和驱动开发的原理和方法,包括虚拟设备的模拟技术和与宿主机通信的接口。 RISC-V的软件生态需要做以下工作: 1. 移植和优化常用软件:将常用的开源软件移植到RISC-V平台,并对其进行性能优化和适配,以满足RISC-V平台的需求。 2. 开发和维护RISC-V工具链:为RISC-V开发者提供完善的编译器、汇编器、调试器等工具链支持,以便开发高效的RISC-V软件。 3. 建立RISC-V应用生态:促进RISC-V应用的发展,鼓励开发者在RISC-V平台上创新和开发各类应用,提高RISC-V生态系统的完备性和多样性。 4. 提供技术支持和培训:为RISC-V开发者提供技术支持和培训,帮助他们更好地理解和使用RISC-V软件生态的相关工具和技术。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值