_gcm1.ssa 742 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. export
  2. function w $ifmv(w %p1, w %p2, w %p3) {
  3. @start
  4. @entry
  5. %rt =w add %p2, %p3 # gcm moves to @true
  6. %rf =w sub %p2, %p3 # gcm moves to @false
  7. jnz %p1, @true, @false
  8. @true
  9. %r =w copy %rt
  10. jmp @exit
  11. @false
  12. %r =w copy %rf
  13. jmp @exit
  14. @exit
  15. ret %r
  16. }
  17. export
  18. function w $hoist1(w %p1, w %p2, w %p3) {
  19. @start
  20. @entry
  21. %n =w copy 0
  22. %i =w copy %p1
  23. @loop
  24. %base =w add %p2, %p3 # gcm moves to @exit
  25. %i =w sub %i, 1
  26. %n =w add %n, 1
  27. jnz %i, @loop, @exit
  28. @exit
  29. %r =w add %base, %n
  30. ret %r
  31. }
  32. export
  33. function w $hoist2(w %p1, w %p2, w %p3) {
  34. @start
  35. @entry
  36. %n =w copy 0
  37. %i =w copy %p1
  38. @loop
  39. %base =w add %p2, %p3 # gcm moves to @entry
  40. %i =w sub %i, 1
  41. %n =w add %n, %base
  42. jnz %i, @loop, @exit
  43. @exit
  44. %r =w add %base, %n
  45. ret %r
  46. }