Change formatting [tabs 2 spaces]
This commit is contained in:
parent
cc06d1abc0
commit
706868cd95
27
fpmul.asm
27
fpmul.asm
@ -7,7 +7,7 @@ main:
|
|||||||
sw $fp, 0($sp)
|
sw $fp, 0($sp)
|
||||||
addi $fp, $sp, 0 # stack arguments (no)
|
addi $fp, $sp, 0 # stack arguments (no)
|
||||||
|
|
||||||
li $a0, 0xbf800000
|
li $a0, 0xbf800000 # <-- test case goes here
|
||||||
li $a1, 0x3f800000
|
li $a1, 0x3f800000
|
||||||
jal multFloat
|
jal multFloat
|
||||||
|
|
||||||
@ -20,11 +20,11 @@ main:
|
|||||||
#
|
#
|
||||||
# encodeFloat (sign, exp, mant)
|
# encodeFloat (sign, exp, mant)
|
||||||
# Arguments
|
# Arguments
|
||||||
# a0: The sign
|
# $a0: The sign
|
||||||
# a1: The exponent without the bias
|
# $a1: The exponent without the bias
|
||||||
# a2: The normalized mantissa 24bit, with the implied bit
|
# $a2: The normalized mantissa 24bit, with the implied bit
|
||||||
# Retuen
|
# Retuen
|
||||||
# v0: The floating point word
|
# $v0: The floating point word
|
||||||
encodeFloat:
|
encodeFloat:
|
||||||
# intro - stack-frame
|
# intro - stack-frame
|
||||||
addi $sp, $sp, -8 # encodeFloat
|
addi $sp, $sp, -8 # encodeFloat
|
||||||
@ -38,7 +38,7 @@ encodeFloat:
|
|||||||
sll $a1, $a1, 23
|
sll $a1, $a1, 23
|
||||||
or $v0, $v0, $a1
|
or $v0, $v0, $a1
|
||||||
|
|
||||||
li $t0, 0x7FFFFF #v0 |= (mant & 0x7FFFFF);
|
li $t0, 0x7FFFFF # v0 |= (mant & 0x7FFFFF);
|
||||||
and $a2, $a2, $t0
|
and $a2, $a2, $t0
|
||||||
or $v0, $v0, $a2
|
or $v0, $v0, $a2
|
||||||
|
|
||||||
@ -69,8 +69,8 @@ decodeFloat:
|
|||||||
and $t0, $t0, 0xFF
|
and $t0, $t0, 0xFF
|
||||||
addi $v1, $t0, -127
|
addi $v1, $t0, -127
|
||||||
|
|
||||||
li $t0, 0x7FFFFF
|
li $t0, 0x7FFFFF # Mantissa[a1] = (a0 & 0x7FFFFF) | 0x800000;
|
||||||
and $a1, $a0, $t0 #Mantissa[a1] = (a0 & 0x7FFFFF) | 0x800000;
|
and $a1, $a0, $t0
|
||||||
li $t0, 0x800000
|
li $t0, 0x800000
|
||||||
or $a1, $a1, $t0
|
or $a1, $a1, $t0
|
||||||
|
|
||||||
@ -88,7 +88,7 @@ decodeFloat:
|
|||||||
# return
|
# return
|
||||||
# $v0 : 32bit floating point multiplication result
|
# $v0 : 32bit floating point multiplication result
|
||||||
multFloat:
|
multFloat:
|
||||||
# s0: sign / argument 2
|
# s0: sign and argument 2
|
||||||
# s1: exp
|
# s1: exp
|
||||||
# s2: mantissa
|
# s2: mantissa
|
||||||
# intro - stack-frame
|
# intro - stack-frame
|
||||||
@ -108,7 +108,7 @@ multFloat:
|
|||||||
move $s2, $a1
|
move $s2, $a1
|
||||||
|
|
||||||
move $a0, $t0 # load argument 2
|
move $a0, $t0 # load argument 2
|
||||||
jal decodeFloat #[v0, v1, a1] <- [s, e, m]
|
jal decodeFloat # [v0, v1, a1] <- [s, e, m]
|
||||||
xor $s0, $s0, $v0 # sign = s1 ^ s2
|
xor $s0, $s0, $v0 # sign = s1 ^ s2
|
||||||
add $s1, $s1, $v1 # exp = e1 + e2
|
add $s1, $s1, $v1 # exp = e1 + e2
|
||||||
|
|
||||||
@ -179,14 +179,14 @@ fprod:
|
|||||||
|
|
||||||
lw $v0, 0($s0) # Acc = *x
|
lw $v0, 0($s0) # Acc = *x
|
||||||
addi $s2, $zero, 1 # i=1
|
addi $s2, $zero, 1 # i=1
|
||||||
_fprod_loop:
|
_fprod_loop: # for ( ; i<n ; ) {
|
||||||
bge $s2, $s1, _fprod_loop_end # for ( ; i<n ; )
|
bge $s2, $s1, _fprod_loop_end
|
||||||
addi $s0, $s0, 4 # a0 <- *++x
|
addi $s0, $s0, 4 # a0 <- *++x
|
||||||
lw $a0, 0($s0)
|
lw $a0, 0($s0)
|
||||||
move $a1, $v0 # a1 <- use prev result
|
move $a1, $v0 # a1 <- use prev result
|
||||||
jal multFloat
|
jal multFloat
|
||||||
addi $s2, $s2, 1 # ++i
|
addi $s2, $s2, 1 # ++i
|
||||||
j _fprod_loop
|
j _fprod_loop # }
|
||||||
_fprod_loop_end:
|
_fprod_loop_end:
|
||||||
|
|
||||||
# epilogue - stack-frame
|
# epilogue - stack-frame
|
||||||
@ -198,4 +198,3 @@ fprod:
|
|||||||
addi $sp, $sp, 20
|
addi $sp, $sp, 20
|
||||||
jr $ra # return
|
jr $ra # return
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user