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.
641 lines
9.7 KiB
Plaintext
641 lines
9.7 KiB
Plaintext
|
|
test compile precise-output
|
|
target s390x
|
|
|
|
; FIXME: add immediate operand versions
|
|
|
|
function %band_i128(i128, i128) -> i128 {
|
|
block0(v0: i128, v1: i128):
|
|
v2 = band.i128 v0, v1
|
|
return v2
|
|
}
|
|
|
|
; block0:
|
|
; vl %v0, 0(%r3)
|
|
; vl %v1, 0(%r4)
|
|
; vn %v6, %v0, %v1
|
|
; vst %v6, 0(%r2)
|
|
; br %r14
|
|
|
|
function %band_i64(i64, i64) -> i64 {
|
|
block0(v0: i64, v1: i64):
|
|
v2 = band.i64 v0, v1
|
|
return v2
|
|
}
|
|
|
|
; block0:
|
|
; ngr %r2, %r3
|
|
; br %r14
|
|
|
|
function %band_i64_mem(i64, i64) -> i64 {
|
|
block0(v0: i64, v1: i64):
|
|
v2 = load.i64 v1
|
|
v3 = band.i64 v0, v2
|
|
return v3
|
|
}
|
|
|
|
; block0:
|
|
; ng %r2, 0(%r3)
|
|
; br %r14
|
|
|
|
function %band_i32(i32, i32) -> i32 {
|
|
block0(v0: i32, v1: i32):
|
|
v2 = band.i32 v0, v1
|
|
return v2
|
|
}
|
|
|
|
; block0:
|
|
; nr %r2, %r3
|
|
; br %r14
|
|
|
|
function %band_i32_mem(i32, i64) -> i32 {
|
|
block0(v0: i32, v1: i64):
|
|
v2 = load.i32 v1
|
|
v3 = band.i32 v0, v2
|
|
return v3
|
|
}
|
|
|
|
; block0:
|
|
; n %r2, 0(%r3)
|
|
; br %r14
|
|
|
|
function %band_i32_memoff(i32, i64) -> i32 {
|
|
block0(v0: i32, v1: i64):
|
|
v2 = load.i32 v1+4096
|
|
v3 = band.i32 v0, v2
|
|
return v3
|
|
}
|
|
|
|
; block0:
|
|
; ny %r2, 4096(%r3)
|
|
; br %r14
|
|
|
|
function %band_i16(i16, i16) -> i16 {
|
|
block0(v0: i16, v1: i16):
|
|
v2 = band.i16 v0, v1
|
|
return v2
|
|
}
|
|
|
|
; block0:
|
|
; nr %r2, %r3
|
|
; br %r14
|
|
|
|
function %band_i16_mem(i16, i64) -> i16 {
|
|
block0(v0: i16, v1: i64):
|
|
v2 = load.i16 v1
|
|
v3 = band.i16 v0, v2
|
|
return v3
|
|
}
|
|
|
|
; block0:
|
|
; llh %r3, 0(%r3)
|
|
; nr %r2, %r3
|
|
; br %r14
|
|
|
|
function %band_i8(i8, i8) -> i8 {
|
|
block0(v0: i8, v1: i8):
|
|
v2 = band.i8 v0, v1
|
|
return v2
|
|
}
|
|
|
|
; block0:
|
|
; nr %r2, %r3
|
|
; br %r14
|
|
|
|
function %band_i8_mem(i8, i64) -> i8 {
|
|
block0(v0: i8, v1: i64):
|
|
v2 = load.i8 v1
|
|
v3 = band.i8 v0, v2
|
|
return v3
|
|
}
|
|
|
|
; block0:
|
|
; llc %r3, 0(%r3)
|
|
; nr %r2, %r3
|
|
; br %r14
|
|
|
|
function %bor_i128(i128, i128) -> i128 {
|
|
block0(v0: i128, v1: i128):
|
|
v2 = bor.i128 v0, v1
|
|
return v2
|
|
}
|
|
|
|
; block0:
|
|
; vl %v0, 0(%r3)
|
|
; vl %v1, 0(%r4)
|
|
; vo %v6, %v0, %v1
|
|
; vst %v6, 0(%r2)
|
|
; br %r14
|
|
|
|
function %bor_i64(i64, i64) -> i64 {
|
|
block0(v0: i64, v1: i64):
|
|
v2 = bor.i64 v0, v1
|
|
return v2
|
|
}
|
|
|
|
; block0:
|
|
; ogr %r2, %r3
|
|
; br %r14
|
|
|
|
function %bor_i64_mem(i64, i64) -> i64 {
|
|
block0(v0: i64, v1: i64):
|
|
v2 = load.i64 v1
|
|
v3 = bor.i64 v0, v2
|
|
return v3
|
|
}
|
|
|
|
; block0:
|
|
; og %r2, 0(%r3)
|
|
; br %r14
|
|
|
|
function %bor_i32(i32, i32) -> i32 {
|
|
block0(v0: i32, v1: i32):
|
|
v2 = bor.i32 v0, v1
|
|
return v2
|
|
}
|
|
|
|
; block0:
|
|
; or %r2, %r3
|
|
; br %r14
|
|
|
|
function %bor_i32_mem(i32, i64) -> i32 {
|
|
block0(v0: i32, v1: i64):
|
|
v2 = load.i32 v1
|
|
v3 = bor.i32 v0, v2
|
|
return v3
|
|
}
|
|
|
|
; block0:
|
|
; o %r2, 0(%r3)
|
|
; br %r14
|
|
|
|
function %bor_i32_memoff(i32, i64) -> i32 {
|
|
block0(v0: i32, v1: i64):
|
|
v2 = load.i32 v1+4096
|
|
v3 = bor.i32 v0, v2
|
|
return v3
|
|
}
|
|
|
|
; block0:
|
|
; oy %r2, 4096(%r3)
|
|
; br %r14
|
|
|
|
function %bor_i16(i16, i16) -> i16 {
|
|
block0(v0: i16, v1: i16):
|
|
v2 = bor.i16 v0, v1
|
|
return v2
|
|
}
|
|
|
|
; block0:
|
|
; or %r2, %r3
|
|
; br %r14
|
|
|
|
function %bor_i16_mem(i16, i64) -> i16 {
|
|
block0(v0: i16, v1: i64):
|
|
v2 = load.i16 v1
|
|
v3 = bor.i16 v0, v2
|
|
return v3
|
|
}
|
|
|
|
; block0:
|
|
; llh %r3, 0(%r3)
|
|
; or %r2, %r3
|
|
; br %r14
|
|
|
|
function %bor_i8(i8, i8) -> i8 {
|
|
block0(v0: i8, v1: i8):
|
|
v2 = bor.i8 v0, v1
|
|
return v2
|
|
}
|
|
|
|
; block0:
|
|
; or %r2, %r3
|
|
; br %r14
|
|
|
|
function %bor_i8_mem(i8, i64) -> i8 {
|
|
block0(v0: i8, v1: i64):
|
|
v2 = load.i8 v1
|
|
v3 = bor.i8 v0, v2
|
|
return v3
|
|
}
|
|
|
|
; block0:
|
|
; llc %r3, 0(%r3)
|
|
; or %r2, %r3
|
|
; br %r14
|
|
|
|
function %bxor_i128(i128, i128) -> i128 {
|
|
block0(v0: i128, v1: i128):
|
|
v2 = bxor.i128 v0, v1
|
|
return v2
|
|
}
|
|
|
|
; block0:
|
|
; vl %v0, 0(%r3)
|
|
; vl %v1, 0(%r4)
|
|
; vx %v6, %v0, %v1
|
|
; vst %v6, 0(%r2)
|
|
; br %r14
|
|
|
|
function %bxor_i64(i64, i64) -> i64 {
|
|
block0(v0: i64, v1: i64):
|
|
v2 = bxor.i64 v0, v1
|
|
return v2
|
|
}
|
|
|
|
; block0:
|
|
; xgr %r2, %r3
|
|
; br %r14
|
|
|
|
function %bxor_i64_mem(i64, i64) -> i64 {
|
|
block0(v0: i64, v1: i64):
|
|
v2 = load.i64 v1
|
|
v3 = bxor.i64 v0, v2
|
|
return v3
|
|
}
|
|
|
|
; block0:
|
|
; xg %r2, 0(%r3)
|
|
; br %r14
|
|
|
|
function %bxor_i32(i32, i32) -> i32 {
|
|
block0(v0: i32, v1: i32):
|
|
v2 = bxor.i32 v0, v1
|
|
return v2
|
|
}
|
|
|
|
; block0:
|
|
; xr %r2, %r3
|
|
; br %r14
|
|
|
|
function %bxor_i32_mem(i32, i64) -> i32 {
|
|
block0(v0: i32, v1: i64):
|
|
v2 = load.i32 v1
|
|
v3 = bxor.i32 v0, v2
|
|
return v3
|
|
}
|
|
|
|
; block0:
|
|
; x %r2, 0(%r3)
|
|
; br %r14
|
|
|
|
function %bxor_i32_memoff(i32, i64) -> i32 {
|
|
block0(v0: i32, v1: i64):
|
|
v2 = load.i32 v1+4096
|
|
v3 = bxor.i32 v0, v2
|
|
return v3
|
|
}
|
|
|
|
; block0:
|
|
; xy %r2, 4096(%r3)
|
|
; br %r14
|
|
|
|
function %bxor_i16(i16, i16) -> i16 {
|
|
block0(v0: i16, v1: i16):
|
|
v2 = bxor.i16 v0, v1
|
|
return v2
|
|
}
|
|
|
|
; block0:
|
|
; xr %r2, %r3
|
|
; br %r14
|
|
|
|
function %bxor_i16_mem(i16, i64) -> i16 {
|
|
block0(v0: i16, v1: i64):
|
|
v2 = load.i16 v1
|
|
v3 = bxor.i16 v0, v2
|
|
return v3
|
|
}
|
|
|
|
; block0:
|
|
; llh %r3, 0(%r3)
|
|
; xr %r2, %r3
|
|
; br %r14
|
|
|
|
function %bxor_i8(i8, i8) -> i8 {
|
|
block0(v0: i8, v1: i8):
|
|
v2 = bxor.i8 v0, v1
|
|
return v2
|
|
}
|
|
|
|
; block0:
|
|
; xr %r2, %r3
|
|
; br %r14
|
|
|
|
function %bxor_i8_mem(i8, i64) -> i8 {
|
|
block0(v0: i8, v1: i64):
|
|
v2 = load.i8 v1
|
|
v3 = bxor.i8 v0, v2
|
|
return v3
|
|
}
|
|
|
|
; block0:
|
|
; llc %r3, 0(%r3)
|
|
; xr %r2, %r3
|
|
; br %r14
|
|
|
|
function %band_not_i128(i128, i128) -> i128 {
|
|
block0(v0: i128, v1: i128):
|
|
v2 = band_not.i128 v0, v1
|
|
return v2
|
|
}
|
|
|
|
; block0:
|
|
; vl %v0, 0(%r3)
|
|
; vl %v1, 0(%r4)
|
|
; vnc %v6, %v0, %v1
|
|
; vst %v6, 0(%r2)
|
|
; br %r14
|
|
|
|
function %band_not_i64(i64, i64) -> i64 {
|
|
block0(v0: i64, v1: i64):
|
|
v2 = band_not.i64 v0, v1
|
|
return v2
|
|
}
|
|
|
|
; block0:
|
|
; xilf %r3, 4294967295
|
|
; xihf %r3, 4294967295
|
|
; ngr %r2, %r3
|
|
; br %r14
|
|
|
|
function %band_not_i32(i32, i32) -> i32 {
|
|
block0(v0: i32, v1: i32):
|
|
v2 = band_not.i32 v0, v1
|
|
return v2
|
|
}
|
|
|
|
; block0:
|
|
; lgr %r5, %r3
|
|
; xilf %r5, 4294967295
|
|
; nr %r2, %r5
|
|
; br %r14
|
|
|
|
function %band_not_i16(i16, i16) -> i16 {
|
|
block0(v0: i16, v1: i16):
|
|
v2 = band_not.i16 v0, v1
|
|
return v2
|
|
}
|
|
|
|
; block0:
|
|
; lgr %r5, %r3
|
|
; xilf %r5, 4294967295
|
|
; nr %r2, %r5
|
|
; br %r14
|
|
|
|
function %band_not_i8(i8, i8) -> i8 {
|
|
block0(v0: i8, v1: i8):
|
|
v2 = band_not.i8 v0, v1
|
|
return v2
|
|
}
|
|
|
|
; block0:
|
|
; lgr %r5, %r3
|
|
; xilf %r5, 4294967295
|
|
; nr %r2, %r5
|
|
; br %r14
|
|
|
|
function %bor_not_i128(i128, i128) -> i128 {
|
|
block0(v0: i128, v1: i128):
|
|
v2 = bor_not.i128 v0, v1
|
|
return v2
|
|
}
|
|
|
|
; block0:
|
|
; vl %v0, 0(%r3)
|
|
; vl %v1, 0(%r4)
|
|
; voc %v6, %v0, %v1
|
|
; vst %v6, 0(%r2)
|
|
; br %r14
|
|
|
|
function %bor_not_i64(i64, i64) -> i64 {
|
|
block0(v0: i64, v1: i64):
|
|
v2 = bor_not.i64 v0, v1
|
|
return v2
|
|
}
|
|
|
|
; block0:
|
|
; xilf %r3, 4294967295
|
|
; xihf %r3, 4294967295
|
|
; ogr %r2, %r3
|
|
; br %r14
|
|
|
|
function %bor_not_i32(i32, i32) -> i32 {
|
|
block0(v0: i32, v1: i32):
|
|
v2 = bor_not.i32 v0, v1
|
|
return v2
|
|
}
|
|
|
|
; block0:
|
|
; lgr %r5, %r3
|
|
; xilf %r5, 4294967295
|
|
; or %r2, %r5
|
|
; br %r14
|
|
|
|
function %bor_not_i16(i16, i16) -> i16 {
|
|
block0(v0: i16, v1: i16):
|
|
v2 = bor_not.i16 v0, v1
|
|
return v2
|
|
}
|
|
|
|
; block0:
|
|
; lgr %r5, %r3
|
|
; xilf %r5, 4294967295
|
|
; or %r2, %r5
|
|
; br %r14
|
|
|
|
function %bor_not_i8(i8, i8) -> i8 {
|
|
block0(v0: i8, v1: i8):
|
|
v2 = bor_not.i8 v0, v1
|
|
return v2
|
|
}
|
|
|
|
; block0:
|
|
; lgr %r5, %r3
|
|
; xilf %r5, 4294967295
|
|
; or %r2, %r5
|
|
; br %r14
|
|
|
|
function %bxor_not_i128(i128, i128) -> i128 {
|
|
block0(v0: i128, v1: i128):
|
|
v2 = bxor_not.i128 v0, v1
|
|
return v2
|
|
}
|
|
|
|
; block0:
|
|
; vl %v0, 0(%r3)
|
|
; vl %v1, 0(%r4)
|
|
; vnx %v6, %v0, %v1
|
|
; vst %v6, 0(%r2)
|
|
; br %r14
|
|
|
|
function %bxor_not_i64(i64, i64) -> i64 {
|
|
block0(v0: i64, v1: i64):
|
|
v2 = bxor_not.i64 v0, v1
|
|
return v2
|
|
}
|
|
|
|
; block0:
|
|
; xgr %r2, %r3
|
|
; xilf %r2, 4294967295
|
|
; xihf %r2, 4294967295
|
|
; br %r14
|
|
|
|
function %bxor_not_i32(i32, i32) -> i32 {
|
|
block0(v0: i32, v1: i32):
|
|
v2 = bxor_not.i32 v0, v1
|
|
return v2
|
|
}
|
|
|
|
; block0:
|
|
; xr %r2, %r3
|
|
; xilf %r2, 4294967295
|
|
; br %r14
|
|
|
|
function %bxor_not_i16(i16, i16) -> i16 {
|
|
block0(v0: i16, v1: i16):
|
|
v2 = bxor_not.i16 v0, v1
|
|
return v2
|
|
}
|
|
|
|
; block0:
|
|
; xr %r2, %r3
|
|
; xilf %r2, 4294967295
|
|
; br %r14
|
|
|
|
function %bxor_not_i8(i8, i8) -> i8 {
|
|
block0(v0: i8, v1: i8):
|
|
v2 = bxor_not.i8 v0, v1
|
|
return v2
|
|
}
|
|
|
|
; block0:
|
|
; xr %r2, %r3
|
|
; xilf %r2, 4294967295
|
|
; br %r14
|
|
|
|
function %bnot_i128(i128) -> i128 {
|
|
block0(v0: i128):
|
|
v1 = bnot.i128 v0
|
|
return v1
|
|
}
|
|
|
|
; block0:
|
|
; vl %v0, 0(%r3)
|
|
; vno %v4, %v0, %v0
|
|
; vst %v4, 0(%r2)
|
|
; br %r14
|
|
|
|
function %bnot_i64(i64) -> i64 {
|
|
block0(v0: i64):
|
|
v1 = bnot.i64 v0
|
|
return v1
|
|
}
|
|
|
|
; block0:
|
|
; xilf %r2, 4294967295
|
|
; xihf %r2, 4294967295
|
|
; br %r14
|
|
|
|
function %bnot_i32(i32) -> i32 {
|
|
block0(v0: i32):
|
|
v1 = bnot.i32 v0
|
|
return v1
|
|
}
|
|
|
|
; block0:
|
|
; xilf %r2, 4294967295
|
|
; br %r14
|
|
|
|
function %bnot_i16(i16) -> i16 {
|
|
block0(v0: i16):
|
|
v1 = bnot.i16 v0
|
|
return v1
|
|
}
|
|
|
|
; block0:
|
|
; xilf %r2, 4294967295
|
|
; br %r14
|
|
|
|
function %bnot_i8(i8) -> i8 {
|
|
block0(v0: i8):
|
|
v1 = bnot.i8 v0
|
|
return v1
|
|
}
|
|
|
|
; block0:
|
|
; xilf %r2, 4294967295
|
|
; br %r14
|
|
|
|
function %bitselect_i128(i128, i128, i128) -> i128 {
|
|
block0(v0: i128, v1: i128, v2: i128):
|
|
v3 = bitselect.i128 v0, v1, v2
|
|
return v3
|
|
}
|
|
|
|
; block0:
|
|
; vl %v0, 0(%r3)
|
|
; vl %v1, 0(%r4)
|
|
; vl %v2, 0(%r5)
|
|
; vsel %v16, %v1, %v2, %v0
|
|
; vst %v16, 0(%r2)
|
|
; br %r14
|
|
|
|
function %bitselect_i64(i64, i64, i64) -> i64 {
|
|
block0(v0: i64, v1: i64, v2: i64):
|
|
v3 = bitselect.i64 v0, v1, v2
|
|
return v3
|
|
}
|
|
|
|
; block0:
|
|
; ngr %r3, %r2
|
|
; lgr %r5, %r2
|
|
; xilf %r5, 4294967295
|
|
; xihf %r5, 4294967295
|
|
; ngr %r4, %r5
|
|
; ogrk %r2, %r4, %r3
|
|
; br %r14
|
|
|
|
function %bitselect_i32(i32, i32, i32) -> i32 {
|
|
block0(v0: i32, v1: i32, v2: i32):
|
|
v3 = bitselect.i32 v0, v1, v2
|
|
return v3
|
|
}
|
|
|
|
; block0:
|
|
; nr %r3, %r2
|
|
; lgr %r5, %r2
|
|
; xilf %r5, 4294967295
|
|
; nrk %r2, %r4, %r5
|
|
; or %r2, %r3
|
|
; br %r14
|
|
|
|
function %bitselect_i16(i16, i16, i16) -> i16 {
|
|
block0(v0: i16, v1: i16, v2: i16):
|
|
v3 = bitselect.i16 v0, v1, v2
|
|
return v3
|
|
}
|
|
|
|
; block0:
|
|
; nr %r3, %r2
|
|
; lgr %r5, %r2
|
|
; xilf %r5, 4294967295
|
|
; nrk %r2, %r4, %r5
|
|
; or %r2, %r3
|
|
; br %r14
|
|
|
|
function %bitselect_i8(i8, i8, i8) -> i8 {
|
|
block0(v0: i8, v1: i8, v2: i8):
|
|
v3 = bitselect.i8 v0, v1, v2
|
|
return v3
|
|
}
|
|
|
|
; block0:
|
|
; nr %r3, %r2
|
|
; lgr %r5, %r2
|
|
; xilf %r5, 4294967295
|
|
; nrk %r2, %r4, %r5
|
|
; or %r2, %r3
|
|
; br %r14
|
|
|