34
34
#define PUSH(REG) pushl REG; CFI_PUSH (REG)
35
35
#define POP(REG) popl REG; CFI_POP (REG)
39
# define STRCMP __strncmp_sse4_2
44
# define RETURN POP (REM); ret; .p2align 4; CFI_PUSH (REM)
46
#elif defined USE_AS_STRCASECMP_L
47
# include "locale-defines.h"
49
# define STRCMP __strcasecmp_l_sse4_2
57
# define LOCALE 12 /* Loaded before the adjustement. */
59
# define RETURN POP (%edi); POP (%ebx); ret; \
60
.p2align 4; CFI_PUSH (%ebx); CFI_PUSH (%edi)
62
# define RETURN POP (%edi); ret; .p2align 4; CFI_PUSH (%edi)
64
# define NONASCII __strcasecmp_nonascii
65
#elif defined USE_AS_STRNCASECMP_L
66
# include "locale-defines.h"
68
# define STRCMP __strncasecmp_l_sse4_2
77
# define LOCALE 16 /* Loaded before the adjustement. */
79
# define RETURN POP (%edi); POP (REM); POP (%ebx); ret; \
81
CFI_PUSH (%ebx); CFI_PUSH (REM); CFI_PUSH (%edi)
83
# define RETURN POP (%edi); POP (REM); ret; \
84
.p2align 4; CFI_PUSH (REM); CFI_PUSH (%edi)
87
# define NONASCII __strncasecmp_nonascii
37
#ifndef USE_AS_STRNCMP
90
39
# define STRCMP __strcmp_sse4_2
93
42
# define STR2 STR1+4
94
43
# define RETURN ret; .p2align 4
46
# define STRCMP __strncmp_sse4_2
51
# define RETURN POP (%ebp); ret; .p2align 4; CFI_PUSH (%ebp)
97
54
.section .text.sse4.2,"ax",@progbits
99
#ifdef USE_AS_STRCASECMP_L
100
ENTRY (__strcasecmp_sse4_2)
103
call __i686.get_pc_thunk.bx
104
addl $_GLOBAL_OFFSET_TABLE_, %ebx
105
movl __libc_tsd_LOCALE@GOTNTPOFF(%ebx), %eax
106
# ifdef NO_TLS_DIRECT_SEG_REFS
110
movl %gs:(%eax), %eax
113
# ifdef NO_TLS_DIRECT_SEG_REFS
115
movl __libc_tsd_LOCALE@NTPOFF(%eax), %eax
117
movl %gs:__libc_tsd_LOCALE@NTPOFF, %eax
120
# if LOCALE_T___LOCALES != 0 || LC_CTYPE != 0
121
movl LOCALE_T___LOCALES+LC_CTYPE*4(%eax), %eax
125
testl $1, LOCALE_DATA_VALUES+_NL_CTYPE_NONASCII_CASE*SIZEOF_VALUES(%eax)
126
jne __strcasecmp_nonascii
128
END (__strcasecmp_sse4_2)
131
#ifdef USE_AS_STRNCASECMP_L
132
ENTRY (__strncasecmp_sse4_2)
135
call __i686.get_pc_thunk.bx
136
addl $_GLOBAL_OFFSET_TABLE_, %ebx
137
movl __libc_tsd_LOCALE@GOTNTPOFF(%ebx), %eax
138
# ifdef NO_TLS_DIRECT_SEG_REFS
142
movl %gs:(%eax), %eax
145
# ifdef NO_TLS_DIRECT_SEG_REFS
147
movl __libc_tsd_LOCALE@NTPOFF(%eax), %eax
149
movl %gs:__libc_tsd_LOCALE@NTPOFF, %eax
152
# if LOCALE_T___LOCALES != 0 || LC_CTYPE != 0
153
movl LOCALE_T___LOCALES+LC_CTYPE*4(%eax), %eax
157
testl $1, LOCALE_DATA_VALUES+_NL_CTYPE_NONASCII_CASE*SIZEOF_VALUES(%eax)
158
jne __strncasecmp_nonascii
160
END (__strncasecmp_sse4_2)
164
#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L
165
movl LOCALE(%esp), %eax
166
# if LOCALE_T___LOCALES != 0 || LC_CTYPE != 0
167
movl LOCALE_T___LOCALES+LC_CTYPE*4(%eax), %eax
171
testl $1, LOCALE_DATA_VALUES+_NL_CTYPE_NONASCII_CASE*SIZEOF_VALUES(%eax)
176
call __i686.get_pc_thunk.bx
177
addl $_GLOBAL_OFFSET_TABLE_, %ebx
180
.section .rodata.cst16,"aM",@progbits,16
183
.quad 0x4040404040404040
184
.quad 0x4040404040404040
186
.quad 0x5b5b5b5b5b5b5b5b
187
.quad 0x5b5b5b5b5b5b5b5b
189
.quad 0x2020202020202020
190
.quad 0x2020202020202020
194
# define UCLOW_reg .Lbelowupper@GOTOFF(%ebx)
195
# define UCHIGH_reg .Ltopupper@GOTOFF(%ebx)
196
# define LCQWORD_reg .Ltouppermask@GOTOFF(%ebx)
198
# define UCLOW_reg .Lbelowupper
199
# define UCHIGH_reg .Ltopupper
200
# define LCQWORD_reg .Ltouppermask
204
#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
207
#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L
210
59
mov STR1(%esp), %edx
211
60
mov STR2(%esp), %eax
212
#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
265
84
ptest %xmm2, %xmm0
266
85
jnc L(less16bytes)
268
#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
275
94
movzbl (%eax), %ecx
276
#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L
279
movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx
280
movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%edi,4), %edi
282
movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx
283
movl _nl_C_LC_CTYPE_tolower+128*4(,%edi,4), %edi
293
#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
100
#ifdef USE_AS_STRNCMP
298
105
movzbl 1(%eax), %ecx
299
#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L
302
movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx
303
movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%edi,4), %edi
305
movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx
306
movl _nl_C_LC_CTYPE_tolower+128*4(,%edi,4), %edi
310
106
cmpb %cl, 1(%edx)
316
#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
111
#ifdef USE_AS_STRNCMP
320
115
movzbl 2(%eax), %ecx
321
#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L
324
movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx
325
movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%edi,4), %edi
327
movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx
328
movl _nl_C_LC_CTYPE_tolower+128*4(,%edi,4), %edi
332
116
cmpb %cl, 2(%edx)
338
#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
121
#ifdef USE_AS_STRNCMP
342
125
movzbl 3(%eax), %ecx
343
#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L
346
movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx
347
movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%edi,4), %edi
349
movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx
350
movl _nl_C_LC_CTYPE_tolower+128*4(,%edi,4), %edi
354
126
cmpb %cl, 3(%edx)
360
#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
131
#ifdef USE_AS_STRNCMP
364
135
movzbl 4(%eax), %ecx
365
#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L
368
movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx
369
movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%edi,4), %edi
371
movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx
372
movl _nl_C_LC_CTYPE_tolower+128*4(,%edi,4), %edi
376
136
cmpb %cl, 4(%edx)
382
#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
141
#ifdef USE_AS_STRNCMP
386
145
movzbl 5(%eax), %ecx
387
#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L
390
movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx
391
movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%edi,4), %edi
393
movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx
394
movl _nl_C_LC_CTYPE_tolower+128*4(,%edi,4), %edi
398
146
cmpb %cl, 5(%edx)
404
#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
151
#ifdef USE_AS_STRNCMP
408
155
movzbl 6(%eax), %ecx
409
#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L
412
movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx
413
movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%edi,4), %edi
415
movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx
416
movl _nl_C_LC_CTYPE_tolower+128*4(,%edi,4), %edi
420
156
cmpb %cl, 6(%edx)
426
#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
161
#ifdef USE_AS_STRNCMP
430
165
movzbl 7(%eax), %ecx
431
#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L
434
movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx
435
movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%edi,4), %edi
437
movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx
438
movl _nl_C_LC_CTYPE_tolower+128*4(,%edi,4), %edi
442
166
cmpb %cl, 7(%edx)
448
#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
171
#ifdef USE_AS_STRNCMP
455
#if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L
459
#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
181
#ifdef USE_AS_STRNCMP
460
182
cfi_remember_state
469
191
andl $0xfff, %ecx
472
194
lea -0xff0(%ecx), %edx
620
300
movzbl (%eax), %ecx
621
#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L
624
movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx
625
movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%edi,4), %edi
627
movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx
628
movl _nl_C_LC_CTYPE_tolower+128*4(,%edi,4), %edi
638
#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
306
#ifdef USE_AS_STRNCMP
642
310
movzbl 1(%eax), %ecx
643
#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L
646
movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx
647
movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%edi,4), %edi
649
movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx
650
movl _nl_C_LC_CTYPE_tolower+128*4(,%edi,4), %edi
654
311
cmpb %cl, 1(%edx)
660
#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
316
#ifdef USE_AS_STRNCMP
665
321
movzbl 2(%eax), %ecx
666
#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L
669
movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx
670
movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%edi,4), %edi
672
movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx
673
movl _nl_C_LC_CTYPE_tolower+128*4(,%edi,4), %edi
677
322
cmpb %cl, 2(%edx)
683
#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
327
#ifdef USE_AS_STRNCMP
687
331
movzbl 3(%eax), %ecx
688
#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L
691
movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx
692
movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%edi,4), %edi
694
movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx
695
movl _nl_C_LC_CTYPE_tolower+128*4(,%edi,4), %edi
699
332
cmpb %cl, 3(%edx)
706
#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
338
#ifdef USE_AS_STRNCMP
710
342
movzbl 4(%eax), %ecx
711
#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L
714
movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx
715
movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%edi,4), %edi
717
movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx
718
movl _nl_C_LC_CTYPE_tolower+128*4(,%edi,4), %edi
722
343
cmpb %cl, 4(%edx)
729
#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
349
#ifdef USE_AS_STRNCMP
733
353
movzbl 5(%eax), %ecx
734
#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L
737
movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx
738
movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%edi,4), %edi
740
movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx
741
movl _nl_C_LC_CTYPE_tolower+128*4(,%edi,4), %edi
745
354
cmpb %cl, 5(%edx)
751
#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
359
#ifdef USE_AS_STRNCMP
755
363
movzbl 6(%eax), %ecx
756
#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L
759
movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx
760
movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%edi,4), %edi
762
movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx
763
movl _nl_C_LC_CTYPE_tolower+128*4(,%edi,4), %edi
767
364
cmpb %cl, 6(%edx)
773
#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
369
#ifdef USE_AS_STRNCMP
777
373
movzbl 7(%eax), %ecx
778
#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L
781
movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx
782
movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%edi,4), %edi
784
movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx
785
movl _nl_C_LC_CTYPE_tolower+128*4(,%edi,4), %edi
789
374
cmpb %cl, 7(%edx)