strtoul.s 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. .file "strtoul.c"
  2. #NO_APP
  3. .text
  4. tigcc_compiled.:
  5. #APP
  6. .set _A_LINE,0xA000
  7. #NO_APP
  8. .text
  9. .even
  10. .globl strtoul
  11. strtoul:
  12. movm.l #0x1f3c,-(%sp)
  13. move.l %a0,%a4
  14. move.l %a1,%a5
  15. move.w %d0,%d4
  16. move.l %a0,%a3
  17. .L2:
  18. clr.w %d3
  19. move.b (%a3)+,%d3
  20. cmp.w #32,%d3
  21. jbeq .L2
  22. cmp.w #43,%d3
  23. jbne .L6
  24. clr.w %d3
  25. move.b (%a3)+,%d3
  26. .L6:
  27. tst.w %d4
  28. jbeq .L8
  29. cmp.w #16,%d4
  30. jbne .L7
  31. .L8:
  32. cmp.w #48,%d3
  33. jbne .L7
  34. move.b (%a3),%d0
  35. cmp.b #120,%d0
  36. jbeq .L9
  37. cmp.b #88,%d0
  38. jbne .L7
  39. .L9:
  40. clr.w %d3
  41. move.b 1(%a3),%d3
  42. addq.l #2,%a3
  43. moveq.l #16,%d4
  44. .L7:
  45. tst.w %d4
  46. jbne .L10
  47. moveq.l #8,%d4
  48. cmp.w #48,%d3
  49. jbeq .L10
  50. moveq.l #10,%d4
  51. .L10:
  52. move.w %d4,%a2
  53. #APP
  54. move.l #-1,%d1
  55. move.l %a2,%d0
  56. move.l 0xC8,%a0
  57. move.l (%a0,0x2AA*4),%a0
  58. jsr (%a0)
  59. move.l %d1,%a2
  60. move.l #-1,%d1
  61. move.l %a2,%d0
  62. move.l 0xC8,%a0
  63. move.l (%a0,0x2AB*4),%a0
  64. jsr (%a0)
  65. move.w %d1,%d7
  66. #NO_APP
  67. moveq.l #0,%d5
  68. clr.w %d6
  69. .L13:
  70. move.w %d3,%d1
  71. add.w #-48,%d1
  72. cmp.w #9,%d1
  73. sls %d0
  74. ext.w %d0
  75. neg.w %d0
  76. jbne .L22
  77. clr.w %d2
  78. move.w %d3,%d1
  79. add.w #-65,%d1
  80. cmp.w #25,%d1
  81. jbls .L20
  82. move.w %d3,%d0
  83. add.w #-97,%d0
  84. cmp.w #25,%d0
  85. jbhi .L19
  86. .L20:
  87. moveq.l #1,%d2
  88. .L19:
  89. tst.w %d2
  90. jbeq .L14
  91. cmp.w #25,%d1
  92. sls %d0
  93. ext.w %d0
  94. neg.w %d0
  95. move.w %d3,%d1
  96. add.w #-55,%d1
  97. tst.w %d0
  98. jbne .L22
  99. add.w #-32,%d1
  100. .L22:
  101. move.w %d1,%d3
  102. cmp.w %d1,%d4
  103. jbls .L14
  104. tst.w %d6
  105. jblt .L26
  106. cmp.l %d5,%a2
  107. jbcs .L26
  108. jbne .L25
  109. cmp.w %d1,%d7
  110. jbcc .L25
  111. .L26:
  112. moveq.l #-1,%d6
  113. jbra .L15
  114. .even
  115. .L25:
  116. moveq.l #1,%d6
  117. #APP
  118. move.l %d5,%d0
  119. mulu %d4,%d0
  120. move.l %d5,%d1
  121. swap %d1
  122. mulu %d4,%d1
  123. swap %d1
  124. clr.w %d1
  125. add.l %d1,%d0
  126. move.l %d0,%d5
  127. #NO_APP
  128. clr.l %d0
  129. move.w %d3,%d0
  130. add.l %d0,%d5
  131. .L15:
  132. clr.w %d3
  133. move.b (%a3)+,%d3
  134. jbra .L13
  135. .even
  136. .L14:
  137. tst.w %d6
  138. jbge .L28
  139. moveq.l #-1,%d5
  140. .L28:
  141. cmp.w #0,%a5
  142. jbeq .L29
  143. lea (-1,%a3),%a0
  144. tst.w %d6
  145. jbne .L31
  146. move.l %a4,%a0
  147. .L31:
  148. move.l %a0,(%a5)
  149. .L29:
  150. move.l %d5,%d0
  151. movm.l (%sp)+,#0x3cf8
  152. rts