Math 基于MIPS的多精度算法

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, $

我只是想在本机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, $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
    SLTU
    并行运行,从低半部生成进位。您的版本有一个依赖链,贯穿所有4条指令,因此延迟不能超过4个周期;我的会缩短到3个周期。
    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)