其指令编码的Bit[31:20]为csr字段,其中,[11:10]表示读写属性,[9:8]表示允许访问该系统寄存器的处理器模式,[7:0]用于索引系统寄存器。 RV基础指令集 RV的指令集是最小最基础的指令集,依靠这些基础指令可以实现其他复杂指令的功能。 RV指令编码格式 RV的指令大致可分为6类: R类型:寄存器与寄存器间的算术指令 ...
x4tp用于线程指针 x5t0用于存放临时数据或者备用链接寄存器 x6~x7t1~t2用于存放临时数据寄存器 x8s0/fp...
csrrw tp, CSR_SCRATCH, tp bnez tp, _save_context _restore_kernel_tpsp: /* 把CSR_SCRATCH寄存器的值更新到tp寄存器中 注:第一次执行次语句时,tp寄存器的值被更新为init_task变量的地址*/ csrr tp, CSR_SCRATCH /* 把sp寄存器的值保存到内核线程init_task.thread_info.kernel_sp中 */ REG_S sp, ...
线程指针寄存器:tp(x4) 参数传递 前8个参数:通过参数寄存器 a0-a7 传递。 超过8个参数:通过栈传递,超出的参数会依次压入栈中。 返回值 返回值:使用寄存器 a0 和 a1 返回。如果返回值超过两个寄存器的大小,则通过栈传递。 栈帧布局 每个函数调用都会创建一个新的栈帧,栈帧的布局如下: ...
寄存器是处理器中最常用的处理单元,RISC-V指令的操作数除了立即数就是寄存器。 RISC-V指令集包含了多种不同类型的寄存器,用于不同目的和功能: 对于rv32imafd架构而言,包含如下寄存器: 通用寄存器:32个通用整数寄存器,分别标记为x0-x31,如果是fd扩展,还有32 个独立的浮点寄存器,分别标记为f0-f31 ...
1.RISC-V 调用约束 / 寄存器 RegisterABI NameDescription / 中文描述Saver x0 zero Zero constant / 常数 0 — x1 ra Return address / 返回地址 Caller x2 sp Stack pointer / 栈指针 — x3 gp Global pointer / 全局指针 — x4 tp Thread pointer / 线程指针 Callee x5-x7 t0-t2 Temporaries / 临时...
RISC-V寄存器文件有一个专门用于本地线程数据的线程指针寄存器tp。如果应用程序没有使用本地数据,tp将不被使用(你可以有一个多任务应用程序,但应用程序不使用每个线程的数据副本,因此不需要线程指针)。SEGGER 链接器使该寄存器作为第二个全局变量基址。应用于全局指针的所有转换也可应用于线程指针。当然,你可以为要使...
* interrupts and exceptions*/bge s4, zero, 1f--bge的s4是有符号数,根据scause寄存器如果是中断则MSB为1,即负值。所以大于等于0,则是异常。/*Handle interrupts*/call do_irq--进行中断处理。j ret_from_exception--返回。1:/*Handle other exceptions*/slli t0, s4, RISCV_LGPTR--slli是逻辑左移指令...