strncmp_32.S 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. /*
  3. * strncmp.S: Hand optimized Sparc assembly of GCC output from GNU libc
  4. * generic strncmp routine.
  5. */
  6. #include <linux/linkage.h>
  7. #include <asm/export.h>
  8. .text
  9. ENTRY(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
  91. ENDPROC(strncmp)
  92. EXPORT_SYMBOL(strncmp)