Advertisement
Guest User

Untitled

a guest
Apr 24th, 2019
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.24 KB | None | 0 0
  1. .ORG $0
  2.  
  3. start LW r1, r0, $3000 ; r1 = factor 1
  4. LW r2, r0, $3002 ; r2 = factor 2
  5. MV r3, r0 ; product
  6.  
  7. LI r4, $0080 ; -128
  8. LI r5, $1 ; stores 1 for parity check
  9. LI r6, $0 ; counter for the loop
  10.  
  11. ; special case for -128
  12. SLT r0, r2, r4 ; r2 == -128?
  13. BRZ special
  14.  
  15. ; sign extend r1
  16. SLLI r1, r1, $8
  17. SRAI r1, r1, $8
  18.  
  19. ; negate r2
  20. AND r7, r2, r4 ; r2 < 0?
  21. BRZ loop
  22. SUB r2, r0, r2 ; negate r2
  23.  
  24. ; actual multiplication loop
  25. loop SLTI r0, r6, $8 ; loop guard
  26. BRZ reneg
  27.  
  28. AND r0, r2, r5 ; check parity (1 if add)
  29. BRZ shift
  30.  
  31. ADD r3, r3, r1
  32.  
  33. shift SRL r2, r2, r5 ; step 4
  34. SLL r1, r1, r5
  35. ADD r6, r6, r5
  36. BRA loop
  37.  
  38. reneg SLT r0, r7, r0
  39. BRZ done
  40. SUB r3, r0, r3 ; negate
  41. BRA done
  42.  
  43. special SLLI r3, r1, $8 ; r3 = r1 * 128
  44. SUB r3, r0, r3 ; r3 = -r3
  45. done STOP
  46.  
  47. ; max - 518 cycles
  48. ; min w/o special case - 499 cycles
  49. ; special case - 74 cycles
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement