Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .ORG $0
- start LW r1, r0, $3000 ; r1 = factor 1
- LW r2, r0, $3002 ; r2 = factor 2
- MV r3, r0 ; product
- LI r4, $0080 ; -128
- LI r5, $1 ; stores 1 for parity check
- LI r6, $0 ; counter for the loop
- ; special case for -128
- SLT r0, r2, r4 ; r2 == -128?
- BRZ special
- ; sign extend r1
- SLLI r1, r1, $8
- SRAI r1, r1, $8
- ; negate r2
- AND r7, r2, r4 ; r2 < 0?
- BRZ loop
- SUB r2, r0, r2 ; negate r2
- ; actual multiplication loop
- loop SLTI r0, r6, $8 ; loop guard
- BRZ reneg
- AND r0, r2, r5 ; check parity (1 if add)
- BRZ shift
- ADD r3, r3, r1
- shift SRL r2, r2, r5 ; step 4
- SLL r1, r1, r5
- ADD r6, r6, r5
- BRA loop
- reneg SLT r0, r7, r0
- BRZ done
- SUB r3, r0, r3 ; negate
- BRA done
- special SLLI r3, r1, $8 ; r3 = r1 * 128
- SUB r3, r0, r3 ; r3 = -r3
- done STOP
- ; max - 518 cycles
- ; min w/o special case - 499 cycles
- ; special case - 74 cycles
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement