memcmp.S
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:4k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

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