@@ -6,122 +6,42 @@ define void @add(i256* %p, i256* %q) nounwind {
6
6
; X32-LABEL: add:
7
7
; X32: # BB#0:
8
8
; X32-NEXT: pushl %ebp
9
- ; X32-NEXT: movl %esp, %ebp
10
9
; X32-NEXT: pushl %ebx
11
10
; X32-NEXT: pushl %edi
12
11
; X32-NEXT: pushl %esi
13
- ; X32-NEXT: subl $28, %esp
14
- ; X32-NEXT: movl 12(%ebp), %edi
15
- ; X32-NEXT: movl 8(%ebp), %eax
16
- ; X32-NEXT: movl (%eax), %ecx
17
- ; X32-NEXT: movl (%edi), %edx
18
- ; X32-NEXT: movl %ecx, %esi
19
- ; X32-NEXT: addl %edx, %esi
20
- ; X32-NEXT: movl 4(%edi), %ebx
21
- ; X32-NEXT: movl 4(%eax), %esi
22
- ; X32-NEXT: adcl %ebx, %esi
23
- ; X32-NEXT: pushl %eax
24
- ; X32-NEXT: seto %al
25
- ; X32-NEXT: lahf
26
- ; X32-NEXT: movl %eax, %esi
27
- ; X32-NEXT: popl %eax
28
- ; X32-NEXT: movl %esi, -32(%ebp) # 4-byte Spill
29
- ; X32-NEXT: movl %esi, -16(%ebp) # 4-byte Spill
30
- ; X32-NEXT: addl %edx, %ecx
31
- ; X32-NEXT: movl %ecx, -40(%ebp) # 4-byte Spill
32
- ; X32-NEXT: movl 8(%edi), %edx
33
- ; X32-NEXT: movl %edx, -28(%ebp) # 4-byte Spill
34
- ; X32-NEXT: movl 28(%edi), %ecx
35
- ; X32-NEXT: movl %ecx, -36(%ebp) # 4-byte Spill
36
- ; X32-NEXT: movl 24(%edi), %ecx
37
- ; X32-NEXT: movl %ecx, -20(%ebp) # 4-byte Spill
38
- ; X32-NEXT: movl 20(%edi), %ecx
39
- ; X32-NEXT: movl 16(%edi), %esi
40
- ; X32-NEXT: movl %esi, -24(%ebp) # 4-byte Spill
41
- ; X32-NEXT: movl 12(%edi), %edi
42
- ; X32-NEXT: adcl %ebx, 4(%eax)
43
- ; X32-NEXT: movl 8(%eax), %ebx
44
- ; X32-NEXT: movl -16(%ebp), %esi # 4-byte Reload
45
- ; X32-NEXT: pushl %eax
46
- ; X32-NEXT: movl %esi, %eax
47
- ; X32-NEXT: addb $127, %al
48
- ; X32-NEXT: sahf
49
- ; X32-NEXT: popl %eax
50
- ; X32-NEXT: adcl %edx, %ebx
51
- ; X32-NEXT: pushl %eax
52
- ; X32-NEXT: seto %al
53
- ; X32-NEXT: lahf
54
- ; X32-NEXT: movl %eax, %ebx
55
- ; X32-NEXT: popl %eax
56
- ; X32-NEXT: adcl %edi, 12(%eax)
57
- ; X32-NEXT: pushl %eax
58
- ; X32-NEXT: movl %ebx, %eax
59
- ; X32-NEXT: addb $127, %al
60
- ; X32-NEXT: sahf
61
- ; X32-NEXT: popl %eax
62
- ; X32-NEXT: adcl 12(%eax), %edi
63
- ; X32-NEXT: pushl %eax
64
- ; X32-NEXT: seto %al
65
- ; X32-NEXT: lahf
66
- ; X32-NEXT: movl %eax, %esi
67
- ; X32-NEXT: popl %eax
68
- ; X32-NEXT: movl 16(%eax), %ebx
69
- ; X32-NEXT: movl -24(%ebp), %edx # 4-byte Reload
70
- ; X32-NEXT: adcl %edx, %ebx
71
- ; X32-NEXT: pushl %eax
72
- ; X32-NEXT: seto %al
73
- ; X32-NEXT: lahf
74
- ; X32-NEXT: movl %eax, %ebx
75
- ; X32-NEXT: popl %eax
76
- ; X32-NEXT: pushl %eax
77
- ; X32-NEXT: seto %al
78
- ; X32-NEXT: lahf
79
- ; X32-NEXT: movl %eax, %edi
80
- ; X32-NEXT: popl %eax
81
- ; X32-NEXT: pushl %eax
82
- ; X32-NEXT: movl %esi, %eax
83
- ; X32-NEXT: addb $127, %al
84
- ; X32-NEXT: sahf
85
- ; X32-NEXT: popl %eax
86
- ; X32-NEXT: adcl %edx, 16(%eax)
87
- ; X32-NEXT: movl -32(%ebp), %edx # 4-byte Reload
88
- ; X32-NEXT: pushl %eax
89
- ; X32-NEXT: movl %edx, %eax
90
- ; X32-NEXT: addb $127, %al
91
- ; X32-NEXT: sahf
92
- ; X32-NEXT: popl %eax
93
- ; X32-NEXT: movl -28(%ebp), %edx # 4-byte Reload
94
- ; X32-NEXT: adcl %edx, 8(%eax)
95
- ; X32-NEXT: pushl %eax
96
- ; X32-NEXT: movl %edi, %eax
97
- ; X32-NEXT: addb $127, %al
98
- ; X32-NEXT: sahf
99
- ; X32-NEXT: popl %eax
100
- ; X32-NEXT: adcl %ecx, 20(%eax)
101
- ; X32-NEXT: pushl %eax
102
- ; X32-NEXT: movl %ebx, %eax
103
- ; X32-NEXT: addb $127, %al
104
- ; X32-NEXT: sahf
105
- ; X32-NEXT: popl %eax
106
- ; X32-NEXT: adcl 20(%eax), %ecx
107
- ; X32-NEXT: pushl %eax
108
- ; X32-NEXT: seto %al
109
- ; X32-NEXT: lahf
110
- ; X32-NEXT: movl %eax, %ecx
111
- ; X32-NEXT: popl %eax
112
- ; X32-NEXT: movl -20(%ebp), %edx # 4-byte Reload
113
- ; X32-NEXT: adcl %edx, 24(%eax)
114
- ; X32-NEXT: pushl %eax
115
- ; X32-NEXT: movl %ecx, %eax
116
- ; X32-NEXT: addb $127, %al
117
- ; X32-NEXT: sahf
118
- ; X32-NEXT: popl %eax
119
- ; X32-NEXT: adcl 24(%eax), %edx
120
- ; X32-NEXT: movl -36(%ebp), %ecx # 4-byte Reload
121
- ; X32-NEXT: adcl %ecx, 28(%eax)
122
- ; X32-NEXT: movl -40(%ebp), %ecx # 4-byte Reload
123
- ; X32-NEXT: movl %ecx, (%eax)
124
- ; X32-NEXT: addl $28, %esp
12
+ ; X32-NEXT: subl $12, %esp
13
+ ; X32-NEXT: movl {{[0-9]+}}(%esp), %eax
14
+ ; X32-NEXT: movl {{[0-9]+}}(%esp), %ecx
15
+ ; X32-NEXT: movl 8(%ecx), %edx
16
+ ; X32-NEXT: movl (%ecx), %ebx
17
+ ; X32-NEXT: movl 4(%ecx), %edi
18
+ ; X32-NEXT: movl 28(%eax), %esi
19
+ ; X32-NEXT: movl %esi, {{[0-9]+}}(%esp) # 4-byte Spill
20
+ ; X32-NEXT: movl 24(%eax), %ebp
21
+ ; X32-NEXT: addl (%eax), %ebx
22
+ ; X32-NEXT: adcl 4(%eax), %edi
23
+ ; X32-NEXT: adcl 8(%eax), %edx
24
+ ; X32-NEXT: movl %edx, {{[0-9]+}}(%esp) # 4-byte Spill
25
+ ; X32-NEXT: movl 20(%eax), %esi
26
+ ; X32-NEXT: movl 12(%eax), %edx
27
+ ; X32-NEXT: movl 16(%eax), %eax
28
+ ; X32-NEXT: adcl 12(%ecx), %edx
29
+ ; X32-NEXT: adcl 16(%ecx), %eax
30
+ ; X32-NEXT: adcl 20(%ecx), %esi
31
+ ; X32-NEXT: adcl 24(%ecx), %ebp
32
+ ; X32-NEXT: movl %ebp, (%esp) # 4-byte Spill
33
+ ; X32-NEXT: movl {{[0-9]+}}(%esp), %ebp # 4-byte Reload
34
+ ; X32-NEXT: adcl %ebp, 28(%ecx)
35
+ ; X32-NEXT: movl %ebx, (%ecx)
36
+ ; X32-NEXT: movl %edi, 4(%ecx)
37
+ ; X32-NEXT: movl {{[0-9]+}}(%esp), %edi # 4-byte Reload
38
+ ; X32-NEXT: movl %edi, 8(%ecx)
39
+ ; X32-NEXT: movl %edx, 12(%ecx)
40
+ ; X32-NEXT: movl %eax, 16(%ecx)
41
+ ; X32-NEXT: movl %esi, 20(%ecx)
42
+ ; X32-NEXT: movl (%esp), %eax # 4-byte Reload
43
+ ; X32-NEXT: movl %eax, 24(%ecx)
44
+ ; X32-NEXT: addl $12, %esp
125
45
; X32-NEXT: popl %esi
126
46
; X32-NEXT: popl %edi
127
47
; X32-NEXT: popl %ebx
@@ -130,28 +50,17 @@ define void @add(i256* %p, i256* %q) nounwind {
130
50
;
131
51
; X64-LABEL: add:
132
52
; X64: # BB#0:
133
- ; X64-NEXT: pushq %rbp
134
- ; X64-NEXT: movq %rsp, %rbp
135
- ; X64-NEXT: movq (%rdi), %rdx
136
- ; X64-NEXT: movq 8(%rdi), %r9
53
+ ; X64-NEXT: movq 16(%rdi), %rax
54
+ ; X64-NEXT: movq (%rdi), %rcx
55
+ ; X64-NEXT: movq 8(%rdi), %rdx
137
56
; X64-NEXT: movq 24(%rsi), %r8
138
- ; X64-NEXT: movq 8(%rsi), %r10
139
- ; X64-NEXT: movq 16(%rsi), %rcx
140
- ; X64-NEXT: movq (%rsi), %rsi
141
- ; X64-NEXT: movq %rdx, %rax
142
- ; X64-NEXT: addq %rsi, %rax
143
- ; X64-NEXT: adcq %r10, 8(%rdi)
144
- ; X64-NEXT: addq %rsi, %rdx
145
- ; X64-NEXT: adcq %r10, %r9
146
- ; X64-NEXT: pushfq
147
- ; X64-NEXT: popq %rax
148
- ; X64-NEXT: adcq %rcx, 16(%rdi)
149
- ; X64-NEXT: pushq %rax
150
- ; X64-NEXT: popfq
151
- ; X64-NEXT: adcq 16(%rdi), %rcx
57
+ ; X64-NEXT: addq (%rsi), %rcx
58
+ ; X64-NEXT: adcq 8(%rsi), %rdx
59
+ ; X64-NEXT: adcq 16(%rsi), %rax
152
60
; X64-NEXT: adcq %r8, 24(%rdi)
153
- ; X64-NEXT: movq %rdx, (%rdi)
154
- ; X64-NEXT: popq %rbp
61
+ ; X64-NEXT: movq %rcx, (%rdi)
62
+ ; X64-NEXT: movq %rdx, 8(%rdi)
63
+ ; X64-NEXT: movq %rax, 16(%rdi)
155
64
; X64-NEXT: retq
156
65
%a = load i256 , i256* %p
157
66
%b = load i256 , i256* %q
@@ -163,110 +72,40 @@ define void @sub(i256* %p, i256* %q) nounwind {
163
72
; X32-LABEL: sub:
164
73
; X32: # BB#0:
165
74
; X32-NEXT: pushl %ebp
166
- ; X32-NEXT: movl %esp, %ebp
167
75
; X32-NEXT: pushl %ebx
168
76
; X32-NEXT: pushl %edi
169
77
; X32-NEXT: pushl %esi
170
- ; X32-NEXT: subl $24, %esp
171
- ; X32-NEXT: movl 12(%ebp), %edi
172
- ; X32-NEXT: movl 8(%ebp), %ecx
173
- ; X32-NEXT: movl (%ecx), %eax
174
- ; X32-NEXT: movl 4(%ecx), %edx
175
- ; X32-NEXT: movl (%edi), %esi
176
- ; X32-NEXT: cmpl %esi, %eax
177
- ; X32-NEXT: movl 4(%edi), %ebx
178
- ; X32-NEXT: sbbl %ebx, %edx
179
- ; X32-NEXT: pushl %eax
180
- ; X32-NEXT: seto %al
181
- ; X32-NEXT: lahf
182
- ; X32-NEXT: movl %eax, %edx
183
- ; X32-NEXT: popl %eax
184
- ; X32-NEXT: movl %edx, -24(%ebp) # 4-byte Spill
185
- ; X32-NEXT: movl %edx, -16(%ebp) # 4-byte Spill
186
- ; X32-NEXT: subl %esi, %eax
187
- ; X32-NEXT: movl %eax, -36(%ebp) # 4-byte Spill
188
- ; X32-NEXT: movl 8(%edi), %esi
189
- ; X32-NEXT: movl 28(%edi), %eax
190
- ; X32-NEXT: movl %eax, -32(%ebp) # 4-byte Spill
191
- ; X32-NEXT: movl 24(%edi), %eax
192
- ; X32-NEXT: movl %eax, -28(%ebp) # 4-byte Spill
193
- ; X32-NEXT: movl 20(%edi), %eax
194
- ; X32-NEXT: movl %eax, -20(%ebp) # 4-byte Spill
195
- ; X32-NEXT: movl 16(%edi), %edx
196
- ; X32-NEXT: movl 12(%edi), %edi
197
- ; X32-NEXT: sbbl %ebx, 4(%ecx)
198
- ; X32-NEXT: movl 8(%ecx), %ebx
199
- ; X32-NEXT: movl -16(%ebp), %eax # 4-byte Reload
200
- ; X32-NEXT: movl %eax, %eax
201
- ; X32-NEXT: addb $127, %al
202
- ; X32-NEXT: sahf
203
- ; X32-NEXT: sbbl %esi, %ebx
204
- ; X32-NEXT: pushl %eax
205
- ; X32-NEXT: seto %al
206
- ; X32-NEXT: lahf
207
- ; X32-NEXT: movl %eax, %ebx
208
- ; X32-NEXT: popl %eax
209
- ; X32-NEXT: sbbl %edi, 12(%ecx)
210
- ; X32-NEXT: movl 12(%ecx), %eax
211
- ; X32-NEXT: pushl %eax
212
- ; X32-NEXT: movl %ebx, %eax
213
- ; X32-NEXT: addb $127, %al
214
- ; X32-NEXT: sahf
215
- ; X32-NEXT: popl %eax
216
- ; X32-NEXT: sbbl %edi, %eax
217
- ; X32-NEXT: seto %al
218
- ; X32-NEXT: lahf
219
- ; X32-NEXT: movl %eax, %eax
220
- ; X32-NEXT: movl 16(%ecx), %edi
221
- ; X32-NEXT: sbbl %edx, %edi
222
- ; X32-NEXT: pushl %eax
223
- ; X32-NEXT: seto %al
224
- ; X32-NEXT: lahf
225
- ; X32-NEXT: movl %eax, %edi
226
- ; X32-NEXT: popl %eax
227
- ; X32-NEXT: pushl %eax
228
- ; X32-NEXT: seto %al
229
- ; X32-NEXT: lahf
230
- ; X32-NEXT: movl %eax, %ebx
231
- ; X32-NEXT: popl %eax
232
- ; X32-NEXT: movl %eax, %eax
233
- ; X32-NEXT: addb $127, %al
234
- ; X32-NEXT: sahf
235
- ; X32-NEXT: sbbl %edx, 16(%ecx)
236
- ; X32-NEXT: movl -24(%ebp), %eax # 4-byte Reload
237
- ; X32-NEXT: movl %eax, %eax
238
- ; X32-NEXT: addb $127, %al
239
- ; X32-NEXT: sahf
240
- ; X32-NEXT: sbbl %esi, 8(%ecx)
241
- ; X32-NEXT: pushl %eax
242
- ; X32-NEXT: movl %ebx, %eax
243
- ; X32-NEXT: addb $127, %al
244
- ; X32-NEXT: sahf
245
- ; X32-NEXT: popl %eax
246
- ; X32-NEXT: movl -20(%ebp), %edx # 4-byte Reload
247
- ; X32-NEXT: sbbl %edx, 20(%ecx)
248
- ; X32-NEXT: movl 20(%ecx), %eax
249
- ; X32-NEXT: pushl %eax
250
- ; X32-NEXT: movl %edi, %eax
251
- ; X32-NEXT: addb $127, %al
252
- ; X32-NEXT: sahf
253
- ; X32-NEXT: popl %eax
254
- ; X32-NEXT: sbbl %edx, %eax
255
- ; X32-NEXT: seto %al
256
- ; X32-NEXT: lahf
257
- ; X32-NEXT: movl %eax, %eax
258
- ; X32-NEXT: movl -28(%ebp), %esi # 4-byte Reload
259
- ; X32-NEXT: sbbl %esi, 24(%ecx)
260
- ; X32-NEXT: movl 24(%ecx), %edx
261
- ; X32-NEXT: movl %eax, %eax
262
- ; X32-NEXT: addb $127, %al
263
- ; X32-NEXT: sahf
264
- ; X32-NEXT: sbbl %esi, %edx
265
- ; X32-NEXT: movl -32(%ebp), %eax # 4-byte Reload
266
- ; X32-NEXT: sbbl %eax, 28(%ecx)
267
- ; X32-NEXT: movl -36(%ebp), %eax # 4-byte Reload
268
- ; X32-NEXT: movl %eax, (%ecx)
269
- ; X32-NEXT: addl $24, %esp
78
+ ; X32-NEXT: subl $8, %esp
79
+ ; X32-NEXT: movl {{[0-9]+}}(%esp), %esi
80
+ ; X32-NEXT: movl {{[0-9]+}}(%esp), %ecx
81
+ ; X32-NEXT: movl 16(%ecx), %eax
82
+ ; X32-NEXT: movl 12(%ecx), %edx
83
+ ; X32-NEXT: movl 8(%ecx), %edi
84
+ ; X32-NEXT: movl (%ecx), %ebx
85
+ ; X32-NEXT: movl 4(%ecx), %ebp
86
+ ; X32-NEXT: subl (%esi), %ebx
87
+ ; X32-NEXT: sbbl 4(%esi), %ebp
88
+ ; X32-NEXT: sbbl 8(%esi), %edi
89
+ ; X32-NEXT: sbbl 12(%esi), %edx
90
+ ; X32-NEXT: movl %edx, {{[0-9]+}}(%esp) # 4-byte Spill
91
+ ; X32-NEXT: sbbl 16(%esi), %eax
92
+ ; X32-NEXT: movl %eax, (%esp) # 4-byte Spill
93
+ ; X32-NEXT: movl 20(%ecx), %edx
94
+ ; X32-NEXT: sbbl 20(%esi), %edx
95
+ ; X32-NEXT: movl 24(%ecx), %eax
96
+ ; X32-NEXT: sbbl 24(%esi), %eax
97
+ ; X32-NEXT: movl 28(%esi), %esi
98
+ ; X32-NEXT: sbbl %esi, 28(%ecx)
99
+ ; X32-NEXT: movl %ebx, (%ecx)
100
+ ; X32-NEXT: movl %ebp, 4(%ecx)
101
+ ; X32-NEXT: movl %edi, 8(%ecx)
102
+ ; X32-NEXT: movl {{[0-9]+}}(%esp), %esi # 4-byte Reload
103
+ ; X32-NEXT: movl %esi, 12(%ecx)
104
+ ; X32-NEXT: movl (%esp), %esi # 4-byte Reload
105
+ ; X32-NEXT: movl %esi, 16(%ecx)
106
+ ; X32-NEXT: movl %edx, 20(%ecx)
107
+ ; X32-NEXT: movl %eax, 24(%ecx)
108
+ ; X32-NEXT: addl $8, %esp
270
109
; X32-NEXT: popl %esi
271
110
; X32-NEXT: popl %edi
272
111
; X32-NEXT: popl %ebx
@@ -275,28 +114,17 @@ define void @sub(i256* %p, i256* %q) nounwind {
275
114
;
276
115
; X64-LABEL: sub:
277
116
; X64: # BB#0:
278
- ; X64-NEXT: pushq %rbp
279
- ; X64-NEXT: movq %rsp, %rbp
280
- ; X64-NEXT: movq (%rdi), %rax
281
- ; X64-NEXT: movq 8(%rdi), %rcx
117
+ ; X64-NEXT: movq 16(%rdi), %rax
118
+ ; X64-NEXT: movq (%rdi), %rcx
119
+ ; X64-NEXT: movq 8(%rdi), %rdx
282
120
; X64-NEXT: movq 24(%rsi), %r8
283
- ; X64-NEXT: movq 8(%rsi), %rdx
284
- ; X64-NEXT: movq 16(%rsi), %r9
285
- ; X64-NEXT: movq (%rsi), %rsi
286
- ; X64-NEXT: cmpq %rsi, %rax
287
- ; X64-NEXT: sbbq %rdx, 8(%rdi)
288
- ; X64-NEXT: subq %rsi, %rax
289
- ; X64-NEXT: sbbq %rdx, %rcx
290
- ; X64-NEXT: pushfq
291
- ; X64-NEXT: popq %rcx
292
- ; X64-NEXT: sbbq %r9, 16(%rdi)
293
- ; X64-NEXT: movq 16(%rdi), %rdx
294
- ; X64-NEXT: pushq %rcx
295
- ; X64-NEXT: popfq
296
- ; X64-NEXT: sbbq %r9, %rdx
121
+ ; X64-NEXT: subq (%rsi), %rcx
122
+ ; X64-NEXT: sbbq 8(%rsi), %rdx
123
+ ; X64-NEXT: sbbq 16(%rsi), %rax
297
124
; X64-NEXT: sbbq %r8, 24(%rdi)
298
- ; X64-NEXT: movq %rax, (%rdi)
299
- ; X64-NEXT: popq %rbp
125
+ ; X64-NEXT: movq %rcx, (%rdi)
126
+ ; X64-NEXT: movq %rdx, 8(%rdi)
127
+ ; X64-NEXT: movq %rax, 16(%rdi)
300
128
; X64-NEXT: retq
301
129
%a = load i256 , i256* %p
302
130
%b = load i256 , i256* %q
0 commit comments