RV32M/RV64M指令集
本帖最后由 皋陶 于 2021-3-5 22:09 编辑RISC-V定义了可选的RV32M,它定义了整数乘法除法指令。总共8条指令。
一、mul
mul rd, rs1, rs2 //x = x × x
乘(Multiply). R-type, RV32M and RV64M.
把寄存器 x乘到寄存器 x上,乘积写入 x。忽略算术溢出。
func7rs2rs1func3rdopcode
nametype313029282726252423222120191817161514131211109876543210
mulR00000010000110011
例子:00000000 <.text>:
0: 027302b3 mul x5,x6,x7
二、mulh
mulh rd, rs1, rs2 //x = (x s ×s x) ≫s XLEN
高位乘(Multiply High). R-type, RV32M and RV64M.
把寄存器 x乘到寄存器 x上,都视为 2 的补码,将乘积的高位写入 x。
func7rs2rs1func3rdopcode
nametype313029282726252423222120191817161514131211109876543210
mulhR00000010010110011
例子:00000000 <.text>:
0: 027312b3 mulh x5,x6,x7
三、mulhu
mulhu rd, rs1, rs2 //x = (xu ×u x) ≫u XLEN
高位无符号乘(Multiply High Unsigned). R-type, RV32M and RV64M.
把寄存器 x乘到寄存器 x上, x、 x均为无符号数,将乘积的高位写入 x。
func7rs2rs1func3rdopcode
nametype313029282726252423222120191817161514131211109876543210
mulhuR00000010110110011
例子: 0: 027332b3 mulhu x5,x6,x7
四、mulhsu
mulhsu rd, rs1, rs2 //x = (xu ×s x) ≫s XLEN
高位有符号-无符号乘(Multiply High Signed-Unsigned). R-type, RV32M and RV64M.
把寄存器 x乘到寄存器 x上, x为 2 的补码, x为无符号数,将乘积的高位写入 x
func7rs2rs1func3rdopcode
nametype313029282726252423222120191817161514131211109876543210
mulhsuR00000010100110011
例子:00000000 <.text>:
0: 027322b3 mulhsux5,x6,x7
五、div
div rd, rs1, rs2 //x = x ÷s x
除法(Divide). R-type, RV32M and RV64M.
用寄存器 x的值除以寄存器 x的值,向零舍入,将这些数视为二进制补码,把商写入 x。
func7rs2rs1func3rdopcode
nametype313029282726252423222120191817161514131211109876543210
divR00000011000110011
例子: 0: 027342b3 div x5,x6,x7
六、divu
divu rd, rs1, rs2 x = x ÷u x
无符号除法(Divide, Unsigned). R-type, RV32M and RV64M.
用寄存器 x的值除以寄存器 x的值,向零舍入,将这些数视为无符号数,把商写入x。
func7rs2rs1func3rdopcode
nametype313029282726252423222120191817161514131211109876543210
divuR00000011010110011
例子: 0: 027352b3 divu x5,x6,x7
七、rem
rem rd, rs1, rs2 //x = x %s x
求余数(Remainder). R-type, RV32M and RV64M.
x除以 x,向 0 舍入,都视为 2 的补码,余数写入 x。
func7rs2rs1func3rdopcode
nametype313029282726252423222120191817161514131211109876543210
remR00000011100110011
例子: 0: 027362b3 rem x5,x6,x7
八、remu
remu rd, rs1, rs2 x = x %u x
求无符号数的余数(Remainder, Unsigned). R-type, RV32M and RV64M.
x除以 x,向 0 舍入,都视为无符号数,余数写入 x。
func7rs2rs1func3rdopcode
nametype313029282726252423222120191817161514131211109876543210
remuR00000011110110011
例子: 0: 027372b3 remu x5,x6,x7
如果希望得到两个32位整数相乘的完整的64位结果,Risc-V推荐使用下面的指令:
mulh rdh,rs1, rs2;mul rdl rs1,rs2
其中要求:两条指令的源操作数索引号和顺序必须完全相同。第一条指令的rdh索引必须不能与rs1,rs2索引号相同。处理器实现的微架构可以把两条指令融合成一条指令执行,从而提高性能。
如果希望同时得到两个32位数相除的商和余数,Risc-V推荐用以下指令:
div rdq, rs1, rs2;rem rdr,rs1,rs2;
其中要求:两条指令的源操作数索引号和顺序必须完全相同。第一条指令的rdh索引必须不能与rs1,rs2索引号相同。处理器实现的微架构可以把两条指令融合成一条指令执行,从而提高性能。
Risv-V中除以0,并不会产生异常,仍会产生一个特殊的结果。
RV32M是RV64M的子集,除了RV32M的8条指令,RV64M还增加以下5条RV32M中没有的指令。
九、mulw
mulw rd, rs1, rs2 //x = sext((x × x))
乘字(Multiply Word). R-type, RV64M.
把寄存器 x乘到寄存器 x上,乘积截为 32 位,进行有符号扩展后写入 x。忽略算术溢出。
func7rs2rs1func3rdopcode
nametype313029282726252423222120191817161514131211109876543210
mulwR00000010000111011
例子:0: 027302bb mulw x5,x6,x7
十、remw
remw rd, rs1, rs2 //x = sext(x %s x)
求余数字(Remainder Word). R-type, RV64M .
x的低 32 位除以 x的低 32 位,向 0 舍入,都视为 2 的补码,将余数的有符号扩展写入 x。
func7rs2rs1func3rdopcode
nametype313029282726252423222120191817161514131211109876543210
remwR00000011100111011
例子: 0: 027362bb remw x5,x6,x7
十一、divuw
divuw rd, rs1, rs2 //x = sext(x ÷u x)
无符号字除法(Divide Word, Unsigned). R-type, RV64M.
用寄存器 x的低 32 位除以寄存器 x的低 32 位,向零舍入,将这些数视为无符号数, 把经符号位扩展的 32 位商写入 x。
func7rs2rs1func3rdopcode
nametype313029282726252423222120191817161514131211109876543210
divuwR00000011010111011
例子: 0: 027352bb divuw x5,x6,x7
十二、divw
divw rd, rs1, rs2 x // = sext(x ÷s x)
字除法(Divide Word). R-type, RV64M.
用寄存器 x的低 32 位除以寄存器 x的低 32 位,向零舍入,将这些数视为二进制补码,把经符号位扩展的 32 位商写入 x。
func7rs2rs1func3rdopcode
nametype313029282726252423222120191817161514131211109876543210
divwR00000011000111011
例子: 0: 027342bb divw x5,x6,x7
十三、remuw
remuw rd, rs1, rs2 //x = sext(x %u x)
求无符号数的余数字(Remainder Word, Unsigned). R-type, RV64M.
x的低 32 位除以 x的低 32 位,向 0 舍入,都视为无符号数,将余数的有符号扩展写入 x。
func7rs2rs1func3rdopcode
nametype313029282726252423222120191817161514131211109876543210
remuwR00000011110111011
例子: 0: 027372bb remuw x5,x6,x7
完
页:
[1]