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 17dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#ifndef AArch64BASEINFO_H 18dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#define 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) { 236cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // To reverse a condition it's necessary to only invert the low bit: 237cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 238cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen 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; 28372062f5744557e270a38192554c3126ea5f97434Tim Northover }; 28472062f5744557e270a38192554c3126ea5f97434Tim Northover 28572062f5744557e270a38192554c3126ea5f97434Tim Northover template<int N> 286dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines AArch64NamedImmMapper(const Mapping (&Pairs)[N], uint32_t TooBigImm) 28772062f5744557e270a38192554c3126ea5f97434Tim Northover : Pairs(&Pairs[0]), NumPairs(N), TooBigImm(TooBigImm) {} 28872062f5744557e270a38192554c3126ea5f97434Tim Northover 28972062f5744557e270a38192554c3126ea5f97434Tim Northover StringRef toString(uint32_t Value, bool &Valid) const; 29072062f5744557e270a38192554c3126ea5f97434Tim Northover uint32_t fromString(StringRef Name, bool &Valid) const; 29172062f5744557e270a38192554c3126ea5f97434Tim Northover 29272062f5744557e270a38192554c3126ea5f97434Tim Northover /// Many of the instructions allow an alternative assembly form consisting of 29372062f5744557e270a38192554c3126ea5f97434Tim Northover /// a simple immediate. Currently the only valid forms are ranges [0, N) where 29472062f5744557e270a38192554c3126ea5f97434Tim Northover /// N being 0 indicates no immediate syntax-form is allowed. 29572062f5744557e270a38192554c3126ea5f97434Tim Northover bool validImm(uint32_t Value) const; 29672062f5744557e270a38192554c3126ea5f97434Tim Northoverprotected: 29772062f5744557e270a38192554c3126ea5f97434Tim Northover const Mapping *Pairs; 29872062f5744557e270a38192554c3126ea5f97434Tim Northover size_t NumPairs; 29972062f5744557e270a38192554c3126ea5f97434Tim Northover uint32_t TooBigImm; 30072062f5744557e270a38192554c3126ea5f97434Tim Northover}; 30172062f5744557e270a38192554c3126ea5f97434Tim Northover 302dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesnamespace AArch64AT { 30372062f5744557e270a38192554c3126ea5f97434Tim Northover enum ATValues { 30472062f5744557e270a38192554c3126ea5f97434Tim Northover Invalid = -1, // Op0 Op1 CRn CRm Op2 30572062f5744557e270a38192554c3126ea5f97434Tim Northover S1E1R = 0x43c0, // 01 000 0111 1000 000 30672062f5744557e270a38192554c3126ea5f97434Tim Northover S1E2R = 0x63c0, // 01 100 0111 1000 000 30772062f5744557e270a38192554c3126ea5f97434Tim Northover S1E3R = 0x73c0, // 01 110 0111 1000 000 30872062f5744557e270a38192554c3126ea5f97434Tim Northover S1E1W = 0x43c1, // 01 000 0111 1000 001 30972062f5744557e270a38192554c3126ea5f97434Tim Northover S1E2W = 0x63c1, // 01 100 0111 1000 001 31072062f5744557e270a38192554c3126ea5f97434Tim Northover S1E3W = 0x73c1, // 01 110 0111 1000 001 31172062f5744557e270a38192554c3126ea5f97434Tim Northover S1E0R = 0x43c2, // 01 000 0111 1000 010 31272062f5744557e270a38192554c3126ea5f97434Tim Northover S1E0W = 0x43c3, // 01 000 0111 1000 011 31372062f5744557e270a38192554c3126ea5f97434Tim Northover S12E1R = 0x63c4, // 01 100 0111 1000 100 31472062f5744557e270a38192554c3126ea5f97434Tim Northover S12E1W = 0x63c5, // 01 100 0111 1000 101 31572062f5744557e270a38192554c3126ea5f97434Tim Northover S12E0R = 0x63c6, // 01 100 0111 1000 110 31672062f5744557e270a38192554c3126ea5f97434Tim Northover S12E0W = 0x63c7 // 01 100 0111 1000 111 31772062f5744557e270a38192554c3126ea5f97434Tim Northover }; 31872062f5744557e270a38192554c3126ea5f97434Tim Northover 319dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines struct ATMapper : AArch64NamedImmMapper { 32072062f5744557e270a38192554c3126ea5f97434Tim Northover const static Mapping ATPairs[]; 32172062f5744557e270a38192554c3126ea5f97434Tim Northover 32272062f5744557e270a38192554c3126ea5f97434Tim Northover ATMapper(); 32372062f5744557e270a38192554c3126ea5f97434Tim Northover }; 32472062f5744557e270a38192554c3126ea5f97434Tim Northover 32572062f5744557e270a38192554c3126ea5f97434Tim Northover} 326dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesnamespace AArch64DB { 32772062f5744557e270a38192554c3126ea5f97434Tim Northover enum DBValues { 32872062f5744557e270a38192554c3126ea5f97434Tim Northover Invalid = -1, 32972062f5744557e270a38192554c3126ea5f97434Tim Northover OSHLD = 0x1, 33072062f5744557e270a38192554c3126ea5f97434Tim Northover OSHST = 0x2, 33172062f5744557e270a38192554c3126ea5f97434Tim Northover OSH = 0x3, 33272062f5744557e270a38192554c3126ea5f97434Tim Northover NSHLD = 0x5, 33372062f5744557e270a38192554c3126ea5f97434Tim Northover NSHST = 0x6, 33472062f5744557e270a38192554c3126ea5f97434Tim Northover NSH = 0x7, 33572062f5744557e270a38192554c3126ea5f97434Tim Northover ISHLD = 0x9, 33672062f5744557e270a38192554c3126ea5f97434Tim Northover ISHST = 0xa, 33772062f5744557e270a38192554c3126ea5f97434Tim Northover ISH = 0xb, 33872062f5744557e270a38192554c3126ea5f97434Tim Northover LD = 0xd, 33972062f5744557e270a38192554c3126ea5f97434Tim Northover ST = 0xe, 34072062f5744557e270a38192554c3126ea5f97434Tim Northover SY = 0xf 34172062f5744557e270a38192554c3126ea5f97434Tim Northover }; 34272062f5744557e270a38192554c3126ea5f97434Tim Northover 343dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines struct DBarrierMapper : AArch64NamedImmMapper { 34472062f5744557e270a38192554c3126ea5f97434Tim Northover const static Mapping DBarrierPairs[]; 34572062f5744557e270a38192554c3126ea5f97434Tim Northover 34672062f5744557e270a38192554c3126ea5f97434Tim Northover DBarrierMapper(); 34772062f5744557e270a38192554c3126ea5f97434Tim Northover }; 34872062f5744557e270a38192554c3126ea5f97434Tim Northover} 34972062f5744557e270a38192554c3126ea5f97434Tim Northover 350dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesnamespace AArch64DC { 35172062f5744557e270a38192554c3126ea5f97434Tim Northover enum DCValues { 35272062f5744557e270a38192554c3126ea5f97434Tim Northover Invalid = -1, // Op1 CRn CRm Op2 35372062f5744557e270a38192554c3126ea5f97434Tim Northover ZVA = 0x5ba1, // 01 011 0111 0100 001 35472062f5744557e270a38192554c3126ea5f97434Tim Northover IVAC = 0x43b1, // 01 000 0111 0110 001 35572062f5744557e270a38192554c3126ea5f97434Tim Northover ISW = 0x43b2, // 01 000 0111 0110 010 35672062f5744557e270a38192554c3126ea5f97434Tim Northover CVAC = 0x5bd1, // 01 011 0111 1010 001 35772062f5744557e270a38192554c3126ea5f97434Tim Northover CSW = 0x43d2, // 01 000 0111 1010 010 35872062f5744557e270a38192554c3126ea5f97434Tim Northover CVAU = 0x5bd9, // 01 011 0111 1011 001 35972062f5744557e270a38192554c3126ea5f97434Tim Northover CIVAC = 0x5bf1, // 01 011 0111 1110 001 36072062f5744557e270a38192554c3126ea5f97434Tim Northover CISW = 0x43f2 // 01 000 0111 1110 010 36172062f5744557e270a38192554c3126ea5f97434Tim Northover }; 36272062f5744557e270a38192554c3126ea5f97434Tim Northover 363dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines struct DCMapper : AArch64NamedImmMapper { 36472062f5744557e270a38192554c3126ea5f97434Tim Northover const static Mapping DCPairs[]; 36572062f5744557e270a38192554c3126ea5f97434Tim Northover 36672062f5744557e270a38192554c3126ea5f97434Tim Northover DCMapper(); 36772062f5744557e270a38192554c3126ea5f97434Tim Northover }; 36872062f5744557e270a38192554c3126ea5f97434Tim Northover 36972062f5744557e270a38192554c3126ea5f97434Tim Northover} 37072062f5744557e270a38192554c3126ea5f97434Tim Northover 371dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesnamespace AArch64IC { 37272062f5744557e270a38192554c3126ea5f97434Tim Northover enum ICValues { 37372062f5744557e270a38192554c3126ea5f97434Tim Northover Invalid = -1, // Op1 CRn CRm Op2 37472062f5744557e270a38192554c3126ea5f97434Tim Northover IALLUIS = 0x0388, // 000 0111 0001 000 37572062f5744557e270a38192554c3126ea5f97434Tim Northover IALLU = 0x03a8, // 000 0111 0101 000 37672062f5744557e270a38192554c3126ea5f97434Tim Northover IVAU = 0x1ba9 // 011 0111 0101 001 37772062f5744557e270a38192554c3126ea5f97434Tim Northover }; 37872062f5744557e270a38192554c3126ea5f97434Tim Northover 37972062f5744557e270a38192554c3126ea5f97434Tim Northover 380dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines struct ICMapper : AArch64NamedImmMapper { 38172062f5744557e270a38192554c3126ea5f97434Tim Northover const static Mapping ICPairs[]; 38272062f5744557e270a38192554c3126ea5f97434Tim Northover 38372062f5744557e270a38192554c3126ea5f97434Tim Northover ICMapper(); 38472062f5744557e270a38192554c3126ea5f97434Tim Northover }; 38572062f5744557e270a38192554c3126ea5f97434Tim Northover 38672062f5744557e270a38192554c3126ea5f97434Tim Northover static inline bool NeedsRegister(ICValues Val) { 38772062f5744557e270a38192554c3126ea5f97434Tim Northover return Val == IVAU; 38872062f5744557e270a38192554c3126ea5f97434Tim Northover } 38972062f5744557e270a38192554c3126ea5f97434Tim Northover} 39072062f5744557e270a38192554c3126ea5f97434Tim Northover 391dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesnamespace AArch64ISB { 39272062f5744557e270a38192554c3126ea5f97434Tim Northover enum ISBValues { 39372062f5744557e270a38192554c3126ea5f97434Tim Northover Invalid = -1, 39472062f5744557e270a38192554c3126ea5f97434Tim Northover SY = 0xf 39572062f5744557e270a38192554c3126ea5f97434Tim Northover }; 396dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines struct ISBMapper : AArch64NamedImmMapper { 39772062f5744557e270a38192554c3126ea5f97434Tim Northover const static Mapping ISBPairs[]; 39872062f5744557e270a38192554c3126ea5f97434Tim Northover 39972062f5744557e270a38192554c3126ea5f97434Tim Northover ISBMapper(); 40072062f5744557e270a38192554c3126ea5f97434Tim Northover }; 40172062f5744557e270a38192554c3126ea5f97434Tim Northover} 40272062f5744557e270a38192554c3126ea5f97434Tim Northover 403dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesnamespace AArch64PRFM { 40472062f5744557e270a38192554c3126ea5f97434Tim Northover enum PRFMValues { 40572062f5744557e270a38192554c3126ea5f97434Tim Northover Invalid = -1, 40672062f5744557e270a38192554c3126ea5f97434Tim Northover PLDL1KEEP = 0x00, 40772062f5744557e270a38192554c3126ea5f97434Tim Northover PLDL1STRM = 0x01, 40872062f5744557e270a38192554c3126ea5f97434Tim Northover PLDL2KEEP = 0x02, 40972062f5744557e270a38192554c3126ea5f97434Tim Northover PLDL2STRM = 0x03, 41072062f5744557e270a38192554c3126ea5f97434Tim Northover PLDL3KEEP = 0x04, 41172062f5744557e270a38192554c3126ea5f97434Tim Northover PLDL3STRM = 0x05, 4129e3b31345f0d17b757e183a8384db92616256926Tim Northover PLIL1KEEP = 0x08, 4139e3b31345f0d17b757e183a8384db92616256926Tim Northover PLIL1STRM = 0x09, 4149e3b31345f0d17b757e183a8384db92616256926Tim Northover PLIL2KEEP = 0x0a, 4159e3b31345f0d17b757e183a8384db92616256926Tim Northover PLIL2STRM = 0x0b, 4169e3b31345f0d17b757e183a8384db92616256926Tim Northover PLIL3KEEP = 0x0c, 4179e3b31345f0d17b757e183a8384db92616256926Tim Northover PLIL3STRM = 0x0d, 41872062f5744557e270a38192554c3126ea5f97434Tim Northover PSTL1KEEP = 0x10, 41972062f5744557e270a38192554c3126ea5f97434Tim Northover PSTL1STRM = 0x11, 42072062f5744557e270a38192554c3126ea5f97434Tim Northover PSTL2KEEP = 0x12, 42172062f5744557e270a38192554c3126ea5f97434Tim Northover PSTL2STRM = 0x13, 42272062f5744557e270a38192554c3126ea5f97434Tim Northover PSTL3KEEP = 0x14, 42372062f5744557e270a38192554c3126ea5f97434Tim Northover PSTL3STRM = 0x15 42472062f5744557e270a38192554c3126ea5f97434Tim Northover }; 42572062f5744557e270a38192554c3126ea5f97434Tim Northover 426dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines struct PRFMMapper : AArch64NamedImmMapper { 42772062f5744557e270a38192554c3126ea5f97434Tim Northover const static Mapping PRFMPairs[]; 42872062f5744557e270a38192554c3126ea5f97434Tim Northover 42972062f5744557e270a38192554c3126ea5f97434Tim Northover PRFMMapper(); 43072062f5744557e270a38192554c3126ea5f97434Tim Northover }; 43172062f5744557e270a38192554c3126ea5f97434Tim Northover} 43272062f5744557e270a38192554c3126ea5f97434Tim Northover 433dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesnamespace AArch64PState { 43472062f5744557e270a38192554c3126ea5f97434Tim Northover enum PStateValues { 43572062f5744557e270a38192554c3126ea5f97434Tim Northover Invalid = -1, 43672062f5744557e270a38192554c3126ea5f97434Tim Northover SPSel = 0x05, 43772062f5744557e270a38192554c3126ea5f97434Tim Northover DAIFSet = 0x1e, 43872062f5744557e270a38192554c3126ea5f97434Tim Northover DAIFClr = 0x1f 43972062f5744557e270a38192554c3126ea5f97434Tim Northover }; 44072062f5744557e270a38192554c3126ea5f97434Tim Northover 441dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines struct PStateMapper : AArch64NamedImmMapper { 44272062f5744557e270a38192554c3126ea5f97434Tim Northover const static Mapping PStatePairs[]; 44372062f5744557e270a38192554c3126ea5f97434Tim Northover 44472062f5744557e270a38192554c3126ea5f97434Tim Northover PStateMapper(); 44572062f5744557e270a38192554c3126ea5f97434Tim Northover }; 44672062f5744557e270a38192554c3126ea5f97434Tim Northover 44772062f5744557e270a38192554c3126ea5f97434Tim Northover} 44872062f5744557e270a38192554c3126ea5f97434Tim Northover 449dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesnamespace AArch64SE { 45072062f5744557e270a38192554c3126ea5f97434Tim Northover enum ShiftExtSpecifiers { 45172062f5744557e270a38192554c3126ea5f97434Tim Northover Invalid = -1, 45272062f5744557e270a38192554c3126ea5f97434Tim Northover LSL, 45387773c318fcee853fb34a80a10c4347d523bdafbTim Northover MSL, 45472062f5744557e270a38192554c3126ea5f97434Tim Northover LSR, 45572062f5744557e270a38192554c3126ea5f97434Tim Northover ASR, 45672062f5744557e270a38192554c3126ea5f97434Tim Northover ROR, 45772062f5744557e270a38192554c3126ea5f97434Tim Northover 45872062f5744557e270a38192554c3126ea5f97434Tim Northover UXTB, 45972062f5744557e270a38192554c3126ea5f97434Tim Northover UXTH, 46072062f5744557e270a38192554c3126ea5f97434Tim Northover UXTW, 46172062f5744557e270a38192554c3126ea5f97434Tim Northover UXTX, 46272062f5744557e270a38192554c3126ea5f97434Tim Northover 46372062f5744557e270a38192554c3126ea5f97434Tim Northover SXTB, 46472062f5744557e270a38192554c3126ea5f97434Tim Northover SXTH, 46572062f5744557e270a38192554c3126ea5f97434Tim Northover SXTW, 46672062f5744557e270a38192554c3126ea5f97434Tim Northover SXTX 46772062f5744557e270a38192554c3126ea5f97434Tim Northover }; 46872062f5744557e270a38192554c3126ea5f97434Tim Northover} 46972062f5744557e270a38192554c3126ea5f97434Tim Northover 470dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesnamespace AArch64Layout { 4716a5a667517160ca1b557002a29d08868ae029451Hao Liu enum VectorLayout { 4726a5a667517160ca1b557002a29d08868ae029451Hao Liu Invalid = -1, 4739add5c2d4b282f7cae583ece5cea3f83d33c488bBill Wendling VL_8B, 4749add5c2d4b282f7cae583ece5cea3f83d33c488bBill Wendling VL_4H, 4759add5c2d4b282f7cae583ece5cea3f83d33c488bBill Wendling VL_2S, 4769add5c2d4b282f7cae583ece5cea3f83d33c488bBill Wendling VL_1D, 4776a5a667517160ca1b557002a29d08868ae029451Hao Liu 4789add5c2d4b282f7cae583ece5cea3f83d33c488bBill Wendling VL_16B, 4799add5c2d4b282f7cae583ece5cea3f83d33c488bBill Wendling VL_8H, 4809add5c2d4b282f7cae583ece5cea3f83d33c488bBill Wendling VL_4S, 4819add5c2d4b282f7cae583ece5cea3f83d33c488bBill Wendling VL_2D, 48236c7806f4eacd676932ba630246f88e0e37b1cd4Hao Liu 48336c7806f4eacd676932ba630246f88e0e37b1cd4Hao Liu // Bare layout for the 128-bit vector 48436c7806f4eacd676932ba630246f88e0e37b1cd4Hao Liu // (only show ".b", ".h", ".s", ".d" without vector number) 4859add5c2d4b282f7cae583ece5cea3f83d33c488bBill Wendling VL_B, 4869add5c2d4b282f7cae583ece5cea3f83d33c488bBill Wendling VL_H, 4879add5c2d4b282f7cae583ece5cea3f83d33c488bBill Wendling VL_S, 4889add5c2d4b282f7cae583ece5cea3f83d33c488bBill Wendling VL_D 4896a5a667517160ca1b557002a29d08868ae029451Hao Liu }; 4906a5a667517160ca1b557002a29d08868ae029451Hao Liu} 4916a5a667517160ca1b557002a29d08868ae029451Hao Liu 4926a5a667517160ca1b557002a29d08868ae029451Hao Liuinline static const char * 493dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen HinesAArch64VectorLayoutToString(AArch64Layout::VectorLayout Layout) { 4946a5a667517160ca1b557002a29d08868ae029451Hao Liu switch (Layout) { 495dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64Layout::VL_8B: return ".8b"; 496dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64Layout::VL_4H: return ".4h"; 497dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64Layout::VL_2S: return ".2s"; 498dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64Layout::VL_1D: return ".1d"; 499dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64Layout::VL_16B: return ".16b"; 500dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64Layout::VL_8H: return ".8h"; 501dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64Layout::VL_4S: return ".4s"; 502dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64Layout::VL_2D: return ".2d"; 503dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64Layout::VL_B: return ".b"; 504dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64Layout::VL_H: return ".h"; 505dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64Layout::VL_S: return ".s"; 506dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case AArch64Layout::VL_D: return ".d"; 5076a5a667517160ca1b557002a29d08868ae029451Hao Liu default: llvm_unreachable("Unknown Vector Layout"); 5086a5a667517160ca1b557002a29d08868ae029451Hao Liu } 5096a5a667517160ca1b557002a29d08868ae029451Hao Liu} 5106a5a667517160ca1b557002a29d08868ae029451Hao Liu 511dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesinline static AArch64Layout::VectorLayout 512dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen HinesAArch64StringToVectorLayout(StringRef LayoutStr) { 513dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines return StringSwitch<AArch64Layout::VectorLayout>(LayoutStr) 514dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines .Case(".8b", AArch64Layout::VL_8B) 515dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines .Case(".4h", AArch64Layout::VL_4H) 516dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines .Case(".2s", AArch64Layout::VL_2S) 517dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines .Case(".1d", AArch64Layout::VL_1D) 518dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines .Case(".16b", AArch64Layout::VL_16B) 519dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines .Case(".8h", AArch64Layout::VL_8H) 520dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines .Case(".4s", AArch64Layout::VL_4S) 521dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines .Case(".2d", AArch64Layout::VL_2D) 522dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines .Case(".b", AArch64Layout::VL_B) 523dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines .Case(".h", AArch64Layout::VL_H) 524dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines .Case(".s", AArch64Layout::VL_S) 525dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines .Case(".d", AArch64Layout::VL_D) 526dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines .Default(AArch64Layout::Invalid); 5276a5a667517160ca1b557002a29d08868ae029451Hao Liu} 5286a5a667517160ca1b557002a29d08868ae029451Hao Liu 529dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesnamespace AArch64SysReg { 53072062f5744557e270a38192554c3126ea5f97434Tim Northover enum SysRegROValues { 53172062f5744557e270a38192554c3126ea5f97434Tim Northover MDCCSR_EL0 = 0x9808, // 10 011 0000 0001 000 53272062f5744557e270a38192554c3126ea5f97434Tim Northover DBGDTRRX_EL0 = 0x9828, // 10 011 0000 0101 000 53372062f5744557e270a38192554c3126ea5f97434Tim Northover MDRAR_EL1 = 0x8080, // 10 000 0001 0000 000 53472062f5744557e270a38192554c3126ea5f97434Tim Northover OSLSR_EL1 = 0x808c, // 10 000 0001 0001 100 53572062f5744557e270a38192554c3126ea5f97434Tim Northover DBGAUTHSTATUS_EL1 = 0x83f6, // 10 000 0111 1110 110 53672062f5744557e270a38192554c3126ea5f97434Tim Northover PMCEID0_EL0 = 0xdce6, // 11 011 1001 1100 110 53772062f5744557e270a38192554c3126ea5f97434Tim Northover PMCEID1_EL0 = 0xdce7, // 11 011 1001 1100 111 53872062f5744557e270a38192554c3126ea5f97434Tim Northover MIDR_EL1 = 0xc000, // 11 000 0000 0000 000 53972062f5744557e270a38192554c3126ea5f97434Tim Northover CCSIDR_EL1 = 0xc800, // 11 001 0000 0000 000 54072062f5744557e270a38192554c3126ea5f97434Tim Northover CLIDR_EL1 = 0xc801, // 11 001 0000 0000 001 54172062f5744557e270a38192554c3126ea5f97434Tim Northover CTR_EL0 = 0xd801, // 11 011 0000 0000 001 54272062f5744557e270a38192554c3126ea5f97434Tim Northover MPIDR_EL1 = 0xc005, // 11 000 0000 0000 101 54372062f5744557e270a38192554c3126ea5f97434Tim Northover REVIDR_EL1 = 0xc006, // 11 000 0000 0000 110 54472062f5744557e270a38192554c3126ea5f97434Tim Northover AIDR_EL1 = 0xc807, // 11 001 0000 0000 111 54572062f5744557e270a38192554c3126ea5f97434Tim Northover DCZID_EL0 = 0xd807, // 11 011 0000 0000 111 54672062f5744557e270a38192554c3126ea5f97434Tim Northover ID_PFR0_EL1 = 0xc008, // 11 000 0000 0001 000 54772062f5744557e270a38192554c3126ea5f97434Tim Northover ID_PFR1_EL1 = 0xc009, // 11 000 0000 0001 001 54872062f5744557e270a38192554c3126ea5f97434Tim Northover ID_DFR0_EL1 = 0xc00a, // 11 000 0000 0001 010 54972062f5744557e270a38192554c3126ea5f97434Tim Northover ID_AFR0_EL1 = 0xc00b, // 11 000 0000 0001 011 55072062f5744557e270a38192554c3126ea5f97434Tim Northover ID_MMFR0_EL1 = 0xc00c, // 11 000 0000 0001 100 55172062f5744557e270a38192554c3126ea5f97434Tim Northover ID_MMFR1_EL1 = 0xc00d, // 11 000 0000 0001 101 55272062f5744557e270a38192554c3126ea5f97434Tim Northover ID_MMFR2_EL1 = 0xc00e, // 11 000 0000 0001 110 55372062f5744557e270a38192554c3126ea5f97434Tim Northover ID_MMFR3_EL1 = 0xc00f, // 11 000 0000 0001 111 55472062f5744557e270a38192554c3126ea5f97434Tim Northover ID_ISAR0_EL1 = 0xc010, // 11 000 0000 0010 000 55572062f5744557e270a38192554c3126ea5f97434Tim Northover ID_ISAR1_EL1 = 0xc011, // 11 000 0000 0010 001 55672062f5744557e270a38192554c3126ea5f97434Tim Northover ID_ISAR2_EL1 = 0xc012, // 11 000 0000 0010 010 55772062f5744557e270a38192554c3126ea5f97434Tim Northover ID_ISAR3_EL1 = 0xc013, // 11 000 0000 0010 011 55872062f5744557e270a38192554c3126ea5f97434Tim Northover ID_ISAR4_EL1 = 0xc014, // 11 000 0000 0010 100 55972062f5744557e270a38192554c3126ea5f97434Tim Northover ID_ISAR5_EL1 = 0xc015, // 11 000 0000 0010 101 560dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines ID_A64PFR0_EL1 = 0xc020, // 11 000 0000 0100 000 561dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines ID_A64PFR1_EL1 = 0xc021, // 11 000 0000 0100 001 562dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines ID_A64DFR0_EL1 = 0xc028, // 11 000 0000 0101 000 563dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines ID_A64DFR1_EL1 = 0xc029, // 11 000 0000 0101 001 564dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines ID_A64AFR0_EL1 = 0xc02c, // 11 000 0000 0101 100 565dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines ID_A64AFR1_EL1 = 0xc02d, // 11 000 0000 0101 101 566dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines ID_A64ISAR0_EL1 = 0xc030, // 11 000 0000 0110 000 567dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines ID_A64ISAR1_EL1 = 0xc031, // 11 000 0000 0110 001 568dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines ID_A64MMFR0_EL1 = 0xc038, // 11 000 0000 0111 000 569dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines ID_A64MMFR1_EL1 = 0xc039, // 11 000 0000 0111 001 57072062f5744557e270a38192554c3126ea5f97434Tim Northover MVFR0_EL1 = 0xc018, // 11 000 0000 0011 000 57172062f5744557e270a38192554c3126ea5f97434Tim Northover MVFR1_EL1 = 0xc019, // 11 000 0000 0011 001 57272062f5744557e270a38192554c3126ea5f97434Tim Northover MVFR2_EL1 = 0xc01a, // 11 000 0000 0011 010 57372062f5744557e270a38192554c3126ea5f97434Tim Northover RVBAR_EL1 = 0xc601, // 11 000 1100 0000 001 57472062f5744557e270a38192554c3126ea5f97434Tim Northover RVBAR_EL2 = 0xe601, // 11 100 1100 0000 001 57572062f5744557e270a38192554c3126ea5f97434Tim Northover RVBAR_EL3 = 0xf601, // 11 110 1100 0000 001 57672062f5744557e270a38192554c3126ea5f97434Tim Northover ISR_EL1 = 0xc608, // 11 000 1100 0001 000 57772062f5744557e270a38192554c3126ea5f97434Tim Northover CNTPCT_EL0 = 0xdf01, // 11 011 1110 0000 001 57842a1b2f0b196633c0327801e810fc98849a00c47Tim Northover CNTVCT_EL0 = 0xdf02, // 11 011 1110 0000 010 57942a1b2f0b196633c0327801e810fc98849a00c47Tim Northover 5804385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover // Trace registers 5814385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCSTATR = 0x8818, // 10 001 0000 0011 000 5824385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCIDR8 = 0x8806, // 10 001 0000 0000 110 5834385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCIDR9 = 0x880e, // 10 001 0000 0001 110 5844385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCIDR10 = 0x8816, // 10 001 0000 0010 110 5854385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCIDR11 = 0x881e, // 10 001 0000 0011 110 5864385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCIDR12 = 0x8826, // 10 001 0000 0100 110 5874385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCIDR13 = 0x882e, // 10 001 0000 0101 110 5884385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCIDR0 = 0x8847, // 10 001 0000 1000 111 5894385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCIDR1 = 0x884f, // 10 001 0000 1001 111 5904385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCIDR2 = 0x8857, // 10 001 0000 1010 111 5914385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCIDR3 = 0x885f, // 10 001 0000 1011 111 5924385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCIDR4 = 0x8867, // 10 001 0000 1100 111 5934385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCIDR5 = 0x886f, // 10 001 0000 1101 111 5944385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCIDR6 = 0x8877, // 10 001 0000 1110 111 5954385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCIDR7 = 0x887f, // 10 001 0000 1111 111 5964385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCOSLSR = 0x888c, // 10 001 0001 0001 100 5974385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCPDSR = 0x88ac, // 10 001 0001 0101 100 5984385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCDEVAFF0 = 0x8bd6, // 10 001 0111 1010 110 5994385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCDEVAFF1 = 0x8bde, // 10 001 0111 1011 110 6004385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCLSR = 0x8bee, // 10 001 0111 1101 110 6014385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCAUTHSTATUS = 0x8bf6, // 10 001 0111 1110 110 6024385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCDEVARCH = 0x8bfe, // 10 001 0111 1111 110 6034385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCDEVID = 0x8b97, // 10 001 0111 0010 111 6044385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCDEVTYPE = 0x8b9f, // 10 001 0111 0011 111 6054385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCPIDR4 = 0x8ba7, // 10 001 0111 0100 111 6064385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCPIDR5 = 0x8baf, // 10 001 0111 0101 111 6074385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCPIDR6 = 0x8bb7, // 10 001 0111 0110 111 6084385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCPIDR7 = 0x8bbf, // 10 001 0111 0111 111 6094385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCPIDR0 = 0x8bc7, // 10 001 0111 1000 111 6104385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCPIDR1 = 0x8bcf, // 10 001 0111 1001 111 6114385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCPIDR2 = 0x8bd7, // 10 001 0111 1010 111 6124385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCPIDR3 = 0x8bdf, // 10 001 0111 1011 111 6134385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCCIDR0 = 0x8be7, // 10 001 0111 1100 111 6144385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCCIDR1 = 0x8bef, // 10 001 0111 1101 111 6154385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCCIDR2 = 0x8bf7, // 10 001 0111 1110 111 6164385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCCIDR3 = 0x8bff, // 10 001 0111 1111 111 6174385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover 61842a1b2f0b196633c0327801e810fc98849a00c47Tim Northover // GICv3 registers 61942a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICC_IAR1_EL1 = 0xc660, // 11 000 1100 1100 000 62042a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICC_IAR0_EL1 = 0xc640, // 11 000 1100 1000 000 62142a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICC_HPPIR1_EL1 = 0xc662, // 11 000 1100 1100 010 62242a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICC_HPPIR0_EL1 = 0xc642, // 11 000 1100 1000 010 62342a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICC_RPR_EL1 = 0xc65b, // 11 000 1100 1011 011 62442a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICH_VTR_EL2 = 0xe659, // 11 100 1100 1011 001 62542a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICH_EISR_EL2 = 0xe65b, // 11 100 1100 1011 011 62642a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICH_ELSR_EL2 = 0xe65d // 11 100 1100 1011 101 62772062f5744557e270a38192554c3126ea5f97434Tim Northover }; 62872062f5744557e270a38192554c3126ea5f97434Tim Northover 62972062f5744557e270a38192554c3126ea5f97434Tim Northover enum SysRegWOValues { 63072062f5744557e270a38192554c3126ea5f97434Tim Northover DBGDTRTX_EL0 = 0x9828, // 10 011 0000 0101 000 63172062f5744557e270a38192554c3126ea5f97434Tim Northover OSLAR_EL1 = 0x8084, // 10 000 0001 0000 100 63242a1b2f0b196633c0327801e810fc98849a00c47Tim Northover PMSWINC_EL0 = 0xdce4, // 11 011 1001 1100 100 63342a1b2f0b196633c0327801e810fc98849a00c47Tim Northover 6344385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover // Trace Registers 6354385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCOSLAR = 0x8884, // 10 001 0001 0000 100 6364385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCLAR = 0x8be6, // 10 001 0111 1100 110 6374385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover 63842a1b2f0b196633c0327801e810fc98849a00c47Tim Northover // GICv3 registers 63942a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICC_EOIR1_EL1 = 0xc661, // 11 000 1100 1100 001 64042a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICC_EOIR0_EL1 = 0xc641, // 11 000 1100 1000 001 64142a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICC_DIR_EL1 = 0xc659, // 11 000 1100 1011 001 64242a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICC_SGI1R_EL1 = 0xc65d, // 11 000 1100 1011 101 64342a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICC_ASGI1R_EL1 = 0xc65e, // 11 000 1100 1011 110 64442a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICC_SGI0R_EL1 = 0xc65f // 11 000 1100 1011 111 64572062f5744557e270a38192554c3126ea5f97434Tim Northover }; 64672062f5744557e270a38192554c3126ea5f97434Tim Northover 64772062f5744557e270a38192554c3126ea5f97434Tim Northover enum SysRegValues { 64872062f5744557e270a38192554c3126ea5f97434Tim Northover Invalid = -1, // Op0 Op1 CRn CRm Op2 64972062f5744557e270a38192554c3126ea5f97434Tim Northover OSDTRRX_EL1 = 0x8002, // 10 000 0000 0000 010 65072062f5744557e270a38192554c3126ea5f97434Tim Northover OSDTRTX_EL1 = 0x801a, // 10 000 0000 0011 010 65172062f5744557e270a38192554c3126ea5f97434Tim Northover TEECR32_EL1 = 0x9000, // 10 010 0000 0000 000 65272062f5744557e270a38192554c3126ea5f97434Tim Northover MDCCINT_EL1 = 0x8010, // 10 000 0000 0010 000 65372062f5744557e270a38192554c3126ea5f97434Tim Northover MDSCR_EL1 = 0x8012, // 10 000 0000 0010 010 65472062f5744557e270a38192554c3126ea5f97434Tim Northover DBGDTR_EL0 = 0x9820, // 10 011 0000 0100 000 65572062f5744557e270a38192554c3126ea5f97434Tim Northover OSECCR_EL1 = 0x8032, // 10 000 0000 0110 010 65672062f5744557e270a38192554c3126ea5f97434Tim Northover DBGVCR32_EL2 = 0xa038, // 10 100 0000 0111 000 65772062f5744557e270a38192554c3126ea5f97434Tim Northover DBGBVR0_EL1 = 0x8004, // 10 000 0000 0000 100 65872062f5744557e270a38192554c3126ea5f97434Tim Northover DBGBVR1_EL1 = 0x800c, // 10 000 0000 0001 100 65972062f5744557e270a38192554c3126ea5f97434Tim Northover DBGBVR2_EL1 = 0x8014, // 10 000 0000 0010 100 66072062f5744557e270a38192554c3126ea5f97434Tim Northover DBGBVR3_EL1 = 0x801c, // 10 000 0000 0011 100 66172062f5744557e270a38192554c3126ea5f97434Tim Northover DBGBVR4_EL1 = 0x8024, // 10 000 0000 0100 100 66272062f5744557e270a38192554c3126ea5f97434Tim Northover DBGBVR5_EL1 = 0x802c, // 10 000 0000 0101 100 66372062f5744557e270a38192554c3126ea5f97434Tim Northover DBGBVR6_EL1 = 0x8034, // 10 000 0000 0110 100 66472062f5744557e270a38192554c3126ea5f97434Tim Northover DBGBVR7_EL1 = 0x803c, // 10 000 0000 0111 100 66572062f5744557e270a38192554c3126ea5f97434Tim Northover DBGBVR8_EL1 = 0x8044, // 10 000 0000 1000 100 66672062f5744557e270a38192554c3126ea5f97434Tim Northover DBGBVR9_EL1 = 0x804c, // 10 000 0000 1001 100 66772062f5744557e270a38192554c3126ea5f97434Tim Northover DBGBVR10_EL1 = 0x8054, // 10 000 0000 1010 100 66872062f5744557e270a38192554c3126ea5f97434Tim Northover DBGBVR11_EL1 = 0x805c, // 10 000 0000 1011 100 66972062f5744557e270a38192554c3126ea5f97434Tim Northover DBGBVR12_EL1 = 0x8064, // 10 000 0000 1100 100 67072062f5744557e270a38192554c3126ea5f97434Tim Northover DBGBVR13_EL1 = 0x806c, // 10 000 0000 1101 100 67172062f5744557e270a38192554c3126ea5f97434Tim Northover DBGBVR14_EL1 = 0x8074, // 10 000 0000 1110 100 67272062f5744557e270a38192554c3126ea5f97434Tim Northover DBGBVR15_EL1 = 0x807c, // 10 000 0000 1111 100 67372062f5744557e270a38192554c3126ea5f97434Tim Northover DBGBCR0_EL1 = 0x8005, // 10 000 0000 0000 101 67472062f5744557e270a38192554c3126ea5f97434Tim Northover DBGBCR1_EL1 = 0x800d, // 10 000 0000 0001 101 67572062f5744557e270a38192554c3126ea5f97434Tim Northover DBGBCR2_EL1 = 0x8015, // 10 000 0000 0010 101 67672062f5744557e270a38192554c3126ea5f97434Tim Northover DBGBCR3_EL1 = 0x801d, // 10 000 0000 0011 101 67772062f5744557e270a38192554c3126ea5f97434Tim Northover DBGBCR4_EL1 = 0x8025, // 10 000 0000 0100 101 67872062f5744557e270a38192554c3126ea5f97434Tim Northover DBGBCR5_EL1 = 0x802d, // 10 000 0000 0101 101 67972062f5744557e270a38192554c3126ea5f97434Tim Northover DBGBCR6_EL1 = 0x8035, // 10 000 0000 0110 101 68072062f5744557e270a38192554c3126ea5f97434Tim Northover DBGBCR7_EL1 = 0x803d, // 10 000 0000 0111 101 68172062f5744557e270a38192554c3126ea5f97434Tim Northover DBGBCR8_EL1 = 0x8045, // 10 000 0000 1000 101 68272062f5744557e270a38192554c3126ea5f97434Tim Northover DBGBCR9_EL1 = 0x804d, // 10 000 0000 1001 101 68372062f5744557e270a38192554c3126ea5f97434Tim Northover DBGBCR10_EL1 = 0x8055, // 10 000 0000 1010 101 68472062f5744557e270a38192554c3126ea5f97434Tim Northover DBGBCR11_EL1 = 0x805d, // 10 000 0000 1011 101 68572062f5744557e270a38192554c3126ea5f97434Tim Northover DBGBCR12_EL1 = 0x8065, // 10 000 0000 1100 101 68672062f5744557e270a38192554c3126ea5f97434Tim Northover DBGBCR13_EL1 = 0x806d, // 10 000 0000 1101 101 68772062f5744557e270a38192554c3126ea5f97434Tim Northover DBGBCR14_EL1 = 0x8075, // 10 000 0000 1110 101 68872062f5744557e270a38192554c3126ea5f97434Tim Northover DBGBCR15_EL1 = 0x807d, // 10 000 0000 1111 101 68972062f5744557e270a38192554c3126ea5f97434Tim Northover DBGWVR0_EL1 = 0x8006, // 10 000 0000 0000 110 69072062f5744557e270a38192554c3126ea5f97434Tim Northover DBGWVR1_EL1 = 0x800e, // 10 000 0000 0001 110 69172062f5744557e270a38192554c3126ea5f97434Tim Northover DBGWVR2_EL1 = 0x8016, // 10 000 0000 0010 110 69272062f5744557e270a38192554c3126ea5f97434Tim Northover DBGWVR3_EL1 = 0x801e, // 10 000 0000 0011 110 69372062f5744557e270a38192554c3126ea5f97434Tim Northover DBGWVR4_EL1 = 0x8026, // 10 000 0000 0100 110 69472062f5744557e270a38192554c3126ea5f97434Tim Northover DBGWVR5_EL1 = 0x802e, // 10 000 0000 0101 110 69572062f5744557e270a38192554c3126ea5f97434Tim Northover DBGWVR6_EL1 = 0x8036, // 10 000 0000 0110 110 69672062f5744557e270a38192554c3126ea5f97434Tim Northover DBGWVR7_EL1 = 0x803e, // 10 000 0000 0111 110 69772062f5744557e270a38192554c3126ea5f97434Tim Northover DBGWVR8_EL1 = 0x8046, // 10 000 0000 1000 110 69872062f5744557e270a38192554c3126ea5f97434Tim Northover DBGWVR9_EL1 = 0x804e, // 10 000 0000 1001 110 69972062f5744557e270a38192554c3126ea5f97434Tim Northover DBGWVR10_EL1 = 0x8056, // 10 000 0000 1010 110 70072062f5744557e270a38192554c3126ea5f97434Tim Northover DBGWVR11_EL1 = 0x805e, // 10 000 0000 1011 110 70172062f5744557e270a38192554c3126ea5f97434Tim Northover DBGWVR12_EL1 = 0x8066, // 10 000 0000 1100 110 70272062f5744557e270a38192554c3126ea5f97434Tim Northover DBGWVR13_EL1 = 0x806e, // 10 000 0000 1101 110 70372062f5744557e270a38192554c3126ea5f97434Tim Northover DBGWVR14_EL1 = 0x8076, // 10 000 0000 1110 110 70472062f5744557e270a38192554c3126ea5f97434Tim Northover DBGWVR15_EL1 = 0x807e, // 10 000 0000 1111 110 70572062f5744557e270a38192554c3126ea5f97434Tim Northover DBGWCR0_EL1 = 0x8007, // 10 000 0000 0000 111 70672062f5744557e270a38192554c3126ea5f97434Tim Northover DBGWCR1_EL1 = 0x800f, // 10 000 0000 0001 111 70772062f5744557e270a38192554c3126ea5f97434Tim Northover DBGWCR2_EL1 = 0x8017, // 10 000 0000 0010 111 70872062f5744557e270a38192554c3126ea5f97434Tim Northover DBGWCR3_EL1 = 0x801f, // 10 000 0000 0011 111 70972062f5744557e270a38192554c3126ea5f97434Tim Northover DBGWCR4_EL1 = 0x8027, // 10 000 0000 0100 111 71072062f5744557e270a38192554c3126ea5f97434Tim Northover DBGWCR5_EL1 = 0x802f, // 10 000 0000 0101 111 71172062f5744557e270a38192554c3126ea5f97434Tim Northover DBGWCR6_EL1 = 0x8037, // 10 000 0000 0110 111 71272062f5744557e270a38192554c3126ea5f97434Tim Northover DBGWCR7_EL1 = 0x803f, // 10 000 0000 0111 111 71372062f5744557e270a38192554c3126ea5f97434Tim Northover DBGWCR8_EL1 = 0x8047, // 10 000 0000 1000 111 71472062f5744557e270a38192554c3126ea5f97434Tim Northover DBGWCR9_EL1 = 0x804f, // 10 000 0000 1001 111 71572062f5744557e270a38192554c3126ea5f97434Tim Northover DBGWCR10_EL1 = 0x8057, // 10 000 0000 1010 111 71672062f5744557e270a38192554c3126ea5f97434Tim Northover DBGWCR11_EL1 = 0x805f, // 10 000 0000 1011 111 71772062f5744557e270a38192554c3126ea5f97434Tim Northover DBGWCR12_EL1 = 0x8067, // 10 000 0000 1100 111 71872062f5744557e270a38192554c3126ea5f97434Tim Northover DBGWCR13_EL1 = 0x806f, // 10 000 0000 1101 111 71972062f5744557e270a38192554c3126ea5f97434Tim Northover DBGWCR14_EL1 = 0x8077, // 10 000 0000 1110 111 72072062f5744557e270a38192554c3126ea5f97434Tim Northover DBGWCR15_EL1 = 0x807f, // 10 000 0000 1111 111 72172062f5744557e270a38192554c3126ea5f97434Tim Northover TEEHBR32_EL1 = 0x9080, // 10 010 0001 0000 000 72272062f5744557e270a38192554c3126ea5f97434Tim Northover OSDLR_EL1 = 0x809c, // 10 000 0001 0011 100 72372062f5744557e270a38192554c3126ea5f97434Tim Northover DBGPRCR_EL1 = 0x80a4, // 10 000 0001 0100 100 72472062f5744557e270a38192554c3126ea5f97434Tim Northover DBGCLAIMSET_EL1 = 0x83c6, // 10 000 0111 1000 110 72572062f5744557e270a38192554c3126ea5f97434Tim Northover DBGCLAIMCLR_EL1 = 0x83ce, // 10 000 0111 1001 110 72672062f5744557e270a38192554c3126ea5f97434Tim Northover CSSELR_EL1 = 0xd000, // 11 010 0000 0000 000 72772062f5744557e270a38192554c3126ea5f97434Tim Northover VPIDR_EL2 = 0xe000, // 11 100 0000 0000 000 72872062f5744557e270a38192554c3126ea5f97434Tim Northover VMPIDR_EL2 = 0xe005, // 11 100 0000 0000 101 72972062f5744557e270a38192554c3126ea5f97434Tim Northover CPACR_EL1 = 0xc082, // 11 000 0001 0000 010 73072062f5744557e270a38192554c3126ea5f97434Tim Northover SCTLR_EL1 = 0xc080, // 11 000 0001 0000 000 73172062f5744557e270a38192554c3126ea5f97434Tim Northover SCTLR_EL2 = 0xe080, // 11 100 0001 0000 000 73272062f5744557e270a38192554c3126ea5f97434Tim Northover SCTLR_EL3 = 0xf080, // 11 110 0001 0000 000 73372062f5744557e270a38192554c3126ea5f97434Tim Northover ACTLR_EL1 = 0xc081, // 11 000 0001 0000 001 73472062f5744557e270a38192554c3126ea5f97434Tim Northover ACTLR_EL2 = 0xe081, // 11 100 0001 0000 001 73572062f5744557e270a38192554c3126ea5f97434Tim Northover ACTLR_EL3 = 0xf081, // 11 110 0001 0000 001 73672062f5744557e270a38192554c3126ea5f97434Tim Northover HCR_EL2 = 0xe088, // 11 100 0001 0001 000 73772062f5744557e270a38192554c3126ea5f97434Tim Northover SCR_EL3 = 0xf088, // 11 110 0001 0001 000 73872062f5744557e270a38192554c3126ea5f97434Tim Northover MDCR_EL2 = 0xe089, // 11 100 0001 0001 001 73972062f5744557e270a38192554c3126ea5f97434Tim Northover SDER32_EL3 = 0xf089, // 11 110 0001 0001 001 74072062f5744557e270a38192554c3126ea5f97434Tim Northover CPTR_EL2 = 0xe08a, // 11 100 0001 0001 010 74172062f5744557e270a38192554c3126ea5f97434Tim Northover CPTR_EL3 = 0xf08a, // 11 110 0001 0001 010 74272062f5744557e270a38192554c3126ea5f97434Tim Northover HSTR_EL2 = 0xe08b, // 11 100 0001 0001 011 74372062f5744557e270a38192554c3126ea5f97434Tim Northover HACR_EL2 = 0xe08f, // 11 100 0001 0001 111 74472062f5744557e270a38192554c3126ea5f97434Tim Northover MDCR_EL3 = 0xf099, // 11 110 0001 0011 001 74572062f5744557e270a38192554c3126ea5f97434Tim Northover TTBR0_EL1 = 0xc100, // 11 000 0010 0000 000 74672062f5744557e270a38192554c3126ea5f97434Tim Northover TTBR0_EL2 = 0xe100, // 11 100 0010 0000 000 74772062f5744557e270a38192554c3126ea5f97434Tim Northover TTBR0_EL3 = 0xf100, // 11 110 0010 0000 000 74872062f5744557e270a38192554c3126ea5f97434Tim Northover TTBR1_EL1 = 0xc101, // 11 000 0010 0000 001 74972062f5744557e270a38192554c3126ea5f97434Tim Northover TCR_EL1 = 0xc102, // 11 000 0010 0000 010 75072062f5744557e270a38192554c3126ea5f97434Tim Northover TCR_EL2 = 0xe102, // 11 100 0010 0000 010 75172062f5744557e270a38192554c3126ea5f97434Tim Northover TCR_EL3 = 0xf102, // 11 110 0010 0000 010 75272062f5744557e270a38192554c3126ea5f97434Tim Northover VTTBR_EL2 = 0xe108, // 11 100 0010 0001 000 75372062f5744557e270a38192554c3126ea5f97434Tim Northover VTCR_EL2 = 0xe10a, // 11 100 0010 0001 010 75472062f5744557e270a38192554c3126ea5f97434Tim Northover DACR32_EL2 = 0xe180, // 11 100 0011 0000 000 75572062f5744557e270a38192554c3126ea5f97434Tim Northover SPSR_EL1 = 0xc200, // 11 000 0100 0000 000 75672062f5744557e270a38192554c3126ea5f97434Tim Northover SPSR_EL2 = 0xe200, // 11 100 0100 0000 000 75772062f5744557e270a38192554c3126ea5f97434Tim Northover SPSR_EL3 = 0xf200, // 11 110 0100 0000 000 75872062f5744557e270a38192554c3126ea5f97434Tim Northover ELR_EL1 = 0xc201, // 11 000 0100 0000 001 75972062f5744557e270a38192554c3126ea5f97434Tim Northover ELR_EL2 = 0xe201, // 11 100 0100 0000 001 76072062f5744557e270a38192554c3126ea5f97434Tim Northover ELR_EL3 = 0xf201, // 11 110 0100 0000 001 76172062f5744557e270a38192554c3126ea5f97434Tim Northover SP_EL0 = 0xc208, // 11 000 0100 0001 000 76272062f5744557e270a38192554c3126ea5f97434Tim Northover SP_EL1 = 0xe208, // 11 100 0100 0001 000 76372062f5744557e270a38192554c3126ea5f97434Tim Northover SP_EL2 = 0xf208, // 11 110 0100 0001 000 76472062f5744557e270a38192554c3126ea5f97434Tim Northover SPSel = 0xc210, // 11 000 0100 0010 000 76572062f5744557e270a38192554c3126ea5f97434Tim Northover NZCV = 0xda10, // 11 011 0100 0010 000 76672062f5744557e270a38192554c3126ea5f97434Tim Northover DAIF = 0xda11, // 11 011 0100 0010 001 76772062f5744557e270a38192554c3126ea5f97434Tim Northover CurrentEL = 0xc212, // 11 000 0100 0010 010 76872062f5744557e270a38192554c3126ea5f97434Tim Northover SPSR_irq = 0xe218, // 11 100 0100 0011 000 76972062f5744557e270a38192554c3126ea5f97434Tim Northover SPSR_abt = 0xe219, // 11 100 0100 0011 001 77072062f5744557e270a38192554c3126ea5f97434Tim Northover SPSR_und = 0xe21a, // 11 100 0100 0011 010 77172062f5744557e270a38192554c3126ea5f97434Tim Northover SPSR_fiq = 0xe21b, // 11 100 0100 0011 011 77272062f5744557e270a38192554c3126ea5f97434Tim Northover FPCR = 0xda20, // 11 011 0100 0100 000 77372062f5744557e270a38192554c3126ea5f97434Tim Northover FPSR = 0xda21, // 11 011 0100 0100 001 77472062f5744557e270a38192554c3126ea5f97434Tim Northover DSPSR_EL0 = 0xda28, // 11 011 0100 0101 000 77572062f5744557e270a38192554c3126ea5f97434Tim Northover DLR_EL0 = 0xda29, // 11 011 0100 0101 001 77672062f5744557e270a38192554c3126ea5f97434Tim Northover IFSR32_EL2 = 0xe281, // 11 100 0101 0000 001 77772062f5744557e270a38192554c3126ea5f97434Tim Northover AFSR0_EL1 = 0xc288, // 11 000 0101 0001 000 77872062f5744557e270a38192554c3126ea5f97434Tim Northover AFSR0_EL2 = 0xe288, // 11 100 0101 0001 000 77972062f5744557e270a38192554c3126ea5f97434Tim Northover AFSR0_EL3 = 0xf288, // 11 110 0101 0001 000 78072062f5744557e270a38192554c3126ea5f97434Tim Northover AFSR1_EL1 = 0xc289, // 11 000 0101 0001 001 78172062f5744557e270a38192554c3126ea5f97434Tim Northover AFSR1_EL2 = 0xe289, // 11 100 0101 0001 001 78272062f5744557e270a38192554c3126ea5f97434Tim Northover AFSR1_EL3 = 0xf289, // 11 110 0101 0001 001 78372062f5744557e270a38192554c3126ea5f97434Tim Northover ESR_EL1 = 0xc290, // 11 000 0101 0010 000 78472062f5744557e270a38192554c3126ea5f97434Tim Northover ESR_EL2 = 0xe290, // 11 100 0101 0010 000 78572062f5744557e270a38192554c3126ea5f97434Tim Northover ESR_EL3 = 0xf290, // 11 110 0101 0010 000 78672062f5744557e270a38192554c3126ea5f97434Tim Northover FPEXC32_EL2 = 0xe298, // 11 100 0101 0011 000 78772062f5744557e270a38192554c3126ea5f97434Tim Northover FAR_EL1 = 0xc300, // 11 000 0110 0000 000 78872062f5744557e270a38192554c3126ea5f97434Tim Northover FAR_EL2 = 0xe300, // 11 100 0110 0000 000 78972062f5744557e270a38192554c3126ea5f97434Tim Northover FAR_EL3 = 0xf300, // 11 110 0110 0000 000 79072062f5744557e270a38192554c3126ea5f97434Tim Northover HPFAR_EL2 = 0xe304, // 11 100 0110 0000 100 79172062f5744557e270a38192554c3126ea5f97434Tim Northover PAR_EL1 = 0xc3a0, // 11 000 0111 0100 000 79272062f5744557e270a38192554c3126ea5f97434Tim Northover PMCR_EL0 = 0xdce0, // 11 011 1001 1100 000 79372062f5744557e270a38192554c3126ea5f97434Tim Northover PMCNTENSET_EL0 = 0xdce1, // 11 011 1001 1100 001 79472062f5744557e270a38192554c3126ea5f97434Tim Northover PMCNTENCLR_EL0 = 0xdce2, // 11 011 1001 1100 010 79572062f5744557e270a38192554c3126ea5f97434Tim Northover PMOVSCLR_EL0 = 0xdce3, // 11 011 1001 1100 011 79672062f5744557e270a38192554c3126ea5f97434Tim Northover PMSELR_EL0 = 0xdce5, // 11 011 1001 1100 101 79772062f5744557e270a38192554c3126ea5f97434Tim Northover PMCCNTR_EL0 = 0xdce8, // 11 011 1001 1101 000 79872062f5744557e270a38192554c3126ea5f97434Tim Northover PMXEVTYPER_EL0 = 0xdce9, // 11 011 1001 1101 001 79972062f5744557e270a38192554c3126ea5f97434Tim Northover PMXEVCNTR_EL0 = 0xdcea, // 11 011 1001 1101 010 80072062f5744557e270a38192554c3126ea5f97434Tim Northover PMUSERENR_EL0 = 0xdcf0, // 11 011 1001 1110 000 80172062f5744557e270a38192554c3126ea5f97434Tim Northover PMINTENSET_EL1 = 0xc4f1, // 11 000 1001 1110 001 80272062f5744557e270a38192554c3126ea5f97434Tim Northover PMINTENCLR_EL1 = 0xc4f2, // 11 000 1001 1110 010 80372062f5744557e270a38192554c3126ea5f97434Tim Northover PMOVSSET_EL0 = 0xdcf3, // 11 011 1001 1110 011 80472062f5744557e270a38192554c3126ea5f97434Tim Northover MAIR_EL1 = 0xc510, // 11 000 1010 0010 000 80572062f5744557e270a38192554c3126ea5f97434Tim Northover MAIR_EL2 = 0xe510, // 11 100 1010 0010 000 80672062f5744557e270a38192554c3126ea5f97434Tim Northover MAIR_EL3 = 0xf510, // 11 110 1010 0010 000 80772062f5744557e270a38192554c3126ea5f97434Tim Northover AMAIR_EL1 = 0xc518, // 11 000 1010 0011 000 80872062f5744557e270a38192554c3126ea5f97434Tim Northover AMAIR_EL2 = 0xe518, // 11 100 1010 0011 000 80972062f5744557e270a38192554c3126ea5f97434Tim Northover AMAIR_EL3 = 0xf518, // 11 110 1010 0011 000 81072062f5744557e270a38192554c3126ea5f97434Tim Northover VBAR_EL1 = 0xc600, // 11 000 1100 0000 000 81172062f5744557e270a38192554c3126ea5f97434Tim Northover VBAR_EL2 = 0xe600, // 11 100 1100 0000 000 81272062f5744557e270a38192554c3126ea5f97434Tim Northover VBAR_EL3 = 0xf600, // 11 110 1100 0000 000 81372062f5744557e270a38192554c3126ea5f97434Tim Northover RMR_EL1 = 0xc602, // 11 000 1100 0000 010 81472062f5744557e270a38192554c3126ea5f97434Tim Northover RMR_EL2 = 0xe602, // 11 100 1100 0000 010 81572062f5744557e270a38192554c3126ea5f97434Tim Northover RMR_EL3 = 0xf602, // 11 110 1100 0000 010 81672062f5744557e270a38192554c3126ea5f97434Tim Northover CONTEXTIDR_EL1 = 0xc681, // 11 000 1101 0000 001 81772062f5744557e270a38192554c3126ea5f97434Tim Northover TPIDR_EL0 = 0xde82, // 11 011 1101 0000 010 81872062f5744557e270a38192554c3126ea5f97434Tim Northover TPIDR_EL2 = 0xe682, // 11 100 1101 0000 010 81972062f5744557e270a38192554c3126ea5f97434Tim Northover TPIDR_EL3 = 0xf682, // 11 110 1101 0000 010 82072062f5744557e270a38192554c3126ea5f97434Tim Northover TPIDRRO_EL0 = 0xde83, // 11 011 1101 0000 011 82172062f5744557e270a38192554c3126ea5f97434Tim Northover TPIDR_EL1 = 0xc684, // 11 000 1101 0000 100 82272062f5744557e270a38192554c3126ea5f97434Tim Northover CNTFRQ_EL0 = 0xdf00, // 11 011 1110 0000 000 82372062f5744557e270a38192554c3126ea5f97434Tim Northover CNTVOFF_EL2 = 0xe703, // 11 100 1110 0000 011 82472062f5744557e270a38192554c3126ea5f97434Tim Northover CNTKCTL_EL1 = 0xc708, // 11 000 1110 0001 000 82572062f5744557e270a38192554c3126ea5f97434Tim Northover CNTHCTL_EL2 = 0xe708, // 11 100 1110 0001 000 82672062f5744557e270a38192554c3126ea5f97434Tim Northover CNTP_TVAL_EL0 = 0xdf10, // 11 011 1110 0010 000 82772062f5744557e270a38192554c3126ea5f97434Tim Northover CNTHP_TVAL_EL2 = 0xe710, // 11 100 1110 0010 000 82872062f5744557e270a38192554c3126ea5f97434Tim Northover CNTPS_TVAL_EL1 = 0xff10, // 11 111 1110 0010 000 82972062f5744557e270a38192554c3126ea5f97434Tim Northover CNTP_CTL_EL0 = 0xdf11, // 11 011 1110 0010 001 83072062f5744557e270a38192554c3126ea5f97434Tim Northover CNTHP_CTL_EL2 = 0xe711, // 11 100 1110 0010 001 83172062f5744557e270a38192554c3126ea5f97434Tim Northover CNTPS_CTL_EL1 = 0xff11, // 11 111 1110 0010 001 83272062f5744557e270a38192554c3126ea5f97434Tim Northover CNTP_CVAL_EL0 = 0xdf12, // 11 011 1110 0010 010 83372062f5744557e270a38192554c3126ea5f97434Tim Northover CNTHP_CVAL_EL2 = 0xe712, // 11 100 1110 0010 010 83472062f5744557e270a38192554c3126ea5f97434Tim Northover CNTPS_CVAL_EL1 = 0xff12, // 11 111 1110 0010 010 83572062f5744557e270a38192554c3126ea5f97434Tim Northover CNTV_TVAL_EL0 = 0xdf18, // 11 011 1110 0011 000 83672062f5744557e270a38192554c3126ea5f97434Tim Northover CNTV_CTL_EL0 = 0xdf19, // 11 011 1110 0011 001 83772062f5744557e270a38192554c3126ea5f97434Tim Northover CNTV_CVAL_EL0 = 0xdf1a, // 11 011 1110 0011 010 83872062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVCNTR0_EL0 = 0xdf40, // 11 011 1110 1000 000 83972062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVCNTR1_EL0 = 0xdf41, // 11 011 1110 1000 001 84072062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVCNTR2_EL0 = 0xdf42, // 11 011 1110 1000 010 84172062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVCNTR3_EL0 = 0xdf43, // 11 011 1110 1000 011 84272062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVCNTR4_EL0 = 0xdf44, // 11 011 1110 1000 100 84372062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVCNTR5_EL0 = 0xdf45, // 11 011 1110 1000 101 84472062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVCNTR6_EL0 = 0xdf46, // 11 011 1110 1000 110 84572062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVCNTR7_EL0 = 0xdf47, // 11 011 1110 1000 111 84672062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVCNTR8_EL0 = 0xdf48, // 11 011 1110 1001 000 84772062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVCNTR9_EL0 = 0xdf49, // 11 011 1110 1001 001 84872062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVCNTR10_EL0 = 0xdf4a, // 11 011 1110 1001 010 84972062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVCNTR11_EL0 = 0xdf4b, // 11 011 1110 1001 011 85072062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVCNTR12_EL0 = 0xdf4c, // 11 011 1110 1001 100 85172062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVCNTR13_EL0 = 0xdf4d, // 11 011 1110 1001 101 85272062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVCNTR14_EL0 = 0xdf4e, // 11 011 1110 1001 110 85372062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVCNTR15_EL0 = 0xdf4f, // 11 011 1110 1001 111 85472062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVCNTR16_EL0 = 0xdf50, // 11 011 1110 1010 000 85572062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVCNTR17_EL0 = 0xdf51, // 11 011 1110 1010 001 85672062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVCNTR18_EL0 = 0xdf52, // 11 011 1110 1010 010 85772062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVCNTR19_EL0 = 0xdf53, // 11 011 1110 1010 011 85872062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVCNTR20_EL0 = 0xdf54, // 11 011 1110 1010 100 85972062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVCNTR21_EL0 = 0xdf55, // 11 011 1110 1010 101 86072062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVCNTR22_EL0 = 0xdf56, // 11 011 1110 1010 110 86172062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVCNTR23_EL0 = 0xdf57, // 11 011 1110 1010 111 86272062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVCNTR24_EL0 = 0xdf58, // 11 011 1110 1011 000 86372062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVCNTR25_EL0 = 0xdf59, // 11 011 1110 1011 001 86472062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVCNTR26_EL0 = 0xdf5a, // 11 011 1110 1011 010 86572062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVCNTR27_EL0 = 0xdf5b, // 11 011 1110 1011 011 86672062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVCNTR28_EL0 = 0xdf5c, // 11 011 1110 1011 100 86772062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVCNTR29_EL0 = 0xdf5d, // 11 011 1110 1011 101 86872062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVCNTR30_EL0 = 0xdf5e, // 11 011 1110 1011 110 86972062f5744557e270a38192554c3126ea5f97434Tim Northover PMCCFILTR_EL0 = 0xdf7f, // 11 011 1110 1111 111 87072062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVTYPER0_EL0 = 0xdf60, // 11 011 1110 1100 000 87172062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVTYPER1_EL0 = 0xdf61, // 11 011 1110 1100 001 87272062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVTYPER2_EL0 = 0xdf62, // 11 011 1110 1100 010 87372062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVTYPER3_EL0 = 0xdf63, // 11 011 1110 1100 011 87472062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVTYPER4_EL0 = 0xdf64, // 11 011 1110 1100 100 87572062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVTYPER5_EL0 = 0xdf65, // 11 011 1110 1100 101 87672062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVTYPER6_EL0 = 0xdf66, // 11 011 1110 1100 110 87772062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVTYPER7_EL0 = 0xdf67, // 11 011 1110 1100 111 87872062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVTYPER8_EL0 = 0xdf68, // 11 011 1110 1101 000 87972062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVTYPER9_EL0 = 0xdf69, // 11 011 1110 1101 001 88072062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVTYPER10_EL0 = 0xdf6a, // 11 011 1110 1101 010 88172062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVTYPER11_EL0 = 0xdf6b, // 11 011 1110 1101 011 88272062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVTYPER12_EL0 = 0xdf6c, // 11 011 1110 1101 100 88372062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVTYPER13_EL0 = 0xdf6d, // 11 011 1110 1101 101 88472062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVTYPER14_EL0 = 0xdf6e, // 11 011 1110 1101 110 88572062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVTYPER15_EL0 = 0xdf6f, // 11 011 1110 1101 111 88672062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVTYPER16_EL0 = 0xdf70, // 11 011 1110 1110 000 88772062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVTYPER17_EL0 = 0xdf71, // 11 011 1110 1110 001 88872062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVTYPER18_EL0 = 0xdf72, // 11 011 1110 1110 010 88972062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVTYPER19_EL0 = 0xdf73, // 11 011 1110 1110 011 89072062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVTYPER20_EL0 = 0xdf74, // 11 011 1110 1110 100 89172062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVTYPER21_EL0 = 0xdf75, // 11 011 1110 1110 101 89272062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVTYPER22_EL0 = 0xdf76, // 11 011 1110 1110 110 89372062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVTYPER23_EL0 = 0xdf77, // 11 011 1110 1110 111 89472062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVTYPER24_EL0 = 0xdf78, // 11 011 1110 1111 000 89572062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVTYPER25_EL0 = 0xdf79, // 11 011 1110 1111 001 89672062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVTYPER26_EL0 = 0xdf7a, // 11 011 1110 1111 010 89772062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVTYPER27_EL0 = 0xdf7b, // 11 011 1110 1111 011 89872062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVTYPER28_EL0 = 0xdf7c, // 11 011 1110 1111 100 89972062f5744557e270a38192554c3126ea5f97434Tim Northover PMEVTYPER29_EL0 = 0xdf7d, // 11 011 1110 1111 101 90042a1b2f0b196633c0327801e810fc98849a00c47Tim Northover PMEVTYPER30_EL0 = 0xdf7e, // 11 011 1110 1111 110 90142a1b2f0b196633c0327801e810fc98849a00c47Tim Northover 9024385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover // Trace registers 9034385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCPRGCTLR = 0x8808, // 10 001 0000 0001 000 9044385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCPROCSELR = 0x8810, // 10 001 0000 0010 000 9054385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCCONFIGR = 0x8820, // 10 001 0000 0100 000 9064385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCAUXCTLR = 0x8830, // 10 001 0000 0110 000 9074385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCEVENTCTL0R = 0x8840, // 10 001 0000 1000 000 9084385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCEVENTCTL1R = 0x8848, // 10 001 0000 1001 000 9094385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCSTALLCTLR = 0x8858, // 10 001 0000 1011 000 9104385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCTSCTLR = 0x8860, // 10 001 0000 1100 000 9114385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCSYNCPR = 0x8868, // 10 001 0000 1101 000 9124385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCCCCTLR = 0x8870, // 10 001 0000 1110 000 9134385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCBBCTLR = 0x8878, // 10 001 0000 1111 000 9144385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCTRACEIDR = 0x8801, // 10 001 0000 0000 001 9154385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCQCTLR = 0x8809, // 10 001 0000 0001 001 9164385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCVICTLR = 0x8802, // 10 001 0000 0000 010 9174385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCVIIECTLR = 0x880a, // 10 001 0000 0001 010 9184385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCVISSCTLR = 0x8812, // 10 001 0000 0010 010 9194385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCVIPCSSCTLR = 0x881a, // 10 001 0000 0011 010 9204385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCVDCTLR = 0x8842, // 10 001 0000 1000 010 9214385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCVDSACCTLR = 0x884a, // 10 001 0000 1001 010 9224385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCVDARCCTLR = 0x8852, // 10 001 0000 1010 010 9234385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCSEQEVR0 = 0x8804, // 10 001 0000 0000 100 9244385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCSEQEVR1 = 0x880c, // 10 001 0000 0001 100 9254385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCSEQEVR2 = 0x8814, // 10 001 0000 0010 100 9264385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCSEQRSTEVR = 0x8834, // 10 001 0000 0110 100 9274385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCSEQSTR = 0x883c, // 10 001 0000 0111 100 9284385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCEXTINSELR = 0x8844, // 10 001 0000 1000 100 9294385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCCNTRLDVR0 = 0x8805, // 10 001 0000 0000 101 9304385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCCNTRLDVR1 = 0x880d, // 10 001 0000 0001 101 9314385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCCNTRLDVR2 = 0x8815, // 10 001 0000 0010 101 9324385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCCNTRLDVR3 = 0x881d, // 10 001 0000 0011 101 9334385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCCNTCTLR0 = 0x8825, // 10 001 0000 0100 101 9344385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCCNTCTLR1 = 0x882d, // 10 001 0000 0101 101 9354385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCCNTCTLR2 = 0x8835, // 10 001 0000 0110 101 9364385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCCNTCTLR3 = 0x883d, // 10 001 0000 0111 101 9374385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCCNTVR0 = 0x8845, // 10 001 0000 1000 101 9384385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCCNTVR1 = 0x884d, // 10 001 0000 1001 101 9394385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCCNTVR2 = 0x8855, // 10 001 0000 1010 101 9404385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCCNTVR3 = 0x885d, // 10 001 0000 1011 101 9414385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCIMSPEC0 = 0x8807, // 10 001 0000 0000 111 9424385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCIMSPEC1 = 0x880f, // 10 001 0000 0001 111 9434385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCIMSPEC2 = 0x8817, // 10 001 0000 0010 111 9444385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCIMSPEC3 = 0x881f, // 10 001 0000 0011 111 9454385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCIMSPEC4 = 0x8827, // 10 001 0000 0100 111 9464385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCIMSPEC5 = 0x882f, // 10 001 0000 0101 111 9474385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCIMSPEC6 = 0x8837, // 10 001 0000 0110 111 9484385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCIMSPEC7 = 0x883f, // 10 001 0000 0111 111 9494385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCRSCTLR2 = 0x8890, // 10 001 0001 0010 000 9504385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCRSCTLR3 = 0x8898, // 10 001 0001 0011 000 9514385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCRSCTLR4 = 0x88a0, // 10 001 0001 0100 000 9524385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCRSCTLR5 = 0x88a8, // 10 001 0001 0101 000 9534385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCRSCTLR6 = 0x88b0, // 10 001 0001 0110 000 9544385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCRSCTLR7 = 0x88b8, // 10 001 0001 0111 000 9554385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCRSCTLR8 = 0x88c0, // 10 001 0001 1000 000 9564385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCRSCTLR9 = 0x88c8, // 10 001 0001 1001 000 9574385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCRSCTLR10 = 0x88d0, // 10 001 0001 1010 000 9584385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCRSCTLR11 = 0x88d8, // 10 001 0001 1011 000 9594385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCRSCTLR12 = 0x88e0, // 10 001 0001 1100 000 9604385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCRSCTLR13 = 0x88e8, // 10 001 0001 1101 000 9614385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCRSCTLR14 = 0x88f0, // 10 001 0001 1110 000 9624385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCRSCTLR15 = 0x88f8, // 10 001 0001 1111 000 9634385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCRSCTLR16 = 0x8881, // 10 001 0001 0000 001 9644385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCRSCTLR17 = 0x8889, // 10 001 0001 0001 001 9654385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCRSCTLR18 = 0x8891, // 10 001 0001 0010 001 9664385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCRSCTLR19 = 0x8899, // 10 001 0001 0011 001 9674385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCRSCTLR20 = 0x88a1, // 10 001 0001 0100 001 9684385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCRSCTLR21 = 0x88a9, // 10 001 0001 0101 001 9694385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCRSCTLR22 = 0x88b1, // 10 001 0001 0110 001 9704385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCRSCTLR23 = 0x88b9, // 10 001 0001 0111 001 9714385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCRSCTLR24 = 0x88c1, // 10 001 0001 1000 001 9724385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCRSCTLR25 = 0x88c9, // 10 001 0001 1001 001 9734385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCRSCTLR26 = 0x88d1, // 10 001 0001 1010 001 9744385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCRSCTLR27 = 0x88d9, // 10 001 0001 1011 001 9754385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCRSCTLR28 = 0x88e1, // 10 001 0001 1100 001 9764385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCRSCTLR29 = 0x88e9, // 10 001 0001 1101 001 9774385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCRSCTLR30 = 0x88f1, // 10 001 0001 1110 001 9784385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCRSCTLR31 = 0x88f9, // 10 001 0001 1111 001 9794385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCSSCCR0 = 0x8882, // 10 001 0001 0000 010 9804385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCSSCCR1 = 0x888a, // 10 001 0001 0001 010 9814385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCSSCCR2 = 0x8892, // 10 001 0001 0010 010 9824385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCSSCCR3 = 0x889a, // 10 001 0001 0011 010 9834385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCSSCCR4 = 0x88a2, // 10 001 0001 0100 010 9844385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCSSCCR5 = 0x88aa, // 10 001 0001 0101 010 9854385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCSSCCR6 = 0x88b2, // 10 001 0001 0110 010 9864385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCSSCCR7 = 0x88ba, // 10 001 0001 0111 010 9874385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCSSCSR0 = 0x88c2, // 10 001 0001 1000 010 9884385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCSSCSR1 = 0x88ca, // 10 001 0001 1001 010 9894385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCSSCSR2 = 0x88d2, // 10 001 0001 1010 010 9904385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCSSCSR3 = 0x88da, // 10 001 0001 1011 010 9914385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCSSCSR4 = 0x88e2, // 10 001 0001 1100 010 9924385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCSSCSR5 = 0x88ea, // 10 001 0001 1101 010 9934385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCSSCSR6 = 0x88f2, // 10 001 0001 1110 010 9944385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCSSCSR7 = 0x88fa, // 10 001 0001 1111 010 9954385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCSSPCICR0 = 0x8883, // 10 001 0001 0000 011 9964385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCSSPCICR1 = 0x888b, // 10 001 0001 0001 011 9974385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCSSPCICR2 = 0x8893, // 10 001 0001 0010 011 9984385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCSSPCICR3 = 0x889b, // 10 001 0001 0011 011 9994385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCSSPCICR4 = 0x88a3, // 10 001 0001 0100 011 10004385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCSSPCICR5 = 0x88ab, // 10 001 0001 0101 011 10014385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCSSPCICR6 = 0x88b3, // 10 001 0001 0110 011 10024385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCSSPCICR7 = 0x88bb, // 10 001 0001 0111 011 10034385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCPDCR = 0x88a4, // 10 001 0001 0100 100 10044385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCACVR0 = 0x8900, // 10 001 0010 0000 000 10054385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCACVR1 = 0x8910, // 10 001 0010 0010 000 10064385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCACVR2 = 0x8920, // 10 001 0010 0100 000 10074385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCACVR3 = 0x8930, // 10 001 0010 0110 000 10084385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCACVR4 = 0x8940, // 10 001 0010 1000 000 10094385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCACVR5 = 0x8950, // 10 001 0010 1010 000 10104385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCACVR6 = 0x8960, // 10 001 0010 1100 000 10114385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCACVR7 = 0x8970, // 10 001 0010 1110 000 10124385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCACVR8 = 0x8901, // 10 001 0010 0000 001 10134385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCACVR9 = 0x8911, // 10 001 0010 0010 001 10144385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCACVR10 = 0x8921, // 10 001 0010 0100 001 10154385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCACVR11 = 0x8931, // 10 001 0010 0110 001 10164385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCACVR12 = 0x8941, // 10 001 0010 1000 001 10174385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCACVR13 = 0x8951, // 10 001 0010 1010 001 10184385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCACVR14 = 0x8961, // 10 001 0010 1100 001 10194385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCACVR15 = 0x8971, // 10 001 0010 1110 001 10204385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCACATR0 = 0x8902, // 10 001 0010 0000 010 10214385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCACATR1 = 0x8912, // 10 001 0010 0010 010 10224385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCACATR2 = 0x8922, // 10 001 0010 0100 010 10234385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCACATR3 = 0x8932, // 10 001 0010 0110 010 10244385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCACATR4 = 0x8942, // 10 001 0010 1000 010 10254385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCACATR5 = 0x8952, // 10 001 0010 1010 010 10264385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCACATR6 = 0x8962, // 10 001 0010 1100 010 10274385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCACATR7 = 0x8972, // 10 001 0010 1110 010 10284385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCACATR8 = 0x8903, // 10 001 0010 0000 011 10294385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCACATR9 = 0x8913, // 10 001 0010 0010 011 10304385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCACATR10 = 0x8923, // 10 001 0010 0100 011 10314385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCACATR11 = 0x8933, // 10 001 0010 0110 011 10324385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCACATR12 = 0x8943, // 10 001 0010 1000 011 10334385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCACATR13 = 0x8953, // 10 001 0010 1010 011 10344385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCACATR14 = 0x8963, // 10 001 0010 1100 011 10354385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCACATR15 = 0x8973, // 10 001 0010 1110 011 10364385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCDVCVR0 = 0x8904, // 10 001 0010 0000 100 10374385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCDVCVR1 = 0x8924, // 10 001 0010 0100 100 10384385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCDVCVR2 = 0x8944, // 10 001 0010 1000 100 10394385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCDVCVR3 = 0x8964, // 10 001 0010 1100 100 10404385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCDVCVR4 = 0x8905, // 10 001 0010 0000 101 10414385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCDVCVR5 = 0x8925, // 10 001 0010 0100 101 10424385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCDVCVR6 = 0x8945, // 10 001 0010 1000 101 10434385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCDVCVR7 = 0x8965, // 10 001 0010 1100 101 10444385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCDVCMR0 = 0x8906, // 10 001 0010 0000 110 10454385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCDVCMR1 = 0x8926, // 10 001 0010 0100 110 10464385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCDVCMR2 = 0x8946, // 10 001 0010 1000 110 10474385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCDVCMR3 = 0x8966, // 10 001 0010 1100 110 10484385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCDVCMR4 = 0x8907, // 10 001 0010 0000 111 10494385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCDVCMR5 = 0x8927, // 10 001 0010 0100 111 10504385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCDVCMR6 = 0x8947, // 10 001 0010 1000 111 10514385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCDVCMR7 = 0x8967, // 10 001 0010 1100 111 10524385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCCIDCVR0 = 0x8980, // 10 001 0011 0000 000 10534385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCCIDCVR1 = 0x8990, // 10 001 0011 0010 000 10544385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCCIDCVR2 = 0x89a0, // 10 001 0011 0100 000 10554385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCCIDCVR3 = 0x89b0, // 10 001 0011 0110 000 10564385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCCIDCVR4 = 0x89c0, // 10 001 0011 1000 000 10574385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCCIDCVR5 = 0x89d0, // 10 001 0011 1010 000 10584385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCCIDCVR6 = 0x89e0, // 10 001 0011 1100 000 10594385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCCIDCVR7 = 0x89f0, // 10 001 0011 1110 000 10604385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCVMIDCVR0 = 0x8981, // 10 001 0011 0000 001 10614385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCVMIDCVR1 = 0x8991, // 10 001 0011 0010 001 10624385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCVMIDCVR2 = 0x89a1, // 10 001 0011 0100 001 10634385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCVMIDCVR3 = 0x89b1, // 10 001 0011 0110 001 10644385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCVMIDCVR4 = 0x89c1, // 10 001 0011 1000 001 10654385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCVMIDCVR5 = 0x89d1, // 10 001 0011 1010 001 10664385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCVMIDCVR6 = 0x89e1, // 10 001 0011 1100 001 10674385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCVMIDCVR7 = 0x89f1, // 10 001 0011 1110 001 10684385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCCIDCCTLR0 = 0x8982, // 10 001 0011 0000 010 10694385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCCIDCCTLR1 = 0x898a, // 10 001 0011 0001 010 10704385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCVMIDCCTLR0 = 0x8992, // 10 001 0011 0010 010 10714385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCVMIDCCTLR1 = 0x899a, // 10 001 0011 0011 010 10724385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCITCTRL = 0x8b84, // 10 001 0111 0000 100 10734385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCCLAIMSET = 0x8bc6, // 10 001 0111 1000 110 10744385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover TRCCLAIMCLR = 0x8bce, // 10 001 0111 1001 110 10754385f5dfced4e14bc59dfedb1f75116c0aabbc36Tim Northover 107642a1b2f0b196633c0327801e810fc98849a00c47Tim Northover // GICv3 registers 107742a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICC_BPR1_EL1 = 0xc663, // 11 000 1100 1100 011 107842a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICC_BPR0_EL1 = 0xc643, // 11 000 1100 1000 011 107942a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICC_PMR_EL1 = 0xc230, // 11 000 0100 0110 000 108042a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICC_CTLR_EL1 = 0xc664, // 11 000 1100 1100 100 108142a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICC_CTLR_EL3 = 0xf664, // 11 110 1100 1100 100 108242a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICC_SRE_EL1 = 0xc665, // 11 000 1100 1100 101 108342a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICC_SRE_EL2 = 0xe64d, // 11 100 1100 1001 101 108442a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICC_SRE_EL3 = 0xf665, // 11 110 1100 1100 101 108542a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICC_IGRPEN0_EL1 = 0xc666, // 11 000 1100 1100 110 108642a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICC_IGRPEN1_EL1 = 0xc667, // 11 000 1100 1100 111 108742a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICC_IGRPEN1_EL3 = 0xf667, // 11 110 1100 1100 111 108842a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICC_SEIEN_EL1 = 0xc668, // 11 000 1100 1101 000 108942a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICC_AP0R0_EL1 = 0xc644, // 11 000 1100 1000 100 109042a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICC_AP0R1_EL1 = 0xc645, // 11 000 1100 1000 101 109142a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICC_AP0R2_EL1 = 0xc646, // 11 000 1100 1000 110 109242a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICC_AP0R3_EL1 = 0xc647, // 11 000 1100 1000 111 109342a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICC_AP1R0_EL1 = 0xc648, // 11 000 1100 1001 000 109442a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICC_AP1R1_EL1 = 0xc649, // 11 000 1100 1001 001 109542a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICC_AP1R2_EL1 = 0xc64a, // 11 000 1100 1001 010 109642a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICC_AP1R3_EL1 = 0xc64b, // 11 000 1100 1001 011 109742a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICH_AP0R0_EL2 = 0xe640, // 11 100 1100 1000 000 109842a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICH_AP0R1_EL2 = 0xe641, // 11 100 1100 1000 001 109942a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICH_AP0R2_EL2 = 0xe642, // 11 100 1100 1000 010 110042a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICH_AP0R3_EL2 = 0xe643, // 11 100 1100 1000 011 110142a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICH_AP1R0_EL2 = 0xe648, // 11 100 1100 1001 000 110242a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICH_AP1R1_EL2 = 0xe649, // 11 100 1100 1001 001 110342a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICH_AP1R2_EL2 = 0xe64a, // 11 100 1100 1001 010 110442a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICH_AP1R3_EL2 = 0xe64b, // 11 100 1100 1001 011 110542a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICH_HCR_EL2 = 0xe658, // 11 100 1100 1011 000 110642a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICH_MISR_EL2 = 0xe65a, // 11 100 1100 1011 010 110742a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICH_VMCR_EL2 = 0xe65f, // 11 100 1100 1011 111 110842a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICH_VSEIR_EL2 = 0xe64c, // 11 100 1100 1001 100 110942a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICH_LR0_EL2 = 0xe660, // 11 100 1100 1100 000 111042a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICH_LR1_EL2 = 0xe661, // 11 100 1100 1100 001 111142a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICH_LR2_EL2 = 0xe662, // 11 100 1100 1100 010 111242a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICH_LR3_EL2 = 0xe663, // 11 100 1100 1100 011 111342a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICH_LR4_EL2 = 0xe664, // 11 100 1100 1100 100 111442a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICH_LR5_EL2 = 0xe665, // 11 100 1100 1100 101 111542a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICH_LR6_EL2 = 0xe666, // 11 100 1100 1100 110 111642a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICH_LR7_EL2 = 0xe667, // 11 100 1100 1100 111 111742a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICH_LR8_EL2 = 0xe668, // 11 100 1100 1101 000 111842a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICH_LR9_EL2 = 0xe669, // 11 100 1100 1101 001 111942a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICH_LR10_EL2 = 0xe66a, // 11 100 1100 1101 010 112042a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICH_LR11_EL2 = 0xe66b, // 11 100 1100 1101 011 112142a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICH_LR12_EL2 = 0xe66c, // 11 100 1100 1101 100 112242a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICH_LR13_EL2 = 0xe66d, // 11 100 1100 1101 101 112342a1b2f0b196633c0327801e810fc98849a00c47Tim Northover ICH_LR14_EL2 = 0xe66e, // 11 100 1100 1101 110 1124dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines ICH_LR15_EL2 = 0xe66f, // 11 100 1100 1101 111 1125dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines }; 1126dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 1127dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines // Cyclone specific system registers 1128dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines enum CycloneSysRegValues { 1129dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines CPM_IOACC_CTL_EL3 = 0xff90 113072062f5744557e270a38192554c3126ea5f97434Tim Northover }; 113172062f5744557e270a38192554c3126ea5f97434Tim Northover 1132dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines // Note that these do not inherit from AArch64NamedImmMapper. This class is 113372062f5744557e270a38192554c3126ea5f97434Tim Northover // sufficiently different in its behaviour that I don't believe it's worth 1134dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines // burdening the common AArch64NamedImmMapper with abstractions only needed in 113572062f5744557e270a38192554c3126ea5f97434Tim Northover // this one case. 113672062f5744557e270a38192554c3126ea5f97434Tim Northover struct SysRegMapper { 1137dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines static const AArch64NamedImmMapper::Mapping SysRegPairs[]; 1138dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines static const AArch64NamedImmMapper::Mapping CycloneSysRegPairs[]; 113972062f5744557e270a38192554c3126ea5f97434Tim Northover 1140dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines const AArch64NamedImmMapper::Mapping *InstPairs; 114172062f5744557e270a38192554c3126ea5f97434Tim Northover size_t NumInstPairs; 1142dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines uint64_t FeatureBits; 114372062f5744557e270a38192554c3126ea5f97434Tim Northover 1144dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines SysRegMapper(uint64_t FeatureBits) : FeatureBits(FeatureBits) { } 114572062f5744557e270a38192554c3126ea5f97434Tim Northover uint32_t fromString(StringRef Name, bool &Valid) const; 114672062f5744557e270a38192554c3126ea5f97434Tim Northover std::string toString(uint32_t Bits, bool &Valid) const; 114772062f5744557e270a38192554c3126ea5f97434Tim Northover }; 114872062f5744557e270a38192554c3126ea5f97434Tim Northover 114972062f5744557e270a38192554c3126ea5f97434Tim Northover struct MSRMapper : SysRegMapper { 1150dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines static const AArch64NamedImmMapper::Mapping MSRPairs[]; 1151dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines MSRMapper(uint64_t FeatureBits); 115272062f5744557e270a38192554c3126ea5f97434Tim Northover }; 115372062f5744557e270a38192554c3126ea5f97434Tim Northover 115472062f5744557e270a38192554c3126ea5f97434Tim Northover struct MRSMapper : SysRegMapper { 1155dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines static const AArch64NamedImmMapper::Mapping MRSPairs[]; 1156dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines MRSMapper(uint64_t FeatureBits); 115772062f5744557e270a38192554c3126ea5f97434Tim Northover }; 115872062f5744557e270a38192554c3126ea5f97434Tim Northover 115972062f5744557e270a38192554c3126ea5f97434Tim Northover uint32_t ParseGenericRegister(StringRef Name, bool &Valid); 116072062f5744557e270a38192554c3126ea5f97434Tim Northover} 116172062f5744557e270a38192554c3126ea5f97434Tim Northover 1162dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesnamespace AArch64TLBI { 116372062f5744557e270a38192554c3126ea5f97434Tim Northover enum TLBIValues { 116472062f5744557e270a38192554c3126ea5f97434Tim Northover Invalid = -1, // Op0 Op1 CRn CRm Op2 116572062f5744557e270a38192554c3126ea5f97434Tim Northover IPAS2E1IS = 0x6401, // 01 100 1000 0000 001 116672062f5744557e270a38192554c3126ea5f97434Tim Northover IPAS2LE1IS = 0x6405, // 01 100 1000 0000 101 116772062f5744557e270a38192554c3126ea5f97434Tim Northover VMALLE1IS = 0x4418, // 01 000 1000 0011 000 116872062f5744557e270a38192554c3126ea5f97434Tim Northover ALLE2IS = 0x6418, // 01 100 1000 0011 000 116972062f5744557e270a38192554c3126ea5f97434Tim Northover ALLE3IS = 0x7418, // 01 110 1000 0011 000 117072062f5744557e270a38192554c3126ea5f97434Tim Northover VAE1IS = 0x4419, // 01 000 1000 0011 001 117172062f5744557e270a38192554c3126ea5f97434Tim Northover VAE2IS = 0x6419, // 01 100 1000 0011 001 117272062f5744557e270a38192554c3126ea5f97434Tim Northover VAE3IS = 0x7419, // 01 110 1000 0011 001 117372062f5744557e270a38192554c3126ea5f97434Tim Northover ASIDE1IS = 0x441a, // 01 000 1000 0011 010 117472062f5744557e270a38192554c3126ea5f97434Tim Northover VAAE1IS = 0x441b, // 01 000 1000 0011 011 117572062f5744557e270a38192554c3126ea5f97434Tim Northover ALLE1IS = 0x641c, // 01 100 1000 0011 100 117672062f5744557e270a38192554c3126ea5f97434Tim Northover VALE1IS = 0x441d, // 01 000 1000 0011 101 117772062f5744557e270a38192554c3126ea5f97434Tim Northover VALE2IS = 0x641d, // 01 100 1000 0011 101 117872062f5744557e270a38192554c3126ea5f97434Tim Northover VALE3IS = 0x741d, // 01 110 1000 0011 101 117972062f5744557e270a38192554c3126ea5f97434Tim Northover VMALLS12E1IS = 0x641e, // 01 100 1000 0011 110 118072062f5744557e270a38192554c3126ea5f97434Tim Northover VAALE1IS = 0x441f, // 01 000 1000 0011 111 118172062f5744557e270a38192554c3126ea5f97434Tim Northover IPAS2E1 = 0x6421, // 01 100 1000 0100 001 118272062f5744557e270a38192554c3126ea5f97434Tim Northover IPAS2LE1 = 0x6425, // 01 100 1000 0100 101 118372062f5744557e270a38192554c3126ea5f97434Tim Northover VMALLE1 = 0x4438, // 01 000 1000 0111 000 118472062f5744557e270a38192554c3126ea5f97434Tim Northover ALLE2 = 0x6438, // 01 100 1000 0111 000 118572062f5744557e270a38192554c3126ea5f97434Tim Northover ALLE3 = 0x7438, // 01 110 1000 0111 000 118672062f5744557e270a38192554c3126ea5f97434Tim Northover VAE1 = 0x4439, // 01 000 1000 0111 001 118772062f5744557e270a38192554c3126ea5f97434Tim Northover VAE2 = 0x6439, // 01 100 1000 0111 001 118872062f5744557e270a38192554c3126ea5f97434Tim Northover VAE3 = 0x7439, // 01 110 1000 0111 001 118972062f5744557e270a38192554c3126ea5f97434Tim Northover ASIDE1 = 0x443a, // 01 000 1000 0111 010 119072062f5744557e270a38192554c3126ea5f97434Tim Northover VAAE1 = 0x443b, // 01 000 1000 0111 011 119172062f5744557e270a38192554c3126ea5f97434Tim Northover ALLE1 = 0x643c, // 01 100 1000 0111 100 119272062f5744557e270a38192554c3126ea5f97434Tim Northover VALE1 = 0x443d, // 01 000 1000 0111 101 119372062f5744557e270a38192554c3126ea5f97434Tim Northover VALE2 = 0x643d, // 01 100 1000 0111 101 119472062f5744557e270a38192554c3126ea5f97434Tim Northover VALE3 = 0x743d, // 01 110 1000 0111 101 119572062f5744557e270a38192554c3126ea5f97434Tim Northover VMALLS12E1 = 0x643e, // 01 100 1000 0111 110 119672062f5744557e270a38192554c3126ea5f97434Tim Northover VAALE1 = 0x443f // 01 000 1000 0111 111 119772062f5744557e270a38192554c3126ea5f97434Tim Northover }; 119872062f5744557e270a38192554c3126ea5f97434Tim Northover 1199dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines struct TLBIMapper : AArch64NamedImmMapper { 120072062f5744557e270a38192554c3126ea5f97434Tim Northover const static Mapping TLBIPairs[]; 120172062f5744557e270a38192554c3126ea5f97434Tim Northover 120272062f5744557e270a38192554c3126ea5f97434Tim Northover TLBIMapper(); 120372062f5744557e270a38192554c3126ea5f97434Tim Northover }; 120472062f5744557e270a38192554c3126ea5f97434Tim Northover 120572062f5744557e270a38192554c3126ea5f97434Tim Northover static inline bool NeedsRegister(TLBIValues Val) { 120672062f5744557e270a38192554c3126ea5f97434Tim Northover switch (Val) { 120772062f5744557e270a38192554c3126ea5f97434Tim Northover case VMALLE1IS: 120872062f5744557e270a38192554c3126ea5f97434Tim Northover case ALLE2IS: 120972062f5744557e270a38192554c3126ea5f97434Tim Northover case ALLE3IS: 121072062f5744557e270a38192554c3126ea5f97434Tim Northover case ALLE1IS: 121172062f5744557e270a38192554c3126ea5f97434Tim Northover case VMALLS12E1IS: 121272062f5744557e270a38192554c3126ea5f97434Tim Northover case VMALLE1: 121372062f5744557e270a38192554c3126ea5f97434Tim Northover case ALLE2: 121472062f5744557e270a38192554c3126ea5f97434Tim Northover case ALLE3: 121572062f5744557e270a38192554c3126ea5f97434Tim Northover case ALLE1: 121672062f5744557e270a38192554c3126ea5f97434Tim Northover case VMALLS12E1: 121772062f5744557e270a38192554c3126ea5f97434Tim Northover return false; 121872062f5744557e270a38192554c3126ea5f97434Tim Northover default: 121972062f5744557e270a38192554c3126ea5f97434Tim Northover return true; 122072062f5744557e270a38192554c3126ea5f97434Tim Northover } 122172062f5744557e270a38192554c3126ea5f97434Tim Northover } 1222dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines} 122372062f5744557e270a38192554c3126ea5f97434Tim Northover 122472062f5744557e270a38192554c3126ea5f97434Tim Northovernamespace AArch64II { 1225dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// Target Operand Flag enum. 122672062f5744557e270a38192554c3126ea5f97434Tim Northover enum TOF { 1227dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines //===------------------------------------------------------------------===// 122872062f5744557e270a38192554c3126ea5f97434Tim Northover // AArch64 Specific MachineOperand flags. 122972062f5744557e270a38192554c3126ea5f97434Tim Northover 123072062f5744557e270a38192554c3126ea5f97434Tim Northover MO_NO_FLAG, 123172062f5744557e270a38192554c3126ea5f97434Tim Northover 1232dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines MO_FRAGMENT = 0x7, 1233dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 1234dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// MO_PAGE - A symbol operand with this flag represents the pc-relative 1235dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// offset of the 4K page containing the symbol. This is used with the 1236dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// ADRP instruction. 1237dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines MO_PAGE = 1, 1238dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 1239dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// MO_PAGEOFF - A symbol operand with this flag represents the offset of 1240dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// that symbol within a 4K page. This offset is added to the page address 1241dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// to produce the complete address. 1242dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines MO_PAGEOFF = 2, 1243dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 1244dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// MO_G3 - A symbol operand with this flag (granule 3) represents the high 1245dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// 16-bits of a 64-bit address, used in a MOVZ or MOVK instruction 1246dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines MO_G3 = 3, 1247dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 1248dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// MO_G2 - A symbol operand with this flag (granule 2) represents the bits 1249dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// 32-47 of a 64-bit address, used in a MOVZ or MOVK instruction 1250dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines MO_G2 = 4, 1251dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 1252dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// MO_G1 - A symbol operand with this flag (granule 1) represents the bits 1253dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// 16-31 of a 64-bit address, used in a MOVZ or MOVK instruction 1254dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines MO_G1 = 5, 1255dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 1256dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// MO_G0 - A symbol operand with this flag (granule 0) represents the bits 1257dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// 0-15 of a 64-bit address, used in a MOVZ or MOVK instruction 1258dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines MO_G0 = 6, 1259dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 1260dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// MO_GOT - This flag indicates that a symbol operand represents the 1261dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// address of the GOT entry for the symbol, rather than the address of 1262dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// the symbol itself. 1263dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines MO_GOT = 8, 1264dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 1265dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// MO_NC - Indicates whether the linker is expected to check the symbol 1266dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// reference for overflow. For example in an ADRP/ADD pair of relocations 1267dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// the ADRP usually does check, but not the ADD. 1268dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines MO_NC = 0x10, 1269dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 1270dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// MO_TLS - Indicates that the operand being accessed is some kind of 1271dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// thread-local symbol. On Darwin, only one type of thread-local access 1272dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// exists (pre linker-relaxation), but on ELF the TLSModel used for the 1273dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// referee will affect interpretation. 1274dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines MO_TLS = 0x20 127572062f5744557e270a38192554c3126ea5f97434Tim Northover }; 1276dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines} // end namespace AArch64II 127772062f5744557e270a38192554c3126ea5f97434Tim Northover 1278dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines} // end namespace llvm 127972062f5744557e270a38192554c3126ea5f97434Tim Northover 128072062f5744557e270a38192554c3126ea5f97434Tim Northover#endif 1281