use crate::*;
const ALIGNED_ADDR: u64 = 0x3000;
#[test]
fn test_vextracti128_xmm0_ymm1_lower() {
let mut emu = emu64();
let code = [
0xc4, 0xe3, 0x7d, 0x39, 0xc8, 0x00, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vextracti128_xmm2_ymm3_lower() {
let mut emu = emu64();
let code = [
0xc4, 0xe3, 0x7d, 0x39, 0xda, 0x00, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vextracti128_xmm4_ymm5_lower() {
let mut emu = emu64();
let code = [
0xc4, 0xe3, 0x7d, 0x39, 0xec, 0x00, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vextracti128_xmm6_ymm7_lower() {
let mut emu = emu64();
let code = [
0xc4, 0xe3, 0x7d, 0x39, 0xfe, 0x00, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vextracti128_xmm0_ymm1_upper() {
let mut emu = emu64();
let code = [
0xc4, 0xe3, 0x7d, 0x39, 0xc8, 0x01, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vextracti128_xmm2_ymm3_upper() {
let mut emu = emu64();
let code = [
0xc4, 0xe3, 0x7d, 0x39, 0xda, 0x01, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vextracti128_xmm4_ymm5_upper() {
let mut emu = emu64();
let code = [
0xc4, 0xe3, 0x7d, 0x39, 0xec, 0x01, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vextracti128_xmm6_ymm7_upper() {
let mut emu = emu64();
let code = [
0xc4, 0xe3, 0x7d, 0x39, 0xfe, 0x01, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vextracti128_xmm8_ymm9_lower() {
let mut emu = emu64();
let code = [
0xc4, 0x43, 0x7d, 0x39, 0xc8, 0x00, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vextracti128_xmm10_ymm11_upper() {
let mut emu = emu64();
let code = [
0xc4, 0x43, 0x7d, 0x39, 0xda, 0x01, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vextracti128_xmm12_ymm13_lower() {
let mut emu = emu64();
let code = [
0xc4, 0x43, 0x7d, 0x39, 0xec, 0x00, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vextracti128_xmm14_ymm15_upper() {
let mut emu = emu64();
let code = [
0xc4, 0x43, 0x7d, 0x39, 0xfe, 0x01, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vextracti128_xmm0_ymm8_lower() {
let mut emu = emu64();
let code = [
0xc4, 0xc3, 0x7d, 0x39, 0xc0, 0x00, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vextracti128_xmm0_ymm15_upper() {
let mut emu = emu64();
let code = [
0xc4, 0xc3, 0x7d, 0x39, 0xf8, 0x01, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vextracti128_xmm15_ymm0_lower() {
let mut emu = emu64();
let code = [
0xc4, 0x63, 0x7d, 0x39, 0xc7, 0x00, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vextracti128_xmm15_ymm8_upper() {
let mut emu = emu64();
let code = [
0xc4, 0x43, 0x7d, 0x39, 0xc7, 0x01, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vextracti128_mem_ymm1_lower() {
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, 0xe3, 0x7d, 0x39, 0x08, 0x00, 0xf4, ]);
emu.load_code_bytes(&full_code);
emu.maps.write_bytes_slice(ALIGNED_ADDR, &[0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]);
emu.run(None).unwrap();
}
#[test]
fn test_vextracti128_mem_ymm2_lower() {
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, 0xe3, 0x7d, 0x39, 0x10, 0x00, 0xf4, ]);
emu.load_code_bytes(&full_code);
emu.maps.write_bytes_slice(ALIGNED_ADDR, &[0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF]);
emu.run(None).unwrap();
}
#[test]
fn test_vextracti128_mem_ymm3_lower() {
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, 0xe3, 0x7d, 0x39, 0x18, 0x00, 0xf4, ]);
emu.load_code_bytes(&full_code);
emu.maps.write_bytes_slice(ALIGNED_ADDR, &[0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA]);
emu.run(None).unwrap();
}
#[test]
fn test_vextracti128_mem_ymm1_upper() {
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, 0xe3, 0x7d, 0x39, 0x08, 0x01, 0xf4, ]);
emu.load_code_bytes(&full_code);
emu.maps.write_bytes_slice(ALIGNED_ADDR, &[0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]);
emu.run(None).unwrap();
}
#[test]
fn test_vextracti128_mem_ymm4_upper() {
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, 0xe3, 0x7d, 0x39, 0x20, 0x01, 0xf4, ]);
emu.load_code_bytes(&full_code);
emu.maps.write_bytes_slice(ALIGNED_ADDR, &[0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55]);
emu.run(None).unwrap();
}
#[test]
fn test_vextracti128_mem_ymm7_upper() {
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, 0xe3, 0x7d, 0x39, 0x38, 0x01, 0xf4, ]);
emu.load_code_bytes(&full_code);
emu.maps.write_bytes_slice(ALIGNED_ADDR, &[0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC]);
emu.run(None).unwrap();
}
#[test]
fn test_vextracti128_mem_ymm8_lower() {
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, 0x63, 0x7d, 0x39, 0x00, 0x00, 0xf4, ]);
emu.load_code_bytes(&full_code);
emu.maps.write_bytes_slice(ALIGNED_ADDR, &[0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]);
emu.run(None).unwrap();
}
#[test]
fn test_vextracti128_mem_ymm15_upper() {
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, 0x63, 0x7d, 0x39, 0x38, 0x01, 0xf4, ]);
emu.load_code_bytes(&full_code);
emu.maps.write_bytes_slice(ALIGNED_ADDR, &[0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF]);
emu.run(None).unwrap();
}
#[test]
fn test_vextracti128_xmm0_ymm1_imm_0x02() {
let mut emu = emu64();
let code = [
0xc4, 0xe3, 0x7d, 0x39, 0xc8, 0x02, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vextracti128_xmm0_ymm1_imm_0x03() {
let mut emu = emu64();
let code = [
0xc4, 0xe3, 0x7d, 0x39, 0xc8, 0x03, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vextracti128_xmm0_ymm1_imm_0xFF() {
let mut emu = emu64();
let code = [
0xc4, 0xe3, 0x7d, 0x39, 0xc8, 0xff, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vextracti128_xmm0_ymm1_imm_0xFE() {
let mut emu = emu64();
let code = [
0xc4, 0xe3, 0x7d, 0x39, 0xc8, 0xfe, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vextracti128_chain_both_lanes() {
let mut emu = emu64();
let code = [
0xc4, 0xe3, 0x7d, 0x39, 0xc8, 0x00, 0xc4, 0xe3, 0x7d, 0x39, 0xd1, 0x01, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vextracti128_sequential_extracts() {
let mut emu = emu64();
let code = [
0xc4, 0xe3, 0x7d, 0x39, 0xc8, 0x00, 0xc4, 0xe3, 0x7d, 0x39, 0xda, 0x00, 0xc4, 0xe3, 0x7d, 0x39, 0xec, 0x01, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vextracti128_xmm0_ymm0_lower() {
let mut emu = emu64();
let code = [
0xc4, 0xe3, 0x7d, 0x39, 0xc0, 0x00, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vextracti128_xmm5_ymm5_upper() {
let mut emu = emu64();
let code = [
0xc4, 0xe3, 0x7d, 0x39, 0xed, 0x01, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vextracti128_xmm15_ymm15_lower() {
let mut emu = emu64();
let code = [
0xc4, 0x43, 0x7d, 0x39, 0xff, 0x00, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vextracti128_mem_unaligned_lower() {
let mut emu = emu64();
let code = [0x48, 0xb8];
let mut full_code = code.to_vec();
full_code.extend_from_slice(&(ALIGNED_ADDR + 1).to_le_bytes());
full_code.extend_from_slice(&[
0xc4, 0xe3, 0x7d, 0x39, 0x08, 0x00, 0xf4, ]);
emu.load_code_bytes(&full_code);
emu.maps.write_bytes_slice(ALIGNED_ADDR, &[0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]);
emu.run(None).unwrap();
}
#[test]
fn test_vextracti128_mem_unaligned_upper() {
let mut emu = emu64();
let code = [0x48, 0xb8];
let mut full_code = code.to_vec();
full_code.extend_from_slice(&(ALIGNED_ADDR + 1).to_le_bytes());
full_code.extend_from_slice(&[
0xc4, 0xe3, 0x7d, 0x39, 0x10, 0x01, 0xf4, ]);
emu.load_code_bytes(&full_code);
emu.maps.write_bytes_slice(ALIGNED_ADDR, &[0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF]);
emu.run(None).unwrap();
}
#[test]
fn test_vextracti128_xmm9_ymm10_lower() {
let mut emu = emu64();
let code = [
0xc4, 0x43, 0x7d, 0x39, 0xd1, 0x00, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vextracti128_xmm11_ymm12_upper() {
let mut emu = emu64();
let code = [
0xc4, 0x43, 0x7d, 0x39, 0xe3, 0x01, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_vextracti128_xmm13_ymm14_lower() {
let mut emu = emu64();
let code = [
0xc4, 0x43, 0x7d, 0x39, 0xf5, 0x00, 0xf4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}