Modify return pseudo-instructions to have pairs of registers: virtual and real. This allows us to constrain the virtual registers to the real ones specified by the abi, instead of directly emitting moves to those real registers.
84 lines
1.7 KiB
Plaintext
84 lines
1.7 KiB
Plaintext
test compile precise-output
|
|
target s390x
|
|
|
|
function %f1() -> i64, i64, i64, i64 {
|
|
block1:
|
|
v0 = iconst.i64 1
|
|
v1 = iconst.i64 2
|
|
v2 = iconst.i64 3
|
|
v3 = iconst.i64 4
|
|
return v0, v1, v2, v3
|
|
}
|
|
|
|
; block0:
|
|
; lghi %r2, 1
|
|
; lghi %r3, 2
|
|
; lghi %r4, 3
|
|
; lghi %r5, 4
|
|
; br %r14
|
|
|
|
function %f1() -> i64, i64, i64, i64, i64, i64 {
|
|
block1:
|
|
v0 = iconst.i64 1
|
|
v1 = iconst.i64 2
|
|
v2 = iconst.i64 3
|
|
v3 = iconst.i64 4
|
|
v4 = iconst.i64 5
|
|
v5 = iconst.i64 6
|
|
return v0, v1, v2, v3, v4, v5
|
|
}
|
|
|
|
; stmg %r7, %r15, 56(%r15)
|
|
; block0:
|
|
; lghi %r4, 1
|
|
; lgr %r14, %r4
|
|
; lghi %r3, 2
|
|
; lghi %r4, 3
|
|
; lghi %r5, 4
|
|
; lghi %r7, 5
|
|
; lghi %r9, 6
|
|
; stg %r7, 0(%r2)
|
|
; stg %r9, 8(%r2)
|
|
; lgr %r2, %r14
|
|
; lmg %r7, %r15, 56(%r15)
|
|
; br %r14
|
|
|
|
function %f3() -> f64, f64, f64, f64 {
|
|
block1:
|
|
v0 = f64const 0x0.0
|
|
v1 = f64const 0x1.0
|
|
v2 = f64const 0x2.0
|
|
v3 = f64const 0x3.0
|
|
return v0, v1, v2, v3
|
|
}
|
|
|
|
; block0:
|
|
; bras %r1, 12 ; data.f64 0 ; ld %f0, 0(%r1)
|
|
; bras %r1, 12 ; data.f64 1 ; ld %f2, 0(%r1)
|
|
; bras %r1, 12 ; data.f64 2 ; ld %f4, 0(%r1)
|
|
; bras %r1, 12 ; data.f64 3 ; ld %f6, 0(%r1)
|
|
; br %r14
|
|
|
|
function %f4() -> f64, f64, f64, f64, f64, f64 {
|
|
block1:
|
|
v0 = f64const 0x0.0
|
|
v1 = f64const 0x1.0
|
|
v2 = f64const 0x2.0
|
|
v3 = f64const 0x3.0
|
|
v4 = f64const 0x4.0
|
|
v5 = f64const 0x5.0
|
|
return v0, v1, v2, v3, v4, v5
|
|
}
|
|
|
|
; block0:
|
|
; bras %r1, 12 ; data.f64 0 ; ld %f0, 0(%r1)
|
|
; bras %r1, 12 ; data.f64 1 ; ld %f2, 0(%r1)
|
|
; bras %r1, 12 ; data.f64 2 ; ld %f4, 0(%r1)
|
|
; bras %r1, 12 ; data.f64 3 ; ld %f6, 0(%r1)
|
|
; bras %r1, 12 ; data.f64 4 ; vleg %v18, 0(%r1), 0
|
|
; bras %r1, 12 ; data.f64 5 ; vleg %v20, 0(%r1), 0
|
|
; vsteg %v18, 0(%r2), 0
|
|
; vsteg %v20, 8(%r2), 0
|
|
; br %r14
|
|
|