multi3.S 717 B

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