diff options
Diffstat (limited to 'lib/Target/AArch64/Utils/AArch64BaseInfo.h')
-rw-r--r-- | lib/Target/AArch64/Utils/AArch64BaseInfo.h | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/lib/Target/AArch64/Utils/AArch64BaseInfo.h b/lib/Target/AArch64/Utils/AArch64BaseInfo.h index e675efc..7db5238 100644 --- a/lib/Target/AArch64/Utils/AArch64BaseInfo.h +++ b/lib/Target/AArch64/Utils/AArch64BaseInfo.h @@ -306,6 +306,50 @@ namespace A64SE { }; } +namespace A64Layout { + enum VectorLayout { + Invalid = -1, + _8B, + _4H, + _2S, + _1D, + + _16B, + _8H, + _4S, + _2D + }; +} + +inline static const char * +A64VectorLayoutToString(A64Layout::VectorLayout Layout) { + switch (Layout) { + case A64Layout::_8B: return ".8b"; + case A64Layout::_4H: return ".4h"; + case A64Layout::_2S: return ".2s"; + case A64Layout::_1D: return ".1d"; + case A64Layout::_16B: return ".16b"; + case A64Layout::_8H: return ".8h"; + case A64Layout::_4S: return ".4s"; + case A64Layout::_2D: return ".2d"; + default: llvm_unreachable("Unknown Vector Layout"); + } +} + +inline static A64Layout::VectorLayout +A64StringToVectorLayout(StringRef LayoutStr) { + return StringSwitch<A64Layout::VectorLayout>(LayoutStr) + .Case(".8b", A64Layout::_8B) + .Case(".4h", A64Layout::_4H) + .Case(".2s", A64Layout::_2S) + .Case(".1d", A64Layout::_1D) + .Case(".16b", A64Layout::_16B) + .Case(".8h", A64Layout::_8H) + .Case(".4s", A64Layout::_4S) + .Case(".2d", A64Layout::_2D) + .Default(A64Layout::Invalid); +} + namespace A64SysReg { enum SysRegROValues { MDCCSR_EL0 = 0x9808, // 10 011 0000 0001 000 |