@@ -51,8 +51,8 @@ func addStack(d0: Double, d1: Double, d2: Double, d3: Double, d4: Double,
5151// CHECK: fadd float
5252// V7K-LABEL: _$s8test_v7k9addStack
5353// 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
5656// a is assigned to s14, b is via stack, c is via stack since it can't be back-filled to s15
5757func addStack2( d0: Double , d1: Double , d2: Double , d3: Double , d4: Double ,
5858 d5: Double , d6: Double , a: Float , b: Double , c: Float ) -> Float {
@@ -81,8 +81,11 @@ func testSingle(x: SingleCase) -> Int32{
8181// CHECK-LABEL: define hidden swiftcc double @"$s8test_v7k0A4Data{{.*}}"(i32 %0, double %1)
8282// CHECK: ret double
8383// 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
8689enum DataCase { case Y( Int , Double ) }
8790func testData( x: DataCase ) -> Double {
8891 switch x {
@@ -116,7 +119,7 @@ func testClike2(x: CLike2) -> Int {
116119// CHECK: ret i32 [[ID]]
117120// V7K-LABEL: _$s8test_v7k0A6Clike8
118121// V7K: sxtb r0, r1
119- // V7K: cmp r0, #0
122+ // V7K: cbnz r0
120123// V7K: movs r0, #1
121124// V7K: mvn r0, #0
122125enum CLike8 {
@@ -153,7 +156,7 @@ func testClike8(t: Int, x: CLike8) -> Int {
153156// CHECK: phi double [ 0.000000e+00, {{.*}} ]
154157// V7K-LABEL: _$s8test_v7k0A7SingleP
155158// V7K: tst.w r2, #1
156- // V7K: vmov.f64 d0
159+ // V7K: vldr d0, [{{.*}}]
157160enum SinglePayload {
158161 case Paragraph
159162 case Char( Double )
@@ -180,9 +183,15 @@ func testSingleP(x: SinglePayload) -> Double {
180183// CHECK: phi double [ 0.000000e+00, {{.*}} ]
181184// CHECK: ret double
182185// 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
186195// Backend will assign r0, r1 and r2 for input parameters and d0 for return values.
187196class Bignum { }
188197enum MultiPayload {
@@ -210,11 +219,9 @@ func testMultiP(x: MultiPayload) -> Double {
210219// CHECK: ret float
211220// V7K-LABEL: _$s8test_v7k0A3Opt
212221// V7K: tst.w r1, #1
213- // V7K: str r0, [sp, [[SLOT:#[0-9]+]]
214- // V7K: ldr r0, [sp, [[SLOT]]
215222// 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 ]]
218225// V7K: pop {{{.*}}, pc}
219226func testOpt( x: Float ? ) -> Float {
220227 return x!
@@ -273,12 +280,9 @@ struct MyRect4 {
273280// V7K-LABEL: _$s8test_v7k0A4Ret2
274281// double in d0, i32 in r0, return in d0,...,d3
275282// 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]]
279284// V7K: bl
280- // V7K: vldr [[ID3:d[0-9]+]], [sp, #8]
281- // V7K: vmov.f64 d2, [[ID3]]
285+ // V7K: vldr d2, [sp, #8]
282286func testRet2( w : Double , i : Int ) -> MyRect {
283287 var r = MyRect ( x : Double ( i) , y : 2.0 , w : 3.0 , h : 4.0 )
284288 r. w = w
@@ -292,16 +296,16 @@ func testRet3() -> MyRect2 {
292296}
293297
294298// 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)
296300// V7K-LABEL: _$s8test_v7k7minMax2
297301// We will indirectly return an optional with the address in r0, input parameters will be in r1 and r2
298- // V7K: cmp r1, r2
299302// V7K: str r0, [sp, [[IDX:#[0-9]+]]]
303+ // V7K: cmp r1, r2
300304// V7K: ldr [[R0_RELOAD:r[0-9]+]], [sp, [[IDX]]]
301- // V7K: str.w {{.*}}, [{{.*}}[[R0_RELOAD]]]
305+ // V7K: str {{.*}}, [{{.*}}[[R0_RELOAD]]]
302306// V7K: str.w {{.*}}, [{{.*}}[[R0_RELOAD]], #4]
303307// V7K: str.w {{.*}}, [{{.*}}[[R0_RELOAD]], #8]
304- // V7K: str {{.*}}, [{{.*}}[[R0_RELOAD]], #12]
308+ // V7K: str.w {{.*}}, [{{.*}}[[R0_RELOAD]], #12]
305309// V7K: str {{.*}}, [{{.*}}[[R0_RELOAD]], #16]
306310// V7K: str {{.*}}, [{{.*}}[[R0_RELOAD]], #20]
307311// V7K: and {{.*}}, {{.*}}, #1
@@ -320,7 +324,7 @@ func minMax2(x : Int, y : Int) -> (min: Int, max: Int, min2: Int, max2: Int, min
320324}
321325
322326// 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)
324328// V7K-LABEL: _$s8test_v7k7minMax3
325329struct Ret {
326330 var min : Int
0 commit comments