#[cfg(feature = "x86")]
use asm_rs::{assemble, Arch};
#[test]
fn x86_xval_nop() {
let code = assemble("nop", Arch::X86).unwrap();
assert_eq!(code, vec![0x90]);
}
#[test]
fn x86_xval_ret() {
let code = assemble("ret", Arch::X86).unwrap();
assert_eq!(code, vec![0xc3]);
}
#[test]
fn x86_xval_push_eax() {
let code = assemble("push eax", Arch::X86).unwrap();
assert_eq!(code, vec![0x50]);
}
#[test]
fn x86_xval_push_ebx() {
let code = assemble("push ebx", Arch::X86).unwrap();
assert_eq!(code, vec![0x53]);
}
#[test]
fn x86_xval_push_ecx() {
let code = assemble("push ecx", Arch::X86).unwrap();
assert_eq!(code, vec![0x51]);
}
#[test]
fn x86_xval_push_edx() {
let code = assemble("push edx", Arch::X86).unwrap();
assert_eq!(code, vec![0x52]);
}
#[test]
fn x86_xval_push_esi() {
let code = assemble("push esi", Arch::X86).unwrap();
assert_eq!(code, vec![0x56]);
}
#[test]
fn x86_xval_push_edi() {
let code = assemble("push edi", Arch::X86).unwrap();
assert_eq!(code, vec![0x57]);
}
#[test]
fn x86_xval_push_ebp() {
let code = assemble("push ebp", Arch::X86).unwrap();
assert_eq!(code, vec![0x55]);
}
#[test]
fn x86_xval_push_esp() {
let code = assemble("push esp", Arch::X86).unwrap();
assert_eq!(code, vec![0x54]);
}
#[test]
fn x86_xval_pop_eax() {
let code = assemble("pop eax", Arch::X86).unwrap();
assert_eq!(code, vec![0x58]);
}
#[test]
fn x86_xval_pop_ebx() {
let code = assemble("pop ebx", Arch::X86).unwrap();
assert_eq!(code, vec![0x5b]);
}
#[test]
fn x86_xval_pop_ecx() {
let code = assemble("pop ecx", Arch::X86).unwrap();
assert_eq!(code, vec![0x59]);
}
#[test]
fn x86_xval_pop_edx() {
let code = assemble("pop edx", Arch::X86).unwrap();
assert_eq!(code, vec![0x5a]);
}
#[test]
fn x86_xval_pop_esi() {
let code = assemble("pop esi", Arch::X86).unwrap();
assert_eq!(code, vec![0x5e]);
}
#[test]
fn x86_xval_pop_edi() {
let code = assemble("pop edi", Arch::X86).unwrap();
assert_eq!(code, vec![0x5f]);
}
#[test]
fn x86_xval_pop_ebp() {
let code = assemble("pop ebp", Arch::X86).unwrap();
assert_eq!(code, vec![0x5d]);
}
#[test]
fn x86_xval_mov_eax_imm32() {
let code = assemble("mov eax, 42", Arch::X86).unwrap();
assert_eq!(code, vec![0xb8, 0x2a, 0x00, 0x00, 0x00]);
}
#[test]
fn x86_xval_mov_ecx_0() {
let code = assemble("mov ecx, 0", Arch::X86).unwrap();
assert_eq!(code, vec![0xb9, 0x00, 0x00, 0x00, 0x00]);
}
#[test]
fn x86_xval_mov_ecx_eax() {
let code = assemble("mov ecx, eax", Arch::X86).unwrap();
assert_eq!(code, vec![0x89, 0xc1]);
}
#[test]
fn x86_xval_mov_edx_ebx() {
let code = assemble("mov edx, ebx", Arch::X86).unwrap();
assert_eq!(code, vec![0x89, 0xda]);
}
#[test]
fn x86_xval_mov_al_imm8() {
let code = assemble("mov al, 0x41", Arch::X86).unwrap();
assert_eq!(code, vec![0xb0, 0x41]);
}
#[test]
fn x86_xval_mov_ax_imm16() {
let code = assemble("mov ax, 0x1234", Arch::X86).unwrap();
assert_eq!(code, vec![0x66, 0xb8, 0x34, 0x12]);
}
#[test]
fn x86_xval_add_ecx_eax() {
let code = assemble("add ecx, eax", Arch::X86).unwrap();
assert_eq!(code, vec![0x01, 0xc1]);
}
#[test]
fn x86_xval_add_eax_imm8() {
let code = assemble("add eax, 1", Arch::X86).unwrap();
assert_eq!(code, vec![0x83, 0xc0, 0x01]);
}
#[test]
fn x86_xval_sub_eax_ebx() {
let code = assemble("sub eax, ebx", Arch::X86).unwrap();
assert_eq!(code, vec![0x29, 0xd8]);
}
#[test]
fn x86_xval_sub_esp_16() {
let code = assemble("sub esp, 16", Arch::X86).unwrap();
assert_eq!(code, vec![0x83, 0xec, 0x10]);
}
#[test]
fn x86_xval_and_edx_ecx() {
let code = assemble("and edx, ecx", Arch::X86).unwrap();
assert_eq!(code, vec![0x21, 0xca]);
}
#[test]
fn x86_xval_and_eax_0xff() {
let code = assemble("and eax, 0xff", Arch::X86).unwrap();
assert_eq!(code, vec![0x25, 0xff, 0x00, 0x00, 0x00]);
}
#[test]
fn x86_xval_or_edi_esi() {
let code = assemble("or edi, esi", Arch::X86).unwrap();
assert_eq!(code, vec![0x09, 0xf7]);
}
#[test]
fn x86_xval_or_eax_0x80() {
let code = assemble("or eax, 0x80", Arch::X86).unwrap();
assert_eq!(code, vec![0x0d, 0x80, 0x00, 0x00, 0x00]);
}
#[test]
fn x86_xval_xor_eax_eax() {
let code = assemble("xor eax, eax", Arch::X86).unwrap();
assert_eq!(code, vec![0x31, 0xc0]);
}
#[test]
fn x86_xval_xor_ecx_0xff() {
let code = assemble("xor ecx, 0xff", Arch::X86).unwrap();
assert_eq!(code, vec![0x81, 0xf1, 0xff, 0x00, 0x00, 0x00]);
}
#[test]
fn x86_xval_cmp_ecx_eax() {
let code = assemble("cmp ecx, eax", Arch::X86).unwrap();
assert_eq!(code, vec![0x39, 0xc1]);
}
#[test]
fn x86_xval_cmp_eax_0() {
let code = assemble("cmp eax, 0", Arch::X86).unwrap();
assert_eq!(code, vec![0x83, 0xf8, 0x00]);
}
#[test]
fn x86_xval_test_eax_eax() {
let code = assemble("test eax, eax", Arch::X86).unwrap();
assert_eq!(code, vec![0x85, 0xc0]);
}
#[test]
fn x86_xval_test_eax_0xff() {
let code = assemble("test eax, 0xff", Arch::X86).unwrap();
assert_eq!(code, vec![0xa9, 0xff, 0x00, 0x00, 0x00]);
}
#[test]
fn x86_xval_neg_eax() {
let code = assemble("neg eax", Arch::X86).unwrap();
assert_eq!(code, vec![0xf7, 0xd8]);
}
#[test]
fn x86_xval_not_eax() {
let code = assemble("not eax", Arch::X86).unwrap();
assert_eq!(code, vec![0xf7, 0xd0]);
}
#[test]
fn x86_xval_inc_eax() {
let code = assemble("inc eax", Arch::X86).unwrap();
assert_eq!(code, vec![0x40]);
}
#[test]
fn x86_xval_dec_eax() {
let code = assemble("dec eax", Arch::X86).unwrap();
assert_eq!(code, vec![0x48]);
}
#[test]
fn x86_xval_inc_ebx() {
let code = assemble("inc ebx", Arch::X86).unwrap();
assert_eq!(code, vec![0x43]);
}
#[test]
fn x86_xval_dec_ecx() {
let code = assemble("dec ecx", Arch::X86).unwrap();
assert_eq!(code, vec![0x49]);
}
#[test]
fn x86_xval_shl_eax_1() {
let code = assemble("shl eax, 1", Arch::X86).unwrap();
assert_eq!(code, vec![0xd1, 0xe0]);
}
#[test]
fn x86_xval_shr_eax_1() {
let code = assemble("shr eax, 1", Arch::X86).unwrap();
assert_eq!(code, vec![0xd1, 0xe8]);
}
#[test]
fn x86_xval_sar_eax_1() {
let code = assemble("sar eax, 1", Arch::X86).unwrap();
assert_eq!(code, vec![0xd1, 0xf8]);
}
#[test]
fn x86_xval_shl_eax_cl() {
let code = assemble("shl eax, cl", Arch::X86).unwrap();
assert_eq!(code, vec![0xd3, 0xe0]);
}
#[test]
fn x86_xval_shr_eax_cl() {
let code = assemble("shr eax, cl", Arch::X86).unwrap();
assert_eq!(code, vec![0xd3, 0xe8]);
}
#[test]
fn x86_xval_sar_eax_cl() {
let code = assemble("sar eax, cl", Arch::X86).unwrap();
assert_eq!(code, vec![0xd3, 0xf8]);
}
#[test]
fn x86_xval_imul_eax_ecx() {
let code = assemble("imul eax, ecx", Arch::X86).unwrap();
assert_eq!(code, vec![0x0f, 0xaf, 0xc1]);
}
#[test]
fn x86_xval_imul_eax_ecx_10() {
let code = assemble("imul eax, ecx, 10", Arch::X86).unwrap();
assert_eq!(code, vec![0x6b, 0xc1, 0x0a]);
}
#[test]
fn x86_xval_movzx_eax_al() {
let code = assemble("movzx eax, al", Arch::X86).unwrap();
assert_eq!(code, vec![0x0f, 0xb6, 0xc0]);
}
#[test]
fn x86_xval_movzx_edx_cl() {
let code = assemble("movzx edx, cl", Arch::X86).unwrap();
assert_eq!(code, vec![0x0f, 0xb6, 0xd1]);
}
#[test]
fn x86_xval_movzx_eax_ax() {
let code = assemble("movzx eax, ax", Arch::X86).unwrap();
assert_eq!(code, vec![0x0f, 0xb7, 0xc0]);
}
#[test]
fn x86_xval_movzx_edx_cx() {
let code = assemble("movzx edx, cx", Arch::X86).unwrap();
assert_eq!(code, vec![0x0f, 0xb7, 0xd1]);
}
#[test]
fn x86_xval_movsx_eax_al() {
let code = assemble("movsx eax, al", Arch::X86).unwrap();
assert_eq!(code, vec![0x0f, 0xbe, 0xc0]);
}
#[test]
fn x86_xval_movsx_edx_cl() {
let code = assemble("movsx edx, cl", Arch::X86).unwrap();
assert_eq!(code, vec![0x0f, 0xbe, 0xd1]);
}
#[test]
fn x86_xval_movsx_eax_ax() {
let code = assemble("movsx eax, ax", Arch::X86).unwrap();
assert_eq!(code, vec![0x0f, 0xbf, 0xc0]);
}
#[test]
fn x86_xval_movsx_edx_cx() {
let code = assemble("movsx edx, cx", Arch::X86).unwrap();
assert_eq!(code, vec![0x0f, 0xbf, 0xd1]);
}
#[test]
fn x86_xval_lea_sib() {
let code = assemble("lea edx, [eax+ecx*4]", Arch::X86).unwrap();
assert_eq!(code, vec![0x8d, 0x14, 0x88]);
}
#[test]
fn x86_xval_lea_ebp_disp8() {
let code = assemble("lea eax, [ebp+8]", Arch::X86).unwrap();
assert_eq!(code, vec![0x8d, 0x45, 0x08]);
}
#[test]
fn x86_xval_cdq() {
let code = assemble("cdq", Arch::X86).unwrap();
assert_eq!(code, vec![0x99]);
}
#[test]
fn x86_xval_xchg_eax_ebx() {
let code = assemble("xchg eax, ebx", Arch::X86).unwrap();
assert_eq!(code, vec![0x93]);
}
#[test]
fn x86_xval_bswap_eax() {
let code = assemble("bswap eax", Arch::X86).unwrap();
assert_eq!(code, vec![0x0f, 0xc8]);
}
#[test]
fn x86_xval_bswap_ecx() {
let code = assemble("bswap ecx", Arch::X86).unwrap();
assert_eq!(code, vec![0x0f, 0xc9]);
}
#[test]
fn x86_xval_int_0x80() {
let code = assemble("int 0x80", Arch::X86).unwrap();
assert_eq!(code, vec![0xcd, 0x80]);
}
#[test]
fn x86_xval_int3() {
let code = assemble("int 3", Arch::X86).unwrap();
assert_eq!(code, vec![0xcc]);
}
#[test]
fn x86_xval_cmovne_eax_ecx() {
let code = assemble("cmovne eax, ecx", Arch::X86).unwrap();
assert_eq!(code, vec![0x0f, 0x45, 0xc1]);
}
#[test]
fn x86_xval_cmove_ebx_edx() {
let code = assemble("cmove ebx, edx", Arch::X86).unwrap();
assert_eq!(code, vec![0x0f, 0x44, 0xda]);
}
#[test]
fn x86_xval_cmovb_edi_esi() {
let code = assemble("cmovb edi, esi", Arch::X86).unwrap();
assert_eq!(code, vec![0x0f, 0x42, 0xfe]);
}
#[test]
fn x86_xval_cmovae_esi_edi() {
let code = assemble("cmovae esi, edi", Arch::X86).unwrap();
assert_eq!(code, vec![0x0f, 0x43, 0xf7]);
}
#[test]
fn x86_xval_sete_al() {
let code = assemble("sete al", Arch::X86).unwrap();
assert_eq!(code, vec![0x0f, 0x94, 0xc0]);
}
#[test]
fn x86_xval_setne_cl() {
let code = assemble("setne cl", Arch::X86).unwrap();
assert_eq!(code, vec![0x0f, 0x95, 0xc1]);
}
#[test]
fn x86_xval_setl_dl() {
let code = assemble("setl dl", Arch::X86).unwrap();
assert_eq!(code, vec![0x0f, 0x9c, 0xc2]);
}
#[test]
fn x86_xval_setg_bl() {
let code = assemble("setg bl", Arch::X86).unwrap();
assert_eq!(code, vec![0x0f, 0x9f, 0xc3]);
}
#[test]
fn x86_xval_rol_al_1() {
let code = assemble("rol al, 1", Arch::X86).unwrap();
assert_eq!(code, vec![0xd0, 0xc0]);
}
#[test]
fn x86_xval_ror_al_1() {
let code = assemble("ror al, 1", Arch::X86).unwrap();
assert_eq!(code, vec![0xd0, 0xc8]);
}
#[test]
fn x86_xval_rol_eax_4() {
let code = assemble("rol eax, 4", Arch::X86).unwrap();
assert_eq!(code, vec![0xc1, 0xc0, 0x04]);
}
#[test]
fn x86_xval_ror_eax_4() {
let code = assemble("ror eax, 4", Arch::X86).unwrap();
assert_eq!(code, vec![0xc1, 0xc8, 0x04]);
}
#[test]
fn x86_xval_bt_eax_7() {
let code = assemble("bt eax, 7", Arch::X86).unwrap();
assert_eq!(code, vec![0x0f, 0xba, 0xe0, 0x07]);
}
#[test]
fn x86_xval_bts_eax_0() {
let code = assemble("bts eax, 0", Arch::X86).unwrap();
assert_eq!(code, vec![0x0f, 0xba, 0xe8, 0x00]);
}
#[test]
fn x86_xval_btr_eax_7() {
let code = assemble("btr eax, 7", Arch::X86).unwrap();
assert_eq!(code, vec![0x0f, 0xba, 0xf0, 0x07]);
}
#[test]
fn x86_xval_bsf_eax_ecx() {
let code = assemble("bsf eax, ecx", Arch::X86).unwrap();
assert_eq!(code, vec![0x0f, 0xbc, 0xc1]);
}
#[test]
fn x86_xval_bsr_ebx_edx() {
let code = assemble("bsr ebx, edx", Arch::X86).unwrap();
assert_eq!(code, vec![0x0f, 0xbd, 0xda]);
}
#[test]
fn x86_xval_clc() {
let code = assemble("clc", Arch::X86).unwrap();
assert_eq!(code, vec![0xf8]);
}
#[test]
fn x86_xval_stc() {
let code = assemble("stc", Arch::X86).unwrap();
assert_eq!(code, vec![0xf9]);
}
#[test]
fn x86_xval_cld() {
let code = assemble("cld", Arch::X86).unwrap();
assert_eq!(code, vec![0xfc]);
}
#[test]
fn x86_xval_std() {
let code = assemble("std", Arch::X86).unwrap();
assert_eq!(code, vec![0xfd]);
}
#[test]
fn x86_xval_cpuid() {
let code = assemble("cpuid", Arch::X86).unwrap();
assert_eq!(code, vec![0x0f, 0xa2]);
}
#[test]
fn x86_xval_rdtsc() {
let code = assemble("rdtsc", Arch::X86).unwrap();
assert_eq!(code, vec![0x0f, 0x31]);
}
#[test]
fn x86_xval_mov_ecx_mem_eax() {
let code = assemble("mov ecx, [eax]", Arch::X86).unwrap();
assert_eq!(code, vec![0x8b, 0x08]);
}
#[test]
fn x86_xval_mov_mem_ebx_edx() {
let code = assemble("mov [ebx], edx", Arch::X86).unwrap();
assert_eq!(code, vec![0x89, 0x13]);
}
#[test]
fn x86_xval_mov_eax_esp_disp8() {
let code = assemble("mov eax, [esp+4]", Arch::X86).unwrap();
assert_eq!(code, vec![0x8b, 0x44, 0x24, 0x04]);
}
#[test]
fn x86_xval_mov_ebp_disp8_ebx() {
let code = assemble("mov [ebp+8], ebx", Arch::X86).unwrap();
assert_eq!(code, vec![0x89, 0x5d, 0x08]);
}
#[test]
fn x86_xval_cbw() {
let code = assemble("cbw", Arch::X86).unwrap();
assert_eq!(code, vec![0x66, 0x98]);
}
#[test]
fn x86_xval_cwde() {
let code = assemble("cwde", Arch::X86).unwrap();
assert_eq!(code, vec![0x98]);
}
#[test]
fn x86_xval_pushf() {
let code = assemble("pushf", Arch::X86).unwrap();
assert_eq!(code, vec![0x9c]);
}
#[test]
fn x86_xval_popf() {
let code = assemble("popf", Arch::X86).unwrap();
assert_eq!(code, vec![0x9d]);
}
#[test]
fn x86_xval_leave() {
let code = assemble("leave", Arch::X86).unwrap();
assert_eq!(code, vec![0xc9]);
}
#[test]
fn x86_xval_stosb() {
let code = assemble("stosb", Arch::X86).unwrap();
assert_eq!(code, vec![0xaa]);
}
#[test]
fn x86_xval_stosw() {
let code = assemble("stosw", Arch::X86).unwrap();
assert_eq!(code, vec![0x66, 0xab]);
}
#[test]
fn x86_xval_stosd() {
let code = assemble("stosd", Arch::X86).unwrap();
assert_eq!(code, vec![0xab]);
}
#[test]
fn x86_xval_lodsb() {
let code = assemble("lodsb", Arch::X86).unwrap();
assert_eq!(code, vec![0xac]);
}
#[test]
fn x86_xval_lodsw() {
let code = assemble("lodsw", Arch::X86).unwrap();
assert_eq!(code, vec![0x66, 0xad]);
}
#[test]
fn x86_xval_lodsd() {
let code = assemble("lodsd", Arch::X86).unwrap();
assert_eq!(code, vec![0xad]);
}
#[test]
fn x86_xval_movsb() {
let code = assemble("movsb", Arch::X86).unwrap();
assert_eq!(code, vec![0xa4]);
}
#[test]
fn x86_xval_movsw() {
let code = assemble("movsw", Arch::X86).unwrap();
assert_eq!(code, vec![0x66, 0xa5]);
}
#[test]
fn x86_xval_movsd_string() {
let code = assemble("movsd", Arch::X86).unwrap();
assert_eq!(code, vec![0xa5]);
}
#[test]
fn x86_xval_scasb() {
let code = assemble("scasb", Arch::X86).unwrap();
assert_eq!(code, vec![0xae]);
}
#[test]
fn x86_xval_rep_stosb() {
let code = assemble("rep stosb", Arch::X86).unwrap();
assert_eq!(code, vec![0xf3, 0xaa]);
}
#[test]
fn x86_xval_rep_movsb() {
let code = assemble("rep movsb", Arch::X86).unwrap();
assert_eq!(code, vec![0xf3, 0xa4]);
}