--- /dev/null
+# LLVM Backend Array Register Files
+
+# Data Structures
+
+## Array Register File
+
+This is for being able to express remapping / retargetting / redirection
+schemes that a microarchitecture has.
+
+ typedef struct {
+ start: 12; // starting index of the "register"
+ end: 12; // ending index of the "register" (inclusive)
+ id: 8; // type of register: e.g 0=float, 1=int, 2=...
+ } ARF;
+
+Examples:
+
+ ARF1 = 0x01009005
+ ARF2 = 0x0100a006
+
+These would indicate that when the (virtual) register ARF1 is used,
+it is of type "integer", and it requires the reservation of the **real**
+registers 5 through 9 at the hardware level.
+
+## Base Register Class
+
+ typedef struct {
+ ARF: arf; // the Array Register File identifier
+ min: 12; // if an opcode restricts the available range, use this
+ max: 12; // ... and this
+ size: 8; // the element bitwidth. e.g. 0=8, 1=16, 2=32.. TBD
+ align: 4; // an aligment restriction, in powers of 2.
+ } BRC;
+
+## Register Class Unions
+
+Register Classes are the union of multiple Base Register Classes
+and traditional register classes. In this way, all possible meanings
+and uses to which registers may be put can be expressed in one structure.
+
+# Examples per Implementor
+
+## Array Register File
+
+### SimpleV
+
+### RVV
+
+### AMDGPU
+
+## Base Register Class
+
+### SimpleV
+
+### RVV
+
+### AMDGPU
+
+## Register Class Unions
+
+### SimpleV
+
+### RVV
+
+### AMDGPU
+