use crate::*;
const ALIGNED_ADDR: u64 = 0x3000;
const ALIGNED_ADDR2: u64 = 0x3100;
#[test]
fn test_vpsraw_ymm0_ymm1_imm_0() {
let mut emu = emu64();
let code = [
0xc5, 0xf5, 0x71, 0xe1, 0x00, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vpsraw_ymm3_ymm4_imm_1() {
let mut emu = emu64();
let code = [
0xc5, 0xe5, 0x71, 0xe4, 0x01, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vpsraw_ymm6_ymm7_imm_4() {
let mut emu = emu64();
let code = [
0xc5, 0xcd, 0x71, 0xe7, 0x04, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vpsraw_ymm9_ymm10_imm_8() {
let mut emu = emu64();
let code = [
0xc4, 0x41, 0x35, 0x71, 0xe2, 0x08, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vpsraw_ymm12_ymm13_imm_15() {
let mut emu = emu64();
let code = [
0xc4, 0x41, 0x1d, 0x71, 0xe5, 0x0f, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vpsraw_ymm15_ymm0_imm_16() {
let mut emu = emu64();
let code = [
0xc4, 0xc1, 0x05, 0x71, 0xe0, 0x10, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vpsraw_ymm0_ymm1_xmm2() {
let mut emu = emu64();
let code = [
0xc5, 0xf5, 0xe1, 0xc2, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vpsraw_ymm3_ymm4_xmm5() {
let mut emu = emu64();
let code = [
0xc5, 0xdd, 0xe1, 0xdd, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vpsraw_ymm6_ymm7_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(&[
0xc5, 0x45, 0xe1, 0x30, 0xf4, ]);
emu.load_code_bytes(&full_code);
let shift_count: Vec<u8> = 3u64.to_le_bytes().to_vec();
emu.maps.write_bytes_slice(ALIGNED_ADDR, &shift_count);
emu.run(None).unwrap();
}
#[test]
fn test_vpsraw_chain_operations() {
let mut emu = emu64();
let code = [
0xc5, 0xf5, 0x71, 0xe1, 0x01, 0xc5, 0xfd, 0x71, 0xe0, 0x01, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vpsraw_negative_values() {
let mut emu = emu64();
let code = [
0xc5, 0xf5, 0x71, 0xe1, 0x01, 0xc5, 0xed, 0x71, 0xe2, 0x04, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vpsraw_positive_values() {
let mut emu = emu64();
let code = [
0xc5, 0xf5, 0x71, 0xe1, 0x01, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vpsrad_ymm0_ymm1_imm_0() {
let mut emu = emu64();
let code = [
0xc5, 0xf5, 0x72, 0xe1, 0x00, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vpsrad_ymm3_ymm4_imm_1() {
let mut emu = emu64();
let code = [
0xc5, 0xe5, 0x72, 0xe4, 0x01, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vpsrad_ymm6_ymm7_imm_8() {
let mut emu = emu64();
let code = [
0xc5, 0xcd, 0x72, 0xe7, 0x08, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vpsrad_ymm9_ymm10_imm_16() {
let mut emu = emu64();
let code = [
0xc4, 0x41, 0x35, 0x72, 0xe2, 0x10, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vpsrad_ymm12_ymm13_imm_31() {
let mut emu = emu64();
let code = [
0xc4, 0x41, 0x1d, 0x72, 0xe5, 0x1f, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vpsrad_ymm15_ymm0_imm_32() {
let mut emu = emu64();
let code = [
0xc4, 0xc1, 0x05, 0x72, 0xe0, 0x20, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vpsrad_ymm0_ymm1_xmm2() {
let mut emu = emu64();
let code = [
0xc5, 0xf5, 0xe2, 0xc2, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vpsrad_ymm3_ymm4_xmm5() {
let mut emu = emu64();
let code = [
0xc5, 0xdd, 0xe2, 0xdd, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vpsrad_ymm6_ymm7_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(&[
0xc5, 0x45, 0xe2, 0x30, 0xf4, ]);
emu.load_code_bytes(&full_code);
let shift_count: Vec<u8> = 5u64.to_le_bytes().to_vec();
emu.maps.write_bytes_slice(ALIGNED_ADDR, &shift_count);
emu.run(None).unwrap();
}
#[test]
fn test_vpsrad_chain_operations() {
let mut emu = emu64();
let code = [
0xc5, 0xf5, 0x72, 0xe1, 0x02, 0xc5, 0xfd, 0x72, 0xe0, 0x02, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vpsrad_negative_values() {
let mut emu = emu64();
let code = [
0xc5, 0xf5, 0x72, 0xe1, 0x01, 0xc5, 0xed, 0x72, 0xe2, 0x08, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vpsrad_positive_values() {
let mut emu = emu64();
let code = [
0xc5, 0xf5, 0x72, 0xe1, 0x01, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vpsraw_all_shift_amounts() {
let mut emu = emu64();
let code = [
0xc5, 0xf5, 0x71, 0xe1, 0x00, 0xc5, 0xed, 0x71, 0xe2, 0x01, 0xc5, 0xe5, 0x71, 0xe3, 0x07, 0xc5, 0xdd, 0x71, 0xe4, 0x0f, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vpsrad_all_shift_amounts() {
let mut emu = emu64();
let code = [
0xc5, 0xf5, 0x72, 0xe1, 0x00, 0xc5, 0xed, 0x72, 0xe2, 0x01, 0xc5, 0xe5, 0x72, 0xe3, 0x10, 0xc5, 0xdd, 0x72, 0xe4, 0x1f, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vpsra_mixed_sizes() {
let mut emu = emu64();
let code = [
0xc5, 0xf5, 0x71, 0xe1, 0x01, 0xc5, 0xed, 0x72, 0xe2, 0x02, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vpsraw_extended_regs() {
let mut emu = emu64();
let code = [
0xc4, 0x41, 0x3d, 0x71, 0xe0, 0x02, 0xc4, 0x41, 0x15, 0x71, 0xe5, 0x03, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vpsrad_extended_regs() {
let mut emu = emu64();
let code = [
0xc4, 0x41, 0x35, 0x72, 0xe2, 0x04, 0xc4, 0x41, 0x0d, 0x72, 0xe6, 0x05, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vpsraw_mem_large_shift_count() {
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(&[
0xc5, 0xf5, 0xe1, 0x00, 0xf4, ]);
emu.load_code_bytes(&full_code);
let shift_count: Vec<u8> = 100u64.to_le_bytes().to_vec();
emu.maps.write_bytes_slice(ALIGNED_ADDR, &shift_count);
emu.run(None).unwrap();
}
#[test]
fn test_vpsrad_mem_large_shift_count() {
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(&[
0xc5, 0xf5, 0xe2, 0x00, 0xf4, ]);
emu.load_code_bytes(&full_code);
let shift_count: Vec<u8> = 100u64.to_le_bytes().to_vec();
emu.maps.write_bytes_slice(ALIGNED_ADDR, &shift_count);
emu.run(None).unwrap();
}
#[test]
fn test_vpsraw_ymm8_ymm9_xmm10() {
let mut emu = emu64();
let code = [
0xc4, 0x41, 0x35, 0xe1, 0xc2, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vpsrad_ymm11_ymm12_xmm13() {
let mut emu = emu64();
let code = [
0xc4, 0x41, 0x1d, 0xe2, 0xdd, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vpsraw_sign_extension_negative() {
let mut emu = emu64();
let code = [
0xc5, 0xf5, 0x71, 0xe1, 0x0f, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vpsrad_sign_extension_negative() {
let mut emu = emu64();
let code = [
0xc5, 0xf5, 0x72, 0xe1, 0x1f, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vpsraw_boundary_shift() {
let mut emu = emu64();
let code = [
0xc5, 0xf5, 0x71, 0xe1, 0x0f, 0xc5, 0xed, 0x71, 0xe2, 0x10, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vpsrad_boundary_shift() {
let mut emu = emu64();
let code = [
0xc5, 0xf5, 0x72, 0xe1, 0x1f, 0xc5, 0xed, 0x72, 0xe2, 0x20, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vpsraw_ymm14_ymm15_xmm0() {
let mut emu = emu64();
let code = [
0xc4, 0xc1, 0x05, 0xe1, 0xf0, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vpsrad_ymm15_ymm14_xmm13() {
let mut emu = emu64();
let code = [
0xc4, 0xc1, 0x0d, 0xe2, 0xfd, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vpsraw_all_ones() {
let mut emu = emu64();
let code = [
0xc5, 0xf5, 0x71, 0xe1, 0x01, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vpsrad_all_ones() {
let mut emu = emu64();
let code = [
0xc5, 0xf5, 0x72, 0xe1, 0x01, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vpsraw_alternating_signs() {
let mut emu = emu64();
let code = [
0xc5, 0xf5, 0x71, 0xe1, 0x02, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vpsrad_alternating_signs() {
let mut emu = emu64();
let code = [
0xc5, 0xf5, 0x72, 0xe1, 0x02, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vpsraw_small_negative() {
let mut emu = emu64();
let code = [
0xc5, 0xf5, 0x71, 0xe1, 0x01, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vpsrad_small_negative() {
let mut emu = emu64();
let code = [
0xc5, 0xf5, 0x72, 0xe1, 0x01, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}