| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 | |||||
| 6 | .text | ||||
| 7 | .align 4 | ||||
| 8 | .global __strncmp, strncmp | ||||
| 9 | __strncmp: | ||||
| 10 | strncmp: | ||||
| 11 | mov %o0, %g3 | ||||
| 12 | mov 0, %o3 | ||||
| 13 | |||||
| 14 | cmp %o2, 3 | ||||
| 15 | ble 7f | ||||
| 16 | mov 0, %g2 | ||||
| 17 | |||||
| 18 | sra %o2, 2, %o4 | ||||
| 19 | ldub [%g3], %o3 | ||||
| 20 | |||||
| 21 | 0: | ||||
| 22 | ldub [%o1], %g2 | ||||
| 23 | add %g3, 1, %g3 | ||||
| 24 | and %o3, 0xff, %o0 | ||||
| 25 | |||||
| 26 | cmp %o0, 0 | ||||
| 27 | be 8f | ||||
| 28 | add %o1, 1, %o1 | ||||
| 29 | |||||
| 30 | cmp %o0, %g2 | ||||
| 31 | be,a 1f | ||||
| 32 | ldub [%g3], %o3 | ||||
| 33 | |||||
| 34 | retl | ||||
| 35 | sub %o0, %g2, %o0 | ||||
| 36 | |||||
| 37 | 1: | ||||
| 38 | ldub [%o1], %g2 | ||||
| 39 | add %g3,1, %g3 | ||||
| 40 | and %o3, 0xff, %o0 | ||||
| 41 | |||||
| 42 | cmp %o0, 0 | ||||
| 43 | be 8f | ||||
| 44 | add %o1, 1, %o1 | ||||
| 45 | |||||
| 46 | cmp %o0, %g2 | ||||
| 47 | be,a 1f | ||||
| 48 | ldub [%g3], %o3 | ||||
| 49 | |||||
| 50 | retl | ||||
| 51 | sub %o0, %g2, %o0 | ||||
| 52 | |||||
| 53 | 1: | ||||
| 54 | ldub [%o1], %g2 | ||||
| 55 | add %g3, 1, %g3 | ||||
| 56 | and %o3, 0xff, %o0 | ||||
| 57 | |||||
| 58 | cmp %o0, 0 | ||||
| 59 | be 8f | ||||
| 60 | add %o1, 1, %o1 | ||||
| 61 | |||||
| 62 | cmp %o0, %g2 | ||||
| 63 | be,a 1f | ||||
| 64 | ldub [%g3], %o3 | ||||
| 65 | |||||
| 66 | retl | ||||
| 67 | sub %o0, %g2, %o0 | ||||
| 68 | |||||
| 69 | 1: | ||||
| 70 | ldub [%o1], %g2 | ||||
| 71 | add %g3, 1, %g3 | ||||
| 72 | and %o3, 0xff, %o0 | ||||
| 73 | |||||
| 74 | cmp %o0, 0 | ||||
| 75 | be 8f | ||||
| 76 | add %o1, 1, %o1 | ||||
| 77 | |||||
| 78 | cmp %o0, %g2 | ||||
| 79 | be 1f | ||||
| 80 | add %o4, -1, %o4 | ||||
| 81 | |||||
| 82 | retl | ||||
| 83 | sub %o0, %g2, %o0 | ||||
| 84 | |||||
| 85 | 1: | ||||
| 86 | |||||
| 87 | cmp %o4, 0 | ||||
| 88 | bg,a 0b | ||||
| 89 | ldub [%g3], %o3 | ||||
| 90 | |||||
| 91 | b 7f | ||||
| 92 | and %o2, 3, %o2 | ||||
| 93 | |||||
| 94 | 9: | ||||
| 95 | ldub [%o1], %g2 | ||||
| 96 | add %g3, 1, %g3 | ||||
| 97 | and %o3, 0xff, %o0 | ||||
| 98 | |||||
| 99 | cmp %o0, 0 | ||||
| 100 | be 8f | ||||
| 101 | add %o1, 1, %o1 | ||||
| 102 | |||||
| 103 | cmp %o0, %g2 | ||||
| 104 | be 7f | ||||
| 105 | add %o2, -1, %o2 | ||||
| 106 | |||||
| 107 | 8: | ||||
| 108 | retl | ||||
| 109 | sub %o0, %g2, %o0 | ||||
| 110 | |||||
| 111 | 7: | ||||
| 112 | cmp %o2, 0 | ||||
| 113 | bg,a 9b | ||||
| 114 | ldub [%g3], %o3 | ||||
| 115 | |||||
| 116 | and %g2, 0xff, %o0 | ||||
| 117 | retl | ||||
| 118 | sub %o3, %o0, %o0 | ||||