@@ -68,26 +68,25 @@ define i128 @mul_i128(i128 %x, i128 %y) {
68
68
define i160 @mul_i160 (i160 %x , i160 %y ) {
69
69
; CHECK-LABEL: mul_i160:
70
70
; CHECK: // %bb.0:
71
- ; CHECK-NEXT: mul x9, x1, x4
72
- ; CHECK-NEXT: mul x10, x1, x5
73
- ; CHECK-NEXT: mul x11, x0, x5
74
- ; CHECK-NEXT: umulh x12, x0, x4
75
- ; CHECK-NEXT: madd x10, x2, x4, x10
76
- ; CHECK-NEXT: adds x9, x9, x11
77
- ; CHECK-NEXT: umulh x13, x1, x4
71
+ ; CHECK-NEXT: mul x8, x1, x4
72
+ ; CHECK-NEXT: mul x9, x0, x5
73
+ ; CHECK-NEXT: umulh x10, x0, x4
74
+ ; CHECK-NEXT: mul x11, x2, x4
75
+ ; CHECK-NEXT: adds x8, x8, x9
76
+ ; CHECK-NEXT: mul x12, x1, x5
77
+ ; CHECK-NEXT: mul x13, x0, x6
78
+ ; CHECK-NEXT: umulh x14, x1, x4
79
+ ; CHECK-NEXT: adcs x1, x8, x10
80
+ ; CHECK-NEXT: adc x9, xzr, xzr
81
+ ; CHECK-NEXT: adds x10, x11, x12
82
+ ; CHECK-NEXT: umulh x8, x0, x5
78
83
; CHECK-NEXT: cset w11, hs
79
- ; CHECK-NEXT: adds x1, x9, x12
80
- ; CHECK-NEXT: and x11, x11, #0x1
81
- ; CHECK-NEXT: umulh x14, x0, x5
82
- ; CHECK-NEXT: mul x8, x0, x4
83
- ; CHECK-NEXT: madd x9, x0, x6, x10
84
- ; CHECK-NEXT: cset w10, hs
85
- ; CHECK-NEXT: and x10, x10, #0x1
86
- ; CHECK-NEXT: add x10, x11, x10
87
- ; CHECK-NEXT: add x11, x13, x14
88
- ; CHECK-NEXT: add x10, x11, x10
89
- ; CHECK-NEXT: mov x0, x8
90
- ; CHECK-NEXT: add x2, x9, x10
84
+ ; CHECK-NEXT: adc x10, x10, x13
85
+ ; CHECK-NEXT: cmp w11, #1
86
+ ; CHECK-NEXT: mul x0, x0, x4
87
+ ; CHECK-NEXT: adc x10, x10, x14
88
+ ; CHECK-NEXT: adc x8, x10, x8
89
+ ; CHECK-NEXT: adc x2, x8, x9
91
90
; CHECK-NEXT: ret
92
91
%mul = mul i160 %x , %y
93
92
ret i160 %mul
@@ -96,26 +95,25 @@ define i160 @mul_i160(i160 %x, i160 %y) {
96
95
define i192 @mul_i192 (i192 %x , i192 %y ) {
97
96
; CHECK-LABEL: mul_i192:
98
97
; CHECK: // %bb.0:
99
- ; CHECK-NEXT: mul x9, x1, x4
100
- ; CHECK-NEXT: mul x10, x1, x5
101
- ; CHECK-NEXT: mul x11, x0, x5
102
- ; CHECK-NEXT: umulh x12, x0, x4
103
- ; CHECK-NEXT: madd x10, x2, x4, x10
104
- ; CHECK-NEXT: adds x9, x9, x11
105
- ; CHECK-NEXT: umulh x13, x1, x4
98
+ ; CHECK-NEXT: mul x8, x1, x4
99
+ ; CHECK-NEXT: mul x9, x0, x5
100
+ ; CHECK-NEXT: umulh x10, x0, x4
101
+ ; CHECK-NEXT: mul x11, x2, x4
102
+ ; CHECK-NEXT: adds x8, x8, x9
103
+ ; CHECK-NEXT: mul x12, x1, x5
104
+ ; CHECK-NEXT: mul x13, x0, x6
105
+ ; CHECK-NEXT: umulh x14, x1, x4
106
+ ; CHECK-NEXT: adcs x1, x8, x10
107
+ ; CHECK-NEXT: adc x9, xzr, xzr
108
+ ; CHECK-NEXT: adds x10, x11, x12
109
+ ; CHECK-NEXT: umulh x8, x0, x5
106
110
; CHECK-NEXT: cset w11, hs
107
- ; CHECK-NEXT: adds x1, x9, x12
108
- ; CHECK-NEXT: and x11, x11, #0x1
109
- ; CHECK-NEXT: umulh x14, x0, x5
110
- ; CHECK-NEXT: mul x8, x0, x4
111
- ; CHECK-NEXT: madd x9, x0, x6, x10
112
- ; CHECK-NEXT: cset w10, hs
113
- ; CHECK-NEXT: and x10, x10, #0x1
114
- ; CHECK-NEXT: add x10, x11, x10
115
- ; CHECK-NEXT: add x11, x13, x14
116
- ; CHECK-NEXT: add x10, x11, x10
117
- ; CHECK-NEXT: mov x0, x8
118
- ; CHECK-NEXT: add x2, x9, x10
111
+ ; CHECK-NEXT: adc x10, x10, x13
112
+ ; CHECK-NEXT: cmp w11, #1
113
+ ; CHECK-NEXT: mul x0, x0, x4
114
+ ; CHECK-NEXT: adc x10, x10, x14
115
+ ; CHECK-NEXT: adc x8, x10, x8
116
+ ; CHECK-NEXT: adc x2, x8, x9
119
117
; CHECK-NEXT: ret
120
118
%mul = mul i192 %x , %y
121
119
ret i192 %mul
@@ -127,50 +125,40 @@ define i224 @mul_i224(i224 %x, i224 %y) {
127
125
; CHECK-NEXT: mul x8, x1, x4
128
126
; CHECK-NEXT: mul x9, x0, x5
129
127
; CHECK-NEXT: umulh x10, x0, x4
130
- ; CHECK-NEXT: mul x14, x2, x5
131
- ; CHECK-NEXT: adds x8, x8, x9
132
128
; CHECK-NEXT: mul x11, x2, x4
133
- ; CHECK-NEXT: cset w9, hs
134
- ; CHECK-NEXT: adds x8, x8, x10
135
- ; CHECK-NEXT: and x9, x9, #0x1
129
+ ; CHECK-NEXT: adds x8, x8, x9
136
130
; CHECK-NEXT: mul x12, x1, x5
137
- ; CHECK-NEXT: cset w10, hs
138
- ; CHECK-NEXT: and x10, x10, #0x1
131
+ ; CHECK-NEXT: adcs x8, x8, x10
132
+ ; CHECK-NEXT: mul x14, x2, x5
133
+ ; CHECK-NEXT: adc x10, xzr, xzr
139
134
; CHECK-NEXT: mul x13, x0, x6
140
- ; CHECK-NEXT: add x9, x9, x10
141
- ; CHECK-NEXT: umulh x15, x1, x4
142
135
; CHECK-NEXT: adds x11, x11, x12
136
+ ; CHECK-NEXT: umulh x15, x1, x4
143
137
; CHECK-NEXT: madd x14, x3, x4, x14
144
138
; CHECK-NEXT: umulh x16, x0, x5
145
139
; CHECK-NEXT: madd x12, x1, x6, x14
146
140
; CHECK-NEXT: cset w14, hs
147
- ; CHECK-NEXT: adds x11, x11, x13
148
- ; CHECK-NEXT: cset w13, hs
149
- ; CHECK-NEXT: adds x11, x11, x15
150
- ; CHECK-NEXT: and x14, x14, #0x1
141
+ ; CHECK-NEXT: adcs x11, x11, x13
142
+ ; CHECK-NEXT: adc x13, xzr, xzr
143
+ ; CHECK-NEXT: cmp w14, #1
151
144
; CHECK-NEXT: umulh x17, x2, x4
152
- ; CHECK-NEXT: and x13, x13, #0x1
153
- ; CHECK-NEXT: add x13, x14, x13
154
- ; CHECK-NEXT: umulh x18, x1, x5
155
- ; CHECK-NEXT: cset w1, hs
156
- ; CHECK-NEXT: adds x11, x11, x16
157
- ; CHECK-NEXT: and x14, x1, #0x1
145
+ ; CHECK-NEXT: adcs x11, x11, x15
146
+ ; CHECK-NEXT: adc x13, x13, xzr
147
+ ; CHECK-NEXT: cmp w14, #1
148
+ ; CHECK-NEXT: umulh x9, x1, x5
149
+ ; CHECK-NEXT: adcs x11, x11, x16
158
150
; CHECK-NEXT: mov x1, x8
159
- ; CHECK-NEXT: umulh x15, x0, x6
160
- ; CHECK-NEXT: add x10, x13, x14
161
- ; CHECK-NEXT: cset w13, hs
162
- ; CHECK-NEXT: adds x2, x11, x9
163
- ; CHECK-NEXT: and x9 , x13, #0x1
151
+ ; CHECK-NEXT: adc x13, x13, xzr
152
+ ; CHECK-NEXT: cmp w14, #1
153
+ ; CHECK-NEXT: umulh x18, x0, x6
154
+ ; CHECK-NEXT: adcs x2, x11, x10
155
+ ; CHECK-NEXT: adc x10 , x13, xzr
164
156
; CHECK-NEXT: madd x12, x0, x7, x12
165
- ; CHECK-NEXT: cset w11, hs
166
- ; CHECK-NEXT: add x9, x10, x9
167
- ; CHECK-NEXT: add x13, x17, x18
168
- ; CHECK-NEXT: and x10, x11, #0x1
157
+ ; CHECK-NEXT: add x9, x17, x9
169
158
; CHECK-NEXT: mul x0, x0, x4
159
+ ; CHECK-NEXT: add x9, x9, x18
170
160
; CHECK-NEXT: add x9, x9, x10
171
- ; CHECK-NEXT: add x11, x13, x15
172
- ; CHECK-NEXT: add x10, x12, x11
173
- ; CHECK-NEXT: add x3, x10, x9
161
+ ; CHECK-NEXT: add x3, x12, x9
174
162
; CHECK-NEXT: ret
175
163
%mul = mul i224 %x , %y
176
164
ret i224 %mul
@@ -182,50 +170,40 @@ define i256 @mul_i256(i256 %x, i256 %y) {
182
170
; CHECK-NEXT: mul x8, x1, x4
183
171
; CHECK-NEXT: mul x9, x0, x5
184
172
; CHECK-NEXT: umulh x10, x0, x4
185
- ; CHECK-NEXT: mul x14, x2, x5
186
- ; CHECK-NEXT: adds x8, x8, x9
187
173
; CHECK-NEXT: mul x11, x2, x4
188
- ; CHECK-NEXT: cset w9, hs
189
- ; CHECK-NEXT: adds x8, x8, x10
190
- ; CHECK-NEXT: and x9, x9, #0x1
174
+ ; CHECK-NEXT: adds x8, x8, x9
191
175
; CHECK-NEXT: mul x12, x1, x5
192
- ; CHECK-NEXT: cset w10, hs
193
- ; CHECK-NEXT: and x10, x10, #0x1
176
+ ; CHECK-NEXT: adcs x8, x8, x10
177
+ ; CHECK-NEXT: mul x14, x2, x5
178
+ ; CHECK-NEXT: adc x10, xzr, xzr
194
179
; CHECK-NEXT: mul x13, x0, x6
195
- ; CHECK-NEXT: add x9, x9, x10
196
- ; CHECK-NEXT: umulh x15, x1, x4
197
180
; CHECK-NEXT: adds x11, x11, x12
181
+ ; CHECK-NEXT: umulh x15, x1, x4
198
182
; CHECK-NEXT: madd x14, x3, x4, x14
199
183
; CHECK-NEXT: umulh x16, x0, x5
200
184
; CHECK-NEXT: madd x12, x1, x6, x14
201
185
; CHECK-NEXT: cset w14, hs
202
- ; CHECK-NEXT: adds x11, x11, x13
203
- ; CHECK-NEXT: cset w13, hs
204
- ; CHECK-NEXT: adds x11, x11, x15
205
- ; CHECK-NEXT: and x14, x14, #0x1
186
+ ; CHECK-NEXT: adcs x11, x11, x13
187
+ ; CHECK-NEXT: adc x13, xzr, xzr
188
+ ; CHECK-NEXT: cmp w14, #1
206
189
; CHECK-NEXT: umulh x17, x2, x4
207
- ; CHECK-NEXT: and x13, x13, #0x1
208
- ; CHECK-NEXT: add x13, x14, x13
209
- ; CHECK-NEXT: umulh x18, x1, x5
210
- ; CHECK-NEXT: cset w1, hs
211
- ; CHECK-NEXT: adds x11, x11, x16
212
- ; CHECK-NEXT: and x14, x1, #0x1
190
+ ; CHECK-NEXT: adcs x11, x11, x15
191
+ ; CHECK-NEXT: adc x13, x13, xzr
192
+ ; CHECK-NEXT: cmp w14, #1
193
+ ; CHECK-NEXT: umulh x9, x1, x5
194
+ ; CHECK-NEXT: adcs x11, x11, x16
213
195
; CHECK-NEXT: mov x1, x8
214
- ; CHECK-NEXT: umulh x15, x0, x6
215
- ; CHECK-NEXT: add x10, x13, x14
216
- ; CHECK-NEXT: cset w13, hs
217
- ; CHECK-NEXT: adds x2, x11, x9
218
- ; CHECK-NEXT: and x9 , x13, #0x1
196
+ ; CHECK-NEXT: adc x13, x13, xzr
197
+ ; CHECK-NEXT: cmp w14, #1
198
+ ; CHECK-NEXT: umulh x18, x0, x6
199
+ ; CHECK-NEXT: adcs x2, x11, x10
200
+ ; CHECK-NEXT: adc x10 , x13, xzr
219
201
; CHECK-NEXT: madd x12, x0, x7, x12
220
- ; CHECK-NEXT: cset w11, hs
221
- ; CHECK-NEXT: add x9, x10, x9
222
- ; CHECK-NEXT: add x13, x17, x18
223
- ; CHECK-NEXT: and x10, x11, #0x1
202
+ ; CHECK-NEXT: add x9, x17, x9
224
203
; CHECK-NEXT: mul x0, x0, x4
204
+ ; CHECK-NEXT: add x9, x9, x18
225
205
; CHECK-NEXT: add x9, x9, x10
226
- ; CHECK-NEXT: add x11, x13, x15
227
- ; CHECK-NEXT: add x10, x12, x11
228
- ; CHECK-NEXT: add x3, x10, x9
206
+ ; CHECK-NEXT: add x3, x12, x9
229
207
; CHECK-NEXT: ret
230
208
%mul = mul i256 %x , %y
231
209
ret i256 %mul
0 commit comments