xref: /csrg-svn/usr.bin/f77/libF77/CCI/s_cmp_s.s (revision 47942)
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