use crate::*;
const DATA_ADDR: u64 = 0x3000;
#[test]
fn test_cvtsd2ss_xmm0_to_xmm1() {
let mut emu = emu64();
let code = [
0xf2, 0x0f, 0x5a, 0xc8, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_cvtsd2ss_xmm2_to_xmm3() {
let mut emu = emu64();
let code = [
0xf2, 0x0f, 0x5a, 0xda, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_cvtsd2ss_xmm4_to_xmm5() {
let mut emu = emu64();
let code = [
0xf2, 0x0f, 0x5a, 0xec, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_cvtsd2ss_xmm6_to_xmm7() {
let mut emu = emu64();
let code = [
0xf2, 0x0f, 0x5a, 0xfe, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_cvtsd2ss_xmm8_to_xmm9() {
let mut emu = emu64();
let code = [
0xf2, 0x45, 0x0f, 0x5a, 0xc8, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_cvtsd2ss_xmm10_to_xmm11() {
let mut emu = emu64();
let code = [
0xf2, 0x45, 0x0f, 0x5a, 0xda, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_cvtsd2ss_xmm14_to_xmm15() {
let mut emu = emu64();
let code = [
0xf2, 0x45, 0x0f, 0x5a, 0xfe, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_cvtsd2ss_xmm0_to_xmm15() {
let mut emu = emu64();
let code = [
0xf2, 0x44, 0x0f, 0x5a, 0xf8, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_cvtsd2ss_xmm15_to_xmm0() {
let mut emu = emu64();
let code = [
0xf2, 0x41, 0x0f, 0x5a, 0xc7, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_cvtsd2ss_mem_to_xmm0() {
let mut emu = emu64();
let code = [0x48, 0xb8]; let mut full_code = code.to_vec();
full_code.extend_from_slice(&DATA_ADDR.to_le_bytes());
full_code.extend_from_slice(&[
0xf2, 0x0f, 0x5a, 0x00, 0xf4, ]);
emu.load_code_bytes(&full_code);
let f1: f64 = 1.0;
emu.maps.write_bytes_slice(DATA_ADDR, &f1.to_le_bytes());
emu.run(None).unwrap();
}
#[test]
fn test_cvtsd2ss_mem_to_xmm1() {
let mut emu = emu64();
let code = [0x48, 0xbb]; let mut full_code = code.to_vec();
full_code.extend_from_slice(&DATA_ADDR.to_le_bytes());
full_code.extend_from_slice(&[
0xf2, 0x0f, 0x5a, 0x0b, 0xf4, ]);
emu.load_code_bytes(&full_code);
let f1: f64 = -3.14159265358979;
emu.maps.write_bytes_slice(DATA_ADDR, &f1.to_le_bytes());
emu.run(None).unwrap();
}
#[test]
fn test_cvtsd2ss_mem_to_xmm7() {
let mut emu = emu64();
let code = [0x48, 0xb9]; let mut full_code = code.to_vec();
full_code.extend_from_slice(&DATA_ADDR.to_le_bytes());
full_code.extend_from_slice(&[
0xf2, 0x0f, 0x5a, 0x39, 0xf4, ]);
emu.load_code_bytes(&full_code);
let f1: f64 = 42.5;
emu.maps.write_bytes_slice(DATA_ADDR, &f1.to_le_bytes());
emu.run(None).unwrap();
}
#[test]
fn test_cvtsd2ss_mem_to_xmm8() {
let mut emu = emu64();
let code = [0x48, 0xba]; let mut full_code = code.to_vec();
full_code.extend_from_slice(&DATA_ADDR.to_le_bytes());
full_code.extend_from_slice(&[
0xf2, 0x44, 0x0f, 0x5a, 0x02, 0xf4, ]);
emu.load_code_bytes(&full_code);
let f1: f64 = -99.999;
emu.maps.write_bytes_slice(DATA_ADDR, &f1.to_le_bytes());
emu.run(None).unwrap();
}
#[test]
fn test_cvtsd2ss_mem_to_xmm15() {
let mut emu = emu64();
let code = [0x48, 0xbe]; let mut full_code = code.to_vec();
full_code.extend_from_slice(&DATA_ADDR.to_le_bytes());
full_code.extend_from_slice(&[
0xf2, 0x44, 0x0f, 0x5a, 0x3e, 0xf4, ]);
emu.load_code_bytes(&full_code);
let f1: f64 = 0.125;
emu.maps.write_bytes_slice(DATA_ADDR, &f1.to_le_bytes());
emu.run(None).unwrap();
}
#[test]
fn test_cvtsd2ss_positive_zero() {
let mut emu = emu64();
let code = [0x48, 0xb8];
let mut full_code = code.to_vec();
full_code.extend_from_slice(&DATA_ADDR.to_le_bytes());
full_code.extend_from_slice(&[0xf2, 0x0f, 0x5a, 0x00, 0xf4]);
emu.load_code_bytes(&full_code);
let f1: f64 = 0.0;
emu.maps.write_bytes_slice(DATA_ADDR, &f1.to_le_bytes());
emu.run(None).unwrap();
}
#[test]
fn test_cvtsd2ss_negative_zero() {
let mut emu = emu64();
let code = [0x48, 0xb8];
let mut full_code = code.to_vec();
full_code.extend_from_slice(&DATA_ADDR.to_le_bytes());
full_code.extend_from_slice(&[0xf2, 0x0f, 0x5a, 0x00, 0xf4]);
emu.load_code_bytes(&full_code);
let f1: f64 = -0.0;
emu.maps.write_bytes_slice(DATA_ADDR, &f1.to_le_bytes());
emu.run(None).unwrap();
}
#[test]
fn test_cvtsd2ss_positive_infinity() {
let mut emu = emu64();
let code = [0x48, 0xb8];
let mut full_code = code.to_vec();
full_code.extend_from_slice(&DATA_ADDR.to_le_bytes());
full_code.extend_from_slice(&[0xf2, 0x0f, 0x5a, 0x00, 0xf4]);
emu.load_code_bytes(&full_code);
let f1: f64 = f64::INFINITY;
emu.maps.write_bytes_slice(DATA_ADDR, &f1.to_le_bytes());
emu.run(None).unwrap();
}
#[test]
fn test_cvtsd2ss_negative_infinity() {
let mut emu = emu64();
let code = [0x48, 0xb8];
let mut full_code = code.to_vec();
full_code.extend_from_slice(&DATA_ADDR.to_le_bytes());
full_code.extend_from_slice(&[0xf2, 0x0f, 0x5a, 0x00, 0xf4]);
emu.load_code_bytes(&full_code);
let f1: f64 = f64::NEG_INFINITY;
emu.maps.write_bytes_slice(DATA_ADDR, &f1.to_le_bytes());
emu.run(None).unwrap();
}
#[test]
fn test_cvtsd2ss_quiet_nan() {
let mut emu = emu64();
let code = [0x48, 0xb8];
let mut full_code = code.to_vec();
full_code.extend_from_slice(&DATA_ADDR.to_le_bytes());
full_code.extend_from_slice(&[0xf2, 0x0f, 0x5a, 0x00, 0xf4]);
emu.load_code_bytes(&full_code);
let f1: f64 = f64::NAN;
emu.maps.write_bytes_slice(DATA_ADDR, &f1.to_le_bytes());
emu.run(None).unwrap();
}
#[test]
fn test_cvtsd2ss_signaling_nan() {
let mut emu = emu64();
let code = [0x48, 0xb8];
let mut full_code = code.to_vec();
full_code.extend_from_slice(&DATA_ADDR.to_le_bytes());
full_code.extend_from_slice(&[0xf2, 0x0f, 0x5a, 0x00, 0xf4]);
emu.load_code_bytes(&full_code);
let snan: u64 = 0x7FF0000000000001; emu.maps.write_bytes_slice(DATA_ADDR, &snan.to_le_bytes());
emu.run(None).unwrap();
}
#[test]
fn test_cvtsd2ss_precision_loss() {
let mut emu = emu64();
let code = [0x48, 0xb8];
let mut full_code = code.to_vec();
full_code.extend_from_slice(&DATA_ADDR.to_le_bytes());
full_code.extend_from_slice(&[0xf2, 0x0f, 0x5a, 0x00, 0xf4]);
emu.load_code_bytes(&full_code);
let f1: f64 = 1.0000000001; emu.maps.write_bytes_slice(DATA_ADDR, &f1.to_le_bytes());
emu.run(None).unwrap();
}
#[test]
fn test_cvtsd2ss_rounding_nearest() {
let mut emu = emu64();
let code = [0x48, 0xb8];
let mut full_code = code.to_vec();
full_code.extend_from_slice(&DATA_ADDR.to_le_bytes());
full_code.extend_from_slice(&[0xf2, 0x0f, 0x5a, 0x00, 0xf4]);
emu.load_code_bytes(&full_code);
let f1: f64 = 1.5000000000000002;
emu.maps.write_bytes_slice(DATA_ADDR, &f1.to_le_bytes());
emu.run(None).unwrap();
}
#[test]
fn test_cvtsd2ss_very_small_precision() {
let mut emu = emu64();
let code = [0x48, 0xb8];
let mut full_code = code.to_vec();
full_code.extend_from_slice(&DATA_ADDR.to_le_bytes());
full_code.extend_from_slice(&[0xf2, 0x0f, 0x5a, 0x00, 0xf4]);
emu.load_code_bytes(&full_code);
let f1: f64 = 1.00000000000000001;
emu.maps.write_bytes_slice(DATA_ADDR, &f1.to_le_bytes());
emu.run(None).unwrap();
}
#[test]
fn test_cvtsd2ss_overflow_to_positive_inf() {
let mut emu = emu64();
let code = [0x48, 0xb8];
let mut full_code = code.to_vec();
full_code.extend_from_slice(&DATA_ADDR.to_le_bytes());
full_code.extend_from_slice(&[0xf2, 0x0f, 0x5a, 0x00, 0xf4]);
emu.load_code_bytes(&full_code);
let f1: f64 = 1.0e100; emu.maps.write_bytes_slice(DATA_ADDR, &f1.to_le_bytes());
emu.run(None).unwrap();
}
#[test]
fn test_cvtsd2ss_overflow_to_negative_inf() {
let mut emu = emu64();
let code = [0x48, 0xb8];
let mut full_code = code.to_vec();
full_code.extend_from_slice(&DATA_ADDR.to_le_bytes());
full_code.extend_from_slice(&[0xf2, 0x0f, 0x5a, 0x00, 0xf4]);
emu.load_code_bytes(&full_code);
let f1: f64 = -1.0e100;
emu.maps.write_bytes_slice(DATA_ADDR, &f1.to_le_bytes());
emu.run(None).unwrap();
}
#[test]
fn test_cvtsd2ss_near_max_f32() {
let mut emu = emu64();
let code = [0x48, 0xb8];
let mut full_code = code.to_vec();
full_code.extend_from_slice(&DATA_ADDR.to_le_bytes());
full_code.extend_from_slice(&[0xf2, 0x0f, 0x5a, 0x00, 0xf4]);
emu.load_code_bytes(&full_code);
let f1: f64 = 3.4e38; emu.maps.write_bytes_slice(DATA_ADDR, &f1.to_le_bytes());
emu.run(None).unwrap();
}
#[test]
fn test_cvtsd2ss_small_values() {
let mut emu = emu64();
let code = [0x48, 0xb8];
let mut full_code = code.to_vec();
full_code.extend_from_slice(&DATA_ADDR.to_le_bytes());
full_code.extend_from_slice(&[0xf2, 0x0f, 0x5a, 0x00, 0xf4]);
emu.load_code_bytes(&full_code);
let f1: f64 = 1.0e-30;
emu.maps.write_bytes_slice(DATA_ADDR, &f1.to_le_bytes());
emu.run(None).unwrap();
}
#[test]
fn test_cvtsd2ss_large_values() {
let mut emu = emu64();
let code = [0x48, 0xb8];
let mut full_code = code.to_vec();
full_code.extend_from_slice(&DATA_ADDR.to_le_bytes());
full_code.extend_from_slice(&[0xf2, 0x0f, 0x5a, 0x00, 0xf4]);
emu.load_code_bytes(&full_code);
let f1: f64 = 1.0e30;
emu.maps.write_bytes_slice(DATA_ADDR, &f1.to_le_bytes());
emu.run(None).unwrap();
}
#[test]
fn test_cvtsd2ss_fractional() {
let mut emu = emu64();
let code = [0x48, 0xb8];
let mut full_code = code.to_vec();
full_code.extend_from_slice(&DATA_ADDR.to_le_bytes());
full_code.extend_from_slice(&[0xf2, 0x0f, 0x5a, 0x00, 0xf4]);
emu.load_code_bytes(&full_code);
let f1: f64 = 0.333333333333333;
emu.maps.write_bytes_slice(DATA_ADDR, &f1.to_le_bytes());
emu.run(None).unwrap();
}
#[test]
fn test_cvtsd2ss_powers_of_two() {
let mut emu = emu64();
let code = [0x48, 0xb8];
let mut full_code = code.to_vec();
full_code.extend_from_slice(&DATA_ADDR.to_le_bytes());
full_code.extend_from_slice(&[0xf2, 0x0f, 0x5a, 0x00, 0xf4]);
emu.load_code_bytes(&full_code);
let f1: f64 = 128.0;
emu.maps.write_bytes_slice(DATA_ADDR, &f1.to_le_bytes());
emu.run(None).unwrap();
}
#[test]
fn test_cvtsd2ss_negative_values() {
let mut emu = emu64();
let code = [0x48, 0xb8];
let mut full_code = code.to_vec();
full_code.extend_from_slice(&DATA_ADDR.to_le_bytes());
full_code.extend_from_slice(&[0xf2, 0x0f, 0x5a, 0x00, 0xf4]);
emu.load_code_bytes(&full_code);
let f1: f64 = -42.5;
emu.maps.write_bytes_slice(DATA_ADDR, &f1.to_le_bytes());
emu.run(None).unwrap();
}
#[test]
fn test_cvtsd2ss_with_displacement() {
let mut emu = emu64();
let code = [0x48, 0xb8];
let mut full_code = code.to_vec();
full_code.extend_from_slice(&(DATA_ADDR - 16).to_le_bytes());
full_code.extend_from_slice(&[
0xf2, 0x0f, 0x5a, 0x40, 0x10, 0xf4,
]);
emu.load_code_bytes(&full_code);
let f1: f64 = 7.5;
emu.maps.write_bytes_slice(DATA_ADDR, &f1.to_le_bytes());
emu.run(None).unwrap();
}
#[test]
fn test_cvtsd2ss_rip_relative() {
let mut emu = emu64();
let code = [
0xf2, 0x0f, 0x5a, 0x05, 0x00, 0x00, 0x00, 0x00, 0xf4,
];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_cvtsd2ss_max_float64() {
let mut emu = emu64();
let code = [0x48, 0xb8];
let mut full_code = code.to_vec();
full_code.extend_from_slice(&DATA_ADDR.to_le_bytes());
full_code.extend_from_slice(&[0xf2, 0x0f, 0x5a, 0x00, 0xf4]);
emu.load_code_bytes(&full_code);
let f1: f64 = f64::MAX;
emu.maps.write_bytes_slice(DATA_ADDR, &f1.to_le_bytes());
emu.run(None).unwrap();
}
#[test]
fn test_cvtsd2ss_min_positive_float64() {
let mut emu = emu64();
let code = [0x48, 0xb8];
let mut full_code = code.to_vec();
full_code.extend_from_slice(&DATA_ADDR.to_le_bytes());
full_code.extend_from_slice(&[0xf2, 0x0f, 0x5a, 0x00, 0xf4]);
emu.load_code_bytes(&full_code);
let f1: f64 = f64::MIN_POSITIVE;
emu.maps.write_bytes_slice(DATA_ADDR, &f1.to_le_bytes());
emu.run(None).unwrap();
}
#[test]
fn test_cvtsd2ss_one() {
let mut emu = emu64();
let code = [0x48, 0xb8];
let mut full_code = code.to_vec();
full_code.extend_from_slice(&DATA_ADDR.to_le_bytes());
full_code.extend_from_slice(&[0xf2, 0x0f, 0x5a, 0x00, 0xf4]);
emu.load_code_bytes(&full_code);
let f1: f64 = 1.0;
emu.maps.write_bytes_slice(DATA_ADDR, &f1.to_le_bytes());
emu.run(None).unwrap();
}
#[test]
fn test_cvtsd2ss_minus_one() {
let mut emu = emu64();
let code = [0x48, 0xb8];
let mut full_code = code.to_vec();
full_code.extend_from_slice(&DATA_ADDR.to_le_bytes());
full_code.extend_from_slice(&[0xf2, 0x0f, 0x5a, 0x00, 0xf4]);
emu.load_code_bytes(&full_code);
let f1: f64 = -1.0;
emu.maps.write_bytes_slice(DATA_ADDR, &f1.to_le_bytes());
emu.run(None).unwrap();
}
#[test]
fn test_cvtsd2ss_pi() {
let mut emu = emu64();
let code = [0x48, 0xb8];
let mut full_code = code.to_vec();
full_code.extend_from_slice(&DATA_ADDR.to_le_bytes());
full_code.extend_from_slice(&[0xf2, 0x0f, 0x5a, 0x00, 0xf4]);
emu.load_code_bytes(&full_code);
let f1: f64 = std::f64::consts::PI;
emu.maps.write_bytes_slice(DATA_ADDR, &f1.to_le_bytes());
emu.run(None).unwrap();
}
#[test]
fn test_cvtsd2ss_multiple_conversions() {
let mut emu = emu64();
let code = [0x48, 0xb8];
let mut full_code = code.to_vec();
full_code.extend_from_slice(&DATA_ADDR.to_le_bytes());
full_code.extend_from_slice(&[
0xf2, 0x0f, 0x5a, 0x00, 0xf2, 0x0f, 0x5a, 0x08, 0xf2, 0x0f, 0x5a, 0x10, 0xf4,
]);
emu.load_code_bytes(&full_code);
let f1: f64 = 3.14159265358979;
emu.maps.write_bytes_slice(DATA_ADDR, &f1.to_le_bytes());
emu.run(None).unwrap();
}