@@ -51,8 +51,8 @@ func addStack(d0: Double, d1: Double, d2: Double, d3: Double, d4: Double,
51
51
// CHECK: fadd float
52
52
// V7K-LABEL: _$s8test_v7k9addStack
53
53
// V7K: sub sp, #80
54
- // V7K: vldr s15 , [sp, #88]
55
- // V7K: vadd.f32 s0, s14, s15
54
+ // V7K: vldr s0 , [sp, #88]
55
+ // V7K: vadd.f32 s0, s14, s0
56
56
// a is assigned to s14, b is via stack, c is via stack since it can't be back-filled to s15
57
57
func addStack2( d0: Double , d1: Double , d2: Double , d3: Double , d4: Double ,
58
58
d5: Double , d6: Double , a: Float , b: Double , c: Float ) -> Float {
@@ -81,8 +81,11 @@ func testSingle(x: SingleCase) -> Int32{
81
81
// CHECK-LABEL: define hidden swiftcc double @"$s8test_v7k0A4Data{{.*}}"(i32 %0, double %1)
82
82
// CHECK: ret double
83
83
// V7K-LABEL: _$s8test_v7k0A4Data
84
- // V7K: vstr d0
85
- // V7K: vmov.f64 d0
84
+ // V7K: vstr d0, [sp, #16]
85
+ // V7K: vldr d16, [sp, #16]
86
+ // V7K: vstr d16, [sp, #8]
87
+ // V7K: vldr d0, [sp, #8]
88
+ // V7K: bx lr
86
89
enum DataCase { case Y( Int , Double ) }
87
90
func testData( x: DataCase ) -> Double {
88
91
switch x {
@@ -116,7 +119,7 @@ func testClike2(x: CLike2) -> Int {
116
119
// CHECK: ret i32 [[ID]]
117
120
// V7K-LABEL: _$s8test_v7k0A6Clike8
118
121
// V7K: sxtb r0, r1
119
- // V7K: cmp r0, #0
122
+ // V7K: cbnz r0
120
123
// V7K: movs r0, #1
121
124
// V7K: mvn r0, #0
122
125
enum CLike8 {
@@ -153,7 +156,7 @@ func testClike8(t: Int, x: CLike8) -> Int {
153
156
// CHECK: phi double [ 0.000000e+00, {{.*}} ]
154
157
// V7K-LABEL: _$s8test_v7k0A7SingleP
155
158
// V7K: tst.w r2, #1
156
- // V7K: vmov.f64 d0
159
+ // V7K: vldr d0, [{{.*}}]
157
160
enum SinglePayload {
158
161
case Paragraph
159
162
case Char( Double )
@@ -180,9 +183,15 @@ func testSingleP(x: SinglePayload) -> Double {
180
183
// CHECK: phi double [ 0.000000e+00, {{.*}} ]
181
184
// CHECK: ret double
182
185
// V7K-LABEL: _$s8test_v7k0A6MultiP
183
- // V7K: vldr d16, [sp{{.*}}]
184
- // V7K: vmov.f64 d0, d16
185
- // V7K: bx lr
186
+ // V7K: ldr r0, [sp, #24]
187
+ // V7K: ldr r1, [sp, #28]
188
+ // V7K: vmov d16, r0, r1
189
+ // V7K: vstr d16, [sp, #8]
190
+ // V7K: vldr d16, [sp, #8]
191
+ // V7K: vstr d16, [sp]
192
+ // V7K: vldr d0, [sp]
193
+ // V7K: add sp, #{{[0-9]+}}
194
+ // V7K: bx lr
186
195
// Backend will assign r0, r1 and r2 for input parameters and d0 for return values.
187
196
class Bignum { }
188
197
enum MultiPayload {
@@ -210,11 +219,9 @@ func testMultiP(x: MultiPayload) -> Double {
210
219
// CHECK: ret float
211
220
// V7K-LABEL: _$s8test_v7k0A3Opt
212
221
// V7K: tst.w r1, #1
213
- // V7K: str r0, [sp, [[SLOT:#[0-9]+]]
214
- // V7K: ldr r0, [sp, [[SLOT]]
215
222
// V7K: vmov s0, r0
216
- // V7K: vstr s0, [sp, [[SLOT2 :#[0-9]+]]
217
- // V7K: vldr s0, [sp, [[SLOT2 ]]
223
+ // V7K: vstr s0, [sp, [[SLOT :#[0-9]+]]
224
+ // V7K: vldr s0, [sp, [[SLOT ]]
218
225
// V7K: pop {{{.*}}, pc}
219
226
func testOpt( x: Float ? ) -> Float {
220
227
return x!
@@ -273,12 +280,9 @@ struct MyRect4 {
273
280
// V7K-LABEL: _$s8test_v7k0A4Ret2
274
281
// double in d0, i32 in r0, return in d0,...,d3
275
282
// V7K: vmov [[ID:s[0-9]+]], r0
276
- // V7K: vcvt.f64.s32 [[ID2:d[0-9]+]], [[ID]]
277
- // V7K: vstr d0, [sp, #8]
278
- // V7K: vmov.f64 d0, [[ID2]]
283
+ // V7K: vcvt.f64.s32 d0, [[ID]]
279
284
// V7K: bl
280
- // V7K: vldr [[ID3:d[0-9]+]], [sp, #8]
281
- // V7K: vmov.f64 d2, [[ID3]]
285
+ // V7K: vldr d2, [sp, #8]
282
286
func testRet2( w : Double , i : Int ) -> MyRect {
283
287
var r = MyRect ( x : Double ( i) , y : 2.0 , w : 3.0 , h : 4.0 )
284
288
r. w = w
@@ -292,16 +296,16 @@ func testRet3() -> MyRect2 {
292
296
}
293
297
294
298
// Returning tuple?: (Int x 6)?
295
- // CHECK-LABEL: define hidden swiftcc void @"$s8test_v7k7minMax2{{.*}}"({{%TSi.*}} noalias nocapture sret %0, i32 %1, i32 %2)
299
+ // CHECK-LABEL: define hidden swiftcc void @"$s8test_v7k7minMax2{{.*}}"({{%TSi.*}} noalias nocapture sret({{.*}}) %0, i32 %1, i32 %2)
296
300
// V7K-LABEL: _$s8test_v7k7minMax2
297
301
// We will indirectly return an optional with the address in r0, input parameters will be in r1 and r2
298
- // V7K: cmp r1, r2
299
302
// V7K: str r0, [sp, [[IDX:#[0-9]+]]]
303
+ // V7K: cmp r1, r2
300
304
// V7K: ldr [[R0_RELOAD:r[0-9]+]], [sp, [[IDX]]]
301
- // V7K: str.w {{.*}}, [{{.*}}[[R0_RELOAD]]]
305
+ // V7K: str {{.*}}, [{{.*}}[[R0_RELOAD]]]
302
306
// V7K: str.w {{.*}}, [{{.*}}[[R0_RELOAD]], #4]
303
307
// V7K: str.w {{.*}}, [{{.*}}[[R0_RELOAD]], #8]
304
- // V7K: str {{.*}}, [{{.*}}[[R0_RELOAD]], #12]
308
+ // V7K: str.w {{.*}}, [{{.*}}[[R0_RELOAD]], #12]
305
309
// V7K: str {{.*}}, [{{.*}}[[R0_RELOAD]], #16]
306
310
// V7K: str {{.*}}, [{{.*}}[[R0_RELOAD]], #20]
307
311
// V7K: and {{.*}}, {{.*}}, #1
@@ -320,7 +324,7 @@ func minMax2(x : Int, y : Int) -> (min: Int, max: Int, min2: Int, max2: Int, min
320
324
}
321
325
322
326
// Returning struct?: {Int x 6}?
323
- // CHECK-LABEL: define hidden swiftcc void @"$s8test_v7k7minMax3{{.*}}"({{%T.*}} noalias nocapture sret %0, i32 %1, i32 %2)
327
+ // CHECK-LABEL: define hidden swiftcc void @"$s8test_v7k7minMax3{{.*}}"({{%T.*}} noalias nocapture sret({{.*}}) %0, i32 %1, i32 %2)
324
328
// V7K-LABEL: _$s8test_v7k7minMax3
325
329
struct Ret {
326
330
var min : Int
0 commit comments