@@ -27,6 +27,20 @@ entry:
27
27
ret void
28
28
}
29
29
30
+ define ptr @f32_to_s8_inc (float %f , ptr %dst ) {
31
+ ; CHECK-LABEL: f32_to_s8_inc:
32
+ ; CHECK: // %bb.0: // %entry
33
+ ; CHECK-NEXT: fcvtzs s0, s0
34
+ ; CHECK-NEXT: st1 { v0.b }[0], [x0], #1
35
+ ; CHECK-NEXT: ret
36
+ entry:
37
+ %conv = fptosi float %f to i32
38
+ %trunc = trunc i32 %conv to i8
39
+ %next = getelementptr i8 , ptr %dst , i64 1
40
+ store i8 %trunc , ptr %dst
41
+ ret ptr %next
42
+ }
43
+
30
44
define void @f32_to_u16 (float %f , ptr %dst ) {
31
45
; CHECK-LABEL: f32_to_u16:
32
46
; CHECK: // %bb.0: // %entry
@@ -53,6 +67,20 @@ entry:
53
67
ret void
54
68
}
55
69
70
+ define ptr @f32_to_s16_inc (float %f , ptr %dst ) {
71
+ ; CHECK-LABEL: f32_to_s16_inc:
72
+ ; CHECK: // %bb.0: // %entry
73
+ ; CHECK-NEXT: fcvtzs s0, s0
74
+ ; CHECK-NEXT: st1 { v0.h }[0], [x0], #2
75
+ ; CHECK-NEXT: ret
76
+ entry:
77
+ %conv = fptosi float %f to i32
78
+ %trunc = trunc i32 %conv to i16
79
+ %next = getelementptr i16 , ptr %dst , i64 1
80
+ store i16 %trunc , ptr %dst
81
+ ret ptr %next
82
+ }
83
+
56
84
define void @f32_to_u32 (float %f , ptr %dst ) {
57
85
; CHECK-LABEL: f32_to_u32:
58
86
; CHECK: // %bb.0: // %entry
@@ -77,6 +105,19 @@ entry:
77
105
ret void
78
106
}
79
107
108
+ define ptr @f32_to_s32_inc (float %f , ptr %dst ) {
109
+ ; CHECK-LABEL: f32_to_s32_inc:
110
+ ; CHECK: // %bb.0: // %entry
111
+ ; CHECK-NEXT: fcvtzs s0, s0
112
+ ; CHECK-NEXT: st1 { v0.s }[0], [x0], #4
113
+ ; CHECK-NEXT: ret
114
+ entry:
115
+ %conv = fptosi float %f to i32
116
+ %next = getelementptr i32 , ptr %dst , i64 1
117
+ store i32 %conv , ptr %dst
118
+ ret ptr %next
119
+ }
120
+
80
121
define void @f32_to_s64 (float %f , ptr %dst ) {
81
122
; CHECK-LABEL: f32_to_s64:
82
123
; CHECK: // %bb.0: // %entry
@@ -115,6 +156,93 @@ entry:
115
156
ret void
116
157
}
117
158
159
+ define ptr @f64_to_s64_inc (double %d , ptr %dst ) {
160
+ ; CHECK-LABEL: f64_to_s64_inc:
161
+ ; CHECK: // %bb.0: // %entry
162
+ ; CHECK-NEXT: fcvtzs d0, d0
163
+ ; CHECK-NEXT: st1 { v0.d }[0], [x0], #8
164
+ ; CHECK-NEXT: ret
165
+ entry:
166
+ %conv = fptosi double %d to i64
167
+ %next = getelementptr i64 , ptr %dst , i64 1
168
+ store i64 %conv , ptr %dst
169
+ ret ptr %next
170
+ }
171
+
172
+ define void @f64_to_u8 (double %d , ptr %dst ) {
173
+ ; CHECK-LABEL: f64_to_u8:
174
+ ; CHECK: // %bb.0:
175
+ ; CHECK-NEXT: fcvtzu d0, d0
176
+ ; CHECK-NEXT: str b0, [x0]
177
+ ; CHECK-NEXT: ret
178
+ %conv = fptoui double %d to i64
179
+ %trunc = trunc i64 %conv to i8
180
+ store i8 %trunc , ptr %dst
181
+ ret void
182
+ }
183
+
184
+ define void @f64_to_s8 (double %d , ptr %dst ) {
185
+ ; CHECK-LABEL: f64_to_s8:
186
+ ; CHECK: // %bb.0:
187
+ ; CHECK-NEXT: fcvtzs d0, d0
188
+ ; CHECK-NEXT: str b0, [x0]
189
+ ; CHECK-NEXT: ret
190
+ %conv = fptosi double %d to i64
191
+ %trunc = trunc i64 %conv to i8
192
+ store i8 %trunc , ptr %dst
193
+ ret void
194
+ }
195
+
196
+ define ptr @f64_to_s8_inc (double %d , ptr %dst ) {
197
+ ; CHECK-LABEL: f64_to_s8_inc:
198
+ ; CHECK: // %bb.0:
199
+ ; CHECK-NEXT: fcvtzs d0, d0
200
+ ; CHECK-NEXT: st1 { v0.b }[0], [x0], #1
201
+ ; CHECK-NEXT: ret
202
+ %conv = fptosi double %d to i64
203
+ %trunc = trunc i64 %conv to i8
204
+ store i8 %trunc , ptr %dst
205
+ %next = getelementptr i8 , ptr %dst , i64 1
206
+ ret ptr %next
207
+ }
208
+
209
+ define void @f64_to_u16 (double %d , ptr %dst ) {
210
+ ; CHECK-LABEL: f64_to_u16:
211
+ ; CHECK: // %bb.0:
212
+ ; CHECK-NEXT: fcvtzu d0, d0
213
+ ; CHECK-NEXT: str h0, [x0]
214
+ ; CHECK-NEXT: ret
215
+ %conv = fptoui double %d to i64
216
+ %trunc = trunc i64 %conv to i16
217
+ store i16 %trunc , ptr %dst
218
+ ret void
219
+ }
220
+
221
+ define void @f64_to_s16 (double %d , ptr %dst ) {
222
+ ; CHECK-LABEL: f64_to_s16:
223
+ ; CHECK: // %bb.0:
224
+ ; CHECK-NEXT: fcvtzs d0, d0
225
+ ; CHECK-NEXT: str h0, [x0]
226
+ ; CHECK-NEXT: ret
227
+ %conv = fptosi double %d to i64
228
+ %trunc = trunc i64 %conv to i16
229
+ store i16 %trunc , ptr %dst
230
+ ret void
231
+ }
232
+
233
+ define ptr @f64_to_s16_inc (double %d , ptr %dst ) {
234
+ ; CHECK-LABEL: f64_to_s16_inc:
235
+ ; CHECK: // %bb.0:
236
+ ; CHECK-NEXT: fcvtzs d0, d0
237
+ ; CHECK-NEXT: st1 { v0.h }[0], [x0], #2
238
+ ; CHECK-NEXT: ret
239
+ %conv = fptosi double %d to i64
240
+ %trunc = trunc i64 %conv to i16
241
+ %next = getelementptr i16 , ptr %dst , i64 1
242
+ store i16 %trunc , ptr %dst
243
+ ret ptr %next
244
+ }
245
+
118
246
define i32 @f32_to_i32_multiple_uses (float %f , ptr %dst ) {
119
247
; CHECK-LABEL: f32_to_i32_multiple_uses:
120
248
; CHECK: // %bb.0: // %entry
0 commit comments