Home | History | Annotate | Line # | Download | only in string
strncmp.S revision 1.3.62.1
      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.62.1     tls         RCSID("$NetBSD: strncmp.S,v 1.3.62.1 2014/08/10 06:51:49 tls 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  1.3.62.1     tls END(strncmp)
    109