From d18de69e5ad1a8d7d2e124e9debf368dccda0fac Mon Sep 17 00:00:00 2001 From: Anton Kirilov Date: Wed, 23 Sep 2020 12:56:06 +0100 Subject: [PATCH] AArch64: Add test cases for callee-saved SIMD & FP registers Copyright (c) 2020, Arm Limited. --- .../filetests/filetests/isa/aarch64/call.clif | 159 ++++++++++++++++++ 1 file changed, 159 insertions(+) diff --git a/cranelift/filetests/filetests/isa/aarch64/call.clif b/cranelift/filetests/filetests/isa/aarch64/call.clif index ad14eca992..579c993b19 100644 --- a/cranelift/filetests/filetests/isa/aarch64/call.clif +++ b/cranelift/filetests/filetests/isa/aarch64/call.clif @@ -130,3 +130,162 @@ block0(v0: i8): ; nextln: mov sp, fp ; nextln: ldp fp, lr, [sp], #16 ; nextln: ret + +function %f8() { + fn0 = %g0() -> f32 + fn1 = %g1() -> f64 + fn2 = %g2() + fn3 = %g3(f32) + fn4 = %g4(f64) + +block0: + v0 = call fn0() + v1 = call fn1() + v2 = call fn1() + call fn2() + call fn3(v0) + call fn4(v1) + call fn4(v2) + return +} + +; check: stp fp, lr, [sp, #-16]! +; nextln: mov fp, sp +; nextln: sub sp, sp, #48 +; nextln: str q8, [sp] +; nextln: str q9, [sp, #16] +; nextln: str q10, [sp, #32] +; nextln: virtual_sp_offset_adjust 48 +; nextln: ldr x0, 8 ; b 12 ; data +; nextln: blr x0 +; nextln: mov v8.16b, v0.16b +; nextln: ldr x0, 8 ; b 12 ; data +; nextln: blr x0 +; nextln: mov v9.16b, v0.16b +; nextln: ldr x0, 8 ; b 12 ; data +; nextln: blr x0 +; nextln: mov v10.16b, v0.16b +; nextln: ldr x0, 8 ; b 12 ; data +; nextln: blr x0 +; nextln: mov v0.16b, v8.16b +; nextln: ldr x0, 8 ; b 12 ; data +; nextln: blr x0 +; nextln: mov v0.16b, v9.16b +; nextln: ldr x0, 8 ; b 12 ; data +; nextln: blr x0 +; nextln: mov v0.16b, v10.16b +; nextln: ldr x0, 8 ; b 12 ; data +; nextln: blr x0 +; nextln: ldr q8, [sp] +; nextln: ldr q9, [sp, #16] +; nextln: ldr q10, [sp, #32] +; nextln: add sp, sp, #48 +; nextln: mov sp, fp +; nextln: ldp fp, lr, [sp], #16 +; nextln: ret + +function %f9() { + fn0 = %g0() -> i8x16 + fn1 = %g1() + fn2 = %g2(i8x16) + +block0: + v0 = call fn0() + v1 = call fn0() + v2 = call fn0() + call fn1() + call fn2(v0) + call fn2(v1) + call fn2(v2) + return +} + +; check: stp fp, lr, [sp, #-16]! +; nextln: mov fp, sp +; nextln: sub sp, sp, #48 +; nextln: str q8, [sp] +; nextln: str q9, [sp, #16] +; nextln: str q10, [sp, #32] +; nextln: virtual_sp_offset_adjust 48 +; nextln: ldr x0, 8 ; b 12 ; data +; nextln: blr x0 +; nextln: mov v8.16b, v0.16b +; nextln: ldr x0, 8 ; b 12 ; data +; nextln: blr x0 +; nextln: mov v9.16b, v0.16b +; nextln: ldr x0, 8 ; b 12 ; data +; nextln: blr x0 +; nextln: mov v10.16b, v0.16b +; nextln: ldr x0, 8 ; b 12 ; data +; nextln: blr x0 +; nextln: mov v0.16b, v8.16b +; nextln: ldr x0, 8 ; b 12 ; data +; nextln: blr x0 +; nextln: mov v0.16b, v9.16b +; nextln: ldr x0, 8 ; b 12 ; data +; nextln: blr x0 +; nextln: mov v0.16b, v10.16b +; nextln: ldr x0, 8 ; b 12 ; data +; nextln: blr x0 +; nextln: ldr q8, [sp] +; nextln: ldr q9, [sp, #16] +; nextln: ldr q10, [sp, #32] +; nextln: add sp, sp, #48 +; nextln: mov sp, fp +; nextln: ldp fp, lr, [sp], #16 +; nextln: ret + +function %f10() { + fn0 = %g0() -> f32 + fn1 = %g1() -> f64 + fn2 = %g2() -> i8x16 + fn3 = %g3() + fn4 = %g4(f32) + fn5 = %g5(f64) + fn6 = %g6(i8x16) + +block0: + v0 = call fn0() + v1 = call fn1() + v2 = call fn2() + call fn3() + call fn4(v0) + call fn5(v1) + call fn6(v2) + return +} + +; check: stp fp, lr, [sp, #-16]! +; nextln: mov fp, sp +; nextln: sub sp, sp, #48 +; nextln: str q8, [sp] +; nextln: str q9, [sp, #16] +; nextln: str q10, [sp, #32] +; nextln: virtual_sp_offset_adjust 48 +; nextln: ldr x0, 8 ; b 12 ; data +; nextln: blr x0 +; nextln: mov v8.16b, v0.16b +; nextln: ldr x0, 8 ; b 12 ; data +; nextln: blr x0 +; nextln: mov v9.16b, v0.16b +; nextln: ldr x0, 8 ; b 12 ; data +; nextln: blr x0 +; nextln: mov v10.16b, v0.16b +; nextln: ldr x0, 8 ; b 12 ; data +; nextln: blr x0 +; nextln: mov v0.16b, v8.16b +; nextln: ldr x0, 8 ; b 12 ; data +; nextln: blr x0 +; nextln: mov v0.16b, v9.16b +; nextln: ldr x0, 8 ; b 12 ; data +; nextln: blr x0 +; nextln: mov v0.16b, v10.16b +; nextln: ldr x0, 8 ; b 12 ; data +; nextln: blr x0 +; nextln: ldr q8, [sp] +; nextln: ldr q9, [sp, #16] +; nextln: ldr q10, [sp, #32] +; nextln: add sp, sp, #48 +; nextln: mov sp, fp +; nextln: ldp fp, lr, [sp], #16 +; nextln: ret