aboutsummaryrefslogtreecommitdiffstats
path: root/lib/Target/AArch64/Utils/AArch64BaseInfo.h
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Target/AArch64/Utils/AArch64BaseInfo.h')
-rw-r--r--lib/Target/AArch64/Utils/AArch64BaseInfo.h44
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