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