1dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines//===-- AArch64BaseInfo.h - Top level definitions for AArch64 ---*- C++ -*-===// 272062f5744557e270a38192554c3126ea5f97434Tim Northover// 372062f5744557e270a38192554c3126ea5f97434Tim Northover// The LLVM Compiler Infrastructure 472062f5744557e270a38192554c3126ea5f97434Tim Northover// 572062f5744557e270a38192554c3126ea5f97434Tim Northover// This file is distributed under the University of Illinois Open Source 672062f5744557e270a38192554c3126ea5f97434Tim Northover// License. See LICENSE.TXT for details. 772062f5744557e270a38192554c3126ea5f97434Tim Northover// 872062f5744557e270a38192554c3126ea5f97434Tim Northover//===----------------------------------------------------------------------===// 972062f5744557e270a38192554c3126ea5f97434Tim Northover// 1072062f5744557e270a38192554c3126ea5f97434Tim Northover// This file contains small standalone helper functions and enum definitions for 1172062f5744557e270a38192554c3126ea5f97434Tim Northover// the AArch64 target useful for the compiler back-end and the MC libraries. 1272062f5744557e270a38192554c3126ea5f97434Tim Northover// As such, it deliberately does not include references to LLVM core 1372062f5744557e270a38192554c3126ea5f97434Tim Northover// code gen types, passes, etc.. 1472062f5744557e270a38192554c3126ea5f97434Tim Northover// 1572062f5744557e270a38192554c3126ea5f97434Tim Northover//===----------------------------------------------------------------------===// 1672062f5744557e270a38192554c3126ea5f97434Tim Northover 1737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines#ifndef LLVM_LIB_TARGET_AARCH64_UTILS_AARCH64BASEINFO_H 1837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines#define LLVM_LIB_TARGET_AARCH64_UTILS_AARCH64BASEINFO_H 1972062f5744557e270a38192554c3126ea5f97434Tim Northover 20dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines// FIXME: Is it easiest to fix this layering violation by moving the .inc 21dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines// #includes from AArch64MCTargetDesc.h to here? 22dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#include "MCTargetDesc/AArch64MCTargetDesc.h" // For AArch64::X0 and friends. 2372062f5744557e270a38192554c3126ea5f97434Tim Northover#include "llvm/ADT/STLExtras.h" 2436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#include "llvm/ADT/StringSwitch.h" 2572062f5744557e270a38192554c3126ea5f97434Tim Northover#include "llvm/Support/ErrorHandling.h" 2672062f5744557e270a38192554c3126ea5f97434Tim Northover 2772062f5744557e270a38192554c3126ea5f97434Tim Northovernamespace llvm { 2872062f5744557e270a38192554c3126ea5f97434Tim Northover 29dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesinline static unsigned getWRegFromXReg(unsigned Reg) { 30dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines switch (Reg) { 31dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::X0: return AArch64::W0; 32dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::X1: return AArch64::W1; 33dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::X2: return AArch64::W2; 34dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::X3: return AArch64::W3; 35dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::X4: return AArch64::W4; 36dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::X5: return AArch64::W5; 37dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::X6: return AArch64::W6; 38dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::X7: return AArch64::W7; 39dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::X8: return AArch64::W8; 40dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::X9: return AArch64::W9; 41dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::X10: return AArch64::W10; 42dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::X11: return AArch64::W11; 43dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::X12: return AArch64::W12; 44dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::X13: return AArch64::W13; 45dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::X14: return AArch64::W14; 46dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::X15: return AArch64::W15; 47dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::X16: return AArch64::W16; 48dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::X17: return AArch64::W17; 49dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::X18: return AArch64::W18; 50dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::X19: return AArch64::W19; 51dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::X20: return AArch64::W20; 52dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::X21: return AArch64::W21; 53dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::X22: return AArch64::W22; 54dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::X23: return AArch64::W23; 55dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::X24: return AArch64::W24; 56dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::X25: return AArch64::W25; 57dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::X26: return AArch64::W26; 58dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::X27: return AArch64::W27; 59dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::X28: return AArch64::W28; 60dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::FP: return AArch64::W29; 61dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::LR: return AArch64::W30; 62dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::SP: return AArch64::WSP; 63dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::XZR: return AArch64::WZR; 64dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines } 65dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines // For anything else, return it unchanged. 66dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines return Reg; 67dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines} 6872062f5744557e270a38192554c3126ea5f97434Tim Northover 69dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesinline static unsigned getXRegFromWReg(unsigned Reg) { 70dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines switch (Reg) { 71dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::W0: return AArch64::X0; 72dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::W1: return AArch64::X1; 73dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::W2: return AArch64::X2; 74dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::W3: return AArch64::X3; 75dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::W4: return AArch64::X4; 76dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::W5: return AArch64::X5; 77dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::W6: return AArch64::X6; 78dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::W7: return AArch64::X7; 79dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::W8: return AArch64::X8; 80dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::W9: return AArch64::X9; 81dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::W10: return AArch64::X10; 82dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::W11: return AArch64::X11; 83dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::W12: return AArch64::X12; 84dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::W13: return AArch64::X13; 85dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::W14: return AArch64::X14; 86dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::W15: return AArch64::X15; 87dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::W16: return AArch64::X16; 88dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::W17: return AArch64::X17; 89dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::W18: return AArch64::X18; 90dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::W19: return AArch64::X19; 91dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::W20: return AArch64::X20; 92dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::W21: return AArch64::X21; 93dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::W22: return AArch64::X22; 94dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::W23: return AArch64::X23; 95dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::W24: return AArch64::X24; 96dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::W25: return AArch64::X25; 97dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::W26: return AArch64::X26; 98dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::W27: return AArch64::X27; 99dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::W28: return AArch64::X28; 100dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::W29: return AArch64::FP; 101dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::W30: return AArch64::LR; 102dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::WSP: return AArch64::SP; 103dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::WZR: return AArch64::XZR; 104dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines } 105dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines // For anything else, return it unchanged. 106dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines return Reg; 107dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines} 10872062f5744557e270a38192554c3126ea5f97434Tim Northover 109dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesstatic inline unsigned getBRegFromDReg(unsigned Reg) { 110dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines switch (Reg) { 111dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::D0: return AArch64::B0; 112dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::D1: return AArch64::B1; 113dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::D2: return AArch64::B2; 114dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::D3: return AArch64::B3; 115dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::D4: return AArch64::B4; 116dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::D5: return AArch64::B5; 117dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::D6: return AArch64::B6; 118dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::D7: return AArch64::B7; 119dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::D8: return AArch64::B8; 120dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::D9: return AArch64::B9; 121dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::D10: return AArch64::B10; 122dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::D11: return AArch64::B11; 123dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::D12: return AArch64::B12; 124dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::D13: return AArch64::B13; 125dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::D14: return AArch64::B14; 126dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::D15: return AArch64::B15; 127dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::D16: return AArch64::B16; 128dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::D17: return AArch64::B17; 129dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::D18: return AArch64::B18; 130dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::D19: return AArch64::B19; 131dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::D20: return AArch64::B20; 132dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::D21: return AArch64::B21; 133dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::D22: return AArch64::B22; 134dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::D23: return AArch64::B23; 135dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::D24: return AArch64::B24; 136dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::D25: return AArch64::B25; 137dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::D26: return AArch64::B26; 138dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::D27: return AArch64::B27; 139dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::D28: return AArch64::B28; 140dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::D29: return AArch64::B29; 141dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::D30: return AArch64::B30; 142dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::D31: return AArch64::B31; 14372062f5744557e270a38192554c3126ea5f97434Tim Northover } 144dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines // For anything else, return it unchanged. 145dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines return Reg; 14672062f5744557e270a38192554c3126ea5f97434Tim Northover} 14772062f5744557e270a38192554c3126ea5f97434Tim Northover 148dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 149dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesstatic inline unsigned getDRegFromBReg(unsigned Reg) { 150dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines switch (Reg) { 151dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::B0: return AArch64::D0; 152dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::B1: return AArch64::D1; 153dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::B2: return AArch64::D2; 154dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::B3: return AArch64::D3; 155dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::B4: return AArch64::D4; 156dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::B5: return AArch64::D5; 157dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::B6: return AArch64::D6; 158dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::B7: return AArch64::D7; 159dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::B8: return AArch64::D8; 160dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::B9: return AArch64::D9; 161dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::B10: return AArch64::D10; 162dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::B11: return AArch64::D11; 163dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::B12: return AArch64::D12; 164dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::B13: return AArch64::D13; 165dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::B14: return AArch64::D14; 166dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::B15: return AArch64::D15; 167dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::B16: return AArch64::D16; 168dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::B17: return AArch64::D17; 169dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::B18: return AArch64::D18; 170dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::B19: return AArch64::D19; 171dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::B20: return AArch64::D20; 172dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::B21: return AArch64::D21; 173dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::B22: return AArch64::D22; 174dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::B23: return AArch64::D23; 175dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::B24: return AArch64::D24; 176dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::B25: return AArch64::D25; 177dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::B26: return AArch64::D26; 178dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::B27: return AArch64::D27; 179dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::B28: return AArch64::D28; 180dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::B29: return AArch64::D29; 181dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::B30: return AArch64::D30; 182dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64::B31: return AArch64::D31; 183dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines } 184dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines // For anything else, return it unchanged. 185dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines return Reg; 18672062f5744557e270a38192554c3126ea5f97434Tim Northover} 18772062f5744557e270a38192554c3126ea5f97434Tim Northover 188dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesnamespace AArch64CC { 189dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 190dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines// The CondCodes constants map directly to the 4-bit encoding of the condition 191dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines// field for predicated instructions. 192dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesenum CondCode { // Meaning (integer) Meaning (floating-point) 193dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines EQ = 0x0, // Equal Equal 194dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines NE = 0x1, // Not equal Not equal, or unordered 195dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines HS = 0x2, // Unsigned higher or same >, ==, or unordered 196dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines LO = 0x3, // Unsigned lower Less than 197dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines MI = 0x4, // Minus, negative Less than 198dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines PL = 0x5, // Plus, positive or zero >, ==, or unordered 199dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines VS = 0x6, // Overflow Unordered 200dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines VC = 0x7, // No overflow Not unordered 201dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines HI = 0x8, // Unsigned higher Greater than, or unordered 202dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines LS = 0x9, // Unsigned lower or same Less than or equal 203dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines GE = 0xa, // Greater than or equal Greater than or equal 204dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines LT = 0xb, // Less than Less than, or unordered 205dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines GT = 0xc, // Greater than Greater than 206dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines LE = 0xd, // Less than or equal <, ==, or unordered 207dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines AL = 0xe, // Always (unconditional) Always (unconditional) 208dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines NV = 0xf, // Always (unconditional) Always (unconditional) 209dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines // Note the NV exists purely to disassemble 0b1111. Execution is "always". 210dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines Invalid 211dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines}; 21272062f5744557e270a38192554c3126ea5f97434Tim Northover 213dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesinline static const char *getCondCodeName(CondCode Code) { 214dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines switch (Code) { 215dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines default: llvm_unreachable("Unknown condition code"); 216dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case EQ: return "eq"; 217dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case NE: return "ne"; 218dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case HS: return "hs"; 219dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case LO: return "lo"; 220dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case MI: return "mi"; 221dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case PL: return "pl"; 222dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case VS: return "vs"; 223dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case VC: return "vc"; 224dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case HI: return "hi"; 225dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case LS: return "ls"; 226dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case GE: return "ge"; 227dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case LT: return "lt"; 228dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case GT: return "gt"; 229dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case LE: return "le"; 230dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AL: return "al"; 231dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case NV: return "nv"; 232dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines } 233dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines} 234dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 235dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesinline static CondCode getInvertedCondCode(CondCode Code) { 236c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines // To reverse a condition it's necessary to only invert the low bit: 237c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines 238c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines return static_cast<CondCode>(static_cast<unsigned>(Code) ^ 0x1); 23972062f5744557e270a38192554c3126ea5f97434Tim Northover} 24072062f5744557e270a38192554c3126ea5f97434Tim Northover 241dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines/// Given a condition code, return NZCV flags that would satisfy that condition. 242dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines/// The flag bits are in the format expected by the ccmp instructions. 243dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines/// Note that many different flag settings can satisfy a given condition code, 244dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines/// this function just returns one of them. 245dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesinline static unsigned getNZCVToSatisfyCondCode(CondCode Code) { 246dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines // NZCV flags encoded as expected by ccmp instructions, ARMv8 ISA 5.5.7. 247dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines enum { N = 8, Z = 4, C = 2, V = 1 }; 248dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines switch (Code) { 249dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines default: llvm_unreachable("Unknown condition code"); 250dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case EQ: return Z; // Z == 1 251dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case NE: return 0; // Z == 0 252dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case HS: return C; // C == 1 253dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case LO: return 0; // C == 0 254dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case MI: return N; // N == 1 255dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case PL: return 0; // N == 0 256dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case VS: return V; // V == 1 257dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case VC: return 0; // V == 0 258dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case HI: return C; // C == 1 && Z == 0 259dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case LS: return 0; // C == 0 || Z == 1 260dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case GE: return 0; // N == V 261dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case LT: return N; // N != V 262dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case GT: return 0; // Z == 0 && N == V 263dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case LE: return Z; // Z == 1 || N != V 264dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines } 265dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines} 266dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines} // end namespace AArch64CC 267dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 26872062f5744557e270a38192554c3126ea5f97434Tim Northover/// Instances of this class can perform bidirectional mapping from random 26972062f5744557e270a38192554c3126ea5f97434Tim Northover/// identifier strings to operand encodings. For example "MSR" takes a named 27072062f5744557e270a38192554c3126ea5f97434Tim Northover/// system-register which must be encoded somehow and decoded for printing. This 27172062f5744557e270a38192554c3126ea5f97434Tim Northover/// central location means that the information for those transformations is not 27272062f5744557e270a38192554c3126ea5f97434Tim Northover/// duplicated and remains in sync. 27372062f5744557e270a38192554c3126ea5f97434Tim Northover/// 27472062f5744557e270a38192554c3126ea5f97434Tim Northover/// FIXME: currently the algorithm is a completely unoptimised linear 27572062f5744557e270a38192554c3126ea5f97434Tim Northover/// search. Obviously this could be improved, but we would probably want to work 27672062f5744557e270a38192554c3126ea5f97434Tim Northover/// out just how often these instructions are emitted before working on it. It 27772062f5744557e270a38192554c3126ea5f97434Tim Northover/// might even be optimal to just reorder the tables for the common instructions 27872062f5744557e270a38192554c3126ea5f97434Tim Northover/// rather than changing the algorithm. 279dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesstruct AArch64NamedImmMapper { 28072062f5744557e270a38192554c3126ea5f97434Tim Northover struct Mapping { 28172062f5744557e270a38192554c3126ea5f97434Tim Northover const char *Name; 28272062f5744557e270a38192554c3126ea5f97434Tim Northover uint32_t Value; 2832c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar uint64_t AvailableForFeatures; 2842c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar // empty AvailableForFeatures means "always-on" 2852c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar bool isNameEqual(std::string Other, uint64_t FeatureBits=~0ULL) const { 2862c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar if (AvailableForFeatures && !(AvailableForFeatures & FeatureBits)) 2872c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar return false; 2882c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar return Name == Other; 2892c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar } 2902c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar bool isValueEqual(uint32_t Other, uint64_t FeatureBits=~0ULL) const { 2912c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar if (AvailableForFeatures && !(AvailableForFeatures & FeatureBits)) 2922c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar return false; 2932c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar return Value == Other; 2942c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar } 29572062f5744557e270a38192554c3126ea5f97434Tim Northover }; 29672062f5744557e270a38192554c3126ea5f97434Tim Northover 29772062f5744557e270a38192554c3126ea5f97434Tim Northover template<int N> 2984c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar AArch64NamedImmMapper(const Mapping (&Mappings)[N], uint32_t TooBigImm) 2994c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar : Mappings(&Mappings[0]), NumMappings(N), TooBigImm(TooBigImm) {} 30072062f5744557e270a38192554c3126ea5f97434Tim Northover 3012c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar StringRef toString(uint32_t Value, uint64_t FeatureBits, bool &Valid) const; 3022c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar uint32_t fromString(StringRef Name, uint64_t FeatureBits, bool &Valid) const; 30372062f5744557e270a38192554c3126ea5f97434Tim Northover 30472062f5744557e270a38192554c3126ea5f97434Tim Northover /// Many of the instructions allow an alternative assembly form consisting of 30572062f5744557e270a38192554c3126ea5f97434Tim Northover /// a simple immediate. Currently the only valid forms are ranges [0, N) where 30672062f5744557e270a38192554c3126ea5f97434Tim Northover /// N being 0 indicates no immediate syntax-form is allowed. 30772062f5744557e270a38192554c3126ea5f97434Tim Northover bool validImm(uint32_t Value) const; 30872062f5744557e270a38192554c3126ea5f97434Tim Northoverprotected: 3094c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar const Mapping *Mappings; 3104c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar size_t NumMappings; 31172062f5744557e270a38192554c3126ea5f97434Tim Northover uint32_t TooBigImm; 31272062f5744557e270a38192554c3126ea5f97434Tim Northover}; 31372062f5744557e270a38192554c3126ea5f97434Tim Northover 314dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesnamespace AArch64AT { 31572062f5744557e270a38192554c3126ea5f97434Tim Northover enum ATValues { 31672062f5744557e270a38192554c3126ea5f97434Tim Northover Invalid = -1, // Op0 Op1 CRn CRm Op2 31772062f5744557e270a38192554c3126ea5f97434Tim Northover S1E1R = 0x43c0, // 01 000 0111 1000 000 31872062f5744557e270a38192554c3126ea5f97434Tim Northover S1E2R = 0x63c0, // 01 100 0111 1000 000 31972062f5744557e270a38192554c3126ea5f97434Tim Northover S1E3R = 0x73c0, // 01 110 0111 1000 000 32072062f5744557e270a38192554c3126ea5f97434Tim Northover S1E1W = 0x43c1, // 01 000 0111 1000 001 32172062f5744557e270a38192554c3126ea5f97434Tim Northover S1E2W = 0x63c1, // 01 100 0111 1000 001 32272062f5744557e270a38192554c3126ea5f97434Tim Northover S1E3W = 0x73c1, // 01 110 0111 1000 001 32372062f5744557e270a38192554c3126ea5f97434Tim Northover S1E0R = 0x43c2, // 01 000 0111 1000 010 32472062f5744557e270a38192554c3126ea5f97434Tim Northover S1E0W = 0x43c3, // 01 000 0111 1000 011 32572062f5744557e270a38192554c3126ea5f97434Tim Northover S12E1R = 0x63c4, // 01 100 0111 1000 100 32672062f5744557e270a38192554c3126ea5f97434Tim Northover S12E1W = 0x63c5, // 01 100 0111 1000 101 32772062f5744557e270a38192554c3126ea5f97434Tim Northover S12E0R = 0x63c6, // 01 100 0111 1000 110 32872062f5744557e270a38192554c3126ea5f97434Tim Northover S12E0W = 0x63c7 // 01 100 0111 1000 111 32972062f5744557e270a38192554c3126ea5f97434Tim Northover }; 33072062f5744557e270a38192554c3126ea5f97434Tim Northover 331dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines struct ATMapper : AArch64NamedImmMapper { 3324c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar const static Mapping ATMappings[]; 33372062f5744557e270a38192554c3126ea5f97434Tim Northover 33472062f5744557e270a38192554c3126ea5f97434Tim Northover ATMapper(); 33572062f5744557e270a38192554c3126ea5f97434Tim Northover }; 33672062f5744557e270a38192554c3126ea5f97434Tim Northover 33772062f5744557e270a38192554c3126ea5f97434Tim Northover} 338dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesnamespace AArch64DB { 33972062f5744557e270a38192554c3126ea5f97434Tim Northover enum DBValues { 34072062f5744557e270a38192554c3126ea5f97434Tim Northover Invalid = -1, 34172062f5744557e270a38192554c3126ea5f97434Tim Northover OSHLD = 0x1, 34272062f5744557e270a38192554c3126ea5f97434Tim Northover OSHST = 0x2, 34372062f5744557e270a38192554c3126ea5f97434Tim Northover OSH = 0x3, 34472062f5744557e270a38192554c3126ea5f97434Tim Northover NSHLD = 0x5, 34572062f5744557e270a38192554c3126ea5f97434Tim Northover NSHST = 0x6, 34672062f5744557e270a38192554c3126ea5f97434Tim Northover NSH = 0x7, 34772062f5744557e270a38192554c3126ea5f97434Tim Northover ISHLD = 0x9, 34872062f5744557e270a38192554c3126ea5f97434Tim Northover ISHST = 0xa, 34972062f5744557e270a38192554c3126ea5f97434Tim Northover ISH = 0xb, 35072062f5744557e270a38192554c3126ea5f97434Tim Northover LD = 0xd, 35172062f5744557e270a38192554c3126ea5f97434Tim Northover ST = 0xe, 35272062f5744557e270a38192554c3126ea5f97434Tim Northover SY = 0xf 35372062f5744557e270a38192554c3126ea5f97434Tim Northover }; 35472062f5744557e270a38192554c3126ea5f97434Tim Northover 355dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines struct DBarrierMapper : AArch64NamedImmMapper { 3564c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar const static Mapping DBarrierMappings[]; 35772062f5744557e270a38192554c3126ea5f97434Tim Northover 35872062f5744557e270a38192554c3126ea5f97434Tim Northover DBarrierMapper(); 35972062f5744557e270a38192554c3126ea5f97434Tim Northover }; 36072062f5744557e270a38192554c3126ea5f97434Tim Northover} 36172062f5744557e270a38192554c3126ea5f97434Tim Northover 362dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesnamespace AArch64DC { 36372062f5744557e270a38192554c3126ea5f97434Tim Northover enum DCValues { 36472062f5744557e270a38192554c3126ea5f97434Tim Northover Invalid = -1, // Op1 CRn CRm Op2 36572062f5744557e270a38192554c3126ea5f97434Tim Northover ZVA = 0x5ba1, // 01 011 0111 0100 001 36672062f5744557e270a38192554c3126ea5f97434Tim Northover IVAC = 0x43b1, // 01 000 0111 0110 001 36772062f5744557e270a38192554c3126ea5f97434Tim Northover ISW = 0x43b2, // 01 000 0111 0110 010 36872062f5744557e270a38192554c3126ea5f97434Tim Northover CVAC = 0x5bd1, // 01 011 0111 1010 001 36972062f5744557e270a38192554c3126ea5f97434Tim Northover CSW = 0x43d2, // 01 000 0111 1010 010 37072062f5744557e270a38192554c3126ea5f97434Tim Northover CVAU = 0x5bd9, // 01 011 0111 1011 001 37172062f5744557e270a38192554c3126ea5f97434Tim Northover CIVAC = 0x5bf1, // 01 011 0111 1110 001 37272062f5744557e270a38192554c3126ea5f97434Tim Northover CISW = 0x43f2 // 01 000 0111 1110 010 37372062f5744557e270a38192554c3126ea5f97434Tim Northover }; 37472062f5744557e270a38192554c3126ea5f97434Tim Northover 375dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines struct DCMapper : AArch64NamedImmMapper { 3764c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar const static Mapping DCMappings[]; 37772062f5744557e270a38192554c3126ea5f97434Tim Northover 37872062f5744557e270a38192554c3126ea5f97434Tim Northover DCMapper(); 37972062f5744557e270a38192554c3126ea5f97434Tim Northover }; 38072062f5744557e270a38192554c3126ea5f97434Tim Northover 38172062f5744557e270a38192554c3126ea5f97434Tim Northover} 38272062f5744557e270a38192554c3126ea5f97434Tim Northover 383dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesnamespace AArch64IC { 38472062f5744557e270a38192554c3126ea5f97434Tim Northover enum ICValues { 38572062f5744557e270a38192554c3126ea5f97434Tim Northover Invalid = -1, // Op1 CRn CRm Op2 38672062f5744557e270a38192554c3126ea5f97434Tim Northover IALLUIS = 0x0388, // 000 0111 0001 000 38772062f5744557e270a38192554c3126ea5f97434Tim Northover IALLU = 0x03a8, // 000 0111 0101 000 38872062f5744557e270a38192554c3126ea5f97434Tim Northover IVAU = 0x1ba9 // 011 0111 0101 001 38972062f5744557e270a38192554c3126ea5f97434Tim Northover }; 39072062f5744557e270a38192554c3126ea5f97434Tim Northover 39172062f5744557e270a38192554c3126ea5f97434Tim Northover 392dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines struct ICMapper : AArch64NamedImmMapper { 3934c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar const static Mapping ICMappings[]; 39472062f5744557e270a38192554c3126ea5f97434Tim Northover 39572062f5744557e270a38192554c3126ea5f97434Tim Northover ICMapper(); 39672062f5744557e270a38192554c3126ea5f97434Tim Northover }; 39772062f5744557e270a38192554c3126ea5f97434Tim Northover 39872062f5744557e270a38192554c3126ea5f97434Tim Northover static inline bool NeedsRegister(ICValues Val) { 39972062f5744557e270a38192554c3126ea5f97434Tim Northover return Val == IVAU; 40072062f5744557e270a38192554c3126ea5f97434Tim Northover } 40172062f5744557e270a38192554c3126ea5f97434Tim Northover} 40272062f5744557e270a38192554c3126ea5f97434Tim Northover 403dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesnamespace AArch64ISB { 40472062f5744557e270a38192554c3126ea5f97434Tim Northover enum ISBValues { 40572062f5744557e270a38192554c3126ea5f97434Tim Northover Invalid = -1, 40672062f5744557e270a38192554c3126ea5f97434Tim Northover SY = 0xf 40772062f5744557e270a38192554c3126ea5f97434Tim Northover }; 408dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines struct ISBMapper : AArch64NamedImmMapper { 4094c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar const static Mapping ISBMappings[]; 41072062f5744557e270a38192554c3126ea5f97434Tim Northover 41172062f5744557e270a38192554c3126ea5f97434Tim Northover ISBMapper(); 41272062f5744557e270a38192554c3126ea5f97434Tim Northover }; 41372062f5744557e270a38192554c3126ea5f97434Tim Northover} 41472062f5744557e270a38192554c3126ea5f97434Tim Northover 415dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesnamespace AArch64PRFM { 41672062f5744557e270a38192554c3126ea5f97434Tim Northover enum PRFMValues { 41772062f5744557e270a38192554c3126ea5f97434Tim Northover Invalid = -1, 41872062f5744557e270a38192554c3126ea5f97434Tim Northover PLDL1KEEP = 0x00, 41972062f5744557e270a38192554c3126ea5f97434Tim Northover PLDL1STRM = 0x01, 42072062f5744557e270a38192554c3126ea5f97434Tim Northover PLDL2KEEP = 0x02, 42172062f5744557e270a38192554c3126ea5f97434Tim Northover PLDL2STRM = 0x03, 42272062f5744557e270a38192554c3126ea5f97434Tim Northover PLDL3KEEP = 0x04, 42372062f5744557e270a38192554c3126ea5f97434Tim Northover PLDL3STRM = 0x05, 4249e3b31345f0d17b757e183a8384db92616256926Tim Northover PLIL1KEEP = 0x08, 4259e3b31345f0d17b757e183a8384db92616256926Tim Northover PLIL1STRM = 0x09, 4269e3b31345f0d17b757e183a8384db92616256926Tim Northover PLIL2KEEP = 0x0a, 4279e3b31345f0d17b757e183a8384db92616256926Tim Northover PLIL2STRM = 0x0b, 4289e3b31345f0d17b757e183a8384db92616256926Tim Northover PLIL3KEEP = 0x0c, 4299e3b31345f0d17b757e183a8384db92616256926Tim Northover PLIL3STRM = 0x0d, 43072062f5744557e270a38192554c3126ea5f97434Tim Northover PSTL1KEEP = 0x10, 43172062f5744557e270a38192554c3126ea5f97434Tim Northover PSTL1STRM = 0x11, 43272062f5744557e270a38192554c3126ea5f97434Tim Northover PSTL2KEEP = 0x12, 43372062f5744557e270a38192554c3126ea5f97434Tim Northover PSTL2STRM = 0x13, 43472062f5744557e270a38192554c3126ea5f97434Tim Northover PSTL3KEEP = 0x14, 43572062f5744557e270a38192554c3126ea5f97434Tim Northover PSTL3STRM = 0x15 43672062f5744557e270a38192554c3126ea5f97434Tim Northover }; 43772062f5744557e270a38192554c3126ea5f97434Tim Northover 438dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines struct PRFMMapper : AArch64NamedImmMapper { 4394c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar const static Mapping PRFMMappings[]; 44072062f5744557e270a38192554c3126ea5f97434Tim Northover 44172062f5744557e270a38192554c3126ea5f97434Tim Northover PRFMMapper(); 44272062f5744557e270a38192554c3126ea5f97434Tim Northover }; 44372062f5744557e270a38192554c3126ea5f97434Tim Northover} 44472062f5744557e270a38192554c3126ea5f97434Tim Northover 445dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesnamespace AArch64PState { 44672062f5744557e270a38192554c3126ea5f97434Tim Northover enum PStateValues { 44772062f5744557e270a38192554c3126ea5f97434Tim Northover Invalid = -1, 44872062f5744557e270a38192554c3126ea5f97434Tim Northover SPSel = 0x05, 44972062f5744557e270a38192554c3126ea5f97434Tim Northover DAIFSet = 0x1e, 4502c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar DAIFClr = 0x1f, 4512c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar 4522c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar // v8.1a "Privileged Access Never" extension-specific PStates 4532c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar PAN = 0x04, 45472062f5744557e270a38192554c3126ea5f97434Tim Northover }; 45572062f5744557e270a38192554c3126ea5f97434Tim Northover 456dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines struct PStateMapper : AArch64NamedImmMapper { 4574c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar const static Mapping PStateMappings[]; 45872062f5744557e270a38192554c3126ea5f97434Tim Northover 45972062f5744557e270a38192554c3126ea5f97434Tim Northover PStateMapper(); 46072062f5744557e270a38192554c3126ea5f97434Tim Northover }; 46172062f5744557e270a38192554c3126ea5f97434Tim Northover 46272062f5744557e270a38192554c3126ea5f97434Tim Northover} 46372062f5744557e270a38192554c3126ea5f97434Tim Northover 464dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesnamespace AArch64SE { 46572062f5744557e270a38192554c3126ea5f97434Tim Northover enum ShiftExtSpecifiers { 46672062f5744557e270a38192554c3126ea5f97434Tim Northover Invalid = -1, 46772062f5744557e270a38192554c3126ea5f97434Tim Northover LSL, 46887773c318fcee853fb34a80a10c4347d523bdafbTim Northover MSL, 46972062f5744557e270a38192554c3126ea5f97434Tim Northover LSR, 47072062f5744557e270a38192554c3126ea5f97434Tim Northover ASR, 47172062f5744557e270a38192554c3126ea5f97434Tim Northover ROR, 47272062f5744557e270a38192554c3126ea5f97434Tim Northover 47372062f5744557e270a38192554c3126ea5f97434Tim Northover UXTB, 47472062f5744557e270a38192554c3126ea5f97434Tim Northover UXTH, 47572062f5744557e270a38192554c3126ea5f97434Tim Northover UXTW, 47672062f5744557e270a38192554c3126ea5f97434Tim Northover UXTX, 47772062f5744557e270a38192554c3126ea5f97434Tim Northover 47872062f5744557e270a38192554c3126ea5f97434Tim Northover SXTB, 47972062f5744557e270a38192554c3126ea5f97434Tim Northover SXTH, 48072062f5744557e270a38192554c3126ea5f97434Tim Northover SXTW, 48172062f5744557e270a38192554c3126ea5f97434Tim Northover SXTX 48272062f5744557e270a38192554c3126ea5f97434Tim Northover }; 48372062f5744557e270a38192554c3126ea5f97434Tim Northover} 48472062f5744557e270a38192554c3126ea5f97434Tim Northover 485dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesnamespace AArch64Layout { 4866a5a667517160ca1b557002a29d08868ae029451Hao Liu enum VectorLayout { 4876a5a667517160ca1b557002a29d08868ae029451Hao Liu Invalid = -1, 4889add5c2d4b282f7cae583ece5cea3f83d33c488bBill Wendling VL_8B, 4899add5c2d4b282f7cae583ece5cea3f83d33c488bBill Wendling VL_4H, 4909add5c2d4b282f7cae583ece5cea3f83d33c488bBill Wendling VL_2S, 4919add5c2d4b282f7cae583ece5cea3f83d33c488bBill Wendling VL_1D, 4926a5a667517160ca1b557002a29d08868ae029451Hao Liu 4939add5c2d4b282f7cae583ece5cea3f83d33c488bBill Wendling VL_16B, 4949add5c2d4b282f7cae583ece5cea3f83d33c488bBill Wendling VL_8H, 4959add5c2d4b282f7cae583ece5cea3f83d33c488bBill Wendling VL_4S, 4969add5c2d4b282f7cae583ece5cea3f83d33c488bBill Wendling VL_2D, 49736c7806f4eacd676932ba630246f88e0e37b1cd4Hao Liu 49836c7806f4eacd676932ba630246f88e0e37b1cd4Hao Liu // Bare layout for the 128-bit vector 49936c7806f4eacd676932ba630246f88e0e37b1cd4Hao Liu // (only show ".b", ".h", ".s", ".d" without vector number) 5009add5c2d4b282f7cae583ece5cea3f83d33c488bBill Wendling VL_B, 5019add5c2d4b282f7cae583ece5cea3f83d33c488bBill Wendling VL_H, 5029add5c2d4b282f7cae583ece5cea3f83d33c488bBill Wendling VL_S, 5039add5c2d4b282f7cae583ece5cea3f83d33c488bBill Wendling VL_D 5046a5a667517160ca1b557002a29d08868ae029451Hao Liu }; 5056a5a667517160ca1b557002a29d08868ae029451Hao Liu} 5066a5a667517160ca1b557002a29d08868ae029451Hao Liu 5076a5a667517160ca1b557002a29d08868ae029451Hao Liuinline static const char * 508dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen HinesAArch64VectorLayoutToString(AArch64Layout::VectorLayout Layout) { 5096a5a667517160ca1b557002a29d08868ae029451Hao Liu switch (Layout) { 510dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64Layout::VL_8B: return ".8b"; 511dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64Layout::VL_4H: return ".4h"; 512dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64Layout::VL_2S: return ".2s"; 513dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64Layout::VL_1D: return ".1d"; 514dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64Layout::VL_16B: return ".16b"; 515dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64Layout::VL_8H: return ".8h"; 516dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64Layout::VL_4S: return ".4s"; 517dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64Layout::VL_2D: return ".2d"; 518dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64Layout::VL_B: return ".b"; 519dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64Layout::VL_H: return ".h"; 520dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64Layout::VL_S: return ".s"; 521dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64Layout::VL_D: return ".d"; 5226a5a667517160ca1b557002a29d08868ae029451Hao Liu default: llvm_unreachable("Unknown Vector Layout"); 5236a5a667517160ca1b557002a29d08868ae029451Hao Liu } 5246a5a667517160ca1b557002a29d08868ae029451Hao Liu} 5256a5a667517160ca1b557002a29d08868ae029451Hao Liu 526dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesinline static AArch64Layout::VectorLayout 527dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen HinesAArch64StringToVectorLayout(StringRef LayoutStr) { 528dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines return StringSwitch<AArch64Layout::VectorLayout>(LayoutStr) 529dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines .Case(".8b", AArch64Layout::VL_8B) 530dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines .Case(".4h", AArch64Layout::VL_4H) 531dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines .Case(".2s", AArch64Layout::VL_2S) 532dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines .Case(".1d", AArch64Layout::VL_1D) 533dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines .Case(".16b", AArch64Layout::VL_16B) 534dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines .Case(".8h", AArch64Layout::VL_8H) 535dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines .Case(".4s", AArch64Layout::VL_4S) 536dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines .Case(".2d", AArch64Layout::VL_2D) 537dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines .Case(".b", AArch64Layout::VL_B) 538dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines .Case(".h", AArch64Layout::VL_H) 539dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines .Case(".s", AArch64Layout::VL_S) 540dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines .Case(".d", AArch64Layout::VL_D) 541dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines .Default(AArch64Layout::Invalid); 5426a5a667517160ca1b557002a29d08868ae029451Hao Liu} 5436a5a667517160ca1b557002a29d08868ae029451Hao Liu 544dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesnamespace AArch64SysReg { 54572062f5744557e270a38192554c3126ea5f97434Tim Northover enum SysRegROValues { 54672062f5744557e270a38192554c3126ea5f97434Tim Northover MDCCSR_EL0 = 0x9808, // 10 011 0000 0001 000 54772062f5744557e270a38192554c3126ea5f97434Tim Northover DBGDTRRX_EL0 = 0x9828, // 10 011 0000 0101 000 54872062f5744557e270a38192554c3126ea5f97434Tim Northover MDRAR_EL1 = 0x8080, // 10 000 0001 0000 000 54972062f5744557e270a38192554c3126ea5f97434Tim Northover OSLSR_EL1 = 0x808c, // 10 000 0001 0001 100 55072062f5744557e270a38192554c3126ea5f97434Tim Northover DBGAUTHSTATUS_EL1 = 0x83f6, // 10 000 0111 1110 110 55172062f5744557e270a38192554c3126ea5f97434Tim Northover PMCEID0_EL0 = 0xdce6, // 11 011 1001 1100 110 55272062f5744557e270a38192554c3126ea5f97434Tim Northover PMCEID1_EL0 = 0xdce7, // 11 011 1001 1100 111 55372062f5744557e270a38192554c3126ea5f97434Tim Northover MIDR_EL1 = 0xc000, // 11 000 0000 0000 000 55472062f5744557e270a38192554c3126ea5f97434Tim Northover CCSIDR_EL1 = 0xc800, // 11 001 0000 0000 000 55572062f5744557e270a38192554c3126ea5f97434Tim Northover CLIDR_EL1 = 0xc801, // 11 001 0000 0000 001 55672062f5744557e270a38192554c3126ea5f97434Tim Northover CTR_EL0 = 0xd801, // 11 011 0000 0000 001 55772062f5744557e270a38192554c3126ea5f97434Tim Northover MPIDR_EL1 = 0xc005, // 11 000 0000 0000 101 55872062f5744557e270a38192554c3126ea5f97434Tim Northover REVIDR_EL1 = 0xc006, // 11 000 0000 0000 110 55972062f5744557e270a38192554c3126ea5f97434Tim Northover AIDR_EL1 = 0xc807, // 11 001 0000 0000 111 56072062f5744557e270a38192554c3126ea5f97434Tim Northover DCZID_EL0 = 0xd807, // 11 011 0000 0000 111 56172062f5744557e270a38192554c3126ea5f97434Tim Northover ID_PFR0_EL1 = 0xc008, // 11 000 0000 0001 000 56272062f5744557e270a38192554c3126ea5f97434Tim Northover ID_PFR1_EL1 = 0xc009, // 11 000 0000 0001 001 56372062f5744557e270a38192554c3126ea5f97434Tim Northover ID_DFR0_EL1 = 0xc00a, // 11 000 0000 0001 010 56472062f5744557e270a38192554c3126ea5f97434Tim Northover ID_AFR0_EL1 = 0xc00b, // 11 000 0000 0001 011 56572062f5744557e270a38192554c3126ea5f97434Tim Northover ID_MMFR0_EL1 = 0xc00c, // 11 000 0000 0001 100 56672062f5744557e270a38192554c3126ea5f97434Tim Northover ID_MMFR1_EL1 = 0xc00d, // 11 000 0000 0001 101 56772062f5744557e270a38192554c3126ea5f97434Tim Northover ID_MMFR2_EL1 = 0xc00e, // 11 000 0000 0001 110 56872062f5744557e270a38192554c3126ea5f97434Tim Northover ID_MMFR3_EL1 = 0xc00f, // 11 000 0000 0001 111 56972062f5744557e270a38192554c3126ea5f97434Tim Northover ID_ISAR0_EL1 = 0xc010, // 11 000 0000 0010 000 57072062f5744557e270a38192554c3126ea5f97434Tim Northover ID_ISAR1_EL1 = 0xc011, // 11 000 0000 0010 001 57172062f5744557e270a38192554c3126ea5f97434Tim Northover ID_ISAR2_EL1 = 0xc012, // 11 000 0000 0010 010 57272062f5744557e270a38192554c3126ea5f97434Tim Northover ID_ISAR3_EL1 = 0xc013, // 11 000 0000 0010 011 57372062f5744557e270a38192554c3126ea5f97434Tim Northover ID_ISAR4_EL1 = 0xc014, // 11 000 0000 0010 100 57472062f5744557e270a38192554c3126ea5f97434Tim Northover ID_ISAR5_EL1 = 0xc015, // 11 000 0000 0010 101 575dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines ID_A64PFR0_EL1 = 0xc020, // 11 000 0000 0100 000 576dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines ID_A64PFR1_EL1 = 0xc021, // 11 000 0000 0100 001 577dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines ID_A64DFR0_EL1 = 0xc028, // 11 000 0000 0101 000 578dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines ID_A64DFR1_EL1 = 0xc029, // 11 000 0000 0101 001 579dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines ID_A64AFR0_EL1 = 0xc02c, // 11 000 0000 0101 100 580dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines ID_A64AFR1_EL1 = 0xc02d, // 11 000 0000 0101 101 581dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines ID_A64ISAR0_EL1 = 0xc030, // 11 000 0000 0110 000 582dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines ID_A64ISAR1_EL1 = 0xc031, // 11 000 0000 0110 001 583dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines ID_A64MMFR0_EL1 = 0xc038, // 11 000 0000 0111 000 584dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines ID_A64MMFR1_EL1 = 0xc039, // 11 000 0000 0111 001 58572062f5744557e270a38192554c3126ea5f97434Tim Northover MVFR0_EL1 = 0xc018, // 11 000 0000 0011 000 58672062f5744557e270a38192554c3126ea5f97434Tim Northover MVFR1_EL1 = 0xc019, // 11 000 0000 0011 001 58772062f5744557e270a38192554c3126ea5f97434Tim Northover MVFR2_EL1 = 0xc01a, // 11 000 0000 0011 010 58872062f5744557e270a38192554c3126ea5f97434Tim Northover RVBAR_EL1 = 0xc601, // 11 000 1100 0000 001 58972062f5744557e270a38192554c3126ea5f97434Tim Northover RVBAR_EL2 = 0xe601, // 11 100 1100 0000 001 59072062f5744557e270a38192554c3126ea5f97434Tim Northover RVBAR_EL3 = 0xf601, // 11 110 1100 0000 001 59172062f5744557e270a38192554c3126ea5f97434Tim Northover ISR_EL1 = 0xc608, // 11 000 1100 0001 000 59272062f5744557e270a38192554c3126ea5f97434Tim Northover CNTPCT_EL0 = 0xdf01, // 11 011 1110 0000 001 59342a1b2f0b196633c0327801e810fc98849a00c47Tim Northover CNTVCT_EL0 = 0xdf02, // 11 011 1110 0000 010 59442a1b2f0b196633c0327801e810fc98849a00c47Tim Northover 5954385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover // Trace registers 5964385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCSTATR = 0x8818, // 10 001 0000 0011 000 5974385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCIDR8 = 0x8806, // 10 001 0000 0000 110 5984385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCIDR9 = 0x880e, // 10 001 0000 0001 110 5994385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCIDR10 = 0x8816, // 10 001 0000 0010 110 6004385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCIDR11 = 0x881e, // 10 001 0000 0011 110 6014385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCIDR12 = 0x8826, // 10 001 0000 0100 110 6024385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCIDR13 = 0x882e, // 10 001 0000 0101 110 6034385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCIDR0 = 0x8847, // 10 001 0000 1000 111 6044385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCIDR1 = 0x884f, // 10 001 0000 1001 111 6054385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCIDR2 = 0x8857, // 10 001 0000 1010 111 6064385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCIDR3 = 0x885f, // 10 001 0000 1011 111 6074385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCIDR4 = 0x8867, // 10 001 0000 1100 111 6084385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCIDR5 = 0x886f, // 10 001 0000 1101 111 6094385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCIDR6 = 0x8877, // 10 001 0000 1110 111 6104385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCIDR7 = 0x887f, // 10 001 0000 1111 111 6114385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCOSLSR = 0x888c, // 10 001 0001 0001 100 6124385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCPDSR = 0x88ac, // 10 001 0001 0101 100 6134385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCDEVAFF0 = 0x8bd6, // 10 001 0111 1010 110 6144385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCDEVAFF1 = 0x8bde, // 10 001 0111 1011 110 6154385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCLSR = 0x8bee, // 10 001 0111 1101 110 6164385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCAUTHSTATUS = 0x8bf6, // 10 001 0111 1110 110 6174385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCDEVARCH = 0x8bfe, // 10 001 0111 1111 110 6184385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCDEVID = 0x8b97, // 10 001 0111 0010 111 6194385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCDEVTYPE = 0x8b9f, // 10 001 0111 0011 111 6204385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCPIDR4 = 0x8ba7, // 10 001 0111 0100 111 6214385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCPIDR5 = 0x8baf, // 10 001 0111 0101 111 6224385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCPIDR6 = 0x8bb7, // 10 001 0111 0110 111 6234385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCPIDR7 = 0x8bbf, // 10 001 0111 0111 111 6244385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCPIDR0 = 0x8bc7, // 10 001 0111 1000 111 6254385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCPIDR1 = 0x8bcf, // 10 001 0111 1001 111 6264385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCPIDR2 = 0x8bd7, // 10 001 0111 1010 111 6274385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCPIDR3 = 0x8bdf, // 10 001 0111 1011 111 6284385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCCIDR0 = 0x8be7, // 10 001 0111 1100 111 6294385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCCIDR1 = 0x8bef, // 10 001 0111 1101 111 6304385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCCIDR2 = 0x8bf7, // 10 001 0111 1110 111 6314385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCCIDR3 = 0x8bff, // 10 001 0111 1111 111 6324385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover 63342a1b2f0b196633c0327801e810fc98849a00c47Tim Northover // GICv3 registers 63442a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICC_IAR1_EL1 = 0xc660, // 11 000 1100 1100 000 63542a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICC_IAR0_EL1 = 0xc640, // 11 000 1100 1000 000 63642a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICC_HPPIR1_EL1 = 0xc662, // 11 000 1100 1100 010 63742a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICC_HPPIR0_EL1 = 0xc642, // 11 000 1100 1000 010 63842a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICC_RPR_EL1 = 0xc65b, // 11 000 1100 1011 011 63942a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICH_VTR_EL2 = 0xe659, // 11 100 1100 1011 001 64042a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICH_EISR_EL2 = 0xe65b, // 11 100 1100 1011 011 64142a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICH_ELSR_EL2 = 0xe65d // 11 100 1100 1011 101 64272062f5744557e270a38192554c3126ea5f97434Tim Northover }; 64372062f5744557e270a38192554c3126ea5f97434Tim Northover 64472062f5744557e270a38192554c3126ea5f97434Tim Northover enum SysRegWOValues { 64572062f5744557e270a38192554c3126ea5f97434Tim Northover DBGDTRTX_EL0 = 0x9828, // 10 011 0000 0101 000 64672062f5744557e270a38192554c3126ea5f97434Tim Northover OSLAR_EL1 = 0x8084, // 10 000 0001 0000 100 64742a1b2f0b196633c0327801e810fc98849a00c47Tim Northover PMSWINC_EL0 = 0xdce4, // 11 011 1001 1100 100 64842a1b2f0b196633c0327801e810fc98849a00c47Tim Northover 6494385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover // Trace Registers 6504385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCOSLAR = 0x8884, // 10 001 0001 0000 100 6514385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCLAR = 0x8be6, // 10 001 0111 1100 110 6524385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover 65342a1b2f0b196633c0327801e810fc98849a00c47Tim Northover // GICv3 registers 65442a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICC_EOIR1_EL1 = 0xc661, // 11 000 1100 1100 001 65542a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICC_EOIR0_EL1 = 0xc641, // 11 000 1100 1000 001 65642a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICC_DIR_EL1 = 0xc659, // 11 000 1100 1011 001 65742a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICC_SGI1R_EL1 = 0xc65d, // 11 000 1100 1011 101 65842a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICC_ASGI1R_EL1 = 0xc65e, // 11 000 1100 1011 110 65942a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICC_SGI0R_EL1 = 0xc65f // 11 000 1100 1011 111 66072062f5744557e270a38192554c3126ea5f97434Tim Northover }; 66172062f5744557e270a38192554c3126ea5f97434Tim Northover 66272062f5744557e270a38192554c3126ea5f97434Tim Northover enum SysRegValues { 66372062f5744557e270a38192554c3126ea5f97434Tim Northover Invalid = -1, // Op0 Op1 CRn CRm Op2 66472062f5744557e270a38192554c3126ea5f97434Tim Northover OSDTRRX_EL1 = 0x8002, // 10 000 0000 0000 010 66572062f5744557e270a38192554c3126ea5f97434Tim Northover OSDTRTX_EL1 = 0x801a, // 10 000 0000 0011 010 66672062f5744557e270a38192554c3126ea5f97434Tim Northover TEECR32_EL1 = 0x9000, // 10 010 0000 0000 000 66772062f5744557e270a38192554c3126ea5f97434Tim Northover MDCCINT_EL1 = 0x8010, // 10 000 0000 0010 000 66872062f5744557e270a38192554c3126ea5f97434Tim Northover MDSCR_EL1 = 0x8012, // 10 000 0000 0010 010 66972062f5744557e270a38192554c3126ea5f97434Tim Northover DBGDTR_EL0 = 0x9820, // 10 011 0000 0100 000 67072062f5744557e270a38192554c3126ea5f97434Tim Northover OSECCR_EL1 = 0x8032, // 10 000 0000 0110 010 67172062f5744557e270a38192554c3126ea5f97434Tim Northover DBGVCR32_EL2 = 0xa038, // 10 100 0000 0111 000 67272062f5744557e270a38192554c3126ea5f97434Tim Northover DBGBVR0_EL1 = 0x8004, // 10 000 0000 0000 100 67372062f5744557e270a38192554c3126ea5f97434Tim Northover DBGBVR1_EL1 = 0x800c, // 10 000 0000 0001 100 67472062f5744557e270a38192554c3126ea5f97434Tim Northover DBGBVR2_EL1 = 0x8014, // 10 000 0000 0010 100 67572062f5744557e270a38192554c3126ea5f97434Tim Northover DBGBVR3_EL1 = 0x801c, // 10 000 0000 0011 100 67672062f5744557e270a38192554c3126ea5f97434Tim Northover DBGBVR4_EL1 = 0x8024, // 10 000 0000 0100 100 67772062f5744557e270a38192554c3126ea5f97434Tim Northover DBGBVR5_EL1 = 0x802c, // 10 000 0000 0101 100 67872062f5744557e270a38192554c3126ea5f97434Tim Northover DBGBVR6_EL1 = 0x8034, // 10 000 0000 0110 100 67972062f5744557e270a38192554c3126ea5f97434Tim Northover DBGBVR7_EL1 = 0x803c, // 10 000 0000 0111 100 68072062f5744557e270a38192554c3126ea5f97434Tim Northover DBGBVR8_EL1 = 0x8044, // 10 000 0000 1000 100 68172062f5744557e270a38192554c3126ea5f97434Tim Northover DBGBVR9_EL1 = 0x804c, // 10 000 0000 1001 100 68272062f5744557e270a38192554c3126ea5f97434Tim Northover DBGBVR10_EL1 = 0x8054, // 10 000 0000 1010 100 68372062f5744557e270a38192554c3126ea5f97434Tim Northover DBGBVR11_EL1 = 0x805c, // 10 000 0000 1011 100 68472062f5744557e270a38192554c3126ea5f97434Tim Northover DBGBVR12_EL1 = 0x8064, // 10 000 0000 1100 100 68572062f5744557e270a38192554c3126ea5f97434Tim Northover DBGBVR13_EL1 = 0x806c, // 10 000 0000 1101 100 68672062f5744557e270a38192554c3126ea5f97434Tim Northover DBGBVR14_EL1 = 0x8074, // 10 000 0000 1110 100 68772062f5744557e270a38192554c3126ea5f97434Tim Northover DBGBVR15_EL1 = 0x807c, // 10 000 0000 1111 100 68872062f5744557e270a38192554c3126ea5f97434Tim Northover DBGBCR0_EL1 = 0x8005, // 10 000 0000 0000 101 68972062f5744557e270a38192554c3126ea5f97434Tim Northover DBGBCR1_EL1 = 0x800d, // 10 000 0000 0001 101 69072062f5744557e270a38192554c3126ea5f97434Tim Northover DBGBCR2_EL1 = 0x8015, // 10 000 0000 0010 101 69172062f5744557e270a38192554c3126ea5f97434Tim Northover DBGBCR3_EL1 = 0x801d, // 10 000 0000 0011 101 69272062f5744557e270a38192554c3126ea5f97434Tim Northover DBGBCR4_EL1 = 0x8025, // 10 000 0000 0100 101 69372062f5744557e270a38192554c3126ea5f97434Tim Northover DBGBCR5_EL1 = 0x802d, // 10 000 0000 0101 101 69472062f5744557e270a38192554c3126ea5f97434Tim Northover DBGBCR6_EL1 = 0x8035, // 10 000 0000 0110 101 69572062f5744557e270a38192554c3126ea5f97434Tim Northover DBGBCR7_EL1 = 0x803d, // 10 000 0000 0111 101 69672062f5744557e270a38192554c3126ea5f97434Tim Northover DBGBCR8_EL1 = 0x8045, // 10 000 0000 1000 101 69772062f5744557e270a38192554c3126ea5f97434Tim Northover DBGBCR9_EL1 = 0x804d, // 10 000 0000 1001 101 69872062f5744557e270a38192554c3126ea5f97434Tim Northover DBGBCR10_EL1 = 0x8055, // 10 000 0000 1010 101 69972062f5744557e270a38192554c3126ea5f97434Tim Northover DBGBCR11_EL1 = 0x805d, // 10 000 0000 1011 101 70072062f5744557e270a38192554c3126ea5f97434Tim Northover DBGBCR12_EL1 = 0x8065, // 10 000 0000 1100 101 70172062f5744557e270a38192554c3126ea5f97434Tim Northover DBGBCR13_EL1 = 0x806d, // 10 000 0000 1101 101 70272062f5744557e270a38192554c3126ea5f97434Tim Northover DBGBCR14_EL1 = 0x8075, // 10 000 0000 1110 101 70372062f5744557e270a38192554c3126ea5f97434Tim Northover DBGBCR15_EL1 = 0x807d, // 10 000 0000 1111 101 70472062f5744557e270a38192554c3126ea5f97434Tim Northover DBGWVR0_EL1 = 0x8006, // 10 000 0000 0000 110 70572062f5744557e270a38192554c3126ea5f97434Tim Northover DBGWVR1_EL1 = 0x800e, // 10 000 0000 0001 110 70672062f5744557e270a38192554c3126ea5f97434Tim Northover DBGWVR2_EL1 = 0x8016, // 10 000 0000 0010 110 70772062f5744557e270a38192554c3126ea5f97434Tim Northover DBGWVR3_EL1 = 0x801e, // 10 000 0000 0011 110 70872062f5744557e270a38192554c3126ea5f97434Tim Northover DBGWVR4_EL1 = 0x8026, // 10 000 0000 0100 110 70972062f5744557e270a38192554c3126ea5f97434Tim Northover DBGWVR5_EL1 = 0x802e, // 10 000 0000 0101 110 71072062f5744557e270a38192554c3126ea5f97434Tim Northover DBGWVR6_EL1 = 0x8036, // 10 000 0000 0110 110 71172062f5744557e270a38192554c3126ea5f97434Tim Northover DBGWVR7_EL1 = 0x803e, // 10 000 0000 0111 110 71272062f5744557e270a38192554c3126ea5f97434Tim Northover DBGWVR8_EL1 = 0x8046, // 10 000 0000 1000 110 71372062f5744557e270a38192554c3126ea5f97434Tim Northover DBGWVR9_EL1 = 0x804e, // 10 000 0000 1001 110 71472062f5744557e270a38192554c3126ea5f97434Tim Northover DBGWVR10_EL1 = 0x8056, // 10 000 0000 1010 110 71572062f5744557e270a38192554c3126ea5f97434Tim Northover DBGWVR11_EL1 = 0x805e, // 10 000 0000 1011 110 71672062f5744557e270a38192554c3126ea5f97434Tim Northover DBGWVR12_EL1 = 0x8066, // 10 000 0000 1100 110 71772062f5744557e270a38192554c3126ea5f97434Tim Northover DBGWVR13_EL1 = 0x806e, // 10 000 0000 1101 110 71872062f5744557e270a38192554c3126ea5f97434Tim Northover DBGWVR14_EL1 = 0x8076, // 10 000 0000 1110 110 71972062f5744557e270a38192554c3126ea5f97434Tim Northover DBGWVR15_EL1 = 0x807e, // 10 000 0000 1111 110 72072062f5744557e270a38192554c3126ea5f97434Tim Northover DBGWCR0_EL1 = 0x8007, // 10 000 0000 0000 111 72172062f5744557e270a38192554c3126ea5f97434Tim Northover DBGWCR1_EL1 = 0x800f, // 10 000 0000 0001 111 72272062f5744557e270a38192554c3126ea5f97434Tim Northover DBGWCR2_EL1 = 0x8017, // 10 000 0000 0010 111 72372062f5744557e270a38192554c3126ea5f97434Tim Northover DBGWCR3_EL1 = 0x801f, // 10 000 0000 0011 111 72472062f5744557e270a38192554c3126ea5f97434Tim Northover DBGWCR4_EL1 = 0x8027, // 10 000 0000 0100 111 72572062f5744557e270a38192554c3126ea5f97434Tim Northover DBGWCR5_EL1 = 0x802f, // 10 000 0000 0101 111 72672062f5744557e270a38192554c3126ea5f97434Tim Northover DBGWCR6_EL1 = 0x8037, // 10 000 0000 0110 111 72772062f5744557e270a38192554c3126ea5f97434Tim Northover DBGWCR7_EL1 = 0x803f, // 10 000 0000 0111 111 72872062f5744557e270a38192554c3126ea5f97434Tim Northover DBGWCR8_EL1 = 0x8047, // 10 000 0000 1000 111 72972062f5744557e270a38192554c3126ea5f97434Tim Northover DBGWCR9_EL1 = 0x804f, // 10 000 0000 1001 111 73072062f5744557e270a38192554c3126ea5f97434Tim Northover DBGWCR10_EL1 = 0x8057, // 10 000 0000 1010 111 73172062f5744557e270a38192554c3126ea5f97434Tim Northover DBGWCR11_EL1 = 0x805f, // 10 000 0000 1011 111 73272062f5744557e270a38192554c3126ea5f97434Tim Northover DBGWCR12_EL1 = 0x8067, // 10 000 0000 1100 111 73372062f5744557e270a38192554c3126ea5f97434Tim Northover DBGWCR13_EL1 = 0x806f, // 10 000 0000 1101 111 73472062f5744557e270a38192554c3126ea5f97434Tim Northover DBGWCR14_EL1 = 0x8077, // 10 000 0000 1110 111 73572062f5744557e270a38192554c3126ea5f97434Tim Northover DBGWCR15_EL1 = 0x807f, // 10 000 0000 1111 111 73672062f5744557e270a38192554c3126ea5f97434Tim Northover TEEHBR32_EL1 = 0x9080, // 10 010 0001 0000 000 73772062f5744557e270a38192554c3126ea5f97434Tim Northover OSDLR_EL1 = 0x809c, // 10 000 0001 0011 100 73872062f5744557e270a38192554c3126ea5f97434Tim Northover DBGPRCR_EL1 = 0x80a4, // 10 000 0001 0100 100 73972062f5744557e270a38192554c3126ea5f97434Tim Northover DBGCLAIMSET_EL1 = 0x83c6, // 10 000 0111 1000 110 74072062f5744557e270a38192554c3126ea5f97434Tim Northover DBGCLAIMCLR_EL1 = 0x83ce, // 10 000 0111 1001 110 74172062f5744557e270a38192554c3126ea5f97434Tim Northover CSSELR_EL1 = 0xd000, // 11 010 0000 0000 000 74272062f5744557e270a38192554c3126ea5f97434Tim Northover VPIDR_EL2 = 0xe000, // 11 100 0000 0000 000 74372062f5744557e270a38192554c3126ea5f97434Tim Northover VMPIDR_EL2 = 0xe005, // 11 100 0000 0000 101 74472062f5744557e270a38192554c3126ea5f97434Tim Northover CPACR_EL1 = 0xc082, // 11 000 0001 0000 010 74572062f5744557e270a38192554c3126ea5f97434Tim Northover SCTLR_EL1 = 0xc080, // 11 000 0001 0000 000 74672062f5744557e270a38192554c3126ea5f97434Tim Northover SCTLR_EL2 = 0xe080, // 11 100 0001 0000 000 74772062f5744557e270a38192554c3126ea5f97434Tim Northover SCTLR_EL3 = 0xf080, // 11 110 0001 0000 000 74872062f5744557e270a38192554c3126ea5f97434Tim Northover ACTLR_EL1 = 0xc081, // 11 000 0001 0000 001 74972062f5744557e270a38192554c3126ea5f97434Tim Northover ACTLR_EL2 = 0xe081, // 11 100 0001 0000 001 75072062f5744557e270a38192554c3126ea5f97434Tim Northover ACTLR_EL3 = 0xf081, // 11 110 0001 0000 001 75172062f5744557e270a38192554c3126ea5f97434Tim Northover HCR_EL2 = 0xe088, // 11 100 0001 0001 000 75272062f5744557e270a38192554c3126ea5f97434Tim Northover SCR_EL3 = 0xf088, // 11 110 0001 0001 000 75372062f5744557e270a38192554c3126ea5f97434Tim Northover MDCR_EL2 = 0xe089, // 11 100 0001 0001 001 75472062f5744557e270a38192554c3126ea5f97434Tim Northover SDER32_EL3 = 0xf089, // 11 110 0001 0001 001 75572062f5744557e270a38192554c3126ea5f97434Tim Northover CPTR_EL2 = 0xe08a, // 11 100 0001 0001 010 75672062f5744557e270a38192554c3126ea5f97434Tim Northover CPTR_EL3 = 0xf08a, // 11 110 0001 0001 010 75772062f5744557e270a38192554c3126ea5f97434Tim Northover HSTR_EL2 = 0xe08b, // 11 100 0001 0001 011 75872062f5744557e270a38192554c3126ea5f97434Tim Northover HACR_EL2 = 0xe08f, // 11 100 0001 0001 111 75972062f5744557e270a38192554c3126ea5f97434Tim Northover MDCR_EL3 = 0xf099, // 11 110 0001 0011 001 76072062f5744557e270a38192554c3126ea5f97434Tim Northover TTBR0_EL1 = 0xc100, // 11 000 0010 0000 000 76172062f5744557e270a38192554c3126ea5f97434Tim Northover TTBR0_EL2 = 0xe100, // 11 100 0010 0000 000 76272062f5744557e270a38192554c3126ea5f97434Tim Northover TTBR0_EL3 = 0xf100, // 11 110 0010 0000 000 76372062f5744557e270a38192554c3126ea5f97434Tim Northover TTBR1_EL1 = 0xc101, // 11 000 0010 0000 001 76472062f5744557e270a38192554c3126ea5f97434Tim Northover TCR_EL1 = 0xc102, // 11 000 0010 0000 010 76572062f5744557e270a38192554c3126ea5f97434Tim Northover TCR_EL2 = 0xe102, // 11 100 0010 0000 010 76672062f5744557e270a38192554c3126ea5f97434Tim Northover TCR_EL3 = 0xf102, // 11 110 0010 0000 010 76772062f5744557e270a38192554c3126ea5f97434Tim Northover VTTBR_EL2 = 0xe108, // 11 100 0010 0001 000 76872062f5744557e270a38192554c3126ea5f97434Tim Northover VTCR_EL2 = 0xe10a, // 11 100 0010 0001 010 76972062f5744557e270a38192554c3126ea5f97434Tim Northover DACR32_EL2 = 0xe180, // 11 100 0011 0000 000 77072062f5744557e270a38192554c3126ea5f97434Tim Northover SPSR_EL1 = 0xc200, // 11 000 0100 0000 000 77172062f5744557e270a38192554c3126ea5f97434Tim Northover SPSR_EL2 = 0xe200, // 11 100 0100 0000 000 77272062f5744557e270a38192554c3126ea5f97434Tim Northover SPSR_EL3 = 0xf200, // 11 110 0100 0000 000 77372062f5744557e270a38192554c3126ea5f97434Tim Northover ELR_EL1 = 0xc201, // 11 000 0100 0000 001 77472062f5744557e270a38192554c3126ea5f97434Tim Northover ELR_EL2 = 0xe201, // 11 100 0100 0000 001 77572062f5744557e270a38192554c3126ea5f97434Tim Northover ELR_EL3 = 0xf201, // 11 110 0100 0000 001 77672062f5744557e270a38192554c3126ea5f97434Tim Northover SP_EL0 = 0xc208, // 11 000 0100 0001 000 77772062f5744557e270a38192554c3126ea5f97434Tim Northover SP_EL1 = 0xe208, // 11 100 0100 0001 000 77872062f5744557e270a38192554c3126ea5f97434Tim Northover SP_EL2 = 0xf208, // 11 110 0100 0001 000 77972062f5744557e270a38192554c3126ea5f97434Tim Northover SPSel = 0xc210, // 11 000 0100 0010 000 78072062f5744557e270a38192554c3126ea5f97434Tim Northover NZCV = 0xda10, // 11 011 0100 0010 000 78172062f5744557e270a38192554c3126ea5f97434Tim Northover DAIF = 0xda11, // 11 011 0100 0010 001 78272062f5744557e270a38192554c3126ea5f97434Tim Northover CurrentEL = 0xc212, // 11 000 0100 0010 010 78372062f5744557e270a38192554c3126ea5f97434Tim Northover SPSR_irq = 0xe218, // 11 100 0100 0011 000 78472062f5744557e270a38192554c3126ea5f97434Tim Northover SPSR_abt = 0xe219, // 11 100 0100 0011 001 78572062f5744557e270a38192554c3126ea5f97434Tim Northover SPSR_und = 0xe21a, // 11 100 0100 0011 010 78672062f5744557e270a38192554c3126ea5f97434Tim Northover SPSR_fiq = 0xe21b, // 11 100 0100 0011 011 78772062f5744557e270a38192554c3126ea5f97434Tim Northover FPCR = 0xda20, // 11 011 0100 0100 000 78872062f5744557e270a38192554c3126ea5f97434Tim Northover FPSR = 0xda21, // 11 011 0100 0100 001 78972062f5744557e270a38192554c3126ea5f97434Tim Northover DSPSR_EL0 = 0xda28, // 11 011 0100 0101 000 79072062f5744557e270a38192554c3126ea5f97434Tim Northover DLR_EL0 = 0xda29, // 11 011 0100 0101 001 79172062f5744557e270a38192554c3126ea5f97434Tim Northover IFSR32_EL2 = 0xe281, // 11 100 0101 0000 001 79272062f5744557e270a38192554c3126ea5f97434Tim Northover AFSR0_EL1 = 0xc288, // 11 000 0101 0001 000 79372062f5744557e270a38192554c3126ea5f97434Tim Northover AFSR0_EL2 = 0xe288, // 11 100 0101 0001 000 79472062f5744557e270a38192554c3126ea5f97434Tim Northover AFSR0_EL3 = 0xf288, // 11 110 0101 0001 000 79572062f5744557e270a38192554c3126ea5f97434Tim Northover AFSR1_EL1 = 0xc289, // 11 000 0101 0001 001 79672062f5744557e270a38192554c3126ea5f97434Tim Northover AFSR1_EL2 = 0xe289, // 11 100 0101 0001 001 79772062f5744557e270a38192554c3126ea5f97434Tim Northover AFSR1_EL3 = 0xf289, // 11 110 0101 0001 001 79872062f5744557e270a38192554c3126ea5f97434Tim Northover ESR_EL1 = 0xc290, // 11 000 0101 0010 000 79972062f5744557e270a38192554c3126ea5f97434Tim Northover ESR_EL2 = 0xe290, // 11 100 0101 0010 000 80072062f5744557e270a38192554c3126ea5f97434Tim Northover ESR_EL3 = 0xf290, // 11 110 0101 0010 000 80172062f5744557e270a38192554c3126ea5f97434Tim Northover FPEXC32_EL2 = 0xe298, // 11 100 0101 0011 000 80272062f5744557e270a38192554c3126ea5f97434Tim Northover FAR_EL1 = 0xc300, // 11 000 0110 0000 000 80372062f5744557e270a38192554c3126ea5f97434Tim Northover FAR_EL2 = 0xe300, // 11 100 0110 0000 000 80472062f5744557e270a38192554c3126ea5f97434Tim Northover FAR_EL3 = 0xf300, // 11 110 0110 0000 000 80572062f5744557e270a38192554c3126ea5f97434Tim Northover HPFAR_EL2 = 0xe304, // 11 100 0110 0000 100 80672062f5744557e270a38192554c3126ea5f97434Tim Northover PAR_EL1 = 0xc3a0, // 11 000 0111 0100 000 80772062f5744557e270a38192554c3126ea5f97434Tim Northover PMCR_EL0 = 0xdce0, // 11 011 1001 1100 000 80872062f5744557e270a38192554c3126ea5f97434Tim Northover PMCNTENSET_EL0 = 0xdce1, // 11 011 1001 1100 001 80972062f5744557e270a38192554c3126ea5f97434Tim Northover PMCNTENCLR_EL0 = 0xdce2, // 11 011 1001 1100 010 81072062f5744557e270a38192554c3126ea5f97434Tim Northover PMOVSCLR_EL0 = 0xdce3, // 11 011 1001 1100 011 81172062f5744557e270a38192554c3126ea5f97434Tim Northover PMSELR_EL0 = 0xdce5, // 11 011 1001 1100 101 81272062f5744557e270a38192554c3126ea5f97434Tim Northover PMCCNTR_EL0 = 0xdce8, // 11 011 1001 1101 000 81372062f5744557e270a38192554c3126ea5f97434Tim Northover PMXEVTYPER_EL0 = 0xdce9, // 11 011 1001 1101 001 81472062f5744557e270a38192554c3126ea5f97434Tim Northover PMXEVCNTR_EL0 = 0xdcea, // 11 011 1001 1101 010 81572062f5744557e270a38192554c3126ea5f97434Tim Northover PMUSERENR_EL0 = 0xdcf0, // 11 011 1001 1110 000 81672062f5744557e270a38192554c3126ea5f97434Tim Northover PMINTENSET_EL1 = 0xc4f1, // 11 000 1001 1110 001 81772062f5744557e270a38192554c3126ea5f97434Tim Northover PMINTENCLR_EL1 = 0xc4f2, // 11 000 1001 1110 010 81872062f5744557e270a38192554c3126ea5f97434Tim Northover PMOVSSET_EL0 = 0xdcf3, // 11 011 1001 1110 011 81972062f5744557e270a38192554c3126ea5f97434Tim Northover MAIR_EL1 = 0xc510, // 11 000 1010 0010 000 82072062f5744557e270a38192554c3126ea5f97434Tim Northover MAIR_EL2 = 0xe510, // 11 100 1010 0010 000 82172062f5744557e270a38192554c3126ea5f97434Tim Northover MAIR_EL3 = 0xf510, // 11 110 1010 0010 000 82272062f5744557e270a38192554c3126ea5f97434Tim Northover AMAIR_EL1 = 0xc518, // 11 000 1010 0011 000 82372062f5744557e270a38192554c3126ea5f97434Tim Northover AMAIR_EL2 = 0xe518, // 11 100 1010 0011 000 82472062f5744557e270a38192554c3126ea5f97434Tim Northover AMAIR_EL3 = 0xf518, // 11 110 1010 0011 000 82572062f5744557e270a38192554c3126ea5f97434Tim Northover VBAR_EL1 = 0xc600, // 11 000 1100 0000 000 82672062f5744557e270a38192554c3126ea5f97434Tim Northover VBAR_EL2 = 0xe600, // 11 100 1100 0000 000 82772062f5744557e270a38192554c3126ea5f97434Tim Northover VBAR_EL3 = 0xf600, // 11 110 1100 0000 000 82872062f5744557e270a38192554c3126ea5f97434Tim Northover RMR_EL1 = 0xc602, // 11 000 1100 0000 010 82972062f5744557e270a38192554c3126ea5f97434Tim Northover RMR_EL2 = 0xe602, // 11 100 1100 0000 010 83072062f5744557e270a38192554c3126ea5f97434Tim Northover RMR_EL3 = 0xf602, // 11 110 1100 0000 010 83172062f5744557e270a38192554c3126ea5f97434Tim Northover CONTEXTIDR_EL1 = 0xc681, // 11 000 1101 0000 001 83272062f5744557e270a38192554c3126ea5f97434Tim Northover TPIDR_EL0 = 0xde82, // 11 011 1101 0000 010 83372062f5744557e270a38192554c3126ea5f97434Tim Northover TPIDR_EL2 = 0xe682, // 11 100 1101 0000 010 83472062f5744557e270a38192554c3126ea5f97434Tim Northover TPIDR_EL3 = 0xf682, // 11 110 1101 0000 010 83572062f5744557e270a38192554c3126ea5f97434Tim Northover TPIDRRO_EL0 = 0xde83, // 11 011 1101 0000 011 83672062f5744557e270a38192554c3126ea5f97434Tim Northover TPIDR_EL1 = 0xc684, // 11 000 1101 0000 100 83772062f5744557e270a38192554c3126ea5f97434Tim Northover CNTFRQ_EL0 = 0xdf00, // 11 011 1110 0000 000 83872062f5744557e270a38192554c3126ea5f97434Tim Northover CNTVOFF_EL2 = 0xe703, // 11 100 1110 0000 011 83972062f5744557e270a38192554c3126ea5f97434Tim Northover CNTKCTL_EL1 = 0xc708, // 11 000 1110 0001 000 84072062f5744557e270a38192554c3126ea5f97434Tim Northover CNTHCTL_EL2 = 0xe708, // 11 100 1110 0001 000 84172062f5744557e270a38192554c3126ea5f97434Tim Northover CNTP_TVAL_EL0 = 0xdf10, // 11 011 1110 0010 000 84272062f5744557e270a38192554c3126ea5f97434Tim Northover CNTHP_TVAL_EL2 = 0xe710, // 11 100 1110 0010 000 84372062f5744557e270a38192554c3126ea5f97434Tim Northover CNTPS_TVAL_EL1 = 0xff10, // 11 111 1110 0010 000 84472062f5744557e270a38192554c3126ea5f97434Tim Northover CNTP_CTL_EL0 = 0xdf11, // 11 011 1110 0010 001 84572062f5744557e270a38192554c3126ea5f97434Tim Northover CNTHP_CTL_EL2 = 0xe711, // 11 100 1110 0010 001 84672062f5744557e270a38192554c3126ea5f97434Tim Northover CNTPS_CTL_EL1 = 0xff11, // 11 111 1110 0010 001 84772062f5744557e270a38192554c3126ea5f97434Tim Northover CNTP_CVAL_EL0 = 0xdf12, // 11 011 1110 0010 010 84872062f5744557e270a38192554c3126ea5f97434Tim Northover CNTHP_CVAL_EL2 = 0xe712, // 11 100 1110 0010 010 84972062f5744557e270a38192554c3126ea5f97434Tim Northover CNTPS_CVAL_EL1 = 0xff12, // 11 111 1110 0010 010 85072062f5744557e270a38192554c3126ea5f97434Tim Northover CNTV_TVAL_EL0 = 0xdf18, // 11 011 1110 0011 000 85172062f5744557e270a38192554c3126ea5f97434Tim Northover CNTV_CTL_EL0 = 0xdf19, // 11 011 1110 0011 001 85272062f5744557e270a38192554c3126ea5f97434Tim Northover CNTV_CVAL_EL0 = 0xdf1a, // 11 011 1110 0011 010 85372062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVCNTR0_EL0 = 0xdf40, // 11 011 1110 1000 000 85472062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVCNTR1_EL0 = 0xdf41, // 11 011 1110 1000 001 85572062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVCNTR2_EL0 = 0xdf42, // 11 011 1110 1000 010 85672062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVCNTR3_EL0 = 0xdf43, // 11 011 1110 1000 011 85772062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVCNTR4_EL0 = 0xdf44, // 11 011 1110 1000 100 85872062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVCNTR5_EL0 = 0xdf45, // 11 011 1110 1000 101 85972062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVCNTR6_EL0 = 0xdf46, // 11 011 1110 1000 110 86072062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVCNTR7_EL0 = 0xdf47, // 11 011 1110 1000 111 86172062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVCNTR8_EL0 = 0xdf48, // 11 011 1110 1001 000 86272062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVCNTR9_EL0 = 0xdf49, // 11 011 1110 1001 001 86372062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVCNTR10_EL0 = 0xdf4a, // 11 011 1110 1001 010 86472062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVCNTR11_EL0 = 0xdf4b, // 11 011 1110 1001 011 86572062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVCNTR12_EL0 = 0xdf4c, // 11 011 1110 1001 100 86672062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVCNTR13_EL0 = 0xdf4d, // 11 011 1110 1001 101 86772062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVCNTR14_EL0 = 0xdf4e, // 11 011 1110 1001 110 86872062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVCNTR15_EL0 = 0xdf4f, // 11 011 1110 1001 111 86972062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVCNTR16_EL0 = 0xdf50, // 11 011 1110 1010 000 87072062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVCNTR17_EL0 = 0xdf51, // 11 011 1110 1010 001 87172062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVCNTR18_EL0 = 0xdf52, // 11 011 1110 1010 010 87272062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVCNTR19_EL0 = 0xdf53, // 11 011 1110 1010 011 87372062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVCNTR20_EL0 = 0xdf54, // 11 011 1110 1010 100 87472062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVCNTR21_EL0 = 0xdf55, // 11 011 1110 1010 101 87572062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVCNTR22_EL0 = 0xdf56, // 11 011 1110 1010 110 87672062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVCNTR23_EL0 = 0xdf57, // 11 011 1110 1010 111 87772062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVCNTR24_EL0 = 0xdf58, // 11 011 1110 1011 000 87872062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVCNTR25_EL0 = 0xdf59, // 11 011 1110 1011 001 87972062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVCNTR26_EL0 = 0xdf5a, // 11 011 1110 1011 010 88072062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVCNTR27_EL0 = 0xdf5b, // 11 011 1110 1011 011 88172062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVCNTR28_EL0 = 0xdf5c, // 11 011 1110 1011 100 88272062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVCNTR29_EL0 = 0xdf5d, // 11 011 1110 1011 101 88372062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVCNTR30_EL0 = 0xdf5e, // 11 011 1110 1011 110 88472062f5744557e270a38192554c3126ea5f97434Tim Northover PMCCFILTR_EL0 = 0xdf7f, // 11 011 1110 1111 111 88572062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVTYPER0_EL0 = 0xdf60, // 11 011 1110 1100 000 88672062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVTYPER1_EL0 = 0xdf61, // 11 011 1110 1100 001 88772062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVTYPER2_EL0 = 0xdf62, // 11 011 1110 1100 010 88872062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVTYPER3_EL0 = 0xdf63, // 11 011 1110 1100 011 88972062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVTYPER4_EL0 = 0xdf64, // 11 011 1110 1100 100 89072062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVTYPER5_EL0 = 0xdf65, // 11 011 1110 1100 101 89172062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVTYPER6_EL0 = 0xdf66, // 11 011 1110 1100 110 89272062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVTYPER7_EL0 = 0xdf67, // 11 011 1110 1100 111 89372062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVTYPER8_EL0 = 0xdf68, // 11 011 1110 1101 000 89472062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVTYPER9_EL0 = 0xdf69, // 11 011 1110 1101 001 89572062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVTYPER10_EL0 = 0xdf6a, // 11 011 1110 1101 010 89672062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVTYPER11_EL0 = 0xdf6b, // 11 011 1110 1101 011 89772062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVTYPER12_EL0 = 0xdf6c, // 11 011 1110 1101 100 89872062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVTYPER13_EL0 = 0xdf6d, // 11 011 1110 1101 101 89972062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVTYPER14_EL0 = 0xdf6e, // 11 011 1110 1101 110 90072062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVTYPER15_EL0 = 0xdf6f, // 11 011 1110 1101 111 90172062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVTYPER16_EL0 = 0xdf70, // 11 011 1110 1110 000 90272062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVTYPER17_EL0 = 0xdf71, // 11 011 1110 1110 001 90372062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVTYPER18_EL0 = 0xdf72, // 11 011 1110 1110 010 90472062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVTYPER19_EL0 = 0xdf73, // 11 011 1110 1110 011 90572062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVTYPER20_EL0 = 0xdf74, // 11 011 1110 1110 100 90672062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVTYPER21_EL0 = 0xdf75, // 11 011 1110 1110 101 90772062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVTYPER22_EL0 = 0xdf76, // 11 011 1110 1110 110 90872062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVTYPER23_EL0 = 0xdf77, // 11 011 1110 1110 111 90972062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVTYPER24_EL0 = 0xdf78, // 11 011 1110 1111 000 91072062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVTYPER25_EL0 = 0xdf79, // 11 011 1110 1111 001 91172062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVTYPER26_EL0 = 0xdf7a, // 11 011 1110 1111 010 91272062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVTYPER27_EL0 = 0xdf7b, // 11 011 1110 1111 011 91372062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVTYPER28_EL0 = 0xdf7c, // 11 011 1110 1111 100 91472062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVTYPER29_EL0 = 0xdf7d, // 11 011 1110 1111 101 91542a1b2f0b196633c0327801e810fc98849a00c47Tim Northover PMEVTYPER30_EL0 = 0xdf7e, // 11 011 1110 1111 110 91642a1b2f0b196633c0327801e810fc98849a00c47Tim Northover 9174385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover // Trace registers 9184385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCPRGCTLR = 0x8808, // 10 001 0000 0001 000 9194385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCPROCSELR = 0x8810, // 10 001 0000 0010 000 9204385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCCONFIGR = 0x8820, // 10 001 0000 0100 000 9214385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCAUXCTLR = 0x8830, // 10 001 0000 0110 000 9224385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCEVENTCTL0R = 0x8840, // 10 001 0000 1000 000 9234385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCEVENTCTL1R = 0x8848, // 10 001 0000 1001 000 9244385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCSTALLCTLR = 0x8858, // 10 001 0000 1011 000 9254385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCTSCTLR = 0x8860, // 10 001 0000 1100 000 9264385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCSYNCPR = 0x8868, // 10 001 0000 1101 000 9274385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCCCCTLR = 0x8870, // 10 001 0000 1110 000 9284385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCBBCTLR = 0x8878, // 10 001 0000 1111 000 9294385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCTRACEIDR = 0x8801, // 10 001 0000 0000 001 9304385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCQCTLR = 0x8809, // 10 001 0000 0001 001 9314385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCVICTLR = 0x8802, // 10 001 0000 0000 010 9324385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCVIIECTLR = 0x880a, // 10 001 0000 0001 010 9334385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCVISSCTLR = 0x8812, // 10 001 0000 0010 010 9344385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCVIPCSSCTLR = 0x881a, // 10 001 0000 0011 010 9354385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCVDCTLR = 0x8842, // 10 001 0000 1000 010 9364385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCVDSACCTLR = 0x884a, // 10 001 0000 1001 010 9374385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCVDARCCTLR = 0x8852, // 10 001 0000 1010 010 9384385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCSEQEVR0 = 0x8804, // 10 001 0000 0000 100 9394385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCSEQEVR1 = 0x880c, // 10 001 0000 0001 100 9404385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCSEQEVR2 = 0x8814, // 10 001 0000 0010 100 9414385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCSEQRSTEVR = 0x8834, // 10 001 0000 0110 100 9424385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCSEQSTR = 0x883c, // 10 001 0000 0111 100 9434385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCEXTINSELR = 0x8844, // 10 001 0000 1000 100 9444385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCCNTRLDVR0 = 0x8805, // 10 001 0000 0000 101 9454385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCCNTRLDVR1 = 0x880d, // 10 001 0000 0001 101 9464385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCCNTRLDVR2 = 0x8815, // 10 001 0000 0010 101 9474385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCCNTRLDVR3 = 0x881d, // 10 001 0000 0011 101 9484385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCCNTCTLR0 = 0x8825, // 10 001 0000 0100 101 9494385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCCNTCTLR1 = 0x882d, // 10 001 0000 0101 101 9504385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCCNTCTLR2 = 0x8835, // 10 001 0000 0110 101 9514385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCCNTCTLR3 = 0x883d, // 10 001 0000 0111 101 9524385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCCNTVR0 = 0x8845, // 10 001 0000 1000 101 9534385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCCNTVR1 = 0x884d, // 10 001 0000 1001 101 9544385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCCNTVR2 = 0x8855, // 10 001 0000 1010 101 9554385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCCNTVR3 = 0x885d, // 10 001 0000 1011 101 9564385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCIMSPEC0 = 0x8807, // 10 001 0000 0000 111 9574385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCIMSPEC1 = 0x880f, // 10 001 0000 0001 111 9584385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCIMSPEC2 = 0x8817, // 10 001 0000 0010 111 9594385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCIMSPEC3 = 0x881f, // 10 001 0000 0011 111 9604385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCIMSPEC4 = 0x8827, // 10 001 0000 0100 111 9614385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCIMSPEC5 = 0x882f, // 10 001 0000 0101 111 9624385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCIMSPEC6 = 0x8837, // 10 001 0000 0110 111 9634385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCIMSPEC7 = 0x883f, // 10 001 0000 0111 111 9644385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCRSCTLR2 = 0x8890, // 10 001 0001 0010 000 9654385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCRSCTLR3 = 0x8898, // 10 001 0001 0011 000 9664385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCRSCTLR4 = 0x88a0, // 10 001 0001 0100 000 9674385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCRSCTLR5 = 0x88a8, // 10 001 0001 0101 000 9684385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCRSCTLR6 = 0x88b0, // 10 001 0001 0110 000 9694385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCRSCTLR7 = 0x88b8, // 10 001 0001 0111 000 9704385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCRSCTLR8 = 0x88c0, // 10 001 0001 1000 000 9714385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCRSCTLR9 = 0x88c8, // 10 001 0001 1001 000 9724385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCRSCTLR10 = 0x88d0, // 10 001 0001 1010 000 9734385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCRSCTLR11 = 0x88d8, // 10 001 0001 1011 000 9744385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCRSCTLR12 = 0x88e0, // 10 001 0001 1100 000 9754385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCRSCTLR13 = 0x88e8, // 10 001 0001 1101 000 9764385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCRSCTLR14 = 0x88f0, // 10 001 0001 1110 000 9774385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCRSCTLR15 = 0x88f8, // 10 001 0001 1111 000 9784385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCRSCTLR16 = 0x8881, // 10 001 0001 0000 001 9794385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCRSCTLR17 = 0x8889, // 10 001 0001 0001 001 9804385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCRSCTLR18 = 0x8891, // 10 001 0001 0010 001 9814385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCRSCTLR19 = 0x8899, // 10 001 0001 0011 001 9824385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCRSCTLR20 = 0x88a1, // 10 001 0001 0100 001 9834385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCRSCTLR21 = 0x88a9, // 10 001 0001 0101 001 9844385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCRSCTLR22 = 0x88b1, // 10 001 0001 0110 001 9854385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCRSCTLR23 = 0x88b9, // 10 001 0001 0111 001 9864385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCRSCTLR24 = 0x88c1, // 10 001 0001 1000 001 9874385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCRSCTLR25 = 0x88c9, // 10 001 0001 1001 001 9884385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCRSCTLR26 = 0x88d1, // 10 001 0001 1010 001 9894385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCRSCTLR27 = 0x88d9, // 10 001 0001 1011 001 9904385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCRSCTLR28 = 0x88e1, // 10 001 0001 1100 001 9914385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCRSCTLR29 = 0x88e9, // 10 001 0001 1101 001 9924385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCRSCTLR30 = 0x88f1, // 10 001 0001 1110 001 9934385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCRSCTLR31 = 0x88f9, // 10 001 0001 1111 001 9944385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCSSCCR0 = 0x8882, // 10 001 0001 0000 010 9954385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCSSCCR1 = 0x888a, // 10 001 0001 0001 010 9964385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCSSCCR2 = 0x8892, // 10 001 0001 0010 010 9974385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCSSCCR3 = 0x889a, // 10 001 0001 0011 010 9984385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCSSCCR4 = 0x88a2, // 10 001 0001 0100 010 9994385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCSSCCR5 = 0x88aa, // 10 001 0001 0101 010 10004385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCSSCCR6 = 0x88b2, // 10 001 0001 0110 010 10014385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCSSCCR7 = 0x88ba, // 10 001 0001 0111 010 10024385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCSSCSR0 = 0x88c2, // 10 001 0001 1000 010 10034385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCSSCSR1 = 0x88ca, // 10 001 0001 1001 010 10044385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCSSCSR2 = 0x88d2, // 10 001 0001 1010 010 10054385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCSSCSR3 = 0x88da, // 10 001 0001 1011 010 10064385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCSSCSR4 = 0x88e2, // 10 001 0001 1100 010 10074385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCSSCSR5 = 0x88ea, // 10 001 0001 1101 010 10084385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCSSCSR6 = 0x88f2, // 10 001 0001 1110 010 10094385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCSSCSR7 = 0x88fa, // 10 001 0001 1111 010 10104385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCSSPCICR0 = 0x8883, // 10 001 0001 0000 011 10114385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCSSPCICR1 = 0x888b, // 10 001 0001 0001 011 10124385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCSSPCICR2 = 0x8893, // 10 001 0001 0010 011 10134385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCSSPCICR3 = 0x889b, // 10 001 0001 0011 011 10144385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCSSPCICR4 = 0x88a3, // 10 001 0001 0100 011 10154385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCSSPCICR5 = 0x88ab, // 10 001 0001 0101 011 10164385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCSSPCICR6 = 0x88b3, // 10 001 0001 0110 011 10174385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCSSPCICR7 = 0x88bb, // 10 001 0001 0111 011 10184385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCPDCR = 0x88a4, // 10 001 0001 0100 100 10194385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCACVR0 = 0x8900, // 10 001 0010 0000 000 10204385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCACVR1 = 0x8910, // 10 001 0010 0010 000 10214385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCACVR2 = 0x8920, // 10 001 0010 0100 000 10224385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCACVR3 = 0x8930, // 10 001 0010 0110 000 10234385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCACVR4 = 0x8940, // 10 001 0010 1000 000 10244385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCACVR5 = 0x8950, // 10 001 0010 1010 000 10254385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCACVR6 = 0x8960, // 10 001 0010 1100 000 10264385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCACVR7 = 0x8970, // 10 001 0010 1110 000 10274385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCACVR8 = 0x8901, // 10 001 0010 0000 001 10284385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCACVR9 = 0x8911, // 10 001 0010 0010 001 10294385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCACVR10 = 0x8921, // 10 001 0010 0100 001 10304385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCACVR11 = 0x8931, // 10 001 0010 0110 001 10314385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCACVR12 = 0x8941, // 10 001 0010 1000 001 10324385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCACVR13 = 0x8951, // 10 001 0010 1010 001 10334385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCACVR14 = 0x8961, // 10 001 0010 1100 001 10344385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCACVR15 = 0x8971, // 10 001 0010 1110 001 10354385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCACATR0 = 0x8902, // 10 001 0010 0000 010 10364385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCACATR1 = 0x8912, // 10 001 0010 0010 010 10374385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCACATR2 = 0x8922, // 10 001 0010 0100 010 10384385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCACATR3 = 0x8932, // 10 001 0010 0110 010 10394385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCACATR4 = 0x8942, // 10 001 0010 1000 010 10404385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCACATR5 = 0x8952, // 10 001 0010 1010 010 10414385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCACATR6 = 0x8962, // 10 001 0010 1100 010 10424385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCACATR7 = 0x8972, // 10 001 0010 1110 010 10434385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCACATR8 = 0x8903, // 10 001 0010 0000 011 10444385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCACATR9 = 0x8913, // 10 001 0010 0010 011 10454385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCACATR10 = 0x8923, // 10 001 0010 0100 011 10464385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCACATR11 = 0x8933, // 10 001 0010 0110 011 10474385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCACATR12 = 0x8943, // 10 001 0010 1000 011 10484385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCACATR13 = 0x8953, // 10 001 0010 1010 011 10494385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCACATR14 = 0x8963, // 10 001 0010 1100 011 10504385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCACATR15 = 0x8973, // 10 001 0010 1110 011 10514385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCDVCVR0 = 0x8904, // 10 001 0010 0000 100 10524385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCDVCVR1 = 0x8924, // 10 001 0010 0100 100 10534385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCDVCVR2 = 0x8944, // 10 001 0010 1000 100 10544385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCDVCVR3 = 0x8964, // 10 001 0010 1100 100 10554385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCDVCVR4 = 0x8905, // 10 001 0010 0000 101 10564385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCDVCVR5 = 0x8925, // 10 001 0010 0100 101 10574385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCDVCVR6 = 0x8945, // 10 001 0010 1000 101 10584385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCDVCVR7 = 0x8965, // 10 001 0010 1100 101 10594385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCDVCMR0 = 0x8906, // 10 001 0010 0000 110 10604385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCDVCMR1 = 0x8926, // 10 001 0010 0100 110 10614385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCDVCMR2 = 0x8946, // 10 001 0010 1000 110 10624385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCDVCMR3 = 0x8966, // 10 001 0010 1100 110 10634385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCDVCMR4 = 0x8907, // 10 001 0010 0000 111 10644385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCDVCMR5 = 0x8927, // 10 001 0010 0100 111 10654385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCDVCMR6 = 0x8947, // 10 001 0010 1000 111 10664385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCDVCMR7 = 0x8967, // 10 001 0010 1100 111 10674385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCCIDCVR0 = 0x8980, // 10 001 0011 0000 000 10684385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCCIDCVR1 = 0x8990, // 10 001 0011 0010 000 10694385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCCIDCVR2 = 0x89a0, // 10 001 0011 0100 000 10704385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCCIDCVR3 = 0x89b0, // 10 001 0011 0110 000 10714385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCCIDCVR4 = 0x89c0, // 10 001 0011 1000 000 10724385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCCIDCVR5 = 0x89d0, // 10 001 0011 1010 000 10734385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCCIDCVR6 = 0x89e0, // 10 001 0011 1100 000 10744385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCCIDCVR7 = 0x89f0, // 10 001 0011 1110 000 10754385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCVMIDCVR0 = 0x8981, // 10 001 0011 0000 001 10764385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCVMIDCVR1 = 0x8991, // 10 001 0011 0010 001 10774385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCVMIDCVR2 = 0x89a1, // 10 001 0011 0100 001 10784385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCVMIDCVR3 = 0x89b1, // 10 001 0011 0110 001 10794385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCVMIDCVR4 = 0x89c1, // 10 001 0011 1000 001 10804385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCVMIDCVR5 = 0x89d1, // 10 001 0011 1010 001 10814385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCVMIDCVR6 = 0x89e1, // 10 001 0011 1100 001 10824385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCVMIDCVR7 = 0x89f1, // 10 001 0011 1110 001 10834385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCCIDCCTLR0 = 0x8982, // 10 001 0011 0000 010 10844385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCCIDCCTLR1 = 0x898a, // 10 001 0011 0001 010 10854385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCVMIDCCTLR0 = 0x8992, // 10 001 0011 0010 010 10864385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCVMIDCCTLR1 = 0x899a, // 10 001 0011 0011 010 10874385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCITCTRL = 0x8b84, // 10 001 0111 0000 100 10884385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCCLAIMSET = 0x8bc6, // 10 001 0111 1000 110 10894385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCCLAIMCLR = 0x8bce, // 10 001 0111 1001 110 10904385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover 109142a1b2f0b196633c0327801e810fc98849a00c47Tim Northover // GICv3 registers 109242a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICC_BPR1_EL1 = 0xc663, // 11 000 1100 1100 011 109342a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICC_BPR0_EL1 = 0xc643, // 11 000 1100 1000 011 109442a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICC_PMR_EL1 = 0xc230, // 11 000 0100 0110 000 109542a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICC_CTLR_EL1 = 0xc664, // 11 000 1100 1100 100 109642a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICC_CTLR_EL3 = 0xf664, // 11 110 1100 1100 100 109742a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICC_SRE_EL1 = 0xc665, // 11 000 1100 1100 101 109842a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICC_SRE_EL2 = 0xe64d, // 11 100 1100 1001 101 109942a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICC_SRE_EL3 = 0xf665, // 11 110 1100 1100 101 110042a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICC_IGRPEN0_EL1 = 0xc666, // 11 000 1100 1100 110 110142a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICC_IGRPEN1_EL1 = 0xc667, // 11 000 1100 1100 111 110242a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICC_IGRPEN1_EL3 = 0xf667, // 11 110 1100 1100 111 110342a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICC_SEIEN_EL1 = 0xc668, // 11 000 1100 1101 000 110442a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICC_AP0R0_EL1 = 0xc644, // 11 000 1100 1000 100 110542a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICC_AP0R1_EL1 = 0xc645, // 11 000 1100 1000 101 110642a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICC_AP0R2_EL1 = 0xc646, // 11 000 1100 1000 110 110742a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICC_AP0R3_EL1 = 0xc647, // 11 000 1100 1000 111 110842a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICC_AP1R0_EL1 = 0xc648, // 11 000 1100 1001 000 110942a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICC_AP1R1_EL1 = 0xc649, // 11 000 1100 1001 001 111042a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICC_AP1R2_EL1 = 0xc64a, // 11 000 1100 1001 010 111142a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICC_AP1R3_EL1 = 0xc64b, // 11 000 1100 1001 011 111242a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICH_AP0R0_EL2 = 0xe640, // 11 100 1100 1000 000 111342a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICH_AP0R1_EL2 = 0xe641, // 11 100 1100 1000 001 111442a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICH_AP0R2_EL2 = 0xe642, // 11 100 1100 1000 010 111542a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICH_AP0R3_EL2 = 0xe643, // 11 100 1100 1000 011 111642a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICH_AP1R0_EL2 = 0xe648, // 11 100 1100 1001 000 111742a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICH_AP1R1_EL2 = 0xe649, // 11 100 1100 1001 001 111842a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICH_AP1R2_EL2 = 0xe64a, // 11 100 1100 1001 010 111942a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICH_AP1R3_EL2 = 0xe64b, // 11 100 1100 1001 011 112042a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICH_HCR_EL2 = 0xe658, // 11 100 1100 1011 000 112142a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICH_MISR_EL2 = 0xe65a, // 11 100 1100 1011 010 112242a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICH_VMCR_EL2 = 0xe65f, // 11 100 1100 1011 111 112342a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICH_VSEIR_EL2 = 0xe64c, // 11 100 1100 1001 100 112442a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICH_LR0_EL2 = 0xe660, // 11 100 1100 1100 000 112542a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICH_LR1_EL2 = 0xe661, // 11 100 1100 1100 001 112642a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICH_LR2_EL2 = 0xe662, // 11 100 1100 1100 010 112742a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICH_LR3_EL2 = 0xe663, // 11 100 1100 1100 011 112842a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICH_LR4_EL2 = 0xe664, // 11 100 1100 1100 100 112942a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICH_LR5_EL2 = 0xe665, // 11 100 1100 1100 101 113042a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICH_LR6_EL2 = 0xe666, // 11 100 1100 1100 110 113142a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICH_LR7_EL2 = 0xe667, // 11 100 1100 1100 111 113242a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICH_LR8_EL2 = 0xe668, // 11 100 1100 1101 000 113342a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICH_LR9_EL2 = 0xe669, // 11 100 1100 1101 001 113442a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICH_LR10_EL2 = 0xe66a, // 11 100 1100 1101 010 113542a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICH_LR11_EL2 = 0xe66b, // 11 100 1100 1101 011 113642a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICH_LR12_EL2 = 0xe66c, // 11 100 1100 1101 100 113742a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICH_LR13_EL2 = 0xe66d, // 11 100 1100 1101 101 113842a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICH_LR14_EL2 = 0xe66e, // 11 100 1100 1101 110 1139dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines ICH_LR15_EL2 = 0xe66f, // 11 100 1100 1101 111 1140dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 11412c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar // v8.1a "Privileged Access Never" extension-specific system registers 11422c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar PAN = 0xc213, // 11 000 0100 0010 011 11432c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar 11442c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar // v8.1a "Limited Ordering Regions" extension-specific system registers 11452c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar LORSA_EL1 = 0xc520, // 11 000 1010 0100 000 11462c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar LOREA_EL1 = 0xc521, // 11 000 1010 0100 001 11472c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar LORN_EL1 = 0xc522, // 11 000 1010 0100 010 11482c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar LORC_EL1 = 0xc523, // 11 000 1010 0100 011 11492c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar LORID_EL1 = 0xc527, // 11 000 1010 0100 111 11502c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar 11512c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar // v8.1a "Virtualization host extensions" system registers 11522c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar TTBR1_EL2 = 0xe101, // 11 100 0010 0000 001 11532c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar CONTEXTIDR_EL2 = 0xe681, // 11 100 1101 0000 001 11542c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar CNTHV_TVAL_EL2 = 0xe718, // 11 100 1110 0011 000 11552c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar CNTHV_CVAL_EL2 = 0xe71a, // 11 100 1110 0011 010 11562c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar CNTHV_CTL_EL2 = 0xe719, // 11 100 1110 0011 001 11572c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar SCTLR_EL12 = 0xe880, // 11 101 0001 0000 000 11582c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar CPACR_EL12 = 0xe882, // 11 101 0001 0000 010 11592c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar TTBR0_EL12 = 0xe900, // 11 101 0010 0000 000 11602c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar TTBR1_EL12 = 0xe901, // 11 101 0010 0000 001 11612c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar TCR_EL12 = 0xe902, // 11 101 0010 0000 010 11622c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar AFSR0_EL12 = 0xea88, // 11 101 0101 0001 000 11632c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar AFSR1_EL12 = 0xea89, // 11 101 0101 0001 001 11642c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar ESR_EL12 = 0xea90, // 11 101 0101 0010 000 11652c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar FAR_EL12 = 0xeb00, // 11 101 0110 0000 000 11662c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar MAIR_EL12 = 0xed10, // 11 101 1010 0010 000 11672c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar AMAIR_EL12 = 0xed18, // 11 101 1010 0011 000 11682c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar VBAR_EL12 = 0xee00, // 11 101 1100 0000 000 11692c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar CONTEXTIDR_EL12 = 0xee81, // 11 101 1101 0000 001 11702c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar CNTKCTL_EL12 = 0xef08, // 11 101 1110 0001 000 11712c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar CNTP_TVAL_EL02 = 0xef10, // 11 101 1110 0010 000 11722c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar CNTP_CTL_EL02 = 0xef11, // 11 101 1110 0010 001 11732c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar CNTP_CVAL_EL02 = 0xef12, // 11 101 1110 0010 010 11742c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar CNTV_TVAL_EL02 = 0xef18, // 11 101 1110 0011 000 11752c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar CNTV_CTL_EL02 = 0xef19, // 11 101 1110 0011 001 11762c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar CNTV_CVAL_EL02 = 0xef1a, // 11 101 1110 0011 010 11772c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar SPSR_EL12 = 0xea00, // 11 101 0100 0000 000 11782c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar ELR_EL12 = 0xea01, // 11 101 0100 0000 001 11792c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar 11802c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar // Cyclone specific system registers 11812c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar CPM_IOACC_CTL_EL3 = 0xff90, 118272062f5744557e270a38192554c3126ea5f97434Tim Northover }; 118372062f5744557e270a38192554c3126ea5f97434Tim Northover 1184dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines // Note that these do not inherit from AArch64NamedImmMapper. This class is 118572062f5744557e270a38192554c3126ea5f97434Tim Northover // sufficiently different in its behaviour that I don't believe it's worth 1186dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines // burdening the common AArch64NamedImmMapper with abstractions only needed in 118772062f5744557e270a38192554c3126ea5f97434Tim Northover // this one case. 118872062f5744557e270a38192554c3126ea5f97434Tim Northover struct SysRegMapper { 11894c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar static const AArch64NamedImmMapper::Mapping SysRegMappings[]; 119072062f5744557e270a38192554c3126ea5f97434Tim Northover 11914c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar const AArch64NamedImmMapper::Mapping *InstMappings; 11924c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar size_t NumInstMappings; 119372062f5744557e270a38192554c3126ea5f97434Tim Northover 11942c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar SysRegMapper() { } 11952c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar uint32_t fromString(StringRef Name, uint64_t FeatureBits, bool &Valid) const; 11962c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar std::string toString(uint32_t Bits, uint64_t FeatureBits) const; 119772062f5744557e270a38192554c3126ea5f97434Tim Northover }; 119872062f5744557e270a38192554c3126ea5f97434Tim Northover 119972062f5744557e270a38192554c3126ea5f97434Tim Northover struct MSRMapper : SysRegMapper { 12004c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar static const AArch64NamedImmMapper::Mapping MSRMappings[]; 12012c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar MSRMapper(); 120272062f5744557e270a38192554c3126ea5f97434Tim Northover }; 120372062f5744557e270a38192554c3126ea5f97434Tim Northover 120472062f5744557e270a38192554c3126ea5f97434Tim Northover struct MRSMapper : SysRegMapper { 12054c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar static const AArch64NamedImmMapper::Mapping MRSMappings[]; 12062c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar MRSMapper(); 120772062f5744557e270a38192554c3126ea5f97434Tim Northover }; 120872062f5744557e270a38192554c3126ea5f97434Tim Northover 120972062f5744557e270a38192554c3126ea5f97434Tim Northover uint32_t ParseGenericRegister(StringRef Name, bool &Valid); 121072062f5744557e270a38192554c3126ea5f97434Tim Northover} 121172062f5744557e270a38192554c3126ea5f97434Tim Northover 1212dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesnamespace AArch64TLBI { 121372062f5744557e270a38192554c3126ea5f97434Tim Northover enum TLBIValues { 121472062f5744557e270a38192554c3126ea5f97434Tim Northover Invalid = -1, // Op0 Op1 CRn CRm Op2 121572062f5744557e270a38192554c3126ea5f97434Tim Northover IPAS2E1IS = 0x6401, // 01 100 1000 0000 001 121672062f5744557e270a38192554c3126ea5f97434Tim Northover IPAS2LE1IS = 0x6405, // 01 100 1000 0000 101 121772062f5744557e270a38192554c3126ea5f97434Tim Northover VMALLE1IS = 0x4418, // 01 000 1000 0011 000 121872062f5744557e270a38192554c3126ea5f97434Tim Northover ALLE2IS = 0x6418, // 01 100 1000 0011 000 121972062f5744557e270a38192554c3126ea5f97434Tim Northover ALLE3IS = 0x7418, // 01 110 1000 0011 000 122072062f5744557e270a38192554c3126ea5f97434Tim Northover VAE1IS = 0x4419, // 01 000 1000 0011 001 122172062f5744557e270a38192554c3126ea5f97434Tim Northover VAE2IS = 0x6419, // 01 100 1000 0011 001 122272062f5744557e270a38192554c3126ea5f97434Tim Northover VAE3IS = 0x7419, // 01 110 1000 0011 001 122372062f5744557e270a38192554c3126ea5f97434Tim Northover ASIDE1IS = 0x441a, // 01 000 1000 0011 010 122472062f5744557e270a38192554c3126ea5f97434Tim Northover VAAE1IS = 0x441b, // 01 000 1000 0011 011 122572062f5744557e270a38192554c3126ea5f97434Tim Northover ALLE1IS = 0x641c, // 01 100 1000 0011 100 122672062f5744557e270a38192554c3126ea5f97434Tim Northover VALE1IS = 0x441d, // 01 000 1000 0011 101 122772062f5744557e270a38192554c3126ea5f97434Tim Northover VALE2IS = 0x641d, // 01 100 1000 0011 101 122872062f5744557e270a38192554c3126ea5f97434Tim Northover VALE3IS = 0x741d, // 01 110 1000 0011 101 122972062f5744557e270a38192554c3126ea5f97434Tim Northover VMALLS12E1IS = 0x641e, // 01 100 1000 0011 110 123072062f5744557e270a38192554c3126ea5f97434Tim Northover VAALE1IS = 0x441f, // 01 000 1000 0011 111 123172062f5744557e270a38192554c3126ea5f97434Tim Northover IPAS2E1 = 0x6421, // 01 100 1000 0100 001 123272062f5744557e270a38192554c3126ea5f97434Tim Northover IPAS2LE1 = 0x6425, // 01 100 1000 0100 101 123372062f5744557e270a38192554c3126ea5f97434Tim Northover VMALLE1 = 0x4438, // 01 000 1000 0111 000 123472062f5744557e270a38192554c3126ea5f97434Tim Northover ALLE2 = 0x6438, // 01 100 1000 0111 000 123572062f5744557e270a38192554c3126ea5f97434Tim Northover ALLE3 = 0x7438, // 01 110 1000 0111 000 123672062f5744557e270a38192554c3126ea5f97434Tim Northover VAE1 = 0x4439, // 01 000 1000 0111 001 123772062f5744557e270a38192554c3126ea5f97434Tim Northover VAE2 = 0x6439, // 01 100 1000 0111 001 123872062f5744557e270a38192554c3126ea5f97434Tim Northover VAE3 = 0x7439, // 01 110 1000 0111 001 123972062f5744557e270a38192554c3126ea5f97434Tim Northover ASIDE1 = 0x443a, // 01 000 1000 0111 010 124072062f5744557e270a38192554c3126ea5f97434Tim Northover VAAE1 = 0x443b, // 01 000 1000 0111 011 124172062f5744557e270a38192554c3126ea5f97434Tim Northover ALLE1 = 0x643c, // 01 100 1000 0111 100 124272062f5744557e270a38192554c3126ea5f97434Tim Northover VALE1 = 0x443d, // 01 000 1000 0111 101 124372062f5744557e270a38192554c3126ea5f97434Tim Northover VALE2 = 0x643d, // 01 100 1000 0111 101 124472062f5744557e270a38192554c3126ea5f97434Tim Northover VALE3 = 0x743d, // 01 110 1000 0111 101 124572062f5744557e270a38192554c3126ea5f97434Tim Northover VMALLS12E1 = 0x643e, // 01 100 1000 0111 110 124672062f5744557e270a38192554c3126ea5f97434Tim Northover VAALE1 = 0x443f // 01 000 1000 0111 111 124772062f5744557e270a38192554c3126ea5f97434Tim Northover }; 124872062f5744557e270a38192554c3126ea5f97434Tim Northover 1249dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines struct TLBIMapper : AArch64NamedImmMapper { 12504c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar const static Mapping TLBIMappings[]; 125172062f5744557e270a38192554c3126ea5f97434Tim Northover 125272062f5744557e270a38192554c3126ea5f97434Tim Northover TLBIMapper(); 125372062f5744557e270a38192554c3126ea5f97434Tim Northover }; 125472062f5744557e270a38192554c3126ea5f97434Tim Northover 125572062f5744557e270a38192554c3126ea5f97434Tim Northover static inline bool NeedsRegister(TLBIValues Val) { 125672062f5744557e270a38192554c3126ea5f97434Tim Northover switch (Val) { 125772062f5744557e270a38192554c3126ea5f97434Tim Northover case VMALLE1IS: 125872062f5744557e270a38192554c3126ea5f97434Tim Northover case ALLE2IS: 125972062f5744557e270a38192554c3126ea5f97434Tim Northover case ALLE3IS: 126072062f5744557e270a38192554c3126ea5f97434Tim Northover case ALLE1IS: 126172062f5744557e270a38192554c3126ea5f97434Tim Northover case VMALLS12E1IS: 126272062f5744557e270a38192554c3126ea5f97434Tim Northover case VMALLE1: 126372062f5744557e270a38192554c3126ea5f97434Tim Northover case ALLE2: 126472062f5744557e270a38192554c3126ea5f97434Tim Northover case ALLE3: 126572062f5744557e270a38192554c3126ea5f97434Tim Northover case ALLE1: 126672062f5744557e270a38192554c3126ea5f97434Tim Northover case VMALLS12E1: 126772062f5744557e270a38192554c3126ea5f97434Tim Northover return false; 126872062f5744557e270a38192554c3126ea5f97434Tim Northover default: 126972062f5744557e270a38192554c3126ea5f97434Tim Northover return true; 127072062f5744557e270a38192554c3126ea5f97434Tim Northover } 127172062f5744557e270a38192554c3126ea5f97434Tim Northover } 1272dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines} 127372062f5744557e270a38192554c3126ea5f97434Tim Northover 127472062f5744557e270a38192554c3126ea5f97434Tim Northovernamespace AArch64II { 1275dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// Target Operand Flag enum. 127672062f5744557e270a38192554c3126ea5f97434Tim Northover enum TOF { 1277dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines //===------------------------------------------------------------------===// 127872062f5744557e270a38192554c3126ea5f97434Tim Northover // AArch64 Specific MachineOperand flags. 127972062f5744557e270a38192554c3126ea5f97434Tim Northover 128072062f5744557e270a38192554c3126ea5f97434Tim Northover MO_NO_FLAG, 128172062f5744557e270a38192554c3126ea5f97434Tim Northover 12824c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar MO_FRAGMENT = 0xf, 1283dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 1284dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// MO_PAGE - A symbol operand with this flag represents the pc-relative 1285dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// offset of the 4K page containing the symbol. This is used with the 1286dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// ADRP instruction. 1287dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines MO_PAGE = 1, 1288dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 1289dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// MO_PAGEOFF - A symbol operand with this flag represents the offset of 1290dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// that symbol within a 4K page. This offset is added to the page address 1291dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// to produce the complete address. 1292dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines MO_PAGEOFF = 2, 1293dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 1294dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// MO_G3 - A symbol operand with this flag (granule 3) represents the high 1295dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// 16-bits of a 64-bit address, used in a MOVZ or MOVK instruction 1296dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines MO_G3 = 3, 1297dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 1298dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// MO_G2 - A symbol operand with this flag (granule 2) represents the bits 1299dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// 32-47 of a 64-bit address, used in a MOVZ or MOVK instruction 1300dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines MO_G2 = 4, 1301dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 1302dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// MO_G1 - A symbol operand with this flag (granule 1) represents the bits 1303dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// 16-31 of a 64-bit address, used in a MOVZ or MOVK instruction 1304dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines MO_G1 = 5, 1305dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 1306dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// MO_G0 - A symbol operand with this flag (granule 0) represents the bits 1307dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// 0-15 of a 64-bit address, used in a MOVZ or MOVK instruction 1308dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines MO_G0 = 6, 1309dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 13104c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar /// MO_HI12 - This flag indicates that a symbol operand represents the bits 13114c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar /// 13-24 of a 64-bit address, used in a arithmetic immediate-shifted-left- 13124c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar /// by-12-bits instruction. 13134c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar MO_HI12 = 7, 13144c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar 1315dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// MO_GOT - This flag indicates that a symbol operand represents the 1316dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// address of the GOT entry for the symbol, rather than the address of 1317dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// the symbol itself. 13184c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar MO_GOT = 0x10, 1319dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 1320dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// MO_NC - Indicates whether the linker is expected to check the symbol 1321dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// reference for overflow. For example in an ADRP/ADD pair of relocations 1322dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// the ADRP usually does check, but not the ADD. 13234c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar MO_NC = 0x20, 1324dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 1325dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// MO_TLS - Indicates that the operand being accessed is some kind of 1326dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// thread-local symbol. On Darwin, only one type of thread-local access 1327dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// exists (pre linker-relaxation), but on ELF the TLSModel used for the 1328dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// referee will affect interpretation. 13294c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar MO_TLS = 0x40, 133037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 133137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines /// MO_CONSTPOOL - This flag indicates that a symbol operand represents 133237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines /// the address of a constant pool entry for the symbol, rather than the 133337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines /// address of the symbol itself. 13344c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar MO_CONSTPOOL = 0x80 133572062f5744557e270a38192554c3126ea5f97434Tim Northover }; 1336dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines} // end namespace AArch64II 133772062f5744557e270a38192554c3126ea5f97434Tim Northover 1338dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines} // end namespace llvm 133972062f5744557e270a38192554c3126ea5f97434Tim Northover 134072062f5744557e270a38192554c3126ea5f97434Tim Northover#endif 1341