11dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/* $OpenBSD: strcmp.S,v 1.3 2005/08/07 11:30:38 espie Exp $ */ 21dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/* 31dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Written by J.T. Conklin <jtc@netbsd.org>. 41dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Public domain. 51dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project */ 61dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 7851e68a2402fa414544e66650e09dfdaac813e51Elliott Hughes#include <private/bionic_asm.h> 81dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 91dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/* 101dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * NOTE: I've unrolled the loop eight times: large enough to make a 111dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * significant difference, and small enough not to totally trash the 121dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * cache. 131dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project */ 141dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 151dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source ProjectENTRY(strcmp) 161dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project movl 0x04(%esp),%eax 171dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project movl 0x08(%esp),%edx 181dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project jmp L2 /* Jump into the loop! */ 191dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 201dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project .align 2,0x90 211dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source ProjectL1: incl %eax 221dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project incl %edx 231dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source ProjectL2: movb (%eax),%cl 241dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project testb %cl,%cl /* null terminator??? */ 251dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project jz L3 261dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project cmpb %cl,(%edx) /* chars match??? */ 271dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project jne L3 281dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project incl %eax 291dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project incl %edx 301dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project movb (%eax),%cl 311dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project testb %cl,%cl 321dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project jz L3 331dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project cmpb %cl,(%edx) 341dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project jne L3 351dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project incl %eax 361dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project incl %edx 371dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project movb (%eax),%cl 381dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project testb %cl,%cl 391dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project jz L3 401dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project cmpb %cl,(%edx) 411dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project jne L3 421dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project incl %eax 431dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project incl %edx 441dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project movb (%eax),%cl 451dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project testb %cl,%cl 461dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project jz L3 471dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project cmpb %cl,(%edx) 481dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project jne L3 491dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project incl %eax 501dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project incl %edx 511dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project movb (%eax),%cl 521dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project testb %cl,%cl 531dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project jz L3 541dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project cmpb %cl,(%edx) 551dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project jne L3 561dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project incl %eax 571dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project incl %edx 581dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project movb (%eax),%cl 591dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project testb %cl,%cl 601dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project jz L3 611dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project cmpb %cl,(%edx) 621dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project jne L3 631dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project incl %eax 641dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project incl %edx 651dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project movb (%eax),%cl 661dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project testb %cl,%cl 671dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project jz L3 681dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project cmpb %cl,(%edx) 691dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project jne L3 701dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project incl %eax 711dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project incl %edx 721dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project movb (%eax),%cl 731dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project testb %cl,%cl 741dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project jz L3 751dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project cmpb %cl,(%edx) 761dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project je L1 771dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project .align 2, 0x90 781dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source ProjectL3: movzbl (%eax),%eax /* unsigned comparison */ 791dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project movzbl (%edx),%edx 801dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project subl %edx,%eax 811dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project ret 826719500dbd9330d7539d2db3dcf3e8ad1858c7aaElliott HughesEND(strcmp) 83