Files
wasmtime/cranelift/filetests/filetests/isa/s390x/bitops.clif
Trevor Elliott b077854b57 Generate SSA code from returns (#5172)
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.
2022-11-08 16:00:49 -08:00

462 lines
7.6 KiB
Plaintext

test compile precise-output
target s390x
function %bitrev_i128(i128) -> i128 {
block0(v0: i128):
v1 = bitrev v0
return v1
}
; block0:
; vl %v0, 0(%r3)
; vrepib %v4, 170
; vrepib %v6, 1
; vsl %v16, %v0, %v6
; vsrl %v18, %v0, %v6
; vsel %v20, %v16, %v18, %v4
; vrepib %v22, 204
; vrepib %v24, 2
; vsl %v26, %v20, %v24
; vsrl %v28, %v20, %v24
; vsel %v30, %v26, %v28, %v22
; vrepib %v0, 240
; vrepib %v2, 4
; vsl %v4, %v30, %v2
; vsrl %v6, %v30, %v2
; vsel %v16, %v4, %v6, %v0
; bras %r1, 20 ; data.u128 0x0f0e0d0c0b0a09080706050403020100 ; vl %v18, 0(%r1)
; vperm %v20, %v16, %v16, %v18
; vst %v20, 0(%r2)
; br %r14
function %bitrev_i64(i64) -> i64 {
block0(v0: i64):
v1 = bitrev v0
return v1
}
; block0:
; lgr %r4, %r2
; llihf %r2, 2863311530
; iilf %r2, 2863311530
; lgr %r3, %r4
; sllg %r4, %r3, 1
; srlg %r3, %r3, 1
; ngr %r4, %r2
; xilf %r2, 4294967295
; xihf %r2, 4294967295
; ngrk %r2, %r3, %r2
; ogrk %r5, %r4, %r2
; llihf %r4, 3435973836
; iilf %r4, 3435973836
; sllg %r2, %r5, 2
; srlg %r5, %r5, 2
; ngr %r2, %r4
; xilf %r4, 4294967295
; xihf %r4, 4294967295
; ngrk %r4, %r5, %r4
; ogrk %r3, %r2, %r4
; llihf %r2, 4042322160
; iilf %r2, 4042322160
; sllg %r4, %r3, 4
; srlg %r3, %r3, 4
; ngr %r4, %r2
; xilf %r2, 4294967295
; xihf %r2, 4294967295
; ngrk %r2, %r3, %r2
; ogr %r4, %r2
; lrvgr %r2, %r4
; br %r14
function %bitrev_i32(i32) -> i32 {
block0(v0: i32):
v1 = bitrev v0
return v1
}
; block0:
; iilf %r4, 2863311530
; sllk %r3, %r2, 1
; srlk %r5, %r2, 1
; nrk %r2, %r3, %r4
; xilf %r4, 4294967295
; nrk %r3, %r5, %r4
; ork %r4, %r2, %r3
; iilf %r2, 3435973836
; sllk %r5, %r4, 2
; srlk %r3, %r4, 2
; nrk %r4, %r5, %r2
; xilf %r2, 4294967295
; nrk %r5, %r3, %r2
; ork %r2, %r4, %r5
; iilf %r4, 4042322160
; sllk %r3, %r2, 4
; srlk %r5, %r2, 4
; nrk %r2, %r3, %r4
; xilf %r4, 4294967295
; nrk %r3, %r5, %r4
; ork %r4, %r2, %r3
; lrvr %r2, %r4
; br %r14
function %bitrev_i16(i16) -> i16 {
block0(v0: i16):
v1 = bitrev v0
return v1
}
; block0:
; lhi %r4, -21846
; sllk %r3, %r2, 1
; srlk %r5, %r2, 1
; nrk %r2, %r3, %r4
; xilf %r4, 4294967295
; nrk %r3, %r5, %r4
; ork %r4, %r2, %r3
; lhi %r2, -13108
; sllk %r5, %r4, 2
; srlk %r3, %r4, 2
; nrk %r4, %r5, %r2
; xilf %r2, 4294967295
; nrk %r5, %r3, %r2
; ork %r2, %r4, %r5
; lhi %r4, -3856
; sllk %r3, %r2, 4
; srlk %r5, %r2, 4
; nrk %r2, %r3, %r4
; xilf %r4, 4294967295
; nrk %r3, %r5, %r4
; ork %r4, %r2, %r3
; lrvr %r2, %r4
; srlk %r2, %r2, 16
; br %r14
function %bitrev_i8(i8) -> i8 {
block0(v0: i8):
v1 = bitrev v0
return v1
}
; block0:
; lhi %r4, -21846
; sllk %r3, %r2, 1
; srlk %r5, %r2, 1
; nrk %r2, %r3, %r4
; xilf %r4, 4294967295
; nrk %r3, %r5, %r4
; ork %r4, %r2, %r3
; lhi %r2, -13108
; sllk %r5, %r4, 2
; srlk %r3, %r4, 2
; nrk %r4, %r5, %r2
; xilf %r2, 4294967295
; nrk %r5, %r3, %r2
; ork %r2, %r4, %r5
; lhi %r4, -3856
; sllk %r3, %r2, 4
; srlk %r5, %r2, 4
; nrk %r2, %r3, %r4
; xilf %r4, 4294967295
; nrk %r3, %r5, %r4
; or %r2, %r3
; br %r14
function %clz_i128(i128) -> i128 {
block0(v0: i128):
v1 = clz v0
return v1
}
; block0:
; vl %v0, 0(%r3)
; vclzg %v4, %v0
; vgbm %v6, 0
; vpdi %v16, %v6, %v4, 0
; vpdi %v18, %v6, %v4, 1
; vag %v20, %v16, %v18
; vrepig %v22, 64
; vceqg %v24, %v16, %v22
; vsel %v26, %v20, %v16, %v24
; vst %v26, 0(%r2)
; br %r14
function %clz_i64(i64) -> i64 {
block0(v0: i64):
v1 = clz v0
return v1
}
; block0:
; flogr %r2, %r2
; br %r14
function %clz_i32(i32) -> i32 {
block0(v0: i32):
v1 = clz v0
return v1
}
; block0:
; llgfr %r4, %r2
; flogr %r2, %r4
; ahi %r2, -32
; br %r14
function %clz_i16(i16) -> i16 {
block0(v0: i16):
v1 = clz v0
return v1
}
; block0:
; llghr %r4, %r2
; flogr %r2, %r4
; ahi %r2, -48
; br %r14
function %clz_i8(i8) -> i8 {
block0(v0: i8):
v1 = clz v0
return v1
}
; block0:
; llgcr %r4, %r2
; flogr %r2, %r4
; ahi %r2, -56
; br %r14
function %cls_i128(i128) -> i128 {
block0(v0: i128):
v1 = cls v0
return v1
}
; block0:
; vl %v0, 0(%r3)
; vrepib %v4, 255
; vsrab %v6, %v0, %v4
; vsra %v16, %v6, %v4
; vx %v18, %v0, %v16
; vclzg %v20, %v18
; vgbm %v22, 0
; vpdi %v24, %v22, %v20, 0
; vpdi %v26, %v22, %v20, 1
; vag %v28, %v24, %v26
; vrepig %v30, 64
; vceqg %v0, %v24, %v30
; vsel %v2, %v28, %v24, %v0
; vaq %v4, %v2, %v4
; vst %v4, 0(%r2)
; br %r14
function %cls_i64(i64) -> i64 {
block0(v0: i64):
v1 = cls v0
return v1
}
; block0:
; srag %r4, %r2, 63
; xgr %r2, %r4
; flogr %r2, %r2
; aghi %r2, -1
; br %r14
function %cls_i32(i32) -> i32 {
block0(v0: i32):
v1 = cls v0
return v1
}
; block0:
; lgfr %r4, %r2
; srag %r2, %r4, 63
; xgr %r4, %r2
; flogr %r2, %r4
; ahi %r2, -33
; br %r14
function %cls_i16(i16) -> i16 {
block0(v0: i16):
v1 = cls v0
return v1
}
; block0:
; lghr %r4, %r2
; srag %r2, %r4, 63
; xgr %r4, %r2
; flogr %r2, %r4
; ahi %r2, -49
; br %r14
function %cls_i8(i8) -> i8 {
block0(v0: i8):
v1 = cls v0
return v1
}
; block0:
; lgbr %r4, %r2
; srag %r2, %r4, 63
; xgr %r4, %r2
; flogr %r2, %r4
; ahi %r2, -57
; br %r14
function %ctz_i128(i128) -> i128 {
block0(v0: i128):
v1 = ctz v0
return v1
}
; block0:
; vl %v0, 0(%r3)
; vctzg %v4, %v0
; vgbm %v6, 0
; vpdi %v16, %v6, %v4, 0
; vpdi %v18, %v6, %v4, 1
; vag %v20, %v16, %v18
; vrepig %v22, 64
; vceqg %v24, %v18, %v22
; vsel %v26, %v20, %v18, %v24
; vst %v26, 0(%r2)
; br %r14
function %ctz_i64(i64) -> i64 {
block0(v0: i64):
v1 = ctz v0
return v1
}
; block0:
; lcgr %r4, %r2
; ngr %r2, %r4
; flogr %r2, %r2
; lgr %r3, %r2
; locghie %r3, -1
; lghi %r5, 63
; sgrk %r2, %r5, %r3
; br %r14
function %ctz_i32(i32) -> i32 {
block0(v0: i32):
v1 = ctz v0
return v1
}
; block0:
; lgr %r4, %r2
; oihl %r4, 1
; lcgr %r2, %r4
; ngr %r4, %r2
; flogr %r2, %r4
; lhi %r5, 63
; srk %r2, %r5, %r2
; br %r14
function %ctz_i16(i16) -> i16 {
block0(v0: i16):
v1 = ctz v0
return v1
}
; block0:
; lgr %r4, %r2
; oilh %r4, 1
; lcgr %r2, %r4
; ngr %r4, %r2
; flogr %r2, %r4
; lhi %r5, 63
; srk %r2, %r5, %r2
; br %r14
function %ctz_i8(i8) -> i8 {
block0(v0: i8):
v1 = ctz v0
return v1
}
; block0:
; lgr %r4, %r2
; oill %r4, 256
; lcgr %r2, %r4
; ngr %r4, %r2
; flogr %r2, %r4
; lhi %r5, 63
; srk %r2, %r5, %r2
; br %r14
function %popcnt_i128(i128) -> i128 {
block0(v0: i128):
v1 = popcnt v0
return v1
}
; block0:
; vl %v0, 0(%r3)
; vpopctg %v4, %v0
; vgbm %v6, 0
; vpdi %v16, %v6, %v4, 0
; vpdi %v18, %v6, %v4, 1
; vag %v20, %v16, %v18
; vst %v20, 0(%r2)
; br %r14
function %popcnt_i64(i64) -> i64 {
block0(v0: i64):
v1 = popcnt v0
return v1
}
; block0:
; popcnt %r4, %r2
; sllg %r2, %r4, 32
; agr %r4, %r2
; sllg %r2, %r4, 16
; agr %r4, %r2
; sllg %r2, %r4, 8
; agr %r4, %r2
; srlg %r2, %r4, 56
; br %r14
function %popcnt_i32(i32) -> i32 {
block0(v0: i32):
v1 = popcnt v0
return v1
}
; block0:
; popcnt %r4, %r2
; sllk %r2, %r4, 16
; ar %r4, %r2
; sllk %r2, %r4, 8
; ar %r4, %r2
; srlk %r2, %r4, 24
; br %r14
function %popcnt_i16(i16) -> i16 {
block0(v0: i16):
v1 = popcnt v0
return v1
}
; block0:
; popcnt %r4, %r2
; srlk %r2, %r4, 8
; ark %r2, %r4, %r2
; nill %r2, 255
; br %r14
function %popcnt_i8(i8) -> i8 {
block0(v0: i8):
v1 = popcnt v0
return v1
}
; block0:
; popcnt %r2, %r2
; br %r14