123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774 |
- #if UNITY_EDITOR || BURST_INTERNAL
- namespace Unity.Burst.Editor
- {
- internal partial class BurstDisassembler
- {
- private class ARM64AsmTokenKindProvider : AsmTokenKindProvider
- {
- private static readonly string[] Registers = new[]
- {
- "nzcv",
- "wsp",
- "sp",
-
- "r0",
- "r1",
- "r2",
- "r3",
- "r4",
- "r5",
- "r6",
- "r7",
- "r8",
- "r9",
- "r10",
- "r11",
- "r12",
- "r13",
- "r14",
- "r15",
-
- "b0",
- "b1",
- "b2",
- "b3",
- "b4",
- "b5",
- "b6",
- "b7",
- "b8",
- "b9",
- "b10",
- "b11",
- "b12",
- "b13",
- "b14",
- "b15",
- "b16",
- "b17",
- "b18",
- "b19",
- "b20",
- "b21",
- "b22",
- "b23",
- "b24",
- "b25",
- "b26",
- "b27",
- "b28",
- "b29",
- "b30",
- "b31",
- "d0",
- "d1",
- "d2",
- "d3",
- "d4",
- "d5",
- "d6",
- "d7",
- "d8",
- "d9",
- "d10",
- "d11",
- "d12",
- "d13",
- "d14",
- "d15",
- "d16",
- "d17",
- "d18",
- "d19",
- "d20",
- "d21",
- "d22",
- "d23",
- "d24",
- "d25",
- "d26",
- "d27",
- "d28",
- "d29",
- "d30",
- "d31",
- "h0",
- "h1",
- "h2",
- "h3",
- "h4",
- "h5",
- "h6",
- "h7",
- "h8",
- "h9",
- "h10",
- "h11",
- "h12",
- "h13",
- "h14",
- "h15",
- "h16",
- "h17",
- "h18",
- "h19",
- "h20",
- "h21",
- "h22",
- "h23",
- "h24",
- "h25",
- "h26",
- "h27",
- "h28",
- "h29",
- "h30",
- "h31",
- "q0",
- "q1",
- "q2",
- "q3",
- "q4",
- "q5",
- "q6",
- "q7",
- "q8",
- "q9",
- "q10",
- "q11",
- "q12",
- "q13",
- "q14",
- "q15",
- "q16",
- "q17",
- "q18",
- "q19",
- "q20",
- "q21",
- "q22",
- "q23",
- "q24",
- "q25",
- "q26",
- "q27",
- "q28",
- "q29",
- "q30",
- "q31",
- "s0",
- "s1",
- "s2",
- "s3",
- "s4",
- "s5",
- "s6",
- "s7",
- "s8",
- "s9",
- "s10",
- "s11",
- "s12",
- "s13",
- "s14",
- "s15",
- "s16",
- "s17",
- "s18",
- "s19",
- "s20",
- "s21",
- "s22",
- "s23",
- "s24",
- "s25",
- "s26",
- "s27",
- "s28",
- "s29",
- "s30",
- "s31",
- "w0",
- "w1",
- "w2",
- "w3",
- "w4",
- "w5",
- "w6",
- "w7",
- "w8",
- "w9",
- "w10",
- "w11",
- "w12",
- "w13",
- "w14",
- "w15",
- "w16",
- "w17",
- "w18",
- "w19",
- "w20",
- "w21",
- "w22",
- "w23",
- "w24",
- "w25",
- "w26",
- "w27",
- "w28",
- "w29",
- "w30",
- "wzr",
- "x0",
- "x1",
- "x2",
- "x3",
- "x4",
- "x5",
- "x6",
- "x7",
- "x8",
- "x9",
- "x10",
- "x11",
- "x12",
- "x13",
- "x14",
- "x15",
- "x16",
- "x17",
- "x18",
- "x19",
- "x20",
- "x21",
- "x22",
- "x23",
- "x24",
- "x25",
- "x26",
- "x27",
- "x28",
- "x29",
- "x30",
- };
-
- private static readonly string[] Qualifiers = new[]
- {
- // Comparison qualifiers
- "eq",
- "ne",
- "hs",
- "lo",
- "mi",
- "pl",
- "vs",
- "vc",
- "hi",
- "ls",
- "ge",
- "lt",
- "gt",
- "le",
- "al",
- "nv",
- };
-
- private static readonly string[] Instructions = new[]
- {
- "abs",
- "adc",
- "add",
- "addhn",
- "addhn2",
- "addp",
- "addv",
- "adr",
- "adrp",
- "aesd",
- "aese",
- "aesimc",
- "aesmc",
- "and",
- "asr",
- "at",
- "b",
- "beq",
- "bfi",
- "bfm",
- "bfxil",
- "bge",
- "bgt",
- "bic",
- "bif",
- "bit",
- "bl",
- "ble",
- "blr",
- "blx",
- "bne",
- "br",
- "brk",
- "bsl",
- "cbnz",
- "cbz",
- "ccmn",
- "ccmp",
- "clrex",
- "cls",
- "clz",
- "cmeq",
- "cmge",
- "cmgt",
- "cmhi",
- "cmhs",
- "cmle",
- "cmlt",
- "cmn",
- "cmp",
- "cmtst",
- "cnt",
- "crc32b",
- "crc32cb",
- "crc32ch",
- "crc32cw",
- "crc32cx",
- "crc32h",
- "crc32w",
- "crc32x",
- "csel",
- "csinc",
- "csinv",
- "csneg",
- "dc",
- "dcps1",
- "dcps2",
- "dcps3",
- "dmb",
- "drps",
- "dsb",
- "dup",
- "eon",
- "eor",
- "eret",
- "ext",
- "extr",
- "fabd",
- "fabs",
- "facge",
- "facgt",
- "fadd",
- "faddp",
- "fccmp",
- "fccmpe",
- "fcmeq",
- "fcmge",
- "fcmgt",
- "fcmle",
- "fcmlt",
- "fcmp",
- "fcmpe",
- "fcsel",
- "fcvt",
- "fcvtas",
- "fcvtau",
- "fcvtl",
- "fcvtl2",
- "fcvtms",
- "fcvtmu",
- "fcvtn",
- "fcvtn2",
- "fcvtns",
- "fcvtnu",
- "fcvtps",
- "fcvtpu",
- "fcvtxn",
- "fcvtxn2",
- "fcvtzs",
- "fcvtzu",
- "fdiv",
- "fmadd",
- "fmax",
- "fmaxnm",
- "fmaxnmp",
- "fmaxnmv",
- "fmaxp",
- "fmaxv",
- "fmin",
- "fminnm",
- "fminnmp",
- "fminnmv",
- "fminp",
- "fminv",
- "fmla",
- "fmls",
- "fmov",
- "fmsub",
- "fmul",
- "fmulx",
- "fneg",
- "fnmadd",
- "fnmsub",
- "fnmul",
- "frecpe",
- "frecps",
- "frecpx",
- "frinta",
- "frinti",
- "frintm",
- "frintn",
- "frintp",
- "frintx",
- "frintz",
- "frsqrte",
- "frsqrts",
- "fsqrt",
- "fsub",
- "hint",
- "hlt",
- "hvc",
- "ic",
- "ins",
- "isb",
- "ld1",
- "ld1r",
- "ld2",
- "ld2r",
- "ld3",
- "ld3r",
- "ld4",
- "ld4r",
- "ldar",
- "ldarb",
- "ldarh",
- "ldaxp",
- "ldaxr",
- "ldaxrb",
- "ldaxrh",
- "ldnp",
- "ldp",
- "ldpsw",
- "ldr",
- "ldrb",
- "ldrd",
- "ldrh",
- "ldrsb",
- "ldrsh",
- "ldrsw",
- "ldtr",
- "ldtrb",
- "ldtrh",
- "ldtrsb",
- "ldtrsh",
- "ldtrsw",
- "ldur",
- "ldurb",
- "ldurh",
- "ldursb",
- "ldursh",
- "ldursw",
- "ldxp",
- "ldxr",
- "ldxrb",
- "ldxrh",
- "lsl",
- "lsls",
- "lsr",
- "madd",
- "mla",
- "mls",
- "mneg",
- "mov",
- "movi",
- "movk",
- "movn",
- "movt",
- "movz",
- "movw",
- "mrs",
- "msr",
- "msub",
- "mul",
- "mvn",
- "mvni",
- "neg",
- "ngc",
- "nop",
- "not",
- "orn",
- "orr",
- "pmul",
- "pmull",
- "pmull2",
- "prfm",
- "prfum",
- "raddhn",
- "raddhn2",
- "rbit",
- "ret",
- "rev",
- "rev16",
- "rev32",
- "rev64",
- "ror",
- "rshrn",
- "rshrn2",
- "rsubhn",
- "rsubhn2",
- "saba",
- "sabal",
- "sabal2",
- "sabd",
- "sabdl",
- "sabdl2",
- "sadalp",
- "saddl",
- "saddl2",
- "saddlp",
- "saddlv",
- "saddw",
- "saddw2",
- "sbc",
- "sbfiz",
- "sbfm",
- "sbfx",
- "scvtf",
- "sdiv",
- "sev",
- "sevl",
- "sha1c",
- "sha1h",
- "sha1m",
- "sha1p",
- "sha1su0",
- "sha1su1",
- "sha256h",
- "sha256h2",
- "sha256su0",
- "sha256su1",
- "shadd",
- "shl",
- "shll",
- "shll2",
- "shrn",
- "shrn2",
- "shsub",
- "sli",
- "smaddl",
- "smax",
- "smaxp",
- "smaxv",
- "smc",
- "smin",
- "sminp",
- "sminv",
- "smlal",
- "smlal2",
- "smlsl",
- "smlsl2",
- "smnegl",
- "smov",
- "smsubl",
- "smulh",
- "smull",
- "smull2",
- "sqabs",
- "sqadd",
- "sqdmlal",
- "sqdmlal2",
- "sqdmlsl",
- "sqdmlsl2",
- "sqdmulh",
- "sqdmull",
- "sqdmull2",
- "sqneg",
- "sqrdmulh",
- "sqrshl",
- "sqrshrn",
- "sqrshrn2",
- "sqrshrun",
- "sqrshrun2",
- "sqshl",
- "sqshlu",
- "sqshrn",
- "sqshrn2",
- "sqshrun",
- "sqshrun2",
- "sqsub",
- "sqxtn",
- "sqxtn2",
- "sqxtun",
- "sqxtun2",
- "srhadd",
- "sri",
- "srshl",
- "srshr",
- "srsra",
- "sshl",
- "sshll",
- "sshll2",
- "sshr",
- "ssra",
- "ssubl",
- "ssubl2",
- "ssubw",
- "ssubw2",
- "st1",
- "st2",
- "st3",
- "st4",
- "stlr",
- "stlrb",
- "stlrh",
- "stlxp",
- "stlxr",
- "stlxrb",
- "stlxrh",
- "stnp",
- "stp",
- "str",
- "strb",
- "strh",
- "sttr",
- "sttrb",
- "sttrh",
- "stur",
- "sturb",
- "sturh",
- "stxp",
- "stxr",
- "stxrb",
- "stxrh",
- "sub",
- "subs",
- "subhn",
- "subhn2",
- "suqadd",
- "svc",
- "sxtb",
- "sxth",
- "sxtw",
- "sys",
- "sysl",
- "tbl",
- "tbnz",
- "tbx",
- "tbz",
- "tlbi",
- "trn1",
- "trn2",
- "tst",
- "uaba",
- "uabal",
- "uabal2",
- "uabd",
- "uabdl",
- "uabdl2",
- "uadalp",
- "uaddl",
- "uaddl2",
- "uaddlp",
- "uaddlv",
- "uaddw",
- "uaddw2",
- "ubfiz",
- "ubfm",
- "ubfx",
- "ucvtf",
- "udiv",
- "uhadd",
- "uhsub",
- "umaddl",
- "umax",
- "umaxp",
- "umaxv",
- "umin",
- "uminp",
- "uminv",
- "umlal",
- "umlal2",
- "umlsl",
- "umlsl2",
- "umnegl",
- "umov",
- "umsubl",
- "umulh",
- "umull",
- "umull2",
- "uqadd",
- "uqrshl",
- "uqrshrn",
- "uqrshrn2",
- "uqshl",
- "uqshrn",
- "uqshrn2",
- "uqsub",
- "uqxtn",
- "uqxtn2",
- "urecpe",
- "urhadd",
- "urshl",
- "urshr",
- "ursqrte",
- "ursra",
- "ushl",
- "ushll",
- "ushll2",
- "ushr",
- "usqadd",
- "usra",
- "usubl",
- "usubl2",
- "usubw",
- "usubw2",
- "uxtb",
- "uxth",
- "uzp1",
- "uzp2",
- "wfe",
- "wfi",
- "xtn",
- "xtn2",
- "yield",
- "zip1",
- "zip2",
- };
-
- private static readonly string[] SimdInstructions = new string[]
- {
- // TODO: add missing instructions
- "vabs",
- "vadd",
- "vmov",
- "vmul",
- "vsub",
- };
-
- private ARM64AsmTokenKindProvider() : base(Registers.Length + Qualifiers.Length + Instructions.Length + SimdInstructions.Length)
- {
- foreach (var register in Registers)
- {
- AddTokenKind(register, AsmTokenKind.Register);
- }
-
- foreach (var instruction in Qualifiers)
- {
- AddTokenKind(instruction, AsmTokenKind.Qualifier);
- }
-
- foreach (var instruction in Instructions)
- {
- AddTokenKind(instruction, AsmTokenKind.Instruction);
- }
-
- foreach (var instruction in SimdInstructions)
- {
- AddTokenKind(instruction, AsmTokenKind.InstructionSIMD);
- }
- }
-
- public static readonly ARM64AsmTokenKindProvider Instance = new ARM64AsmTokenKindProvider();
- }
- }
- }
- #endif
|