Files
wasmtime/cranelift/filetests/filetests/isa/s390x/div-traps.clif
Ulrich Weigand 89b5fc776d Support IBM z/Architecture
This adds support for the IBM z/Architecture (s390x-ibm-linux).

The status of the s390x backend in its current form is:
- Wasmtime is fully functional and passes all tests on s390x.
- All back-end features supported, with the exception of SIMD.
- There is still a lot of potential for performance improvements.
- Currently the only supported processor type is z15.
2021-05-10 16:01:16 +02:00

356 lines
6.3 KiB
Plaintext

test compile
set avoid_div_traps=1
target s390x
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; SDIV
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
function %sdiv_i64(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
v2 = sdiv.i64 v0, v1
return v2
}
; check: lgr %r1, %r2
; nextln: cgite %r3, 0
; nextln: llihf %r2, 2147483647
; nextln: iilf %r2, 4294967295
; nextln: xgr %r2, %r1
; nextln: ngr %r2, %r3
; nextln: cgite %r2, -1
; nextln: dsgr %r0, %r3
; nextln: lgr %r2, %r1
; nextln: br %r14
function %sdiv_i64_imm(i64) -> i64 {
block0(v0: i64):
v1 = iconst.i64 2
v2 = sdiv.i64 v0, v1
return v2
}
; check: lgr %r1, %r2
; nextln: lghi %r2, 2
; nextln: dsgr %r0, %r2
; nextln: lgr %r2, %r1
; nextln: br %r14
function %sdiv_i32(i32, i32) -> i32 {
block0(v0: i32, v1: i32):
v2 = sdiv.i32 v0, v1
return v2
}
; check: lgfr %r1, %r2
; nextln: cite %r3, 0
; nextln: iilf %r2, 2147483647
; nextln: xr %r2, %r1
; nextln: nr %r2, %r3
; nextln: cite %r2, -1
; nextln: dsgfr %r0, %r3
; nextln: lr %r2, %r1
; nextln: br %r14
function %sdiv_i32_imm(i32) -> i32 {
block0(v0: i32):
v1 = iconst.i32 2
v2 = sdiv.i32 v0, v1
return v2
}
; check: lgfr %r1, %r2
; nextln: lhi %r2, 2
; nextln: dsgfr %r0, %r2
; nextln: lr %r2, %r1
; nextln: br %r14
function %sdiv_i16(i16, i16) -> i16 {
block0(v0: i16, v1: i16):
v2 = sdiv.i16 v0, v1
return v2
}
; check: lghr %r1, %r2
; nextln: lhr %r2, %r3
; nextln: cite %r2, 0
; nextln: lhi %r3, 32767
; nextln: xr %r3, %r1
; nextln: nr %r3, %r2
; nextln: cite %r3, -1
; nextln: dsgfr %r0, %r2
; nextln: lr %r2, %r1
; nextln: br %r14
function %sdiv_i16_imm(i16) -> i16 {
block0(v0: i16):
v1 = iconst.i16 2
v2 = sdiv.i16 v0, v1
return v2
}
; check: lghr %r1, %r2
; nextln: lhi %r2, 2
; nextln: dsgfr %r0, %r2
; nextln: lr %r2, %r1
; nextln: br %r14
function %sdiv_i8(i8, i8) -> i8 {
block0(v0: i8, v1: i8):
v2 = sdiv.i8 v0, v1
return v2
}
; check: lgbr %r1, %r2
; nextln: lbr %r2, %r3
; nextln: cite %r2, 0
; nextln: lhi %r3, 127
; nextln: xr %r3, %r1
; nextln: nr %r3, %r2
; nextln: cite %r3, -1
; nextln: dsgfr %r0, %r2
; nextln: lr %r2, %r1
; nextln: br %r14
function %sdiv_i8_imm(i8) -> i8 {
block0(v0: i8):
v1 = iconst.i8 2
v2 = sdiv.i8 v0, v1
return v2
}
; check: lgbr %r1, %r2
; nextln: lhi %r2, 2
; nextln: dsgfr %r0, %r2
; nextln: lr %r2, %r1
; nextln: br %r14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; UDIV
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
function %udiv_i64(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
v2 = udiv.i64 v0, v1
return v2
}
; check: lghi %r0, 0
; nextln: lgr %r1, %r2
; nextln: cgite %r3, 0
; nextln: dlgr %r0, %r3
; nextln: lgr %r2, %r1
; nextln: br %r14
function %udiv_i64_imm(i64) -> i64 {
block0(v0: i64):
v1 = iconst.i64 2
v2 = udiv.i64 v0, v1
return v2
}
; check: lghi %r0, 0
; nextln: lgr %r1, %r2
; nextln: lghi %r2, 2
; nextln: dlgr %r0, %r2
; nextln: lgr %r2, %r1
; nextln: br %r14
function %udiv_i32(i32, i32) -> i32 {
block0(v0: i32, v1: i32):
v2 = udiv.i32 v0, v1
return v2
}
; check: lhi %r0, 0
; nextln: lr %r1, %r2
; nextln: cite %r3, 0
; nextln: dlr %r0, %r3
; nextln: lr %r2, %r1
; nextln: br %r14
function %udiv_i32_imm(i32) -> i32 {
block0(v0: i32):
v1 = iconst.i32 2
v2 = udiv.i32 v0, v1
return v2
}
; check: lhi %r0, 0
; nextln: lr %r1, %r2
; nextln: lhi %r2, 2
; nextln: dlr %r0, %r2
; nextln: lr %r2, %r1
; nextln: br %r14
function %udiv_i16(i16, i16) -> i16 {
block0(v0: i16, v1: i16):
v2 = udiv.i16 v0, v1
return v2
}
; check: lhi %r0, 0
; nextln: llhr %r1, %r2
; nextln: llhr %r2, %r3
; nextln: cite %r2, 0
; nextln: dlr %r0, %r2
; nextln: lr %r2, %r1
; nextln: br %r14
function %udiv_i16_imm(i16) -> i16 {
block0(v0: i16):
v1 = iconst.i16 2
v2 = udiv.i16 v0, v1
return v2
}
; check: lhi %r0, 0
; nextln: llhr %r1, %r2
; nextln: lhi %r2, 2
; nextln: dlr %r0, %r2
; nextln: lr %r2, %r1
; nextln: br %r14
function %udiv_i8(i8, i8) -> i8 {
block0(v0: i8, v1: i8):
v2 = udiv.i8 v0, v1
return v2
}
; check: lhi %r0, 0
; nextln: llcr %r1, %r2
; nextln: llcr %r2, %r3
; nextln: cite %r2, 0
; nextln: dlr %r0, %r2
; nextln: lr %r2, %r1
; nextln: br %r14
function %udiv_i8_imm(i8) -> i8 {
block0(v0: i8):
v1 = iconst.i8 2
v2 = udiv.i8 v0, v1
return v2
}
; check: lhi %r0, 0
; nextln: llcr %r1, %r2
; nextln: lhi %r2, 2
; nextln: dlr %r0, %r2
; nextln: lr %r2, %r1
; nextln: br %r14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; SREM
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
function %srem_i64(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
v2 = srem.i64 v0, v1
return v2
}
; check: lgr %r1, %r2
; nextln: cgite %r3, 0
; nextln: cghi %r3, -1
; nextln: locghie %r1, 0
; nextln: dsgr %r0, %r3
; nextln: lgr %r2, %r0
; nextln: br %r14
function %srem_i32(i32, i32) -> i32 {
block0(v0: i32, v1: i32):
v2 = srem.i32 v0, v1
return v2
}
; check: lgfr %r1, %r2
; nextln: cite %r3, 0
; nextln: dsgfr %r0, %r3
; nextln: lr %r2, %r0
; nextln: br %r14
function %srem_i16(i16, i16) -> i16 {
block0(v0: i16, v1: i16):
v2 = srem.i16 v0, v1
return v2
}
; check: lghr %r1, %r2
; nextln: lhr %r2, %r3
; nextln: cite %r2, 0
; nextln: dsgfr %r0, %r2
; nextln: lr %r2, %r0
; nextln: br %r14
function %srem_i8(i8, i8) -> i8 {
block0(v0: i8, v1: i8):
v2 = srem.i8 v0, v1
return v2
}
; check: lgbr %r1, %r2
; nextln: lbr %r2, %r3
; nextln: cite %r2, 0
; nextln: dsgfr %r0, %r2
; nextln: lr %r2, %r0
; nextln: br %r14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; UREM
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
function %urem_i64(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
v2 = urem.i64 v0, v1
return v2
}
; check: lghi %r0, 0
; nextln: lgr %r1, %r2
; nextln: cgite %r3, 0
; nextln: dlgr %r0, %r3
; nextln: lgr %r2, %r0
; nextln: br %r14
function %urem_i32(i32, i32) -> i32 {
block0(v0: i32, v1: i32):
v2 = urem.i32 v0, v1
return v2
}
; check: lhi %r0, 0
; nextln: lr %r1, %r2
; nextln: cite %r3, 0
; nextln: dlr %r0, %r3
; nextln: lr %r2, %r0
; nextln: br %r14
function %urem_i16(i16, i16) -> i16 {
block0(v0: i16, v1: i16):
v2 = urem.i16 v0, v1
return v2
}
; check: lhi %r0, 0
; nextln: llhr %r1, %r2
; nextln: llhr %r2, %r3
; nextln: cite %r2, 0
; nextln: dlr %r0, %r2
; nextln: lr %r2, %r0
; nextln: br %r14
function %urem_i8(i8, i8) -> i8 {
block0(v0: i8, v1: i8):
v2 = urem.i8 v0, v1
return v2
}
; check: lhi %r0, 0
; nextln: llcr %r1, %r2
; nextln: llcr %r2, %r3
; nextln: cite %r2, 0
; nextln: dlr %r0, %r2
; nextln: lr %r2, %r0
; nextln: br %r14