summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJordan Justen <jordan.l.justen@intel.com>2016-03-23 23:24:25 -0700
committerJordan Justen <jordan.l.justen@intel.com>2016-03-24 23:46:59 -0700
commitb332013a56186d04d7b05b232a8ba021e95c44ba (patch)
tree26f2fb767d7ce4410e06ffce7f69f1b9015cfb56
parent2c3f95d6aaab38cd66dd3dee1b089d5c91928eea (diff)
downloadmesa-b332013a56186d04d7b05b232a8ba021e95c44ba.tar.gz
genxml: Add register support
Signed-off-by: Jordan Justen <jordan.l.justen@intel.com>
-rwxr-xr-xsrc/intel/genxml/gen_pack_header.py62
1 files changed, 43 insertions, 19 deletions
diff --git a/src/intel/genxml/gen_pack_header.py b/src/intel/genxml/gen_pack_header.py
index 5bc18c70c60..9ef7122ae9e 100755
--- a/src/intel/genxml/gen_pack_header.py
+++ b/src/intel/genxml/gen_pack_header.py
@@ -202,6 +202,13 @@ def safe_name(name):
return name
+def num_from_str(num_str):
+ if num_str.lower().startswith('0x'):
+ return int(num_str, base=16)
+ else:
+ assert(not num_str.startswith('0') and 'octals numbers not allowed')
+ return int(num_str)
+
class Field:
ufixed_pattern = re.compile("u(\d+)\.(\d+)")
sfixed_pattern = re.compile("s(\d+)\.(\d+)")
@@ -472,25 +479,24 @@ class Parser:
self.instruction = None
self.structs = {}
+ self.registers = {}
def start_element(self, name, attrs):
if name == "genxml":
self.platform = attrs["name"]
self.gen = attrs["gen"].replace('.', '')
print(pack_header % {'license': license, 'platform': self.platform})
- elif name == "instruction":
- self.instruction = safe_name(attrs["name"])
- self.length_bias = int(attrs["bias"])
- if "length" in attrs:
- self.length = int(attrs["length"])
- size = self.length * 32
- else:
- self.length = None
- size = 0
- self.group = Group(self, None, 0, 1, size)
- elif name == "struct":
- self.struct = safe_name(attrs["name"])
- self.structs[attrs["name"]] = 1
+ elif name in ("instruction", "struct", "register"):
+ if name == "instruction":
+ self.instruction = safe_name(attrs["name"])
+ self.length_bias = int(attrs["bias"])
+ elif name == "struct":
+ self.struct = safe_name(attrs["name"])
+ self.structs[attrs["name"]] = 1
+ elif name == "register":
+ self.register = safe_name(attrs["name"])
+ self.reg_num = num_from_str(attrs["num"])
+ self.registers[attrs["name"]] = 1
if "length" in attrs:
self.length = int(attrs["length"])
size = self.length * 32
@@ -522,10 +528,15 @@ class Parser:
self.emit_instruction()
self.instruction = None
self.group = None
- elif name == "struct":
+ elif name == "struct":
self.emit_struct()
self.struct = None
self.group = None
+ elif name == "register":
+ self.emit_register()
+ self.register = None
+ self.reg_num = None
+ self.group = None
elif name == "group":
self.group = self.group.parent
elif name == "field":
@@ -560,9 +571,9 @@ class Parser:
def emit_instruction(self):
name = self.instruction
if not self.length == None:
- print('#define %-33s %4d' %
+ print('#define %-33s %6d' %
(self.gen_prefix(name + "_length"), self.length))
- print('#define %-33s %4d' %
+ print('#define %-33s %6d' %
(self.gen_prefix(name + "_length_bias"), self.length_bias))
default_fields = []
@@ -571,7 +582,7 @@ class Parser:
continue
if field.default == None:
continue
- default_fields.append(" .%-35s = %4d" % (field.name, field.default))
+ default_fields.append(" .%-35s = %6d" % (field.name, field.default))
if default_fields:
print('#define %-40s\\' % (self.gen_prefix(name + '_header')))
@@ -582,10 +593,23 @@ class Parser:
self.emit_pack_function(self.instruction, self.group)
+ def emit_register(self):
+ name = self.register
+ if not self.reg_num == None:
+ print('#define %-33s 0x%04x' %
+ (self.gen_prefix(name + "_num"), self.reg_num))
+
+ if not self.length == None:
+ print('#define %-33s %6d' %
+ (self.gen_prefix(name + "_length"), self.length))
+
+ self.emit_template_struct(self.register, self.group)
+ self.emit_pack_function(self.register, self.group)
+
def emit_struct(self):
name = self.struct
if not self.length == None:
- print('#define %-33s %4d' %
+ print('#define %-33s %6d' %
(self.gen_prefix(name + "_length"), self.length))
self.emit_template_struct(self.struct, self.group)
@@ -598,7 +622,7 @@ class Parser:
name = self.prefix + "_" + value.name
else:
name = value.name
- print('#define %-36s %4d' % (name.upper(), value.value))
+ print('#define %-36s %6d' % (name.upper(), value.value))
print('')
def parse(self, filename):