mesa/src/freedreno/registers/text-format.txt

102 lines
3.1 KiB
Plaintext

1. Introduction to rules-ng-ng text format
This-specification defines a text format that can be converted to and from rules-ng-ng XML.
It is intended to allow to create rules-ng-ng files with much less typing and with a more readable text.
xml2text can convert rules-ng-ng XML to this text format
text2xml can convert this text format to rules-ng-ng XML
This specification is an addendum to the rules-ng-ng specification and assumes familiarity with it.
2. Format
2.1. Line format
The initial indentation of a line is divided by 8 and the result determines the position in the document structure (similar to the Python language).
A "//" anywhere in the line causes the rest to be converted to an XML comment (like C++)
A line starting with ":" creates a <doc> tag with the rest of the line (excluding anything starting with //).
The content of multiple lines starting with ":" is merged in a single <doc> tag.
2.2. Tokenization
The line is then tokenized.
Token are generally continuous strings on non-whitespace characters, with some exceptions
Some characters (such as ":", "=" and "-") form a single-character token.
Text within double quotes generates a <brief> tag.
Any token formatted as ATTR(VALUE) generates an ATTR="VALUE" attribute. No whitespace allowed between ATTR and the '(' character.
Any token formatted as (VALUE) generates a variants="VALUE" attribute.
Any token formatted as (VARSET=VALUE) generates a varset="VARSET" variants="VALUE" attribute.
2.3. Special token sequences
These sequences are recognized and extracted before matching the line format:
: NUM
set REGLIKE to regNUM
you must specify a type if the reg is anonymous
the : is recognized only if it is the third or successive token (and not the last) to avoid ambiguity with bitfields and generic tags
{ STRIDE }
stride="STRIDE" attribute
[ LENGTH ]
length="LENGTH" attribute
!FLAGS
access="FLAGS"
no whitespace allowed after '!'
:=
at the end of the line
set REGLIKE to "stripe"
=
at the end of the line
set REGLIKE to "array"
inline
at the beginning of the line
inline="yes" attribute
2.4. Line patterns
The following line patterns are understood.
Only word tokens are used to match lines.
All tokens with special meaning are treated separately as described above.
[FOO] means that FOO is optional
#import "FILE"
<import file="FILE"/>
#pragma regNUM
REGLIKE is now set by default to regNUM instead of reg32
@TAG [NAME]
<TAG name="NAME"/>
use this if there are no children
TAG [NAME] :
<TAG name="NAME">
use this if there are children
TOKEN
<value value="TOKEN" /> if inside a reg or enum and TOKEN starts with a digit
<value name="TOKEN" /> if inside a reg or enum and TOKEN does not start with a digit
<REGLIKE offset="TOKEN" /> otherwise
POS NAME
<bitfield low="POS" high="POS" name="NAME"/> if inside a reg or bitset
<REGLIKE offset="POS" name="NAME"> otherwise
LOW - HIGH NAME [TYPE]
<bitfield low="LOW" high="HIGH" name="NAME" type="TYPE"/>
VALUE = NAME
<value value="VALUE" name="NAME"/>
use WHAT NAME
<use-WHAT name="NAME" />
OFFSET NAME [TYPE]
<REGLIKE offset="OFFSET" name="NAME" type="TYPE">