To keep cross-compiling straightforward, Cretonne shouldn't have any behavior that depends on the host. This renames the "Native" calling convention to "SystemV", which has a defined meaning for each target, so that it's clear that the calling convention doesn't change depending on what host Cretonne is running on.
33 lines
1.1 KiB
Plaintext
33 lines
1.1 KiB
Plaintext
; Test the legalization of function signatures.
|
|
test legalizer
|
|
isa riscv
|
|
|
|
; regex: V=v\d+
|
|
|
|
function %f() {
|
|
sig0 = (i32) -> i32 system_v
|
|
; check: sig0 = (i32 [%x10]) -> i32 [%x10] system_v
|
|
|
|
sig1 = (i64) -> b1 system_v
|
|
; check: sig1 = (i32 [%x10], i32 [%x11]) -> b1 [%x10] system_v
|
|
|
|
; The i64 argument must go in an even-odd register pair.
|
|
sig2 = (f32, i64) -> f64 system_v
|
|
; check: sig2 = (f32 [%f10], i32 [%x12], i32 [%x13]) -> f64 [%f10] system_v
|
|
|
|
; Spilling into the stack args.
|
|
sig3 = (f64, f64, f64, f64, f64, f64, f64, i64) -> f64 system_v
|
|
; check: sig3 = (f64 [%f10], f64 [%f11], f64 [%f12], f64 [%f13], f64 [%f14], f64 [%f15], f64 [%f16], i32 [0], i32 [4]) -> f64 [%f10] system_v
|
|
|
|
; Splitting vectors.
|
|
sig4 = (i32x4) system_v
|
|
; check: sig4 = (i32 [%x10], i32 [%x11], i32 [%x12], i32 [%x13]) system_v
|
|
|
|
; Splitting vectors, then splitting ints.
|
|
sig5 = (i64x4) system_v
|
|
; check: sig5 = (i32 [%x10], i32 [%x11], i32 [%x12], i32 [%x13], i32 [%x14], i32 [%x15], i32 [%x16], i32 [%x17]) system_v
|
|
|
|
ebb0:
|
|
return
|
|
}
|