s390x: use full vector register file for FP operations (#4360)
This defines the full set of 32 128-bit vector registers on s390x. (Note that the VRs overlap the existing FPRs.) In addition, this adds support to use all 32 vector registers to implement floating- point operations, by using vector floating-point instructions with the 'W' bit set to operate only on the first element. This part of the vector instruction set mostly matches the old FP instruction set, with two exceptions: - There is no vector version of the COPY SIGN instruction. Instead, now use a VECTOR SELECT with an appropriate bit mask to implement the fcopysign operation. - There are no vector version of the float <-> int conversion instructions where source and target differ in bit size. Use appropriate multiple conversion steps instead. This also requires use of explicit checking to implement correct overflow handling. As a side effect, this version now also implements the i8 / i16 variants of all conversions, which had been missing so far. For all operations except those two above, we continue to use the old FP instruction if applicable (i.e. if all operands happen to have been allocated to the original FP register set), and use the vector instruction otherwise.
This commit is contained in:
@@ -0,0 +1,736 @@
|
||||
test compile precise-output
|
||||
target s390x arch13
|
||||
|
||||
function %fcvt_to_uint_f32_i8(f32) -> i8 {
|
||||
block0(v0: f32):
|
||||
v1 = fcvt_to_uint.i8 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; block0:
|
||||
; cebr %f0, %f0
|
||||
; jno 6 ; trap
|
||||
; bras %r1, 8 ; data.f32 256 ; le %f5, 0(%r1)
|
||||
; cebr %f0, %f5
|
||||
; jnhe 6 ; trap
|
||||
; bras %r1, 8 ; data.f32 -1 ; vlef %v17, 0(%r1), 0
|
||||
; wfcsb %f0, %v17
|
||||
; jnle 6 ; trap
|
||||
; wclfeb %v21, %f0, 0, 5
|
||||
; vlgvf %r2, %v21, 0
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_sint_f32_i8(f32) -> i8 {
|
||||
block0(v0: f32):
|
||||
v1 = fcvt_to_sint.i8 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; block0:
|
||||
; cebr %f0, %f0
|
||||
; jno 6 ; trap
|
||||
; bras %r1, 8 ; data.f32 128 ; le %f5, 0(%r1)
|
||||
; cebr %f0, %f5
|
||||
; jnhe 6 ; trap
|
||||
; bras %r1, 8 ; data.f32 -129 ; vlef %v17, 0(%r1), 0
|
||||
; wfcsb %f0, %v17
|
||||
; jnle 6 ; trap
|
||||
; wcfeb %v21, %f0, 0, 5
|
||||
; vlgvf %r2, %v21, 0
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_uint_f32_i16(f32) -> i16 {
|
||||
block0(v0: f32):
|
||||
v1 = fcvt_to_uint.i16 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; block0:
|
||||
; cebr %f0, %f0
|
||||
; jno 6 ; trap
|
||||
; bras %r1, 8 ; data.f32 65536 ; le %f5, 0(%r1)
|
||||
; cebr %f0, %f5
|
||||
; jnhe 6 ; trap
|
||||
; bras %r1, 8 ; data.f32 -1 ; vlef %v17, 0(%r1), 0
|
||||
; wfcsb %f0, %v17
|
||||
; jnle 6 ; trap
|
||||
; wclfeb %v21, %f0, 0, 5
|
||||
; vlgvf %r2, %v21, 0
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_sint_f32_i16(f32) -> i16 {
|
||||
block0(v0: f32):
|
||||
v1 = fcvt_to_sint.i16 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; block0:
|
||||
; cebr %f0, %f0
|
||||
; jno 6 ; trap
|
||||
; bras %r1, 8 ; data.f32 32768 ; le %f5, 0(%r1)
|
||||
; cebr %f0, %f5
|
||||
; jnhe 6 ; trap
|
||||
; bras %r1, 8 ; data.f32 -32769 ; vlef %v17, 0(%r1), 0
|
||||
; wfcsb %f0, %v17
|
||||
; jnle 6 ; trap
|
||||
; wcfeb %v21, %f0, 0, 5
|
||||
; vlgvf %r2, %v21, 0
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_uint_f32_i32(f32) -> i32 {
|
||||
block0(v0: f32):
|
||||
v1 = fcvt_to_uint.i32 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; block0:
|
||||
; cebr %f0, %f0
|
||||
; jno 6 ; trap
|
||||
; bras %r1, 8 ; data.f32 4294967300 ; le %f5, 0(%r1)
|
||||
; cebr %f0, %f5
|
||||
; jnhe 6 ; trap
|
||||
; bras %r1, 8 ; data.f32 -1 ; vlef %v17, 0(%r1), 0
|
||||
; wfcsb %f0, %v17
|
||||
; jnle 6 ; trap
|
||||
; wclfeb %v21, %f0, 0, 5
|
||||
; vlgvf %r2, %v21, 0
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_sint_f32_i32(f32) -> i32 {
|
||||
block0(v0: f32):
|
||||
v1 = fcvt_to_sint.i32 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; block0:
|
||||
; cebr %f0, %f0
|
||||
; jno 6 ; trap
|
||||
; bras %r1, 8 ; data.f32 2147483600 ; le %f5, 0(%r1)
|
||||
; cebr %f0, %f5
|
||||
; jnhe 6 ; trap
|
||||
; bras %r1, 8 ; data.f32 -2147484000 ; vlef %v17, 0(%r1), 0
|
||||
; wfcsb %f0, %v17
|
||||
; jnle 6 ; trap
|
||||
; wcfeb %v21, %f0, 0, 5
|
||||
; vlgvf %r2, %v21, 0
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_uint_f32_i64(f32) -> i64 {
|
||||
block0(v0: f32):
|
||||
v1 = fcvt_to_uint.i64 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; block0:
|
||||
; cebr %f0, %f0
|
||||
; jno 6 ; trap
|
||||
; bras %r1, 8 ; data.f32 18446744000000000000 ; le %f5, 0(%r1)
|
||||
; cebr %f0, %f5
|
||||
; jnhe 6 ; trap
|
||||
; bras %r1, 8 ; data.f32 -1 ; vlef %v17, 0(%r1), 0
|
||||
; wfcsb %f0, %v17
|
||||
; jnle 6 ; trap
|
||||
; wldeb %v21, %f0
|
||||
; wclgdb %v23, %v21, 0, 5
|
||||
; vlgvg %r2, %v23, 0
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_sint_f32_i64(f32) -> i64 {
|
||||
block0(v0: f32):
|
||||
v1 = fcvt_to_sint.i64 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; block0:
|
||||
; cebr %f0, %f0
|
||||
; jno 6 ; trap
|
||||
; bras %r1, 8 ; data.f32 9223372000000000000 ; le %f5, 0(%r1)
|
||||
; cebr %f0, %f5
|
||||
; jnhe 6 ; trap
|
||||
; bras %r1, 8 ; data.f32 -9223373000000000000 ; vlef %v17, 0(%r1), 0
|
||||
; wfcsb %f0, %v17
|
||||
; jnle 6 ; trap
|
||||
; wldeb %v21, %f0
|
||||
; wcgdb %v23, %v21, 0, 5
|
||||
; vlgvg %r2, %v23, 0
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_uint_f64_i8(f64) -> i8 {
|
||||
block0(v0: f64):
|
||||
v1 = fcvt_to_uint.i8 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; block0:
|
||||
; cdbr %f0, %f0
|
||||
; jno 6 ; trap
|
||||
; bras %r1, 12 ; data.f64 256 ; ld %f5, 0(%r1)
|
||||
; cdbr %f0, %f5
|
||||
; jnhe 6 ; trap
|
||||
; bras %r1, 12 ; data.f64 -1 ; vleg %v17, 0(%r1), 0
|
||||
; wfcdb %f0, %v17
|
||||
; jnle 6 ; trap
|
||||
; wclgdb %v21, %f0, 0, 5
|
||||
; vlgvg %r2, %v21, 0
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_sint_f64_i8(f64) -> i8 {
|
||||
block0(v0: f64):
|
||||
v1 = fcvt_to_sint.i8 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; block0:
|
||||
; cdbr %f0, %f0
|
||||
; jno 6 ; trap
|
||||
; bras %r1, 12 ; data.f64 128 ; ld %f5, 0(%r1)
|
||||
; cdbr %f0, %f5
|
||||
; jnhe 6 ; trap
|
||||
; bras %r1, 12 ; data.f64 -129 ; vleg %v17, 0(%r1), 0
|
||||
; wfcdb %f0, %v17
|
||||
; jnle 6 ; trap
|
||||
; wcgdb %v21, %f0, 0, 5
|
||||
; vlgvg %r2, %v21, 0
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_uint_f64_i16(f64) -> i16 {
|
||||
block0(v0: f64):
|
||||
v1 = fcvt_to_uint.i16 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; block0:
|
||||
; cdbr %f0, %f0
|
||||
; jno 6 ; trap
|
||||
; bras %r1, 12 ; data.f64 65536 ; ld %f5, 0(%r1)
|
||||
; cdbr %f0, %f5
|
||||
; jnhe 6 ; trap
|
||||
; bras %r1, 12 ; data.f64 -1 ; vleg %v17, 0(%r1), 0
|
||||
; wfcdb %f0, %v17
|
||||
; jnle 6 ; trap
|
||||
; wclgdb %v21, %f0, 0, 5
|
||||
; vlgvg %r2, %v21, 0
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_sint_f64_i16(f64) -> i16 {
|
||||
block0(v0: f64):
|
||||
v1 = fcvt_to_sint.i16 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; block0:
|
||||
; cdbr %f0, %f0
|
||||
; jno 6 ; trap
|
||||
; bras %r1, 12 ; data.f64 32768 ; ld %f5, 0(%r1)
|
||||
; cdbr %f0, %f5
|
||||
; jnhe 6 ; trap
|
||||
; bras %r1, 12 ; data.f64 -32769 ; vleg %v17, 0(%r1), 0
|
||||
; wfcdb %f0, %v17
|
||||
; jnle 6 ; trap
|
||||
; wcgdb %v21, %f0, 0, 5
|
||||
; vlgvg %r2, %v21, 0
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_uint_f64_i32(f64) -> i32 {
|
||||
block0(v0: f64):
|
||||
v1 = fcvt_to_uint.i32 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; block0:
|
||||
; cdbr %f0, %f0
|
||||
; jno 6 ; trap
|
||||
; bras %r1, 12 ; data.f64 4294967296 ; ld %f5, 0(%r1)
|
||||
; cdbr %f0, %f5
|
||||
; jnhe 6 ; trap
|
||||
; bras %r1, 12 ; data.f64 -1 ; vleg %v17, 0(%r1), 0
|
||||
; wfcdb %f0, %v17
|
||||
; jnle 6 ; trap
|
||||
; wclgdb %v21, %f0, 0, 5
|
||||
; vlgvg %r2, %v21, 0
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_sint_f64_i32(f64) -> i32 {
|
||||
block0(v0: f64):
|
||||
v1 = fcvt_to_sint.i32 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; block0:
|
||||
; cdbr %f0, %f0
|
||||
; jno 6 ; trap
|
||||
; bras %r1, 12 ; data.f64 2147483648 ; ld %f5, 0(%r1)
|
||||
; cdbr %f0, %f5
|
||||
; jnhe 6 ; trap
|
||||
; bras %r1, 12 ; data.f64 -2147483649 ; vleg %v17, 0(%r1), 0
|
||||
; wfcdb %f0, %v17
|
||||
; jnle 6 ; trap
|
||||
; wcgdb %v21, %f0, 0, 5
|
||||
; vlgvg %r2, %v21, 0
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_uint_f64_i64(f64) -> i64 {
|
||||
block0(v0: f64):
|
||||
v1 = fcvt_to_uint.i64 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; block0:
|
||||
; cdbr %f0, %f0
|
||||
; jno 6 ; trap
|
||||
; bras %r1, 12 ; data.f64 18446744073709552000 ; ld %f5, 0(%r1)
|
||||
; cdbr %f0, %f5
|
||||
; jnhe 6 ; trap
|
||||
; bras %r1, 12 ; data.f64 -1 ; vleg %v17, 0(%r1), 0
|
||||
; wfcdb %f0, %v17
|
||||
; jnle 6 ; trap
|
||||
; wclgdb %v21, %f0, 0, 5
|
||||
; vlgvg %r2, %v21, 0
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_sint_f64_i64(f64) -> i64 {
|
||||
block0(v0: f64):
|
||||
v1 = fcvt_to_sint.i64 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; block0:
|
||||
; cdbr %f0, %f0
|
||||
; jno 6 ; trap
|
||||
; bras %r1, 12 ; data.f64 9223372036854776000 ; ld %f5, 0(%r1)
|
||||
; cdbr %f0, %f5
|
||||
; jnhe 6 ; trap
|
||||
; bras %r1, 12 ; data.f64 -9223372036854778000 ; vleg %v17, 0(%r1), 0
|
||||
; wfcdb %f0, %v17
|
||||
; jnle 6 ; trap
|
||||
; wcgdb %v21, %f0, 0, 5
|
||||
; vlgvg %r2, %v21, 0
|
||||
; br %r14
|
||||
|
||||
function %fcvt_from_uint_i8_f32(i8) -> f32 {
|
||||
block0(v0: i8):
|
||||
v1 = fcvt_from_uint.f32 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; block0:
|
||||
; llcr %r5, %r2
|
||||
; vlvgf %v5, %r5, 0
|
||||
; wcelfb %f0, %f5, 0, 4
|
||||
; br %r14
|
||||
|
||||
function %fcvt_from_sint_i8_f32(i8) -> f32 {
|
||||
block0(v0: i8):
|
||||
v1 = fcvt_from_sint.f32 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; block0:
|
||||
; lbr %r5, %r2
|
||||
; vlvgf %v5, %r5, 0
|
||||
; wcefb %f0, %f5, 0, 4
|
||||
; br %r14
|
||||
|
||||
function %fcvt_from_uint_i16_f32(i16) -> f32 {
|
||||
block0(v0: i16):
|
||||
v1 = fcvt_from_uint.f32 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; block0:
|
||||
; llhr %r5, %r2
|
||||
; vlvgf %v5, %r5, 0
|
||||
; wcelfb %f0, %f5, 0, 4
|
||||
; br %r14
|
||||
|
||||
function %fcvt_from_sint_i16_f32(i16) -> f32 {
|
||||
block0(v0: i16):
|
||||
v1 = fcvt_from_sint.f32 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; block0:
|
||||
; lhr %r5, %r2
|
||||
; vlvgf %v5, %r5, 0
|
||||
; wcefb %f0, %f5, 0, 4
|
||||
; br %r14
|
||||
|
||||
function %fcvt_from_uint_i32_f32(i32) -> f32 {
|
||||
block0(v0: i32):
|
||||
v1 = fcvt_from_uint.f32 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; block0:
|
||||
; vlvgf %v3, %r2, 0
|
||||
; wcelfb %f0, %f3, 0, 4
|
||||
; br %r14
|
||||
|
||||
function %fcvt_from_sint_i32_f32(i32) -> f32 {
|
||||
block0(v0: i32):
|
||||
v1 = fcvt_from_sint.f32 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; block0:
|
||||
; vlvgf %v3, %r2, 0
|
||||
; wcefb %f0, %f3, 0, 4
|
||||
; br %r14
|
||||
|
||||
function %fcvt_from_uint_i64_f32(i64) -> f32 {
|
||||
block0(v0: i64):
|
||||
v1 = fcvt_from_uint.f32 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; block0:
|
||||
; ldgr %f3, %r2
|
||||
; wcdlgb %f5, %f3, 0, 3
|
||||
; ledbra %f0, %f5, 4
|
||||
; br %r14
|
||||
|
||||
function %fcvt_from_sint_i64_f32(i64) -> f32 {
|
||||
block0(v0: i64):
|
||||
v1 = fcvt_from_sint.f32 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; block0:
|
||||
; ldgr %f3, %r2
|
||||
; wcdgb %f5, %f3, 0, 3
|
||||
; ledbra %f0, %f5, 4
|
||||
; br %r14
|
||||
|
||||
function %fcvt_from_uint_i8_f64(i8) -> f64 {
|
||||
block0(v0: i8):
|
||||
v1 = fcvt_from_uint.f64 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; block0:
|
||||
; llgcr %r5, %r2
|
||||
; ldgr %f5, %r5
|
||||
; wcdlgb %f0, %f5, 0, 4
|
||||
; br %r14
|
||||
|
||||
function %fcvt_from_sint_i8_f64(i8) -> f64 {
|
||||
block0(v0: i8):
|
||||
v1 = fcvt_from_sint.f64 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; block0:
|
||||
; lgbr %r5, %r2
|
||||
; ldgr %f5, %r5
|
||||
; wcdgb %f0, %f5, 0, 4
|
||||
; br %r14
|
||||
|
||||
function %fcvt_from_uint_i16_f64(i16) -> f64 {
|
||||
block0(v0: i16):
|
||||
v1 = fcvt_from_uint.f64 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; block0:
|
||||
; llghr %r5, %r2
|
||||
; ldgr %f5, %r5
|
||||
; wcdlgb %f0, %f5, 0, 4
|
||||
; br %r14
|
||||
|
||||
function %fcvt_from_sint_i16_f64(i16) -> f64 {
|
||||
block0(v0: i16):
|
||||
v1 = fcvt_from_sint.f64 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; block0:
|
||||
; lghr %r5, %r2
|
||||
; ldgr %f5, %r5
|
||||
; wcdgb %f0, %f5, 0, 4
|
||||
; br %r14
|
||||
|
||||
function %fcvt_from_uint_i32_f64(i32) -> f64 {
|
||||
block0(v0: i32):
|
||||
v1 = fcvt_from_uint.f64 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; block0:
|
||||
; llgfr %r5, %r2
|
||||
; ldgr %f5, %r5
|
||||
; wcdlgb %f0, %f5, 0, 4
|
||||
; br %r14
|
||||
|
||||
function %fcvt_from_sint_i32_f64(i32) -> f64 {
|
||||
block0(v0: i32):
|
||||
v1 = fcvt_from_sint.f64 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; block0:
|
||||
; lgfr %r5, %r2
|
||||
; ldgr %f5, %r5
|
||||
; wcdgb %f0, %f5, 0, 4
|
||||
; br %r14
|
||||
|
||||
function %fcvt_from_uint_i64_f64(i64) -> f64 {
|
||||
block0(v0: i64):
|
||||
v1 = fcvt_from_uint.f64 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; block0:
|
||||
; ldgr %f3, %r2
|
||||
; wcdlgb %f0, %f3, 0, 4
|
||||
; br %r14
|
||||
|
||||
function %fcvt_from_sint_i64_f64(i64) -> f64 {
|
||||
block0(v0: i64):
|
||||
v1 = fcvt_from_sint.f64 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; block0:
|
||||
; ldgr %f3, %r2
|
||||
; wcdgb %f0, %f3, 0, 4
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_uint_sat_f32_i8(f32) -> i8 {
|
||||
block0(v0: f32):
|
||||
v1 = fcvt_to_uint_sat.i8 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; block0:
|
||||
; wclfeb %f3, %f0, 0, 5
|
||||
; vlgvf %r3, %v3, 0
|
||||
; lgr %r2, %r3
|
||||
; clfi %r3, 256
|
||||
; lochih %r2, 255
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_sint_sat_f32_i8(f32) -> i8 {
|
||||
block0(v0: f32):
|
||||
v1 = fcvt_to_sint_sat.i8 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; block0:
|
||||
; wcfeb %f3, %f0, 0, 5
|
||||
; vlgvf %r3, %v3, 0
|
||||
; cebr %f0, %f0
|
||||
; lochio %r3, 0
|
||||
; lgr %r4, %r3
|
||||
; chi %r3, 127
|
||||
; lochih %r4, 127
|
||||
; lgr %r2, %r4
|
||||
; chi %r4, -128
|
||||
; lochil %r2, -128
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_uint_sat_f32_i16(f32) -> i16 {
|
||||
block0(v0: f32):
|
||||
v1 = fcvt_to_uint_sat.i16 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; block0:
|
||||
; wclfeb %f3, %f0, 0, 5
|
||||
; vlgvf %r3, %v3, 0
|
||||
; lgr %r2, %r3
|
||||
; clfi %r3, 65535
|
||||
; lochih %r2, -1
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_sint_sat_f32_i16(f32) -> i16 {
|
||||
block0(v0: f32):
|
||||
v1 = fcvt_to_sint_sat.i16 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; block0:
|
||||
; wcfeb %f3, %f0, 0, 5
|
||||
; vlgvf %r3, %v3, 0
|
||||
; cebr %f0, %f0
|
||||
; lochio %r3, 0
|
||||
; lgr %r4, %r3
|
||||
; chi %r3, 32767
|
||||
; lochih %r4, 32767
|
||||
; lgr %r2, %r4
|
||||
; chi %r4, -32768
|
||||
; lochil %r2, -32768
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_uint_sat_f32_i32(f32) -> i32 {
|
||||
block0(v0: f32):
|
||||
v1 = fcvt_to_uint_sat.i32 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; block0:
|
||||
; wclfeb %f3, %f0, 0, 5
|
||||
; vlgvf %r2, %v3, 0
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_sint_sat_f32_i32(f32) -> i32 {
|
||||
block0(v0: f32):
|
||||
v1 = fcvt_to_sint_sat.i32 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; block0:
|
||||
; wcfeb %f3, %f0, 0, 5
|
||||
; vlgvf %r2, %v3, 0
|
||||
; cebr %f0, %f0
|
||||
; lochio %r2, 0
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_uint_sat_f32_i64(f32) -> i64 {
|
||||
block0(v0: f32):
|
||||
v1 = fcvt_to_uint_sat.i64 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; block0:
|
||||
; ldebr %f3, %f0
|
||||
; wclgdb %f5, %f3, 0, 5
|
||||
; lgdr %r2, %f5
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_sint_sat_f32_i64(f32) -> i64 {
|
||||
block0(v0: f32):
|
||||
v1 = fcvt_to_sint_sat.i64 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; block0:
|
||||
; ldebr %f3, %f0
|
||||
; wcgdb %f5, %f3, 0, 5
|
||||
; lgdr %r2, %f5
|
||||
; cebr %f0, %f0
|
||||
; locghio %r2, 0
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_uint_sat_f64_i8(f64) -> i8 {
|
||||
block0(v0: f64):
|
||||
v1 = fcvt_to_uint_sat.i8 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; block0:
|
||||
; wclgdb %f3, %f0, 0, 5
|
||||
; lgdr %r3, %f3
|
||||
; lgr %r2, %r3
|
||||
; clgfi %r3, 256
|
||||
; locghih %r2, 255
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_sint_sat_f64_i8(f64) -> i8 {
|
||||
block0(v0: f64):
|
||||
v1 = fcvt_to_sint_sat.i8 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; block0:
|
||||
; wcgdb %f3, %f0, 0, 5
|
||||
; lgdr %r3, %f3
|
||||
; cdbr %f0, %f0
|
||||
; locghio %r3, 0
|
||||
; lgr %r4, %r3
|
||||
; cghi %r3, 127
|
||||
; locghih %r4, 127
|
||||
; lgr %r2, %r4
|
||||
; cghi %r4, -128
|
||||
; locghil %r2, -128
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_uint_sat_f64_i16(f64) -> i16 {
|
||||
block0(v0: f64):
|
||||
v1 = fcvt_to_uint_sat.i16 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; block0:
|
||||
; wclgdb %f3, %f0, 0, 5
|
||||
; lgdr %r3, %f3
|
||||
; lgr %r2, %r3
|
||||
; clgfi %r3, 65535
|
||||
; locghih %r2, -1
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_sint_sat_f64_i16(f64) -> i16 {
|
||||
block0(v0: f64):
|
||||
v1 = fcvt_to_sint_sat.i16 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; block0:
|
||||
; wcgdb %f3, %f0, 0, 5
|
||||
; lgdr %r3, %f3
|
||||
; cdbr %f0, %f0
|
||||
; locghio %r3, 0
|
||||
; lgr %r4, %r3
|
||||
; cghi %r3, 32767
|
||||
; locghih %r4, 32767
|
||||
; lgr %r2, %r4
|
||||
; cghi %r4, -32768
|
||||
; locghil %r2, -32768
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_uint_sat_f64_i32(f64) -> i32 {
|
||||
block0(v0: f64):
|
||||
v1 = fcvt_to_uint_sat.i32 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; block0:
|
||||
; wclgdb %f3, %f0, 0, 5
|
||||
; lgdr %r2, %f3
|
||||
; llilf %r5, 4294967295
|
||||
; clgr %r2, %r5
|
||||
; locgrh %r2, %r5
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_sint_sat_f64_i32(f64) -> i32 {
|
||||
block0(v0: f64):
|
||||
v1 = fcvt_to_sint_sat.i32 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; block0:
|
||||
; wcgdb %f3, %f0, 0, 5
|
||||
; lgdr %r2, %f3
|
||||
; cdbr %f0, %f0
|
||||
; locghio %r2, 0
|
||||
; lgfi %r5, 2147483647
|
||||
; cgr %r2, %r5
|
||||
; locgrh %r2, %r5
|
||||
; lgfi %r3, -2147483648
|
||||
; cgr %r2, %r3
|
||||
; locgrl %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_uint_sat_f64_i64(f64) -> i64 {
|
||||
block0(v0: f64):
|
||||
v1 = fcvt_to_uint_sat.i64 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; block0:
|
||||
; wclgdb %f3, %f0, 0, 5
|
||||
; lgdr %r2, %f3
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_sint_sat_f64_i64(f64) -> i64 {
|
||||
block0(v0: f64):
|
||||
v1 = fcvt_to_sint_sat.i64 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; block0:
|
||||
; wcgdb %f3, %f0, 0, 5
|
||||
; lgdr %r2, %f3
|
||||
; cdbr %f0, %f0
|
||||
; locghio %r2, 0
|
||||
; br %r14
|
||||
|
||||
@@ -245,7 +245,7 @@ block0(v0: f64):
|
||||
}
|
||||
|
||||
; block0:
|
||||
; ledbr %f0, %f0
|
||||
; ledbra %f0, %f0, 0
|
||||
; br %r14
|
||||
|
||||
function %ceil_f32(f32) -> f32 {
|
||||
@@ -335,9 +335,7 @@ block0(v0: f32, v1: f32, v2: f32):
|
||||
}
|
||||
|
||||
; block0:
|
||||
; ldr %f1, %f0
|
||||
; ldr %f0, %f4
|
||||
; maebr %f0, %f1, %f2
|
||||
; wfmasb %f0, %f0, %f2, %f4
|
||||
; br %r14
|
||||
|
||||
function %fma_f64(f64, f64, f64) -> f64 {
|
||||
@@ -347,9 +345,7 @@ block0(v0: f64, v1: f64, v2: f64):
|
||||
}
|
||||
|
||||
; block0:
|
||||
; ldr %f1, %f0
|
||||
; ldr %f0, %f4
|
||||
; madbr %f0, %f1, %f2
|
||||
; wfmadb %f0, %f0, %f2, %f4
|
||||
; br %r14
|
||||
|
||||
function %fcopysign_f32(f32, f32) -> f32 {
|
||||
@@ -359,7 +355,8 @@ block0(v0: f32, v1: f32):
|
||||
}
|
||||
|
||||
; block0:
|
||||
; cpsdr %f0, %f2, %f0
|
||||
; bras %r1, 8 ; data.f32 NaN ; le %f5, 0(%r1)
|
||||
; vsel %v0, %v0, %v2, %v5
|
||||
; br %r14
|
||||
|
||||
function %fcopysign_f64(f64, f64) -> f64 {
|
||||
@@ -369,7 +366,88 @@ block0(v0: f64, v1: f64):
|
||||
}
|
||||
|
||||
; block0:
|
||||
; cpsdr %f0, %f2, %f0
|
||||
; bras %r1, 12 ; data.f64 NaN ; ld %f5, 0(%r1)
|
||||
; vsel %v0, %v0, %v2, %v5
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_uint_f32_i8(f32) -> i8 {
|
||||
block0(v0: f32):
|
||||
v1 = fcvt_to_uint.i8 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; block0:
|
||||
; cebr %f0, %f0
|
||||
; jno 6 ; trap
|
||||
; bras %r1, 8 ; data.f32 256 ; le %f5, 0(%r1)
|
||||
; cebr %f0, %f5
|
||||
; jnhe 6 ; trap
|
||||
; bras %r1, 8 ; data.f32 -1 ; vlef %v17, 0(%r1), 0
|
||||
; wfcsb %f0, %v17
|
||||
; jnle 6 ; trap
|
||||
; wldeb %v21, %f0
|
||||
; wclgdb %v23, %v21, 0, 5
|
||||
; vlgvg %r2, %v23, 0
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_sint_f32_i8(f32) -> i8 {
|
||||
block0(v0: f32):
|
||||
v1 = fcvt_to_sint.i8 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; block0:
|
||||
; cebr %f0, %f0
|
||||
; jno 6 ; trap
|
||||
; bras %r1, 8 ; data.f32 128 ; le %f5, 0(%r1)
|
||||
; cebr %f0, %f5
|
||||
; jnhe 6 ; trap
|
||||
; bras %r1, 8 ; data.f32 -129 ; vlef %v17, 0(%r1), 0
|
||||
; wfcsb %f0, %v17
|
||||
; jnle 6 ; trap
|
||||
; wldeb %v21, %f0
|
||||
; wcgdb %v23, %v21, 0, 5
|
||||
; vlgvg %r2, %v23, 0
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_uint_f32_i16(f32) -> i16 {
|
||||
block0(v0: f32):
|
||||
v1 = fcvt_to_uint.i16 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; block0:
|
||||
; cebr %f0, %f0
|
||||
; jno 6 ; trap
|
||||
; bras %r1, 8 ; data.f32 65536 ; le %f5, 0(%r1)
|
||||
; cebr %f0, %f5
|
||||
; jnhe 6 ; trap
|
||||
; bras %r1, 8 ; data.f32 -1 ; vlef %v17, 0(%r1), 0
|
||||
; wfcsb %f0, %v17
|
||||
; jnle 6 ; trap
|
||||
; wldeb %v21, %f0
|
||||
; wclgdb %v23, %v21, 0, 5
|
||||
; vlgvg %r2, %v23, 0
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_sint_f32_i16(f32) -> i16 {
|
||||
block0(v0: f32):
|
||||
v1 = fcvt_to_sint.i16 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; block0:
|
||||
; cebr %f0, %f0
|
||||
; jno 6 ; trap
|
||||
; bras %r1, 8 ; data.f32 32768 ; le %f5, 0(%r1)
|
||||
; cebr %f0, %f5
|
||||
; jnhe 6 ; trap
|
||||
; bras %r1, 8 ; data.f32 -32769 ; vlef %v17, 0(%r1), 0
|
||||
; wfcsb %f0, %v17
|
||||
; jnle 6 ; trap
|
||||
; wldeb %v21, %f0
|
||||
; wcgdb %v23, %v21, 0, 5
|
||||
; vlgvg %r2, %v23, 0
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_uint_f32_i32(f32) -> i32 {
|
||||
@@ -381,8 +459,15 @@ block0(v0: f32):
|
||||
; block0:
|
||||
; cebr %f0, %f0
|
||||
; jno 6 ; trap
|
||||
; clfebr %r2, 5, %f0, 0
|
||||
; jno 6 ; trap
|
||||
; bras %r1, 8 ; data.f32 4294967300 ; le %f5, 0(%r1)
|
||||
; cebr %f0, %f5
|
||||
; jnhe 6 ; trap
|
||||
; bras %r1, 8 ; data.f32 -1 ; vlef %v17, 0(%r1), 0
|
||||
; wfcsb %f0, %v17
|
||||
; jnle 6 ; trap
|
||||
; wldeb %v21, %f0
|
||||
; wclgdb %v23, %v21, 0, 5
|
||||
; vlgvg %r2, %v23, 0
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_sint_f32_i32(f32) -> i32 {
|
||||
@@ -394,8 +479,15 @@ block0(v0: f32):
|
||||
; block0:
|
||||
; cebr %f0, %f0
|
||||
; jno 6 ; trap
|
||||
; cfebra %r2, 5, %f0, 0
|
||||
; jno 6 ; trap
|
||||
; bras %r1, 8 ; data.f32 2147483600 ; le %f5, 0(%r1)
|
||||
; cebr %f0, %f5
|
||||
; jnhe 6 ; trap
|
||||
; bras %r1, 8 ; data.f32 -2147484000 ; vlef %v17, 0(%r1), 0
|
||||
; wfcsb %f0, %v17
|
||||
; jnle 6 ; trap
|
||||
; wldeb %v21, %f0
|
||||
; wcgdb %v23, %v21, 0, 5
|
||||
; vlgvg %r2, %v23, 0
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_uint_f32_i64(f32) -> i64 {
|
||||
@@ -407,8 +499,15 @@ block0(v0: f32):
|
||||
; block0:
|
||||
; cebr %f0, %f0
|
||||
; jno 6 ; trap
|
||||
; clgebr %r2, 5, %f0, 0
|
||||
; jno 6 ; trap
|
||||
; bras %r1, 8 ; data.f32 18446744000000000000 ; le %f5, 0(%r1)
|
||||
; cebr %f0, %f5
|
||||
; jnhe 6 ; trap
|
||||
; bras %r1, 8 ; data.f32 -1 ; vlef %v17, 0(%r1), 0
|
||||
; wfcsb %f0, %v17
|
||||
; jnle 6 ; trap
|
||||
; wldeb %v21, %f0
|
||||
; wclgdb %v23, %v21, 0, 5
|
||||
; vlgvg %r2, %v23, 0
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_sint_f32_i64(f32) -> i64 {
|
||||
@@ -420,8 +519,91 @@ block0(v0: f32):
|
||||
; block0:
|
||||
; cebr %f0, %f0
|
||||
; jno 6 ; trap
|
||||
; cgebra %r2, 5, %f0, 0
|
||||
; bras %r1, 8 ; data.f32 9223372000000000000 ; le %f5, 0(%r1)
|
||||
; cebr %f0, %f5
|
||||
; jnhe 6 ; trap
|
||||
; bras %r1, 8 ; data.f32 -9223373000000000000 ; vlef %v17, 0(%r1), 0
|
||||
; wfcsb %f0, %v17
|
||||
; jnle 6 ; trap
|
||||
; wldeb %v21, %f0
|
||||
; wcgdb %v23, %v21, 0, 5
|
||||
; vlgvg %r2, %v23, 0
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_uint_f64_i8(f64) -> i8 {
|
||||
block0(v0: f64):
|
||||
v1 = fcvt_to_uint.i8 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; block0:
|
||||
; cdbr %f0, %f0
|
||||
; jno 6 ; trap
|
||||
; bras %r1, 12 ; data.f64 256 ; ld %f5, 0(%r1)
|
||||
; cdbr %f0, %f5
|
||||
; jnhe 6 ; trap
|
||||
; bras %r1, 12 ; data.f64 -1 ; vleg %v17, 0(%r1), 0
|
||||
; wfcdb %f0, %v17
|
||||
; jnle 6 ; trap
|
||||
; wclgdb %v21, %f0, 0, 5
|
||||
; vlgvg %r2, %v21, 0
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_sint_f64_i8(f64) -> i8 {
|
||||
block0(v0: f64):
|
||||
v1 = fcvt_to_sint.i8 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; block0:
|
||||
; cdbr %f0, %f0
|
||||
; jno 6 ; trap
|
||||
; bras %r1, 12 ; data.f64 128 ; ld %f5, 0(%r1)
|
||||
; cdbr %f0, %f5
|
||||
; jnhe 6 ; trap
|
||||
; bras %r1, 12 ; data.f64 -129 ; vleg %v17, 0(%r1), 0
|
||||
; wfcdb %f0, %v17
|
||||
; jnle 6 ; trap
|
||||
; wcgdb %v21, %f0, 0, 5
|
||||
; vlgvg %r2, %v21, 0
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_uint_f64_i16(f64) -> i16 {
|
||||
block0(v0: f64):
|
||||
v1 = fcvt_to_uint.i16 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; block0:
|
||||
; cdbr %f0, %f0
|
||||
; jno 6 ; trap
|
||||
; bras %r1, 12 ; data.f64 65536 ; ld %f5, 0(%r1)
|
||||
; cdbr %f0, %f5
|
||||
; jnhe 6 ; trap
|
||||
; bras %r1, 12 ; data.f64 -1 ; vleg %v17, 0(%r1), 0
|
||||
; wfcdb %f0, %v17
|
||||
; jnle 6 ; trap
|
||||
; wclgdb %v21, %f0, 0, 5
|
||||
; vlgvg %r2, %v21, 0
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_sint_f64_i16(f64) -> i16 {
|
||||
block0(v0: f64):
|
||||
v1 = fcvt_to_sint.i16 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; block0:
|
||||
; cdbr %f0, %f0
|
||||
; jno 6 ; trap
|
||||
; bras %r1, 12 ; data.f64 32768 ; ld %f5, 0(%r1)
|
||||
; cdbr %f0, %f5
|
||||
; jnhe 6 ; trap
|
||||
; bras %r1, 12 ; data.f64 -32769 ; vleg %v17, 0(%r1), 0
|
||||
; wfcdb %f0, %v17
|
||||
; jnle 6 ; trap
|
||||
; wcgdb %v21, %f0, 0, 5
|
||||
; vlgvg %r2, %v21, 0
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_uint_f64_i32(f64) -> i32 {
|
||||
@@ -433,8 +615,14 @@ block0(v0: f64):
|
||||
; block0:
|
||||
; cdbr %f0, %f0
|
||||
; jno 6 ; trap
|
||||
; clfdbr %r2, 5, %f0, 0
|
||||
; jno 6 ; trap
|
||||
; bras %r1, 12 ; data.f64 4294967296 ; ld %f5, 0(%r1)
|
||||
; cdbr %f0, %f5
|
||||
; jnhe 6 ; trap
|
||||
; bras %r1, 12 ; data.f64 -1 ; vleg %v17, 0(%r1), 0
|
||||
; wfcdb %f0, %v17
|
||||
; jnle 6 ; trap
|
||||
; wclgdb %v21, %f0, 0, 5
|
||||
; vlgvg %r2, %v21, 0
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_sint_f64_i32(f64) -> i32 {
|
||||
@@ -446,8 +634,14 @@ block0(v0: f64):
|
||||
; block0:
|
||||
; cdbr %f0, %f0
|
||||
; jno 6 ; trap
|
||||
; cfdbra %r2, 5, %f0, 0
|
||||
; jno 6 ; trap
|
||||
; bras %r1, 12 ; data.f64 2147483648 ; ld %f5, 0(%r1)
|
||||
; cdbr %f0, %f5
|
||||
; jnhe 6 ; trap
|
||||
; bras %r1, 12 ; data.f64 -2147483649 ; vleg %v17, 0(%r1), 0
|
||||
; wfcdb %f0, %v17
|
||||
; jnle 6 ; trap
|
||||
; wcgdb %v21, %f0, 0, 5
|
||||
; vlgvg %r2, %v21, 0
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_uint_f64_i64(f64) -> i64 {
|
||||
@@ -459,8 +653,14 @@ block0(v0: f64):
|
||||
; block0:
|
||||
; cdbr %f0, %f0
|
||||
; jno 6 ; trap
|
||||
; clgdbr %r2, 5, %f0, 0
|
||||
; jno 6 ; trap
|
||||
; bras %r1, 12 ; data.f64 18446744073709552000 ; ld %f5, 0(%r1)
|
||||
; cdbr %f0, %f5
|
||||
; jnhe 6 ; trap
|
||||
; bras %r1, 12 ; data.f64 -1 ; vleg %v17, 0(%r1), 0
|
||||
; wfcdb %f0, %v17
|
||||
; jnle 6 ; trap
|
||||
; wclgdb %v21, %f0, 0, 5
|
||||
; vlgvg %r2, %v21, 0
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_sint_f64_i64(f64) -> i64 {
|
||||
@@ -472,8 +672,66 @@ block0(v0: f64):
|
||||
; block0:
|
||||
; cdbr %f0, %f0
|
||||
; jno 6 ; trap
|
||||
; cgdbra %r2, 5, %f0, 0
|
||||
; jno 6 ; trap
|
||||
; bras %r1, 12 ; data.f64 9223372036854776000 ; ld %f5, 0(%r1)
|
||||
; cdbr %f0, %f5
|
||||
; jnhe 6 ; trap
|
||||
; bras %r1, 12 ; data.f64 -9223372036854778000 ; vleg %v17, 0(%r1), 0
|
||||
; wfcdb %f0, %v17
|
||||
; jnle 6 ; trap
|
||||
; wcgdb %v21, %f0, 0, 5
|
||||
; vlgvg %r2, %v21, 0
|
||||
; br %r14
|
||||
|
||||
function %fcvt_from_uint_i8_f32(i8) -> f32 {
|
||||
block0(v0: i8):
|
||||
v1 = fcvt_from_uint.f32 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; block0:
|
||||
; llgcr %r5, %r2
|
||||
; ldgr %f5, %r5
|
||||
; wcdlgb %f7, %f5, 0, 3
|
||||
; ledbra %f0, %f7, 4
|
||||
; br %r14
|
||||
|
||||
function %fcvt_from_sint_i8_f32(i8) -> f32 {
|
||||
block0(v0: i8):
|
||||
v1 = fcvt_from_sint.f32 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; block0:
|
||||
; lgbr %r5, %r2
|
||||
; ldgr %f5, %r5
|
||||
; wcdgb %f7, %f5, 0, 3
|
||||
; ledbra %f0, %f7, 4
|
||||
; br %r14
|
||||
|
||||
function %fcvt_from_uint_i16_f32(i16) -> f32 {
|
||||
block0(v0: i16):
|
||||
v1 = fcvt_from_uint.f32 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; block0:
|
||||
; llghr %r5, %r2
|
||||
; ldgr %f5, %r5
|
||||
; wcdlgb %f7, %f5, 0, 3
|
||||
; ledbra %f0, %f7, 4
|
||||
; br %r14
|
||||
|
||||
function %fcvt_from_sint_i16_f32(i16) -> f32 {
|
||||
block0(v0: i16):
|
||||
v1 = fcvt_from_sint.f32 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; block0:
|
||||
; lghr %r5, %r2
|
||||
; ldgr %f5, %r5
|
||||
; wcdgb %f7, %f5, 0, 3
|
||||
; ledbra %f0, %f7, 4
|
||||
; br %r14
|
||||
|
||||
function %fcvt_from_uint_i32_f32(i32) -> f32 {
|
||||
@@ -483,7 +741,10 @@ block0(v0: i32):
|
||||
}
|
||||
|
||||
; block0:
|
||||
; celfbr %f0, 0, %r2, 0
|
||||
; llgfr %r5, %r2
|
||||
; ldgr %f5, %r5
|
||||
; wcdlgb %f7, %f5, 0, 3
|
||||
; ledbra %f0, %f7, 4
|
||||
; br %r14
|
||||
|
||||
function %fcvt_from_sint_i32_f32(i32) -> f32 {
|
||||
@@ -493,7 +754,10 @@ block0(v0: i32):
|
||||
}
|
||||
|
||||
; block0:
|
||||
; cefbra %f0, 0, %r2, 0
|
||||
; lgfr %r5, %r2
|
||||
; ldgr %f5, %r5
|
||||
; wcdgb %f7, %f5, 0, 3
|
||||
; ledbra %f0, %f7, 4
|
||||
; br %r14
|
||||
|
||||
function %fcvt_from_uint_i64_f32(i64) -> f32 {
|
||||
@@ -503,7 +767,9 @@ block0(v0: i64):
|
||||
}
|
||||
|
||||
; block0:
|
||||
; celgbr %f0, 0, %r2, 0
|
||||
; ldgr %f3, %r2
|
||||
; wcdlgb %f5, %f3, 0, 3
|
||||
; ledbra %f0, %f5, 4
|
||||
; br %r14
|
||||
|
||||
function %fcvt_from_sint_i64_f32(i64) -> f32 {
|
||||
@@ -513,7 +779,57 @@ block0(v0: i64):
|
||||
}
|
||||
|
||||
; block0:
|
||||
; cegbra %f0, 0, %r2, 0
|
||||
; ldgr %f3, %r2
|
||||
; wcdgb %f5, %f3, 0, 3
|
||||
; ledbra %f0, %f5, 4
|
||||
; br %r14
|
||||
|
||||
function %fcvt_from_uint_i8_f64(i8) -> f64 {
|
||||
block0(v0: i8):
|
||||
v1 = fcvt_from_uint.f64 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; block0:
|
||||
; llgcr %r5, %r2
|
||||
; ldgr %f5, %r5
|
||||
; wcdlgb %f0, %f5, 0, 4
|
||||
; br %r14
|
||||
|
||||
function %fcvt_from_sint_i8_f64(i8) -> f64 {
|
||||
block0(v0: i8):
|
||||
v1 = fcvt_from_sint.f64 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; block0:
|
||||
; lgbr %r5, %r2
|
||||
; ldgr %f5, %r5
|
||||
; wcdgb %f0, %f5, 0, 4
|
||||
; br %r14
|
||||
|
||||
function %fcvt_from_uint_i16_f64(i16) -> f64 {
|
||||
block0(v0: i16):
|
||||
v1 = fcvt_from_uint.f64 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; block0:
|
||||
; llghr %r5, %r2
|
||||
; ldgr %f5, %r5
|
||||
; wcdlgb %f0, %f5, 0, 4
|
||||
; br %r14
|
||||
|
||||
function %fcvt_from_sint_i16_f64(i16) -> f64 {
|
||||
block0(v0: i16):
|
||||
v1 = fcvt_from_sint.f64 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; block0:
|
||||
; lghr %r5, %r2
|
||||
; ldgr %f5, %r5
|
||||
; wcdgb %f0, %f5, 0, 4
|
||||
; br %r14
|
||||
|
||||
function %fcvt_from_uint_i32_f64(i32) -> f64 {
|
||||
@@ -523,7 +839,9 @@ block0(v0: i32):
|
||||
}
|
||||
|
||||
; block0:
|
||||
; cdlfbr %f0, 0, %r2, 0
|
||||
; llgfr %r5, %r2
|
||||
; ldgr %f5, %r5
|
||||
; wcdlgb %f0, %f5, 0, 4
|
||||
; br %r14
|
||||
|
||||
function %fcvt_from_sint_i32_f64(i32) -> f64 {
|
||||
@@ -533,7 +851,9 @@ block0(v0: i32):
|
||||
}
|
||||
|
||||
; block0:
|
||||
; cdfbra %f0, 0, %r2, 0
|
||||
; lgfr %r5, %r2
|
||||
; ldgr %f5, %r5
|
||||
; wcdgb %f0, %f5, 0, 4
|
||||
; br %r14
|
||||
|
||||
function %fcvt_from_uint_i64_f64(i64) -> f64 {
|
||||
@@ -543,7 +863,8 @@ block0(v0: i64):
|
||||
}
|
||||
|
||||
; block0:
|
||||
; cdlgbr %f0, 0, %r2, 0
|
||||
; ldgr %f3, %r2
|
||||
; wcdlgb %f0, %f3, 0, 4
|
||||
; br %r14
|
||||
|
||||
function %fcvt_from_sint_i64_f64(i64) -> f64 {
|
||||
@@ -553,7 +874,78 @@ block0(v0: i64):
|
||||
}
|
||||
|
||||
; block0:
|
||||
; cdgbra %f0, 0, %r2, 0
|
||||
; ldgr %f3, %r2
|
||||
; wcdgb %f0, %f3, 0, 4
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_uint_sat_f32_i8(f32) -> i8 {
|
||||
block0(v0: f32):
|
||||
v1 = fcvt_to_uint_sat.i8 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; block0:
|
||||
; ldebr %f3, %f0
|
||||
; wclgdb %f5, %f3, 0, 5
|
||||
; lgdr %r5, %f5
|
||||
; lgr %r2, %r5
|
||||
; clgfi %r5, 256
|
||||
; locghih %r2, 255
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_sint_sat_f32_i8(f32) -> i8 {
|
||||
block0(v0: f32):
|
||||
v1 = fcvt_to_sint_sat.i8 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; block0:
|
||||
; ldebr %f3, %f0
|
||||
; wcgdb %f5, %f3, 0, 5
|
||||
; lgdr %r5, %f5
|
||||
; cebr %f0, %f0
|
||||
; locghio %r5, 0
|
||||
; lgr %r4, %r5
|
||||
; cghi %r5, 127
|
||||
; locghih %r4, 127
|
||||
; lgr %r2, %r4
|
||||
; cghi %r4, -128
|
||||
; locghil %r2, -128
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_uint_sat_f32_i16(f32) -> i16 {
|
||||
block0(v0: f32):
|
||||
v1 = fcvt_to_uint_sat.i16 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; block0:
|
||||
; ldebr %f3, %f0
|
||||
; wclgdb %f5, %f3, 0, 5
|
||||
; lgdr %r5, %f5
|
||||
; lgr %r2, %r5
|
||||
; clgfi %r5, 65535
|
||||
; locghih %r2, -1
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_sint_sat_f32_i16(f32) -> i16 {
|
||||
block0(v0: f32):
|
||||
v1 = fcvt_to_sint_sat.i16 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; block0:
|
||||
; ldebr %f3, %f0
|
||||
; wcgdb %f5, %f3, 0, 5
|
||||
; lgdr %r5, %f5
|
||||
; cebr %f0, %f0
|
||||
; locghio %r5, 0
|
||||
; lgr %r4, %r5
|
||||
; cghi %r5, 32767
|
||||
; locghih %r4, 32767
|
||||
; lgr %r2, %r4
|
||||
; cghi %r4, -32768
|
||||
; locghil %r2, -32768
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_uint_sat_f32_i32(f32) -> i32 {
|
||||
@@ -563,9 +955,12 @@ block0(v0: f32):
|
||||
}
|
||||
|
||||
; block0:
|
||||
; clfebr %r2, 5, %f0, 0
|
||||
; cebr %f0, %f0
|
||||
; lochio %r2, 0
|
||||
; ldebr %f3, %f0
|
||||
; wclgdb %f5, %f3, 0, 5
|
||||
; lgdr %r2, %f5
|
||||
; llilf %r3, 4294967295
|
||||
; clgr %r2, %r3
|
||||
; locgrh %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_sint_sat_f32_i32(f32) -> i32 {
|
||||
@@ -575,9 +970,17 @@ block0(v0: f32):
|
||||
}
|
||||
|
||||
; block0:
|
||||
; cfebra %r2, 5, %f0, 0
|
||||
; ldebr %f3, %f0
|
||||
; wcgdb %f5, %f3, 0, 5
|
||||
; lgdr %r2, %f5
|
||||
; cebr %f0, %f0
|
||||
; lochio %r2, 0
|
||||
; locghio %r2, 0
|
||||
; lgfi %r3, 2147483647
|
||||
; cgr %r2, %r3
|
||||
; locgrh %r2, %r3
|
||||
; lgfi %r5, -2147483648
|
||||
; cgr %r2, %r5
|
||||
; locgrl %r2, %r5
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_uint_sat_f32_i64(f32) -> i64 {
|
||||
@@ -587,9 +990,9 @@ block0(v0: f32):
|
||||
}
|
||||
|
||||
; block0:
|
||||
; clgebr %r2, 5, %f0, 0
|
||||
; cebr %f0, %f0
|
||||
; locghio %r2, 0
|
||||
; ldebr %f3, %f0
|
||||
; wclgdb %f5, %f3, 0, 5
|
||||
; lgdr %r2, %f5
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_sint_sat_f32_i64(f32) -> i64 {
|
||||
@@ -599,11 +1002,79 @@ block0(v0: f32):
|
||||
}
|
||||
|
||||
; block0:
|
||||
; cgebra %r2, 5, %f0, 0
|
||||
; ldebr %f3, %f0
|
||||
; wcgdb %f5, %f3, 0, 5
|
||||
; lgdr %r2, %f5
|
||||
; cebr %f0, %f0
|
||||
; locghio %r2, 0
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_uint_sat_f64_i8(f64) -> i8 {
|
||||
block0(v0: f64):
|
||||
v1 = fcvt_to_uint_sat.i8 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; block0:
|
||||
; wclgdb %f3, %f0, 0, 5
|
||||
; lgdr %r3, %f3
|
||||
; lgr %r2, %r3
|
||||
; clgfi %r3, 256
|
||||
; locghih %r2, 255
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_sint_sat_f64_i8(f64) -> i8 {
|
||||
block0(v0: f64):
|
||||
v1 = fcvt_to_sint_sat.i8 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; block0:
|
||||
; wcgdb %f3, %f0, 0, 5
|
||||
; lgdr %r3, %f3
|
||||
; cdbr %f0, %f0
|
||||
; locghio %r3, 0
|
||||
; lgr %r4, %r3
|
||||
; cghi %r3, 127
|
||||
; locghih %r4, 127
|
||||
; lgr %r2, %r4
|
||||
; cghi %r4, -128
|
||||
; locghil %r2, -128
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_uint_sat_f64_i16(f64) -> i16 {
|
||||
block0(v0: f64):
|
||||
v1 = fcvt_to_uint_sat.i16 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; block0:
|
||||
; wclgdb %f3, %f0, 0, 5
|
||||
; lgdr %r3, %f3
|
||||
; lgr %r2, %r3
|
||||
; clgfi %r3, 65535
|
||||
; locghih %r2, -1
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_sint_sat_f64_i16(f64) -> i16 {
|
||||
block0(v0: f64):
|
||||
v1 = fcvt_to_sint_sat.i16 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; block0:
|
||||
; wcgdb %f3, %f0, 0, 5
|
||||
; lgdr %r3, %f3
|
||||
; cdbr %f0, %f0
|
||||
; locghio %r3, 0
|
||||
; lgr %r4, %r3
|
||||
; cghi %r3, 32767
|
||||
; locghih %r4, 32767
|
||||
; lgr %r2, %r4
|
||||
; cghi %r4, -32768
|
||||
; locghil %r2, -32768
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_uint_sat_f64_i32(f64) -> i32 {
|
||||
block0(v0: f64):
|
||||
v1 = fcvt_to_uint_sat.i32 v0
|
||||
@@ -611,9 +1082,11 @@ block0(v0: f64):
|
||||
}
|
||||
|
||||
; block0:
|
||||
; clfdbr %r2, 5, %f0, 0
|
||||
; cdbr %f0, %f0
|
||||
; lochio %r2, 0
|
||||
; wclgdb %f3, %f0, 0, 5
|
||||
; lgdr %r2, %f3
|
||||
; llilf %r5, 4294967295
|
||||
; clgr %r2, %r5
|
||||
; locgrh %r2, %r5
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_sint_sat_f64_i32(f64) -> i32 {
|
||||
@@ -623,9 +1096,16 @@ block0(v0: f64):
|
||||
}
|
||||
|
||||
; block0:
|
||||
; cfdbra %r2, 5, %f0, 0
|
||||
; wcgdb %f3, %f0, 0, 5
|
||||
; lgdr %r2, %f3
|
||||
; cdbr %f0, %f0
|
||||
; lochio %r2, 0
|
||||
; locghio %r2, 0
|
||||
; lgfi %r5, 2147483647
|
||||
; cgr %r2, %r5
|
||||
; locgrh %r2, %r5
|
||||
; lgfi %r3, -2147483648
|
||||
; cgr %r2, %r3
|
||||
; locgrl %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_uint_sat_f64_i64(f64) -> i64 {
|
||||
@@ -635,9 +1115,8 @@ block0(v0: f64):
|
||||
}
|
||||
|
||||
; block0:
|
||||
; clgdbr %r2, 5, %f0, 0
|
||||
; cdbr %f0, %f0
|
||||
; locghio %r2, 0
|
||||
; wclgdb %f3, %f0, 0, 5
|
||||
; lgdr %r2, %f3
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_sint_sat_f64_i64(f64) -> i64 {
|
||||
@@ -647,7 +1126,8 @@ block0(v0: f64):
|
||||
}
|
||||
|
||||
; block0:
|
||||
; cgdbra %r2, 5, %f0, 0
|
||||
; wcgdb %f3, %f0, 0, 5
|
||||
; lgdr %r2, %f3
|
||||
; cdbr %f0, %f0
|
||||
; locghio %r2, 0
|
||||
; br %r14
|
||||
@@ -679,8 +1159,7 @@ block0(v0: i32):
|
||||
}
|
||||
|
||||
; block0:
|
||||
; sllg %r5, %r2, 32
|
||||
; ldgr %f0, %r5
|
||||
; vlvgf %v0, %r2, 0
|
||||
; br %r14
|
||||
|
||||
function %bitcast_f32_i32(f32) -> i32 {
|
||||
@@ -690,7 +1169,6 @@ block0(v0: f32):
|
||||
}
|
||||
|
||||
; block0:
|
||||
; lgdr %r5, %f0
|
||||
; srlg %r2, %r5, 32
|
||||
; vlgvf %r2, %v0, 0
|
||||
; br %r14
|
||||
|
||||
|
||||
@@ -40,8 +40,7 @@ block0(v0: i64):
|
||||
|
||||
; block0:
|
||||
; lrv %r5, 0(%r2)
|
||||
; sllg %r3, %r5, 32
|
||||
; ldgr %f0, %r3
|
||||
; vlvgf %v0, %r5, 0
|
||||
; br %r14
|
||||
|
||||
function %store_f64(f64, i64) {
|
||||
@@ -82,8 +81,7 @@ block0(v0: f32, v1: i64):
|
||||
}
|
||||
|
||||
; block0:
|
||||
; lgdr %r3, %f0
|
||||
; srlg %r4, %r3, 32
|
||||
; strv %r4, 0(%r2)
|
||||
; vlgvf %r3, %v0, 0
|
||||
; strv %r3, 0(%r2)
|
||||
; br %r14
|
||||
|
||||
|
||||
@@ -76,9 +76,9 @@ block1:
|
||||
; bras %r1, 12 ; data.f64 1 ; ld %f2, 0(%r1)
|
||||
; bras %r1, 12 ; data.f64 2 ; ld %f4, 0(%r1)
|
||||
; bras %r1, 12 ; data.f64 3 ; ld %f6, 0(%r1)
|
||||
; bras %r1, 12 ; data.f64 4 ; ld %f5, 0(%r1)
|
||||
; bras %r1, 12 ; data.f64 5 ; ld %f7, 0(%r1)
|
||||
; std %f5, 0(%r2)
|
||||
; std %f7, 8(%r2)
|
||||
; bras %r1, 12 ; data.f64 4 ; vleg %v28, 0(%r1), 0
|
||||
; bras %r1, 12 ; data.f64 5 ; vleg %v31, 0(%r1), 0
|
||||
; vsteg %v28, 0(%r2), 0
|
||||
; vsteg %v31, 8(%r2), 0
|
||||
; br %r14
|
||||
|
||||
|
||||
Reference in New Issue
Block a user