-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathKmovTest_Asm.asm
165 lines (119 loc) · 1.96 KB
/
KmovTest_Asm.asm
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
.data
tempmem dq 00101010101010101h
repeats equ 1000000h
.code
KmovTest01 proc
push rbx
push rdi
push rsi
kxnorq k0, k0, k0
kxnorq k1, k1, k1
kxnorq k2, k2, k2
kxnorq k3, k3, k3
mfence
rdtscp
lfence
mov esi, eax
mov edi, edx
mov ecx, repeats
startlabel:
kmovw ebx, k0 ;P0
kmovw edx, k0 ;P0
kmovw eax, k0 ;P0
kmovw r8d, k0 ;P0
popcnt ebx, ebx ;P1
popcnt edx, edx ;P1
popcnt eax, eax ;P1
popcnt r8d, r8d ;P1
add ebx, edx ;P0156
add eax, r8d ;P0156
add eax, ebx ;P0156
kmovw k0, eax ;P5
dec ecx
jnz startlabel
mfence
rdtscp
lfence
shl rdx, 20h
shl rdi, 20h
or rax, rdx
or rsi, rdi
sub rax, rsi
pop rsi
pop rdi
pop rbx
ret
KmovTest01 endp
KmovTest02 proc
push rbx
push rdi
push rsi
kxnorq k0, k0, k0
kxorq k1, k1, k1
kxorq k2, k2, k2
kxorq k3, k3, k3
mfence
rdtscp
lfence
mov esi, eax
mov edi, edx
mov ecx, repeats
startlabel:
kunpckwd k1, k0, k0 ;P5
kunpckwd k2, k0, k0 ;P5
kunpckdq k3, k1, k2 ;P5
kmovq rax, k3 ;P0
popcnt rax, rax ;P1
kmovq k0, rax ;P5
dec ecx
jnz startlabel
mfence
rdtscp
lfence
shl rdx, 20h
shl rdi, 20h
or rax, rdx
or rsi, rdi
sub rax, rsi
pop rsi
pop rdi
pop rbx
ret
KmovTest02 endp
KmovTest03 proc
push rbx
push rdi
push rsi
kxnorq k0, k0, k0
kxnorq k1, k1, k1
kxnorq k2, k2, k2
kxnorq k3, k3, k3
mfence
rdtscp
lfence
mov esi, eax
mov edi, edx
mov ecx, repeats
startlabel:
kmovw word ptr [tempmem + 0], k0
kmovw word ptr [tempmem + 2], k0
kmovw word ptr [tempmem + 4], k0
kmovw word ptr [tempmem + 6], k0
popcnt rax, qword ptr [tempmem]
kmovq k0, rax
dec ecx
jnz startlabel
mfence
rdtscp
lfence
shl rdx, 20h
shl rdi, 20h
or rax, rdx
or rsi, rdi
sub rax, rsi
pop rsi
pop rdi
pop rbx
ret
KmovTest03 endp
end