定义
指令集架构(英语:Instruction Set Architecture,缩写为ISA),又称指令集或指令集体系,是计算机体系结构中与程序设计有关的部分,包含了基本数据类型,指令集,寄存器,寻址模式,存储体系,中断,异常处理以及外部I/O。指令集架构包含一系列的opcode即操作码(机器语言),以及由特定处理器执行的基本命令。来自维基百科微处理器的指令集架构(Instruction Set Architecture)常见种类如下: 复杂指令集运算(Complex Instruction Set Computing,CISC);精简指令集运算(Reduced Instruction Set Computing,RISC) ;显式并行指令集运算(Explicitly Parallel Instruction Computing,EPIC);超长指令字指令集运算(VLIW)来自百度百科
sat饱和
RND舍入
有符号数溢出判断
关于浮点指令集浮点数舍入模式
摘要:
本文主要描述浮点扩展指令集中定义的五种舍入模式,并介绍一些实现时要注意的地方。
舍入模式介绍
首先,在riscv-spec-v2.2的浮点指令集扩展部分一共定义了五种不同的舍入模式,如下图。
接下来,我将以需要舍入为3位精度的小数作为例子(比方说:1.010 101 和1.011 101)来分别对五种舍入模式进行解读。
1.RNE:Round to Nearest, ties to even.
即向最近偶数舍入。对于这一舍入模式,我们首先要看超出精度的第一位,对于3位精度的小数而言就是要看小数点后的第四位为0则舍去,为1则需要查看后续位数是否有1,有则进一,若无则说明这个小数位于两个数的中间(1.010 100恰好处于1.010和1.011的中间),需要向最近偶数舍入。
例1:1.010 011—->1.010
小数点后第4位为0,则不满足舍入条件,直接舍去后三位。
例2:1.010 101—->1.011
小数点后第4位为1,且后续位仍有1,则进一。
例3:1.010 100—->1.010
小数点后第四位位1,但后续位全为0,1.010是离它最近的偶数,则取1.010。
例4:1.011 100—->1.100
小数点后第四位位1,但后续位全为0,1.100是离它最近的偶数,则取1.100。
2.RTZ:Round towards Zero.
即向零舍入。对于这个舍入模式,直接截掉多余位数即可。
例1:1.010 011—->1.010
例2:1.010 101—->1.010
例3:1.010 100—->1.010
例4:1.011 100—->1.011
3.RDN: Round Down.
即向负无穷舍入。对于这一舍入模式,需要先判断符号位,正数则截取多余位数,负数则进一。
例1:-1.010 011—->-1.011
例2:1.010 101—->1.010
例3:1.010 100—->1.010
例4:-1.011 100—->-1.100
4.RUP: Round Up.
即向正无穷舍入。对于这一舍入模式,需要先判断符号位,负数则截取多余位数,正数则进一。
例1:-1.010 011—->-1.010
例2:1.010 101—->1.011
例3:1.010 100—->1.011
例4:-1.011 100—->-1.011
5.RMM: Round to Nearest, ties to Max Magnitude.
即向最大摆幅舍入。对于这一舍入模式,其实就是我们小学时所学的四舍五入。对于这一舍入模式,我们只需要看超出精度的第一位,对于3位精度的小数而言就是要看小数点后的第四位为0则舍去,为1则进一。
例1:1.010 011—->1.010
例2:1.010 101—->1.011
例3:1.010 100—->1.011
例4:1.011 100—->1.100
结束
值得注意的是,指令本身有一个rm域,而fcsr寄存器中也有一个frm域,我们应该选取哪一个编码作为舍入模式呢?
答:我们将优先使用指令中的rm域,若rm编码为111,则调用fcsr中的frm域的编码作为舍入模式。
至此,关于浮点指令集拓展的舍入模式已经介绍完毕,快动手写起来吧!
如有不足,欢迎指出。
参考资料:
The RISC-V Instruction Set Manual,Volume I: User-Level ISA v2.2
IEEE Std 754TM-2008
https://www.riscv-mcu.com/community-topic-id-1353.html