RISC-V 1.1 calling conventions: register, procedure, and ABI det...

1 下载量 85 浏览量 更新于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标准保持一致。