multi3.S 678 B

123456789101112131415161718192021222324252627282930313233343536
  1. #include <linux/linkage.h>
  2. #include <asm/export.h>
  3. .text
  4. .align 4
  5. ENTRY(__multi3) /* %o0 = u, %o1 = v */
  6. mov %o1, %g1
  7. srl %o3, 0, %o4
  8. mulx %o4, %g1, %o1
  9. srlx %g1, 0x20, %g3
  10. mulx %g3, %o4, %g7
  11. sllx %g7, 0x20, %o5
  12. srl %g1, 0, %o4
  13. sub %o1, %o5, %o5
  14. srlx %o5, 0x20, %o5
  15. addcc %g7, %o5, %g7
  16. srlx %o3, 0x20, %o5
  17. mulx %o4, %o5, %o4
  18. mulx %g3, %o5, %o5
  19. sethi %hi(0x80000000), %g3
  20. addcc %g7, %o4, %g7
  21. srlx %g7, 0x20, %g7
  22. add %g3, %g3, %g3
  23. movcc %xcc, %g0, %g3
  24. addcc %o5, %g7, %o5
  25. sllx %o4, 0x20, %o4
  26. add %o1, %o4, %o1
  27. add %o5, %g3, %g2
  28. mulx %g1, %o2, %g1
  29. add %g1, %g2, %g1
  30. mulx %o0, %o3, %o0
  31. retl
  32. add %g1, %o0, %o0
  33. ENDPROC(__multi3)
  34. EXPORT_SYMBOL(__multi3)