tinyriscv——gp寄存器/riscv-tests的变化
在 RISC-V 中,gp 寄存器是全局指针(Global Pointer)寄存器,用于存储全局数据区(.data 和 .sdata 段)的地址。在程序启动时,该寄存器会被设置为一个固定的值,通常为 __global_pointer$的地址,表示全局指针的起始地址。在一些情况下,可以通过修改该寄存器的值来实现一些特定的功能。
在常见的用法下,其可以替换掉lui或puipc指令的 absolute/pc-relative寻址,变为gp-relative寻址,使得代码效率更高。
在最新的riscv-tests中,如果程序测试成功,会执行RVTEST_PASS,其会使TESTNUM,TESTNUM被设置为gp
目前尚不清楚为何这么做。
在tinyriscv中找到了riscv-tests的改版,可以注意到RVTEST_PASS和FAIL的定义并非现在这样tinyriscv/riscv_test.h at master · liangkangnan/tinyriscv · GitHub
将成功与失败的条件改为x26和x27的值,并在testbench中判断,在rocket设计中我们也可以沿用这一点,从而大大简化仿真架构。