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

Linux/Unix编程

开发平台:

Unix_Linux

  1. /* $Id: strncmp.S,v 1.2 1996/09/09 02:47:20 davem Exp $
  2.  * strncmp.S: Hand optimized Sparc assembly of GCC output from GNU libc
  3.  *            generic strncmp routine.
  4.  */
  5. #include <asm/cprefix.h>
  6. .text
  7. .align 4
  8. .global C_LABEL(__strncmp), C_LABEL(strncmp)
  9. C_LABEL(__strncmp):
  10. C_LABEL(strncmp):
  11. mov %o0, %g3
  12. mov 0, %o3
  13. cmp %o2, 3
  14. ble 7f
  15.  mov 0, %g2
  16. sra %o2, 2, %o4
  17. ldub [%g3], %o3
  18. 0:
  19. ldub [%o1], %g2
  20. add %g3, 1, %g3
  21. and %o3, 0xff, %o0
  22. cmp %o0, 0
  23. be 8f
  24.  add %o1, 1, %o1
  25. cmp %o0, %g2
  26. be,a 1f
  27.  ldub [%g3], %o3
  28. retl
  29.  sub %o0, %g2, %o0
  30. 1:
  31. ldub [%o1], %g2
  32. add %g3,1, %g3
  33. and %o3, 0xff, %o0
  34. cmp %o0, 0
  35. be 8f
  36.  add %o1, 1, %o1
  37. cmp %o0, %g2
  38. be,a 1f
  39.  ldub [%g3], %o3
  40. retl
  41.  sub %o0, %g2, %o0
  42. 1:
  43. ldub [%o1], %g2
  44. add %g3, 1, %g3
  45. and %o3, 0xff, %o0
  46. cmp %o0, 0
  47. be 8f
  48.  add %o1, 1, %o1
  49. cmp %o0, %g2
  50. be,a 1f
  51.  ldub [%g3], %o3
  52. retl
  53.  sub %o0, %g2, %o0
  54. 1:
  55. ldub [%o1], %g2
  56. add %g3, 1, %g3
  57. and %o3, 0xff, %o0
  58. cmp %o0, 0
  59. be 8f
  60.  add %o1, 1, %o1
  61. cmp %o0, %g2
  62. be 1f
  63.  add %o4, -1, %o4
  64. retl
  65.  sub %o0, %g2, %o0
  66. 1:
  67. cmp %o4, 0
  68. bg,a 0b
  69.  ldub [%g3], %o3
  70. b 7f
  71.  and %o2, 3, %o2
  72. 9:
  73. ldub [%o1], %g2
  74. add %g3, 1, %g3
  75. and %o3, 0xff, %o0
  76. cmp %o0, 0
  77. be 8f
  78.  add %o1, 1, %o1
  79. cmp %o0, %g2
  80. be 7f
  81.  add %o2, -1, %o2
  82. 8:
  83. retl
  84.  sub %o0, %g2, %o0
  85. 7:
  86. cmp %o2, 0
  87. bg,a 9b
  88.  ldub [%g3], %o3
  89. and %g2, 0xff, %o0
  90. retl
  91.  sub %o3, %o0, %o0