Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
bytecodealliance
GitHub Repository: bytecodealliance/wasmtime
Path: blob/main/cranelift/assembler-x64/meta/src/instructions/jmp.rs
1693 views
1
use crate::dsl::{Customization::*, Feature::*, Inst, Location::*};
2
use crate::dsl::{fmt, inst, r, rex, sxq};
3
4
#[rustfmt::skip] // Keeps instructions on a single line.
5
pub fn list() -> Vec<Inst> {
6
vec![
7
inst("jmpq", fmt("M", [r(rm64)]), rex([0xFF]).digit(4), _64b).custom(Display),
8
9
inst("jmp", fmt("D8", [r(sxq(imm8))]), rex([0xEB]).ib(), _64b | compat).custom(Display),
10
inst("jmp", fmt("D32", [r(sxq(imm32))]), rex([0xE9]).id(), _64b | compat).custom(Display),
11
12
// Note that the Intel manual lists many mnemonics for this family of
13
// instructions which are duplicates of other mnemonics. The order here
14
// matches the order in the manual and comments are left when variants
15
// are omitted due to the instructions being duplicates of another.
16
inst("ja", fmt("D8", [r(sxq(imm8))]), rex([0x77]).ib(), _64b | compat).custom(Display),
17
inst("ja", fmt("D32", [r(sxq(imm32))]), rex([0x0F, 0x87]).id(), _64b | compat).custom(Display),
18
inst("jae", fmt("D8", [r(sxq(imm8))]), rex([0x73]).ib(), _64b | compat).custom(Display),
19
inst("jae", fmt("D32", [r(sxq(imm32))]), rex([0x0F, 0x83]).id(), _64b | compat).custom(Display),
20
inst("jb", fmt("D8", [r(sxq(imm8))]), rex([0x72]).ib(), _64b | compat).custom(Display),
21
inst("jb", fmt("D32", [r(sxq(imm32))]), rex([0x0F, 0x82]).id(), _64b | compat).custom(Display),
22
inst("jbe", fmt("D8", [r(sxq(imm8))]), rex([0x76]).ib(), _64b | compat).custom(Display),
23
inst("jbe", fmt("D32", [r(sxq(imm32))]), rex([0x0F, 0x86]).id(), _64b | compat).custom(Display),
24
// jc == jb
25
// TODO: jcx
26
// TODO: jecx
27
// TODO: jrcx
28
inst("je", fmt("D8", [r(sxq(imm8))]), rex([0x74]).ib(), _64b | compat).custom(Display),
29
inst("je", fmt("D32", [r(sxq(imm32))]), rex([0x0F, 0x84]).id(), _64b | compat).custom(Display),
30
inst("jg", fmt("D8", [r(sxq(imm8))]), rex([0x7F]).ib(), _64b | compat).custom(Display),
31
inst("jg", fmt("D32", [r(sxq(imm32))]), rex([0x0F, 0x8F]).id(), _64b | compat).custom(Display),
32
inst("jge", fmt("D8", [r(sxq(imm8))]), rex([0x7D]).ib(), _64b | compat).custom(Display),
33
inst("jge", fmt("D32", [r(sxq(imm32))]), rex([0x0F, 0x8D]).id(), _64b | compat).custom(Display),
34
inst("jl", fmt("D8", [r(sxq(imm8))]), rex([0x7C]).ib(), _64b | compat).custom(Display),
35
inst("jl", fmt("D32", [r(sxq(imm32))]), rex([0x0F, 0x8C]).id(), _64b | compat).custom(Display),
36
inst("jle", fmt("D8", [r(sxq(imm8))]), rex([0x7E]).ib(), _64b | compat).custom(Display),
37
inst("jle", fmt("D32", [r(sxq(imm32))]), rex([0x0F, 0x8E]).id(), _64b | compat).custom(Display),
38
// jna == jbe
39
// jnae == jb
40
// jnb == jae
41
// jnbe == ja
42
// jnc == jae
43
inst("jne", fmt("D8", [r(sxq(imm8))]), rex([0x75]).ib(), _64b | compat).custom(Display),
44
inst("jne", fmt("D32", [r(sxq(imm32))]), rex([0x0F, 0x85]).id(), _64b | compat).custom(Display),
45
// jng == jle
46
// jnge == jl
47
// jnl == jge
48
// jnle == jg
49
inst("jno", fmt("D8", [r(sxq(imm8))]), rex([0x71]).ib(), _64b | compat).custom(Display),
50
inst("jno", fmt("D32", [r(sxq(imm32))]), rex([0x0F, 0x81]).id(), _64b | compat).custom(Display),
51
inst("jnp", fmt("D8", [r(sxq(imm8))]), rex([0x7B]).ib(), _64b | compat).custom(Display),
52
inst("jnp", fmt("D32", [r(sxq(imm32))]), rex([0x0F, 0x8B]).id(), _64b | compat).custom(Display),
53
inst("jns", fmt("D8", [r(sxq(imm8))]), rex([0x79]).ib(), _64b | compat).custom(Display),
54
inst("jns", fmt("D32", [r(sxq(imm32))]), rex([0x0F, 0x89]).id(), _64b | compat).custom(Display),
55
// jnz == jne
56
inst("jo", fmt("D8", [r(sxq(imm8))]), rex([0x70]).ib(), _64b | compat).custom(Display),
57
inst("jo", fmt("D32", [r(sxq(imm32))]), rex([0x0F, 0x80]).id(), _64b | compat).custom(Display),
58
inst("jp", fmt("D8", [r(sxq(imm8))]), rex([0x7A]).ib(), _64b | compat).custom(Display),
59
inst("jp", fmt("D32", [r(sxq(imm32))]), rex([0x0F, 0x8A]).id(), _64b | compat).custom(Display),
60
// jpe == jp
61
// jpo == jnp
62
inst("js", fmt("D8", [r(sxq(imm8))]), rex([0x78]).ib(), _64b | compat).custom(Display),
63
inst("js", fmt("D32", [r(sxq(imm32))]), rex([0x0F, 0x88]).id(), _64b | compat).custom(Display),
64
// jz == je
65
]
66
}
67
68