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