xref: /aosp_15_r20/art/runtime/arch/x86/memcmp16_x86.S (revision 795d594fd825385562da6b089ea9b2033f3abf5a)
1*795d594fSAndroid Build Coastguard Worker/*
2*795d594fSAndroid Build Coastguard Worker * Copyright (C) 2014 The Android Open Source Project
3*795d594fSAndroid Build Coastguard Worker *
4*795d594fSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
5*795d594fSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
6*795d594fSAndroid Build Coastguard Worker * You may obtain a copy of the License at
7*795d594fSAndroid Build Coastguard Worker *
8*795d594fSAndroid Build Coastguard Worker *      http://www.apache.org/licenses/LICENSE-2.0
9*795d594fSAndroid Build Coastguard Worker *
10*795d594fSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
11*795d594fSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
12*795d594fSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*795d594fSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
14*795d594fSAndroid Build Coastguard Worker * limitations under the License.
15*795d594fSAndroid Build Coastguard Worker */
16*795d594fSAndroid Build Coastguard Worker
17*795d594fSAndroid Build Coastguard Worker#include "asm_support_x86.S"
18*795d594fSAndroid Build Coastguard Worker
19*795d594fSAndroid Build Coastguard Worker#define MEMCMP  __memcmp16
20*795d594fSAndroid Build Coastguard Worker
21*795d594fSAndroid Build Coastguard Worker/* int32_t memcmp16_compare(const uint16_t* s0, const uint16_t* s1, size_t count); */
22*795d594fSAndroid Build Coastguard Worker
23*795d594fSAndroid Build Coastguard Worker#ifndef L
24*795d594fSAndroid Build Coastguard Worker# define L(label)    .L##label
25*795d594fSAndroid Build Coastguard Worker#endif
26*795d594fSAndroid Build Coastguard Worker
27*795d594fSAndroid Build Coastguard Worker#define CFI_PUSH(REG)    \
28*795d594fSAndroid Build Coastguard Worker    CFI_ADJUST_CFA_OFFSET(4);    \
29*795d594fSAndroid Build Coastguard Worker    CFI_REL_OFFSET(REG, 0)
30*795d594fSAndroid Build Coastguard Worker
31*795d594fSAndroid Build Coastguard Worker#define CFI_POP(REG)    \
32*795d594fSAndroid Build Coastguard Worker    CFI_ADJUST_CFA_OFFSET(-4);    \
33*795d594fSAndroid Build Coastguard Worker    CFI_RESTORE(REG)
34*795d594fSAndroid Build Coastguard Worker
35*795d594fSAndroid Build Coastguard Worker#define PUSH(REG)    pushl REG; CFI_PUSH (REG)
36*795d594fSAndroid Build Coastguard Worker#define POP(REG)    popl REG; CFI_POP (REG)
37*795d594fSAndroid Build Coastguard Worker
38*795d594fSAndroid Build Coastguard Worker#define PARMS        4
39*795d594fSAndroid Build Coastguard Worker#define BLK1        PARMS
40*795d594fSAndroid Build Coastguard Worker#define BLK2        BLK1+4
41*795d594fSAndroid Build Coastguard Worker#define LEN        BLK2+4
42*795d594fSAndroid Build Coastguard Worker#define RETURN_END    POP (%edi); POP (%esi); POP (%ebx); ret
43*795d594fSAndroid Build Coastguard WorkerMACRO0(RETURN)
44*795d594fSAndroid Build Coastguard Worker    RETURN_END
45*795d594fSAndroid Build Coastguard Worker    CFI_RESTORE_STATE_AND_DEF_CFA esp, 16
46*795d594fSAndroid Build Coastguard Worker    CFI_REMEMBER_STATE
47*795d594fSAndroid Build Coastguard WorkerEND_MACRO
48*795d594fSAndroid Build Coastguard Worker
49*795d594fSAndroid Build Coastguard WorkerDEFINE_FUNCTION MEMCMP
50*795d594fSAndroid Build Coastguard Worker    movl       LEN(%esp), %ecx
51*795d594fSAndroid Build Coastguard Worker
52*795d594fSAndroid Build Coastguard Worker    shl        $1, %ecx
53*795d594fSAndroid Build Coastguard Worker    jz         L(zero)
54*795d594fSAndroid Build Coastguard Worker
55*795d594fSAndroid Build Coastguard Worker    movl       BLK1(%esp), %eax
56*795d594fSAndroid Build Coastguard Worker    cmp        $48, %ecx
57*795d594fSAndroid Build Coastguard Worker    movl       BLK2(%esp), %edx
58*795d594fSAndroid Build Coastguard Worker    jae        L(48bytesormore)
59*795d594fSAndroid Build Coastguard Worker
60*795d594fSAndroid Build Coastguard Worker    PUSH       (%ebx)
61*795d594fSAndroid Build Coastguard Worker    add        %ecx, %edx
62*795d594fSAndroid Build Coastguard Worker    add        %ecx, %eax
63*795d594fSAndroid Build Coastguard Worker    jmp        L(less48bytes)
64*795d594fSAndroid Build Coastguard Worker
65*795d594fSAndroid Build Coastguard Worker    CFI_POP    (%ebx)
66*795d594fSAndroid Build Coastguard Worker
67*795d594fSAndroid Build Coastguard Worker    .p2align 4
68*795d594fSAndroid Build Coastguard WorkerL(zero):
69*795d594fSAndroid Build Coastguard Worker    xor        %eax, %eax
70*795d594fSAndroid Build Coastguard Worker    ret
71*795d594fSAndroid Build Coastguard Worker
72*795d594fSAndroid Build Coastguard Worker    .p2align 4
73*795d594fSAndroid Build Coastguard WorkerL(48bytesormore):
74*795d594fSAndroid Build Coastguard Worker    PUSH       (%ebx)
75*795d594fSAndroid Build Coastguard Worker    PUSH       (%esi)
76*795d594fSAndroid Build Coastguard Worker    PUSH       (%edi)
77*795d594fSAndroid Build Coastguard Worker    CFI_REMEMBER_STATE
78*795d594fSAndroid Build Coastguard Worker    movdqu     (%eax), %xmm3
79*795d594fSAndroid Build Coastguard Worker    movdqu     (%edx), %xmm0
80*795d594fSAndroid Build Coastguard Worker    movl       %eax, %edi
81*795d594fSAndroid Build Coastguard Worker    movl       %edx, %esi
82*795d594fSAndroid Build Coastguard Worker    pcmpeqb    %xmm0, %xmm3
83*795d594fSAndroid Build Coastguard Worker    pmovmskb   %xmm3, %edx
84*795d594fSAndroid Build Coastguard Worker    lea        16(%edi), %edi
85*795d594fSAndroid Build Coastguard Worker
86*795d594fSAndroid Build Coastguard Worker    sub        $0xffff, %edx
87*795d594fSAndroid Build Coastguard Worker    lea        16(%esi), %esi
88*795d594fSAndroid Build Coastguard Worker    jnz        L(less16bytes)
89*795d594fSAndroid Build Coastguard Worker    mov        %edi, %edx
90*795d594fSAndroid Build Coastguard Worker    and        $0xf, %edx
91*795d594fSAndroid Build Coastguard Worker    xor        %edx, %edi
92*795d594fSAndroid Build Coastguard Worker    sub        %edx, %esi
93*795d594fSAndroid Build Coastguard Worker    add        %edx, %ecx
94*795d594fSAndroid Build Coastguard Worker    mov        %esi, %edx
95*795d594fSAndroid Build Coastguard Worker    and        $0xf, %edx
96*795d594fSAndroid Build Coastguard Worker    jz         L(shr_0)
97*795d594fSAndroid Build Coastguard Worker    xor        %edx, %esi
98*795d594fSAndroid Build Coastguard Worker
99*795d594fSAndroid Build Coastguard Worker    cmp        $0, %edx
100*795d594fSAndroid Build Coastguard Worker    je         L(shr_0)
101*795d594fSAndroid Build Coastguard Worker    cmp        $2, %edx
102*795d594fSAndroid Build Coastguard Worker    je         L(shr_2)
103*795d594fSAndroid Build Coastguard Worker    cmp        $4, %edx
104*795d594fSAndroid Build Coastguard Worker    je         L(shr_4)
105*795d594fSAndroid Build Coastguard Worker    cmp        $6, %edx
106*795d594fSAndroid Build Coastguard Worker    je         L(shr_6)
107*795d594fSAndroid Build Coastguard Worker    cmp        $8, %edx
108*795d594fSAndroid Build Coastguard Worker    je         L(shr_8)
109*795d594fSAndroid Build Coastguard Worker    cmp        $10, %edx
110*795d594fSAndroid Build Coastguard Worker    je         L(shr_10)
111*795d594fSAndroid Build Coastguard Worker    cmp        $12, %edx
112*795d594fSAndroid Build Coastguard Worker    je         L(shr_12)
113*795d594fSAndroid Build Coastguard Worker    jmp        L(shr_14)
114*795d594fSAndroid Build Coastguard Worker
115*795d594fSAndroid Build Coastguard Worker    .p2align 4
116*795d594fSAndroid Build Coastguard WorkerL(shr_0):
117*795d594fSAndroid Build Coastguard Worker    cmp        $80, %ecx
118*795d594fSAndroid Build Coastguard Worker    jae        L(shr_0_gobble)
119*795d594fSAndroid Build Coastguard Worker    lea        -48(%ecx), %ecx
120*795d594fSAndroid Build Coastguard Worker    xor        %eax, %eax
121*795d594fSAndroid Build Coastguard Worker    movaps     (%esi), %xmm1
122*795d594fSAndroid Build Coastguard Worker    pcmpeqb    (%edi), %xmm1
123*795d594fSAndroid Build Coastguard Worker    movaps     16(%esi), %xmm2
124*795d594fSAndroid Build Coastguard Worker    pcmpeqb    16(%edi), %xmm2
125*795d594fSAndroid Build Coastguard Worker    pand       %xmm1, %xmm2
126*795d594fSAndroid Build Coastguard Worker    pmovmskb   %xmm2, %edx
127*795d594fSAndroid Build Coastguard Worker    add        $32, %edi
128*795d594fSAndroid Build Coastguard Worker    add        $32, %esi
129*795d594fSAndroid Build Coastguard Worker    sub        $0xffff, %edx
130*795d594fSAndroid Build Coastguard Worker    jnz        L(exit)
131*795d594fSAndroid Build Coastguard Worker
132*795d594fSAndroid Build Coastguard Worker    lea        (%ecx, %edi,1), %eax
133*795d594fSAndroid Build Coastguard Worker    lea        (%ecx, %esi,1), %edx
134*795d594fSAndroid Build Coastguard Worker    POP        (%edi)
135*795d594fSAndroid Build Coastguard Worker    POP        (%esi)
136*795d594fSAndroid Build Coastguard Worker    jmp        L(less48bytes)
137*795d594fSAndroid Build Coastguard Worker
138*795d594fSAndroid Build Coastguard Worker    CFI_RESTORE_STATE_AND_DEF_CFA esp, 16
139*795d594fSAndroid Build Coastguard Worker    CFI_REMEMBER_STATE
140*795d594fSAndroid Build Coastguard Worker    .p2align 4
141*795d594fSAndroid Build Coastguard WorkerL(shr_0_gobble):
142*795d594fSAndroid Build Coastguard Worker    lea        -48(%ecx), %ecx
143*795d594fSAndroid Build Coastguard Worker    movdqa     (%esi), %xmm0
144*795d594fSAndroid Build Coastguard Worker    xor        %eax, %eax
145*795d594fSAndroid Build Coastguard Worker    pcmpeqb    (%edi), %xmm0
146*795d594fSAndroid Build Coastguard Worker    sub        $32, %ecx
147*795d594fSAndroid Build Coastguard Worker    movdqa     16(%esi), %xmm2
148*795d594fSAndroid Build Coastguard Worker    pcmpeqb    16(%edi), %xmm2
149*795d594fSAndroid Build Coastguard WorkerL(shr_0_gobble_loop):
150*795d594fSAndroid Build Coastguard Worker    pand       %xmm0, %xmm2
151*795d594fSAndroid Build Coastguard Worker    sub        $32, %ecx
152*795d594fSAndroid Build Coastguard Worker    pmovmskb   %xmm2, %edx
153*795d594fSAndroid Build Coastguard Worker    movdqa     %xmm0, %xmm1
154*795d594fSAndroid Build Coastguard Worker    movdqa     32(%esi), %xmm0
155*795d594fSAndroid Build Coastguard Worker    movdqa     48(%esi), %xmm2
156*795d594fSAndroid Build Coastguard Worker    sbb        $0xffff, %edx
157*795d594fSAndroid Build Coastguard Worker    pcmpeqb    32(%edi), %xmm0
158*795d594fSAndroid Build Coastguard Worker    pcmpeqb    48(%edi), %xmm2
159*795d594fSAndroid Build Coastguard Worker    lea        32(%edi), %edi
160*795d594fSAndroid Build Coastguard Worker    lea        32(%esi), %esi
161*795d594fSAndroid Build Coastguard Worker    jz         L(shr_0_gobble_loop)
162*795d594fSAndroid Build Coastguard Worker
163*795d594fSAndroid Build Coastguard Worker    pand       %xmm0, %xmm2
164*795d594fSAndroid Build Coastguard Worker    cmp        $0, %ecx
165*795d594fSAndroid Build Coastguard Worker    jge        L(shr_0_gobble_loop_next)
166*795d594fSAndroid Build Coastguard Worker    inc        %edx
167*795d594fSAndroid Build Coastguard Worker    add        $32, %ecx
168*795d594fSAndroid Build Coastguard WorkerL(shr_0_gobble_loop_next):
169*795d594fSAndroid Build Coastguard Worker    test       %edx, %edx
170*795d594fSAndroid Build Coastguard Worker    jnz        L(exit)
171*795d594fSAndroid Build Coastguard Worker
172*795d594fSAndroid Build Coastguard Worker    pmovmskb %xmm2, %edx
173*795d594fSAndroid Build Coastguard Worker    movdqa     %xmm0, %xmm1
174*795d594fSAndroid Build Coastguard Worker    lea        32(%edi), %edi
175*795d594fSAndroid Build Coastguard Worker    lea        32(%esi), %esi
176*795d594fSAndroid Build Coastguard Worker    sub        $0xffff, %edx
177*795d594fSAndroid Build Coastguard Worker    jnz        L(exit)
178*795d594fSAndroid Build Coastguard Worker    lea        (%ecx, %edi,1), %eax
179*795d594fSAndroid Build Coastguard Worker    lea        (%ecx, %esi,1), %edx
180*795d594fSAndroid Build Coastguard Worker    POP        (%edi)
181*795d594fSAndroid Build Coastguard Worker    POP        (%esi)
182*795d594fSAndroid Build Coastguard Worker    jmp        L(less48bytes)
183*795d594fSAndroid Build Coastguard Worker
184*795d594fSAndroid Build Coastguard Worker    CFI_RESTORE_STATE_AND_DEF_CFA esp, 16
185*795d594fSAndroid Build Coastguard Worker    CFI_REMEMBER_STATE
186*795d594fSAndroid Build Coastguard Worker    .p2align 4
187*795d594fSAndroid Build Coastguard WorkerL(shr_2):
188*795d594fSAndroid Build Coastguard Worker    cmp        $80, %ecx
189*795d594fSAndroid Build Coastguard Worker    lea        -48(%ecx), %ecx
190*795d594fSAndroid Build Coastguard Worker    mov        %edx, %eax
191*795d594fSAndroid Build Coastguard Worker    jae        L(shr_2_gobble)
192*795d594fSAndroid Build Coastguard Worker
193*795d594fSAndroid Build Coastguard Worker    movdqa     16(%esi), %xmm1
194*795d594fSAndroid Build Coastguard Worker    movdqa     %xmm1, %xmm2
195*795d594fSAndroid Build Coastguard Worker    palignr    $2,(%esi), %xmm1
196*795d594fSAndroid Build Coastguard Worker    pcmpeqb    (%edi), %xmm1
197*795d594fSAndroid Build Coastguard Worker
198*795d594fSAndroid Build Coastguard Worker    movdqa     32(%esi), %xmm3
199*795d594fSAndroid Build Coastguard Worker    palignr    $2,%xmm2, %xmm3
200*795d594fSAndroid Build Coastguard Worker    pcmpeqb    16(%edi), %xmm3
201*795d594fSAndroid Build Coastguard Worker
202*795d594fSAndroid Build Coastguard Worker    pand       %xmm1, %xmm3
203*795d594fSAndroid Build Coastguard Worker    pmovmskb   %xmm3, %edx
204*795d594fSAndroid Build Coastguard Worker    lea        32(%edi), %edi
205*795d594fSAndroid Build Coastguard Worker    lea        32(%esi), %esi
206*795d594fSAndroid Build Coastguard Worker    sub        $0xffff, %edx
207*795d594fSAndroid Build Coastguard Worker    jnz        L(exit)
208*795d594fSAndroid Build Coastguard Worker    lea        (%ecx, %edi,1), %eax
209*795d594fSAndroid Build Coastguard Worker    lea        2(%ecx, %esi,1), %edx
210*795d594fSAndroid Build Coastguard Worker    POP        (%edi)
211*795d594fSAndroid Build Coastguard Worker    POP        (%esi)
212*795d594fSAndroid Build Coastguard Worker    jmp        L(less48bytes)
213*795d594fSAndroid Build Coastguard Worker
214*795d594fSAndroid Build Coastguard Worker    CFI_RESTORE_STATE_AND_DEF_CFA esp, 16
215*795d594fSAndroid Build Coastguard Worker    CFI_REMEMBER_STATE
216*795d594fSAndroid Build Coastguard Worker    .p2align 4
217*795d594fSAndroid Build Coastguard WorkerL(shr_2_gobble):
218*795d594fSAndroid Build Coastguard Worker    sub        $32, %ecx
219*795d594fSAndroid Build Coastguard Worker    movdqa     16(%esi), %xmm0
220*795d594fSAndroid Build Coastguard Worker    palignr    $2,(%esi), %xmm0
221*795d594fSAndroid Build Coastguard Worker    pcmpeqb    (%edi), %xmm0
222*795d594fSAndroid Build Coastguard Worker
223*795d594fSAndroid Build Coastguard Worker    movdqa     32(%esi), %xmm3
224*795d594fSAndroid Build Coastguard Worker    palignr    $2,16(%esi), %xmm3
225*795d594fSAndroid Build Coastguard Worker    pcmpeqb    16(%edi), %xmm3
226*795d594fSAndroid Build Coastguard Worker
227*795d594fSAndroid Build Coastguard WorkerL(shr_2_gobble_loop):
228*795d594fSAndroid Build Coastguard Worker    pand       %xmm0, %xmm3
229*795d594fSAndroid Build Coastguard Worker    sub        $32, %ecx
230*795d594fSAndroid Build Coastguard Worker    pmovmskb   %xmm3, %edx
231*795d594fSAndroid Build Coastguard Worker    movdqa     %xmm0, %xmm1
232*795d594fSAndroid Build Coastguard Worker
233*795d594fSAndroid Build Coastguard Worker    movdqa     64(%esi), %xmm3
234*795d594fSAndroid Build Coastguard Worker    palignr    $2,48(%esi), %xmm3
235*795d594fSAndroid Build Coastguard Worker    sbb        $0xffff, %edx
236*795d594fSAndroid Build Coastguard Worker    movdqa     48(%esi), %xmm0
237*795d594fSAndroid Build Coastguard Worker    palignr    $2,32(%esi), %xmm0
238*795d594fSAndroid Build Coastguard Worker    pcmpeqb    32(%edi), %xmm0
239*795d594fSAndroid Build Coastguard Worker    lea        32(%esi), %esi
240*795d594fSAndroid Build Coastguard Worker    pcmpeqb    48(%edi), %xmm3
241*795d594fSAndroid Build Coastguard Worker
242*795d594fSAndroid Build Coastguard Worker    lea        32(%edi), %edi
243*795d594fSAndroid Build Coastguard Worker    jz         L(shr_2_gobble_loop)
244*795d594fSAndroid Build Coastguard Worker    pand       %xmm0, %xmm3
245*795d594fSAndroid Build Coastguard Worker
246*795d594fSAndroid Build Coastguard Worker    cmp        $0, %ecx
247*795d594fSAndroid Build Coastguard Worker    jge        L(shr_2_gobble_next)
248*795d594fSAndroid Build Coastguard Worker    inc        %edx
249*795d594fSAndroid Build Coastguard Worker    add        $32, %ecx
250*795d594fSAndroid Build Coastguard WorkerL(shr_2_gobble_next):
251*795d594fSAndroid Build Coastguard Worker    test       %edx, %edx
252*795d594fSAndroid Build Coastguard Worker    jnz        L(exit)
253*795d594fSAndroid Build Coastguard Worker
254*795d594fSAndroid Build Coastguard Worker    pmovmskb   %xmm3, %edx
255*795d594fSAndroid Build Coastguard Worker    movdqa     %xmm0, %xmm1
256*795d594fSAndroid Build Coastguard Worker    lea        32(%edi), %edi
257*795d594fSAndroid Build Coastguard Worker    lea        32(%esi), %esi
258*795d594fSAndroid Build Coastguard Worker    sub        $0xffff, %edx
259*795d594fSAndroid Build Coastguard Worker    jnz        L(exit)
260*795d594fSAndroid Build Coastguard Worker
261*795d594fSAndroid Build Coastguard Worker    lea        (%ecx, %edi,1), %eax
262*795d594fSAndroid Build Coastguard Worker    lea        2(%ecx, %esi,1), %edx
263*795d594fSAndroid Build Coastguard Worker    POP        (%edi)
264*795d594fSAndroid Build Coastguard Worker    POP        (%esi)
265*795d594fSAndroid Build Coastguard Worker    jmp        L(less48bytes)
266*795d594fSAndroid Build Coastguard Worker
267*795d594fSAndroid Build Coastguard Worker    CFI_RESTORE_STATE_AND_DEF_CFA esp, 16
268*795d594fSAndroid Build Coastguard Worker    CFI_REMEMBER_STATE
269*795d594fSAndroid Build Coastguard Worker    .p2align 4
270*795d594fSAndroid Build Coastguard WorkerL(shr_4):
271*795d594fSAndroid Build Coastguard Worker    cmp        $80, %ecx
272*795d594fSAndroid Build Coastguard Worker    lea        -48(%ecx), %ecx
273*795d594fSAndroid Build Coastguard Worker    mov        %edx, %eax
274*795d594fSAndroid Build Coastguard Worker    jae        L(shr_4_gobble)
275*795d594fSAndroid Build Coastguard Worker
276*795d594fSAndroid Build Coastguard Worker    movdqa     16(%esi), %xmm1
277*795d594fSAndroid Build Coastguard Worker    movdqa     %xmm1, %xmm2
278*795d594fSAndroid Build Coastguard Worker    palignr    $4,(%esi), %xmm1
279*795d594fSAndroid Build Coastguard Worker    pcmpeqb    (%edi), %xmm1
280*795d594fSAndroid Build Coastguard Worker
281*795d594fSAndroid Build Coastguard Worker    movdqa     32(%esi), %xmm3
282*795d594fSAndroid Build Coastguard Worker    palignr    $4,%xmm2, %xmm3
283*795d594fSAndroid Build Coastguard Worker    pcmpeqb    16(%edi), %xmm3
284*795d594fSAndroid Build Coastguard Worker
285*795d594fSAndroid Build Coastguard Worker    pand       %xmm1, %xmm3
286*795d594fSAndroid Build Coastguard Worker    pmovmskb   %xmm3, %edx
287*795d594fSAndroid Build Coastguard Worker    lea        32(%edi), %edi
288*795d594fSAndroid Build Coastguard Worker    lea        32(%esi), %esi
289*795d594fSAndroid Build Coastguard Worker    sub        $0xffff, %edx
290*795d594fSAndroid Build Coastguard Worker    jnz        L(exit)
291*795d594fSAndroid Build Coastguard Worker    lea        (%ecx, %edi,1), %eax
292*795d594fSAndroid Build Coastguard Worker    lea        4(%ecx, %esi,1), %edx
293*795d594fSAndroid Build Coastguard Worker    POP        (%edi)
294*795d594fSAndroid Build Coastguard Worker    POP        (%esi)
295*795d594fSAndroid Build Coastguard Worker    jmp        L(less48bytes)
296*795d594fSAndroid Build Coastguard Worker
297*795d594fSAndroid Build Coastguard Worker    CFI_RESTORE_STATE_AND_DEF_CFA esp, 16
298*795d594fSAndroid Build Coastguard Worker    CFI_REMEMBER_STATE
299*795d594fSAndroid Build Coastguard Worker    .p2align 4
300*795d594fSAndroid Build Coastguard WorkerL(shr_4_gobble):
301*795d594fSAndroid Build Coastguard Worker    sub        $32, %ecx
302*795d594fSAndroid Build Coastguard Worker    movdqa     16(%esi), %xmm0
303*795d594fSAndroid Build Coastguard Worker    palignr    $4,(%esi), %xmm0
304*795d594fSAndroid Build Coastguard Worker    pcmpeqb    (%edi), %xmm0
305*795d594fSAndroid Build Coastguard Worker
306*795d594fSAndroid Build Coastguard Worker    movdqa     32(%esi), %xmm3
307*795d594fSAndroid Build Coastguard Worker    palignr    $4,16(%esi), %xmm3
308*795d594fSAndroid Build Coastguard Worker    pcmpeqb    16(%edi), %xmm3
309*795d594fSAndroid Build Coastguard Worker
310*795d594fSAndroid Build Coastguard WorkerL(shr_4_gobble_loop):
311*795d594fSAndroid Build Coastguard Worker    pand       %xmm0, %xmm3
312*795d594fSAndroid Build Coastguard Worker    sub        $32, %ecx
313*795d594fSAndroid Build Coastguard Worker    pmovmskb   %xmm3, %edx
314*795d594fSAndroid Build Coastguard Worker    movdqa     %xmm0, %xmm1
315*795d594fSAndroid Build Coastguard Worker
316*795d594fSAndroid Build Coastguard Worker    movdqa     64(%esi), %xmm3
317*795d594fSAndroid Build Coastguard Worker    palignr    $4,48(%esi), %xmm3
318*795d594fSAndroid Build Coastguard Worker    sbb        $0xffff, %edx
319*795d594fSAndroid Build Coastguard Worker    movdqa     48(%esi), %xmm0
320*795d594fSAndroid Build Coastguard Worker    palignr    $4,32(%esi), %xmm0
321*795d594fSAndroid Build Coastguard Worker    pcmpeqb    32(%edi), %xmm0
322*795d594fSAndroid Build Coastguard Worker    lea        32(%esi), %esi
323*795d594fSAndroid Build Coastguard Worker    pcmpeqb    48(%edi), %xmm3
324*795d594fSAndroid Build Coastguard Worker
325*795d594fSAndroid Build Coastguard Worker    lea        32(%edi), %edi
326*795d594fSAndroid Build Coastguard Worker    jz         L(shr_4_gobble_loop)
327*795d594fSAndroid Build Coastguard Worker    pand       %xmm0, %xmm3
328*795d594fSAndroid Build Coastguard Worker
329*795d594fSAndroid Build Coastguard Worker    cmp        $0, %ecx
330*795d594fSAndroid Build Coastguard Worker    jge        L(shr_4_gobble_next)
331*795d594fSAndroid Build Coastguard Worker    inc        %edx
332*795d594fSAndroid Build Coastguard Worker    add        $32, %ecx
333*795d594fSAndroid Build Coastguard WorkerL(shr_4_gobble_next):
334*795d594fSAndroid Build Coastguard Worker    test       %edx, %edx
335*795d594fSAndroid Build Coastguard Worker    jnz        L(exit)
336*795d594fSAndroid Build Coastguard Worker
337*795d594fSAndroid Build Coastguard Worker    pmovmskb   %xmm3, %edx
338*795d594fSAndroid Build Coastguard Worker    movdqa     %xmm0, %xmm1
339*795d594fSAndroid Build Coastguard Worker    lea        32(%edi), %edi
340*795d594fSAndroid Build Coastguard Worker    lea        32(%esi), %esi
341*795d594fSAndroid Build Coastguard Worker    sub        $0xffff, %edx
342*795d594fSAndroid Build Coastguard Worker    jnz        L(exit)
343*795d594fSAndroid Build Coastguard Worker
344*795d594fSAndroid Build Coastguard Worker    lea        (%ecx, %edi,1), %eax
345*795d594fSAndroid Build Coastguard Worker    lea        4(%ecx, %esi,1), %edx
346*795d594fSAndroid Build Coastguard Worker    POP        (%edi)
347*795d594fSAndroid Build Coastguard Worker    POP        (%esi)
348*795d594fSAndroid Build Coastguard Worker    jmp        L(less48bytes)
349*795d594fSAndroid Build Coastguard Worker
350*795d594fSAndroid Build Coastguard Worker    CFI_RESTORE_STATE_AND_DEF_CFA esp, 16
351*795d594fSAndroid Build Coastguard Worker    CFI_REMEMBER_STATE
352*795d594fSAndroid Build Coastguard Worker    .p2align 4
353*795d594fSAndroid Build Coastguard WorkerL(shr_6):
354*795d594fSAndroid Build Coastguard Worker    cmp        $80, %ecx
355*795d594fSAndroid Build Coastguard Worker    lea        -48(%ecx), %ecx
356*795d594fSAndroid Build Coastguard Worker    mov        %edx, %eax
357*795d594fSAndroid Build Coastguard Worker    jae        L(shr_6_gobble)
358*795d594fSAndroid Build Coastguard Worker
359*795d594fSAndroid Build Coastguard Worker    movdqa     16(%esi), %xmm1
360*795d594fSAndroid Build Coastguard Worker    movdqa     %xmm1, %xmm2
361*795d594fSAndroid Build Coastguard Worker    palignr    $6,(%esi), %xmm1
362*795d594fSAndroid Build Coastguard Worker    pcmpeqb    (%edi), %xmm1
363*795d594fSAndroid Build Coastguard Worker
364*795d594fSAndroid Build Coastguard Worker    movdqa     32(%esi), %xmm3
365*795d594fSAndroid Build Coastguard Worker    palignr    $6,%xmm2, %xmm3
366*795d594fSAndroid Build Coastguard Worker    pcmpeqb    16(%edi), %xmm3
367*795d594fSAndroid Build Coastguard Worker
368*795d594fSAndroid Build Coastguard Worker    pand       %xmm1, %xmm3
369*795d594fSAndroid Build Coastguard Worker    pmovmskb   %xmm3, %edx
370*795d594fSAndroid Build Coastguard Worker    lea        32(%edi), %edi
371*795d594fSAndroid Build Coastguard Worker    lea        32(%esi), %esi
372*795d594fSAndroid Build Coastguard Worker    sub        $0xffff, %edx
373*795d594fSAndroid Build Coastguard Worker    jnz        L(exit)
374*795d594fSAndroid Build Coastguard Worker    lea        (%ecx, %edi,1), %eax
375*795d594fSAndroid Build Coastguard Worker    lea        6(%ecx, %esi,1), %edx
376*795d594fSAndroid Build Coastguard Worker    POP        (%edi)
377*795d594fSAndroid Build Coastguard Worker    POP        (%esi)
378*795d594fSAndroid Build Coastguard Worker    jmp        L(less48bytes)
379*795d594fSAndroid Build Coastguard Worker
380*795d594fSAndroid Build Coastguard Worker    CFI_RESTORE_STATE_AND_DEF_CFA esp, 16
381*795d594fSAndroid Build Coastguard Worker    CFI_REMEMBER_STATE
382*795d594fSAndroid Build Coastguard Worker    .p2align 4
383*795d594fSAndroid Build Coastguard WorkerL(shr_6_gobble):
384*795d594fSAndroid Build Coastguard Worker    sub        $32, %ecx
385*795d594fSAndroid Build Coastguard Worker    movdqa     16(%esi), %xmm0
386*795d594fSAndroid Build Coastguard Worker    palignr    $6,(%esi), %xmm0
387*795d594fSAndroid Build Coastguard Worker    pcmpeqb    (%edi), %xmm0
388*795d594fSAndroid Build Coastguard Worker
389*795d594fSAndroid Build Coastguard Worker    movdqa     32(%esi), %xmm3
390*795d594fSAndroid Build Coastguard Worker    palignr    $6,16(%esi), %xmm3
391*795d594fSAndroid Build Coastguard Worker    pcmpeqb    16(%edi), %xmm3
392*795d594fSAndroid Build Coastguard Worker
393*795d594fSAndroid Build Coastguard WorkerL(shr_6_gobble_loop):
394*795d594fSAndroid Build Coastguard Worker    pand       %xmm0, %xmm3
395*795d594fSAndroid Build Coastguard Worker    sub        $32, %ecx
396*795d594fSAndroid Build Coastguard Worker    pmovmskb   %xmm3, %edx
397*795d594fSAndroid Build Coastguard Worker    movdqa     %xmm0, %xmm1
398*795d594fSAndroid Build Coastguard Worker
399*795d594fSAndroid Build Coastguard Worker    movdqa     64(%esi), %xmm3
400*795d594fSAndroid Build Coastguard Worker    palignr    $6,48(%esi), %xmm3
401*795d594fSAndroid Build Coastguard Worker    sbb        $0xffff, %edx
402*795d594fSAndroid Build Coastguard Worker    movdqa     48(%esi), %xmm0
403*795d594fSAndroid Build Coastguard Worker    palignr    $6,32(%esi), %xmm0
404*795d594fSAndroid Build Coastguard Worker    pcmpeqb    32(%edi), %xmm0
405*795d594fSAndroid Build Coastguard Worker    lea        32(%esi), %esi
406*795d594fSAndroid Build Coastguard Worker    pcmpeqb    48(%edi), %xmm3
407*795d594fSAndroid Build Coastguard Worker
408*795d594fSAndroid Build Coastguard Worker    lea        32(%edi), %edi
409*795d594fSAndroid Build Coastguard Worker    jz         L(shr_6_gobble_loop)
410*795d594fSAndroid Build Coastguard Worker    pand       %xmm0, %xmm3
411*795d594fSAndroid Build Coastguard Worker
412*795d594fSAndroid Build Coastguard Worker    cmp        $0, %ecx
413*795d594fSAndroid Build Coastguard Worker    jge        L(shr_6_gobble_next)
414*795d594fSAndroid Build Coastguard Worker    inc        %edx
415*795d594fSAndroid Build Coastguard Worker    add        $32, %ecx
416*795d594fSAndroid Build Coastguard WorkerL(shr_6_gobble_next):
417*795d594fSAndroid Build Coastguard Worker    test       %edx, %edx
418*795d594fSAndroid Build Coastguard Worker    jnz        L(exit)
419*795d594fSAndroid Build Coastguard Worker
420*795d594fSAndroid Build Coastguard Worker    pmovmskb   %xmm3, %edx
421*795d594fSAndroid Build Coastguard Worker    movdqa     %xmm0, %xmm1
422*795d594fSAndroid Build Coastguard Worker    lea        32(%edi), %edi
423*795d594fSAndroid Build Coastguard Worker    lea        32(%esi), %esi
424*795d594fSAndroid Build Coastguard Worker    sub        $0xffff, %edx
425*795d594fSAndroid Build Coastguard Worker    jnz        L(exit)
426*795d594fSAndroid Build Coastguard Worker
427*795d594fSAndroid Build Coastguard Worker    lea        (%ecx, %edi,1), %eax
428*795d594fSAndroid Build Coastguard Worker    lea        6(%ecx, %esi,1), %edx
429*795d594fSAndroid Build Coastguard Worker    POP        (%edi)
430*795d594fSAndroid Build Coastguard Worker    POP        (%esi)
431*795d594fSAndroid Build Coastguard Worker    jmp        L(less48bytes)
432*795d594fSAndroid Build Coastguard Worker
433*795d594fSAndroid Build Coastguard Worker    CFI_RESTORE_STATE_AND_DEF_CFA esp, 16
434*795d594fSAndroid Build Coastguard Worker    CFI_REMEMBER_STATE
435*795d594fSAndroid Build Coastguard Worker    .p2align 4
436*795d594fSAndroid Build Coastguard WorkerL(shr_8):
437*795d594fSAndroid Build Coastguard Worker    cmp        $80, %ecx
438*795d594fSAndroid Build Coastguard Worker    lea        -48(%ecx), %ecx
439*795d594fSAndroid Build Coastguard Worker    mov        %edx, %eax
440*795d594fSAndroid Build Coastguard Worker    jae        L(shr_8_gobble)
441*795d594fSAndroid Build Coastguard Worker
442*795d594fSAndroid Build Coastguard Worker    movdqa     16(%esi), %xmm1
443*795d594fSAndroid Build Coastguard Worker    movdqa     %xmm1, %xmm2
444*795d594fSAndroid Build Coastguard Worker    palignr    $8,(%esi), %xmm1
445*795d594fSAndroid Build Coastguard Worker    pcmpeqb    (%edi), %xmm1
446*795d594fSAndroid Build Coastguard Worker
447*795d594fSAndroid Build Coastguard Worker    movdqa     32(%esi), %xmm3
448*795d594fSAndroid Build Coastguard Worker    palignr    $8,%xmm2, %xmm3
449*795d594fSAndroid Build Coastguard Worker    pcmpeqb    16(%edi), %xmm3
450*795d594fSAndroid Build Coastguard Worker
451*795d594fSAndroid Build Coastguard Worker    pand       %xmm1, %xmm3
452*795d594fSAndroid Build Coastguard Worker    pmovmskb   %xmm3, %edx
453*795d594fSAndroid Build Coastguard Worker    lea        32(%edi), %edi
454*795d594fSAndroid Build Coastguard Worker    lea        32(%esi), %esi
455*795d594fSAndroid Build Coastguard Worker    sub        $0xffff, %edx
456*795d594fSAndroid Build Coastguard Worker    jnz        L(exit)
457*795d594fSAndroid Build Coastguard Worker    lea        (%ecx, %edi,1), %eax
458*795d594fSAndroid Build Coastguard Worker    lea        8(%ecx, %esi,1), %edx
459*795d594fSAndroid Build Coastguard Worker    POP        (%edi)
460*795d594fSAndroid Build Coastguard Worker    POP        (%esi)
461*795d594fSAndroid Build Coastguard Worker    jmp        L(less48bytes)
462*795d594fSAndroid Build Coastguard Worker
463*795d594fSAndroid Build Coastguard Worker    CFI_RESTORE_STATE_AND_DEF_CFA esp, 16
464*795d594fSAndroid Build Coastguard Worker    CFI_REMEMBER_STATE
465*795d594fSAndroid Build Coastguard Worker    .p2align 4
466*795d594fSAndroid Build Coastguard WorkerL(shr_8_gobble):
467*795d594fSAndroid Build Coastguard Worker    sub        $32, %ecx
468*795d594fSAndroid Build Coastguard Worker    movdqa     16(%esi), %xmm0
469*795d594fSAndroid Build Coastguard Worker    palignr    $8,(%esi), %xmm0
470*795d594fSAndroid Build Coastguard Worker    pcmpeqb    (%edi), %xmm0
471*795d594fSAndroid Build Coastguard Worker
472*795d594fSAndroid Build Coastguard Worker    movdqa     32(%esi), %xmm3
473*795d594fSAndroid Build Coastguard Worker    palignr    $8,16(%esi), %xmm3
474*795d594fSAndroid Build Coastguard Worker    pcmpeqb    16(%edi), %xmm3
475*795d594fSAndroid Build Coastguard Worker
476*795d594fSAndroid Build Coastguard WorkerL(shr_8_gobble_loop):
477*795d594fSAndroid Build Coastguard Worker    pand       %xmm0, %xmm3
478*795d594fSAndroid Build Coastguard Worker    sub        $32, %ecx
479*795d594fSAndroid Build Coastguard Worker    pmovmskb   %xmm3, %edx
480*795d594fSAndroid Build Coastguard Worker    movdqa     %xmm0, %xmm1
481*795d594fSAndroid Build Coastguard Worker
482*795d594fSAndroid Build Coastguard Worker    movdqa     64(%esi), %xmm3
483*795d594fSAndroid Build Coastguard Worker    palignr    $8,48(%esi), %xmm3
484*795d594fSAndroid Build Coastguard Worker    sbb        $0xffff, %edx
485*795d594fSAndroid Build Coastguard Worker    movdqa     48(%esi), %xmm0
486*795d594fSAndroid Build Coastguard Worker    palignr    $8,32(%esi), %xmm0
487*795d594fSAndroid Build Coastguard Worker    pcmpeqb    32(%edi), %xmm0
488*795d594fSAndroid Build Coastguard Worker    lea        32(%esi), %esi
489*795d594fSAndroid Build Coastguard Worker    pcmpeqb    48(%edi), %xmm3
490*795d594fSAndroid Build Coastguard Worker
491*795d594fSAndroid Build Coastguard Worker    lea        32(%edi), %edi
492*795d594fSAndroid Build Coastguard Worker    jz         L(shr_8_gobble_loop)
493*795d594fSAndroid Build Coastguard Worker    pand       %xmm0, %xmm3
494*795d594fSAndroid Build Coastguard Worker
495*795d594fSAndroid Build Coastguard Worker    cmp        $0, %ecx
496*795d594fSAndroid Build Coastguard Worker    jge        L(shr_8_gobble_next)
497*795d594fSAndroid Build Coastguard Worker    inc        %edx
498*795d594fSAndroid Build Coastguard Worker    add        $32, %ecx
499*795d594fSAndroid Build Coastguard WorkerL(shr_8_gobble_next):
500*795d594fSAndroid Build Coastguard Worker    test       %edx, %edx
501*795d594fSAndroid Build Coastguard Worker    jnz        L(exit)
502*795d594fSAndroid Build Coastguard Worker
503*795d594fSAndroid Build Coastguard Worker    pmovmskb   %xmm3, %edx
504*795d594fSAndroid Build Coastguard Worker    movdqa     %xmm0, %xmm1
505*795d594fSAndroid Build Coastguard Worker    lea        32(%edi), %edi
506*795d594fSAndroid Build Coastguard Worker    lea        32(%esi), %esi
507*795d594fSAndroid Build Coastguard Worker    sub        $0xffff, %edx
508*795d594fSAndroid Build Coastguard Worker    jnz        L(exit)
509*795d594fSAndroid Build Coastguard Worker
510*795d594fSAndroid Build Coastguard Worker    lea        (%ecx, %edi,1), %eax
511*795d594fSAndroid Build Coastguard Worker    lea        8(%ecx, %esi,1), %edx
512*795d594fSAndroid Build Coastguard Worker    POP        (%edi)
513*795d594fSAndroid Build Coastguard Worker    POP        (%esi)
514*795d594fSAndroid Build Coastguard Worker    jmp        L(less48bytes)
515*795d594fSAndroid Build Coastguard Worker
516*795d594fSAndroid Build Coastguard Worker    CFI_RESTORE_STATE_AND_DEF_CFA esp, 16
517*795d594fSAndroid Build Coastguard Worker    CFI_REMEMBER_STATE
518*795d594fSAndroid Build Coastguard Worker    .p2align 4
519*795d594fSAndroid Build Coastguard WorkerL(shr_10):
520*795d594fSAndroid Build Coastguard Worker    cmp        $80, %ecx
521*795d594fSAndroid Build Coastguard Worker    lea        -48(%ecx), %ecx
522*795d594fSAndroid Build Coastguard Worker    mov        %edx, %eax
523*795d594fSAndroid Build Coastguard Worker    jae        L(shr_10_gobble)
524*795d594fSAndroid Build Coastguard Worker
525*795d594fSAndroid Build Coastguard Worker    movdqa     16(%esi), %xmm1
526*795d594fSAndroid Build Coastguard Worker    movdqa     %xmm1, %xmm2
527*795d594fSAndroid Build Coastguard Worker    palignr    $10, (%esi), %xmm1
528*795d594fSAndroid Build Coastguard Worker    pcmpeqb    (%edi), %xmm1
529*795d594fSAndroid Build Coastguard Worker
530*795d594fSAndroid Build Coastguard Worker    movdqa     32(%esi), %xmm3
531*795d594fSAndroid Build Coastguard Worker    palignr    $10,%xmm2, %xmm3
532*795d594fSAndroid Build Coastguard Worker    pcmpeqb    16(%edi), %xmm3
533*795d594fSAndroid Build Coastguard Worker
534*795d594fSAndroid Build Coastguard Worker    pand       %xmm1, %xmm3
535*795d594fSAndroid Build Coastguard Worker    pmovmskb   %xmm3, %edx
536*795d594fSAndroid Build Coastguard Worker    lea        32(%edi), %edi
537*795d594fSAndroid Build Coastguard Worker    lea        32(%esi), %esi
538*795d594fSAndroid Build Coastguard Worker    sub        $0xffff, %edx
539*795d594fSAndroid Build Coastguard Worker    jnz        L(exit)
540*795d594fSAndroid Build Coastguard Worker    lea        (%ecx, %edi,1), %eax
541*795d594fSAndroid Build Coastguard Worker    lea        10(%ecx, %esi,1), %edx
542*795d594fSAndroid Build Coastguard Worker    POP        (%edi)
543*795d594fSAndroid Build Coastguard Worker    POP        (%esi)
544*795d594fSAndroid Build Coastguard Worker    jmp        L(less48bytes)
545*795d594fSAndroid Build Coastguard Worker
546*795d594fSAndroid Build Coastguard Worker    CFI_RESTORE_STATE_AND_DEF_CFA esp, 16
547*795d594fSAndroid Build Coastguard Worker    CFI_REMEMBER_STATE
548*795d594fSAndroid Build Coastguard Worker    .p2align 4
549*795d594fSAndroid Build Coastguard WorkerL(shr_10_gobble):
550*795d594fSAndroid Build Coastguard Worker    sub        $32, %ecx
551*795d594fSAndroid Build Coastguard Worker    movdqa     16(%esi), %xmm0
552*795d594fSAndroid Build Coastguard Worker    palignr    $10, (%esi), %xmm0
553*795d594fSAndroid Build Coastguard Worker    pcmpeqb    (%edi), %xmm0
554*795d594fSAndroid Build Coastguard Worker
555*795d594fSAndroid Build Coastguard Worker    movdqa     32(%esi), %xmm3
556*795d594fSAndroid Build Coastguard Worker    palignr    $10, 16(%esi), %xmm3
557*795d594fSAndroid Build Coastguard Worker    pcmpeqb    16(%edi), %xmm3
558*795d594fSAndroid Build Coastguard Worker
559*795d594fSAndroid Build Coastguard WorkerL(shr_10_gobble_loop):
560*795d594fSAndroid Build Coastguard Worker    pand       %xmm0, %xmm3
561*795d594fSAndroid Build Coastguard Worker    sub        $32, %ecx
562*795d594fSAndroid Build Coastguard Worker    pmovmskb   %xmm3, %edx
563*795d594fSAndroid Build Coastguard Worker    movdqa     %xmm0, %xmm1
564*795d594fSAndroid Build Coastguard Worker
565*795d594fSAndroid Build Coastguard Worker    movdqa     64(%esi), %xmm3
566*795d594fSAndroid Build Coastguard Worker    palignr    $10,48(%esi), %xmm3
567*795d594fSAndroid Build Coastguard Worker    sbb        $0xffff, %edx
568*795d594fSAndroid Build Coastguard Worker    movdqa     48(%esi), %xmm0
569*795d594fSAndroid Build Coastguard Worker    palignr    $10,32(%esi), %xmm0
570*795d594fSAndroid Build Coastguard Worker    pcmpeqb    32(%edi), %xmm0
571*795d594fSAndroid Build Coastguard Worker    lea        32(%esi), %esi
572*795d594fSAndroid Build Coastguard Worker    pcmpeqb    48(%edi), %xmm3
573*795d594fSAndroid Build Coastguard Worker
574*795d594fSAndroid Build Coastguard Worker    lea        32(%edi), %edi
575*795d594fSAndroid Build Coastguard Worker    jz         L(shr_10_gobble_loop)
576*795d594fSAndroid Build Coastguard Worker    pand       %xmm0, %xmm3
577*795d594fSAndroid Build Coastguard Worker
578*795d594fSAndroid Build Coastguard Worker    cmp        $0, %ecx
579*795d594fSAndroid Build Coastguard Worker    jge        L(shr_10_gobble_next)
580*795d594fSAndroid Build Coastguard Worker    inc        %edx
581*795d594fSAndroid Build Coastguard Worker    add        $32, %ecx
582*795d594fSAndroid Build Coastguard WorkerL(shr_10_gobble_next):
583*795d594fSAndroid Build Coastguard Worker    test       %edx, %edx
584*795d594fSAndroid Build Coastguard Worker    jnz        L(exit)
585*795d594fSAndroid Build Coastguard Worker
586*795d594fSAndroid Build Coastguard Worker    pmovmskb   %xmm3, %edx
587*795d594fSAndroid Build Coastguard Worker    movdqa     %xmm0, %xmm1
588*795d594fSAndroid Build Coastguard Worker    lea        32(%edi), %edi
589*795d594fSAndroid Build Coastguard Worker    lea        32(%esi), %esi
590*795d594fSAndroid Build Coastguard Worker    sub        $0xffff, %edx
591*795d594fSAndroid Build Coastguard Worker    jnz        L(exit)
592*795d594fSAndroid Build Coastguard Worker
593*795d594fSAndroid Build Coastguard Worker    lea        (%ecx, %edi,1), %eax
594*795d594fSAndroid Build Coastguard Worker    lea        10(%ecx, %esi,1), %edx
595*795d594fSAndroid Build Coastguard Worker    POP        (%edi)
596*795d594fSAndroid Build Coastguard Worker    POP        (%esi)
597*795d594fSAndroid Build Coastguard Worker    jmp        L(less48bytes)
598*795d594fSAndroid Build Coastguard Worker
599*795d594fSAndroid Build Coastguard Worker    CFI_RESTORE_STATE_AND_DEF_CFA esp, 16
600*795d594fSAndroid Build Coastguard Worker    CFI_REMEMBER_STATE
601*795d594fSAndroid Build Coastguard Worker    .p2align 4
602*795d594fSAndroid Build Coastguard WorkerL(shr_12):
603*795d594fSAndroid Build Coastguard Worker    cmp        $80, %ecx
604*795d594fSAndroid Build Coastguard Worker    lea        -48(%ecx), %ecx
605*795d594fSAndroid Build Coastguard Worker    mov        %edx, %eax
606*795d594fSAndroid Build Coastguard Worker    jae        L(shr_12_gobble)
607*795d594fSAndroid Build Coastguard Worker
608*795d594fSAndroid Build Coastguard Worker    movdqa     16(%esi), %xmm1
609*795d594fSAndroid Build Coastguard Worker    movdqa     %xmm1, %xmm2
610*795d594fSAndroid Build Coastguard Worker    palignr    $12, (%esi), %xmm1
611*795d594fSAndroid Build Coastguard Worker    pcmpeqb    (%edi), %xmm1
612*795d594fSAndroid Build Coastguard Worker
613*795d594fSAndroid Build Coastguard Worker    movdqa     32(%esi), %xmm3
614*795d594fSAndroid Build Coastguard Worker    palignr    $12, %xmm2, %xmm3
615*795d594fSAndroid Build Coastguard Worker    pcmpeqb    16(%edi), %xmm3
616*795d594fSAndroid Build Coastguard Worker
617*795d594fSAndroid Build Coastguard Worker    pand       %xmm1, %xmm3
618*795d594fSAndroid Build Coastguard Worker    pmovmskb   %xmm3, %edx
619*795d594fSAndroid Build Coastguard Worker    lea        32(%edi), %edi
620*795d594fSAndroid Build Coastguard Worker    lea        32(%esi), %esi
621*795d594fSAndroid Build Coastguard Worker    sub        $0xffff, %edx
622*795d594fSAndroid Build Coastguard Worker    jnz        L(exit)
623*795d594fSAndroid Build Coastguard Worker    lea        (%ecx, %edi,1), %eax
624*795d594fSAndroid Build Coastguard Worker    lea        12(%ecx, %esi,1), %edx
625*795d594fSAndroid Build Coastguard Worker    POP        (%edi)
626*795d594fSAndroid Build Coastguard Worker    POP        (%esi)
627*795d594fSAndroid Build Coastguard Worker    jmp        L(less48bytes)
628*795d594fSAndroid Build Coastguard Worker
629*795d594fSAndroid Build Coastguard Worker    CFI_RESTORE_STATE_AND_DEF_CFA esp, 16
630*795d594fSAndroid Build Coastguard Worker    CFI_REMEMBER_STATE
631*795d594fSAndroid Build Coastguard Worker    .p2align 4
632*795d594fSAndroid Build Coastguard WorkerL(shr_12_gobble):
633*795d594fSAndroid Build Coastguard Worker    sub        $32, %ecx
634*795d594fSAndroid Build Coastguard Worker    movdqa     16(%esi), %xmm0
635*795d594fSAndroid Build Coastguard Worker    palignr    $12, (%esi), %xmm0
636*795d594fSAndroid Build Coastguard Worker    pcmpeqb    (%edi), %xmm0
637*795d594fSAndroid Build Coastguard Worker
638*795d594fSAndroid Build Coastguard Worker    movdqa     32(%esi), %xmm3
639*795d594fSAndroid Build Coastguard Worker    palignr    $12, 16(%esi), %xmm3
640*795d594fSAndroid Build Coastguard Worker    pcmpeqb    16(%edi), %xmm3
641*795d594fSAndroid Build Coastguard Worker
642*795d594fSAndroid Build Coastguard WorkerL(shr_12_gobble_loop):
643*795d594fSAndroid Build Coastguard Worker    pand       %xmm0, %xmm3
644*795d594fSAndroid Build Coastguard Worker    sub        $32, %ecx
645*795d594fSAndroid Build Coastguard Worker    pmovmskb   %xmm3, %edx
646*795d594fSAndroid Build Coastguard Worker    movdqa     %xmm0, %xmm1
647*795d594fSAndroid Build Coastguard Worker
648*795d594fSAndroid Build Coastguard Worker    movdqa     64(%esi), %xmm3
649*795d594fSAndroid Build Coastguard Worker    palignr    $12,48(%esi), %xmm3
650*795d594fSAndroid Build Coastguard Worker    sbb        $0xffff, %edx
651*795d594fSAndroid Build Coastguard Worker    movdqa     48(%esi), %xmm0
652*795d594fSAndroid Build Coastguard Worker    palignr    $12,32(%esi), %xmm0
653*795d594fSAndroid Build Coastguard Worker    pcmpeqb    32(%edi), %xmm0
654*795d594fSAndroid Build Coastguard Worker    lea        32(%esi), %esi
655*795d594fSAndroid Build Coastguard Worker    pcmpeqb    48(%edi), %xmm3
656*795d594fSAndroid Build Coastguard Worker
657*795d594fSAndroid Build Coastguard Worker    lea        32(%edi), %edi
658*795d594fSAndroid Build Coastguard Worker    jz         L(shr_12_gobble_loop)
659*795d594fSAndroid Build Coastguard Worker    pand       %xmm0, %xmm3
660*795d594fSAndroid Build Coastguard Worker
661*795d594fSAndroid Build Coastguard Worker    cmp        $0, %ecx
662*795d594fSAndroid Build Coastguard Worker    jge        L(shr_12_gobble_next)
663*795d594fSAndroid Build Coastguard Worker    inc        %edx
664*795d594fSAndroid Build Coastguard Worker    add        $32, %ecx
665*795d594fSAndroid Build Coastguard WorkerL(shr_12_gobble_next):
666*795d594fSAndroid Build Coastguard Worker    test       %edx, %edx
667*795d594fSAndroid Build Coastguard Worker    jnz        L(exit)
668*795d594fSAndroid Build Coastguard Worker
669*795d594fSAndroid Build Coastguard Worker    pmovmskb   %xmm3, %edx
670*795d594fSAndroid Build Coastguard Worker    movdqa     %xmm0, %xmm1
671*795d594fSAndroid Build Coastguard Worker    lea        32(%edi), %edi
672*795d594fSAndroid Build Coastguard Worker    lea        32(%esi), %esi
673*795d594fSAndroid Build Coastguard Worker    sub        $0xffff, %edx
674*795d594fSAndroid Build Coastguard Worker    jnz        L(exit)
675*795d594fSAndroid Build Coastguard Worker
676*795d594fSAndroid Build Coastguard Worker    lea        (%ecx, %edi,1), %eax
677*795d594fSAndroid Build Coastguard Worker    lea        12(%ecx, %esi,1), %edx
678*795d594fSAndroid Build Coastguard Worker    POP        (%edi)
679*795d594fSAndroid Build Coastguard Worker    POP        (%esi)
680*795d594fSAndroid Build Coastguard Worker    jmp        L(less48bytes)
681*795d594fSAndroid Build Coastguard Worker
682*795d594fSAndroid Build Coastguard Worker    CFI_RESTORE_STATE_AND_DEF_CFA esp, 16
683*795d594fSAndroid Build Coastguard Worker    CFI_REMEMBER_STATE
684*795d594fSAndroid Build Coastguard Worker    .p2align 4
685*795d594fSAndroid Build Coastguard WorkerL(shr_14):
686*795d594fSAndroid Build Coastguard Worker    cmp        $80, %ecx
687*795d594fSAndroid Build Coastguard Worker    lea        -48(%ecx), %ecx
688*795d594fSAndroid Build Coastguard Worker    mov        %edx, %eax
689*795d594fSAndroid Build Coastguard Worker    jae        L(shr_14_gobble)
690*795d594fSAndroid Build Coastguard Worker
691*795d594fSAndroid Build Coastguard Worker    movdqa     16(%esi), %xmm1
692*795d594fSAndroid Build Coastguard Worker    movdqa     %xmm1, %xmm2
693*795d594fSAndroid Build Coastguard Worker    palignr    $14, (%esi), %xmm1
694*795d594fSAndroid Build Coastguard Worker    pcmpeqb    (%edi), %xmm1
695*795d594fSAndroid Build Coastguard Worker
696*795d594fSAndroid Build Coastguard Worker    movdqa     32(%esi), %xmm3
697*795d594fSAndroid Build Coastguard Worker    palignr    $14, %xmm2, %xmm3
698*795d594fSAndroid Build Coastguard Worker    pcmpeqb    16(%edi), %xmm3
699*795d594fSAndroid Build Coastguard Worker
700*795d594fSAndroid Build Coastguard Worker    pand       %xmm1, %xmm3
701*795d594fSAndroid Build Coastguard Worker    pmovmskb   %xmm3, %edx
702*795d594fSAndroid Build Coastguard Worker    lea        32(%edi), %edi
703*795d594fSAndroid Build Coastguard Worker    lea        32(%esi), %esi
704*795d594fSAndroid Build Coastguard Worker    sub        $0xffff, %edx
705*795d594fSAndroid Build Coastguard Worker    jnz        L(exit)
706*795d594fSAndroid Build Coastguard Worker    lea        (%ecx, %edi,1), %eax
707*795d594fSAndroid Build Coastguard Worker    lea        14(%ecx, %esi,1), %edx
708*795d594fSAndroid Build Coastguard Worker    POP        (%edi)
709*795d594fSAndroid Build Coastguard Worker    POP        (%esi)
710*795d594fSAndroid Build Coastguard Worker    jmp        L(less48bytes)
711*795d594fSAndroid Build Coastguard Worker
712*795d594fSAndroid Build Coastguard Worker    CFI_RESTORE_STATE_AND_DEF_CFA esp, 16
713*795d594fSAndroid Build Coastguard Worker    CFI_REMEMBER_STATE
714*795d594fSAndroid Build Coastguard Worker    .p2align 4
715*795d594fSAndroid Build Coastguard WorkerL(shr_14_gobble):
716*795d594fSAndroid Build Coastguard Worker    sub        $32, %ecx
717*795d594fSAndroid Build Coastguard Worker    movdqa     16(%esi), %xmm0
718*795d594fSAndroid Build Coastguard Worker    palignr    $14, (%esi), %xmm0
719*795d594fSAndroid Build Coastguard Worker    pcmpeqb    (%edi), %xmm0
720*795d594fSAndroid Build Coastguard Worker
721*795d594fSAndroid Build Coastguard Worker    movdqa     32(%esi), %xmm3
722*795d594fSAndroid Build Coastguard Worker    palignr    $14, 16(%esi), %xmm3
723*795d594fSAndroid Build Coastguard Worker    pcmpeqb    16(%edi), %xmm3
724*795d594fSAndroid Build Coastguard Worker
725*795d594fSAndroid Build Coastguard WorkerL(shr_14_gobble_loop):
726*795d594fSAndroid Build Coastguard Worker    pand       %xmm0, %xmm3
727*795d594fSAndroid Build Coastguard Worker    sub        $32, %ecx
728*795d594fSAndroid Build Coastguard Worker    pmovmskb   %xmm3, %edx
729*795d594fSAndroid Build Coastguard Worker    movdqa     %xmm0, %xmm1
730*795d594fSAndroid Build Coastguard Worker
731*795d594fSAndroid Build Coastguard Worker    movdqa     64(%esi), %xmm3
732*795d594fSAndroid Build Coastguard Worker    palignr    $14,48(%esi), %xmm3
733*795d594fSAndroid Build Coastguard Worker    sbb        $0xffff, %edx
734*795d594fSAndroid Build Coastguard Worker    movdqa     48(%esi), %xmm0
735*795d594fSAndroid Build Coastguard Worker    palignr    $14,32(%esi), %xmm0
736*795d594fSAndroid Build Coastguard Worker    pcmpeqb    32(%edi), %xmm0
737*795d594fSAndroid Build Coastguard Worker    lea        32(%esi), %esi
738*795d594fSAndroid Build Coastguard Worker    pcmpeqb    48(%edi), %xmm3
739*795d594fSAndroid Build Coastguard Worker
740*795d594fSAndroid Build Coastguard Worker    lea        32(%edi), %edi
741*795d594fSAndroid Build Coastguard Worker    jz         L(shr_14_gobble_loop)
742*795d594fSAndroid Build Coastguard Worker    pand       %xmm0, %xmm3
743*795d594fSAndroid Build Coastguard Worker
744*795d594fSAndroid Build Coastguard Worker    cmp        $0, %ecx
745*795d594fSAndroid Build Coastguard Worker    jge        L(shr_14_gobble_next)
746*795d594fSAndroid Build Coastguard Worker    inc        %edx
747*795d594fSAndroid Build Coastguard Worker    add        $32, %ecx
748*795d594fSAndroid Build Coastguard WorkerL(shr_14_gobble_next):
749*795d594fSAndroid Build Coastguard Worker    test       %edx, %edx
750*795d594fSAndroid Build Coastguard Worker    jnz        L(exit)
751*795d594fSAndroid Build Coastguard Worker
752*795d594fSAndroid Build Coastguard Worker    pmovmskb   %xmm3, %edx
753*795d594fSAndroid Build Coastguard Worker    movdqa     %xmm0, %xmm1
754*795d594fSAndroid Build Coastguard Worker    lea        32(%edi), %edi
755*795d594fSAndroid Build Coastguard Worker    lea        32(%esi), %esi
756*795d594fSAndroid Build Coastguard Worker    sub        $0xffff, %edx
757*795d594fSAndroid Build Coastguard Worker    jnz        L(exit)
758*795d594fSAndroid Build Coastguard Worker
759*795d594fSAndroid Build Coastguard Worker    lea        (%ecx, %edi,1), %eax
760*795d594fSAndroid Build Coastguard Worker    lea        14(%ecx, %esi,1), %edx
761*795d594fSAndroid Build Coastguard Worker    POP        (%edi)
762*795d594fSAndroid Build Coastguard Worker    POP        (%esi)
763*795d594fSAndroid Build Coastguard Worker    jmp        L(less48bytes)
764*795d594fSAndroid Build Coastguard Worker
765*795d594fSAndroid Build Coastguard Worker    CFI_RESTORE_STATE_AND_DEF_CFA esp, 16
766*795d594fSAndroid Build Coastguard Worker    CFI_REMEMBER_STATE
767*795d594fSAndroid Build Coastguard Worker    .p2align 4
768*795d594fSAndroid Build Coastguard WorkerL(exit):
769*795d594fSAndroid Build Coastguard Worker    pmovmskb   %xmm1, %ebx
770*795d594fSAndroid Build Coastguard Worker    sub        $0xffff, %ebx
771*795d594fSAndroid Build Coastguard Worker    jz         L(first16bytes)
772*795d594fSAndroid Build Coastguard Worker    lea        -16(%esi), %esi
773*795d594fSAndroid Build Coastguard Worker    lea        -16(%edi), %edi
774*795d594fSAndroid Build Coastguard Worker    mov        %ebx, %edx
775*795d594fSAndroid Build Coastguard Worker
776*795d594fSAndroid Build Coastguard WorkerL(first16bytes):
777*795d594fSAndroid Build Coastguard Worker    add        %eax, %esi
778*795d594fSAndroid Build Coastguard WorkerL(less16bytes):
779*795d594fSAndroid Build Coastguard Worker    test       %dl, %dl
780*795d594fSAndroid Build Coastguard Worker    jz         L(next_four_words)
781*795d594fSAndroid Build Coastguard Worker    test       $15, %dl
782*795d594fSAndroid Build Coastguard Worker    jz         L(second_two_words)
783*795d594fSAndroid Build Coastguard Worker    test       $3, %dl
784*795d594fSAndroid Build Coastguard Worker    jz         L(second_word)
785*795d594fSAndroid Build Coastguard Worker    movzwl     -16(%edi), %eax
786*795d594fSAndroid Build Coastguard Worker    movzwl     -16(%esi), %ebx
787*795d594fSAndroid Build Coastguard Worker    subl       %ebx, %eax
788*795d594fSAndroid Build Coastguard Worker    RETURN
789*795d594fSAndroid Build Coastguard Worker
790*795d594fSAndroid Build Coastguard Worker    .p2align 4
791*795d594fSAndroid Build Coastguard WorkerL(second_word):
792*795d594fSAndroid Build Coastguard Worker    movzwl     -14(%edi), %eax
793*795d594fSAndroid Build Coastguard Worker    movzwl     -14(%esi), %ebx
794*795d594fSAndroid Build Coastguard Worker    subl       %ebx, %eax
795*795d594fSAndroid Build Coastguard Worker    RETURN
796*795d594fSAndroid Build Coastguard Worker
797*795d594fSAndroid Build Coastguard Worker    .p2align 4
798*795d594fSAndroid Build Coastguard WorkerL(second_two_words):
799*795d594fSAndroid Build Coastguard Worker    test       $63, %dl
800*795d594fSAndroid Build Coastguard Worker    jz         L(fourth_word)
801*795d594fSAndroid Build Coastguard Worker    movzwl     -12(%edi), %eax
802*795d594fSAndroid Build Coastguard Worker    movzwl     -12(%esi), %ebx
803*795d594fSAndroid Build Coastguard Worker    subl       %ebx, %eax
804*795d594fSAndroid Build Coastguard Worker    RETURN
805*795d594fSAndroid Build Coastguard Worker
806*795d594fSAndroid Build Coastguard Worker    .p2align 4
807*795d594fSAndroid Build Coastguard WorkerL(fourth_word):
808*795d594fSAndroid Build Coastguard Worker    movzwl     -10(%edi), %eax
809*795d594fSAndroid Build Coastguard Worker    movzwl     -10(%esi), %ebx
810*795d594fSAndroid Build Coastguard Worker    subl       %ebx, %eax
811*795d594fSAndroid Build Coastguard Worker    RETURN
812*795d594fSAndroid Build Coastguard Worker
813*795d594fSAndroid Build Coastguard Worker    .p2align 4
814*795d594fSAndroid Build Coastguard WorkerL(next_four_words):
815*795d594fSAndroid Build Coastguard Worker    test       $15, %dh
816*795d594fSAndroid Build Coastguard Worker    jz         L(fourth_two_words)
817*795d594fSAndroid Build Coastguard Worker    test       $3, %dh
818*795d594fSAndroid Build Coastguard Worker    jz         L(sixth_word)
819*795d594fSAndroid Build Coastguard Worker    movzwl     -8(%edi), %eax
820*795d594fSAndroid Build Coastguard Worker    movzwl     -8(%esi), %ebx
821*795d594fSAndroid Build Coastguard Worker    subl       %ebx, %eax
822*795d594fSAndroid Build Coastguard Worker    RETURN
823*795d594fSAndroid Build Coastguard Worker
824*795d594fSAndroid Build Coastguard Worker    .p2align 4
825*795d594fSAndroid Build Coastguard WorkerL(sixth_word):
826*795d594fSAndroid Build Coastguard Worker    movzwl     -6(%edi), %eax
827*795d594fSAndroid Build Coastguard Worker    movzwl     -6(%esi), %ebx
828*795d594fSAndroid Build Coastguard Worker    subl       %ebx, %eax
829*795d594fSAndroid Build Coastguard Worker    RETURN
830*795d594fSAndroid Build Coastguard Worker
831*795d594fSAndroid Build Coastguard Worker    .p2align 4
832*795d594fSAndroid Build Coastguard WorkerL(fourth_two_words):
833*795d594fSAndroid Build Coastguard Worker    test       $63, %dh
834*795d594fSAndroid Build Coastguard Worker    jz         L(eighth_word)
835*795d594fSAndroid Build Coastguard Worker    movzwl     -4(%edi), %eax
836*795d594fSAndroid Build Coastguard Worker    movzwl     -4(%esi), %ebx
837*795d594fSAndroid Build Coastguard Worker    subl       %ebx, %eax
838*795d594fSAndroid Build Coastguard Worker    RETURN
839*795d594fSAndroid Build Coastguard Worker
840*795d594fSAndroid Build Coastguard Worker    .p2align 4
841*795d594fSAndroid Build Coastguard WorkerL(eighth_word):
842*795d594fSAndroid Build Coastguard Worker    movzwl     -2(%edi), %eax
843*795d594fSAndroid Build Coastguard Worker    movzwl     -2(%esi), %ebx
844*795d594fSAndroid Build Coastguard Worker    subl       %ebx, %eax
845*795d594fSAndroid Build Coastguard Worker    RETURN
846*795d594fSAndroid Build Coastguard Worker
847*795d594fSAndroid Build Coastguard Worker    # Unreachable, but needed for static analysis in the check_cfi.py script,
848*795d594fSAndroid Build Coastguard Worker    # since it does just single forward pass, but the code below is only
849*795d594fSAndroid Build Coastguard Worker    # reachable via a backward branch.
850*795d594fSAndroid Build Coastguard Worker    CFI_DEF_CFA (esp, 4)
851*795d594fSAndroid Build Coastguard Worker    PUSH       (%ebx)
852*795d594fSAndroid Build Coastguard Worker
853*795d594fSAndroid Build Coastguard Worker    .p2align 4
854*795d594fSAndroid Build Coastguard WorkerL(more8bytes):
855*795d594fSAndroid Build Coastguard Worker    cmp        $16, %ecx
856*795d594fSAndroid Build Coastguard Worker    jae        L(more16bytes)
857*795d594fSAndroid Build Coastguard Worker    cmp        $8, %ecx
858*795d594fSAndroid Build Coastguard Worker    je         L(8bytes)
859*795d594fSAndroid Build Coastguard Worker    cmp        $10, %ecx
860*795d594fSAndroid Build Coastguard Worker    je         L(10bytes)
861*795d594fSAndroid Build Coastguard Worker    cmp        $12, %ecx
862*795d594fSAndroid Build Coastguard Worker    je         L(12bytes)
863*795d594fSAndroid Build Coastguard Worker    jmp        L(14bytes)
864*795d594fSAndroid Build Coastguard Worker
865*795d594fSAndroid Build Coastguard Worker    .p2align 4
866*795d594fSAndroid Build Coastguard WorkerL(more16bytes):
867*795d594fSAndroid Build Coastguard Worker    cmp        $24, %ecx
868*795d594fSAndroid Build Coastguard Worker    jae        L(more24bytes)
869*795d594fSAndroid Build Coastguard Worker    cmp        $16, %ecx
870*795d594fSAndroid Build Coastguard Worker    je         L(16bytes)
871*795d594fSAndroid Build Coastguard Worker    cmp        $18, %ecx
872*795d594fSAndroid Build Coastguard Worker    je         L(18bytes)
873*795d594fSAndroid Build Coastguard Worker    cmp        $20, %ecx
874*795d594fSAndroid Build Coastguard Worker    je         L(20bytes)
875*795d594fSAndroid Build Coastguard Worker    jmp        L(22bytes)
876*795d594fSAndroid Build Coastguard Worker
877*795d594fSAndroid Build Coastguard Worker    .p2align 4
878*795d594fSAndroid Build Coastguard WorkerL(more24bytes):
879*795d594fSAndroid Build Coastguard Worker    cmp        $32, %ecx
880*795d594fSAndroid Build Coastguard Worker    jae        L(more32bytes)
881*795d594fSAndroid Build Coastguard Worker    cmp        $24, %ecx
882*795d594fSAndroid Build Coastguard Worker    je         L(24bytes)
883*795d594fSAndroid Build Coastguard Worker    cmp        $26, %ecx
884*795d594fSAndroid Build Coastguard Worker    je         L(26bytes)
885*795d594fSAndroid Build Coastguard Worker    cmp        $28, %ecx
886*795d594fSAndroid Build Coastguard Worker    je         L(28bytes)
887*795d594fSAndroid Build Coastguard Worker    jmp        L(30bytes)
888*795d594fSAndroid Build Coastguard Worker
889*795d594fSAndroid Build Coastguard Worker    .p2align 4
890*795d594fSAndroid Build Coastguard WorkerL(more32bytes):
891*795d594fSAndroid Build Coastguard Worker    cmp        $40, %ecx
892*795d594fSAndroid Build Coastguard Worker    jae        L(more40bytes)
893*795d594fSAndroid Build Coastguard Worker    cmp        $32, %ecx
894*795d594fSAndroid Build Coastguard Worker    je         L(32bytes)
895*795d594fSAndroid Build Coastguard Worker    cmp        $34, %ecx
896*795d594fSAndroid Build Coastguard Worker    je         L(34bytes)
897*795d594fSAndroid Build Coastguard Worker    cmp        $36, %ecx
898*795d594fSAndroid Build Coastguard Worker    je         L(36bytes)
899*795d594fSAndroid Build Coastguard Worker    jmp        L(38bytes)
900*795d594fSAndroid Build Coastguard Worker
901*795d594fSAndroid Build Coastguard Worker    .p2align 4
902*795d594fSAndroid Build Coastguard WorkerL(less48bytes):
903*795d594fSAndroid Build Coastguard Worker    cmp        $8, %ecx
904*795d594fSAndroid Build Coastguard Worker    jae        L(more8bytes)
905*795d594fSAndroid Build Coastguard Worker    cmp        $2, %ecx
906*795d594fSAndroid Build Coastguard Worker    je         L(2bytes)
907*795d594fSAndroid Build Coastguard Worker    cmp        $4, %ecx
908*795d594fSAndroid Build Coastguard Worker    je         L(4bytes)
909*795d594fSAndroid Build Coastguard Worker    jmp        L(6bytes)
910*795d594fSAndroid Build Coastguard Worker
911*795d594fSAndroid Build Coastguard Worker    .p2align 4
912*795d594fSAndroid Build Coastguard WorkerL(more40bytes):
913*795d594fSAndroid Build Coastguard Worker    cmp        $40, %ecx
914*795d594fSAndroid Build Coastguard Worker    je         L(40bytes)
915*795d594fSAndroid Build Coastguard Worker    cmp        $42, %ecx
916*795d594fSAndroid Build Coastguard Worker    je         L(42bytes)
917*795d594fSAndroid Build Coastguard Worker    cmp        $44, %ecx
918*795d594fSAndroid Build Coastguard Worker    je         L(44bytes)
919*795d594fSAndroid Build Coastguard Worker    jmp        L(46bytes)
920*795d594fSAndroid Build Coastguard Worker
921*795d594fSAndroid Build Coastguard Worker    .p2align 4
922*795d594fSAndroid Build Coastguard WorkerL(46bytes):
923*795d594fSAndroid Build Coastguard Worker    movzwl     -46(%eax), %ecx
924*795d594fSAndroid Build Coastguard Worker    movzwl     -46(%edx), %ebx
925*795d594fSAndroid Build Coastguard Worker    subl       %ebx, %ecx
926*795d594fSAndroid Build Coastguard Worker    jne        L(memcmp16_exit)
927*795d594fSAndroid Build Coastguard WorkerL(44bytes):
928*795d594fSAndroid Build Coastguard Worker    movzwl     -44(%eax), %ecx
929*795d594fSAndroid Build Coastguard Worker    movzwl     -44(%edx), %ebx
930*795d594fSAndroid Build Coastguard Worker    subl       %ebx, %ecx
931*795d594fSAndroid Build Coastguard Worker    jne        L(memcmp16_exit)
932*795d594fSAndroid Build Coastguard WorkerL(42bytes):
933*795d594fSAndroid Build Coastguard Worker    movzwl     -42(%eax), %ecx
934*795d594fSAndroid Build Coastguard Worker    movzwl     -42(%edx), %ebx
935*795d594fSAndroid Build Coastguard Worker    subl       %ebx, %ecx
936*795d594fSAndroid Build Coastguard Worker    jne        L(memcmp16_exit)
937*795d594fSAndroid Build Coastguard WorkerL(40bytes):
938*795d594fSAndroid Build Coastguard Worker    movzwl     -40(%eax), %ecx
939*795d594fSAndroid Build Coastguard Worker    movzwl     -40(%edx), %ebx
940*795d594fSAndroid Build Coastguard Worker    subl       %ebx, %ecx
941*795d594fSAndroid Build Coastguard Worker    jne        L(memcmp16_exit)
942*795d594fSAndroid Build Coastguard WorkerL(38bytes):
943*795d594fSAndroid Build Coastguard Worker    movzwl     -38(%eax), %ecx
944*795d594fSAndroid Build Coastguard Worker    movzwl     -38(%edx), %ebx
945*795d594fSAndroid Build Coastguard Worker    subl       %ebx, %ecx
946*795d594fSAndroid Build Coastguard Worker    jne        L(memcmp16_exit)
947*795d594fSAndroid Build Coastguard WorkerL(36bytes):
948*795d594fSAndroid Build Coastguard Worker    movzwl     -36(%eax), %ecx
949*795d594fSAndroid Build Coastguard Worker    movzwl     -36(%edx), %ebx
950*795d594fSAndroid Build Coastguard Worker    subl       %ebx, %ecx
951*795d594fSAndroid Build Coastguard Worker    jne        L(memcmp16_exit)
952*795d594fSAndroid Build Coastguard WorkerL(34bytes):
953*795d594fSAndroid Build Coastguard Worker    movzwl     -34(%eax), %ecx
954*795d594fSAndroid Build Coastguard Worker    movzwl     -34(%edx), %ebx
955*795d594fSAndroid Build Coastguard Worker    subl       %ebx, %ecx
956*795d594fSAndroid Build Coastguard Worker    jne        L(memcmp16_exit)
957*795d594fSAndroid Build Coastguard WorkerL(32bytes):
958*795d594fSAndroid Build Coastguard Worker    movzwl     -32(%eax), %ecx
959*795d594fSAndroid Build Coastguard Worker    movzwl     -32(%edx), %ebx
960*795d594fSAndroid Build Coastguard Worker    subl       %ebx, %ecx
961*795d594fSAndroid Build Coastguard Worker    jne        L(memcmp16_exit)
962*795d594fSAndroid Build Coastguard WorkerL(30bytes):
963*795d594fSAndroid Build Coastguard Worker    movzwl     -30(%eax), %ecx
964*795d594fSAndroid Build Coastguard Worker    movzwl     -30(%edx), %ebx
965*795d594fSAndroid Build Coastguard Worker    subl       %ebx, %ecx
966*795d594fSAndroid Build Coastguard Worker    jne        L(memcmp16_exit)
967*795d594fSAndroid Build Coastguard WorkerL(28bytes):
968*795d594fSAndroid Build Coastguard Worker    movzwl     -28(%eax), %ecx
969*795d594fSAndroid Build Coastguard Worker    movzwl     -28(%edx), %ebx
970*795d594fSAndroid Build Coastguard Worker    subl       %ebx, %ecx
971*795d594fSAndroid Build Coastguard Worker    jne        L(memcmp16_exit)
972*795d594fSAndroid Build Coastguard WorkerL(26bytes):
973*795d594fSAndroid Build Coastguard Worker    movzwl     -26(%eax), %ecx
974*795d594fSAndroid Build Coastguard Worker    movzwl     -26(%edx), %ebx
975*795d594fSAndroid Build Coastguard Worker    subl       %ebx, %ecx
976*795d594fSAndroid Build Coastguard Worker    jne        L(memcmp16_exit)
977*795d594fSAndroid Build Coastguard WorkerL(24bytes):
978*795d594fSAndroid Build Coastguard Worker    movzwl     -24(%eax), %ecx
979*795d594fSAndroid Build Coastguard Worker    movzwl     -24(%edx), %ebx
980*795d594fSAndroid Build Coastguard Worker    subl       %ebx, %ecx
981*795d594fSAndroid Build Coastguard Worker    jne        L(memcmp16_exit)
982*795d594fSAndroid Build Coastguard WorkerL(22bytes):
983*795d594fSAndroid Build Coastguard Worker    movzwl     -22(%eax), %ecx
984*795d594fSAndroid Build Coastguard Worker    movzwl     -22(%edx), %ebx
985*795d594fSAndroid Build Coastguard Worker    subl       %ebx, %ecx
986*795d594fSAndroid Build Coastguard Worker    jne        L(memcmp16_exit)
987*795d594fSAndroid Build Coastguard WorkerL(20bytes):
988*795d594fSAndroid Build Coastguard Worker    movzwl     -20(%eax), %ecx
989*795d594fSAndroid Build Coastguard Worker    movzwl     -20(%edx), %ebx
990*795d594fSAndroid Build Coastguard Worker    subl       %ebx, %ecx
991*795d594fSAndroid Build Coastguard Worker    jne        L(memcmp16_exit)
992*795d594fSAndroid Build Coastguard WorkerL(18bytes):
993*795d594fSAndroid Build Coastguard Worker    movzwl     -18(%eax), %ecx
994*795d594fSAndroid Build Coastguard Worker    movzwl     -18(%edx), %ebx
995*795d594fSAndroid Build Coastguard Worker    subl       %ebx, %ecx
996*795d594fSAndroid Build Coastguard Worker    jne        L(memcmp16_exit)
997*795d594fSAndroid Build Coastguard WorkerL(16bytes):
998*795d594fSAndroid Build Coastguard Worker    movzwl     -16(%eax), %ecx
999*795d594fSAndroid Build Coastguard Worker    movzwl     -16(%edx), %ebx
1000*795d594fSAndroid Build Coastguard Worker    subl       %ebx, %ecx
1001*795d594fSAndroid Build Coastguard Worker    jne        L(memcmp16_exit)
1002*795d594fSAndroid Build Coastguard WorkerL(14bytes):
1003*795d594fSAndroid Build Coastguard Worker    movzwl     -14(%eax), %ecx
1004*795d594fSAndroid Build Coastguard Worker    movzwl     -14(%edx), %ebx
1005*795d594fSAndroid Build Coastguard Worker    subl       %ebx, %ecx
1006*795d594fSAndroid Build Coastguard Worker    jne        L(memcmp16_exit)
1007*795d594fSAndroid Build Coastguard WorkerL(12bytes):
1008*795d594fSAndroid Build Coastguard Worker    movzwl     -12(%eax), %ecx
1009*795d594fSAndroid Build Coastguard Worker    movzwl     -12(%edx), %ebx
1010*795d594fSAndroid Build Coastguard Worker    subl       %ebx, %ecx
1011*795d594fSAndroid Build Coastguard Worker    jne        L(memcmp16_exit)
1012*795d594fSAndroid Build Coastguard WorkerL(10bytes):
1013*795d594fSAndroid Build Coastguard Worker    movzwl     -10(%eax), %ecx
1014*795d594fSAndroid Build Coastguard Worker    movzwl     -10(%edx), %ebx
1015*795d594fSAndroid Build Coastguard Worker    subl       %ebx, %ecx
1016*795d594fSAndroid Build Coastguard Worker    jne        L(memcmp16_exit)
1017*795d594fSAndroid Build Coastguard WorkerL(8bytes):
1018*795d594fSAndroid Build Coastguard Worker    movzwl     -8(%eax), %ecx
1019*795d594fSAndroid Build Coastguard Worker    movzwl     -8(%edx), %ebx
1020*795d594fSAndroid Build Coastguard Worker    subl       %ebx, %ecx
1021*795d594fSAndroid Build Coastguard Worker    jne        L(memcmp16_exit)
1022*795d594fSAndroid Build Coastguard WorkerL(6bytes):
1023*795d594fSAndroid Build Coastguard Worker    movzwl     -6(%eax), %ecx
1024*795d594fSAndroid Build Coastguard Worker    movzwl     -6(%edx), %ebx
1025*795d594fSAndroid Build Coastguard Worker    subl       %ebx, %ecx
1026*795d594fSAndroid Build Coastguard Worker    jne        L(memcmp16_exit)
1027*795d594fSAndroid Build Coastguard WorkerL(4bytes):
1028*795d594fSAndroid Build Coastguard Worker    movzwl     -4(%eax), %ecx
1029*795d594fSAndroid Build Coastguard Worker    movzwl     -4(%edx), %ebx
1030*795d594fSAndroid Build Coastguard Worker    subl       %ebx, %ecx
1031*795d594fSAndroid Build Coastguard Worker    jne        L(memcmp16_exit)
1032*795d594fSAndroid Build Coastguard WorkerL(2bytes):
1033*795d594fSAndroid Build Coastguard Worker    movzwl     -2(%eax), %eax
1034*795d594fSAndroid Build Coastguard Worker    movzwl     -2(%edx), %ebx
1035*795d594fSAndroid Build Coastguard Worker    subl       %ebx, %eax
1036*795d594fSAndroid Build Coastguard Worker    POP        (%ebx)
1037*795d594fSAndroid Build Coastguard Worker    ret
1038*795d594fSAndroid Build Coastguard Worker    CFI_PUSH   (%ebx)
1039*795d594fSAndroid Build Coastguard Worker
1040*795d594fSAndroid Build Coastguard Worker    .p2align 4
1041*795d594fSAndroid Build Coastguard WorkerL(memcmp16_exit):
1042*795d594fSAndroid Build Coastguard Worker    POP        (%ebx)
1043*795d594fSAndroid Build Coastguard Worker    mov        %ecx, %eax
1044*795d594fSAndroid Build Coastguard Worker    ret
1045*795d594fSAndroid Build Coastguard WorkerEND_FUNCTION MEMCMP
1046