aboutsummaryrefslogtreecommitdiff
path: root/target/hexagon/gen_op_regs.py
diff options
context:
space:
mode:
Diffstat (limited to 'target/hexagon/gen_op_regs.py')
-rwxr-xr-xtarget/hexagon/gen_op_regs.py77
1 files changed, 45 insertions, 32 deletions
diff --git a/target/hexagon/gen_op_regs.py b/target/hexagon/gen_op_regs.py
index c0de9ad380..42972c7f9e 100755
--- a/target/hexagon/gen_op_regs.py
+++ b/target/hexagon/gen_op_regs.py
@@ -22,21 +22,25 @@ import re
import string
import hex_common
+
##
## Generate the register and immediate operands for each instruction
##
def calculate_regid_reg(tag):
- def letter_inc(x): return chr(ord(x)+1)
- ordered_implregs = [ 'SP','FP','LR' ]
- srcdst_lett = 'X'
- src_lett = 'S'
- dst_lett = 'D'
+ def letter_inc(x):
+ return chr(ord(x) + 1)
+
+ ordered_implregs = ["SP", "FP", "LR"]
+ srcdst_lett = "X"
+ src_lett = "S"
+ dst_lett = "D"
retstr = ""
mapdict = {}
for reg in ordered_implregs:
reg_rd = 0
reg_wr = 0
- if ('A_IMPLICIT_WRITES_'+reg) in hex_common.attribdict[tag]: reg_wr = 1
+ if ("A_IMPLICIT_WRITES_" + reg) in hex_common.attribdict[tag]:
+ reg_wr = 1
if reg_rd and reg_wr:
retstr += srcdst_lett
mapdict[srcdst_lett] = reg
@@ -49,16 +53,19 @@ def calculate_regid_reg(tag):
retstr += dst_lett
mapdict[dst_lett] = reg
dst_lett = letter_inc(dst_lett)
- return retstr,mapdict
+ return retstr, mapdict
+
def calculate_regid_letters(tag):
- retstr,mapdict = calculate_regid_reg(tag)
+ retstr, mapdict = calculate_regid_reg(tag)
return retstr
+
def strip_reg_prefix(x):
- y=x.replace('UREG.','')
- y=y.replace('MREG.','')
- return y.replace('GREG.','')
+ y = x.replace("UREG.", "")
+ y = y.replace("MREG.", "")
+ return y.replace("GREG.", "")
+
def main():
hex_common.read_semantics_file(sys.argv[1])
@@ -66,45 +73,51 @@ def main():
tagregs = hex_common.get_tagregs()
tagimms = hex_common.get_tagimms()
- with open(sys.argv[3], 'w') as f:
+ with open(sys.argv[3], "w") as f:
for tag in hex_common.tags:
regs = tagregs[tag]
rregs = []
wregs = []
regids = ""
- for regtype,regid,toss,numregs in regs:
+ for regtype, regid, toss, numregs in regs:
if hex_common.is_read(regid):
- if regid[0] not in regids: regids += regid[0]
- rregs.append(regtype+regid+numregs)
+ if regid[0] not in regids:
+ regids += regid[0]
+ rregs.append(regtype + regid + numregs)
if hex_common.is_written(regid):
- wregs.append(regtype+regid+numregs)
- if regid[0] not in regids: regids += regid[0]
+ wregs.append(regtype + regid + numregs)
+ if regid[0] not in regids:
+ regids += regid[0]
for attrib in hex_common.attribdict[tag]:
- if hex_common.attribinfo[attrib]['rreg']:
- rregs.append(strip_reg_prefix(attribinfo[attrib]['rreg']))
- if hex_common.attribinfo[attrib]['wreg']:
- wregs.append(strip_reg_prefix(attribinfo[attrib]['wreg']))
+ if hex_common.attribinfo[attrib]["rreg"]:
+ rregs.append(strip_reg_prefix(attribinfo[attrib]["rreg"]))
+ if hex_common.attribinfo[attrib]["wreg"]:
+ wregs.append(strip_reg_prefix(attribinfo[attrib]["wreg"]))
regids += calculate_regid_letters(tag)
- f.write(f'REGINFO({tag},"{regids}",\t/*RD:*/\t"{",".join(rregs)}",'
- f'\t/*WR:*/\t"{",".join(wregs)}")\n')
+ f.write(
+ f'REGINFO({tag},"{regids}",\t/*RD:*/\t"{",".join(rregs)}",'
+ f'\t/*WR:*/\t"{",".join(wregs)}")\n'
+ )
for tag in hex_common.tags:
imms = tagimms[tag]
- f.write(f'IMMINFO({tag}')
+ f.write(f"IMMINFO({tag}")
if not imms:
- f.write(''','u',0,0,'U',0,0''')
- for sign,size,shamt in imms:
- if sign == 'r': sign = 's'
+ f.write(""",'u',0,0,'U',0,0""")
+ for sign, size, shamt in imms:
+ if sign == "r":
+ sign = "s"
if not shamt:
shamt = "0"
- f.write(f''','{sign}',{size},{shamt}''')
+ f.write(f""",'{sign}',{size},{shamt}""")
if len(imms) == 1:
if sign.isupper():
- myu = 'u'
+ myu = "u"
else:
- myu = 'U'
- f.write(f''','{myu}',0,0''')
- f.write(')\n')
+ myu = "U"
+ f.write(f""",'{myu}',0,0""")
+ f.write(")\n")
+
if __name__ == "__main__":
main()