strncmp_32.S 1.2 KB

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