1; Tests validating the vfp calling convention for ARM32. 2; 3; RUN: %if --need=target_ARM32 \ 4; RUN: --command %p2i --filetype=obj \ 5; RUN: --disassemble --target arm32 -i %s --args -O2 \ 6; RUN: -allow-externally-defined-symbols \ 7; RUN: | %if --need=target_ARM32 \ 8; RUN: --command FileCheck %s 9; RUN: %if --need=target_ARM32 \ 10; RUN: --command %p2i --filetype=obj --disassemble --target arm32 \ 11; RUN: -i %s --args -Om1 \ 12; RUN: -allow-externally-defined-symbols \ 13; RUN: | %if --need=target_ARM32 \ 14; RUN: --command FileCheck %s 15 16; Boring tests ensuring float arguments are allocated "correctly." Unfortunately 17; this test cannot verify whether the right arguments are being allocated to the 18; right register. 19declare void @float1(float %p0) 20declare void @float2(float %p0, float %p1) 21declare void @float3(float %p0, float %p1, float %p2) 22declare void @float4(float %p0, float %p1, float %p2, float %p3) 23declare void @float5(float %p0, float %p1, float %p2, float %p3, float %p4) 24declare void @float6(float %p0, float %p1, float %p2, float %p3, float %p4, 25 float %p5) 26declare void @float7(float %p0, float %p1, float %p2, float %p3, float %p4, 27 float %p5, float %p6) 28declare void @float8(float %p0, float %p1, float %p2, float %p3, float %p4, 29 float %p5, float %p6, float %p7) 30declare void @float9(float %p0, float %p1, float %p2, float %p3, float %p4, 31 float %p5, float %p6, float %p7, float %p8) 32declare void @float10(float %p0, float %p1, float %p2, float %p3, float %p4, 33 float %p5, float %p6, float %p7, float %p8, float %p9) 34declare void @float11(float %p0, float %p1, float %p2, float %p3, float %p4, 35 float %p5, float %p6, float %p7, float %p8, float %p9, 36 float %p10) 37declare void @float12(float %p0, float %p1, float %p2, float %p3, float %p4, 38 float %p5, float %p6, float %p7, float %p8, float %p9, 39 float %p10, float %p11) 40declare void @float13(float %p0, float %p1, float %p2, float %p3, float %p4, 41 float %p5, float %p6, float %p7, float %p8, float %p9, 42 float %p10, float %p11, float %p12) 43declare void @float14(float %p0, float %p1, float %p2, float %p3, float %p4, 44 float %p5, float %p6, float %p7, float %p8, float %p9, 45 float %p10, float %p11, float %p12, float %p13) 46declare void @float15(float %p0, float %p1, float %p2, float %p3, float %p4, 47 float %p5, float %p6, float %p7, float %p8, float %p9, 48 float %p10, float %p11, float %p12, float %p13, 49 float %p14) 50declare void @float16(float %p0, float %p1, float %p2, float %p3, float %p4, 51 float %p5, float %p6, float %p7, float %p8, float %p9, 52 float %p10, float %p11, float %p12, float %p13, 53 float %p14, float %p15) 54declare void @float17(float %p0, float %p1, float %p2, float %p3, float %p4, 55 float %p5, float %p6, float %p7, float %p8, float %p9, 56 float %p10, float %p11, float %p12, float %p13, 57 float %p14, float %p15, float %p16) 58declare void @float18(float %p0, float %p1, float %p2, float %p3, float %p4, 59 float %p5, float %p6, float %p7, float %p8, float %p9, 60 float %p10, float %p11, float %p12, float %p13, 61 float %p14, float %p15, float %p16, float %p17) 62define internal void @floatHarness() nounwind { 63; CHECK-LABEL: floatHarness 64 call void @float1(float 1.0) 65; CHECK-DAG: vmov.f32 s0 66; CHECK: bl {{.*}} float1 67 call void @float2(float 1.0, float 2.0) 68; CHECK-DAG: vmov.f32 s0 69; CHECK-DAG: vmov.f32 s1 70; CHECK: bl {{.*}} float2 71 call void @float3(float 1.0, float 2.0, float 3.0) 72; CHECK-DAG: vmov.f32 s0 73; CHECK-DAG: vmov.f32 s1 74; CHECK-DAG: vmov.f32 s2 75; CHECK: bl {{.*}} float3 76 call void @float4(float 1.0, float 2.0, float 3.0, float 4.0) 77; CHECK-DAG: vmov.f32 s0 78; CHECK-DAG: vmov.f32 s1 79; CHECK-DAG: vmov.f32 s2 80; CHECK-DAG: vmov.f32 s3 81; CHECK: bl {{.*}} float4 82 call void @float5(float 1.0, float 2.0, float 3.0, float 4.0, float 5.0) 83; CHECK-DAG: vmov.f32 s0 84; CHECK-DAG: vmov.f32 s1 85; CHECK-DAG: vmov.f32 s2 86; CHECK-DAG: vmov.f32 s3 87; CHECK-DAG: vmov.f32 s4 88; CHECK: bl {{.*}} float5 89 call void @float6(float 1.0, float 2.0, float 3.0, float 4.0, float 5.0, 90 float 6.0) 91; CHECK-DAG: vmov.f32 s0 92; CHECK-DAG: vmov.f32 s1 93; CHECK-DAG: vmov.f32 s2 94; CHECK-DAG: vmov.f32 s3 95; CHECK-DAG: vmov.f32 s4 96; CHECK-DAG: vmov.f32 s5 97; CHECK: bl {{.*}} float6 98 call void @float7(float 1.0, float 2.0, float 3.0, float 4.0, float 5.0, 99 float 6.0, float 7.0) 100; CHECK-DAG: vmov.f32 s0 101; CHECK-DAG: vmov.f32 s1 102; CHECK-DAG: vmov.f32 s2 103; CHECK-DAG: vmov.f32 s3 104; CHECK-DAG: vmov.f32 s4 105; CHECK-DAG: vmov.f32 s5 106; CHECK-DAG: vmov.f32 s6 107; CHECK: bl {{.*}} float7 108 call void @float8(float 1.0, float 2.0, float 3.0, float 4.0, float 5.0, 109 float 6.0, float 7.0, float 8.0) 110; CHECK-DAG: vmov.f32 s0 111; CHECK-DAG: vmov.f32 s1 112; CHECK-DAG: vmov.f32 s2 113; CHECK-DAG: vmov.f32 s3 114; CHECK-DAG: vmov.f32 s4 115; CHECK-DAG: vmov.f32 s5 116; CHECK-DAG: vmov.f32 s6 117; CHECK-DAG: vmov.f32 s7 118; CHECK: bl {{.*}} float8 119 call void @float9(float 1.0, float 2.0, float 3.0, float 4.0, float 5.0, 120 float 6.0, float 7.0, float 8.0, float 9.0) 121; CHECK-DAG: vmov.f32 s0 122; CHECK-DAG: vmov.f32 s1 123; CHECK-DAG: vmov.f32 s2 124; CHECK-DAG: vmov.f32 s3 125; CHECK-DAG: vmov.f32 s4 126; CHECK-DAG: vmov.f32 s5 127; CHECK-DAG: vmov.f32 s6 128; CHECK-DAG: vmov.f32 s7 129; CHECK-DAG: vmov.f32 s8 130; CHECK: bl {{.*}} float9 131 call void @float10(float 1.0, float 2.0, float 3.0, float 4.0, float 5.0, 132 float 6.0, float 7.0, float 8.0, float 9.0, float 10.0) 133; CHECK-DAG: vmov.f32 s0 134; CHECK-DAG: vmov.f32 s1 135; CHECK-DAG: vmov.f32 s2 136; CHECK-DAG: vmov.f32 s3 137; CHECK-DAG: vmov.f32 s4 138; CHECK-DAG: vmov.f32 s5 139; CHECK-DAG: vmov.f32 s6 140; CHECK-DAG: vmov.f32 s7 141; CHECK-DAG: vmov.f32 s8 142; CHECK-DAG: vmov.f32 s9 143; CHECK: bl {{.*}} float10 144 call void @float11(float 1.0, float 2.0, float 3.0, float 4.0, float 5.0, 145 float 6.0, float 7.0, float 8.0, float 9.0, float 10.0, 146 float 11.0) 147; CHECK-DAG: vmov.f32 s0 148; CHECK-DAG: vmov.f32 s1 149; CHECK-DAG: vmov.f32 s2 150; CHECK-DAG: vmov.f32 s3 151; CHECK-DAG: vmov.f32 s4 152; CHECK-DAG: vmov.f32 s5 153; CHECK-DAG: vmov.f32 s6 154; CHECK-DAG: vmov.f32 s7 155; CHECK-DAG: vmov.f32 s8 156; CHECK-DAG: vmov.f32 s9 157; CHECK-DAG: vmov.f32 s10 158; CHECK: bl {{.*}} float11 159 call void @float12(float 1.0, float 2.0, float 3.0, float 4.0, float 5.0, 160 float 6.0, float 7.0, float 8.0, float 9.0, float 10.0, 161 float 11.0, float 12.0) 162; CHECK-DAG: vmov.f32 s0 163; CHECK-DAG: vmov.f32 s1 164; CHECK-DAG: vmov.f32 s2 165; CHECK-DAG: vmov.f32 s3 166; CHECK-DAG: vmov.f32 s4 167; CHECK-DAG: vmov.f32 s5 168; CHECK-DAG: vmov.f32 s6 169; CHECK-DAG: vmov.f32 s7 170; CHECK-DAG: vmov.f32 s8 171; CHECK-DAG: vmov.f32 s9 172; CHECK-DAG: vmov.f32 s10 173; CHECK-DAG: vmov.f32 s11 174; CHECK: bl {{.*}} float12 175 call void @float13(float 1.0, float 2.0, float 3.0, float 4.0, float 5.0, 176 float 6.0, float 7.0, float 8.0, float 9.0, float 10.0, 177 float 11.0, float 12.0, float 13.0) 178; CHECK-DAG: vmov.f32 s0 179; CHECK-DAG: vmov.f32 s1 180; CHECK-DAG: vmov.f32 s2 181; CHECK-DAG: vmov.f32 s3 182; CHECK-DAG: vmov.f32 s4 183; CHECK-DAG: vmov.f32 s5 184; CHECK-DAG: vmov.f32 s6 185; CHECK-DAG: vmov.f32 s7 186; CHECK-DAG: vmov.f32 s8 187; CHECK-DAG: vmov.f32 s9 188; CHECK-DAG: vmov.f32 s10 189; CHECK-DAG: vmov.f32 s11 190; CHECK-DAG: vmov.f32 s12 191; CHECK: bl {{.*}} float13 192 call void @float14(float 1.0, float 2.0, float 3.0, float 4.0, float 5.0, 193 float 6.0, float 7.0, float 8.0, float 9.0, float 10.0, 194 float 11.0, float 12.0, float 13.0, float 14.0) 195; CHECK-DAG: vmov.f32 s0 196; CHECK-DAG: vmov.f32 s1 197; CHECK-DAG: vmov.f32 s2 198; CHECK-DAG: vmov.f32 s3 199; CHECK-DAG: vmov.f32 s4 200; CHECK-DAG: vmov.f32 s5 201; CHECK-DAG: vmov.f32 s6 202; CHECK-DAG: vmov.f32 s7 203; CHECK-DAG: vmov.f32 s8 204; CHECK-DAG: vmov.f32 s9 205; CHECK-DAG: vmov.f32 s10 206; CHECK-DAG: vmov.f32 s11 207; CHECK-DAG: vmov.f32 s12 208; CHECK-DAG: vmov.f32 s13 209; CHECK: bl {{.*}} float14 210 call void @float15(float 1.0, float 2.0, float 3.0, float 4.0, float 5.0, 211 float 6.0, float 7.0, float 8.0, float 9.0, float 10.0, 212 float 11.0, float 12.0, float 13.0, float 14.0, 213 float 15.0) 214; CHECK-DAG: vmov.f32 s0 215; CHECK-DAG: vmov.f32 s1 216; CHECK-DAG: vmov.f32 s2 217; CHECK-DAG: vmov.f32 s3 218; CHECK-DAG: vmov.f32 s4 219; CHECK-DAG: vmov.f32 s5 220; CHECK-DAG: vmov.f32 s6 221; CHECK-DAG: vmov.f32 s7 222; CHECK-DAG: vmov.f32 s8 223; CHECK-DAG: vmov.f32 s9 224; CHECK-DAG: vmov.f32 s10 225; CHECK-DAG: vmov.f32 s11 226; CHECK-DAG: vmov.f32 s12 227; CHECK-DAG: vmov.f32 s13 228; CHECK-DAG: vmov.f32 s14 229; CHECK: bl {{.*}} float15 230 call void @float16(float 1.0, float 2.0, float 3.0, float 4.0, float 5.0, 231 float 6.0, float 7.0, float 8.0, float 9.0, float 10.0, 232 float 11.0, float 12.0, float 13.0, float 14.0, 233 float 15.0, float 16.0) 234; CHECK-DAG: vmov.f32 s0 235; CHECK-DAG: vmov.f32 s1 236; CHECK-DAG: vmov.f32 s2 237; CHECK-DAG: vmov.f32 s3 238; CHECK-DAG: vmov.f32 s4 239; CHECK-DAG: vmov.f32 s5 240; CHECK-DAG: vmov.f32 s6 241; CHECK-DAG: vmov.f32 s7 242; CHECK-DAG: vmov.f32 s8 243; CHECK-DAG: vmov.f32 s9 244; CHECK-DAG: vmov.f32 s10 245; CHECK-DAG: vmov.f32 s11 246; CHECK-DAG: vmov.f32 s12 247; CHECK-DAG: vmov.f32 s13 248; CHECK-DAG: vmov.f32 s14 249; CHECK-DAG: vmov.f32 s15 250; CHECK: bl {{.*}} float16 251 call void @float17(float 1.0, float 2.0, float 3.0, float 4.0, float 5.0, 252 float 6.0, float 7.0, float 8.0, float 9.0, float 10.0, 253 float 11.0, float 12.0, float 13.0, float 14.0, 254 float 15.0, float 16.0, float 17.0) 255; CHECK-DAG: vmov.f32 s0 256; CHECK-DAG: vmov.f32 s1 257; CHECK-DAG: vmov.f32 s2 258; CHECK-DAG: vmov.f32 s3 259; CHECK-DAG: vmov.f32 s4 260; CHECK-DAG: vmov.f32 s5 261; CHECK-DAG: vmov.f32 s6 262; CHECK-DAG: vmov.f32 s7 263; CHECK-DAG: vmov.f32 s8 264; CHECK-DAG: vmov.f32 s9 265; CHECK-DAG: vmov.f32 s10 266; CHECK-DAG: vmov.f32 s11 267; CHECK-DAG: vmov.f32 s12 268; CHECK-DAG: vmov.f32 s13 269; CHECK-DAG: vmov.f32 s14 270; CHECK-DAG: vmov.f32 s15 271; CHECK-DAG: vstr s{{.*}}, [sp] 272; CHECK: bl {{.*}} float17 273 call void @float18(float 1.0, float 2.0, float 3.0, float 4.0, float 5.0, 274 float 6.0, float 7.0, float 8.0, float 9.0, float 10.0, 275 float 11.0, float 12.0, float 13.0, float 14.0, 276 float 15.0, float 16.0, float 17.0, float 18.0) 277; CHECK-DAG: vmov.f32 s0 278; CHECK-DAG: vmov.f32 s1 279; CHECK-DAG: vmov.f32 s2 280; CHECK-DAG: vmov.f32 s3 281; CHECK-DAG: vmov.f32 s4 282; CHECK-DAG: vmov.f32 s5 283; CHECK-DAG: vmov.f32 s6 284; CHECK-DAG: vmov.f32 s7 285; CHECK-DAG: vmov.f32 s8 286; CHECK-DAG: vmov.f32 s9 287; CHECK-DAG: vmov.f32 s10 288; CHECK-DAG: vmov.f32 s11 289; CHECK-DAG: vmov.f32 s12 290; CHECK-DAG: vmov.f32 s13 291; CHECK-DAG: vmov.f32 s14 292; CHECK-DAG: vmov.f32 s15 293; CHECK-DAG: vstr s{{.*}}, [sp] 294; CHECK-DAG: vstr s{{.*}}, [sp, #4] 295; CHECK: bl {{.*}} float18 296 ret void 297} 298 299declare void @double1(double %p0) 300declare void @double2(double %p0, double %p1) 301declare void @double3(double %p0, double %p1, double %p2) 302declare void @double4(double %p0, double %p1, double %p2, double %p3) 303declare void @double5(double %p0, double %p1, double %p2, double %p3, 304 double %p4) 305declare void @double6(double %p0, double %p1, double %p2, double %p3, 306 double %p4, double %p5) 307declare void @double7(double %p0, double %p1, double %p2, double %p3, 308 double %p4, double %p5, double %p6) 309declare void @double8(double %p0, double %p1, double %p2, double %p3, 310 double %p4, double %p5, double %p6, double %p7) 311declare void @double9(double %p0, double %p1, double %p2, double %p3, 312 double %p4, double %p5, double %p6, double %p7, 313 double %p8) 314declare void @double10(double %p0, double %p1, double %p2, double %p3, 315 double %p4, double %p5, double %p6, double %p7, 316 double %p8, double %p9) 317define internal void @doubleHarness() nounwind { 318; CHECK-LABEL: doubleHarness 319 call void @double1(double 1.0) 320; CHECK-DAG: vmov.f64 d0 321; CHECK: bl {{.*}} double1 322 call void @double2(double 1.0, double 2.0) 323; CHECK-DAG: vmov.f64 d0 324; CHECK-DAG: vmov.f64 d1 325; CHECK: bl {{.*}} double2 326 call void @double3(double 1.0, double 2.0, double 3.0) 327; CHECK-DAG: vmov.f64 d0 328; CHECK-DAG: vmov.f64 d1 329; CHECK-DAG: vmov.f64 d2 330; CHECK: bl {{.*}} double3 331 call void @double4(double 1.0, double 2.0, double 3.0, double 4.0) 332; CHECK-DAG: vmov.f64 d0 333; CHECK-DAG: vmov.f64 d1 334; CHECK-DAG: vmov.f64 d2 335; CHECK-DAG: vmov.f64 d3 336; CHECK: bl {{.*}} double4 337 call void @double5(double 1.0, double 2.0, double 3.0, double 4.0, 338 double 5.0) 339; CHECK-DAG: vmov.f64 d0 340; CHECK-DAG: vmov.f64 d1 341; CHECK-DAG: vmov.f64 d2 342; CHECK-DAG: vmov.f64 d3 343; CHECK-DAG: vmov.f64 d4 344; CHECK: bl {{.*}} double5 345 call void @double6(double 1.0, double 2.0, double 3.0, double 4.0, 346 double 5.0, double 6.0) 347; CHECK-DAG: vmov.f64 d0 348; CHECK-DAG: vmov.f64 d1 349; CHECK-DAG: vmov.f64 d2 350; CHECK-DAG: vmov.f64 d3 351; CHECK-DAG: vmov.f64 d4 352; CHECK-DAG: vmov.f64 d5 353; CHECK: bl {{.*}} double6 354 call void @double7(double 1.0, double 2.0, double 3.0, double 4.0, 355 double 5.0, double 6.0, double 7.0) 356; CHECK-DAG: vmov.f64 d0 357; CHECK-DAG: vmov.f64 d1 358; CHECK-DAG: vmov.f64 d2 359; CHECK-DAG: vmov.f64 d3 360; CHECK-DAG: vmov.f64 d4 361; CHECK-DAG: vmov.f64 d5 362; CHECK-DAG: vmov.f64 d6 363; CHECK: bl {{.*}} double7 364 call void @double8(double 1.0, double 2.0, double 3.0, double 4.0, 365 double 5.0, double 6.0, double 7.0, double 8.0) 366; CHECK-DAG: vmov.f64 d0 367; CHECK-DAG: vmov.f64 d1 368; CHECK-DAG: vmov.f64 d2 369; CHECK-DAG: vmov.f64 d3 370; CHECK-DAG: vmov.f64 d4 371; CHECK-DAG: vmov.f64 d5 372; CHECK-DAG: vmov.f64 d6 373; CHECK-DAG: vmov.f64 d7 374; CHECK: bl {{.*}} double8 375 call void @double9(double 1.0, double 2.0, double 3.0, double 4.0, 376 double 5.0, double 6.0, double 7.0, double 8.0, 377 double 9.0) 378; CHECK-DAG: vmov.f64 d0 379; CHECK-DAG: vmov.f64 d1 380; CHECK-DAG: vmov.f64 d2 381; CHECK-DAG: vmov.f64 d3 382; CHECK-DAG: vmov.f64 d4 383; CHECK-DAG: vmov.f64 d5 384; CHECK-DAG: vmov.f64 d6 385; CHECK-DAG: vmov.f64 d7 386; CHECK-DAG: vstr d{{.*}}, [sp] 387; CHECK: bl {{.*}} double9 388 call void @double10(double 1.0, double 2.0, double 3.0, double 4.0, 389 double 5.0, double 6.0, double 7.0, double 8.0, 390 double 9.0, double 10.0) 391; CHECK-DAG: vmov.f64 d0 392; CHECK-DAG: vmov.f64 d1 393; CHECK-DAG: vmov.f64 d2 394; CHECK-DAG: vmov.f64 d3 395; CHECK-DAG: vmov.f64 d4 396; CHECK-DAG: vmov.f64 d5 397; CHECK-DAG: vmov.f64 d6 398; CHECK-DAG: vmov.f64 d7 399; CHECK-DAG: vstr d{{.*}}, [sp] 400; CHECK-DAG: vstr d{{.*}}, [sp, #8] 401; CHECK: bl {{.*}} double10 402 403 ret void 404} 405 406declare void @testFDF(float %p0, double %p1, float %p2) 407declare void @testFDDF(float %p0, double %p1, double %p2, float %p3) 408declare void @testFDDDF(float %p0, double %p1, double %p2, double %p3, 409 float %p4) 410declare void @testFDDDDF(float %p0, double %p1, double %p2, double %p3, 411 double %p4, float %p5) 412declare void @testFDDDDDF(float %p0, double %p1, double %p2, double %p3, 413 double %p4, double %p5, float %p6) 414declare void @testFDDDDDDF(float %p0, double %p1, double %p2, double %p3, 415 double %p4, double %p5, double %p6, float %p7) 416declare void @testFDDDDDDDF(float %p0, double %p1, double %p2, double %p3, 417 double %p4, double %p5, double %p6, double %p7, 418 float %p8) 419declare void @testFDDDDDDDFD(float %p0, double %p1, double %p2, double %p3, 420 double %p4, double %p5, double %p6, double %p7, 421 float %p8, double %p9) 422declare void @testFDDDDDDDDF(float %p0, double %p1, double %p2, double %p3, 423 double %p4, double %p5, double %p6, double %p7, 424 double %p8, float %p9) 425declare void @testFDDDDDDDDDF(float %p0, double %p1, double %p2, double %p3, 426 double %p4, double %p5, double %p6, double %p7, 427 double %p8, double %p9, float %p10) 428declare void @testFDDDDDDDDFD(float %p0, double %p1, double %p2, double %p3, 429 double %p4, double %p5, double %p6, double %p7, 430 double %p8, float %p9, double %p10) 431declare void @testFDDDDDDDDFDF(float %p0, double %p1, double %p2, double %p3, 432 double %p4, double %p5, double %p6, double %p7, 433 double %p8, float %p9, double %p10, float %p11) 434define internal void @packsFloats() nounwind { 435; CHECK-LABEL: packsFloats 436 call void @testFDF(float 1.0, double 2.0, float 3.0) 437; CHECK-DAG: vmov.f32 s0 438; CHECK-DAG: vmov.f64 d1 439; CHECK-DAG: vmov.f32 s1 440; CHECK: bl {{.*}} testFDF 441 call void @testFDDF(float 1.0, double 2.0, double 3.0, float 4.0) 442; CHECK-DAG: vmov.f32 s0 443; CHECK-DAG: vmov.f64 d1 444; CHECK-DAG: vmov.f64 d2 445; CHECK-DAG: vmov.f32 s1 446; CHECK: bl {{.*}} testFDDF 447 call void @testFDDDF(float 1.0, double 2.0, double 3.0, double 4.0, 448 float 5.0) 449; CHECK-DAG: vmov.f32 s0 450; CHECK-DAG: vmov.f64 d1 451; CHECK-DAG: vmov.f64 d2 452; CHECK-DAG: vmov.f64 d3 453; CHECK-DAG: vmov.f32 s1 454; CHECK: bl {{.*}} testFDDDF 455 call void @testFDDDDF(float 1.0, double 2.0, double 3.0, double 4.0, 456 double 5.0, float 6.0) 457; CHECK-DAG: vmov.f32 s0 458; CHECK-DAG: vmov.f64 d1 459; CHECK-DAG: vmov.f64 d2 460; CHECK-DAG: vmov.f64 d3 461; CHECK-DAG: vmov.f64 d4 462; CHECK-DAG: vmov.f32 s1 463; CHECK: bl {{.*}} testFDDDDF 464 call void @testFDDDDDF(float 1.0, double 2.0, double 3.0, double 4.0, 465 double 5.0, double 6.0, float 7.0) 466; CHECK-DAG: vmov.f32 s0 467; CHECK-DAG: vmov.f64 d1 468; CHECK-DAG: vmov.f64 d2 469; CHECK-DAG: vmov.f64 d3 470; CHECK-DAG: vmov.f64 d4 471; CHECK-DAG: vmov.f64 d5 472; CHECK-DAG: vmov.f32 s1 473; CHECK: bl {{.*}} testFDDDDDF 474 call void @testFDDDDDDF(float 1.0, double 2.0, double 3.0, double 4.0, 475 double 5.0, double 6.0, double 7.0, float 8.0) 476; CHECK-DAG: vmov.f32 s0 477; CHECK-DAG: vmov.f64 d1 478; CHECK-DAG: vmov.f64 d2 479; CHECK-DAG: vmov.f64 d3 480; CHECK-DAG: vmov.f64 d4 481; CHECK-DAG: vmov.f64 d5 482; CHECK-DAG: vmov.f64 d6 483; CHECK-DAG: vmov.f32 s1 484; CHECK: bl {{.*}} testFDDDDDDF 485 call void @testFDDDDDDDF(float 1.0, double 2.0, double 3.0, double 4.0, 486 double 5.0, double 6.0, double 7.0, double 8.0, 487 float 9.0) 488; CHECK-DAG: vmov.f32 s0 489; CHECK-DAG: vmov.f64 d1 490; CHECK-DAG: vmov.f64 d2 491; CHECK-DAG: vmov.f64 d3 492; CHECK-DAG: vmov.f64 d4 493; CHECK-DAG: vmov.f64 d5 494; CHECK-DAG: vmov.f64 d6 495; CHECK-DAG: vmov.f64 d7 496; CHECK-DAG: vmov.f32 s1 497; CHECK: bl {{.*}} testFDDDDDDDF 498 call void @testFDDDDDDDFD(float 1.0, double 2.0, double 3.0, double 4.0, 499 double 5.0, double 6.0, double 7.0, double 8.0, 500 float 9.0, double 10.0) 501; CHECK-DAG: vmov.f32 s0 502; CHECK-DAG: vmov.f64 d1 503; CHECK-DAG: vmov.f64 d2 504; CHECK-DAG: vmov.f64 d3 505; CHECK-DAG: vmov.f64 d4 506; CHECK-DAG: vmov.f64 d5 507; CHECK-DAG: vmov.f64 d6 508; CHECK-DAG: vmov.f64 d7 509; CHECK-DAG: vstr d{{.*}}, [sp] 510; CHECK-DAG: vmov.f32 s1 511; CHECK: bl {{.*}} testFDDDDDDDFD 512 call void @testFDDDDDDDDF(float 1.0, double 2.0, double 3.0, double 4.0, 513 double 5.0, double 6.0, double 7.0, double 8.0, 514 double 9.0, float 10.0) 515; CHECK-DAG: vmov.f32 s0 516; CHECK-DAG: vmov.f64 d1 517; CHECK-DAG: vmov.f64 d2 518; CHECK-DAG: vmov.f64 d3 519; CHECK-DAG: vmov.f64 d4 520; CHECK-DAG: vmov.f64 d5 521; CHECK-DAG: vmov.f64 d6 522; CHECK-DAG: vmov.f64 d7 523; CHECK-DAG: vstr d{{.*}}, [sp] 524; CHECK-DAG: vstr s{{.*}}, [sp, #8] 525; CHECK: bl {{.*}} testFDDDDDDDDF 526 call void @testFDDDDDDDDDF(float 1.0, double 2.0, double 3.0, double 4.0, 527 double 5.0, double 6.0, double 7.0, double 8.0, 528 double 9.0, double 10.0, float 11.0) 529; CHECK-DAG: vmov.f32 s0 530; CHECK-DAG: vmov.f64 d1 531; CHECK-DAG: vmov.f64 d2 532; CHECK-DAG: vmov.f64 d3 533; CHECK-DAG: vmov.f64 d4 534; CHECK-DAG: vmov.f64 d5 535; CHECK-DAG: vmov.f64 d6 536; CHECK-DAG: vmov.f64 d7 537; CHECK-DAG: vstr d{{.*}}, [sp] 538; CHECK-DAG: vstr d{{.*}}, [sp, #8] 539; CHECK-DAG: vstr s{{.*}}, [sp, #16] 540; CHECK: bl {{.*}} testFDDDDDDDDDF 541 call void @testFDDDDDDDDFD(float 1.0, double 2.0, double 3.0, double 4.0, 542 double 5.0, double 6.0, double 7.0, double 8.0, 543 double 9.0, float 10.0, double 11.0) 544; CHECK-DAG: vmov.f32 s0 545; CHECK-DAG: vmov.f64 d1 546; CHECK-DAG: vmov.f64 d2 547; CHECK-DAG: vmov.f64 d3 548; CHECK-DAG: vmov.f64 d4 549; CHECK-DAG: vmov.f64 d5 550; CHECK-DAG: vmov.f64 d6 551; CHECK-DAG: vmov.f64 d7 552; CHECK-DAG: vstr d{{.*}}, [sp] 553; CHECK-DAG: vstr s{{.*}}, [sp, #8] 554; CHECK-DAG: vstr d{{.*}}, [sp, #16] 555; CHECK: bl {{.*}} testFDDDDDDDDFD 556 call void @testFDDDDDDDDFDF(float 1.0, double 2.0, double 3.0, double 4.0, 557 double 5.0, double 6.0, double 7.0, double 8.0, 558 double 9.0, float 10.0, double 11.0, float 12.0) 559; CHECK-DAG: vmov.f32 s0 560; CHECK-DAG: vmov.f64 d1 561; CHECK-DAG: vmov.f64 d2 562; CHECK-DAG: vmov.f64 d3 563; CHECK-DAG: vmov.f64 d4 564; CHECK-DAG: vmov.f64 d5 565; CHECK-DAG: vmov.f64 d6 566; CHECK-DAG: vmov.f64 d7 567; CHECK-DAG: vstr d{{.*}}, [sp] 568; CHECK-DAG: vstr s{{.*}}, [sp, #8] 569; CHECK-DAG: vstr d{{.*}}, [sp, #16] 570; CHECK-DAG: vstr s{{.*}}, [sp, #24] 571; CHECK: bl {{.*}} testFDDDDDDDDFD 572 573 ret void 574} 575 576; TODO(jpp): add tests for stack alignment. 577