| .global memset |
| .type memset,@function |
| memset: |
| movzbq %sil,%rax |
| mov $0x101010101010101,%r8 |
| imul %r8,%rax |
| |
| cmp $126,%rdx |
| ja 2f |
| |
| test %edx,%edx |
| jz 1f |
| |
| mov %sil,(%rdi) |
| mov %sil,-1(%rdi,%rdx) |
| cmp $2,%edx |
| jbe 1f |
| |
| mov %ax,1(%rdi) |
| mov %ax,(-1-2)(%rdi,%rdx) |
| cmp $6,%edx |
| jbe 1f |
| |
| mov %eax,(1+2)(%rdi) |
| mov %eax,(-1-2-4)(%rdi,%rdx) |
| cmp $14,%edx |
| jbe 1f |
| |
| mov %rax,(1+2+4)(%rdi) |
| mov %rax,(-1-2-4-8)(%rdi,%rdx) |
| cmp $30,%edx |
| jbe 1f |
| |
| mov %rax,(1+2+4+8)(%rdi) |
| mov %rax,(1+2+4+8+8)(%rdi) |
| mov %rax,(-1-2-4-8-16)(%rdi,%rdx) |
| mov %rax,(-1-2-4-8-8)(%rdi,%rdx) |
| cmp $62,%edx |
| jbe 1f |
| |
| mov %rax,(1+2+4+8+16)(%rdi) |
| mov %rax,(1+2+4+8+16+8)(%rdi) |
| mov %rax,(1+2+4+8+16+16)(%rdi) |
| mov %rax,(1+2+4+8+16+24)(%rdi) |
| mov %rax,(-1-2-4-8-16-32)(%rdi,%rdx) |
| mov %rax,(-1-2-4-8-16-24)(%rdi,%rdx) |
| mov %rax,(-1-2-4-8-16-16)(%rdi,%rdx) |
| mov %rax,(-1-2-4-8-16-8)(%rdi,%rdx) |
| |
| 1: mov %rdi,%rax |
| ret |
| |
| 2: test $15,%edi |
| mov %rdi,%r8 |
| mov %rax,-8(%rdi,%rdx) |
| mov %rdx,%rcx |
| jnz 2f |
| |
| 1: shr $3,%rcx |
| rep |
| stosq |
| mov %r8,%rax |
| ret |
| |
| 2: xor %edx,%edx |
| sub %edi,%edx |
| and $15,%edx |
| mov %rax,(%rdi) |
| mov %rax,8(%rdi) |
| sub %rdx,%rcx |
| add %rdx,%rdi |
| jmp 1b |