1/* strcmp.s 4.1 84/11/01 */ 2 3/* 4 * Compare string s1 lexicographically to string s2. 5 * Return: 6 * 0 s1 == s2 7 * > 0 s1 > s2 8 * < 0 s2 < s2 9 * 10 * strcmp(s1, s2) 11 * char *s1, *s2; 12 */ 13 .globl _strcmp 14 15_strcmp: 16 .word 0x0 17 movq 4(ap),r3 # r3 = s1; r4 = s2 181: 19 locc $0,$65535,(r4) # look for '\0' in s2 20 bneq 2f 21 cmpc3 $65535,(r4),(r3)# compare full block 22 bneq 3f 23 movl r1,r4 # advance s2 24 jbr 1b # matched, next block 252: 26 subl2 r4,r1 # calculate length 27 incl r1 # +1 for '\0' 28 cmpc3 r1,(r4),(r3) # compare remainder 29 bneq 3f 30 ret # r0 = 0 already 313: 32 subb3 (r1),(r3),r0 # r0 = *s1 - *s2 33 cvtbl r0,r0 34 ret 35