-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathasm.S
64 lines (56 loc) · 1.07 KB
/
asm.S
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
.text
.intel_syntax noprefix
.globl memset_loop
.globl memset_fsrm
.globl memset_avx2
.globl memset_avx2_nt
.globl memset_clzero
; RDI = addr
; RSI = value
; RDX = length
.align 4096
memset_loop:
._loop:
movq [rdi], rsi
addq rdi, 8
subq rdx, 8
jnz ._loop
ret
.align 4096
memset_fsrm:
mov rax, rsi
mov rcx, rdx
rep stosb
ret
.align 4096
memset_avx2:
vpxor xmm0, xmm0, xmm0
vpinsrb xmm0, xmm0, rsi, 0
vpbroadcastb ymm0, xmm0
._avx2:
vmovdqu ymmword ptr [rdi], ymm0
addq rdi, 32
subq rdx, 32
jnz ._avx2
ret
.align 4096
memset_avx2_nt:
vpxor xmm0, xmm0, xmm0
vpinsrb xmm0, xmm0, rsi, 0
vpbroadcastb ymm0, xmm0
._avx2_nt:
vmovntdq ymmword ptr [rdi], ymm0
addq rdi, 32
subq rdx, 32
jnz ._avx2_nt
ret
.align 4096
memset_clzero:
movq rax, rdi
._clzero:
clzero
addq rax, 64
subq rdx, 64
jnz ._clzero
ret
.section .note.GNU-stack, "", @progbits