Home | History | Annotate | Line # | Download | only in string
strncmp.S revision 1.3
      1  1.1    fvdl /*
      2  1.2    salo  * Written by J.T. Conklin <jtc (at) NetBSD.org>.
      3  1.1    fvdl  * Public domain.
      4  1.1    fvdl  */
      5  1.1    fvdl 
      6  1.1    fvdl #include <machine/asm.h>
      7  1.1    fvdl 
      8  1.1    fvdl #if defined(LIBC_SCCS)
      9  1.3  rpaulo         RCSID("$NetBSD: strncmp.S,v 1.3 2005/08/03 22:59:50 rpaulo Exp $")
     10  1.1    fvdl #endif
     11  1.1    fvdl 
     12  1.1    fvdl /*
     13  1.1    fvdl  * NOTE: I've unrolled the loop eight times: large enough to make a
     14  1.1    fvdl  * significant difference, and small enough not to totally trash the
     15  1.1    fvdl  * cache.
     16  1.1    fvdl  */
     17  1.1    fvdl 
     18  1.1    fvdl ENTRY(strncmp)
     19  1.1    fvdl 	testq	%rdx,%rdx
     20  1.1    fvdl 	jmp	L2			/* Jump into the loop! */
     21  1.1    fvdl 
     22  1.1    fvdl L1:	incq	%rdi
     23  1.1    fvdl 	incq	%rsi
     24  1.1    fvdl 	decq	%rdx
     25  1.1    fvdl L2:	jz	L4			/* strings are equal */
     26  1.1    fvdl 	movb	(%rdi),%al
     27  1.1    fvdl 	testb	%al,%al
     28  1.1    fvdl 	jz	L3
     29  1.1    fvdl 	cmpb	%al,(%rsi)
     30  1.1    fvdl 	jne	L3
     31  1.1    fvdl 
     32  1.1    fvdl 	incq	%rdi
     33  1.1    fvdl 	incq	%rsi
     34  1.1    fvdl 	decq	%rdx
     35  1.1    fvdl 	jz	L4
     36  1.1    fvdl 	movb	(%rdi),%al
     37  1.1    fvdl 	testb	%al,%al
     38  1.1    fvdl 	jz	L3
     39  1.1    fvdl 	cmpb	%al,(%rsi)
     40  1.1    fvdl 	jne	L3
     41  1.1    fvdl 
     42  1.1    fvdl 	incq	%rdi
     43  1.1    fvdl 	incq	%rsi
     44  1.1    fvdl 	decq	%rdx
     45  1.1    fvdl 	jz	L4
     46  1.1    fvdl 	movb	(%rdi),%al
     47  1.1    fvdl 	testb	%al,%al
     48  1.1    fvdl 	jz	L3
     49  1.1    fvdl 	cmpb	%al,(%rsi)
     50  1.1    fvdl 	jne	L3
     51  1.1    fvdl 
     52  1.1    fvdl 	incq	%rdi
     53  1.1    fvdl 	incq	%rsi
     54  1.1    fvdl 	decq	%rdx
     55  1.1    fvdl 	jz	L4
     56  1.1    fvdl 	movb	(%rdi),%al
     57  1.1    fvdl 	testb	%al,%al
     58  1.1    fvdl 	jz	L3
     59  1.1    fvdl 	cmpb	%al,(%rsi)
     60  1.1    fvdl 	jne	L3
     61  1.1    fvdl 
     62  1.1    fvdl 	incq	%rdi
     63  1.1    fvdl 	incq	%rsi
     64  1.1    fvdl 	decq	%rdx
     65  1.1    fvdl 	jz	L4
     66  1.1    fvdl 	movb	(%rdi),%al
     67  1.1    fvdl 	testb	%al,%al
     68  1.1    fvdl 	jz	L3
     69  1.1    fvdl 	cmpb	%al,(%rsi)
     70  1.1    fvdl 	jne	L3
     71  1.1    fvdl 
     72  1.1    fvdl 	incq	%rdi
     73  1.1    fvdl 	incq	%rsi
     74  1.1    fvdl 	decq	%rdx
     75  1.1    fvdl 	jz	L4
     76  1.1    fvdl 	movb	(%rdi),%al
     77  1.1    fvdl 	testb	%al,%al
     78  1.1    fvdl 	jz	L3
     79  1.1    fvdl 	cmpb	%al,(%rsi)
     80  1.1    fvdl 	jne	L3
     81  1.1    fvdl 
     82  1.1    fvdl 	incq	%rdi
     83  1.1    fvdl 	incq	%rsi
     84  1.1    fvdl 	decq	%rdx
     85  1.1    fvdl 	jz	L4
     86  1.1    fvdl 	movb	(%rdi),%al
     87  1.1    fvdl 	testb	%al,%al
     88  1.1    fvdl 	jz	L3
     89  1.1    fvdl 	cmpb	%al,(%rsi)
     90  1.1    fvdl 	jne	L3
     91  1.1    fvdl 
     92  1.1    fvdl 	incq	%rdi
     93  1.1    fvdl 	incq	%rsi
     94  1.1    fvdl 	decq	%rdx
     95  1.1    fvdl 	jz	L4
     96  1.1    fvdl 	movb	(%rdi),%al
     97  1.1    fvdl 	testb	%al,%al
     98  1.1    fvdl 	jz	L3
     99  1.1    fvdl 	cmpb	%al,(%rsi)
    100  1.1    fvdl 	je	L1
    101  1.1    fvdl 
    102  1.3  rpaulo L3:	movzbl	(%rdi),%eax		/* unsigned comparison */
    103  1.1    fvdl 	movzbl	(%rsi),%ecx
    104  1.1    fvdl 	subl	%ecx,%eax
    105  1.1    fvdl 	ret
    106  1.1    fvdl L4:	xorl	%eax,%eax
    107  1.1    fvdl 	ret
    108