RISC-V 1.1 calling conventions: register, procedure, and ABI det...
122 浏览量
更新于2024-06-16
收藏 692KB PDF 举报
RISC-V Calling Conventions, Version 1.1 是一份针对RISC-V架构的预发布规范文档,主要关注函数调用约定(Procedure Calling Convention)和类型细节。该文档定义了RISC-V架构下不同类型的寄存器使用规则、内存管理和系统调用的处理方式,旨在确保软件开发者在使用RISC-V处理器时能够实现一致的编程接口。
1. **寄存器公约**:
- **整数寄存器公约**:规定了整数操作数如何存储和传递,包括通用寄存器的使用和可能的优化策略。
- **帧指针公约**:明确了帧指针在函数调用中的作用和存储位置,对于栈帧管理至关重要。
- **浮点寄存器公约**:定义了浮点数的处理方式,包括硬件浮点支持下的数据传递规则。
- **向量寄存器公约**:针对向量数据类型,如SIMD或向量指令集的处理方法。
2. **程序调用公约**:
- **整数调用公约**:详细描述了参数传递的顺序、大小和对齐方式,适用于常规函数调用。
- **硬件浮点调用公约**:强调了与硬件浮点单元直接交互的函数调用规范。
- **标准向量调用公约**:提供了一种标准化的向量数据处理方式,适应不同的向量长度和内存布局。
- **ILP32E调用公约**:针对特定内存模型(如32位系统内存模型)的扩展,可能涉及不同数据大小的处理。
- **命名ABIs**:列举了特定应用场景下的命名约定,以适应不同需求的编译器和库。
- **默认ABIs**:指出了在没有明确指定时的默认行为,有助于简化开发过程。
3. **系统调用的调用公约**:描述了操作系统与用户空间交互时的参数传递方式,以及可能涉及的特殊处理。
4. **C/C++类型细节**:
- **C/C++类型大小和对齐**:规定了基本数据类型在内存中的存储格式,如整型、浮点型和结构体。
- **固定长度向量**:解释了向量类型在内存中的存储方式,以及如何处理不同类型的数据元素。
- **C/C++类型表示**:包括内存布局和指针处理等概念。
- **va_list、va_start和va_arg**:介绍了可变参数列表的处理机制,用于处理不定数量的函数参数。
5. **Linux特定ABI**:
- Linux特有的C类型大小和对齐规则,可能与通用RISC-V规定有所不同。
- Linux特有的C类型表示方式,可能包括特定于Linux内核的扩展。
这份文档对于RISC-V平台上的软件开发者来说是极其重要的,它提供了必要的指导来编写兼容RISC-V架构的高效和正确代码。随着版本的更新,开发者应持续关注新规范,以确保其代码与最新的RISC-V标准保持一致。
2021-12-30 上传
2023-10-23 上传
2021-09-11 上传
2024-04-08 上传
2022-07-15 上传
2021-09-30 上传
2022-09-23 上传
2022-09-21 上传
2021-05-29 上传
逸云沙鸥のIHave@Dream
- 粉丝: 362
- 资源: 1