use crate::*;
const ALIGNED_ADDR: u64 = 0x3000;
#[test]
fn test_vptest_xmm0_xmm1() {
let mut emu = emu64();
let code = [
0xc4, 0xe2, 0x79, 0x17, 0xc1, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vptest_xmm3_xmm4() {
let mut emu = emu64();
let code = [
0xc4, 0xe2, 0x79, 0x17, 0xdc, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vptest_xmm6_xmm7() {
let mut emu = emu64();
let code = [
0xc4, 0xe2, 0x79, 0x17, 0xf7, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vptest_xmm9_xmm10() {
let mut emu = emu64();
let code = [
0xc4, 0x42, 0x79, 0x17, 0xca, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vptest_xmm12_xmm13() {
let mut emu = emu64();
let code = [
0xc4, 0x42, 0x79, 0x17, 0xe5, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vptest_xmm15_xmm0() {
let mut emu = emu64();
let code = [
0xc4, 0x62, 0x79, 0x17, 0xf8, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vptest_xmm0_mem() {
let mut emu = emu64();
let code = [0x48, 0xb8];
let mut full_code = code.to_vec();
full_code.extend_from_slice(&ALIGNED_ADDR.to_le_bytes());
full_code.extend_from_slice(&[
0xc4, 0xe2, 0x79, 0x17, 0x00, 0xf4, ]);
emu.load_code_bytes(&full_code);
let data = vec![0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF];
emu.maps.write_bytes_slice(ALIGNED_ADDR, &data);
emu.run(None).unwrap();
}
#[test]
fn test_vptest_xmm5_mem() {
let mut emu = emu64();
let code = [0x48, 0xb8];
let mut full_code = code.to_vec();
full_code.extend_from_slice(&ALIGNED_ADDR.to_le_bytes());
full_code.extend_from_slice(&[
0xc4, 0xe2, 0x79, 0x17, 0x28, 0xf4, ]);
emu.load_code_bytes(&full_code);
let data = vec![0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00];
emu.maps.write_bytes_slice(ALIGNED_ADDR, &data);
emu.run(None).unwrap();
}
#[test]
fn test_vptest_xmm11_mem() {
let mut emu = emu64();
let code = [0x48, 0xb8];
let mut full_code = code.to_vec();
full_code.extend_from_slice(&ALIGNED_ADDR.to_le_bytes());
full_code.extend_from_slice(&[
0xc4, 0x62, 0x79, 0x17, 0x18, 0xf4, ]);
emu.load_code_bytes(&full_code);
let data = vec![
0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
];
emu.maps.write_bytes_slice(ALIGNED_ADDR, &data);
emu.run(None).unwrap();
}
#[test]
fn test_vptest_ymm0_ymm1() {
let mut emu = emu64();
let code = [
0xc4, 0xe2, 0x7d, 0x17, 0xc1, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vptest_ymm3_ymm4() {
let mut emu = emu64();
let code = [
0xc4, 0xe2, 0x7d, 0x17, 0xdc, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vptest_ymm6_ymm7() {
let mut emu = emu64();
let code = [
0xc4, 0xe2, 0x7d, 0x17, 0xf7, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vptest_ymm9_ymm10() {
let mut emu = emu64();
let code = [
0xc4, 0x42, 0x7d, 0x17, 0xca, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vptest_ymm12_ymm13() {
let mut emu = emu64();
let code = [
0xc4, 0x42, 0x7d, 0x17, 0xe5, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vptest_ymm15_ymm0() {
let mut emu = emu64();
let code = [
0xc4, 0x62, 0x7d, 0x17, 0xf8, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vptest_ymm0_mem() {
let mut emu = emu64();
let code = [0x48, 0xb8];
let mut full_code = code.to_vec();
full_code.extend_from_slice(&ALIGNED_ADDR.to_le_bytes());
full_code.extend_from_slice(&[
0xc4, 0xe2, 0x7d, 0x17, 0x00, 0xf4, ]);
emu.load_code_bytes(&full_code);
let data = vec![0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF];
emu.maps.write_bytes_slice(ALIGNED_ADDR, &data);
emu.run(None).unwrap();
}
#[test]
fn test_vptest_ymm5_mem() {
let mut emu = emu64();
let code = [0x48, 0xb8];
let mut full_code = code.to_vec();
full_code.extend_from_slice(&ALIGNED_ADDR.to_le_bytes());
full_code.extend_from_slice(&[
0xc4, 0xe2, 0x7d, 0x17, 0x28, 0xf4, ]);
emu.load_code_bytes(&full_code);
let data = vec![0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00];
emu.maps.write_bytes_slice(ALIGNED_ADDR, &data);
emu.run(None).unwrap();
}
#[test]
fn test_vptest_ymm11_mem() {
let mut emu = emu64();
let code = [0x48, 0xb8];
let mut full_code = code.to_vec();
full_code.extend_from_slice(&ALIGNED_ADDR.to_le_bytes());
full_code.extend_from_slice(&[
0xc4, 0x62, 0x7d, 0x17, 0x18, 0xf4, ]);
emu.load_code_bytes(&full_code);
let data = vec![
0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,
0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
];
emu.maps.write_bytes_slice(ALIGNED_ADDR, &data);
emu.run(None).unwrap();
}
#[test]
fn test_vptest_xmm_chain() {
let mut emu = emu64();
let code = [
0xc4, 0xe2, 0x79, 0x17, 0xc1, 0xc4, 0xe2, 0x79, 0x17, 0xd2, 0xc4, 0xe2, 0x79, 0x17, 0xe3, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vptest_ymm_chain() {
let mut emu = emu64();
let code = [
0xc4, 0xe2, 0x7d, 0x17, 0xc1, 0xc4, 0xe2, 0x7d, 0x17, 0xd2, 0xc4, 0xe2, 0x7d, 0x17, 0xe3, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vptest_xmm_extended_regs() {
let mut emu = emu64();
let code = [
0xc4, 0x42, 0x79, 0x17, 0xc1, 0xc4, 0x42, 0x79, 0x17, 0xd5, 0xc4, 0x42, 0x79, 0x17, 0xff, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vptest_ymm_extended_regs() {
let mut emu = emu64();
let code = [
0xc4, 0x42, 0x7d, 0x17, 0xc1, 0xc4, 0x42, 0x7d, 0x17, 0xd5, 0xc4, 0x42, 0x7d, 0x17, 0xff, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vptest_xmm_self() {
let mut emu = emu64();
let code = [
0xc4, 0xe2, 0x79, 0x17, 0xc0, 0xc4, 0xe2, 0x79, 0x17, 0xdb, 0xc4, 0xe2, 0x79, 0x17, 0xff, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vptest_ymm_self() {
let mut emu = emu64();
let code = [
0xc4, 0xe2, 0x7d, 0x17, 0xc0, 0xc4, 0xe2, 0x7d, 0x17, 0xdb, 0xc4, 0xe2, 0x7d, 0x17, 0xff, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vptest_xmm_all_regs() {
let mut emu = emu64();
let code = [
0xc4, 0xe2, 0x79, 0x17, 0xc1, 0xc4, 0xe2, 0x79, 0x17, 0xd4, 0xc4, 0xe2, 0x79, 0x17, 0xee, 0xc4, 0xe2, 0x79, 0x17, 0xf8, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vptest_ymm_all_regs() {
let mut emu = emu64();
let code = [
0xc4, 0xe2, 0x7d, 0x17, 0xc1, 0xc4, 0xe2, 0x7d, 0x17, 0xd4, 0xc4, 0xe2, 0x7d, 0x17, 0xee, 0xc4, 0xe2, 0x7d, 0x17, 0xf8, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vptest_xmm_mem_all_ones() {
let mut emu = emu64();
let code = [0x48, 0xb8];
let mut full_code = code.to_vec();
full_code.extend_from_slice(&ALIGNED_ADDR.to_le_bytes());
full_code.extend_from_slice(&[
0xc4, 0xe2, 0x79, 0x17, 0x00, 0xf4, ]);
emu.load_code_bytes(&full_code);
let data = vec![0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF];
emu.maps.write_bytes_slice(ALIGNED_ADDR, &data);
emu.run(None).unwrap();
}
#[test]
fn test_vptest_ymm_mem_all_ones() {
let mut emu = emu64();
let code = [0x48, 0xb8];
let mut full_code = code.to_vec();
full_code.extend_from_slice(&ALIGNED_ADDR.to_le_bytes());
full_code.extend_from_slice(&[
0xc4, 0xe2, 0x7d, 0x17, 0x00, 0xf4, ]);
emu.load_code_bytes(&full_code);
let data = vec![0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF];
emu.maps.write_bytes_slice(ALIGNED_ADDR, &data);
emu.run(None).unwrap();
}
#[test]
fn test_vptest_xmm_mem_all_zeros() {
let mut emu = emu64();
let code = [0x48, 0xb8];
let mut full_code = code.to_vec();
full_code.extend_from_slice(&ALIGNED_ADDR.to_le_bytes());
full_code.extend_from_slice(&[
0xc4, 0xe2, 0x79, 0x17, 0x00, 0xf4, ]);
emu.load_code_bytes(&full_code);
let data = vec![0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00];
emu.maps.write_bytes_slice(ALIGNED_ADDR, &data);
emu.run(None).unwrap();
}
#[test]
fn test_vptest_ymm_mem_all_zeros() {
let mut emu = emu64();
let code = [0x48, 0xb8];
let mut full_code = code.to_vec();
full_code.extend_from_slice(&ALIGNED_ADDR.to_le_bytes());
full_code.extend_from_slice(&[
0xc4, 0xe2, 0x7d, 0x17, 0x00, 0xf4, ]);
emu.load_code_bytes(&full_code);
let data = vec![0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00];
emu.maps.write_bytes_slice(ALIGNED_ADDR, &data);
emu.run(None).unwrap();
}
#[test]
fn test_vptest_xmm_mem_alternating() {
let mut emu = emu64();
let code = [0x48, 0xb8];
let mut full_code = code.to_vec();
full_code.extend_from_slice(&ALIGNED_ADDR.to_le_bytes());
full_code.extend_from_slice(&[
0xc4, 0xe2, 0x79, 0x17, 0x00, 0xf4, ]);
emu.load_code_bytes(&full_code);
let data = vec![0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55,
0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55];
emu.maps.write_bytes_slice(ALIGNED_ADDR, &data);
emu.run(None).unwrap();
}
#[test]
fn test_vptest_ymm_mem_alternating() {
let mut emu = emu64();
let code = [0x48, 0xb8];
let mut full_code = code.to_vec();
full_code.extend_from_slice(&ALIGNED_ADDR.to_le_bytes());
full_code.extend_from_slice(&[
0xc4, 0xe2, 0x7d, 0x17, 0x00, 0xf4, ]);
emu.load_code_bytes(&full_code);
let data = vec![0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55,
0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55,
0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F,
0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F];
emu.maps.write_bytes_slice(ALIGNED_ADDR, &data);
emu.run(None).unwrap();
}
#[test]
fn test_vptest_mixed_sizes() {
let mut emu = emu64();
let code = [
0xc4, 0xe2, 0x79, 0x17, 0xc1, 0xc4, 0xe2, 0x7d, 0x17, 0xd2, 0xc4, 0xe2, 0x79, 0x17, 0xe3, 0xc4, 0xe2, 0x7d, 0x17, 0xee, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vptest_xmm_consecutive_regs() {
let mut emu = emu64();
let code = [
0xc4, 0xe2, 0x79, 0x17, 0xc1, 0xc4, 0xe2, 0x79, 0x17, 0xca, 0xc4, 0xe2, 0x79, 0x17, 0xd3, 0xc4, 0xe2, 0x79, 0x17, 0xdc, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vptest_ymm_consecutive_regs() {
let mut emu = emu64();
let code = [
0xc4, 0xe2, 0x7d, 0x17, 0xc1, 0xc4, 0xe2, 0x7d, 0x17, 0xca, 0xc4, 0xe2, 0x7d, 0x17, 0xd3, 0xc4, 0xe2, 0x7d, 0x17, 0xdc, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vptest_xmm_reverse_regs() {
let mut emu = emu64();
let code = [
0xc4, 0xe2, 0x79, 0x17, 0xc1, 0xc4, 0xe2, 0x79, 0x17, 0xc8, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vptest_ymm_reverse_regs() {
let mut emu = emu64();
let code = [
0xc4, 0xe2, 0x7d, 0x17, 0xc1, 0xc4, 0xe2, 0x7d, 0x17, 0xc8, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}