ppc750cl/disasm/tests/test_altivec.rs

822 lines
15 KiB
Rust

use powerpc::{Extension, Extensions, Ins};
const EXTENSIONS: Extensions = Extensions::from_extension(Extension::AltiVec);
macro_rules! assert_asm {
($ins:ident, $disasm:literal) => {{
assert_eq!(format!("{}", $ins.simplified()), $disasm)
}};
($code:literal, $disasm:literal) => {{
let ins = Ins::new($code, EXTENSIONS);
assert_eq!(format!("{}", ins.simplified()), $disasm)
}};
}
#[test]
fn test_vec_dss() {
assert_asm!(0x7C60066C, "dss 3");
assert_asm!(0x7E00066C, "dssall");
}
#[test]
fn test_vec_dst() {
assert_asm!(0x7C6742AC, "dst r7, r8, 3");
assert_asm!(0x7E232AAC, "dstt r3, r5, 1");
}
#[test]
fn test_vec_dstst() {
assert_asm!(0x7C44FAEC, "dstst r4, r31, 2");
assert_asm!(0x7E63DAEC, "dststt r3, r27, 3");
}
#[test]
fn test_vec_lvebx() {
assert_asm!(0x7C64380E, "lvebx v3, r4, r7");
}
#[test]
fn test_vec_lvehx() {
assert_asm!(0x7CA8F84E, "lvehx v5, r8, r31");
}
#[test]
fn test_vec_lvewx() {
assert_asm!(0x7D09508E, "lvewx v8, r9, r10");
}
#[test]
fn test_vec_lvsl() {
assert_asm!(0x7CA6480C, "lvsl v5, r6, r9");
}
#[test]
fn test_vec_lvsr() {
assert_asm!(0x7C60284C, "lvsr v3, r0, r5");
}
#[test]
fn test_vec_lvx() {
assert_asm!(0x7CF2E8CE, "lvx v7, r18, r29");
}
#[test]
fn test_vec_lvxl() {
assert_asm!(0x7D17FACE, "lvxl v8, r23, r31");
}
#[test]
fn test_vec_mfvscr() {
assert_asm!(0x13E00604, "mfvscr v31");
}
#[test]
fn test_vec_mtvscr() {
assert_asm!(0x1000CE44, "mtvscr v25");
}
#[test]
fn test_vec_stvebx() {
assert_asm!(0x7CE3210E, "stvebx v7, r3, r4");
}
#[test]
fn test_vec_stvehx() {
assert_asm!(0x7F25514E, "stvehx v25, r5, r10");
}
#[test]
fn test_vec_stvewx() {
assert_asm!(0x7E08498E, "stvewx v16, r8, r9");
}
#[test]
fn test_vec_stvx() {
assert_asm!(0x7FE039CE, "stvx v31, r0, r7");
}
#[test]
fn test_vec_stvxl() {
assert_asm!(0x7E8EF3CE, "stvxl v20, r14, r30");
}
#[test]
fn test_vec_vaddcuw() {
assert_asm!(0x10A63980, "vaddcuw v5, v6, v7");
}
#[test]
fn test_vec_vaddfp() {
assert_asm!(0x13BEF80A, "vaddfp v29, v30, v31");
}
#[test]
fn test_vec_vaddsbs() {
assert_asm!(0x10035300, "vaddsbs v0, v3, v10");
}
#[test]
fn test_vec_vaddsws() {
assert_asm!(0x11043B80, "vaddsws v8, v4, v7");
}
#[test]
fn test_vec_vaddubm() {
assert_asm!(0x100CE000, "vaddubm v0, v12, v28");
}
#[test]
fn test_vec_vaddubs() {
assert_asm!(0x10AACA00, "vaddubs v5, v10, v25");
}
#[test]
fn test_vec_vadduhm() {
assert_asm!(0x1112E040, "vadduhm v8, v18, v28");
}
#[test]
fn test_vec_vadduhs() {
assert_asm!(0x1071EA40, "vadduhs v3, v17, v29");
}
#[test]
fn test_vec_vadduwm() {
assert_asm!(0x10D6F080, "vadduwm v6, v22, v30");
}
#[test]
fn test_vec_vadduws() {
assert_asm!(0x1109B280, "vadduws v8, v9, v22");
}
#[test]
fn test_vec_vand() {
assert_asm!(0x1156BC04, "vand v10, v22, v23");
}
#[test]
fn test_vec_vandc() {
assert_asm!(0x10F4F444, "vandc v7, v20, v30");
}
#[test]
fn test_vec_vavgsb() {
assert_asm!(0x10BC1D02, "vavgsb v5, v28, v3");
}
#[test]
fn test_vec_vavgsh() {
assert_asm!(0x106DBD42, "vavgsh v3, v13, v23");
}
#[test]
fn test_vec_vavgsw() {
assert_asm!(0x112CAD82, "vavgsw v9, v12, v21");
}
#[test]
fn test_vec_vavgub() {
assert_asm!(0x100FF402, "vavgub v0, v15, v30");
}
#[test]
fn test_vec_vavguh() {
assert_asm!(0x108EC442, "vavguh v4, v14, v24");
}
#[test]
fn test_vec_vavguw() {
assert_asm!(0x10674482, "vavguw v3, v7, v8");
}
#[test]
fn test_vec_vcfsx() {
assert_asm!(0x101D534A, "vcfsx v0, v10, 0x1d");
}
#[test]
fn test_vec_vcfux() {
assert_asm!(0x10B03B0A, "vcfux v5, v7, 0x10");
}
#[test]
fn test_vec_vcmpbfp() {
assert_asm!(0x106963C6, "vcmpbfp v3, v9, v12");
assert_asm!(0x10E84FC6, "vcmpbfp. v7, v8, v9");
}
#[test]
fn test_vec_vcmpeqfp() {
assert_asm!(0x108640C6, "vcmpeqfp v4, v6, v8");
assert_asm!(0x10A304C6, "vcmpeqfp. v5, v3, v0");
}
#[test]
fn test_vec_vcmpequb() {
assert_asm!(0x1011D806, "vcmpequb v0, v17, v27");
assert_asm!(0x10649C06, "vcmpequb. v3, v4, v19");
}
#[test]
fn test_vec_vcmpequh() {
assert_asm!(0x10A86046, "vcmpequh v5, v8, v12");
assert_asm!(0x10E60446, "vcmpequh. v7, v6, v0");
}
#[test]
fn test_vec_vcmpequw() {
assert_asm!(0x10664086, "vcmpequw v3, v6, v8");
assert_asm!(0x10A85486, "vcmpequw. v5, v8, v10");
}
#[test]
fn test_vec_vcmpgefp() {
assert_asm!(0x100329C6, "vcmpgefp v0, v3, v5");
assert_asm!(0x108545C6, "vcmpgefp. v4, v5, v8");
}
#[test]
fn test_vec_vcmpgtfp() {
assert_asm!(0x10A0CAC6, "vcmpgtfp v5, v0, v25");
assert_asm!(0x10E3A6C6, "vcmpgtfp. v7, v3, v20");
}
#[test]
fn test_vec_vcmpgtsb() {
assert_asm!(0x10602306, "vcmpgtsb v3, v0, v4");
assert_asm!(0x10E88706, "vcmpgtsb. v7, v8, v16");
}
#[test]
fn test_vec_vcmpgtsh() {
assert_asm!(0x10A69B46, "vcmpgtsh v5, v6, v19");
assert_asm!(0x1192C746, "vcmpgtsh. v12, v18, v24");
}
#[test]
fn test_vec_vcmpgtsw() {
assert_asm!(0x1140F386, "vcmpgtsw v10, v0, v30");
assert_asm!(0x1297DF86, "vcmpgtsw. v20, v23, v27");
}
#[test]
fn test_vec_vcmpgtub() {
assert_asm!(0x10A88206, "vcmpgtub v5, v8, v16");
assert_asm!(0x13CAA606, "vcmpgtub. v30, v10, v20");
}
#[test]
fn test_vec_vcmpgtuh() {
assert_asm!(0x101BFA46, "vcmpgtuh v0, v27, v31");
assert_asm!(0x10853646, "vcmpgtuh. v4, v5, v6");
}
#[test]
fn test_vec_vcmpgtuw() {
assert_asm!(0x1070D286, "vcmpgtuw v3, v16, v26");
assert_asm!(0x10FAFE86, "vcmpgtuw. v7, v26, v31");
}
#[test]
fn test_vec_vctsxs() {
assert_asm!(0x10743BCA, "vctsxs v3, v7, 0x14");
}
#[test]
fn test_vec_vctuxs() {
assert_asm!(0x10AB638A, "vctuxs v5, v12, 0xb");
}
#[test]
fn test_vec_vexptefp() {
assert_asm!(0x10E0518A, "vexptefp v7, v10");
}
#[test]
fn test_vec_vlogefp() {
assert_asm!(0x100031CA, "vlogefp v0, v6");
}
#[test]
fn test_vec_vmaddfp() {
assert_asm!(0x1003396E, "vmaddfp v0, v3, v5, v7");
}
#[test]
fn test_vec_vmaxfp() {
assert_asm!(0x10C84C0A, "vmaxfp v6, v8, v9");
}
#[test]
fn test_vec_vmaxsb() {
assert_asm!(0x100AB102, "vmaxsb v0, v10, v22");
}
#[test]
fn test_vec_vmaxsh() {
assert_asm!(0x1298E142, "vmaxsh v20, v24, v28");
}
#[test]
fn test_vec_vmaxsw() {
assert_asm!(0x13DF6182, "vmaxsw v30, v31, v12");
}
#[test]
fn test_vec_vmaxub() {
assert_asm!(0x1198F002, "vmaxub v12, v24, v30");
}
#[test]
fn test_vec_vmaxuh() {
assert_asm!(0x1236D842, "vmaxuh v17, v22, v27");
}
#[test]
fn test_vec_vmaxuw() {
assert_asm!(0x114CC082, "vmaxuw v10, v12, v24");
}
#[test]
fn test_vec_vmhaddshs() {
assert_asm!(0x10A63A20, "vmhaddshs v5, v6, v7, v8");
}
#[test]
fn test_vec_vmhraddshs() {
assert_asm!(0x112A63A1, "vmhraddshs v9, v10, v12, v14");
}
#[test]
fn test_vec_vminfp() {
assert_asm!(0x106AAC4A, "vminfp v3, v10, v21");
}
#[test]
fn test_vec_vminsb() {
assert_asm!(0x10643B02, "vminsb v3, v4, v7");
}
#[test]
fn test_vec_vminsh() {
assert_asm!(0x10E9B342, "vminsh v7, v9, v22");
}
#[test]
fn test_vec_vminsw() {
assert_asm!(0x118F9382, "vminsw v12, v15, v18");
}
#[test]
fn test_vec_vminub() {
assert_asm!(0x108ED202, "vminub v4, v14, v26");
}
#[test]
fn test_vec_vminuh() {
assert_asm!(0x11F19A42, "vminuh v15, v17, v19");
}
#[test]
fn test_vec_vminuw() {
assert_asm!(0x1254F282, "vminuw v18, v20, v30");
}
#[test]
fn test_vec_vmladduhm() {
assert_asm!(0x10608762, "vmladduhm v3, v0, v16, v29");
}
#[test]
fn test_vec_vmrghb() {
assert_asm!(0x10F4A80C, "vmrghb v7, v20, v21");
}
#[test]
fn test_vec_vmrghh() {
assert_asm!(0x110AC84C, "vmrghh v8, v10, v25");
}
#[test]
fn test_vec_vmrghw() {
assert_asm!(0x1198E08C, "vmrghw v12, v24, v28");
}
#[test]
fn test_vec_vmrglb() {
assert_asm!(0x1299F10C, "vmrglb v20, v25, v30");
}
#[test]
fn test_vec_vmrglh() {
assert_asm!(0x131CF94C, "vmrglh v24, v28, v31");
}
#[test]
fn test_vec_vmrglw() {
assert_asm!(0x13DF018C, "vmrglw v30, v31, v0");
}
#[test]
fn test_vec_vmsummbm() {
assert_asm!(0x10044325, "vmsummbm v0, v4, v8, v12");
}
#[test]
fn test_vec_vmsumshm() {
assert_asm!(0x1114DFE8, "vmsumshm v8, v20, v27, v31");
}
#[test]
fn test_vec_vmsumshs() {
assert_asm!(0x1150ADE9, "vmsumshs v10, v16, v21, v23");
}
#[test]
fn test_vec_vmsumubm() {
assert_asm!(0x1198D7A4, "vmsumubm v12, v24, v26, v30");
}
#[test]
fn test_vec_vmsumuhm() {
assert_asm!(0x13C503E6, "vmsumuhm v30, v5, v0, v15");
}
#[test]
fn test_vec_vmsumuhs() {
assert_asm!(0x10032167, "vmsumuhs v0, v3, v4, v5");
}
#[test]
fn test_vec_vmulesb() {
assert_asm!(0x110EC308, "vmulesb v8, v14, v24");
}
#[test]
fn test_vec_vmulesh() {
assert_asm!(0x10602B48, "vmulesh v3, v0, v5");
}
#[test]
fn test_vec_vmuleub() {
assert_asm!(0x10076208, "vmuleub v0, v7, v12");
}
#[test]
fn test_vec_vmuleuh() {
assert_asm!(0x1200FA48, "vmuleuh v16, v0, v31");
}
#[test]
fn test_vec_vmulosb() {
assert_asm!(0x11E01908, "vmulosb v15, v0, v3");
}
#[test]
fn test_vec_vmulosh() {
assert_asm!(0x10685148, "vmulosh v3, v8, v10");
}
#[test]
fn test_vec_vmuloub() {
assert_asm!(0x10854008, "vmuloub v4, v5, v8");
}
#[test]
fn test_vec_vmulouh() {
assert_asm!(0x10A70048, "vmulouh v5, v7, v0");
}
#[test]
fn test_vec_vnmsubfp() {
assert_asm!(0x1060F42F, "vnmsubfp v3, v0, v16, v30");
}
#[test]
fn test_vec_vnor() {
assert_asm!(0x10605504, "vnor v3, v0, v10");
assert_asm!(0x10884504, "vnot v4, v8");
}
#[test]
fn test_vec_vor() {
assert_asm!(0x100D7C84, "vor v0, v13, v15");
assert_asm!(0x1077BC84, "vmr v3, v23");
}
#[test]
fn test_vec_vperm() {
assert_asm!(0x10a5302b, "vperm v5, v5, v6, v0");
}
#[test]
fn test_vec_vpkpx() {
assert_asm!(0x10AFE30E, "vpkpx v5, v15, v28");
}
#[test]
fn test_vec_vpkshss() {
assert_asm!(0x1006498E, "vpkshss v0, v6, v9");
}
#[test]
fn test_vec_vpkshus() {
assert_asm!(0x1220990E, "vpkshus v17, v0, v19");
}
#[test]
fn test_vec_vpkswss() {
assert_asm!(0x1253A1CE, "vpkswss v18, v19, v20");
}
#[test]
fn test_vec_vpkswus() {
assert_asm!(0x128AF14E, "vpkswus v20, v10, v30");
}
#[test]
fn test_vec_vpkuhum() {
assert_asm!(0x10BBA00E, "vpkuhum v5, v27, v20");
}
#[test]
fn test_vec_vpkuhus() {
assert_asm!(0x11AE788E, "vpkuhus v13, v14, v15");
}
#[test]
fn test_vec_vpkuwum() {
assert_asm!(0x114B604E, "vpkuwum v10, v11, v12");
}
#[test]
fn test_vec_vpkuwus() {
assert_asm!(0x1176F8CE, "vpkuwus v11, v22, v31");
}
#[test]
fn test_vec_vrefp() {
assert_asm!(0x1180C10A, "vrefp v12, v24");
}
#[test]
fn test_vec_vrfim() {
assert_asm!(0x1240F2CA, "vrfim v18, v30");
}
#[test]
fn test_vec_vrfin() {
assert_asm!(0x1140620A, "vrfin v10, v12");
}
#[test]
fn test_vec_vrfip() {
assert_asm!(0x10E08A8A, "vrfip v7, v17");
}
#[test]
fn test_vec_vrfiz() {
assert_asm!(0x1000A24A, "vrfiz v0, v20");
}
#[test]
fn test_vec_vrlb() {
assert_asm!(0x10EF8804, "vrlb v7, v15, v17");
}
#[test]
fn test_vec_vrlh() {
assert_asm!(0x12129844, "vrlh v16, v18, v19");
}
#[test]
fn test_vec_vrlw() {
assert_asm!(0x11540084, "vrlw v10, v20, v0");
}
#[test]
fn test_vec_vrsqrtefp() {
assert_asm!(0x1060794A, "vrsqrtefp v3, v15");
}
#[test]
fn test_vec_vsel() {
assert_asm!(0x100329AA, "vsel v0, v3, v5, v6");
}
#[test]
fn test_vec_vsl() {
assert_asm!(0x108CC1C4, "vsl v4, v12, v24");
}
#[test]
fn test_vec_vslb() {
assert_asm!(0x114E9104, "vslb v10, v14, v18");
}
#[test]
fn test_vec_vsldoi() {
assert_asm!(0x10601B6C, "vsldoi v3, v0, v3, 13");
}
#[test]
fn test_vec_vslh() {
assert_asm!(0x10AFC144, "vslh v5, v15, v24");
}
#[test]
fn test_vec_vslo() {
assert_asm!(0x10F1DC0C, "vslo v7, v17, v27");
}
#[test]
fn test_vec_vslw() {
assert_asm!(0x11128184, "vslw v8, v18, v16");
}
#[test]
fn test_vec_vspltb() {
assert_asm!(0x115C620C, "vspltb v10, v12, 0x1c");
}
#[test]
fn test_vec_vsplth() {
assert_asm!(0x11947A4C, "vsplth v12, v15, 0x14");
}
#[test]
fn test_vec_vspltisb() {
assert_asm!(0x1076030C, "vspltisb v3, -0xa");
}
#[test]
fn test_vec_vspltish() {
assert_asm!(0x11CE034C, "vspltish v14, 0xe");
}
#[test]
fn test_vec_vspltisw() {
assert_asm!(0x124C038C, "vspltisw v18, 0xc");
}
#[test]
fn test_vec_vspltw() {
assert_asm!(0x1018528C, "vspltw v0, v10, 0x18");
}
#[test]
fn test_vec_vsr() {
assert_asm!(0x116C6AC4, "vsr v11, v12, v13");
}
#[test]
fn test_vec_vsrab() {
assert_asm!(0x11D09304, "vsrab v14, v16, v18");
}
#[test]
fn test_vec_vsrah() {
assert_asm!(0x10E8C344, "vsrah v7, v8, v24");
}
#[test]
fn test_vec_vsraw() {
assert_asm!(0x112CAB84, "vsraw v9, v12, v21");
}
#[test]
fn test_vec_vsrb() {
assert_asm!(0x1112D204, "vsrb v8, v18, v26");
}
#[test]
fn test_vec_vsrh() {
assert_asm!(0x114C8244, "vsrh v10, v12, v16");
}
#[test]
fn test_vec_vsro() {
assert_asm!(0x118F9C4C, "vsro v12, v15, v19");
}
#[test]
fn test_vec_vsrw() {
assert_asm!(0x100EA284, "vsrw v0, v14, v20");
}
#[test]
fn test_vec_vsubcuw() {
assert_asm!(0x10AF8580, "vsubcuw v5, v15, v16");
}
#[test]
fn test_vec_vsubfp() {
assert_asm!(0x1080584A, "vsubfp v4, v0, v11");
}
#[test]
fn test_vec_vsubsbs() {
assert_asm!(0x10D2BF00, "vsubsbs v6, v18, v23");
}
#[test]
fn test_vec_vsubshs() {
assert_asm!(0x10F16740, "vsubshs v7, v17, v12");
}
#[test]
fn test_vec_vsubsws() {
assert_asm!(0x118D5780, "vsubsws v12, v13, v10");
}
#[test]
fn test_vec_vsububm() {
assert_asm!(0x11402C00, "vsububm v10, v0, v5");
}
#[test]
fn test_vec_vsububs() {
assert_asm!(0x10033600, "vsububs v0, v3, v6");
}
#[test]
fn test_vec_vsubuhm() {
assert_asm!(0x10EB6C40, "vsubuhm v7, v11, v13");
}
#[test]
fn test_vec_vsubuhs() {
assert_asm!(0x110A6640, "vsubuhs v8, v10, v12");
}
#[test]
fn test_vec_vsubuwm() {
assert_asm!(0x112BDC80, "vsubuwm v9, v11, v27");
}
#[test]
fn test_vec_vsubuws() {
assert_asm!(0x1149AE80, "vsubuws v10, v9, v21");
}
#[test]
fn test_vec_vsumsws() {
assert_asm!(0x116C6F88, "vsumsws v11, v12, v13");
}
#[test]
fn test_vec_vsum2sws() {
assert_asm!(0x11909688, "vsum2sws v12, v16, v18");
}
#[test]
fn test_vec_vsum4sbs() {
assert_asm!(0x11B19708, "vsum4sbs v13, v17, v18");
}
#[test]
fn test_vec_vsum4shs() {
assert_asm!(0x1296C648, "vsum4shs v20, v22, v24");
}
#[test]
fn test_vec_vsum4ubs() {
assert_asm!(0x12F8CE08, "vsum4ubs v23, v24, v25");
}
#[test]
fn test_vec_vupkhpx() {
assert_asm!(0x10A0434E, "vupkhpx v5, v8");
}
#[test]
fn test_vec_vupkhsb() {
assert_asm!(0x10001A0E, "vupkhsb v0, v3");
}
#[test]
fn test_vec_vupkhsh() {
assert_asm!(0x11806A4E, "vupkhsh v12, v13");
}
#[test]
fn test_vec_vupklpx() {
assert_asm!(0x108083CE, "vupklpx v4, v16");
}
#[test]
fn test_vec_vupklsb() {
assert_asm!(0x11407A8E, "vupklsb v10, v15");
}
#[test]
fn test_vec_vupklsh() {
assert_asm!(0x1180C2CE, "vupklsh v12, v24");
}
#[test]
fn test_vec_vxor() {
assert_asm!(0x10654CC4, "vxor v3, v5, v9");
}