2015-07-09 65 views
2

我们都知道MIPS FPU有两个精度单精度或双精度。当我在指令集中查看它时,我发现对于相同的操作,单精度和双精度的指令没有区别。单精度指令与双精度指令的区别

例如,这里从MIPS Architecture For Programmers Volume II:,指令ADD.fmt enter image description here

无论是双或单精度,操作数和功能码都相同。解码器如何知道它是单精度指令还是双精度指令?或者5位fmt区域中的隐藏信息?我无法从谷歌找到任何好的答案,有人可以解释这条指令的工作原理吗?

回答

3

在“FPU操作数格式字段”下,MIPS文档详细介绍了此内容。 fmt字段包含该特定数据。

fmt字段是5位长,它可以取以下值:

0-15: reserved 
16: single 
17: double 
18-19: reserved 
20: word 
21: long 
22-31: reserved 

Word和龙是未实现为ADD.S和ADD.D.

+0

指令ADD.fmt中的fmt区域只有5位。但在你的回答中,fmt包含完全32位的寄存器。这个文件是一个独立的寄存器吗?当我们实现这个指令时,两种不同精度的硬件是相同的吗?我的意思是如果FPU支持双精度,那么硬件是双精度的,不管指令是单精度还是双精度。 –

+0

我写了“可能的**值**”,而不是位的位置。 5位是0-31。 – karatedog

+0

@帅雨强我更新了答案,以避免更进一步的混淆。 – karatedog