@@ -339,6 +339,17 @@ def parse_binutils():
339339 split_lines , quotechar = '"' , quoting = csv .QUOTE_ALL , skipinitialspace = True
340340 )
341341 ]
342+ tags = [
343+ row [- 1 ]
344+ for row in csv .reader (
345+ split_lines , quotechar = '"' , quoting = csv .QUOTE_ALL , skipinitialspace = True
346+ )
347+ ]
348+
349+ # Mark alias insns
350+ for i , tag in enumerate (tags ):
351+ if "INSN_ALIAS" in tag :
352+ formats [i ] = formats [i ] + "_alias"
342353
343354 # Generate unmasked variants for all masked vector insns
344355 unmasked_insns : List [str ] = []
@@ -394,10 +405,12 @@ def print_filter_stats(
394405
395406 unimp_insns = {insn .name for insn in missing_pattern_insns }
396407 unimp_format = {insn .format [0 ] for insn in missing_pattern_insns }
408+ unimp_alias_format = {insn .format [0 ] for insn in missing_pattern_insns if any (["_alias" in fmt for fmt in insn .format ]) }
397409
398410 print ()
399411 print ("Formats missing pattern:" , len (unimp_format ))
400412 print ("Insns missing pattern:" , len (unimp_insns ))
413+ print ("Alias insns missing pattern:" , len (unimp_alias_format ))
401414
402415 unimp_format_counter = Counter (
403416 [insn .format for insn in missing_pattern_insns if insn .name not in imp_insns ]
@@ -460,7 +473,7 @@ def main():
460473 if insn .ext in VECTOR_EXTS :
461474 insn_name = f"{ insn .name } _{ 'V1' if ('Vm' in fmt ) else 'V0' } " .upper ()
462475 else :
463- insn_name = f"{ insn .name } _ { fmt } "
476+ insn_name = f"{ insn .name } _V0" . upper ()
464477
465478 # TODO Memory operands
466479 insn_names .append (insn_name )
@@ -475,6 +488,10 @@ def main():
475488 }
476489 )
477490
491+ insn_names = sorted (insn_names )
492+
493+ assert len (insn_names ) == len (set (insn_names )), "Duplicate insn name detected!"
494+
478495 with open ("gen/instruction.yaml" , "w" , encoding = 'UTF-8' ) as stream :
479496 yaml .dump (instruction_list , stream , sort_keys = True )
480497
0 commit comments