strncmp_32.S 1.2 KB

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