freedreno/registers: Generate python files with reg offsets
This would allow us to use register names in python scripts. Signed-off-by: Danylo Piliaiev <dpiliaiev@igalia.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/23217>
This commit is contained in:
parent
a9fc9bc46b
commit
0b25388afe
2 changed files with 58 additions and 0 deletions
|
|
@ -32,6 +32,16 @@ xml_files = [
|
|||
'adreno_pm4.xml',
|
||||
]
|
||||
|
||||
xml_reg_files = [
|
||||
'a2xx.xml',
|
||||
'a3xx.xml',
|
||||
'a4xx.xml',
|
||||
'a5xx.xml',
|
||||
'a6xx.xml',
|
||||
]
|
||||
|
||||
freedreno_py_header_files = []
|
||||
|
||||
foreach f : xml_files
|
||||
_name = f + '.h'
|
||||
freedreno_xml_header_files += custom_target(
|
||||
|
|
@ -69,3 +79,14 @@ freedreno_xml_header_files += custom_target(
|
|||
command: [prog_python, '@INPUT0@', '--rnn', rnn_src_path, '--xml', '@INPUT1@', 'c-pack-structs'],
|
||||
capture: true,
|
||||
)
|
||||
|
||||
foreach f : xml_reg_files
|
||||
_pyname = f.split('.')[0] + '.py'
|
||||
freedreno_py_header_files += custom_target(
|
||||
_pyname,
|
||||
input: [gen_header_py, f],
|
||||
output: _pyname,
|
||||
command: [prog_python, '@INPUT0@', '--rnn', rnn_src_path, '--xml', '@INPUT1@', 'py-defines'],
|
||||
capture: true,
|
||||
)
|
||||
endforeach
|
||||
|
|
|
|||
|
|
@ -309,6 +309,10 @@ class Reg(object):
|
|||
if self.bitset.inline:
|
||||
self.bitset.dump_regpair_builder(self)
|
||||
|
||||
def dump_py(self):
|
||||
print("\tREG_%s = 0x%08x" % (self.full_name, self.offset))
|
||||
|
||||
|
||||
class Parser(object):
|
||||
def __init__(self):
|
||||
self.current_array = None
|
||||
|
|
@ -630,6 +634,17 @@ class Parser(object):
|
|||
|
||||
self.dump_reg_usages()
|
||||
|
||||
|
||||
def dump_regs_py(self):
|
||||
regs = []
|
||||
for e in self.file:
|
||||
if isinstance(e, Reg):
|
||||
regs.append(e)
|
||||
|
||||
for e in regs:
|
||||
e.dump_py()
|
||||
|
||||
|
||||
def dump_reg_variants(self, regname, variants):
|
||||
# Don't bother for things that only have a single variant:
|
||||
if len(variants) == 1:
|
||||
|
|
@ -742,6 +757,25 @@ def dump_c_pack_structs(args):
|
|||
dump_c(args.rnn, args.xml, guard, lambda p: p.dump_structs())
|
||||
|
||||
|
||||
def dump_py_defines(args):
|
||||
p = Parser()
|
||||
|
||||
try:
|
||||
p.parse(args.rnn, args.xml)
|
||||
except Error as e:
|
||||
print(e, file=sys.stderr)
|
||||
exit(1)
|
||||
|
||||
file_name = os.path.splitext(os.path.basename(args.xml))[0]
|
||||
|
||||
print("from enum import IntEnum")
|
||||
print("class %sRegs(IntEnum):" % file_name.upper())
|
||||
|
||||
os.path.basename(args.xml)
|
||||
|
||||
p.dump_regs_py()
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument('--rnn', type=str, required=True)
|
||||
|
|
@ -755,6 +789,9 @@ def main():
|
|||
parser_c_pack_structs = subparsers.add_parser('c-pack-structs')
|
||||
parser_c_pack_structs.set_defaults(func=dump_c_pack_structs)
|
||||
|
||||
parser_py_defines = subparsers.add_parser('py-defines')
|
||||
parser_py_defines.set_defaults(func=dump_py_defines)
|
||||
|
||||
args = parser.parse_args()
|
||||
args.func(args)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue