1*47942Sbostic/*- 2*47942Sbostic * Copyright (c) 1991 The Regents of the University of California. 3*47942Sbostic * All rights reserved. 4*47942Sbostic * 5*47942Sbostic * This code is derived from software contributed to Berkeley by 6*47942Sbostic * Computer Consoles Inc. 7*47942Sbostic * 8*47942Sbostic * %sccs.include.proprietary.c% 9*47942Sbostic */ 1029958Smckusick 11*47942Sbostic#ifndef lint 12*47942Sbostic .asciz "@(#)s_cmp_s.s 5.2 (Berkeley) 04/12/91" 13*47942Sbostic#endif /* not lint */ 14*47942Sbostic 1529958Smckusick.data 1629958Smckusick.text 1729958SmckusickLL0:.align 1 1829958Smckusick.globl _s_cmp 1929958Smckusick.set MASK__,0x1004 2029958Smckusick.data 2129958Smckusick.text 2229958Smckusick_s_cmp:.word MASK__ 2329958Smckusickmovl 4(fp),r0 /* a */ 2429958Smckusickmovl 8(fp),r1 /* b */ 2529958Smckusickmovl 12(fp),r12 /* la */ 2629958Smckusickcmpl r12,16(fp) /* if (la <= lb) */ 2729958Smckusickjgtr L17 2829958Smckusickmovl r12, r2 /* compare according to la */ 2929958Smckusickcmps3 3029958Smckusickjeql L2 /* if not equal */ 3129958Smckusick 3229958SmckusickL20: 3329958Smckusickcvtbl (r0), r0 /* return(*a - *b) */ 3429958Smckusickcvtbl (r1), r1 3529958Smckusicksubl2 r1,r0 3629958Smckusickret 3729958Smckusick 3829958SmckusickL2: 3929958Smckusickcmpl r12,16(fp) /* if (la == lb) */ 4029958Smckusickjneq L50 4129958Smckusickclrl r0 /* then strings are equal */ 4229958Smckusickret 4329958Smckusick 4429958SmckusickL50: 4529958Smckusickaddl3 8(fp), 16(fp), r12 /* r12 = bend */ 4629958Smckusick 4729958SmckusickL3: 4829958Smckusickcmpb (r1), $32 /* if *b != space */ 4929958Smckusickjeql L4 5029958Smckusickcvtbl (r1), r1 5129958Smckusickmovl $32, r0 /* return(' ' - *b) */ 5229958Smckusicksubl2 r1, r0 5329958Smckusickret 5429958Smckusick 5529958SmckusickL4: /* else loop */ 5629958Smckusickincl r1 5729958Smckusickcmpl r1, r12 5829958Smckusickjlssu L3 /* till bend */ 5929958Smckusickclrl r0 6029958Smckusickret /* strings equal: return(0) */ 6129958Smckusick 6229958Smckusick 6329958SmckusickL17: /* else */ 6429958Smckusickmovl 16(fp), r2 /* compare according to lb */ 6529958Smckusickcmps3 6629958Smckusickjneq L20 /* if not equal */ 6729958Smckusick /* return(*a - *b) */ 6829958Smckusickaddl3 4(fp), 12(fp), r12 /* r12 = aend */ 6929958Smckusick 7029958SmckusickL30: 7129958Smckusickcmpb (r0), $32 /* if *a != space */ 7229958Smckusickjeql L40 7329958Smckusickcvtbl (r0), r0 7429958Smckusickmovl $32, r1 /* return(*a - ' ') */ 7529958Smckusicksubl2 r1, r0 7629958Smckusickret 7729958Smckusick 7829958SmckusickL40: /* else loop */ 7929958Smckusickincl r0 8029958Smckusickcmpl r0, r12 8129958Smckusickjlssu L30 /* till bend */ 8229958Smckusickclrl r0 8329958Smckusickret /* strings equal: return(0) */ 8429958Smckusick 85