RFC: A new way to resolve decoding conflicts in LLVM’s decoder

@jurahul FYI I have this WIP that has nothing to do with conflict resolution, but hopefully makes analysis/debugging easier by emitting more human readable tables.

The output looks like this:

static const uint8_t DecoderTableFallback32[58] = {
  OPC_SwitchField, 21, 11,              //  0: switch Inst[31:21] {
  168, 13, 24,                          //  3: case 0x6a8: {
  OPC_Scope, 17,                        //  6:  {
  OPC_CheckField, 0, 5, 31,             //  8:   check Inst[4:0] == 0x1f
  OPC_CheckField, 19, 2, 0,             // 12:   check Inst[20:19] == 0x0
  OPC_CheckField, 12, 4, 4,             // 16:   check Inst[15:12] == 0x4
  OPC_TryDecode, 44, 21, 129, 6,        // 20:   try decode to MSRpstateImm1 using decoder 769
                                        // 20:  }
  OPC_Decode, 42, 21, 130, 6,           // 25:  decode to MSR using decoder 770
                                        // 25: }
  169, 13, 5,                           // 30: case 0x6a9: {
  OPC_Decode, 37, 21, 131, 6,           // 33:  decode to MRS using decoder 771
                                        // 33: }
  197, 15, 0,                           // 38: case 0x7c5: {
  OPC_CheckField, 14, 1, 1,             // 41:  check Inst[14:14] == 0x1
  OPC_CheckField, 10, 2, 2,             // 45:  check Inst[11:10] == 0x2
  OPC_CheckField, 3, 2, 3,              // 49:  check Inst[4:3] == 0x3
  OPC_Decode, 153, 22, 132, 6,          // 53:  decode to RPRFM using decoder 772
                                        // 53: }
                                        // 53: } // switch Inst[31:21]
};

It’s not ready for review yet, but I’d appreciate early feedback.