memcmp.S 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312
  1. .text
  2. .align 4
  3. .global __memcmp, memcmp
  4. __memcmp:
  5. memcmp:
  6. #if 1
  7. cmp %o2, 0
  8. ble L3
  9. mov 0, %g3
  10. L5:
  11. ldub [%o0], %g2
  12. ldub [%o1], %g3
  13. sub %g2, %g3, %g2
  14. mov %g2, %g3
  15. sll %g2, 24, %g2
  16. cmp %g2, 0
  17. bne L3
  18. add %o0, 1, %o0
  19. add %o2, -1, %o2
  20. cmp %o2, 0
  21. bg L5
  22. add %o1, 1, %o1
  23. L3:
  24. sll %g3, 24, %o0
  25. sra %o0, 24, %o0
  26. retl
  27. nop
  28. #else
  29. save %sp, -104, %sp
  30. mov %i2, %o4
  31. mov %i0, %o0
  32. cmp %o4, 15
  33. ble L72
  34. mov %i1, %i2
  35. andcc %i2, 3, %g0
  36. be L161
  37. andcc %o0, 3, %g2
  38. L75:
  39. ldub [%o0], %g3
  40. ldub [%i2], %g2
  41. add %o0,1, %o0
  42. subcc %g3, %g2, %i0
  43. bne L156
  44. add %i2, 1, %i2
  45. andcc %i2, 3, %g0
  46. bne L75
  47. add %o4, -1, %o4
  48. andcc %o0, 3, %g2
  49. L161:
  50. bne,a L78
  51. mov %i2, %i1
  52. mov %o0, %i5
  53. mov %i2, %i3
  54. srl %o4, 2, %i4
  55. cmp %i4, 0
  56. bge L93
  57. mov %i4, %g2
  58. add %i4, 3, %g2
  59. L93:
  60. sra %g2, 2, %g2
  61. sll %g2, 2, %g2
  62. sub %i4, %g2, %g2
  63. cmp %g2, 1
  64. be,a L88
  65. add %o0, 4, %i5
  66. bg L94
  67. cmp %g2, 2
  68. cmp %g2, 0
  69. be,a L86
  70. ld [%o0], %g3
  71. b L162
  72. ld [%i5], %g3
  73. L94:
  74. be L81
  75. cmp %g2, 3
  76. be,a L83
  77. add %o0, -4, %i5
  78. b L162
  79. ld [%i5], %g3
  80. L81:
  81. add %o0, -8, %i5
  82. ld [%o0], %g3
  83. add %i2, -8, %i3
  84. ld [%i2], %g2
  85. b L82
  86. add %i4, 2, %i4
  87. L83:
  88. ld [%o0], %g4
  89. add %i2, -4, %i3
  90. ld [%i2], %g1
  91. b L84
  92. add %i4, 1, %i4
  93. L86:
  94. b L87
  95. ld [%i2], %g2
  96. L88:
  97. add %i2, 4, %i3
  98. ld [%o0], %g4
  99. add %i4, -1, %i4
  100. ld [%i2], %g1
  101. L95:
  102. ld [%i5], %g3
  103. L162:
  104. cmp %g4, %g1
  105. be L87
  106. ld [%i3], %g2
  107. cmp %g4, %g1
  108. L163:
  109. bleu L114
  110. mov -1, %i0
  111. b L114
  112. mov 1, %i0
  113. L87:
  114. ld [%i5 + 4], %g4
  115. cmp %g3, %g2
  116. bne L163
  117. ld [%i3 + 4], %g1
  118. L84:
  119. ld [%i5 + 8], %g3
  120. cmp %g4, %g1
  121. bne L163
  122. ld [%i3 + 8], %g2
  123. L82:
  124. ld [%i5 + 12], %g4
  125. cmp %g3, %g2
  126. bne L163
  127. ld [%i3 + 12], %g1
  128. add %i5, 16, %i5
  129. addcc %i4, -4, %i4
  130. bne L95
  131. add %i3, 16, %i3
  132. cmp %g4, %g1
  133. bne L163
  134. nop
  135. b L114
  136. mov 0, %i0
  137. L78:
  138. srl %o4, 2, %i0
  139. and %o0, -4, %i3
  140. orcc %i0, %g0, %g3
  141. sll %g2, 3, %o7
  142. mov 32, %g2
  143. bge L129
  144. sub %g2, %o7, %o1
  145. add %i0, 3, %g3
  146. L129:
  147. sra %g3, 2, %g2
  148. sll %g2, 2, %g2
  149. sub %i0, %g2, %g2
  150. cmp %g2, 1
  151. be,a L124
  152. ld [%i3], %o3
  153. bg L130
  154. cmp %g2, 2
  155. cmp %g2, 0
  156. be,a L122
  157. ld [%i3], %o2
  158. b L164
  159. sll %o3, %o7, %g3
  160. L130:
  161. be L117
  162. cmp %g2, 3
  163. be,a L119
  164. ld [%i3], %g1
  165. b L164
  166. sll %o3, %o7, %g3
  167. L117:
  168. ld [%i3], %g4
  169. add %i2, -8, %i1
  170. ld [%i3 + 4], %o3
  171. add %i0, 2, %i0
  172. ld [%i2], %i4
  173. b L118
  174. add %i3, -4, %i3
  175. L119:
  176. ld [%i3 + 4], %g4
  177. add %i2, -4, %i1
  178. ld [%i2], %i5
  179. b L120
  180. add %i0, 1, %i0
  181. L122:
  182. ld [%i3 + 4], %g1
  183. ld [%i2], %i4
  184. b L123
  185. add %i3, 4, %i3
  186. L124:
  187. add %i2, 4, %i1
  188. ld [%i3 + 4], %o2
  189. add %i0, -1, %i0
  190. ld [%i2], %i5
  191. add %i3, 8, %i3
  192. L131:
  193. sll %o3, %o7, %g3
  194. L164:
  195. srl %o2, %o1, %g2
  196. ld [%i3], %g1
  197. or %g3, %g2, %g3
  198. cmp %g3, %i5
  199. bne L163
  200. ld [%i1], %i4
  201. L123:
  202. sll %o2, %o7, %g3
  203. srl %g1, %o1, %g2
  204. ld [%i3 + 4], %g4
  205. or %g3, %g2, %g3
  206. cmp %g3, %i4
  207. bne L163
  208. ld [%i1 + 4], %i5
  209. L120:
  210. sll %g1, %o7, %g3
  211. srl %g4, %o1, %g2
  212. ld [%i3 + 8], %o3
  213. or %g3, %g2, %g3
  214. cmp %g3, %i5
  215. bne L163
  216. ld [%i1 + 8], %i4
  217. L118:
  218. sll %g4, %o7, %g3
  219. srl %o3, %o1, %g2
  220. ld [%i3 + 12], %o2
  221. or %g3, %g2, %g3
  222. cmp %g3, %i4
  223. bne L163
  224. ld [%i1 + 12], %i5
  225. add %i3, 16, %i3
  226. addcc %i0, -4, %i0
  227. bne L131
  228. add %i1, 16, %i1
  229. sll %o3, %o7, %g3
  230. srl %o2, %o1, %g2
  231. or %g3, %g2, %g3
  232. cmp %g3, %i5
  233. be,a L114
  234. mov 0, %i0
  235. b,a L163
  236. L114:
  237. cmp %i0, 0
  238. bne L156
  239. and %o4, -4, %g2
  240. add %o0, %g2, %o0
  241. add %i2, %g2, %i2
  242. and %o4, 3, %o4
  243. L72:
  244. cmp %o4, 0
  245. be L156
  246. mov 0, %i0
  247. ldub [%o0], %g3
  248. L165:
  249. ldub [%i2], %g2
  250. add %o0, 1, %o0
  251. subcc %g3, %g2, %i0
  252. bne L156
  253. add %i2, 1, %i2
  254. addcc %o4, -1, %o4
  255. bne,a L165
  256. ldub [%o0], %g3
  257. mov 0, %i0
  258. L156:
  259. ret
  260. restore
  261. #endif