RISC-V中间表示Tigger:语法、寄存器与函数特性详解

需积分: 0 8 下载量 54 浏览量 更新于2024-08-05 收藏 170KB PDF 举报
Tigger1文档详细介绍了Tigger,这是一种专为RISC-V架构设计的中间表示语言,主要用于寄存器分配。Tigger的设计理念强调简洁易读,借鉴了Eeyore的风格,旨在帮助学习者快速上手。 首先,Tigger共拥有28个寄存器,包括x0(始终为0)、s0-s11(用于保存被调用者的数据)、t0-t6(同理)以及a0-a7,其中a0-a1用于函数参数和返回值。由于MiniC限制,实际参数传递通常不超过8个,且a0主要作为返回值。Tigger支持Eeyore中的所有运算符,但仅允许'+'和'<'用于特定的寄存器操作。 在表达式和控制流方面,Tigger中的所有计算都在寄存器上进行,并且对数组赋值有特别的规定,由于类型限制,数组赋值括号内的数字需为4的倍数。标号和跳转语句与Eeyore语法一致,且是全局可见的。 函数定义遵循特定格式,如f_xxx[2][3],其中第一个中括号代表参数数量,第二个表示所需栈空间(以字节为单位)。函数结束使用endf_xxx,必须包含返回语句并通过寄存器传递返回值。调用函数使用callf_xxx命令。 栈内存操作是Tigger的关键部分,每个函数都有自己的栈空间,大小由函数定义中的参数决定。storeReg<INTEGER>用于将寄存器内容存储到栈空间指定位置,load<INTEGER>Reg则用于从栈中加载数据。这里的<INTEGER>限于函数栈空间大小的非负整数范围内。 Tigger1文档深入阐述了这种针对RISC-V的中间表示语言,强调了寄存器管理、表达式处理、函数调用和栈内存操作等核心概念,为开发者在RISC-V平台上编写高效代码提供了明确的指导。