-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmacro-vs-template_Compiler-Explorer.S
301 lines (301 loc) · 8.85 KB
/
macro-vs-template_Compiler-Explorer.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
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
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
Complex::Complex(double, double):
push rbp
mov rbp, rsp
mov QWORD PTR [rbp-8], rdi
movsd QWORD PTR [rbp-16], xmm0
movsd QWORD PTR [rbp-24], xmm1
mov rax, QWORD PTR [rbp-8]
movsd xmm0, QWORD PTR [rbp-16]
movsd QWORD PTR [rax], xmm0
mov rax, QWORD PTR [rbp-8]
movsd xmm0, QWORD PTR [rbp-24]
movsd QWORD PTR [rax+8], xmm0
nop
pop rbp
ret
Complex::Complex(double*):
push rbp
mov rbp, rsp
mov QWORD PTR [rbp-8], rdi
mov QWORD PTR [rbp-16], rsi
mov rax, QWORD PTR [rbp-16]
movsd xmm0, QWORD PTR [rax]
mov rax, QWORD PTR [rbp-8]
movsd QWORD PTR [rax], xmm0
mov rax, QWORD PTR [rbp-16]
movsd xmm0, QWORD PTR [rax+8]
mov rax, QWORD PTR [rbp-8]
movsd QWORD PTR [rax+8], xmm0
nop
pop rbp
ret
operator*(Complex const&, Complex const&):
push rbp
mov rbp, rsp
push rbx
sub rsp, 40
mov QWORD PTR [rbp-40], rdi
mov QWORD PTR [rbp-48], rsi
mov rax, QWORD PTR [rbp-40]
movsd xmm1, QWORD PTR [rax]
mov rax, QWORD PTR [rbp-48]
movsd xmm0, QWORD PTR [rax]
mulsd xmm0, xmm1
mov rax, QWORD PTR [rbp-40]
movsd xmm2, QWORD PTR [rax+8]
mov rax, QWORD PTR [rbp-48]
movsd xmm1, QWORD PTR [rax+8]
mulsd xmm1, xmm2
lea rax, [rbp-32]
mov rdi, rax
call Complex::Complex(double, double)
mov rax, QWORD PTR [rbp-32]
mov rdx, QWORD PTR [rbp-24]
mov rcx, rax
mov rbx, rdx
movq xmm0, rcx
movq xmm1, rdx
add rsp, 40
pop rbx
pop rbp
ret
cubeme(Complex const&):
push rbp
mov rbp, rsp
push rbx
sub rsp, 40
mov QWORD PTR [rbp-40], rdi
mov rdx, QWORD PTR [rbp-40]
mov rax, QWORD PTR [rbp-40]
mov rsi, rdx
mov rdi, rax
call operator*(Complex const&, Complex const&)
movq rax, xmm0
movapd xmm0, xmm1
mov QWORD PTR [rbp-32], rax
movsd QWORD PTR [rbp-24], xmm0
mov rdx, QWORD PTR [rbp-40]
lea rax, [rbp-32]
mov rsi, rdx
mov rdi, rax
call operator*(Complex const&, Complex const&)
mov eax, 0
mov edx, 0
movq rax, xmm0
movq rdx, xmm1
mov rcx, rax
mov rbx, rdx
movq xmm0, rcx
movq xmm1, rdx
add rsp, 40
pop rbx
pop rbp
ret
sqrt(Complex const&):
push rbp
mov rbp, rsp
push rbx
sub rsp, 88
mov QWORD PTR [rbp-88], rdi
pxor xmm0, xmm0
movsd QWORD PTR [rbp-80], xmm0
pxor xmm0, xmm0
movsd QWORD PTR [rbp-72], xmm0
mov rax, QWORD PTR [rbp-88]
movsd xmm0, QWORD PTR [rax+8]
pxor xmm1, xmm1
ucomisd xmm0, xmm1
jp .L8
pxor xmm1, xmm1
ucomisd xmm0, xmm1
jne .L8
mov rax, QWORD PTR [rbp-88]
movsd xmm1, QWORD PTR [rax]
pxor xmm0, xmm0
comisd xmm0, xmm1
jbe .L8
lea rdx, [rbp-80]
lea rax, [rbp-64]
mov rsi, rdx
mov rdi, rax
call Complex::Complex(double*)
mov rax, QWORD PTR [rbp-64]
mov rdx, QWORD PTR [rbp-56]
jmp .L14
.L8:
mov rax, QWORD PTR [rbp-88]
movsd xmm1, QWORD PTR [rax]
mov rax, QWORD PTR [rbp-88]
movsd xmm0, QWORD PTR [rax]
mulsd xmm1, xmm0
mov rax, QWORD PTR [rbp-88]
movsd xmm2, QWORD PTR [rax+8]
mov rax, QWORD PTR [rbp-88]
movsd xmm0, QWORD PTR [rax+8]
mulsd xmm0, xmm2
addsd xmm0, xmm1
call sqrt
movq rax, xmm0
mov QWORD PTR [rbp-24], rax
pxor xmm0, xmm0
ucomisd xmm0, QWORD PTR [rbp-24]
jp .L17
pxor xmm0, xmm0
ucomisd xmm0, QWORD PTR [rbp-24]
je .L12
.L17:
mov rax, QWORD PTR [rbp-88]
movsd xmm0, QWORD PTR [rax+8]
divsd xmm0, QWORD PTR [rbp-24]
call asin
movq rax, xmm0
mov QWORD PTR [rbp-32], rax
mov rax, QWORD PTR [rbp-24]
movq xmm0, rax
call sqrt
movsd QWORD PTR [rbp-96], xmm0
movsd xmm0, QWORD PTR [rbp-32]
movsd xmm1, QWORD PTR .LC1[rip]
divsd xmm0, xmm1
call cos
mulsd xmm0, QWORD PTR [rbp-96]
movsd QWORD PTR [rbp-80], xmm0
mov rax, QWORD PTR [rbp-24]
movq xmm0, rax
call sqrt
movsd QWORD PTR [rbp-96], xmm0
movsd xmm0, QWORD PTR [rbp-32]
movsd xmm1, QWORD PTR .LC1[rip]
divsd xmm0, xmm1
call sin
mulsd xmm0, QWORD PTR [rbp-96]
movsd QWORD PTR [rbp-72], xmm0
.L12:
lea rdx, [rbp-80]
lea rax, [rbp-48]
mov rsi, rdx
mov rdi, rax
call Complex::Complex(double*)
mov rax, QWORD PTR [rbp-48]
mov rdx, QWORD PTR [rbp-40]
.L14:
mov rcx, rax
mov rbx, rdx
movq xmm0, rcx
movq xmm1, rdx
add rsp, 88
pop rbx
pop rbp
ret
stupidmacro():
push rbp
mov rbp, rsp
sub rsp, 80
movsd xmm0, QWORD PTR .LC2[rip]
movsd QWORD PTR [rbp-80], xmm0
movsd xmm0, QWORD PTR .LC3[rip]
movsd QWORD PTR [rbp-72], xmm0
lea rax, [rbp-80]
mov rdi, rax
call sqrt(Complex const&)
movq rax, xmm0
movapd xmm0, xmm1
mov QWORD PTR [rbp-64], rax
movsd QWORD PTR [rbp-56], xmm0
lea rax, [rbp-80]
mov rdi, rax
call sqrt(Complex const&)
movq rax, xmm0
movapd xmm0, xmm1
mov QWORD PTR [rbp-32], rax
movsd QWORD PTR [rbp-24], xmm0
lea rax, [rbp-80]
mov rdi, rax
call sqrt(Complex const&)
movq rax, xmm0
movapd xmm0, xmm1
mov QWORD PTR [rbp-16], rax
movsd QWORD PTR [rbp-8], xmm0
lea rdx, [rbp-32]
lea rax, [rbp-16]
mov rsi, rdx
mov rdi, rax
call operator*(Complex const&, Complex const&)
movq rax, xmm0
movapd xmm0, xmm1
mov QWORD PTR [rbp-48], rax
movsd QWORD PTR [rbp-40], xmm0
lea rdx, [rbp-64]
lea rax, [rbp-48]
mov rsi, rdx
mov rdi, rax
call operator*(Complex const&, Complex const&)
mov eax, 0
mov edx, 0
movq rax, xmm0
movq rdx, xmm1
nop
leave
ret
constexprversion():
push rbp
mov rbp, rsp
sub rsp, 32
movsd xmm0, QWORD PTR .LC2[rip]
movsd QWORD PTR [rbp-32], xmm0
movsd xmm0, QWORD PTR .LC3[rip]
movsd QWORD PTR [rbp-24], xmm0
lea rax, [rbp-32]
mov rdi, rax
call sqrt(Complex const&)
movq rax, xmm0
movapd xmm0, xmm1
mov QWORD PTR [rbp-16], rax
movsd QWORD PTR [rbp-8], xmm0
lea rax, [rbp-16]
mov rdi, rax
call cubeme(Complex const&)
mov eax, 0
mov edx, 0
movq rax, xmm0
movq rdx, xmm1
nop
leave
ret
__static_initialization_and_destruction_0(int, int):
push rbp
mov rbp, rsp
sub rsp, 16
mov DWORD PTR [rbp-4], edi
mov DWORD PTR [rbp-8], esi
cmp DWORD PTR [rbp-4], 1
jne .L22
cmp DWORD PTR [rbp-8], 65535
jne .L22
mov edi, OFFSET FLAT:_ZStL8__ioinit
call std::ios_base::Init::Init() [complete object constructor]
mov edx, OFFSET FLAT:__dso_handle
mov esi, OFFSET FLAT:_ZStL8__ioinit
mov edi, OFFSET FLAT:_ZNSt8ios_base4InitD1Ev
call __cxa_atexit
.L22:
nop
leave
ret
_GLOBAL__sub_I_sqrt(Complex const&):
push rbp
mov rbp, rsp
mov esi, 65535
mov edi, 1
call __static_initialization_and_destruction_0(int, int)
pop rbp
ret
.LC1:
.long 0
.long 1073741824
.LC2:
.long 0
.long 1077608448
.LC3:
.long 0
.long 1076559872