为缩短指令长度而设计的压缩指令,不包含在基础指令集RV32I中,需要单独扩展(不整合在RV32I的原因是,16位RV32C指令和32位RV32I指令混杂在一起会增加解码复杂度,从而使得高性能处理器(如超标量处理器)在一个时钟周期内完成解码变得更难); 压缩指令和RVG指令采用同一套ISA(即每条压缩指令都和一条标准32位RV指令一一对应,为此会舍去一些指令,如Load and Store Multiple等),因此仅需一个解码器即可; 压缩指令只对汇编器和链接器可见,是否以压缩指令取代对应的标准指令由汇编器和链接器决定而不需要编译器编写者和汇编语言程序员参与; 压缩指令只能访问一些常用寄存器(a0-a5、s0-s1、sp以及ra); 隐式写入源操作数的位置,即不指定目的操作数,使用一个源操作数作为目的操作数; 立即数被缩短,load和store操作只使用操作数整数倍的无符号数偏移量; 没有字节或半字指令,因为压缩这些指令对代码长度的影响有限。
|