summaryrefslogtreecommitdiff
path: root/yjit/src/asm/arm64/inst/family.rs
blob: ff5a335406e66d72aecc9e0dc8fc0cdcde28aa3d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/// These are the top-level encodings. They're effectively the family of
/// instructions, as each instruction within those groups shares these same
/// bits (28-25).
///
/// In the documentation, you can see that some of the bits are
/// optional (e.g., x1x0 for loads and stores). We represent that here as 0100
/// since we're bitwise ORing the family into the resulting encoding.
///
/// https://developer.arm.com/documentation/ddi0602/2022-03/Index-by-Encoding?lang=en
pub enum Family {
    /// https://developer.arm.com/documentation/ddi0602/2022-03/Index-by-Encoding/Reserved?lang=en
    Reserved = 0b0000,

    /// https://developer.arm.com/documentation/ddi0602/2022-03/Index-by-Encoding/SME-encodings?lang=en
    SMEEncodings = 0b0001,

    /// https://developer.arm.com/documentation/ddi0602/2022-03/Index-by-Encoding/SVE-encodings?lang=en
    SVEEncodings = 0b0010,

    /// https://developer.arm.com/documentation/ddi0602/2022-03/Index-by-Encoding/Data-Processing----Immediate?lang=en
    DataProcessingImmediate = 0b1000,

    /// https://developer.arm.com/documentation/ddi0602/2022-03/Index-by-Encoding/Branches--Exception-Generating-and-System-instructions?lang=en
    BranchesAndSystem = 0b1010,

    /// https://developer.arm.com/documentation/ddi0602/2022-03/Index-by-Encoding/Loads-and-Stores?lang=en
    LoadsAndStores = 0b0100,

    /// https://developer.arm.com/documentation/ddi0602/2022-03/Index-by-Encoding/Data-Processing----Register?lang=en
    DataProcessingRegister = 0b0101,

    /// https://developer.arm.com/documentation/ddi0602/2022-03/Index-by-Encoding/Data-Processing----Scalar-Floating-Point-and-Advanced-SIMD?lang=en
    DataProcessingScalar = 0b0111
}