strtol.s 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. .file "strtol.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 strtol
  11. strtol:
  12. movm.l #0x1f3e,-(%sp)
  13. move.l %a0,%a5
  14. move.l %a1,%a6
  15. move.w %d0,%d5
  16. move.l %a0,%a3
  17. clr.w %d7
  18. .L2:
  19. clr.w %d3
  20. move.b (%a3)+,%d3
  21. cmp.w #32,%d3
  22. jbeq .L2
  23. cmp.w #45,%d3
  24. jbeq .L7
  25. cmp.w #173,%d3
  26. jbne .L6
  27. .L7:
  28. moveq.l #1,%d7
  29. jbra .L41
  30. .even
  31. .L6:
  32. cmp.w #43,%d3
  33. jbne .L8
  34. .L41:
  35. clr.w %d3
  36. move.b (%a3)+,%d3
  37. .L8:
  38. tst.w %d5
  39. jbeq .L11
  40. cmp.w #16,%d5
  41. jbne .L10
  42. .L11:
  43. cmp.w #48,%d3
  44. jbne .L10
  45. move.b (%a3),%d0
  46. cmp.b #120,%d0
  47. jbeq .L12
  48. cmp.b #88,%d0
  49. jbne .L10
  50. .L12:
  51. clr.w %d3
  52. move.b 1(%a3),%d3
  53. addq.l #2,%a3
  54. moveq.l #16,%d5
  55. .L10:
  56. tst.w %d5
  57. jbne .L13
  58. moveq.l #8,%d5
  59. cmp.w #48,%d3
  60. jbeq .L13
  61. moveq.l #10,%d5
  62. .L13:
  63. move.l #-2147483648,%d4
  64. tst.w %d7
  65. jbne .L17
  66. subq.l #1,%d4
  67. .L17:
  68. move.w %d5,%a2
  69. #APP
  70. move.l %d4,%d1
  71. move.l %a2,%d0
  72. move.l 0xC8,%a0
  73. move.l (%a0,0x2AA*4),%a0
  74. jsr (%a0)
  75. move.l %d1,%a2
  76. move.l %d4,%d1
  77. move.l %a2,%d0
  78. move.l 0xC8,%a0
  79. move.l (%a0,0x2AB*4),%a0
  80. jsr (%a0)
  81. move.w %d1,%a4
  82. #NO_APP
  83. moveq.l #0,%d4
  84. clr.w %d6
  85. .L18:
  86. move.w %d3,%d1
  87. add.w #-48,%d1
  88. cmp.w #9,%d1
  89. sls %d0
  90. ext.w %d0
  91. neg.w %d0
  92. jbne .L27
  93. clr.w %d2
  94. move.w %d3,%d1
  95. add.w #-65,%d1
  96. cmp.w #25,%d1
  97. jbls .L25
  98. move.w %d3,%d0
  99. add.w #-97,%d0
  100. cmp.w #25,%d0
  101. jbhi .L24
  102. .L25:
  103. moveq.l #1,%d2
  104. .L24:
  105. tst.w %d2
  106. jbeq .L19
  107. cmp.w #25,%d1
  108. sls %d0
  109. ext.w %d0
  110. neg.w %d0
  111. move.w %d3,%d1
  112. add.w #-55,%d1
  113. tst.w %d0
  114. jbne .L27
  115. add.w #-32,%d1
  116. .L27:
  117. move.w %d1,%d3
  118. cmp.w %d1,%d5
  119. jbls .L19
  120. tst.w %d6
  121. jblt .L31
  122. cmp.l %d4,%a2
  123. jbcs .L31
  124. jbne .L30
  125. cmp.w %a4,%d1
  126. jbls .L30
  127. .L31:
  128. moveq.l #-1,%d6
  129. jbra .L20
  130. .even
  131. .L30:
  132. moveq.l #1,%d6
  133. #APP
  134. move.l %d4,%d0
  135. mulu %d5,%d0
  136. move.l %d4,%d1
  137. swap %d1
  138. mulu %d5,%d1
  139. swap %d1
  140. clr.w %d1
  141. add.l %d1,%d0
  142. move.l %d0,%d4
  143. #NO_APP
  144. clr.l %d0
  145. move.w %d3,%d0
  146. add.l %d0,%d4
  147. .L20:
  148. clr.w %d3
  149. move.b (%a3)+,%d3
  150. jbra .L18
  151. .even
  152. .L19:
  153. tst.w %d6
  154. jbge .L33
  155. move.l #-2147483648,%d4
  156. tst.w %d7
  157. jbne .L36
  158. subq.l #1,%d4
  159. jbra .L36
  160. .even
  161. .L33:
  162. tst.w %d7
  163. jbeq .L36
  164. neg.l %d4
  165. .L36:
  166. cmp.w #0,%a6
  167. jbeq .L38
  168. lea (-1,%a3),%a0
  169. tst.w %d6
  170. jbne .L40
  171. move.l %a5,%a0
  172. .L40:
  173. move.l %a0,(%a6)
  174. .L38:
  175. move.l %d4,%d0
  176. movm.l (%sp)+,#0x7cf8
  177. rts