udivsi3.S 1015 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. /* SPDX-License-Identifier: GPL-2.0+ WITH GCC-exception-2.0
  2. Copyright (C) 1994, 1995, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
  3. 2004, 2005
  4. Free Software Foundation, Inc.
  5. */
  6. !! libgcc routines for the Renesas / SuperH SH CPUs.
  7. !! Contributed by Steve Chamberlain.
  8. !! sac@cygnus.com
  9. .balign 4
  10. .global __udivsi3
  11. .type __udivsi3, @function
  12. div8:
  13. div1 r5,r4
  14. div7:
  15. div1 r5,r4; div1 r5,r4; div1 r5,r4
  16. div1 r5,r4; div1 r5,r4; div1 r5,r4; rts; div1 r5,r4
  17. divx4:
  18. div1 r5,r4; rotcl r0
  19. div1 r5,r4; rotcl r0
  20. div1 r5,r4; rotcl r0
  21. rts; div1 r5,r4
  22. __udivsi3:
  23. sts.l pr,@-r15
  24. extu.w r5,r0
  25. cmp/eq r5,r0
  26. bf/s large_divisor
  27. div0u
  28. swap.w r4,r0
  29. shlr16 r4
  30. bsr div8
  31. shll16 r5
  32. bsr div7
  33. div1 r5,r4
  34. xtrct r4,r0
  35. xtrct r0,r4
  36. bsr div8
  37. swap.w r4,r4
  38. bsr div7
  39. div1 r5,r4
  40. lds.l @r15+,pr
  41. xtrct r4,r0
  42. swap.w r0,r0
  43. rotcl r0
  44. rts
  45. shlr16 r5
  46. large_divisor:
  47. mov #0,r0
  48. xtrct r4,r0
  49. xtrct r0,r4
  50. bsr divx4
  51. rotcl r0
  52. bsr divx4
  53. rotcl r0
  54. bsr divx4
  55. rotcl r0
  56. bsr divx4
  57. rotcl r0
  58. lds.l @r15+,pr
  59. rts
  60. rotcl r0