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.
1413 lines
21 KiB
Plaintext
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
|
|
|