Skip to content

Commit

Permalink
Enable SIMD spec tests for f32x4_rounding and f64x4_rounding.
Browse files Browse the repository at this point in the history
Also address some review comments pointing out minor issues.
  • Loading branch information
jlb6740 committed Dec 2, 2020
1 parent a33e755 commit a548516
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 9 deletions.
13 changes: 5 additions & 8 deletions build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -212,6 +212,8 @@ fn experimental_x64_should_panic(testsuite: &str, testname: &str, strategy: &str
("simd", "simd_splat") => return false,
("simd", "simd_store") => return false,
("simd", "simd_conversions") => return false,
("simd", "simd_f32x4_rounding") => return false,
("simd", "simd_f64x2_rounding") => return false,
("simd", _) => return true,
_ => {}
}
Expand Down Expand Up @@ -240,18 +242,13 @@ fn ignore(testsuite: &str, testname: &str, strategy: &str) -> bool {
// These are only implemented on aarch64 and x64.
("simd", "simd_boolean")
| ("simd", "simd_f32x4_pmin_pmax")
| ("simd", "simd_f64x2_pmin_pmax") => {
| ("simd", "simd_f64x2_pmin_pmax")
| ("simd", "simd_f32x4_rounding")
| ("simd", "simd_f64x2_rounding") => {
return !(cfg!(feature = "experimental_x64")
|| env::var("CARGO_CFG_TARGET_ARCH").unwrap() == "aarch64")
}

// These are only implemented on aarch64.
("simd", "simd_f32x4_rounding") | ("simd", "simd_f64x2_rounding") => {
return env::var("CARGO_CFG_TARGET_ARCH").unwrap() != "aarch64";
}

// These tests have simd operators which aren't implemented yet.
// (currently none)
_ => {}
},
_ => panic!("unrecognized strategy"),
Expand Down
5 changes: 5 additions & 0 deletions cranelift/codegen/src/isa/x64/inst/args.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1245,6 +1245,11 @@ impl From<FloatCC> for FcmpImm {
}

/// Encode the rounding modes used as part of the Rounding Control field.
/// Note, these rounding immediates only consider the rounding control field
/// (i.e. the rounding mode) which only take up the first two bits when encoded.
/// However the rounding immediate which this field helps make up, also includes
/// bits 3 and 4 which define the rounding select and precision mask respectively.
/// These two bits are not defined here and are implictly set to zero when encoded.
pub(crate) enum RoundImm {
RoundNearest = 0x00,
RoundDown = 0x01,
Expand Down
2 changes: 1 addition & 1 deletion cranelift/codegen/src/isa/x64/lower.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3240,7 +3240,7 @@ fn lower_insn_to_regs<C: LowerCtx<I = Inst>>(
ctx.emit(Inst::gen_move(dst, src, ty));
ctx.emit(Inst::xmm_rm_r_imm(
op,
RegMem::reg(dst.to_reg()),
RegMem::from(dst),
dst,
mode.encode(),
false,
Expand Down

0 comments on commit a548516

Please sign in to comment.