1 use crate::dsl::{Feature::*, Inst, Length::*, Location::*};
2 use crate::dsl::{align, fmt, implicit, inst, r, rex, rw, vex, w};
3
4 #[rustfmt::skip] // Keeps instructions on a single line.
list() -> Vec<Inst>5 pub fn list() -> Vec<Inst> {
6 vec![
7 inst("divb", fmt("M", [rw(implicit(ax)), r(rm8)]), rex([0xF6]).digit(6), _64b | compat).has_trap(),
8 inst("divw", fmt("M", [rw(implicit(ax)), rw(implicit(dx)), r(rm16)]), rex([0x66, 0xF7]).digit(6), _64b | compat).has_trap(),
9 inst("divl", fmt("M", [rw(implicit(eax)), rw(implicit(edx)), r(rm32)]), rex([0xF7]).digit(6), _64b | compat).has_trap(),
10 inst("divq", fmt("M", [rw(implicit(rax)), rw(implicit(rdx)), r(rm64)]), rex([0xF7]).digit(6).w(), _64b).has_trap(),
11 inst("idivb", fmt("M", [rw(implicit(ax)), r(rm8)]), rex([0xF6]).digit(7), _64b | compat).has_trap(),
12 inst("idivw", fmt("M", [rw(implicit(ax)), rw(implicit(dx)), r(rm16)]), rex([0x66, 0xF7]).digit(7), _64b | compat).has_trap(),
13 inst("idivl", fmt("M", [rw(implicit(eax)), rw(implicit(edx)), r(rm32)]), rex([0xF7]).digit(7), _64b | compat).has_trap(),
14 inst("idivq", fmt("M", [rw(implicit(rax)), rw(implicit(rdx)), r(rm64)]), rex([0xF7]).digit(7).w(), _64b).has_trap(),
15 // Vector instructions.
16 inst("divss", fmt("A", [rw(xmm1), r(xmm_m32)]), rex([0xF3, 0xF, 0x5E]).r(), (_64b | compat) & sse).alt(avx, "vdivss_b"),
17 inst("divsd", fmt("A", [rw(xmm1), r(xmm_m64)]), rex([0xF2, 0xF, 0x5E]).r(), (_64b | compat) & sse2).alt(avx, "vdivsd_b"),
18 inst("divps", fmt("A", [rw(xmm1), align(xmm_m128)]), rex([0xF, 0x5E]).r(), (_64b | compat) & sse).alt(avx, "vdivps_b"),
19 inst("divpd", fmt("A", [rw(xmm1), align(xmm_m128)]), rex([0x66, 0x0F, 0x5E]).r(), (_64b | compat) & sse2).alt(avx, "vdivpd_b"),
20 inst("vdivss", fmt("B", [w(xmm1), r(xmm2), r(xmm_m32)]), vex(LIG)._f3()._0f().op(0x5E).r(), (_64b | compat) & avx),
21 inst("vdivsd", fmt("B", [w(xmm1), r(xmm2), r(xmm_m64)]), vex(LIG)._f2()._0f().op(0x5E).r(), (_64b | compat) & avx),
22 inst("vdivps", fmt("B", [w(xmm1), r(xmm2), r(xmm_m128)]), vex(L128)._0f().op(0x5E).r(), (_64b | compat) & avx),
23 inst("vdivpd", fmt("B", [w(xmm1), r(xmm2), r(xmm_m128)]), vex(L128)._66()._0f().op(0x5E).r(), (_64b | compat) & avx),
24 ]
25 }
26