Files
wasmtime/cranelift/filetests/filetests/isa/s390x/arithmetic.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

1413 lines
21 KiB
Plaintext

test compile precise-output
target s390x
function %iadd_i128(i128, i128) -> i128 {
block0(v0: i128, v1: i128):
v2 = iadd.i128 v0, v1
return v2
}
; block0:
; vl %v0, 0(%r3)
; vl %v1, 0(%r4)
; vaq %v6, %v0, %v1
; vst %v6, 0(%r2)
; br %r14
function %iadd_i64(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
v2 = iadd.i64 v0, v1
return v2
}
; block0:
; agr %r2, %r3
; br %r14
function %iadd_i64_ext32(i64, i32) -> i64 {
block0(v0: i64, v1: i32):
v2 = sextend.i64 v1
v3 = iadd.i64 v0, v2
return v3
}
; block0:
; agfr %r2, %r3
; br %r14
function %iadd_i64_imm16(i64) -> i64 {
block0(v0: i64):
v1 = iconst.i64 1
v2 = iadd.i64 v0, v1
return v2
}
; block0:
; aghi %r2, 1
; br %r14
function %iadd_i64_imm32(i64) -> i64 {
block0(v0: i64):
v1 = iconst.i64 32768
v2 = iadd.i64 v0, v1
return v2
}
; block0:
; agfi %r2, 32768
; br %r14
function %iadd_i64_mem(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
v2 = load.i64 v1
v3 = iadd.i64 v0, v2
return v3
}
; block0:
; ag %r2, 0(%r3)
; br %r14
function %iadd_i64_mem_ext16(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
v2 = sload16.i64 v1
v3 = iadd.i64 v0, v2
return v3
}
; block0:
; agh %r2, 0(%r3)
; br %r14
function %iadd_i64_mem_ext32(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
v2 = sload32.i64 v1
v3 = iadd.i64 v0, v2
return v3
}
; block0:
; agf %r2, 0(%r3)
; br %r14
function %iadd_i32(i32, i32) -> i32 {
block0(v0: i32, v1: i32):
v2 = iadd.i32 v0, v1
return v2
}
; block0:
; ar %r2, %r3
; br %r14
function %iadd_i32_imm16(i32) -> i32 {
block0(v0: i32):
v1 = iconst.i32 1
v2 = iadd.i32 v0, v1
return v2
}
; block0:
; ahi %r2, 1
; br %r14
function %iadd_i32_imm(i32) -> i32 {
block0(v0: i32):
v1 = iconst.i32 32768
v2 = iadd.i32 v0, v1
return v2
}
; block0:
; afi %r2, 32768
; br %r14
function %iadd_i32_mem(i32, i64) -> i32 {
block0(v0: i32, v1: i64):
v2 = load.i32 v1
v3 = iadd.i32 v0, v2
return v3
}
; block0:
; a %r2, 0(%r3)
; br %r14
function %iadd_i32_memoff(i32, i64) -> i32 {
block0(v0: i32, v1: i64):
v2 = load.i32 v1+4096
v3 = iadd.i32 v0, v2
return v3
}
; block0:
; ay %r2, 4096(%r3)
; br %r14
function %iadd_i32_mem_ext16(i32, i64) -> i32 {
block0(v0: i32, v1: i64):
v2 = sload16.i32 v1
v3 = iadd.i32 v0, v2
return v3
}
; block0:
; ah %r2, 0(%r3)
; br %r14
function %iadd_i32_memoff_ext16(i32, i64) -> i32 {
block0(v0: i32, v1: i64):
v2 = sload16.i32 v1+4096
v3 = iadd.i32 v0, v2
return v3
}
; block0:
; ahy %r2, 4096(%r3)
; br %r14
function %iadd_i16(i16, i16) -> i16 {
block0(v0: i16, v1: i16):
v2 = iadd.i16 v0, v1
return v2
}
; block0:
; ar %r2, %r3
; br %r14
function %iadd_i16_imm(i16) -> i16 {
block0(v0: i16):
v1 = iconst.i16 1
v2 = iadd.i16 v0, v1
return v2
}
; block0:
; ahi %r2, 1
; br %r14
function %iadd_i16_mem(i16, i64) -> i16 {
block0(v0: i16, v1: i64):
v2 = load.i16 v1
v3 = iadd.i16 v0, v2
return v3
}
; block0:
; ah %r2, 0(%r3)
; br %r14
function %iadd_i8(i8, i8) -> i8 {
block0(v0: i8, v1: i8):
v2 = iadd.i8 v0, v1
return v2
}
; block0:
; ar %r2, %r3
; br %r14
function %iadd_i8_imm(i8) -> i8 {
block0(v0: i8):
v1 = iconst.i8 1
v2 = iadd.i8 v0, v1
return v2
}
; block0:
; ahi %r2, 1
; br %r14
function %iadd_i8_mem(i8, i64) -> i8 {
block0(v0: i8, v1: i64):
v2 = load.i8 v1
v3 = iadd.i8 v0, v2
return v3
}
; block0:
; llc %r3, 0(%r3)
; ar %r2, %r3
; br %r14
function %iadd_i64(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
v2, v3 = iadd_ifcout.i64 v0, v1
return v2
}
; block0:
; algr %r2, %r3
; br %r14
function %iadd_i64_ext32(i64, i32) -> i64 {
block0(v0: i64, v1: i32):
v2 = uextend.i64 v1
v3, v4 = iadd_ifcout.i64 v0, v2
return v3
}
; block0:
; algfr %r2, %r3
; br %r14
function %iadd_i64_imm32(i64) -> i64 {
block0(v0: i64):
v1 = iconst.i64 32768
v2, v3 = iadd_ifcout.i64 v0, v1
return v2
}
; block0:
; algfi %r2, 32768
; br %r14
function %iadd_i64_mem(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
v2 = load.i64 v1
v3, v4 = iadd_ifcout.i64 v0, v2
return v3
}
; block0:
; lg %r3, 0(%r3)
; algr %r2, %r3
; br %r14
function %iadd_i64_mem_ext32(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
v2 = uload32.i64 v1
v3, v4 = iadd_ifcout.i64 v0, v2
return v3
}
; block0:
; llgf %r3, 0(%r3)
; algr %r2, %r3
; br %r14
function %iadd_i32(i32, i32) -> i32 {
block0(v0: i32, v1: i32):
v2, v3 = iadd_ifcout.i32 v0, v1
return v2
}
; block0:
; alr %r2, %r3
; br %r14
function %iadd_i32_imm(i32) -> i32 {
block0(v0: i32):
v1 = iconst.i32 32768
v2, v3 = iadd_ifcout.i32 v0, v1
return v2
}
; block0:
; alfi %r2, 32768
; br %r14
function %iadd_i32_mem(i32, i64) -> i32 {
block0(v0: i32, v1: i64):
v2 = load.i32 v1
v3, v4 = iadd_ifcout.i32 v0, v2
return v3
}
; block0:
; l %r3, 0(%r3)
; alr %r2, %r3
; br %r14
function %iadd_i32_memoff(i32, i64) -> i32 {
block0(v0: i32, v1: i64):
v2 = load.i32 v1+4096
v3, v4 = iadd_ifcout.i32 v0, v2
return v3
}
; block0:
; ly %r3, 4096(%r3)
; alr %r2, %r3
; br %r14
function %isub_i128(i128, i128) -> i128 {
block0(v0: i128, v1: i128):
v2 = isub.i128 v0, v1
return v2
}
; block0:
; vl %v0, 0(%r3)
; vl %v1, 0(%r4)
; vsq %v6, %v0, %v1
; vst %v6, 0(%r2)
; br %r14
function %isub_i64(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
v2 = isub.i64 v0, v1
return v2
}
; block0:
; sgr %r2, %r3
; br %r14
function %isub_i64_ext32(i64, i32) -> i64 {
block0(v0: i64, v1: i32):
v2 = sextend.i64 v1
v3 = isub.i64 v0, v2
return v3
}
; block0:
; sgfr %r2, %r3
; br %r14
function %isub_i64_imm16(i64) -> i64 {
block0(v0: i64):
v1 = iconst.i64 1
v2 = isub.i64 v0, v1
return v2
}
; block0:
; aghi %r2, -1
; br %r14
function %isub_i64_imm32(i64) -> i64 {
block0(v0: i64):
v1 = iconst.i64 32769
v2 = isub.i64 v0, v1
return v2
}
; block0:
; agfi %r2, -32769
; br %r14
function %isub_i64_mem(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
v2 = load.i64 v1
v3 = isub.i64 v0, v2
return v3
}
; block0:
; sg %r2, 0(%r3)
; br %r14
function %isub_i64_mem_ext16(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
v2 = sload16.i64 v1
v3 = isub.i64 v0, v2
return v3
}
; block0:
; sgh %r2, 0(%r3)
; br %r14
function %isub_i64_mem_ext32(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
v2 = sload32.i64 v1
v3 = isub.i64 v0, v2
return v3
}
; block0:
; sgf %r2, 0(%r3)
; br %r14
function %isub_i32(i32, i32) -> i32 {
block0(v0: i32, v1: i32):
v2 = isub.i32 v0, v1
return v2
}
; block0:
; sr %r2, %r3
; br %r14
function %isub_i32_imm16(i32) -> i32 {
block0(v0: i32):
v1 = iconst.i32 1
v2 = isub.i32 v0, v1
return v2
}
; block0:
; ahi %r2, -1
; br %r14
function %isub_i32_imm(i32) -> i32 {
block0(v0: i32):
v1 = iconst.i32 32769
v2 = isub.i32 v0, v1
return v2
}
; block0:
; afi %r2, -32769
; br %r14
function %isub_i32_mem(i32, i64) -> i32 {
block0(v0: i32, v1: i64):
v2 = load.i32 v1
v3 = isub.i32 v0, v2
return v3
}
; block0:
; s %r2, 0(%r3)
; br %r14
function %isub_i32_memoff(i32, i64) -> i32 {
block0(v0: i32, v1: i64):
v2 = load.i32 v1+4096
v3 = isub.i32 v0, v2
return v3
}
; block0:
; sy %r2, 4096(%r3)
; br %r14
function %isub_i32_mem_ext16(i32, i64) -> i32 {
block0(v0: i32, v1: i64):
v2 = sload16.i32 v1
v3 = isub.i32 v0, v2
return v3
}
; block0:
; sh %r2, 0(%r3)
; br %r14
function %isub_i32_memoff_ext16(i32, i64) -> i32 {
block0(v0: i32, v1: i64):
v2 = sload16.i32 v1+4096
v3 = isub.i32 v0, v2
return v3
}
; block0:
; shy %r2, 4096(%r3)
; br %r14
function %isub_i16(i16, i16) -> i16 {
block0(v0: i16, v1: i16):
v2 = isub.i16 v0, v1
return v2
}
; block0:
; sr %r2, %r3
; br %r14
function %isub_i16_imm(i16) -> i16 {
block0(v0: i16):
v1 = iconst.i16 1
v2 = isub.i16 v0, v1
return v2
}
; block0:
; ahi %r2, -1
; br %r14
function %isub_i16_mem(i16, i64) -> i16 {
block0(v0: i16, v1: i64):
v2 = load.i16 v1
v3 = isub.i16 v0, v2
return v3
}
; block0:
; sh %r2, 0(%r3)
; br %r14
function %isub_i8(i8, i8) -> i8 {
block0(v0: i8, v1: i8):
v2 = isub.i8 v0, v1
return v2
}
; block0:
; sr %r2, %r3
; br %r14
function %isub_i8_imm(i8) -> i8 {
block0(v0: i8):
v1 = iconst.i8 1
v2 = isub.i8 v0, v1
return v2
}
; block0:
; ahi %r2, -1
; br %r14
function %isub_i8_mem(i8, i64) -> i8 {
block0(v0: i8, v1: i64):
v2 = load.i8 v1
v3 = isub.i8 v0, v2
return v3
}
; block0:
; llc %r3, 0(%r3)
; sr %r2, %r3
; br %r14
function %iabs_i128(i128) -> i128 {
block0(v0: i128):
v1 = iabs.i128 v0
return v1
}
; block0:
; vl %v0, 0(%r3)
; vgbm %v4, 0
; vsq %v6, %v4, %v0
; vrepg %v16, %v0, 0
; vchg %v18, %v4, %v16
; vsel %v20, %v6, %v0, %v18
; vst %v20, 0(%r2)
; br %r14
function %iabs_i64(i64) -> i64 {
block0(v0: i64):
v1 = iabs.i64 v0
return v1
}
; block0:
; lpgr %r2, %r2
; br %r14
function %iabs_i64_ext32(i32) -> i64 {
block0(v0: i32):
v1 = sextend.i64 v0
v2 = iabs.i64 v1
return v2
}
; block0:
; lpgfr %r2, %r2
; br %r14
function %iabs_i32(i32) -> i32 {
block0(v0: i32):
v1 = iabs.i32 v0
return v1
}
; block0:
; lpr %r2, %r2
; br %r14
function %iabs_i16(i16) -> i16 {
block0(v0: i16):
v1 = iabs.i16 v0
return v1
}
; block0:
; lhr %r4, %r2
; lpr %r2, %r4
; br %r14
function %iabs_i8(i8) -> i8 {
block0(v0: i8):
v1 = iabs.i8 v0
return v1
}
; block0:
; lbr %r4, %r2
; lpr %r2, %r4
; br %r14
function %ineg_i128(i128) -> i128 {
block0(v0: i128):
v1 = ineg.i128 v0
return v1
}
; block0:
; vl %v0, 0(%r3)
; vgbm %v4, 0
; vsq %v6, %v4, %v0
; vst %v6, 0(%r2)
; br %r14
function %ineg_i64(i64) -> i64 {
block0(v0: i64):
v1 = ineg.i64 v0
return v1
}
; block0:
; lcgr %r2, %r2
; br %r14
function %ineg_i64_ext32(i32) -> i64 {
block0(v0: i32):
v1 = sextend.i64 v0
v2 = ineg.i64 v1
return v2
}
; block0:
; lcgfr %r2, %r2
; br %r14
function %ineg_i32(i32) -> i32 {
block0(v0: i32):
v1 = ineg.i32 v0
return v1
}
; block0:
; lcr %r2, %r2
; br %r14
function %ineg_i16(i16) -> i16 {
block0(v0: i16):
v1 = ineg.i16 v0
return v1
}
; block0:
; lcr %r2, %r2
; br %r14
function %ineg_i8(i8) -> i8 {
block0(v0: i8):
v1 = ineg.i8 v0
return v1
}
; block0:
; lcr %r2, %r2
; br %r14
function %imul_i128(i128, i128) -> i128 {
block0(v0: i128, v1: i128):
v2 = imul.i128 v0, v1
return v2
}
; stmg %r7, %r15, 56(%r15)
; block0:
; lgr %r14, %r2
; vl %v0, 0(%r3)
; vl %v1, 0(%r4)
; lgdr %r4, %f0
; vlgvg %r5, %v0, 1
; lgdr %r7, %f1
; vlgvg %r9, %v1, 1
; lgr %r3, %r5
; mlgr %r2, %r9
; lgr %r8, %r2
; msgrkc %r2, %r5, %r7
; msgrkc %r5, %r4, %r9
; agrk %r4, %r2, %r8
; agr %r5, %r4
; vlvgp %v5, %r5, %r3
; lgr %r2, %r14
; vst %v5, 0(%r2)
; lmg %r7, %r15, 56(%r15)
; br %r14
function %imul_i64(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
v2 = imul.i64 v0, v1
return v2
}
; block0:
; msgr %r2, %r3
; br %r14
function %imul_i64_imm16(i64) -> i64 {
block0(v0: i64):
v1 = iconst.i64 3
v2 = imul.i64 v0, v1
return v2
}
; block0:
; mghi %r2, 3
; br %r14
function %imul_i64_imm32(i64) -> i64 {
block0(v0: i64):
v1 = iconst.i64 32769
v2 = imul.i64 v0, v1
return v2
}
; block0:
; msgfi %r2, 32769
; br %r14
function %imul_i64_mem(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
v2 = load.i64 v1
v3 = imul.i64 v0, v2
return v3
}
; block0:
; msg %r2, 0(%r3)
; br %r14
function %imul_i64_mem_ext16(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
v2 = sload16.i64 v1
v3 = imul.i64 v0, v2
return v3
}
; block0:
; mgh %r2, 0(%r3)
; br %r14
function %imul_i64_mem_ext32(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
v2 = sload32.i64 v1
v3 = imul.i64 v0, v2
return v3
}
; block0:
; msgf %r2, 0(%r3)
; br %r14
function %imul_i32(i32, i32) -> i32 {
block0(v0: i32, v1: i32):
v2 = imul.i32 v0, v1
return v2
}
; block0:
; msr %r2, %r3
; br %r14
function %imul_i32_imm16(i32) -> i32 {
block0(v0: i32):
v1 = iconst.i32 3
v2 = imul.i32 v0, v1
return v2
}
; block0:
; mhi %r2, 3
; br %r14
function %imul_i32_imm32(i32) -> i32 {
block0(v0: i32):
v1 = iconst.i32 32769
v2 = imul.i32 v0, v1
return v2
}
; block0:
; msfi %r2, 32769
; br %r14
function %imul_i32_mem(i32, i64) -> i32 {
block0(v0: i32, v1: i64):
v2 = load.i32 v1
v3 = imul.i32 v0, v2
return v3
}
; block0:
; ms %r2, 0(%r3)
; br %r14
function %imul_i32_memoff(i32, i64) -> i32 {
block0(v0: i32, v1: i64):
v2 = load.i32 v1+4096
v3 = imul.i32 v0, v2
return v3
}
; block0:
; msy %r2, 4096(%r3)
; br %r14
function %imul_i32_mem_ext16(i32, i64) -> i32 {
block0(v0: i32, v1: i64):
v2 = sload16.i32 v1
v3 = imul.i32 v0, v2
return v3
}
; block0:
; mh %r2, 0(%r3)
; br %r14
function %imul_i32_memoff_ext16(i32, i64) -> i32 {
block0(v0: i32, v1: i64):
v2 = sload16.i32 v1+4096
v3 = imul.i32 v0, v2
return v3
}
; block0:
; mhy %r2, 4096(%r3)
; br %r14
function %imul_i16(i16, i16) -> i16 {
block0(v0: i16, v1: i16):
v2 = imul.i16 v0, v1
return v2
}
; block0:
; msr %r2, %r3
; br %r14
function %imul_i16_imm(i16) -> i16 {
block0(v0: i16):
v1 = iconst.i16 3
v2 = imul.i16 v0, v1
return v2
}
; block0:
; mhi %r2, 3
; br %r14
function %imul_i16_mem(i16, i64) -> i16 {
block0(v0: i16, v1: i64):
v2 = load.i16 v1
v3 = imul.i16 v0, v2
return v3
}
; block0:
; mh %r2, 0(%r3)
; br %r14
function %imul_i8(i8, i8) -> i8 {
block0(v0: i8, v1: i8):
v2 = imul.i8 v0, v1
return v2
}
; block0:
; msr %r2, %r3
; br %r14
function %imul_i8_imm(i8) -> i8 {
block0(v0: i8):
v1 = iconst.i8 3
v2 = imul.i8 v0, v1
return v2
}
; block0:
; mhi %r2, 3
; br %r14
function %imul_i8_mem(i8, i64) -> i8 {
block0(v0: i8, v1: i64):
v2 = load.i8 v1
v3 = imul.i8 v0, v2
return v3
}
; block0:
; llc %r3, 0(%r3)
; msr %r2, %r3
; br %r14
function %umulhi_i64(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
v2 = umulhi.i64 v0, v1
return v2
}
; block0:
; lgr %r5, %r3
; lgr %r3, %r2
; mlgr %r2, %r5
; br %r14
function %umulhi_i32(i32, i32) -> i32 {
block0(v0: i32, v1: i32):
v2 = umulhi.i32 v0, v1
return v2
}
; block0:
; llgfr %r5, %r2
; llgfr %r3, %r3
; msgr %r5, %r3
; srlg %r2, %r5, 32
; br %r14
function %umulhi_i16(i16, i16) -> i16 {
block0(v0: i16, v1: i16):
v2 = umulhi.i16 v0, v1
return v2
}
; block0:
; llhr %r5, %r2
; llhr %r3, %r3
; msr %r5, %r3
; srlk %r2, %r5, 16
; br %r14
function %umulhi_i8(i8, i8) -> i8 {
block0(v0: i8, v1: i8):
v2 = umulhi.i8 v0, v1
return v2
}
; block0:
; llcr %r5, %r2
; llcr %r3, %r3
; msr %r5, %r3
; srlk %r2, %r5, 8
; br %r14
function %smulhi_i64(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
v2 = smulhi.i64 v0, v1
return v2
}
; block0:
; mgrk %r2, %r2, %r3
; br %r14
function %smulhi_i32(i32, i32) -> i32 {
block0(v0: i32, v1: i32):
v2 = smulhi.i32 v0, v1
return v2
}
; block0:
; lgfr %r5, %r2
; lgfr %r3, %r3
; msgr %r5, %r3
; srag %r2, %r5, 32
; br %r14
function %smulhi_i16(i16, i16) -> i16 {
block0(v0: i16, v1: i16):
v2 = smulhi.i16 v0, v1
return v2
}
; block0:
; lhr %r5, %r2
; lhr %r3, %r3
; msr %r5, %r3
; srak %r2, %r5, 16
; br %r14
function %smulhi_i8(i8, i8) -> i8 {
block0(v0: i8, v1: i8):
v2 = smulhi.i8 v0, v1
return v2
}
; block0:
; lbr %r5, %r2
; lbr %r3, %r3
; msr %r5, %r3
; srak %r2, %r5, 8
; br %r14
function %sdiv_i64(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
v2 = sdiv.i64 v0, v1
return v2
}
; block0:
; llihf %r4, 2147483647
; iilf %r4, 4294967295
; xgrk %r5, %r4, %r2
; ngrk %r4, %r5, %r3
; cgite %r4, -1
; lgr %r4, %r3
; lgr %r3, %r2
; dsgr %r2, %r4
; lgr %r2, %r3
; br %r14
function %sdiv_i64_imm(i64) -> i64 {
block0(v0: i64):
v1 = iconst.i64 2
v2 = sdiv.i64 v0, v1
return v2
}
; block0:
; lgr %r3, %r2
; lghi %r4, 2
; dsgr %r2, %r4
; lgr %r2, %r3
; br %r14
function %sdiv_i32(i32, i32) -> i32 {
block0(v0: i32, v1: i32):
v2 = sdiv.i32 v0, v1
return v2
}
; stmg %r7, %r15, 56(%r15)
; block0:
; lgr %r7, %r3
; lgfr %r3, %r2
; iilf %r4, 2147483647
; xrk %r5, %r4, %r3
; lgr %r4, %r7
; nr %r5, %r4
; cite %r5, -1
; dsgfr %r2, %r4
; lgr %r2, %r3
; lmg %r7, %r15, 56(%r15)
; br %r14
function %sdiv_i32_imm(i32) -> i32 {
block0(v0: i32):
v1 = iconst.i32 2
v2 = sdiv.i32 v0, v1
return v2
}
; block0:
; lgfr %r3, %r2
; lhi %r2, 2
; dsgfr %r2, %r2
; lgr %r2, %r3
; br %r14
function %sdiv_i16(i16, i16) -> i16 {
block0(v0: i16, v1: i16):
v2 = sdiv.i16 v0, v1
return v2
}
; block0:
; lghr %r5, %r2
; lgr %r2, %r5
; lhr %r4, %r3
; lhi %r5, 32767
; lgr %r3, %r2
; xr %r5, %r3
; nr %r5, %r4
; cite %r5, -1
; dsgfr %r2, %r4
; lgr %r2, %r3
; br %r14
function %sdiv_i16_imm(i16) -> i16 {
block0(v0: i16):
v1 = iconst.i16 2
v2 = sdiv.i16 v0, v1
return v2
}
; block0:
; lghr %r3, %r2
; lhi %r2, 2
; dsgfr %r2, %r2
; lgr %r2, %r3
; br %r14
function %sdiv_i8(i8, i8) -> i8 {
block0(v0: i8, v1: i8):
v2 = sdiv.i8 v0, v1
return v2
}
; block0:
; lgbr %r5, %r2
; lgr %r2, %r5
; lbr %r4, %r3
; lhi %r5, 127
; lgr %r3, %r2
; xr %r5, %r3
; nr %r5, %r4
; cite %r5, -1
; dsgfr %r2, %r4
; lgr %r2, %r3
; br %r14
function %sdiv_i8_imm(i8) -> i8 {
block0(v0: i8):
v1 = iconst.i8 2
v2 = sdiv.i8 v0, v1
return v2
}
; block0:
; lgbr %r3, %r2
; lhi %r2, 2
; dsgfr %r2, %r2
; lgr %r2, %r3
; br %r14
function %udiv_i64(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
v2 = udiv.i64 v0, v1
return v2
}
; block0:
; lgr %r4, %r3
; lgr %r3, %r2
; lghi %r2, 0
; dlgr %r2, %r4
; lgr %r2, %r3
; br %r14
function %udiv_i64_imm(i64) -> i64 {
block0(v0: i64):
v1 = iconst.i64 2
v2 = udiv.i64 v0, v1
return v2
}
; block0:
; lgr %r3, %r2
; lghi %r2, 0
; lghi %r4, 2
; dlgr %r2, %r4
; lgr %r2, %r3
; br %r14
function %udiv_i32(i32, i32) -> i32 {
block0(v0: i32, v1: i32):
v2 = udiv.i32 v0, v1
return v2
}
; block0:
; lgr %r4, %r3
; lgr %r3, %r2
; lhi %r2, 0
; dlr %r2, %r4
; lgr %r2, %r3
; br %r14
function %udiv_i32_imm(i32) -> i32 {
block0(v0: i32):
v1 = iconst.i32 2
v2 = udiv.i32 v0, v1
return v2
}
; block0:
; lgr %r3, %r2
; lhi %r2, 0
; lhi %r4, 2
; dlr %r2, %r4
; lgr %r2, %r3
; br %r14
function %udiv_i16(i16, i16) -> i16 {
block0(v0: i16, v1: i16):
v2 = udiv.i16 v0, v1
return v2
}
; stmg %r8, %r15, 64(%r15)
; block0:
; lgr %r4, %r3
; lhi %r5, 0
; lgr %r8, %r5
; llhr %r3, %r2
; lgr %r5, %r4
; llhr %r5, %r5
; lgr %r2, %r8
; dlr %r2, %r5
; lgr %r2, %r3
; lmg %r8, %r15, 64(%r15)
; br %r14
function %udiv_i16_imm(i16) -> i16 {
block0(v0: i16):
v1 = iconst.i16 2
v2 = udiv.i16 v0, v1
return v2
}
; block0:
; lhi %r4, 0
; lgr %r5, %r4
; llhr %r3, %r2
; lhi %r4, 2
; lgr %r2, %r5
; dlr %r2, %r4
; lgr %r2, %r3
; br %r14
function %udiv_i8(i8, i8) -> i8 {
block0(v0: i8, v1: i8):
v2 = udiv.i8 v0, v1
return v2
}
; stmg %r8, %r15, 64(%r15)
; block0:
; lgr %r4, %r3
; lhi %r5, 0
; lgr %r8, %r5
; llcr %r3, %r2
; lgr %r5, %r4
; llcr %r5, %r5
; lgr %r2, %r8
; dlr %r2, %r5
; lgr %r2, %r3
; lmg %r8, %r15, 64(%r15)
; br %r14
function %udiv_i8_imm(i8) -> i8 {
block0(v0: i8):
v1 = iconst.i8 2
v2 = udiv.i8 v0, v1
return v2
}
; block0:
; lhi %r4, 0
; lgr %r5, %r4
; llcr %r3, %r2
; lhi %r4, 2
; lgr %r2, %r5
; dlr %r2, %r4
; lgr %r2, %r3
; br %r14
function %srem_i64(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
v2 = srem.i64 v0, v1
return v2
}
; block0:
; cghi %r3, -1
; lgr %r4, %r3
; lgr %r3, %r2
; locghie %r3, 0
; dsgr %r2, %r4
; br %r14
function %srem_i32(i32, i32) -> i32 {
block0(v0: i32, v1: i32):
v2 = srem.i32 v0, v1
return v2
}
; block0:
; lgr %r5, %r3
; lgfr %r3, %r2
; lgr %r2, %r5
; dsgfr %r2, %r2
; br %r14
function %srem_i16(i16, i16) -> i16 {
block0(v0: i16, v1: i16):
v2 = srem.i16 v0, v1
return v2
}
; block0:
; lgr %r4, %r3
; lghr %r3, %r2
; lhr %r4, %r4
; dsgfr %r2, %r4
; br %r14
function %srem_i8(i8, i8) -> i8 {
block0(v0: i8, v1: i8):
v2 = srem.i8 v0, v1
return v2
}
; block0:
; lgr %r4, %r3
; lgbr %r3, %r2
; lbr %r4, %r4
; dsgfr %r2, %r4
; br %r14
function %urem_i64(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
v2 = urem.i64 v0, v1
return v2
}
; block0:
; lgr %r4, %r3
; lgr %r3, %r2
; lghi %r2, 0
; dlgr %r2, %r4
; br %r14
function %urem_i32(i32, i32) -> i32 {
block0(v0: i32, v1: i32):
v2 = urem.i32 v0, v1
return v2
}
; block0:
; lgr %r4, %r3
; lgr %r3, %r2
; lhi %r2, 0
; dlr %r2, %r4
; br %r14
function %urem_i16(i16, i16) -> i16 {
block0(v0: i16, v1: i16):
v2 = urem.i16 v0, v1
return v2
}
; stmg %r8, %r15, 64(%r15)
; block0:
; lgr %r4, %r3
; lhi %r5, 0
; lgr %r8, %r5
; llhr %r3, %r2
; lgr %r5, %r4
; llhr %r5, %r5
; lgr %r2, %r8
; dlr %r2, %r5
; lmg %r8, %r15, 64(%r15)
; br %r14
function %urem_i8(i8, i8) -> i8 {
block0(v0: i8, v1: i8):
v2 = urem.i8 v0, v1
return v2
}
; stmg %r8, %r15, 64(%r15)
; block0:
; lgr %r4, %r3
; lhi %r5, 0
; lgr %r8, %r5
; llcr %r3, %r2
; lgr %r5, %r4
; llcr %r5, %r5
; lgr %r2, %r8
; dlr %r2, %r5
; lmg %r8, %r15, 64(%r15)
; br %r14