@@ -36,109 +36,6 @@ c = None
hashed_funcs = {}
xml_equations = None
-def check_operand_type(set, arg):
- if arg.isdigit():
- return "\n<mn>" + arg + "</mn>"
- elif arg[0] == "$":
- if arg in set.counter_vars:
- description = set.counter_vars[arg].get('description')
- elif arg in hw_vars and 'desc' in hw_vars[arg]:
- description = hw_vars[arg]['desc'];
- else:
- description = None
-
- if description != None:
- return "\n<maction actiontype='tooltip'>\n<mi>" + arg + "</mi>\n<mtext>" + description + "</mtext>\n</maction>"
- else:
- return "<mi>" + arg + "</mi>"
- return arg
-
-# http://en.cppreference.com/w/c/language/operator_precedence
-and_precedence = 8
-shft_precedence = 5
-mul_precedence = 3
-add_precedence = 2
-sub_precedence = 2
-default_precedence = 16 #a high value which denotes no brackets needed
-
-def put_brackets(arg):
- return "\n<mtext>(</mtext>" + arg + "\n<mtext>)</mtext>"
-
-def mathml_splice_add(set, args):
- operand_0 = check_operand_type(set, args[0][0])
- operand_1 = check_operand_type(set, args[1][0])
- if args[0][1] < add_precedence:
- operand_0 = put_brackets(args[0][0])
- if args[1][1] < add_precedence:
- operand_1 = put_brackets(args[1][0])
- return [operand_1 + "\n<mo>+</mo>" + operand_0, add_precedence]
-
-def mathml_splice_div(set, args):
- operand_0 = check_operand_type(set, args[0][0])
- operand_1 = check_operand_type(set, args[1][0])
- return ["\n<mfrac>\n<mrow>" + operand_1 + "\n</mrow>\n<mrow>" + operand_0 + "</mrow>\n</mfrac>", default_precedence]
-
-def mathml_splice_max(set, args):
- operand_0 = check_operand_type(set, args[0][0])
- operand_1 = check_operand_type(set, args[1][0])
- return ["\n<mtext>max ( </mtext>" + operand_1 + "\n<mtext> , </mtext>" + operand_0 + "\n<mtext> ) </mtext>", default_precedence]
-
-def mathml_splice_mul(set, args):
- operand_0 = check_operand_type(set, args[0][0])
- operand_1 = check_operand_type(set, args[1][0])
- if args[0][1] < mul_precedence:
- operand_0 = put_brackets(args[0][0])
- if args[1][1] < mul_precedence:
- operand_1 = put_brackets(args[1][0])
- return [operand_1 + "\n<mo>*</mo>" + operand_0, mul_precedence]
-
-def mathml_splice_sub(set, args):
- operand_0 = check_operand_type(set, args[0][0])
- operand_1 = check_operand_type(set, args[1][0])
- if args[0][1] < sub_precedence:
- operand_0 = put_brackets(args[0][0])
- if args[1][1] < sub_precedence:
- operand_1 = put_brackets(args[1][0])
- return [operand_1 + "\n<mo>-</mo>" + operand_0, sub_precedence]
-
-def mathml_splice_read(set, args):
- return ["\n<maction actiontype='tooltip'>\n<mi>" + args[1][0] + args[0][0] + "</mi>\n<mtext>placeholder</mtext>\n</maction>", default_precedence]
-
-def mathml_splice_read_reg(set, args):
- return ["\n<maction actiontype='tooltip'>\n<mi>" + args[0][0] + "</mi>\n<mtext>placeholder</mtext>\n</maction>", default_precedence]
-
-def mathml_splice_min(set, args):
- operand_0 = check_operand_type(set, args[0][0])
- operand_1 = check_operand_type(set, args[1][0])
- return ["\n<mtext>min ( </mtext>" + operand_1 + "\n<mtext> , </mtext>" + operand_0 + "\n<mtext> ) </mtext>", default_precedence]
-
-def mathml_splice_lshft(set, args):
- operand_0 = check_operand_type(set, args[0][0])
- operand_1 = check_operand_type(set, args[1][0])
- if args[0][1] < shft_precedence:
- operand_0 = put_brackets(args[0][0])
- if args[1][1] < shft_precedence:
- operand_1 = put_brackets(args[1][0])
- return [operand_1 + "\n<mo><<</mo>" + operand_0, shft_precedence]
-
-def mathml_splice_rshft(set, args):
- operand_0 = check_operand_type(set, args[0][0])
- operand_1 = check_operand_type(set, args[1][0])
- if args[0][1] < mul_precedence:
- operand_0 = put_brackets(args[0][0])
- if args[1][1] < mul_precedence:
- operand_1 = put_brackets(args[1][0])
- return [operand_1 + "\n<mo>>></mo>" + operand_0, mul_precedence]
-
-def mathml_splice_and(set, args):
- operand_0 = check_operand_type(set, args[0][0])
- operand_1 = check_operand_type(set, args[1][0])
- if args[0][1] < and_precedence:
- operand_0 = put_brackets(args[0][0])
- if args[1][1] < and_precedence:
- operand_1 = put_brackets(args[1][0])
- return [operand_1 + "\n<mo>&</mo>" + operand_0, and_precedence]
-
def emit_fadd(tmp_id, args):
c("double tmp{0} = {1} + {2};".format(tmp_id, args[1], args[0]))
return tmp_id + 1
@@ -212,22 +109,22 @@ def emit_and(tmp_id, args):
return tmp_id + 1
ops = {}
-# (n operands, emitter1, emitter2)
-ops["FADD"] = (2, emit_fadd, mathml_splice_add)
-ops["FDIV"] = (2, emit_fdiv, mathml_splice_div)
-ops["FMAX"] = (2, emit_fmax, mathml_splice_max)
-ops["FMUL"] = (2, emit_fmul, mathml_splice_mul)
-ops["FSUB"] = (2, emit_fsub, mathml_splice_sub)
-ops["READ"] = (2, emit_read, mathml_splice_read)
-ops["READ_REG"] = (1, emit_read_reg, mathml_splice_read_reg)
-ops["UADD"] = (2, emit_uadd, mathml_splice_add)
-ops["UDIV"] = (2, emit_udiv, mathml_splice_div)
-ops["UMUL"] = (2, emit_umul, mathml_splice_mul)
-ops["USUB"] = (2, emit_usub, mathml_splice_sub)
-ops["UMIN"] = (2, emit_umin, mathml_splice_min)
-ops["<<"] = (2, emit_lshft, mathml_splice_lshft)
-ops[">>"] = (2, emit_rshft, mathml_splice_rshft)
-ops["AND"] = (2, emit_and, mathml_splice_and)
+# (n operands, emitter)
+ops["FADD"] = (2, emit_fadd)
+ops["FDIV"] = (2, emit_fdiv)
+ops["FMAX"] = (2, emit_fmax)
+ops["FMUL"] = (2, emit_fmul)
+ops["FSUB"] = (2, emit_fsub)
+ops["READ"] = (2, emit_read)
+ops["READ_REG"] = (1, emit_read_reg)
+ops["UADD"] = (2, emit_uadd)
+ops["UDIV"] = (2, emit_udiv)
+ops["UMUL"] = (2, emit_umul)
+ops["USUB"] = (2, emit_usub)
+ops["UMIN"] = (2, emit_umin)
+ops["<<"] = (2, emit_lshft)
+ops[">>"] = (2, emit_rshft)
+ops["AND"] = (2, emit_and)
def brkt(subexp):
if " " in subexp:
@@ -270,27 +167,6 @@ hw_vars = {
"$QueryMode": { 'c': "perf->devinfo.query_mode" },
}
-def splice_mathml_expression(set, equation, tag):
- tokens = equation.split()
- mathml_stack = []
- tmp_xml_operand = ""
- for token in tokens:
- if not mathml_stack:
- token = check_operand_type(set, token)
- mathml_stack.append([token, default_precedence])
- while mathml_stack and mathml_stack[-1][0] in ops:
- op = mathml_stack.pop()[0]
- argc, callback, mathml_callback = ops[op]
- xml_args = []
- for i in range(0, argc):
- xml_operand = mathml_stack.pop()
- xml_args.append(xml_operand)
- tmp_xml_operand = mathml_callback(set, xml_args)
- mathml_stack.append(tmp_xml_operand)
- xml_string = mathml_stack.pop()[0]
- equation_descr = "<mi>" + tag + "</mi><mo> = </mo>"
- return "<mathml_" + tag + ">" + equation_descr + xml_string + "</mathml_" + tag + ">"
-
def output_rpn_equation_code(set, counter, equation):
c("/* RPN equation: " + equation + " */")
tokens = equation.split()
@@ -302,7 +178,7 @@ def output_rpn_equation_code(set, counter, equation):
stack.append(token)
while stack and stack[-1] in ops:
op = stack.pop()
- argc, callback, mathml_callback = ops[op]
+ argc, callback = ops[op]
args = []
for i in range(0, argc):
operand = stack.pop()
@@ -656,7 +532,6 @@ def main():
parser = argparse.ArgumentParser()
parser.add_argument("--header", help="Header file to write")
parser.add_argument("--code", help="C file to write")
- parser.add_argument("--xml-out", help="Output XML files (adding mathml equations)")
parser.add_argument("xml_files", nargs='+', help="List of xml metrics files to process")
args = parser.parse_args()
@@ -669,15 +544,6 @@ def main():
for xml_file in args.xml_files:
gens.append(Gen(xml_file))
- if args.xml_out:
- for gen in gens:
- for set in gen.sets:
- for counter in set.counters:
- xml_equation = splice_mathml_expression(set, counter.get('equation'), "EQ")
- counter.append(et.fromstring(xml_equation))
- gen.xml.write(gen.filename)
-
-
copyright = textwrap.dedent("""\
/* Autogenerated file, DO NOT EDIT manually! generated by {}
*
Gputop had support for generating mathml figures of the post processing equations. It's not useful here. Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> --- lib/i915/perf-configs/perf-codegen.py | 168 +++----------------------- 1 file changed, 17 insertions(+), 151 deletions(-)