1 use crate::dsl::{Customization::*, Feature::*, Inst, Location::*};
2 use crate::dsl::{fmt, inst, r, rex, sxl, w};
3
4 #[rustfmt::skip] // Keeps instructions on a single line.
list() -> Vec<Inst>5 pub fn list() -> Vec<Inst> {
6 vec![
7 inst("mfence", fmt("ZO", []), rex([0x0f, 0xae, 0xf0]), (_64b | compat) & sse2),
8 inst("sfence", fmt("ZO", []), rex([0x0f, 0xae, 0xf8]), _64b | compat),
9 inst("lfence", fmt("ZO", []), rex([0x0f, 0xae, 0xe8]), (_64b | compat) & sse2),
10
11 inst("hlt", fmt("ZO", []), rex([0xf4]), _64b | compat),
12 inst("ud2", fmt("ZO", []), rex([0x0f, 0x0b]), _64b | compat).has_trap(),
13 inst("int3", fmt("ZO", []), rex([0xcc]), _64b | compat),
14
15 inst("retq", fmt("ZO", []), rex([0xC3]), _64b | compat),
16 inst("retq", fmt("I", [r(imm16)]), rex([0xC2]).iw(), _64b | compat),
17
18 inst("leaw", fmt("RM", [w(r16), r(m16)]), rex([0x66, 0x8D]).r(), _64b | compat),
19 inst("leal", fmt("RM", [w(r32), r(m32)]), rex([0x8D]).r(), _64b | compat),
20 inst("leaq", fmt("RM", [w(r64), r(m64)]), rex([0x8D]).w().r(), _64b),
21
22 inst("callq", fmt("D", [r(sxl(imm32))]), rex([0xE8]).id(), _64b | compat).custom(Display),
23 inst("callq", fmt("M", [r(rm64)]), rex([0xFF]).digit(2), _64b).custom(Display),
24 ]
25 }
26