1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-24 03:33:20 +01:00
llvm-mirror/include/llvm/TableGen/SearchableTable.td
Tim Northover 86fa0255b2 AArch64: TableGenerate system instruction operands.
The way the named arguments for various system instructions are handled at the
moment has a few problems:

  - Large-scale duplication between AArch64BaseInfo.h and AArch64BaseInfo.cpp
  - That weird Mapping class that I have no idea what I was on when I thought
    it was a good idea.
  - Searches are performed linearly through the entire list.
  - We print absolutely all registers in upper-case, even though some are
    canonically mixed case (SPSel for example).
  - The ARM ARM specifies sysregs in terms of 5 fields, but those are relegated
    to comments in our implementation, with a slightly opaque hex value
    indicating the canonical encoding LLVM will use.

This adds a new TableGen backend to produce efficiently searchable tables, and
switches AArch64 over to using that infrastructure.

llvm-svn: 274576
2016-07-05 21:23:04 +00:00

42 lines
1.8 KiB
TableGen

//===- SearchableTable.td ----------------------------------*- tablegen -*-===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
// This file defines the key top-level classes needed to produce a reasonably
// generic table that can be binary-searched via int and string entries.
//
// Each table must instantiate "Mappingkind", listing the fields that should be
// included and fields that shoould be searchable. Only two kinds of fields are
// searchable at the moment: "strings" (which are compared case-insensitively),
// and "bits".
//
// For each "MappingKind" the generated header will create GET_MAPPINGKIND_DECL
// and GET_MAPPINGKIND_IMPL guards.
//
// Inside the DECL guard will be a set of function declarations:
// "lookup{InstanceClass}By{SearchableField}", returning "const {InstanceClass}
// *" and accepting either a StringRef or a uintN_t. Additionally, if
// EnumNameField is still defined, there will be an "enum {InstanceClass}Values"
// allowing C++ code to reference either the primary data table's entries (if
// EnumValueField is not defined) or some other field (e.g. encoding) if it is.
//
// Inside the IMPL guard will be a primary data table "{InstanceClass}sList" and
// as many searchable indexes as requested
// ("{InstanceClass}sBy{SearchableField}"). Additionally implementations of the
// lookup function will be provided.
//
// See AArch64SystemOperands.td and its generated header for example uses.
//
//===----------------------------------------------------------------------===//
class SearchableTable {
list<string> SearchableFields;
string EnumNameField = "Name";
string EnumValueField;
}