Math 基于MIPS的多精度算法
我只是想在本机MIPS上实现多精度算法。假定 一个64位整数位于寄存器$12和$13中,另一个位于寄存器$14和$15中。 这笔钱将分别存入10美元和11美元的登记册。64位整数的最高有效字位于偶数寄存器中,最低有效字位于奇数寄存器中。在互联网上,它说,这是最短的可能的实施Math 基于MIPS的多精度算法,math,assembly,mips,bigint,Math,Assembly,Mips,Bigint,我只是想在本机MIPS上实现多精度算法。假定 一个64位整数位于寄存器$12和$13中,另一个位于寄存器$14和$15中。 这笔钱将分别存入10美元和11美元的登记册。64位整数的最高有效字位于偶数寄存器中,最低有效字位于奇数寄存器中。在互联网上,它说,这是最短的可能的实施 addu $11, $13, $15 # add least significant word sltu $10, $11, $15 # set carry-in bit addu $10, $10, $
addu $11, $13, $15 # add least significant word
sltu $10, $11, $15 # set carry-in bit
addu $10, $10, $12 # add in first most significant word
addu $10, $10, $14 # add in second most significant word
我只是想再核实一下我是否理解正确。sltu检查是否
两个最不重要的单词之和小于或等于其中一个
操作数。如果是这样的话,那么进位发生了吗
检查在添加两个最重要的参数时是否出现进位
单词并将结果存储在$9中我必须执行以下操作:
sltu $9, $10, $12 # set carry-in bit
这有什么意义吗
sltu检查两个最低有效位的总和是否小于或等于其中一个操作数
不完全正确:如果两个最低有效字的总和严格小于其中一个操作数(视为32位无符号值),则将$10
设置为1;如果和等于或大于该操作数,则为0
如果是这样的话,那么进位发生了吗
对
考虑将各种可能的b值添加到某个特定值a(其中所有值均为无符号32位值)时可能发生的情况:
- 如果没有发生溢出,我们必须创建更多的ILP,我建议在SLTU之前添加高半部,然后再添加进位,这样超标量MIPS可以与低半部
或addu
并行运行,从低半部生成进位。您的版本有一个依赖链,贯穿所有4条指令,因此延迟不能超过4个周期;我的会缩短到3个周期。SLTU
addu $11, $13, $15 sltu $10, $11, $15 # carry from low word addu $10, $10, $12 sltu $9, $10, $12 # possible carry from high word (1) addu $10, $10, $14 sltu $8, $10, $14 # possible carry from high word (2) or $9, $8, $9 # carry in result if either (1) or (2) were true (can't both be true at once)