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