MIPS-不能将奇数寄存器用于具有双精度的多柱面?

MIPS-不能将奇数寄存器用于具有双精度的多柱面?,mips,qtspim,Mips,Qtspim,特定语言的疑问, 语言是MIPS 我知道双精度占用两个寄存器。因此,如果我存储在$f5中,那么我就不应该乱用$f6 但它说奇数寄存器不能用于双精度乘法。 将所有代码移位1$f5改为$f6,代码运行良好 这有什么原因吗? 在任何地方都找不到关于这个的东西 多亏了浮点寄存器是32位宽的,所以双浮点(64位)需要2个寄存器 硬件假定偶数/奇数对保存一个double的所有64位,因此我们总是使用偶数寄存器编号来引用一个64位double 硬件可以使用像$f5、$f6这样的奇偶对吗?当然可以假设。对于硬件

特定语言的疑问, 语言是MIPS

我知道双精度占用两个寄存器。因此,如果我存储在$f5中,那么我就不应该乱用$f6

但它说奇数寄存器不能用于双精度乘法。 将所有代码移位1$f5改为$f6,代码运行良好

这有什么原因吗? 在任何地方都找不到关于这个的东西


多亏了浮点寄存器是32位宽的,所以双浮点(64位)需要2个寄存器

硬件假定偶数/奇数对保存一个double的所有64位,因此我们总是使用偶数寄存器编号来引用一个64位double

硬件可以使用像$f5、$f6这样的奇偶对吗?当然可以假设。对于硬件,要从偶数寄存器号(例如$f4)变为奇数寄存器号$f5,我们只需将低位从0更改为14=00100;5=00101。从一个奇数$F5到下一个更高的偶数F6,将需要一个5位的加法,而不是简单地翻转比特。我们还必须考虑$F31对$F0或是什么。例如,从$F5翻转奇数位,甚至可以得到相同的偶数/奇数对$F5,$F4与$F4,$F5,因此,对于软件来说,这绝对没有什么好处,如果有两种方法使用同一对,那就很混乱了

但是$f5,$f6需要一些额外的逻辑门,所以他们不会这样做。提供奇偶对无论如何也买不到多少,因为软件可以很好地处理奇偶限制,因此,硬件几乎没有理由提供这种功能。当混合使用32位和64位浮点时,软件只需为64位值选择偶数/奇数对-这在编译时需要花费少量的逻辑,这是一个值得折衷的问题。支持奇数/偶数也会干扰参数传递和保存中的调用约定注册,所以同样没有特别的优势

硬件是否可以使用两个不相邻的任意寄存器-是的,这也是可能的,但现在我们必须命名这两个寄存器,因此双浮点指令将需要6个寄存器名,并且不再适合32位,并且它们的解码方式与单精度浮点指令完全不同


另一种选择是将浮点寄存器扩展到每个64位,完全消除了对寄存器对/配对的需要。这在某些MIPS设计中完成,包括MIPS64。在某些版本中,它也被后端口到MIPS32。

它说-是谁?你能举一个工作代码和非工作代码的例子吗?当我运行代码时,运行环境(在我的例子中是qtspim)会弹出一个例外。你自己已经说明了原因:双精度FP值存储在成对的FP寄存器中。指定寄存器操作数时,必须使用该对中的第一个寄存器,即偶数寄存器。我不知道你为什么要提到$t5和$t6,因为它们不是浮点寄存器。谢谢你的详细解释。另外,谢谢你忽略了我写的是$ts而不是$fs。我两天前才开始学这门语言