在MIPS中,R-format的编码方式如下
opcode (6) | rs (5) | rt (5) | rd (5) | shamt (5) | funct (6)
shamt
字段仅在移位或旋转指令中使用 。在其他情况下,它始终为0。那么为什么他们不能将其用于其他更有用的东西呢?
恕我直言,最好使用该字段来存储用于在add
或sub
指令中存储进位/借位的寄存器号。例如
addu $Rdest, $Rcarry, $Rsrc1, $Rsrc2
$Rcarry
仅根据进位而设置为0或1。这将使其对多精度算术更加有用。具有标志寄存器的体系结构可以在2条指令中执行双字加法,而MIPS需要3条指令,因为进位需要在单独的指令中计算。乘法也将从中受益,因为输出的高低都可以在指令本身中指定,而不是浪费几个操作码来进行HI / LO寄存器的移动
类似地,对于 shift 指令,rs
字段固定为0。他们为什么不使用它来支持诸如x86的shrd/shld
之类的多字转换呢?或者,只需将rs/shamt
中的那5位用作 sub-opcode 字段。这将大大增加操作码空间。有了更大的空间,MIPSr6可能不需要进行重大更改,只需删除一些指令以留出空间以供将来扩展