Home | History | Annotate | Download | only in string
      1 /*
      2 Copyright (c) 2014, Intel Corporation
      3 All rights reserved.
      4 
      5 Redistribution and use in source and binary forms, with or without
      6 modification, are permitted provided that the following conditions are met:
      7 
      8     * Redistributions of source code must retain the above copyright notice,
      9     * this list of conditions and the following disclaimer.
     10 
     11     * Redistributions in binary form must reproduce the above copyright notice,
     12     * this list of conditions and the following disclaimer in the documentation
     13     * and/or other materials provided with the distribution.
     14 
     15     * Neither the name of Intel Corporation nor the names of its contributors
     16     * may be used to endorse or promote products derived from this software
     17     * without specific prior written permission.
     18 
     19 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
     20 ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
     21 WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
     22 DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
     23 ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
     24 (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
     25 LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
     26 ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     27 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
     28 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     29 */
     30 
     31 #include "cache.h"
     32 
     33 #ifndef MEMCMP
     34 # define MEMCMP		memcmp
     35 #endif
     36 
     37 #ifndef L
     38 # define L(label)	.L##label
     39 #endif
     40 
     41 #ifndef ALIGN
     42 # define ALIGN(n)	.p2align n
     43 #endif
     44 
     45 #ifndef cfi_startproc
     46 # define cfi_startproc			.cfi_startproc
     47 #endif
     48 
     49 #ifndef cfi_endproc
     50 # define cfi_endproc			.cfi_endproc
     51 #endif
     52 
     53 #ifndef ENTRY
     54 # define ENTRY(name)			\
     55 	.type name,  @function; 	\
     56 	.globl name;			\
     57 	.p2align 4;			\
     58 name:					\
     59 	cfi_startproc
     60 #endif
     61 
     62 #ifndef END
     63 # define END(name)			\
     64 	cfi_endproc;			\
     65 	.size name, .-name
     66 #endif
     67 
     68 #ifndef ALIGN
     69 # define ALIGN(n)	.p2align n
     70 #endif
     71 
     72 #define JMPTBL(I, B)	(I - B)
     73 
     74 #define BRANCH_TO_JMPTBL_ENTRY(TABLE, INDEX, SCALE)		\
     75   lea		TABLE(%rip), %r11;				\
     76   movslq	(%r11, INDEX, SCALE), %rcx;			\
     77   add		%r11, %rcx;					\
     78   jmp		*%rcx;						\
     79   ud2
     80 
     81 	.section .text.sse4.1,"ax",@progbits
     82 ENTRY (MEMCMP)
     83 #ifdef USE_AS_WMEMCMP
     84 	shl	$2, %rdx
     85 #endif
     86 	pxor	%xmm0, %xmm0
     87 	cmp	$79, %rdx
     88 	ja	L(79bytesormore)
     89 #ifndef USE_AS_WMEMCMP
     90 	cmp	$1, %rdx
     91 	je	L(firstbyte)
     92 #endif
     93 	add	%rdx, %rsi
     94 	add	%rdx, %rdi
     95 	BRANCH_TO_JMPTBL_ENTRY(L(table_64bytes), %rdx, 4)
     96 
     97 #ifndef USE_AS_WMEMCMP
     98 	ALIGN (4)
     99 L(firstbyte):
    100 	movzbl	(%rdi), %eax
    101 	movzbl	(%rsi), %ecx
    102 	sub	%ecx, %eax
    103 	ret
    104 #endif
    105 
    106 	ALIGN (4)
    107 L(79bytesormore):
    108 	movdqu	(%rsi), %xmm1
    109 	movdqu	(%rdi), %xmm2
    110 	pxor	%xmm1, %xmm2
    111 	ptest	%xmm2, %xmm0
    112 	jnc	L(16bytesin256)
    113 	mov	%rsi, %rcx
    114 	and	$-16, %rsi
    115 	add	$16, %rsi
    116 	sub	%rsi, %rcx
    117 
    118 	sub	%rcx, %rdi
    119 	add	%rcx, %rdx
    120 	test	$0xf, %rdi
    121 	jz	L(2aligned)
    122 
    123 	cmp	$128, %rdx
    124 	ja	L(128bytesormore)
    125 L(less128bytes):
    126 	sub	$64, %rdx
    127 
    128 	movdqu	(%rdi), %xmm2
    129 	pxor	(%rsi), %xmm2
    130 	ptest	%xmm2, %xmm0
    131 	jnc	L(16bytesin256)
    132 
    133 	movdqu	16(%rdi), %xmm2
    134 	pxor	16(%rsi), %xmm2
    135 	ptest	%xmm2, %xmm0
    136 	jnc	L(32bytesin256)
    137 
    138 	movdqu	32(%rdi), %xmm2
    139 	pxor	32(%rsi), %xmm2
    140 	ptest	%xmm2, %xmm0
    141 	jnc	L(48bytesin256)
    142 
    143 	movdqu	48(%rdi), %xmm2
    144 	pxor	48(%rsi), %xmm2
    145 	ptest	%xmm2, %xmm0
    146 	jnc	L(64bytesin256)
    147 	cmp	$32, %rdx
    148 	jb	L(less32bytesin64)
    149 
    150 	movdqu	64(%rdi), %xmm2
    151 	pxor	64(%rsi), %xmm2
    152 	ptest	%xmm2, %xmm0
    153 	jnc	L(80bytesin256)
    154 
    155 	movdqu	80(%rdi), %xmm2
    156 	pxor	80(%rsi), %xmm2
    157 	ptest	%xmm2, %xmm0
    158 	jnc	L(96bytesin256)
    159 	sub	$32, %rdx
    160 	add	$32, %rdi
    161 	add	$32, %rsi
    162 L(less32bytesin64):
    163 	add	$64, %rdi
    164 	add	$64, %rsi
    165 	add	%rdx, %rsi
    166 	add	%rdx, %rdi
    167 	BRANCH_TO_JMPTBL_ENTRY(L(table_64bytes), %rdx, 4)
    168 
    169 L(128bytesormore):
    170 	cmp	$512, %rdx
    171 	ja	L(512bytesormore)
    172 	cmp	$256, %rdx
    173 	ja	L(less512bytes)
    174 L(less256bytes):
    175 	sub	$128, %rdx
    176 
    177 	movdqu	(%rdi), %xmm2
    178 	pxor	(%rsi), %xmm2
    179 	ptest	%xmm2, %xmm0
    180 	jnc	L(16bytesin256)
    181 
    182 	movdqu	16(%rdi), %xmm2
    183 	pxor	16(%rsi), %xmm2
    184 	ptest	%xmm2, %xmm0
    185 	jnc	L(32bytesin256)
    186 
    187 	movdqu	32(%rdi), %xmm2
    188 	pxor	32(%rsi), %xmm2
    189 	ptest	%xmm2, %xmm0
    190 	jnc	L(48bytesin256)
    191 
    192 	movdqu	48(%rdi), %xmm2
    193 	pxor	48(%rsi), %xmm2
    194 	ptest	%xmm2, %xmm0
    195 	jnc	L(64bytesin256)
    196 
    197 	movdqu	64(%rdi), %xmm2
    198 	pxor	64(%rsi), %xmm2
    199 	ptest	%xmm2, %xmm0
    200 	jnc	L(80bytesin256)
    201 
    202 	movdqu	80(%rdi), %xmm2
    203 	pxor	80(%rsi), %xmm2
    204 	ptest	%xmm2, %xmm0
    205 	jnc	L(96bytesin256)
    206 
    207 	movdqu	96(%rdi), %xmm2
    208 	pxor	96(%rsi), %xmm2
    209 	ptest	%xmm2, %xmm0
    210 	jnc	L(112bytesin256)
    211 
    212 	movdqu	112(%rdi), %xmm2
    213 	pxor	112(%rsi), %xmm2
    214 	ptest	%xmm2, %xmm0
    215 	jnc	L(128bytesin256)
    216 
    217 	add	$128, %rsi
    218 	add	$128, %rdi
    219 
    220 	cmp	$64, %rdx
    221 	jae	L(less128bytes)
    222 
    223 	cmp	$32, %rdx
    224 	jb	L(less32bytesin128)
    225 
    226 	movdqu	(%rdi), %xmm2
    227 	pxor	(%rsi), %xmm2
    228 	ptest	%xmm2, %xmm0
    229 	jnc	L(16bytesin256)
    230 
    231 	movdqu	16(%rdi), %xmm2
    232 	pxor	16(%rsi), %xmm2
    233 	ptest	%xmm2, %xmm0
    234 	jnc	L(32bytesin256)
    235 	sub	$32, %rdx
    236 	add	$32, %rdi
    237 	add	$32, %rsi
    238 L(less32bytesin128):
    239 	add	%rdx, %rsi
    240 	add	%rdx, %rdi
    241 	BRANCH_TO_JMPTBL_ENTRY(L(table_64bytes), %rdx, 4)
    242 
    243 L(less512bytes):
    244 	sub	$256, %rdx
    245 	movdqu	(%rdi), %xmm2
    246 	pxor	(%rsi), %xmm2
    247 	ptest	%xmm2, %xmm0
    248 	jnc	L(16bytesin256)
    249 
    250 	movdqu	16(%rdi), %xmm2
    251 	pxor	16(%rsi), %xmm2
    252 	ptest	%xmm2, %xmm0
    253 	jnc	L(32bytesin256)
    254 
    255 	movdqu	32(%rdi), %xmm2
    256 	pxor	32(%rsi), %xmm2
    257 	ptest	%xmm2, %xmm0
    258 	jnc	L(48bytesin256)
    259 
    260 	movdqu	48(%rdi), %xmm2
    261 	pxor	48(%rsi), %xmm2
    262 	ptest	%xmm2, %xmm0
    263 	jnc	L(64bytesin256)
    264 
    265 	movdqu	64(%rdi), %xmm2
    266 	pxor	64(%rsi), %xmm2
    267 	ptest	%xmm2, %xmm0
    268 	jnc	L(80bytesin256)
    269 
    270 	movdqu	80(%rdi), %xmm2
    271 	pxor	80(%rsi), %xmm2
    272 	ptest	%xmm2, %xmm0
    273 	jnc	L(96bytesin256)
    274 
    275 	movdqu	96(%rdi), %xmm2
    276 	pxor	96(%rsi), %xmm2
    277 	ptest	%xmm2, %xmm0
    278 	jnc	L(112bytesin256)
    279 
    280 	movdqu	112(%rdi), %xmm2
    281 	pxor	112(%rsi), %xmm2
    282 	ptest	%xmm2, %xmm0
    283 	jnc	L(128bytesin256)
    284 
    285 	movdqu	128(%rdi), %xmm2
    286 	pxor	128(%rsi), %xmm2
    287 	ptest	%xmm2, %xmm0
    288 	jnc	L(144bytesin256)
    289 
    290 	movdqu	144(%rdi), %xmm2
    291 	pxor	144(%rsi), %xmm2
    292 	ptest	%xmm2, %xmm0
    293 	jnc	L(160bytesin256)
    294 
    295 	movdqu	160(%rdi), %xmm2
    296 	pxor	160(%rsi), %xmm2
    297 	ptest	%xmm2, %xmm0
    298 	jnc	L(176bytesin256)
    299 
    300 	movdqu	176(%rdi), %xmm2
    301 	pxor	176(%rsi), %xmm2
    302 	ptest	%xmm2, %xmm0
    303 	jnc	L(192bytesin256)
    304 
    305 	movdqu	192(%rdi), %xmm2
    306 	pxor	192(%rsi), %xmm2
    307 	ptest	%xmm2, %xmm0
    308 	jnc	L(208bytesin256)
    309 
    310 	movdqu	208(%rdi), %xmm2
    311 	pxor	208(%rsi), %xmm2
    312 	ptest	%xmm2, %xmm0
    313 	jnc	L(224bytesin256)
    314 
    315 	movdqu	224(%rdi), %xmm2
    316 	pxor	224(%rsi), %xmm2
    317 	ptest	%xmm2, %xmm0
    318 	jnc	L(240bytesin256)
    319 
    320 	movdqu	240(%rdi), %xmm2
    321 	pxor	240(%rsi), %xmm2
    322 	ptest	%xmm2, %xmm0
    323 	jnc	L(256bytesin256)
    324 
    325 	add	$256, %rsi
    326 	add	$256, %rdi
    327 
    328 	cmp	$128, %rdx
    329 	jae	L(less256bytes)
    330 
    331 	cmp	$64, %rdx
    332 	jae	L(less128bytes)
    333 
    334 	cmp	$32, %rdx
    335 	jb	L(less32bytesin256)
    336 
    337 	movdqu	(%rdi), %xmm2
    338 	pxor	(%rsi), %xmm2
    339 	ptest	%xmm2, %xmm0
    340 	jnc	L(16bytesin256)
    341 
    342 	movdqu	16(%rdi), %xmm2
    343 	pxor	16(%rsi), %xmm2
    344 	ptest	%xmm2, %xmm0
    345 	jnc	L(32bytesin256)
    346 	sub	$32, %rdx
    347 	add	$32, %rdi
    348 	add	$32, %rsi
    349 L(less32bytesin256):
    350 	add	%rdx, %rsi
    351 	add	%rdx, %rdi
    352 	BRANCH_TO_JMPTBL_ENTRY(L(table_64bytes), %rdx, 4)
    353 
    354 	ALIGN (4)
    355 L(512bytesormore):
    356 #ifdef DATA_CACHE_SIZE_HALF
    357 	mov	$DATA_CACHE_SIZE_HALF, %r8
    358 #else
    359 	mov	__x86_64_data_cache_size_half(%rip), %r8
    360 #endif
    361 	mov	%r8, %r9
    362 	shr	$1, %r8
    363 	add	%r9, %r8
    364 	cmp	%r8, %rdx
    365 	ja	L(L2_L3_cache_unaglined)
    366 	sub	$64, %rdx
    367 	ALIGN (4)
    368 L(64bytesormore_loop):
    369 	movdqu	(%rdi), %xmm2
    370 	pxor	(%rsi), %xmm2
    371 	movdqa	%xmm2, %xmm1
    372 
    373 	movdqu	16(%rdi), %xmm3
    374 	pxor	16(%rsi), %xmm3
    375 	por	%xmm3, %xmm1
    376 
    377 	movdqu	32(%rdi), %xmm4
    378 	pxor	32(%rsi), %xmm4
    379 	por	%xmm4, %xmm1
    380 
    381 	movdqu	48(%rdi), %xmm5
    382 	pxor	48(%rsi), %xmm5
    383 	por	%xmm5, %xmm1
    384 
    385 	ptest	%xmm1, %xmm0
    386 	jnc	L(64bytesormore_loop_end)
    387 	add	$64, %rsi
    388 	add	$64, %rdi
    389 	sub	$64, %rdx
    390 	jae	L(64bytesormore_loop)
    391 
    392 	add	$64, %rdx
    393 	add	%rdx, %rsi
    394 	add	%rdx, %rdi
    395 	BRANCH_TO_JMPTBL_ENTRY(L(table_64bytes), %rdx, 4)
    396 
    397 L(L2_L3_cache_unaglined):
    398 	sub	$64, %rdx
    399 	ALIGN (4)
    400 L(L2_L3_unaligned_128bytes_loop):
    401 	prefetchnta 0x1c0(%rdi)
    402 	prefetchnta 0x1c0(%rsi)
    403 	movdqu	(%rdi), %xmm2
    404 	pxor	(%rsi), %xmm2
    405 	movdqa	%xmm2, %xmm1
    406 
    407 	movdqu	16(%rdi), %xmm3
    408 	pxor	16(%rsi), %xmm3
    409 	por	%xmm3, %xmm1
    410 
    411 	movdqu	32(%rdi), %xmm4
    412 	pxor	32(%rsi), %xmm4
    413 	por	%xmm4, %xmm1
    414 
    415 	movdqu	48(%rdi), %xmm5
    416 	pxor	48(%rsi), %xmm5
    417 	por	%xmm5, %xmm1
    418 
    419 	ptest	%xmm1, %xmm0
    420 	jnc	L(64bytesormore_loop_end)
    421 	add	$64, %rsi
    422 	add	$64, %rdi
    423 	sub	$64, %rdx
    424 	jae	L(L2_L3_unaligned_128bytes_loop)
    425 
    426 	add	$64, %rdx
    427 	add	%rdx, %rsi
    428 	add	%rdx, %rdi
    429 	BRANCH_TO_JMPTBL_ENTRY(L(table_64bytes), %rdx, 4)
    430 
    431 /*
    432  * This case is for machines which are sensitive for unaligned instructions.
    433  */
    434 	ALIGN (4)
    435 L(2aligned):
    436 	cmp	$128, %rdx
    437 	ja	L(128bytesormorein2aligned)
    438 L(less128bytesin2aligned):
    439 	sub	$64, %rdx
    440 
    441 	movdqa	(%rdi), %xmm2
    442 	pxor	(%rsi), %xmm2
    443 	ptest	%xmm2, %xmm0
    444 	jnc	L(16bytesin256)
    445 
    446 	movdqa	16(%rdi), %xmm2
    447 	pxor	16(%rsi), %xmm2
    448 	ptest	%xmm2, %xmm0
    449 	jnc	L(32bytesin256)
    450 
    451 	movdqa	32(%rdi), %xmm2
    452 	pxor	32(%rsi), %xmm2
    453 	ptest	%xmm2, %xmm0
    454 	jnc	L(48bytesin256)
    455 
    456 	movdqa	48(%rdi), %xmm2
    457 	pxor	48(%rsi), %xmm2
    458 	ptest	%xmm2, %xmm0
    459 	jnc	L(64bytesin256)
    460 	cmp	$32, %rdx
    461 	jb	L(less32bytesin64in2alinged)
    462 
    463 	movdqa	64(%rdi), %xmm2
    464 	pxor	64(%rsi), %xmm2
    465 	ptest	%xmm2, %xmm0
    466 	jnc	L(80bytesin256)
    467 
    468 	movdqa	80(%rdi), %xmm2
    469 	pxor	80(%rsi), %xmm2
    470 	ptest	%xmm2, %xmm0
    471 	jnc	L(96bytesin256)
    472 	sub	$32, %rdx
    473 	add	$32, %rdi
    474 	add	$32, %rsi
    475 L(less32bytesin64in2alinged):
    476 	add	$64, %rdi
    477 	add	$64, %rsi
    478 	add	%rdx, %rsi
    479 	add	%rdx, %rdi
    480 	BRANCH_TO_JMPTBL_ENTRY(L(table_64bytes), %rdx, 4)
    481 
    482 	ALIGN (4)
    483 L(128bytesormorein2aligned):
    484 	cmp	$512, %rdx
    485 	ja	L(512bytesormorein2aligned)
    486 	cmp	$256, %rdx
    487 	ja	L(256bytesormorein2aligned)
    488 L(less256bytesin2alinged):
    489 	sub	$128, %rdx
    490 
    491 	movdqa	(%rdi), %xmm2
    492 	pxor	(%rsi), %xmm2
    493 	ptest	%xmm2, %xmm0
    494 	jnc	L(16bytesin256)
    495 
    496 	movdqa	16(%rdi), %xmm2
    497 	pxor	16(%rsi), %xmm2
    498 	ptest	%xmm2, %xmm0
    499 	jnc	L(32bytesin256)
    500 
    501 	movdqa	32(%rdi), %xmm2
    502 	pxor	32(%rsi), %xmm2
    503 	ptest	%xmm2, %xmm0
    504 	jnc	L(48bytesin256)
    505 
    506 	movdqa	48(%rdi), %xmm2
    507 	pxor	48(%rsi), %xmm2
    508 	ptest	%xmm2, %xmm0
    509 	jnc	L(64bytesin256)
    510 
    511 	movdqa	64(%rdi), %xmm2
    512 	pxor	64(%rsi), %xmm2
    513 	ptest	%xmm2, %xmm0
    514 	jnc	L(80bytesin256)
    515 
    516 	movdqa	80(%rdi), %xmm2
    517 	pxor	80(%rsi), %xmm2
    518 	ptest	%xmm2, %xmm0
    519 	jnc	L(96bytesin256)
    520 
    521 	movdqa	96(%rdi), %xmm2
    522 	pxor	96(%rsi), %xmm2
    523 	ptest	%xmm2, %xmm0
    524 	jnc	L(112bytesin256)
    525 
    526 	movdqa	112(%rdi), %xmm2
    527 	pxor	112(%rsi), %xmm2
    528 	ptest	%xmm2, %xmm0
    529 	jnc	L(128bytesin256)
    530 
    531 	add	$128, %rsi
    532 	add	$128, %rdi
    533 
    534 	cmp	$64, %rdx
    535 	jae	L(less128bytesin2aligned)
    536 
    537 	cmp	$32, %rdx
    538 	jb	L(less32bytesin128in2aligned)
    539 
    540 	movdqu	(%rdi), %xmm2
    541 	pxor	(%rsi), %xmm2
    542 	ptest	%xmm2, %xmm0
    543 	jnc	L(16bytesin256)
    544 
    545 	movdqu	16(%rdi), %xmm2
    546 	pxor	16(%rsi), %xmm2
    547 	ptest	%xmm2, %xmm0
    548 	jnc	L(32bytesin256)
    549 	sub	$32, %rdx
    550 	add	$32, %rdi
    551 	add	$32, %rsi
    552 L(less32bytesin128in2aligned):
    553 	add	%rdx, %rsi
    554 	add	%rdx, %rdi
    555 	BRANCH_TO_JMPTBL_ENTRY(L(table_64bytes), %rdx, 4)
    556 
    557 	ALIGN (4)
    558 L(256bytesormorein2aligned):
    559 
    560 	sub	$256, %rdx
    561 	movdqa	(%rdi), %xmm2
    562 	pxor	(%rsi), %xmm2
    563 	ptest	%xmm2, %xmm0
    564 	jnc	L(16bytesin256)
    565 
    566 	movdqa	16(%rdi), %xmm2
    567 	pxor	16(%rsi), %xmm2
    568 	ptest	%xmm2, %xmm0
    569 	jnc	L(32bytesin256)
    570 
    571 	movdqa	32(%rdi), %xmm2
    572 	pxor	32(%rsi), %xmm2
    573 	ptest	%xmm2, %xmm0
    574 	jnc	L(48bytesin256)
    575 
    576 	movdqa	48(%rdi), %xmm2
    577 	pxor	48(%rsi), %xmm2
    578 	ptest	%xmm2, %xmm0
    579 	jnc	L(64bytesin256)
    580 
    581 	movdqa	64(%rdi), %xmm2
    582 	pxor	64(%rsi), %xmm2
    583 	ptest	%xmm2, %xmm0
    584 	jnc	L(80bytesin256)
    585 
    586 	movdqa	80(%rdi), %xmm2
    587 	pxor	80(%rsi), %xmm2
    588 	ptest	%xmm2, %xmm0
    589 	jnc	L(96bytesin256)
    590 
    591 	movdqa	96(%rdi), %xmm2
    592 	pxor	96(%rsi), %xmm2
    593 	ptest	%xmm2, %xmm0
    594 	jnc	L(112bytesin256)
    595 
    596 	movdqa	112(%rdi), %xmm2
    597 	pxor	112(%rsi), %xmm2
    598 	ptest	%xmm2, %xmm0
    599 	jnc	L(128bytesin256)
    600 
    601 	movdqa	128(%rdi), %xmm2
    602 	pxor	128(%rsi), %xmm2
    603 	ptest	%xmm2, %xmm0
    604 	jnc	L(144bytesin256)
    605 
    606 	movdqa	144(%rdi), %xmm2
    607 	pxor	144(%rsi), %xmm2
    608 	ptest	%xmm2, %xmm0
    609 	jnc	L(160bytesin256)
    610 
    611 	movdqa	160(%rdi), %xmm2
    612 	pxor	160(%rsi), %xmm2
    613 	ptest	%xmm2, %xmm0
    614 	jnc	L(176bytesin256)
    615 
    616 	movdqa	176(%rdi), %xmm2
    617 	pxor	176(%rsi), %xmm2
    618 	ptest	%xmm2, %xmm0
    619 	jnc	L(192bytesin256)
    620 
    621 	movdqa	192(%rdi), %xmm2
    622 	pxor	192(%rsi), %xmm2
    623 	ptest	%xmm2, %xmm0
    624 	jnc	L(208bytesin256)
    625 
    626 	movdqa	208(%rdi), %xmm2
    627 	pxor	208(%rsi), %xmm2
    628 	ptest	%xmm2, %xmm0
    629 	jnc	L(224bytesin256)
    630 
    631 	movdqa	224(%rdi), %xmm2
    632 	pxor	224(%rsi), %xmm2
    633 	ptest	%xmm2, %xmm0
    634 	jnc	L(240bytesin256)
    635 
    636 	movdqa	240(%rdi), %xmm2
    637 	pxor	240(%rsi), %xmm2
    638 	ptest	%xmm2, %xmm0
    639 	jnc	L(256bytesin256)
    640 
    641 	add	$256, %rsi
    642 	add	$256, %rdi
    643 
    644 	cmp	$128, %rdx
    645 	jae	L(less256bytesin2alinged)
    646 
    647 	cmp	$64, %rdx
    648 	jae	L(less128bytesin2aligned)
    649 
    650 	cmp	$32, %rdx
    651 	jb	L(less32bytesin256in2alinged)
    652 
    653 	movdqa	(%rdi), %xmm2
    654 	pxor	(%rsi), %xmm2
    655 	ptest	%xmm2, %xmm0
    656 	jnc	L(16bytesin256)
    657 
    658 	movdqa	16(%rdi), %xmm2
    659 	pxor	16(%rsi), %xmm2
    660 	ptest	%xmm2, %xmm0
    661 	jnc	L(32bytesin256)
    662 	sub	$32, %rdx
    663 	add	$32, %rdi
    664 	add	$32, %rsi
    665 L(less32bytesin256in2alinged):
    666 	add	%rdx, %rsi
    667 	add	%rdx, %rdi
    668 	BRANCH_TO_JMPTBL_ENTRY(L(table_64bytes), %rdx, 4)
    669 
    670 	ALIGN (4)
    671 L(512bytesormorein2aligned):
    672 #ifdef DATA_CACHE_SIZE_HALF
    673 	mov	$DATA_CACHE_SIZE_HALF, %r8
    674 #else
    675 	mov	__x86_64_data_cache_size_half(%rip), %r8
    676 #endif
    677 	mov	%r8, %r9
    678 	shr	$1, %r8
    679 	add	%r9, %r8
    680 	cmp	%r8, %rdx
    681 	ja	L(L2_L3_cache_aglined)
    682 
    683 	sub	$64, %rdx
    684 	ALIGN (4)
    685 L(64bytesormore_loopin2aligned):
    686 	movdqa	(%rdi), %xmm2
    687 	pxor	(%rsi), %xmm2
    688 	movdqa	%xmm2, %xmm1
    689 
    690 	movdqa	16(%rdi), %xmm3
    691 	pxor	16(%rsi), %xmm3
    692 	por	%xmm3, %xmm1
    693 
    694 	movdqa	32(%rdi), %xmm4
    695 	pxor	32(%rsi), %xmm4
    696 	por	%xmm4, %xmm1
    697 
    698 	movdqa	48(%rdi), %xmm5
    699 	pxor	48(%rsi), %xmm5
    700 	por	%xmm5, %xmm1
    701 
    702 	ptest	%xmm1, %xmm0
    703 	jnc	L(64bytesormore_loop_end)
    704 	add	$64, %rsi
    705 	add	$64, %rdi
    706 	sub	$64, %rdx
    707 	jae	L(64bytesormore_loopin2aligned)
    708 
    709 	add	$64, %rdx
    710 	add	%rdx, %rsi
    711 	add	%rdx, %rdi
    712 	BRANCH_TO_JMPTBL_ENTRY(L(table_64bytes), %rdx, 4)
    713 L(L2_L3_cache_aglined):
    714 	sub	$64, %rdx
    715 	ALIGN (4)
    716 L(L2_L3_aligned_128bytes_loop):
    717 	prefetchnta 0x1c0(%rdi)
    718 	prefetchnta 0x1c0(%rsi)
    719 	movdqa	(%rdi), %xmm2
    720 	pxor	(%rsi), %xmm2
    721 	movdqa	%xmm2, %xmm1
    722 
    723 	movdqa	16(%rdi), %xmm3
    724 	pxor	16(%rsi), %xmm3
    725 	por	%xmm3, %xmm1
    726 
    727 	movdqa	32(%rdi), %xmm4
    728 	pxor	32(%rsi), %xmm4
    729 	por	%xmm4, %xmm1
    730 
    731 	movdqa	48(%rdi), %xmm5
    732 	pxor	48(%rsi), %xmm5
    733 	por	%xmm5, %xmm1
    734 
    735 	ptest	%xmm1, %xmm0
    736 	jnc	L(64bytesormore_loop_end)
    737 	add	$64, %rsi
    738 	add	$64, %rdi
    739 	sub	$64, %rdx
    740 	jae	L(L2_L3_aligned_128bytes_loop)
    741 
    742 	add	$64, %rdx
    743 	add	%rdx, %rsi
    744 	add	%rdx, %rdi
    745 	BRANCH_TO_JMPTBL_ENTRY(L(table_64bytes), %rdx, 4)
    746 
    747 
    748 	ALIGN (4)
    749 L(64bytesormore_loop_end):
    750 	add	$16, %rdi
    751 	add	$16, %rsi
    752 	ptest	%xmm2, %xmm0
    753 	jnc	L(16bytes)
    754 
    755 	add	$16, %rdi
    756 	add	$16, %rsi
    757 	ptest	%xmm3, %xmm0
    758 	jnc	L(16bytes)
    759 
    760 	add	$16, %rdi
    761 	add	$16, %rsi
    762 	ptest	%xmm4, %xmm0
    763 	jnc	L(16bytes)
    764 
    765 	add	$16, %rdi
    766 	add	$16, %rsi
    767 	jmp	L(16bytes)
    768 
    769 L(256bytesin256):
    770 	add	$256, %rdi
    771 	add	$256, %rsi
    772 	jmp	L(16bytes)
    773 L(240bytesin256):
    774 	add	$240, %rdi
    775 	add	$240, %rsi
    776 	jmp	L(16bytes)
    777 L(224bytesin256):
    778 	add	$224, %rdi
    779 	add	$224, %rsi
    780 	jmp	L(16bytes)
    781 L(208bytesin256):
    782 	add	$208, %rdi
    783 	add	$208, %rsi
    784 	jmp	L(16bytes)
    785 L(192bytesin256):
    786 	add	$192, %rdi
    787 	add	$192, %rsi
    788 	jmp	L(16bytes)
    789 L(176bytesin256):
    790 	add	$176, %rdi
    791 	add	$176, %rsi
    792 	jmp	L(16bytes)
    793 L(160bytesin256):
    794 	add	$160, %rdi
    795 	add	$160, %rsi
    796 	jmp	L(16bytes)
    797 L(144bytesin256):
    798 	add	$144, %rdi
    799 	add	$144, %rsi
    800 	jmp	L(16bytes)
    801 L(128bytesin256):
    802 	add	$128, %rdi
    803 	add	$128, %rsi
    804 	jmp	L(16bytes)
    805 L(112bytesin256):
    806 	add	$112, %rdi
    807 	add	$112, %rsi
    808 	jmp	L(16bytes)
    809 L(96bytesin256):
    810 	add	$96, %rdi
    811 	add	$96, %rsi
    812 	jmp	L(16bytes)
    813 L(80bytesin256):
    814 	add	$80, %rdi
    815 	add	$80, %rsi
    816 	jmp	L(16bytes)
    817 L(64bytesin256):
    818 	add	$64, %rdi
    819 	add	$64, %rsi
    820 	jmp	L(16bytes)
    821 L(48bytesin256):
    822 	add	$16, %rdi
    823 	add	$16, %rsi
    824 L(32bytesin256):
    825 	add	$16, %rdi
    826 	add	$16, %rsi
    827 L(16bytesin256):
    828 	add	$16, %rdi
    829 	add	$16, %rsi
    830 L(16bytes):
    831 	mov	-16(%rdi), %rax
    832 	mov	-16(%rsi), %rcx
    833 	cmp	%rax, %rcx
    834 	jne	L(diffin8bytes)
    835 L(8bytes):
    836 	mov	-8(%rdi), %rax
    837 	mov	-8(%rsi), %rcx
    838 	cmp	%rax, %rcx
    839 	jne	L(diffin8bytes)
    840 	xor	%eax, %eax
    841 	ret
    842 
    843 	ALIGN (4)
    844 L(12bytes):
    845 	mov	-12(%rdi), %rax
    846 	mov	-12(%rsi), %rcx
    847 	cmp	%rax, %rcx
    848 	jne	L(diffin8bytes)
    849 L(4bytes):
    850 	mov	-4(%rsi), %ecx
    851 	mov	-4(%rdi), %eax
    852 	cmp	%eax, %ecx
    853 	jne	L(diffin4bytes)
    854 L(0bytes):
    855 	xor	%eax, %eax
    856 	ret
    857 
    858 #ifndef USE_AS_WMEMCMP
    859 /* unreal case for wmemcmp */
    860 	ALIGN (4)
    861 L(65bytes):
    862 	movdqu	-65(%rdi), %xmm1
    863 	movdqu	-65(%rsi), %xmm2
    864 	mov	$-65, %dl
    865 	pxor	%xmm1, %xmm2
    866 	ptest	%xmm2, %xmm0
    867 	jnc	L(less16bytes)
    868 L(49bytes):
    869 	movdqu	-49(%rdi), %xmm1
    870 	movdqu	-49(%rsi), %xmm2
    871 	mov	$-49, %dl
    872 	pxor	%xmm1, %xmm2
    873 	ptest	%xmm2, %xmm0
    874 	jnc	L(less16bytes)
    875 L(33bytes):
    876 	movdqu	-33(%rdi), %xmm1
    877 	movdqu	-33(%rsi), %xmm2
    878 	mov	$-33, %dl
    879 	pxor	%xmm1, %xmm2
    880 	ptest	%xmm2, %xmm0
    881 	jnc	L(less16bytes)
    882 L(17bytes):
    883 	mov	-17(%rdi), %rax
    884 	mov	-17(%rsi), %rcx
    885 	cmp	%rax, %rcx
    886 	jne	L(diffin8bytes)
    887 L(9bytes):
    888 	mov	-9(%rdi), %rax
    889 	mov	-9(%rsi), %rcx
    890 	cmp	%rax, %rcx
    891 	jne	L(diffin8bytes)
    892 	movzbl	-1(%rdi), %eax
    893 	movzbl	-1(%rsi), %edx
    894 	sub	%edx, %eax
    895 	ret
    896 
    897 	ALIGN (4)
    898 L(13bytes):
    899 	mov	-13(%rdi), %rax
    900 	mov	-13(%rsi), %rcx
    901 	cmp	%rax, %rcx
    902 	jne	L(diffin8bytes)
    903 	mov	-8(%rdi), %rax
    904 	mov	-8(%rsi), %rcx
    905 	cmp	%rax, %rcx
    906 	jne	L(diffin8bytes)
    907 	xor	%eax, %eax
    908 	ret
    909 
    910 	ALIGN (4)
    911 L(5bytes):
    912 	mov	-5(%rdi), %eax
    913 	mov	-5(%rsi), %ecx
    914 	cmp	%eax, %ecx
    915 	jne	L(diffin4bytes)
    916 	movzbl	-1(%rdi), %eax
    917 	movzbl	-1(%rsi), %edx
    918 	sub	%edx, %eax
    919 	ret
    920 
    921 	ALIGN (4)
    922 L(66bytes):
    923 	movdqu	-66(%rdi), %xmm1
    924 	movdqu	-66(%rsi), %xmm2
    925 	mov	$-66, %dl
    926 	pxor	%xmm1, %xmm2
    927 	ptest	%xmm2, %xmm0
    928 	jnc	L(less16bytes)
    929 L(50bytes):
    930 	movdqu	-50(%rdi), %xmm1
    931 	movdqu	-50(%rsi), %xmm2
    932 	mov	$-50, %dl
    933 	pxor	%xmm1, %xmm2
    934 	ptest	%xmm2, %xmm0
    935 	jnc	L(less16bytes)
    936 L(34bytes):
    937 	movdqu	-34(%rdi), %xmm1
    938 	movdqu	-34(%rsi), %xmm2
    939 	mov	$-34, %dl
    940 	pxor	%xmm1, %xmm2
    941 	ptest	%xmm2, %xmm0
    942 	jnc	L(less16bytes)
    943 L(18bytes):
    944 	mov	-18(%rdi), %rax
    945 	mov	-18(%rsi), %rcx
    946 	cmp	%rax, %rcx
    947 	jne	L(diffin8bytes)
    948 L(10bytes):
    949 	mov	-10(%rdi), %rax
    950 	mov	-10(%rsi), %rcx
    951 	cmp	%rax, %rcx
    952 	jne	L(diffin8bytes)
    953 	movzwl	-2(%rdi), %eax
    954 	movzwl	-2(%rsi), %ecx
    955 	cmp	%cl, %al
    956 	jne	L(end)
    957 	and	$0xffff, %eax
    958 	and	$0xffff, %ecx
    959 	sub	%ecx, %eax
    960 	ret
    961 
    962 	ALIGN (4)
    963 L(14bytes):
    964 	mov	-14(%rdi), %rax
    965 	mov	-14(%rsi), %rcx
    966 	cmp	%rax, %rcx
    967 	jne	L(diffin8bytes)
    968 	mov	-8(%rdi), %rax
    969 	mov	-8(%rsi), %rcx
    970 	cmp	%rax, %rcx
    971 	jne	L(diffin8bytes)
    972 	xor	%eax, %eax
    973 	ret
    974 
    975 	ALIGN (4)
    976 L(6bytes):
    977 	mov	-6(%rdi), %eax
    978 	mov	-6(%rsi), %ecx
    979 	cmp	%eax, %ecx
    980 	jne	L(diffin4bytes)
    981 L(2bytes):
    982 	movzwl	-2(%rsi), %ecx
    983 	movzwl	-2(%rdi), %eax
    984 	cmp	%cl, %al
    985 	jne	L(end)
    986 	and	$0xffff, %eax
    987 	and	$0xffff, %ecx
    988 	sub	%ecx, %eax
    989 	ret
    990 
    991 	ALIGN (4)
    992 L(67bytes):
    993 	movdqu	-67(%rdi), %xmm2
    994 	movdqu	-67(%rsi), %xmm1
    995 	mov	$-67, %dl
    996 	pxor	%xmm1, %xmm2
    997 	ptest	%xmm2, %xmm0
    998 	jnc	L(less16bytes)
    999 L(51bytes):
   1000 	movdqu	-51(%rdi), %xmm2
   1001 	movdqu	-51(%rsi), %xmm1
   1002 	mov	$-51, %dl
   1003 	pxor	%xmm1, %xmm2
   1004 	ptest	%xmm2, %xmm0
   1005 	jnc	L(less16bytes)
   1006 L(35bytes):
   1007 	movdqu	-35(%rsi), %xmm1
   1008 	movdqu	-35(%rdi), %xmm2
   1009 	mov	$-35, %dl
   1010 	pxor	%xmm1, %xmm2
   1011 	ptest	%xmm2, %xmm0
   1012 	jnc	L(less16bytes)
   1013 L(19bytes):
   1014 	mov	-19(%rdi), %rax
   1015 	mov	-19(%rsi), %rcx
   1016 	cmp	%rax, %rcx
   1017 	jne	L(diffin8bytes)
   1018 L(11bytes):
   1019 	mov	-11(%rdi), %rax
   1020 	mov	-11(%rsi), %rcx
   1021 	cmp	%rax, %rcx
   1022 	jne	L(diffin8bytes)
   1023 	mov	-4(%rdi), %eax
   1024 	mov	-4(%rsi), %ecx
   1025 	cmp	%eax, %ecx
   1026 	jne	L(diffin4bytes)
   1027 	xor	%eax, %eax
   1028 	ret
   1029 
   1030 	ALIGN (4)
   1031 L(15bytes):
   1032 	mov	-15(%rdi), %rax
   1033 	mov	-15(%rsi), %rcx
   1034 	cmp	%rax, %rcx
   1035 	jne	L(diffin8bytes)
   1036 	mov	-8(%rdi), %rax
   1037 	mov	-8(%rsi), %rcx
   1038 	cmp	%rax, %rcx
   1039 	jne	L(diffin8bytes)
   1040 	xor	%eax, %eax
   1041 	ret
   1042 
   1043 	ALIGN (4)
   1044 L(7bytes):
   1045 	mov	-7(%rdi), %eax
   1046 	mov	-7(%rsi), %ecx
   1047 	cmp	%eax, %ecx
   1048 	jne	L(diffin4bytes)
   1049 	mov	-4(%rdi), %eax
   1050 	mov	-4(%rsi), %ecx
   1051 	cmp	%eax, %ecx
   1052 	jne	L(diffin4bytes)
   1053 	xor	%eax, %eax
   1054 	ret
   1055 
   1056 	ALIGN (4)
   1057 L(3bytes):
   1058 	movzwl	-3(%rdi), %eax
   1059 	movzwl	-3(%rsi), %ecx
   1060 	cmp	%eax, %ecx
   1061 	jne	L(diffin2bytes)
   1062 L(1bytes):
   1063 	movzbl	-1(%rdi), %eax
   1064 	movzbl	-1(%rsi), %ecx
   1065 	sub	%ecx, %eax
   1066 	ret
   1067 #endif
   1068 
   1069 	ALIGN (4)
   1070 L(68bytes):
   1071 	movdqu	-68(%rdi), %xmm2
   1072 	movdqu	-68(%rsi), %xmm1
   1073 	mov	$-68, %dl
   1074 	pxor	%xmm1, %xmm2
   1075 	ptest	%xmm2, %xmm0
   1076 	jnc	L(less16bytes)
   1077 L(52bytes):
   1078 	movdqu	-52(%rdi), %xmm2
   1079 	movdqu	-52(%rsi), %xmm1
   1080 	mov	$-52, %dl
   1081 	pxor	%xmm1, %xmm2
   1082 	ptest	%xmm2, %xmm0
   1083 	jnc	L(less16bytes)
   1084 L(36bytes):
   1085 	movdqu	-36(%rdi), %xmm2
   1086 	movdqu	-36(%rsi), %xmm1
   1087 	mov	$-36, %dl
   1088 	pxor	%xmm1, %xmm2
   1089 	ptest	%xmm2, %xmm0
   1090 	jnc	L(less16bytes)
   1091 L(20bytes):
   1092 	movdqu	-20(%rdi), %xmm2
   1093 	movdqu	-20(%rsi), %xmm1
   1094 	mov	$-20, %dl
   1095 	pxor	%xmm1, %xmm2
   1096 	ptest	%xmm2, %xmm0
   1097 	jnc	L(less16bytes)
   1098 	mov	-4(%rdi), %eax
   1099 	mov	-4(%rsi), %ecx
   1100 	cmp	%eax, %ecx
   1101 	jne	L(diffin4bytes)
   1102 	xor	%eax, %eax
   1103 	ret
   1104 
   1105 #ifndef USE_AS_WMEMCMP
   1106 /* unreal cases for wmemcmp */
   1107 	ALIGN (4)
   1108 L(69bytes):
   1109 	movdqu	-69(%rsi), %xmm1
   1110 	movdqu	-69(%rdi), %xmm2
   1111 	mov	$-69, %dl
   1112 	pxor	%xmm1, %xmm2
   1113 	ptest	%xmm2, %xmm0
   1114 	jnc	L(less16bytes)
   1115 L(53bytes):
   1116 	movdqu	-53(%rsi), %xmm1
   1117 	movdqu	-53(%rdi), %xmm2
   1118 	mov	$-53, %dl
   1119 	pxor	%xmm1, %xmm2
   1120 	ptest	%xmm2, %xmm0
   1121 	jnc	L(less16bytes)
   1122 L(37bytes):
   1123 	movdqu	-37(%rsi), %xmm1
   1124 	movdqu	-37(%rdi), %xmm2
   1125 	mov	$-37, %dl
   1126 	pxor	%xmm1, %xmm2
   1127 	ptest	%xmm2, %xmm0
   1128 	jnc	L(less16bytes)
   1129 L(21bytes):
   1130 	movdqu	-21(%rsi), %xmm1
   1131 	movdqu	-21(%rdi), %xmm2
   1132 	mov	$-21, %dl
   1133 	pxor	%xmm1, %xmm2
   1134 	ptest	%xmm2, %xmm0
   1135 	jnc	L(less16bytes)
   1136 	mov	-8(%rdi), %rax
   1137 	mov	-8(%rsi), %rcx
   1138 	cmp	%rax, %rcx
   1139 	jne	L(diffin8bytes)
   1140 	xor	%eax, %eax
   1141 	ret
   1142 
   1143 	ALIGN (4)
   1144 L(70bytes):
   1145 	movdqu	-70(%rsi), %xmm1
   1146 	movdqu	-70(%rdi), %xmm2
   1147 	mov	$-70, %dl
   1148 	pxor	%xmm1, %xmm2
   1149 	ptest	%xmm2, %xmm0
   1150 	jnc	L(less16bytes)
   1151 L(54bytes):
   1152 	movdqu	-54(%rsi), %xmm1
   1153 	movdqu	-54(%rdi), %xmm2
   1154 	mov	$-54, %dl
   1155 	pxor	%xmm1, %xmm2
   1156 	ptest	%xmm2, %xmm0
   1157 	jnc	L(less16bytes)
   1158 L(38bytes):
   1159 	movdqu	-38(%rsi), %xmm1
   1160 	movdqu	-38(%rdi), %xmm2
   1161 	mov	$-38, %dl
   1162 	pxor	%xmm1, %xmm2
   1163 	ptest	%xmm2, %xmm0
   1164 	jnc	L(less16bytes)
   1165 L(22bytes):
   1166 	movdqu	-22(%rsi), %xmm1
   1167 	movdqu	-22(%rdi), %xmm2
   1168 	mov	$-22, %dl
   1169 	pxor	%xmm1, %xmm2
   1170 	ptest	%xmm2, %xmm0
   1171 	jnc	L(less16bytes)
   1172 	mov	-8(%rdi), %rax
   1173 	mov	-8(%rsi), %rcx
   1174 	cmp	%rax, %rcx
   1175 	jne	L(diffin8bytes)
   1176 	xor	%eax, %eax
   1177 	ret
   1178 
   1179 	ALIGN (4)
   1180 L(71bytes):
   1181 	movdqu	-71(%rsi), %xmm1
   1182 	movdqu	-71(%rdi), %xmm2
   1183 	mov	$-71, %dl
   1184 	pxor	%xmm1, %xmm2
   1185 	ptest	%xmm2, %xmm0
   1186 	jnc	L(less16bytes)
   1187 L(55bytes):
   1188 	movdqu	-55(%rdi), %xmm2
   1189 	movdqu	-55(%rsi), %xmm1
   1190 	mov	$-55, %dl
   1191 	pxor	%xmm1, %xmm2
   1192 	ptest	%xmm2, %xmm0
   1193 	jnc	L(less16bytes)
   1194 L(39bytes):
   1195 	movdqu	-39(%rdi), %xmm2
   1196 	movdqu	-39(%rsi), %xmm1
   1197 	mov	$-39, %dl
   1198 	pxor	%xmm1, %xmm2
   1199 	ptest	%xmm2, %xmm0
   1200 	jnc	L(less16bytes)
   1201 L(23bytes):
   1202 	movdqu	-23(%rdi), %xmm2
   1203 	movdqu	-23(%rsi), %xmm1
   1204 	mov	$-23, %dl
   1205 	pxor	%xmm1, %xmm2
   1206 	ptest	%xmm2, %xmm0
   1207 	jnc	L(less16bytes)
   1208 	mov	-8(%rdi), %rax
   1209 	mov	-8(%rsi), %rcx
   1210 	cmp	%rax, %rcx
   1211 	jne	L(diffin8bytes)
   1212 	xor	%eax, %eax
   1213 	ret
   1214 #endif
   1215 
   1216 	ALIGN (4)
   1217 L(72bytes):
   1218 	movdqu	-72(%rsi), %xmm1
   1219 	movdqu	-72(%rdi), %xmm2
   1220 	mov	$-72, %dl
   1221 	pxor	%xmm1, %xmm2
   1222 	ptest	%xmm2, %xmm0
   1223 	jnc	L(less16bytes)
   1224 L(56bytes):
   1225 	movdqu	-56(%rdi), %xmm2
   1226 	movdqu	-56(%rsi), %xmm1
   1227 	mov	$-56, %dl
   1228 	pxor	%xmm1, %xmm2
   1229 	ptest	%xmm2, %xmm0
   1230 	jnc	L(less16bytes)
   1231 L(40bytes):
   1232 	movdqu	-40(%rdi), %xmm2
   1233 	movdqu	-40(%rsi), %xmm1
   1234 	mov	$-40, %dl
   1235 	pxor	%xmm1, %xmm2
   1236 	ptest	%xmm2, %xmm0
   1237 	jnc	L(less16bytes)
   1238 L(24bytes):
   1239 	movdqu	-24(%rdi), %xmm2
   1240 	movdqu	-24(%rsi), %xmm1
   1241 	mov	$-24, %dl
   1242 	pxor	%xmm1, %xmm2
   1243 	ptest	%xmm2, %xmm0
   1244 	jnc	L(less16bytes)
   1245 	mov	-8(%rdi), %rax
   1246 	mov	-8(%rsi), %rcx
   1247 	cmp	%rax, %rcx
   1248 	jne	L(diffin8bytes)
   1249 	xor	%eax, %eax
   1250 	ret
   1251 
   1252 #ifndef USE_AS_WMEMCMP
   1253 /* unreal cases for wmemcmp */
   1254 	ALIGN (4)
   1255 L(73bytes):
   1256 	movdqu	-73(%rsi), %xmm1
   1257 	movdqu	-73(%rdi), %xmm2
   1258 	mov	$-73, %dl
   1259 	pxor	%xmm1, %xmm2
   1260 	ptest	%xmm2, %xmm0
   1261 	jnc	L(less16bytes)
   1262 L(57bytes):
   1263 	movdqu	-57(%rdi), %xmm2
   1264 	movdqu	-57(%rsi), %xmm1
   1265 	mov	$-57, %dl
   1266 	pxor	%xmm1, %xmm2
   1267 	ptest	%xmm2, %xmm0
   1268 	jnc	L(less16bytes)
   1269 L(41bytes):
   1270 	movdqu	-41(%rdi), %xmm2
   1271 	movdqu	-41(%rsi), %xmm1
   1272 	mov	$-41, %dl
   1273 	pxor	%xmm1, %xmm2
   1274 	ptest	%xmm2, %xmm0
   1275 	jnc	L(less16bytes)
   1276 L(25bytes):
   1277 	movdqu	-25(%rdi), %xmm2
   1278 	movdqu	-25(%rsi), %xmm1
   1279 	mov	$-25, %dl
   1280 	pxor	%xmm1, %xmm2
   1281 	ptest	%xmm2, %xmm0
   1282 	jnc	L(less16bytes)
   1283 	mov	-9(%rdi), %rax
   1284 	mov	-9(%rsi), %rcx
   1285 	cmp	%rax, %rcx
   1286 	jne	L(diffin8bytes)
   1287 	movzbl	-1(%rdi), %eax
   1288 	movzbl	-1(%rsi), %ecx
   1289 	sub	%ecx, %eax
   1290 	ret
   1291 
   1292 	ALIGN (4)
   1293 L(74bytes):
   1294 	movdqu	-74(%rsi), %xmm1
   1295 	movdqu	-74(%rdi), %xmm2
   1296 	mov	$-74, %dl
   1297 	pxor	%xmm1, %xmm2
   1298 	ptest	%xmm2, %xmm0
   1299 	jnc	L(less16bytes)
   1300 L(58bytes):
   1301 	movdqu	-58(%rdi), %xmm2
   1302 	movdqu	-58(%rsi), %xmm1
   1303 	mov	$-58, %dl
   1304 	pxor	%xmm1, %xmm2
   1305 	ptest	%xmm2, %xmm0
   1306 	jnc	L(less16bytes)
   1307 L(42bytes):
   1308 	movdqu	-42(%rdi), %xmm2
   1309 	movdqu	-42(%rsi), %xmm1
   1310 	mov	$-42, %dl
   1311 	pxor	%xmm1, %xmm2
   1312 	ptest	%xmm2, %xmm0
   1313 	jnc	L(less16bytes)
   1314 L(26bytes):
   1315 	movdqu	-26(%rdi), %xmm2
   1316 	movdqu	-26(%rsi), %xmm1
   1317 	mov	$-26, %dl
   1318 	pxor	%xmm1, %xmm2
   1319 	ptest	%xmm2, %xmm0
   1320 	jnc	L(less16bytes)
   1321 	mov	-10(%rdi), %rax
   1322 	mov	-10(%rsi), %rcx
   1323 	cmp	%rax, %rcx
   1324 	jne	L(diffin8bytes)
   1325 	movzwl	-2(%rdi), %eax
   1326 	movzwl	-2(%rsi), %ecx
   1327 	jmp	L(diffin2bytes)
   1328 
   1329 	ALIGN (4)
   1330 L(75bytes):
   1331 	movdqu	-75(%rsi), %xmm1
   1332 	movdqu	-75(%rdi), %xmm2
   1333 	mov	$-75, %dl
   1334 	pxor	%xmm1, %xmm2
   1335 	ptest	%xmm2, %xmm0
   1336 	jnc	L(less16bytes)
   1337 L(59bytes):
   1338 	movdqu	-59(%rdi), %xmm2
   1339 	movdqu	-59(%rsi), %xmm1
   1340 	mov	$-59, %dl
   1341 	pxor	%xmm1, %xmm2
   1342 	ptest	%xmm2, %xmm0
   1343 	jnc	L(less16bytes)
   1344 L(43bytes):
   1345 	movdqu	-43(%rdi), %xmm2
   1346 	movdqu	-43(%rsi), %xmm1
   1347 	mov	$-43, %dl
   1348 	pxor	%xmm1, %xmm2
   1349 	ptest	%xmm2, %xmm0
   1350 	jnc	L(less16bytes)
   1351 L(27bytes):
   1352 	movdqu	-27(%rdi), %xmm2
   1353 	movdqu	-27(%rsi), %xmm1
   1354 	mov	$-27, %dl
   1355 	pxor	%xmm1, %xmm2
   1356 	ptest	%xmm2, %xmm0
   1357 	jnc	L(less16bytes)
   1358 	mov	-11(%rdi), %rax
   1359 	mov	-11(%rsi), %rcx
   1360 	cmp	%rax, %rcx
   1361 	jne	L(diffin8bytes)
   1362 	mov	-4(%rdi), %eax
   1363 	mov	-4(%rsi), %ecx
   1364 	cmp	%eax, %ecx
   1365 	jne	L(diffin4bytes)
   1366 	xor	%eax, %eax
   1367 	ret
   1368 #endif
   1369 	ALIGN (4)
   1370 L(76bytes):
   1371 	movdqu	-76(%rsi), %xmm1
   1372 	movdqu	-76(%rdi), %xmm2
   1373 	mov	$-76, %dl
   1374 	pxor	%xmm1, %xmm2
   1375 	ptest	%xmm2, %xmm0
   1376 	jnc	L(less16bytes)
   1377 L(60bytes):
   1378 	movdqu	-60(%rdi), %xmm2
   1379 	movdqu	-60(%rsi), %xmm1
   1380 	mov	$-60, %dl
   1381 	pxor	%xmm1, %xmm2
   1382 	ptest	%xmm2, %xmm0
   1383 	jnc	L(less16bytes)
   1384 L(44bytes):
   1385 	movdqu	-44(%rdi), %xmm2
   1386 	movdqu	-44(%rsi), %xmm1
   1387 	mov	$-44, %dl
   1388 	pxor	%xmm1, %xmm2
   1389 	ptest	%xmm2, %xmm0
   1390 	jnc	L(less16bytes)
   1391 L(28bytes):
   1392 	movdqu	-28(%rdi), %xmm2
   1393 	movdqu	-28(%rsi), %xmm1
   1394 	mov	$-28, %dl
   1395 	pxor	%xmm1, %xmm2
   1396 	ptest	%xmm2, %xmm0
   1397 	jnc	L(less16bytes)
   1398 	mov	-12(%rdi), %rax
   1399 	mov	-12(%rsi), %rcx
   1400 	cmp	%rax, %rcx
   1401 	jne	L(diffin8bytes)
   1402 	mov	-4(%rdi), %eax
   1403 	mov	-4(%rsi), %ecx
   1404 	cmp	%eax, %ecx
   1405 	jne	L(diffin4bytes)
   1406 	xor	%eax, %eax
   1407 	ret
   1408 
   1409 #ifndef USE_AS_WMEMCMP
   1410 /* unreal cases for wmemcmp */
   1411 	ALIGN (4)
   1412 L(77bytes):
   1413 	movdqu	-77(%rsi), %xmm1
   1414 	movdqu	-77(%rdi), %xmm2
   1415 	mov	$-77, %dl
   1416 	pxor	%xmm1, %xmm2
   1417 	ptest	%xmm2, %xmm0
   1418 	jnc	L(less16bytes)
   1419 L(61bytes):
   1420 	movdqu	-61(%rdi), %xmm2
   1421 	movdqu	-61(%rsi), %xmm1
   1422 	mov	$-61, %dl
   1423 	pxor	%xmm1, %xmm2
   1424 	ptest	%xmm2, %xmm0
   1425 	jnc	L(less16bytes)
   1426 L(45bytes):
   1427 	movdqu	-45(%rdi), %xmm2
   1428 	movdqu	-45(%rsi), %xmm1
   1429 	mov	$-45, %dl
   1430 	pxor	%xmm1, %xmm2
   1431 	ptest	%xmm2, %xmm0
   1432 	jnc	L(less16bytes)
   1433 L(29bytes):
   1434 	movdqu	-29(%rdi), %xmm2
   1435 	movdqu	-29(%rsi), %xmm1
   1436 	mov	$-29, %dl
   1437 	pxor	%xmm1, %xmm2
   1438 	ptest	%xmm2, %xmm0
   1439 	jnc	L(less16bytes)
   1440 
   1441 	mov	-13(%rdi), %rax
   1442 	mov	-13(%rsi), %rcx
   1443 	cmp	%rax, %rcx
   1444 	jne	L(diffin8bytes)
   1445 
   1446 	mov	-8(%rdi), %rax
   1447 	mov	-8(%rsi), %rcx
   1448 	cmp	%rax, %rcx
   1449 	jne	L(diffin8bytes)
   1450 	xor	%eax, %eax
   1451 	ret
   1452 
   1453 	ALIGN (4)
   1454 L(78bytes):
   1455 	movdqu	-78(%rsi), %xmm1
   1456 	movdqu	-78(%rdi), %xmm2
   1457 	mov	$-78, %dl
   1458 	pxor	%xmm1, %xmm2
   1459 	ptest	%xmm2, %xmm0
   1460 	jnc	L(less16bytes)
   1461 L(62bytes):
   1462 	movdqu	-62(%rdi), %xmm2
   1463 	movdqu	-62(%rsi), %xmm1
   1464 	mov	$-62, %dl
   1465 	pxor	%xmm1, %xmm2
   1466 	ptest	%xmm2, %xmm0
   1467 	jnc	L(less16bytes)
   1468 L(46bytes):
   1469 	movdqu	-46(%rdi), %xmm2
   1470 	movdqu	-46(%rsi), %xmm1
   1471 	mov	$-46, %dl
   1472 	pxor	%xmm1, %xmm2
   1473 	ptest	%xmm2, %xmm0
   1474 	jnc	L(less16bytes)
   1475 L(30bytes):
   1476 	movdqu	-30(%rdi), %xmm2
   1477 	movdqu	-30(%rsi), %xmm1
   1478 	mov	$-30, %dl
   1479 	pxor	%xmm1, %xmm2
   1480 	ptest	%xmm2, %xmm0
   1481 	jnc	L(less16bytes)
   1482 	mov	-14(%rdi), %rax
   1483 	mov	-14(%rsi), %rcx
   1484 	cmp	%rax, %rcx
   1485 	jne	L(diffin8bytes)
   1486 	mov	-8(%rdi), %rax
   1487 	mov	-8(%rsi), %rcx
   1488 	cmp	%rax, %rcx
   1489 	jne	L(diffin8bytes)
   1490 	xor	%eax, %eax
   1491 	ret
   1492 
   1493 	ALIGN (4)
   1494 L(79bytes):
   1495 	movdqu	-79(%rsi), %xmm1
   1496 	movdqu	-79(%rdi), %xmm2
   1497 	mov	$-79, %dl
   1498 	pxor	%xmm1, %xmm2
   1499 	ptest	%xmm2, %xmm0
   1500 	jnc	L(less16bytes)
   1501 L(63bytes):
   1502 	movdqu	-63(%rdi), %xmm2
   1503 	movdqu	-63(%rsi), %xmm1
   1504 	mov	$-63, %dl
   1505 	pxor	%xmm1, %xmm2
   1506 	ptest	%xmm2, %xmm0
   1507 	jnc	L(less16bytes)
   1508 L(47bytes):
   1509 	movdqu	-47(%rdi), %xmm2
   1510 	movdqu	-47(%rsi), %xmm1
   1511 	mov	$-47, %dl
   1512 	pxor	%xmm1, %xmm2
   1513 	ptest	%xmm2, %xmm0
   1514 	jnc	L(less16bytes)
   1515 L(31bytes):
   1516 	movdqu	-31(%rdi), %xmm2
   1517 	movdqu	-31(%rsi), %xmm1
   1518 	mov	$-31, %dl
   1519 	pxor	%xmm1, %xmm2
   1520 	ptest	%xmm2, %xmm0
   1521 	jnc	L(less16bytes)
   1522 	mov	-15(%rdi), %rax
   1523 	mov	-15(%rsi), %rcx
   1524 	cmp	%rax, %rcx
   1525 	jne	L(diffin8bytes)
   1526 	mov	-8(%rdi), %rax
   1527 	mov	-8(%rsi), %rcx
   1528 	cmp	%rax, %rcx
   1529 	jne	L(diffin8bytes)
   1530 	xor	%eax, %eax
   1531 	ret
   1532 #endif
   1533 	ALIGN (4)
   1534 L(64bytes):
   1535 	movdqu	-64(%rdi), %xmm2
   1536 	movdqu	-64(%rsi), %xmm1
   1537 	mov	$-64, %dl
   1538 	pxor	%xmm1, %xmm2
   1539 	ptest	%xmm2, %xmm0
   1540 	jnc	L(less16bytes)
   1541 L(48bytes):
   1542 	movdqu	-48(%rdi), %xmm2
   1543 	movdqu	-48(%rsi), %xmm1
   1544 	mov	$-48, %dl
   1545 	pxor	%xmm1, %xmm2
   1546 	ptest	%xmm2, %xmm0
   1547 	jnc	L(less16bytes)
   1548 L(32bytes):
   1549 	movdqu	-32(%rdi), %xmm2
   1550 	movdqu	-32(%rsi), %xmm1
   1551 	mov	$-32, %dl
   1552 	pxor	%xmm1, %xmm2
   1553 	ptest	%xmm2, %xmm0
   1554 	jnc	L(less16bytes)
   1555 
   1556 	mov	-16(%rdi), %rax
   1557 	mov	-16(%rsi), %rcx
   1558 	cmp	%rax, %rcx
   1559 	jne	L(diffin8bytes)
   1560 
   1561 	mov	-8(%rdi), %rax
   1562 	mov	-8(%rsi), %rcx
   1563 	cmp	%rax, %rcx
   1564 	jne	L(diffin8bytes)
   1565 	xor	%eax, %eax
   1566 	ret
   1567 
   1568 /*
   1569  * Aligned 8 bytes to avoid 2 branch "taken" in one 16 alinged code block.
   1570  */
   1571 	ALIGN (3)
   1572 L(less16bytes):
   1573 	movsbq	%dl, %rdx
   1574 	mov	(%rsi, %rdx), %rcx
   1575 	mov	(%rdi, %rdx), %rax
   1576 	cmp	%rax, %rcx
   1577 	jne	L(diffin8bytes)
   1578 	mov	8(%rsi, %rdx), %rcx
   1579 	mov	8(%rdi, %rdx), %rax
   1580 L(diffin8bytes):
   1581 	cmp	%eax, %ecx
   1582 	jne	L(diffin4bytes)
   1583 	shr	$32, %rcx
   1584 	shr	$32, %rax
   1585 
   1586 #ifdef USE_AS_WMEMCMP
   1587 /* for wmemcmp */
   1588 	cmp	%eax, %ecx
   1589 	jne	L(diffin4bytes)
   1590 	xor	%eax, %eax
   1591 	ret
   1592 #endif
   1593 
   1594 L(diffin4bytes):
   1595 #ifndef USE_AS_WMEMCMP
   1596 	cmp	%cx, %ax
   1597 	jne	L(diffin2bytes)
   1598 	shr	$16, %ecx
   1599 	shr	$16, %eax
   1600 L(diffin2bytes):
   1601 	cmp	%cl, %al
   1602 	jne	L(end)
   1603 	and	$0xffff, %eax
   1604 	and	$0xffff, %ecx
   1605 	sub	%ecx, %eax
   1606 	ret
   1607 #else
   1608 
   1609 /* for wmemcmp */
   1610 	mov	$1, %eax
   1611 	jl	L(nequal_bigger)
   1612 	neg	%eax
   1613 	ret
   1614 
   1615 	ALIGN (4)
   1616 L(nequal_bigger):
   1617 	ret
   1618 
   1619 L(unreal_case):
   1620 	xor	%eax, %eax
   1621 	ret
   1622 #endif
   1623 
   1624 	ALIGN (4)
   1625 L(end):
   1626 	and	$0xff, %eax
   1627 	and	$0xff, %ecx
   1628 	sub	%ecx, %eax
   1629 	ret
   1630 
   1631 END (MEMCMP)
   1632 
   1633 	.section .rodata.sse4.1,"a",@progbits
   1634 	ALIGN (3)
   1635 #ifndef USE_AS_WMEMCMP
   1636 L(table_64bytes):
   1637 	.int	JMPTBL (L(0bytes), L(table_64bytes))
   1638 	.int	JMPTBL (L(1bytes), L(table_64bytes))
   1639 	.int	JMPTBL (L(2bytes), L(table_64bytes))
   1640 	.int	JMPTBL (L(3bytes), L(table_64bytes))
   1641 	.int	JMPTBL (L(4bytes), L(table_64bytes))
   1642 	.int	JMPTBL (L(5bytes), L(table_64bytes))
   1643 	.int	JMPTBL (L(6bytes), L(table_64bytes))
   1644 	.int	JMPTBL (L(7bytes), L(table_64bytes))
   1645 	.int	JMPTBL (L(8bytes), L(table_64bytes))
   1646 	.int	JMPTBL (L(9bytes), L(table_64bytes))
   1647 	.int	JMPTBL (L(10bytes), L(table_64bytes))
   1648 	.int	JMPTBL (L(11bytes), L(table_64bytes))
   1649 	.int	JMPTBL (L(12bytes), L(table_64bytes))
   1650 	.int	JMPTBL (L(13bytes), L(table_64bytes))
   1651 	.int	JMPTBL (L(14bytes), L(table_64bytes))
   1652 	.int	JMPTBL (L(15bytes), L(table_64bytes))
   1653 	.int	JMPTBL (L(16bytes), L(table_64bytes))
   1654 	.int	JMPTBL (L(17bytes), L(table_64bytes))
   1655 	.int	JMPTBL (L(18bytes), L(table_64bytes))
   1656 	.int	JMPTBL (L(19bytes), L(table_64bytes))
   1657 	.int	JMPTBL (L(20bytes), L(table_64bytes))
   1658 	.int	JMPTBL (L(21bytes), L(table_64bytes))
   1659 	.int	JMPTBL (L(22bytes), L(table_64bytes))
   1660 	.int	JMPTBL (L(23bytes), L(table_64bytes))
   1661 	.int	JMPTBL (L(24bytes), L(table_64bytes))
   1662 	.int	JMPTBL (L(25bytes), L(table_64bytes))
   1663 	.int	JMPTBL (L(26bytes), L(table_64bytes))
   1664 	.int	JMPTBL (L(27bytes), L(table_64bytes))
   1665 	.int	JMPTBL (L(28bytes), L(table_64bytes))
   1666 	.int	JMPTBL (L(29bytes), L(table_64bytes))
   1667 	.int	JMPTBL (L(30bytes), L(table_64bytes))
   1668 	.int	JMPTBL (L(31bytes), L(table_64bytes))
   1669 	.int	JMPTBL (L(32bytes), L(table_64bytes))
   1670 	.int	JMPTBL (L(33bytes), L(table_64bytes))
   1671 	.int	JMPTBL (L(34bytes), L(table_64bytes))
   1672 	.int	JMPTBL (L(35bytes), L(table_64bytes))
   1673 	.int	JMPTBL (L(36bytes), L(table_64bytes))
   1674 	.int	JMPTBL (L(37bytes), L(table_64bytes))
   1675 	.int	JMPTBL (L(38bytes), L(table_64bytes))
   1676 	.int	JMPTBL (L(39bytes), L(table_64bytes))
   1677 	.int	JMPTBL (L(40bytes), L(table_64bytes))
   1678 	.int	JMPTBL (L(41bytes), L(table_64bytes))
   1679 	.int	JMPTBL (L(42bytes), L(table_64bytes))
   1680 	.int	JMPTBL (L(43bytes), L(table_64bytes))
   1681 	.int	JMPTBL (L(44bytes), L(table_64bytes))
   1682 	.int	JMPTBL (L(45bytes), L(table_64bytes))
   1683 	.int	JMPTBL (L(46bytes), L(table_64bytes))
   1684 	.int	JMPTBL (L(47bytes), L(table_64bytes))
   1685 	.int	JMPTBL (L(48bytes), L(table_64bytes))
   1686 	.int	JMPTBL (L(49bytes), L(table_64bytes))
   1687 	.int	JMPTBL (L(50bytes), L(table_64bytes))
   1688 	.int	JMPTBL (L(51bytes), L(table_64bytes))
   1689 	.int	JMPTBL (L(52bytes), L(table_64bytes))
   1690 	.int	JMPTBL (L(53bytes), L(table_64bytes))
   1691 	.int	JMPTBL (L(54bytes), L(table_64bytes))
   1692 	.int	JMPTBL (L(55bytes), L(table_64bytes))
   1693 	.int	JMPTBL (L(56bytes), L(table_64bytes))
   1694 	.int	JMPTBL (L(57bytes), L(table_64bytes))
   1695 	.int	JMPTBL (L(58bytes), L(table_64bytes))
   1696 	.int	JMPTBL (L(59bytes), L(table_64bytes))
   1697 	.int	JMPTBL (L(60bytes), L(table_64bytes))
   1698 	.int	JMPTBL (L(61bytes), L(table_64bytes))
   1699 	.int	JMPTBL (L(62bytes), L(table_64bytes))
   1700 	.int	JMPTBL (L(63bytes), L(table_64bytes))
   1701 	.int	JMPTBL (L(64bytes), L(table_64bytes))
   1702 	.int	JMPTBL (L(65bytes), L(table_64bytes))
   1703 	.int	JMPTBL (L(66bytes), L(table_64bytes))
   1704 	.int	JMPTBL (L(67bytes), L(table_64bytes))
   1705 	.int	JMPTBL (L(68bytes), L(table_64bytes))
   1706 	.int	JMPTBL (L(69bytes), L(table_64bytes))
   1707 	.int	JMPTBL (L(70bytes), L(table_64bytes))
   1708 	.int	JMPTBL (L(71bytes), L(table_64bytes))
   1709 	.int	JMPTBL (L(72bytes), L(table_64bytes))
   1710 	.int	JMPTBL (L(73bytes), L(table_64bytes))
   1711 	.int	JMPTBL (L(74bytes), L(table_64bytes))
   1712 	.int	JMPTBL (L(75bytes), L(table_64bytes))
   1713 	.int	JMPTBL (L(76bytes), L(table_64bytes))
   1714 	.int	JMPTBL (L(77bytes), L(table_64bytes))
   1715 	.int	JMPTBL (L(78bytes), L(table_64bytes))
   1716 	.int	JMPTBL (L(79bytes), L(table_64bytes))
   1717 #else
   1718 L(table_64bytes):
   1719 	.int	JMPTBL (L(0bytes), L(table_64bytes))
   1720 	.int	JMPTBL (L(unreal_case), L(table_64bytes))
   1721 	.int	JMPTBL (L(unreal_case), L(table_64bytes))
   1722 	.int	JMPTBL (L(unreal_case), L(table_64bytes))
   1723 	.int	JMPTBL (L(4bytes), L(table_64bytes))
   1724 	.int	JMPTBL (L(unreal_case), L(table_64bytes))
   1725 	.int	JMPTBL (L(unreal_case), L(table_64bytes))
   1726 	.int	JMPTBL (L(unreal_case), L(table_64bytes))
   1727 	.int	JMPTBL (L(8bytes), L(table_64bytes))
   1728 	.int	JMPTBL (L(unreal_case), L(table_64bytes))
   1729 	.int	JMPTBL (L(unreal_case), L(table_64bytes))
   1730 	.int	JMPTBL (L(unreal_case), L(table_64bytes))
   1731 	.int	JMPTBL (L(12bytes), L(table_64bytes))
   1732 	.int	JMPTBL (L(unreal_case), L(table_64bytes))
   1733 	.int	JMPTBL (L(unreal_case), L(table_64bytes))
   1734 	.int	JMPTBL (L(unreal_case), L(table_64bytes))
   1735 	.int	JMPTBL (L(16bytes), L(table_64bytes))
   1736 	.int	JMPTBL (L(unreal_case), L(table_64bytes))
   1737 	.int	JMPTBL (L(unreal_case), L(table_64bytes))
   1738 	.int	JMPTBL (L(unreal_case), L(table_64bytes))
   1739 	.int	JMPTBL (L(20bytes), L(table_64bytes))
   1740 	.int	JMPTBL (L(unreal_case), L(table_64bytes))
   1741 	.int	JMPTBL (L(unreal_case), L(table_64bytes))
   1742 	.int	JMPTBL (L(unreal_case), L(table_64bytes))
   1743 	.int	JMPTBL (L(24bytes), L(table_64bytes))
   1744 	.int	JMPTBL (L(unreal_case), L(table_64bytes))
   1745 	.int	JMPTBL (L(unreal_case), L(table_64bytes))
   1746 	.int	JMPTBL (L(unreal_case), L(table_64bytes))
   1747 	.int	JMPTBL (L(28bytes), L(table_64bytes))
   1748 	.int	JMPTBL (L(unreal_case), L(table_64bytes))
   1749 	.int	JMPTBL (L(unreal_case), L(table_64bytes))
   1750 	.int	JMPTBL (L(unreal_case), L(table_64bytes))
   1751 	.int	JMPTBL (L(32bytes), L(table_64bytes))
   1752 	.int	JMPTBL (L(unreal_case), L(table_64bytes))
   1753 	.int	JMPTBL (L(unreal_case), L(table_64bytes))
   1754 	.int	JMPTBL (L(unreal_case), L(table_64bytes))
   1755 	.int	JMPTBL (L(36bytes), L(table_64bytes))
   1756 	.int	JMPTBL (L(unreal_case), L(table_64bytes))
   1757 	.int	JMPTBL (L(unreal_case), L(table_64bytes))
   1758 	.int	JMPTBL (L(unreal_case), L(table_64bytes))
   1759 	.int	JMPTBL (L(40bytes), L(table_64bytes))
   1760 	.int	JMPTBL (L(unreal_case), L(table_64bytes))
   1761 	.int	JMPTBL (L(unreal_case), L(table_64bytes))
   1762 	.int	JMPTBL (L(unreal_case), L(table_64bytes))
   1763 	.int	JMPTBL (L(44bytes), L(table_64bytes))
   1764 	.int	JMPTBL (L(unreal_case), L(table_64bytes))
   1765 	.int	JMPTBL (L(unreal_case), L(table_64bytes))
   1766 	.int	JMPTBL (L(unreal_case), L(table_64bytes))
   1767 	.int	JMPTBL (L(48bytes), L(table_64bytes))
   1768 	.int	JMPTBL (L(unreal_case), L(table_64bytes))
   1769 	.int	JMPTBL (L(unreal_case), L(table_64bytes))
   1770 	.int	JMPTBL (L(unreal_case), L(table_64bytes))
   1771 	.int	JMPTBL (L(52bytes), L(table_64bytes))
   1772 	.int	JMPTBL (L(unreal_case), L(table_64bytes))
   1773 	.int	JMPTBL (L(unreal_case), L(table_64bytes))
   1774 	.int	JMPTBL (L(unreal_case), L(table_64bytes))
   1775 	.int	JMPTBL (L(56bytes), L(table_64bytes))
   1776 	.int	JMPTBL (L(unreal_case), L(table_64bytes))
   1777 	.int	JMPTBL (L(unreal_case), L(table_64bytes))
   1778 	.int	JMPTBL (L(unreal_case), L(table_64bytes))
   1779 	.int	JMPTBL (L(60bytes), L(table_64bytes))
   1780 	.int	JMPTBL (L(unreal_case), L(table_64bytes))
   1781 	.int	JMPTBL (L(unreal_case), L(table_64bytes))
   1782 	.int	JMPTBL (L(unreal_case), L(table_64bytes))
   1783 	.int	JMPTBL (L(64bytes), L(table_64bytes))
   1784 	.int	JMPTBL (L(unreal_case), L(table_64bytes))
   1785 	.int	JMPTBL (L(unreal_case), L(table_64bytes))
   1786 	.int	JMPTBL (L(unreal_case), L(table_64bytes))
   1787 	.int	JMPTBL (L(68bytes), L(table_64bytes))
   1788 	.int	JMPTBL (L(unreal_case), L(table_64bytes))
   1789 	.int	JMPTBL (L(unreal_case), L(table_64bytes))
   1790 	.int	JMPTBL (L(unreal_case), L(table_64bytes))
   1791 	.int	JMPTBL (L(72bytes), L(table_64bytes))
   1792 	.int	JMPTBL (L(unreal_case), L(table_64bytes))
   1793 	.int	JMPTBL (L(unreal_case), L(table_64bytes))
   1794 	.int	JMPTBL (L(unreal_case), L(table_64bytes))
   1795 	.int	JMPTBL (L(76bytes), L(table_64bytes))
   1796 	.int	JMPTBL (L(unreal_case), L(table_64bytes))
   1797 	.int	JMPTBL (L(unreal_case), L(table_64bytes))
   1798 	.int	JMPTBL (L(unreal_case), L(table_64bytes))
   1799 #endif
   1800