diff options
| author | Ondrej Bilka <neleai@seznam.cz> | 2013-05-20 08:26:00 +0200 |
|---|---|---|
| committer | H.J. Lu <hjl.tools@gmail.com> | 2016-05-05 06:29:28 -0700 |
| commit | 143ce75a4203a78d79549b00e570a5bb429c44cf (patch) | |
| tree | 3aa10cda2b9d0d9f18d1e0df81162cbd98f11910 | |
| parent | 16e49ca0c878c5cef2638f828c85bbedfb95c83b (diff) | |
| download | glibc-hjl/2.17/memset.tar.xz glibc-hjl/2.17/memset.zip | |
Faster memset on x64hjl/2.17/memset
This implementation speed up memset in several ways. First is
avoiding expensive computed jump. Second is using fact that arguments
of memset are most of time aligned to 8 bytes.
Benchmark results on:
kam.mff.cuni.cz/~ondra/benchmark_string/memset_profile_result27_04_13.tar.bz2
(cherry picked from commit b2b671b677d92429a3d41bf451668f476aa267ed)
| -rw-r--r-- | sysdeps/x86_64/memset.S | 1406 |
1 files changed, 91 insertions, 1315 deletions
diff --git a/sysdeps/x86_64/memset.S b/sysdeps/x86_64/memset.S index 9511745a41..bbda947710 100644 --- a/sysdeps/x86_64/memset.S +++ b/sysdeps/x86_64/memset.S @@ -19,17 +19,31 @@ #include <sysdep.h> -#define __STOS_LOWER_BOUNDARY $8192 -#define __STOS_UPPER_BOUNDARY $65536 +#ifndef ALIGN +# define ALIGN(n) .p2align n +#endif .text #if !defined NOT_IN_libc && !defined USE_MULTIARCH ENTRY(__bzero) - mov %rsi,%rdx /* Adjust parameter. */ - xorl %esi,%esi /* Fill with 0s. */ - jmp L(memset_entry) + movq %rdi, %rax /* Set return value. */ + movq %rsi, %rdx /* Set n. */ + pxor %xmm8, %xmm8 + jmp L(entry_from_bzero) END(__bzero) weak_alias (__bzero, bzero) + +/* Like memset but takes additional parameter with return value. */ +ENTRY(__memset_tail) + movq %rcx, %rax /* Set return value. */ + + movd %esi, %xmm8 + punpcklbw %xmm8, %xmm8 + punpcklwd %xmm8, %xmm8 + pshufd $0, %xmm8, %xmm8 + + jmp L(entry_from_bzero) +END(__memset_tail) #endif #if defined PIC && !defined NOT_IN_libc @@ -38,1318 +52,80 @@ ENTRY_CHK (__memset_chk) jb HIDDEN_JUMPTARGET (__chk_fail) END_CHK (__memset_chk) #endif -ENTRY (memset) -L(memset_entry): - cmp $0x1,%rdx - mov %rdi,%rax /* memset returns the dest address. */ - jne L(ck2) - mov %sil,(%rdi) - retq -L(ck2): - mov $0x101010101010101,%r9 - mov %rdx,%r8 - movzbq %sil,%rdx - imul %r9,%rdx -L(now_dw_aligned): - cmp $0x90,%r8 - ja L(ck_mem_ops_method) -L(now_dw_aligned_small): - add %r8,%rdi -#ifndef PIC - lea L(setPxQx)(%rip),%r11 - jmpq *(%r11,%r8,8) -#else - lea L(Got0)(%rip),%r11 - lea L(setPxQx)(%rip),%rcx - movswq (%rcx,%r8,2),%rcx - lea (%rcx,%r11,1),%r11 - jmpq *%r11 -#endif - -L(Got0): - retq - - .pushsection .rodata - .balign 16 -#ifndef PIC -L(setPxQx): - .quad L(Got0), L(P1Q0), L(P2Q0), L(P3Q0) - .quad L(P4Q0), L(P5Q0), L(P6Q0), L(P7Q0) - .quad L(P0Q1), L(P1Q1), L(P2Q1), L(P3Q1) - .quad L(P4Q1), L(P5Q1), L(P6Q1), L(P7Q1) - .quad L(P0Q2), L(P1Q2), L(P2Q2), L(P3Q2) - .quad L(P4Q2), L(P5Q2), L(P6Q2), L(P7Q2) - .quad L(P0Q3), L(P1Q3), L(P2Q3), L(P3Q3) - .quad L(P4Q3), L(P5Q3), L(P6Q3), L(P7Q3) - .quad L(P0Q4), L(P1Q4), L(P2Q4), L(P3Q4) - .quad L(P4Q4), L(P5Q4), L(P6Q4), L(P7Q4) - .quad L(P0Q5), L(P1Q5), L(P2Q5), L(P3Q5) - .quad L(P4Q5), L(P5Q5), L(P6Q5), L(P7Q5) - .quad L(P0Q6), L(P1Q6), L(P2Q6), L(P3Q6) - .quad L(P4Q6), L(P5Q6), L(P6Q6), L(P7Q6) - .quad L(P0Q7), L(P1Q7), L(P2Q7), L(P3Q7) - .quad L(P4Q7), L(P5Q7), L(P6Q7), L(P7Q7) - .quad L(P0Q8), L(P1Q8), L(P2Q8), L(P3Q8) - .quad L(P4Q8), L(P5Q8), L(P6Q8), L(P7Q8) - .quad L(P0Q9), L(P1Q9), L(P2Q9), L(P3Q9) - .quad L(P4Q9), L(P5Q9), L(P6Q9), L(P7Q9) - .quad L(P0QA), L(P1QA), L(P2QA), L(P3QA) - .quad L(P4QA), L(P5QA), L(P6QA), L(P7QA) - .quad L(P0QB), L(P1QB), L(P2QB), L(P3QB) - .quad L(P4QB), L(P5QB), L(P6QB), L(P7QB) - .quad L(P0QC), L(P1QC), L(P2QC), L(P3QC) - .quad L(P4QC), L(P5QC), L(P6QC), L(P7QC) - .quad L(P0QD), L(P1QD), L(P2QD), L(P3QD) - .quad L(P4QD), L(P5QD), L(P6QD), L(P7QD) - .quad L(P0QE), L(P1QE), L(P2QE), L(P3QE) - .quad L(P4QE), L(P5QE), L(P6QE), L(P7QE) - .quad L(P0QF), L(P1QF), L(P2QF), L(P3QF) - .quad L(P4QF), L(P5QF), L(P6QF), L(P7QF) - .quad L(P0QG), L(P1QG), L(P2QG), L(P3QG) - .quad L(P4QG), L(P5QG), L(P6QG), L(P7QG) - .quad L(P0QH), L(P1QH), L(P2QH), L(P3QH) - .quad L(P4QH), L(P5QH), L(P6QH), L(P7QH) - .quad L(P0QI) -# ifdef USE_EXTRA_TABLE - .quad L(P1QI), L(P2QI), L(P3QI), L(P4QI) - .quad L(P5QI), L(P6QI), L(P7QI) -# endif -#else -L(setPxQx): - .short L(Got0)-L(Got0) - .short L(P1Q0)-L(Got0) - .short L(P2Q0)-L(Got0) - .short L(P3Q0)-L(Got0) - .short L(P4Q0)-L(Got0) - .short L(P5Q0)-L(Got0) - .short L(P6Q0)-L(Got0) - .short L(P7Q0)-L(Got0) - - .short L(P0Q1)-L(Got0) - .short L(P1Q1)-L(Got0) - .short L(P2Q1)-L(Got0) - .short L(P3Q1)-L(Got0) - .short L(P4Q1)-L(Got0) - .short L(P5Q1)-L(Got0) - .short L(P6Q1)-L(Got0) - .short L(P7Q1)-L(Got0) - - .short L(P0Q2)-L(Got0) - .short L(P1Q2)-L(Got0) - .short L(P2Q2)-L(Got0) - .short L(P3Q2)-L(Got0) - .short L(P4Q2)-L(Got0) - .short L(P5Q2)-L(Got0) - .short L(P6Q2)-L(Got0) - .short L(P7Q2)-L(Got0) - - .short L(P0Q3)-L(Got0) - .short L(P1Q3)-L(Got0) - .short L(P2Q3)-L(Got0) - .short L(P3Q3)-L(Got0) - .short L(P4Q3)-L(Got0) - .short L(P5Q3)-L(Got0) - .short L(P6Q3)-L(Got0) - .short L(P7Q3)-L(Got0) - - .short L(P0Q4)-L(Got0) - .short L(P1Q4)-L(Got0) - .short L(P2Q4)-L(Got0) - .short L(P3Q4)-L(Got0) - .short L(P4Q4)-L(Got0) - .short L(P5Q4)-L(Got0) - .short L(P6Q4)-L(Got0) - .short L(P7Q4)-L(Got0) - - .short L(P0Q5)-L(Got0) - .short L(P1Q5)-L(Got0) - .short L(P2Q5)-L(Got0) - .short L(P3Q5)-L(Got0) - .short L(P4Q5)-L(Got0) - .short L(P5Q5)-L(Got0) - .short L(P6Q5)-L(Got0) - .short L(P7Q5)-L(Got0) - - .short L(P0Q6)-L(Got0) - .short L(P1Q6)-L(Got0) - .short L(P2Q6)-L(Got0) - .short L(P3Q6)-L(Got0) - .short L(P4Q6)-L(Got0) - .short L(P5Q6)-L(Got0) - .short L(P6Q6)-L(Got0) - .short L(P7Q6)-L(Got0) - - .short L(P0Q7)-L(Got0) - .short L(P1Q7)-L(Got0) - .short L(P2Q7)-L(Got0) - .short L(P3Q7)-L(Got0) - .short L(P4Q7)-L(Got0) - .short L(P5Q7)-L(Got0) - .short L(P6Q7)-L(Got0) - .short L(P7Q7)-L(Got0) - - .short L(P0Q8)-L(Got0) - .short L(P1Q8)-L(Got0) - .short L(P2Q8)-L(Got0) - .short L(P3Q8)-L(Got0) - .short L(P4Q8)-L(Got0) - .short L(P5Q8)-L(Got0) - .short L(P6Q8)-L(Got0) - .short L(P7Q8)-L(Got0) - - .short L(P0Q9)-L(Got0) - .short L(P1Q9)-L(Got0) - .short L(P2Q9)-L(Got0) - .short L(P3Q9)-L(Got0) - .short L(P4Q9)-L(Got0) - .short L(P5Q9)-L(Got0) - .short L(P6Q9)-L(Got0) - .short L(P7Q9)-L(Got0) - - .short L(P0QA)-L(Got0) - .short L(P1QA)-L(Got0) - .short L(P2QA)-L(Got0) - .short L(P3QA)-L(Got0) - .short L(P4QA)-L(Got0) - .short L(P5QA)-L(Got0) - .short L(P6QA)-L(Got0) - .short L(P7QA)-L(Got0) - - .short L(P0QB)-L(Got0) - .short L(P1QB)-L(Got0) - .short L(P2QB)-L(Got0) - .short L(P3QB)-L(Got0) - .short L(P4QB)-L(Got0) - .short L(P5QB)-L(Got0) - .short L(P6QB)-L(Got0) - .short L(P7QB)-L(Got0) - - .short L(P0QC)-L(Got0) - .short L(P1QC)-L(Got0) - .short L(P2QC)-L(Got0) - .short L(P3QC)-L(Got0) - .short L(P4QC)-L(Got0) - .short L(P5QC)-L(Got0) - .short L(P6QC)-L(Got0) - .short L(P7QC)-L(Got0) - - .short L(P0QD)-L(Got0) - .short L(P1QD)-L(Got0) - .short L(P2QD)-L(Got0) - .short L(P3QD)-L(Got0) - .short L(P4QD)-L(Got0) - .short L(P5QD)-L(Got0) - .short L(P6QD)-L(Got0) - .short L(P7QD)-L(Got0) - - .short L(P0QE)-L(Got0) - .short L(P1QE)-L(Got0) - .short L(P2QE)-L(Got0) - .short L(P3QE)-L(Got0) - .short L(P4QE)-L(Got0) - .short L(P5QE)-L(Got0) - .short L(P6QE)-L(Got0) - .short L(P7QE)-L(Got0) - - .short L(P0QF)-L(Got0) - .short L(P1QF)-L(Got0) - .short L(P2QF)-L(Got0) - .short L(P3QF)-L(Got0) - .short L(P4QF)-L(Got0) - .short L(P5QF)-L(Got0) - .short L(P6QF)-L(Got0) - .short L(P7QF)-L(Got0) - - .short L(P0QG)-L(Got0) - .short L(P1QG)-L(Got0) - .short L(P2QG)-L(Got0) - .short L(P3QG)-L(Got0) - .short L(P4QG)-L(Got0) - .short L(P5QG)-L(Got0) - .short L(P6QG)-L(Got0) - .short L(P7QG)-L(Got0) - - .short L(P0QH)-L(Got0) - .short L(P1QH)-L(Got0) - .short L(P2QH)-L(Got0) - .short L(P3QH)-L(Got0) - .short L(P4QH)-L(Got0) - .short L(P5QH)-L(Got0) - .short L(P6QH)-L(Got0) - .short L(P7QH)-L(Got0) - - .short L(P0QI)-L(Got0) -# ifdef USE_EXTRA_TABLE - .short L(P1QI)-L(Got0) - .short L(P2QI)-L(Got0) - .short L(P3QI)-L(Got0) - .short L(P4QI)-L(Got0) - .short L(P5QI)-L(Got0) - .short L(P6QI)-L(Got0) - .short L(P7QI)-L(Got0) -# endif -#endif - .popsection - - .balign 16 -#ifdef USE_EXTRA_TABLE -L(P1QI): mov %rdx,-0x91(%rdi) -#endif -L(P1QH): mov %rdx,-0x89(%rdi) -L(P1QG): mov %rdx,-0x81(%rdi) -# .balign 16 -L(P1QF): mov %rdx,-0x79(%rdi) -L(P1QE): mov %rdx,-0x71(%rdi) -L(P1QD): mov %rdx,-0x69(%rdi) -L(P1QC): mov %rdx,-0x61(%rdi) -L(P1QB): mov %rdx,-0x59(%rdi) -L(P1QA): mov %rdx,-0x51(%rdi) -L(P1Q9): mov %rdx,-0x49(%rdi) -L(P1Q8): mov %rdx,-0x41(%rdi) -L(P1Q7): mov %rdx,-0x39(%rdi) -L(P1Q6): mov %rdx,-0x31(%rdi) -L(P1Q5): mov %rdx,-0x29(%rdi) -L(P1Q4): mov %rdx,-0x21(%rdi) -L(P1Q3): mov %rdx,-0x19(%rdi) -L(P1Q2): mov %rdx,-0x11(%rdi) -L(P1Q1): mov %rdx,-0x9(%rdi) -L(P1Q0): mov %dl,-0x1(%rdi) - retq - - .balign 16 -L(P0QI): mov %rdx,-0x90(%rdi) -L(P0QH): mov %rdx,-0x88(%rdi) -# .balign 16 -L(P0QG): mov %rdx,-0x80(%rdi) -L(P0QF): mov %rdx,-0x78(%rdi) -L(P0QE): mov %rdx,-0x70(%rdi) -L(P0QD): mov %rdx,-0x68(%rdi) -L(P0QC): mov %rdx,-0x60(%rdi) -L(P0QB): mov %rdx,-0x58(%rdi) -L(P0QA): mov %rdx,-0x50(%rdi) -L(P0Q9): mov %rdx,-0x48(%rdi) -L(P0Q8): mov %rdx,-0x40(%rdi) -L(P0Q7): mov %rdx,-0x38(%rdi) -L(P0Q6): mov %rdx,-0x30(%rdi) -L(P0Q5): mov %rdx,-0x28(%rdi) -L(P0Q4): mov %rdx,-0x20(%rdi) -L(P0Q3): mov %rdx,-0x18(%rdi) -L(P0Q2): mov %rdx,-0x10(%rdi) -L(P0Q1): mov %rdx,-0x8(%rdi) -L(P0Q0): retq - - - .balign 16 -#ifdef USE_EXTRA_TABLE -L(P2QI): mov %rdx,-0x92(%rdi) -#endif -L(P2QH): mov %rdx,-0x8a(%rdi) -L(P2QG): mov %rdx,-0x82(%rdi) -# .balign 16 -L(P2QF): mov %rdx,-0x7a(%rdi) -L(P2QE): mov %rdx,-0x72(%rdi) -L(P2QD): mov %rdx,-0x6a(%rdi) -L(P2QC): mov %rdx,-0x62(%rdi) -L(P2QB): mov %rdx,-0x5a(%rdi) -L(P2QA): mov %rdx,-0x52(%rdi) -L(P2Q9): mov %rdx,-0x4a(%rdi) -L(P2Q8): mov %rdx,-0x42(%rdi) -L(P2Q7): mov %rdx,-0x3a(%rdi) -L(P2Q6): mov %rdx,-0x32(%rdi) -L(P2Q5): mov %rdx,-0x2a(%rdi) -L(P2Q4): mov %rdx,-0x22(%rdi) -L(P2Q3): mov %rdx,-0x1a(%rdi) -L(P2Q2): mov %rdx,-0x12(%rdi) -L(P2Q1): mov %rdx,-0xa(%rdi) -L(P2Q0): mov %dx,-0x2(%rdi) - retq - - .balign 16 -#ifdef USE_EXTRA_TABLE -L(P3QI): mov %rdx,-0x93(%rdi) -#endif -L(P3QH): mov %rdx,-0x8b(%rdi) -L(P3QG): mov %rdx,-0x83(%rdi) -# .balign 16 -L(P3QF): mov %rdx,-0x7b(%rdi) -L(P3QE): mov %rdx,-0x73(%rdi) -L(P3QD): mov %rdx,-0x6b(%rdi) -L(P3QC): mov %rdx,-0x63(%rdi) -L(P3QB): mov %rdx,-0x5b(%rdi) -L(P3QA): mov %rdx,-0x53(%rdi) -L(P3Q9): mov %rdx,-0x4b(%rdi) -L(P3Q8): mov %rdx,-0x43(%rdi) -L(P3Q7): mov %rdx,-0x3b(%rdi) -L(P3Q6): mov %rdx,-0x33(%rdi) -L(P3Q5): mov %rdx,-0x2b(%rdi) -L(P3Q4): mov %rdx,-0x23(%rdi) -L(P3Q3): mov %rdx,-0x1b(%rdi) -L(P3Q2): mov %rdx,-0x13(%rdi) -L(P3Q1): mov %rdx,-0xb(%rdi) -L(P3Q0): mov %dx,-0x3(%rdi) - mov %dl,-0x1(%rdi) - retq - - .balign 16 -#ifdef USE_EXTRA_TABLE -L(P4QI): mov %rdx,-0x94(%rdi) -#endif -L(P4QH): mov %rdx,-0x8c(%rdi) -L(P4QG): mov %rdx,-0x84(%rdi) -# .balign 16 -L(P4QF): mov %rdx,-0x7c(%rdi) -L(P4QE): mov %rdx,-0x74(%rdi) -L(P4QD): mov %rdx,-0x6c(%rdi) -L(P4QC): mov %rdx,-0x64(%rdi) -L(P4QB): mov %rdx,-0x5c(%rdi) -L(P4QA): mov %rdx,-0x54(%rdi) -L(P4Q9): mov %rdx,-0x4c(%rdi) -L(P4Q8): mov %rdx,-0x44(%rdi) -L(P4Q7): mov %rdx,-0x3c(%rdi) -L(P4Q6): mov %rdx,-0x34(%rdi) -L(P4Q5): mov %rdx,-0x2c(%rdi) -L(P4Q4): mov %rdx,-0x24(%rdi) -L(P4Q3): mov %rdx,-0x1c(%rdi) -L(P4Q2): mov %rdx,-0x14(%rdi) -L(P4Q1): mov %rdx,-0xc(%rdi) -L(P4Q0): mov %edx,-0x4(%rdi) - retq - - .balign 16 -#ifdef USE_EXTRA_TABLE -L(P5QI): mov %rdx,-0x95(%rdi) -#endif -L(P5QH): mov %rdx,-0x8d(%rdi) -L(P5QG): mov %rdx,-0x85(%rdi) -# .balign 16 -L(P5QF): mov %rdx,-0x7d(%rdi) -L(P5QE): mov %rdx,-0x75(%rdi) -L(P5QD): mov %rdx,-0x6d(%rdi) -L(P5QC): mov %rdx,-0x65(%rdi) -L(P5QB): mov %rdx,-0x5d(%rdi) -L(P5QA): mov %rdx,-0x55(%rdi) -L(P5Q9): mov %rdx,-0x4d(%rdi) -L(P5Q8): mov %rdx,-0x45(%rdi) -L(P5Q7): mov %rdx,-0x3d(%rdi) -L(P5Q6): mov %rdx,-0x35(%rdi) -L(P5Q5): mov %rdx,-0x2d(%rdi) -L(P5Q4): mov %rdx,-0x25(%rdi) -L(P5Q3): mov %rdx,-0x1d(%rdi) -L(P5Q2): mov %rdx,-0x15(%rdi) -L(P5Q1): mov %rdx,-0xd(%rdi) -L(P5Q0): mov %edx,-0x5(%rdi) - mov %dl,-0x1(%rdi) - retq - - .balign 16 -#ifdef USE_EXTRA_TABLE -L(P6QI): mov %rdx,-0x96(%rdi) -#endif -L(P6QH): mov %rdx,-0x8e(%rdi) -L(P6QG): mov %rdx,-0x86(%rdi) -# .balign 16 -L(P6QF): mov %rdx,-0x7e(%rdi) -L(P6QE): mov %rdx,-0x76(%rdi) -L(P6QD): mov %rdx,-0x6e(%rdi) -L(P6QC): mov %rdx,-0x66(%rdi) -L(P6QB): mov %rdx,-0x5e(%rdi) -L(P6QA): mov %rdx,-0x56(%rdi) -L(P6Q9): mov %rdx,-0x4e(%rdi) -L(P6Q8): mov %rdx,-0x46(%rdi) -L(P6Q7): mov %rdx,-0x3e(%rdi) -L(P6Q6): mov %rdx,-0x36(%rdi) -L(P6Q5): mov %rdx,-0x2e(%rdi) -L(P6Q4): mov %rdx,-0x26(%rdi) -L(P6Q3): mov %rdx,-0x1e(%rdi) -L(P6Q2): mov %rdx,-0x16(%rdi) -L(P6Q1): mov %rdx,-0xe(%rdi) -L(P6Q0): mov %edx,-0x6(%rdi) - mov %dx,-0x2(%rdi) - retq - - .balign 16 -#ifdef USE_EXTRA_TABLE -L(P7QI): mov %rdx,-0x97(%rdi) -#endif -L(P7QH): mov %rdx,-0x8f(%rdi) -L(P7QG): mov %rdx,-0x87(%rdi) -# .balign 16 -L(P7QF): mov %rdx,-0x7f(%rdi) -L(P7QE): mov %rdx,-0x77(%rdi) -L(P7QD): mov %rdx,-0x6f(%rdi) -L(P7QC): mov %rdx,-0x67(%rdi) -L(P7QB): mov %rdx,-0x5f(%rdi) -L(P7QA): mov %rdx,-0x57(%rdi) -L(P7Q9): mov %rdx,-0x4f(%rdi) -L(P7Q8): mov %rdx,-0x47(%rdi) -L(P7Q7): mov %rdx,-0x3f(%rdi) -L(P7Q6): mov %rdx,-0x37(%rdi) -L(P7Q5): mov %rdx,-0x2f(%rdi) -L(P7Q4): mov %rdx,-0x27(%rdi) -L(P7Q3): mov %rdx,-0x1f(%rdi) -L(P7Q2): mov %rdx,-0x17(%rdi) -L(P7Q1): mov %rdx,-0xf(%rdi) -L(P7Q0): mov %edx,-0x7(%rdi) - mov %dx,-0x3(%rdi) - mov %dl,-0x1(%rdi) - retq - - .balign 16 -L(ck_mem_ops_method): - -# align to 16 byte boundary first - #test $0xf,%rdi - #jz L(aligned_now) - mov $0x10,%r10 - mov %rdi,%r9 - and $0xf,%r9 - sub %r9,%r10 - and $0xf,%r10 - add %r10,%rdi - sub %r10,%r8 -#ifndef PIC - lea L(AliPxQx)(%rip),%r11 - jmpq *(%r11,%r10,8) -#else - lea L(aligned_now)(%rip), %r11 - lea L(AliPxQx)(%rip),%rcx - movswq (%rcx,%r10,2),%rcx - lea (%rcx,%r11,1),%r11 - jmpq *%r11 -#endif - - .pushsection .rodata - .balign 16 -#ifndef PIC -L(AliPxQx): - .quad L(aligned_now), L(A1Q0), L(A2Q0), L(A3Q0) - .quad L(A4Q0), L(A5Q0), L(A6Q0), L(A7Q0) - .quad L(A0Q1), L(A1Q1), L(A2Q1), L(A3Q1) - .quad L(A4Q1), L(A5Q1), L(A6Q1), L(A7Q1) -#else -L(AliPxQx): - .short L(aligned_now)-L(aligned_now) - .short L(A1Q0)-L(aligned_now) - .short L(A2Q0)-L(aligned_now) - .short L(A3Q0)-L(aligned_now) - .short L(A4Q0)-L(aligned_now) - .short L(A5Q0)-L(aligned_now) - .short L(A6Q0)-L(aligned_now) - .short L(A7Q0)-L(aligned_now) - - .short L(A0Q1)-L(aligned_now) - .short L(A1Q1)-L(aligned_now) - .short L(A2Q1)-L(aligned_now) - .short L(A3Q1)-L(aligned_now) - .short L(A4Q1)-L(aligned_now) - .short L(A5Q1)-L(aligned_now) - .short L(A6Q1)-L(aligned_now) - .short L(A7Q1)-L(aligned_now) -#endif - .popsection - - .balign 16 -L(A5Q1): mov %dl,-0xd(%rdi) -L(A4Q1): mov %edx,-0xc(%rdi) -L(A0Q1): mov %rdx,-0x8(%rdi) -L(A0Q0): jmp L(aligned_now) - - .balign 16 -L(A1Q1): mov %dl,-0x9(%rdi) - mov %rdx,-0x8(%rdi) - jmp L(aligned_now) - - .balign 16 -L(A1Q0): mov %dl,-0x1(%rdi) - jmp L(aligned_now) - - .balign 16 -L(A3Q1): mov %dl,-0xb(%rdi) -L(A2Q1): mov %dx,-0xa(%rdi) - mov %rdx,-0x8(%rdi) - jmp L(aligned_now) - - .balign 16 -L(A3Q0): mov %dl,-0x3(%rdi) -L(A2Q0): mov %dx,-0x2(%rdi) - jmp L(aligned_now) - - .balign 16 -L(A5Q0): mov %dl,-0x5(%rdi) -L(A4Q0): mov %edx,-0x4(%rdi) - jmp L(aligned_now) - - .balign 16 -L(A7Q1): mov %dl,-0xf(%rdi) -L(A6Q1): mov %dx,-0xe(%rdi) - mov %edx,-0xc(%rdi) - mov %rdx,-0x8(%rdi) - jmp L(aligned_now) - - .balign 16 -L(A7Q0): mov %dl,-0x7(%rdi) -L(A6Q0): mov %dx,-0x6(%rdi) - mov %edx,-0x4(%rdi) - -#ifndef USE_MULTIARCH - jmp L(aligned_now) - -L(SSE_pre): -#else -L(aligned_now): -#endif -#if !defined USE_MULTIARCH || defined USE_SSE2 - # fill RegXMM0 with the pattern - movd %rdx,%xmm0 - punpcklqdq %xmm0,%xmm0 - - cmp $0xb0,%r8 # 176 - jae L(byte32sse2_pre) - - add %r8,%rdi -# ifndef PIC - lea L(SSExDx)(%rip),%r9 - jmpq *(%r9,%r8,8) -# else - lea L(SSE0Q0)(%rip),%r9 - lea L(SSExDx)(%rip),%rcx - movswq (%rcx,%r8,2),%rcx - lea (%rcx,%r9,1),%r9 - jmpq *%r9 -# endif - -L(SSE0QB): movdqa %xmm0,-0xb0(%rdi) -L(SSE0QA): movdqa %xmm0,-0xa0(%rdi) -L(SSE0Q9): movdqa %xmm0,-0x90(%rdi) -L(SSE0Q8): movdqa %xmm0,-0x80(%rdi) -L(SSE0Q7): movdqa %xmm0,-0x70(%rdi) -L(SSE0Q6): movdqa %xmm0,-0x60(%rdi) -L(SSE0Q5): movdqa %xmm0,-0x50(%rdi) -L(SSE0Q4): movdqa %xmm0,-0x40(%rdi) -L(SSE0Q3): movdqa %xmm0,-0x30(%rdi) -L(SSE0Q2): movdqa %xmm0,-0x20(%rdi) -L(SSE0Q1): movdqa %xmm0,-0x10(%rdi) -L(SSE0Q0): retq - -L(SSE1QB): movdqa %xmm0,-0xb1(%rdi) -L(SSE1QA): movdqa %xmm0,-0xa1(%rdi) -L(SSE1Q9): movdqa %xmm0,-0x91(%rdi) -L(SSE1Q8): movdqa %xmm0,-0x81(%rdi) -L(SSE1Q7): movdqa %xmm0,-0x71(%rdi) -L(SSE1Q6): movdqa %xmm0,-0x61(%rdi) -L(SSE1Q5): movdqa %xmm0,-0x51(%rdi) -L(SSE1Q4): movdqa %xmm0,-0x41(%rdi) -L(SSE1Q3): movdqa %xmm0,-0x31(%rdi) -L(SSE1Q2): movdqa %xmm0,-0x21(%rdi) -L(SSE1Q1): movdqa %xmm0,-0x11(%rdi) -L(SSE1Q0): mov %dl,-0x1(%rdi) - retq - -L(SSE2QB): movdqa %xmm0,-0xb2(%rdi) -L(SSE2QA): movdqa %xmm0,-0xa2(%rdi) -L(SSE2Q9): movdqa %xmm0,-0x92(%rdi) -L(SSE2Q8): movdqa %xmm0,-0x82(%rdi) -L(SSE2Q7): movdqa %xmm0,-0x72(%rdi) -L(SSE2Q6): movdqa %xmm0,-0x62(%rdi) -L(SSE2Q5): movdqa %xmm0,-0x52(%rdi) -L(SSE2Q4): movdqa %xmm0,-0x42(%rdi) -L(SSE2Q3): movdqa %xmm0,-0x32(%rdi) -L(SSE2Q2): movdqa %xmm0,-0x22(%rdi) -L(SSE2Q1): movdqa %xmm0,-0x12(%rdi) -L(SSE2Q0): mov %dx,-0x2(%rdi) - retq - -L(SSE3QB): movdqa %xmm0,-0xb3(%rdi) -L(SSE3QA): movdqa %xmm0,-0xa3(%rdi) -L(SSE3Q9): movdqa %xmm0,-0x93(%rdi) -L(SSE3Q8): movdqa %xmm0,-0x83(%rdi) -L(SSE3Q7): movdqa %xmm0,-0x73(%rdi) -L(SSE3Q6): movdqa %xmm0,-0x63(%rdi) -L(SSE3Q5): movdqa %xmm0,-0x53(%rdi) -L(SSE3Q4): movdqa %xmm0,-0x43(%rdi) -L(SSE3Q3): movdqa %xmm0,-0x33(%rdi) -L(SSE3Q2): movdqa %xmm0,-0x23(%rdi) -L(SSE3Q1): movdqa %xmm0,-0x13(%rdi) -L(SSE3Q0): mov %dx,-0x3(%rdi) - mov %dl,-0x1(%rdi) - retq - -L(SSE4QB): movdqa %xmm0,-0xb4(%rdi) -L(SSE4QA): movdqa %xmm0,-0xa4(%rdi) -L(SSE4Q9): movdqa %xmm0,-0x94(%rdi) -L(SSE4Q8): movdqa %xmm0,-0x84(%rdi) -L(SSE4Q7): movdqa %xmm0,-0x74(%rdi) -L(SSE4Q6): movdqa %xmm0,-0x64(%rdi) -L(SSE4Q5): movdqa %xmm0,-0x54(%rdi) -L(SSE4Q4): movdqa %xmm0,-0x44(%rdi) -L(SSE4Q3): movdqa %xmm0,-0x34(%rdi) -L(SSE4Q2): movdqa %xmm0,-0x24(%rdi) -L(SSE4Q1): movdqa %xmm0,-0x14(%rdi) -L(SSE4Q0): mov %edx,-0x4(%rdi) - retq - -L(SSE5QB): movdqa %xmm0,-0xb5(%rdi) -L(SSE5QA): movdqa %xmm0,-0xa5(%rdi) -L(SSE5Q9): movdqa %xmm0,-0x95(%rdi) -L(SSE5Q8): movdqa %xmm0,-0x85(%rdi) -L(SSE5Q7): movdqa %xmm0,-0x75(%rdi) -L(SSE5Q6): movdqa %xmm0,-0x65(%rdi) -L(SSE5Q5): movdqa %xmm0,-0x55(%rdi) -L(SSE5Q4): movdqa %xmm0,-0x45(%rdi) -L(SSE5Q3): movdqa %xmm0,-0x35(%rdi) -L(SSE5Q2): movdqa %xmm0,-0x25(%rdi) -L(SSE5Q1): movdqa %xmm0,-0x15(%rdi) -L(SSE5Q0): mov %edx,-0x5(%rdi) - mov %dl,-0x1(%rdi) - retq - - -L(SSE6QB): movdqa %xmm0,-0xb6(%rdi) -L(SSE6QA): movdqa %xmm0,-0xa6(%rdi) -L(SSE6Q9): movdqa %xmm0,-0x96(%rdi) -L(SSE6Q8): movdqa %xmm0,-0x86(%rdi) -L(SSE6Q7): movdqa %xmm0,-0x76(%rdi) -L(SSE6Q6): movdqa %xmm0,-0x66(%rdi) -L(SSE6Q5): movdqa %xmm0,-0x56(%rdi) -L(SSE6Q4): movdqa %xmm0,-0x46(%rdi) -L(SSE6Q3): movdqa %xmm0,-0x36(%rdi) -L(SSE6Q2): movdqa %xmm0,-0x26(%rdi) -L(SSE6Q1): movdqa %xmm0,-0x16(%rdi) -L(SSE6Q0): mov %edx,-0x6(%rdi) - mov %dx,-0x2(%rdi) - retq - -L(SSE7QB): movdqa %xmm0,-0xb7(%rdi) -L(SSE7QA): movdqa %xmm0,-0xa7(%rdi) -L(SSE7Q9): movdqa %xmm0,-0x97(%rdi) -L(SSE7Q8): movdqa %xmm0,-0x87(%rdi) -L(SSE7Q7): movdqa %xmm0,-0x77(%rdi) -L(SSE7Q6): movdqa %xmm0,-0x67(%rdi) -L(SSE7Q5): movdqa %xmm0,-0x57(%rdi) -L(SSE7Q4): movdqa %xmm0,-0x47(%rdi) -L(SSE7Q3): movdqa %xmm0,-0x37(%rdi) -L(SSE7Q2): movdqa %xmm0,-0x27(%rdi) -L(SSE7Q1): movdqa %xmm0,-0x17(%rdi) -L(SSE7Q0): mov %edx,-0x7(%rdi) - mov %dx,-0x3(%rdi) - mov %dl,-0x1(%rdi) - retq - -L(SSE8QB): movdqa %xmm0,-0xb8(%rdi) -L(SSE8QA): movdqa %xmm0,-0xa8(%rdi) -L(SSE8Q9): movdqa %xmm0,-0x98(%rdi) -L(SSE8Q8): movdqa %xmm0,-0x88(%rdi) -L(SSE8Q7): movdqa %xmm0,-0x78(%rdi) -L(SSE8Q6): movdqa %xmm0,-0x68(%rdi) -L(SSE8Q5): movdqa %xmm0,-0x58(%rdi) -L(SSE8Q4): movdqa %xmm0,-0x48(%rdi) -L(SSE8Q3): movdqa %xmm0,-0x38(%rdi) -L(SSE8Q2): movdqa %xmm0,-0x28(%rdi) -L(SSE8Q1): movdqa %xmm0,-0x18(%rdi) -L(SSE8Q0): mov %rdx,-0x8(%rdi) - retq - -L(SSE9QB): movdqa %xmm0,-0xb9(%rdi) -L(SSE9QA): movdqa %xmm0,-0xa9(%rdi) -L(SSE9Q9): movdqa %xmm0,-0x99(%rdi) -L(SSE9Q8): movdqa %xmm0,-0x89(%rdi) -L(SSE9Q7): movdqa %xmm0,-0x79(%rdi) -L(SSE9Q6): movdqa %xmm0,-0x69(%rdi) -L(SSE9Q5): movdqa %xmm0,-0x59(%rdi) -L(SSE9Q4): movdqa %xmm0,-0x49(%rdi) -L(SSE9Q3): movdqa %xmm0,-0x39(%rdi) -L(SSE9Q2): movdqa %xmm0,-0x29(%rdi) -L(SSE9Q1): movdqa %xmm0,-0x19(%rdi) -L(SSE9Q0): mov %rdx,-0x9(%rdi) - mov %dl,-0x1(%rdi) - retq - -L(SSE10QB): movdqa %xmm0,-0xba(%rdi) -L(SSE10QA): movdqa %xmm0,-0xaa(%rdi) -L(SSE10Q9): movdqa %xmm0,-0x9a(%rdi) -L(SSE10Q8): movdqa %xmm0,-0x8a(%rdi) -L(SSE10Q7): movdqa %xmm0,-0x7a(%rdi) -L(SSE10Q6): movdqa %xmm0,-0x6a(%rdi) -L(SSE10Q5): movdqa %xmm0,-0x5a(%rdi) -L(SSE10Q4): movdqa %xmm0,-0x4a(%rdi) -L(SSE10Q3): movdqa %xmm0,-0x3a(%rdi) -L(SSE10Q2): movdqa %xmm0,-0x2a(%rdi) -L(SSE10Q1): movdqa %xmm0,- |
