^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) * strncmp.S: Hand optimized Sparc assembly of GCC output from GNU libc
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) * generic strncmp routine.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) #include <linux/linkage.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) #include <asm/export.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) .text
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) ENTRY(strncmp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) mov %o0, %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) mov 0, %o3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) cmp %o2, 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) ble 7f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) mov 0, %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) sra %o2, 2, %o4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) ldub [%g3], %o3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) 0:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) ldub [%o1], %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) add %g3, 1, %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) and %o3, 0xff, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) cmp %o0, 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) be 8f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) add %o1, 1, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) cmp %o0, %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) be,a 1f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) ldub [%g3], %o3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) sub %o0, %g2, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) 1:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) ldub [%o1], %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) add %g3,1, %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) and %o3, 0xff, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) cmp %o0, 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) be 8f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) add %o1, 1, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) cmp %o0, %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) be,a 1f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) ldub [%g3], %o3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) sub %o0, %g2, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) 1:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) ldub [%o1], %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) add %g3, 1, %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) and %o3, 0xff, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) cmp %o0, 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) be 8f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) add %o1, 1, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) cmp %o0, %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) be,a 1f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) ldub [%g3], %o3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) sub %o0, %g2, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) 1:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) ldub [%o1], %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) add %g3, 1, %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) and %o3, 0xff, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) cmp %o0, 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) be 8f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) add %o1, 1, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) cmp %o0, %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) be 1f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) add %o4, -1, %o4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) sub %o0, %g2, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) 1:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) cmp %o4, 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) bg,a 0b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) ldub [%g3], %o3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) b 7f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) and %o2, 3, %o2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) 9:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) ldub [%o1], %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) add %g3, 1, %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) and %o3, 0xff, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) cmp %o0, 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) be 8f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) add %o1, 1, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) cmp %o0, %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) be 7f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) add %o2, -1, %o2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) 8:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) sub %o0, %g2, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) 7:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) cmp %o2, 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) bg,a 9b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) ldub [%g3], %o3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) and %g2, 0xff, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) sub %o3, %o0, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) ENDPROC(strncmp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) EXPORT_SYMBOL(strncmp)