diff --git a/.gitignore b/.gitignore index 4acafde18..55f4b1716 100644 --- a/.gitignore +++ b/.gitignore @@ -2,7 +2,12 @@ # Created by https://www.gitignore.io/api/visualstudiocode,linux,latex,python # Edit at https://www.gitignore.io/?templates=visualstudiocode,linux,latex,python - +CooltoCilM +imm.asm +asd.mips +src/mmips +src/visitors/Cil2MipsCurrent.py +#CooltoCilA ### LaTeX ### ## Core latex/pdflatex auxiliary files: *.aux diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 000000000..8c0668479 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,93 @@ +{ + "cSpell.words": [ + "acker", + "addi", + "addiu", + "addu", + "ademas", + "adjuntos", + "adyacente", + "agregarlos", + "ahora", + "alloc", + "ancestros", + "argumentos", + "asciiz", + "atributo", + "atributos", + "basicos", + "beqz", + "bnez", + "bools", + "busca", + "casos", + "cattrs", + "ccur", + "cpar", + "ctrs", + "ctype", + "cualquier", + "cval", + "deberia", + "definir", + "deje", + "dfunc", + "digrafo", + "direccion", + "dividir", + "dparents", + "dtypes", + "dvars", + "ehhhhhhhhhhh", + "ehhhhhhhhhhhh", + "encapsulada", + "esac", + "esto", + "estos", + "excepcion", + "existe", + "funciones", + "hecho", + "heeerreeee", + "heerrrre", + "hice", + "hijo", + "idealmente", + "Infered", + "Inferencer", + "Inmediate", + "isntance", + "isvoid", + "jachtagsad", + "lanzar", + "límite", + "lneq", + "mano", + "menos", + "mismo", + "mult", + "multply", + "nval", + "ocur", + "opar", + "parentesis", + "pnode", + "proto", + "ptype", + "pusieron", + "recorrer", + "referencia", + "reservada", + "reservar", + "rqueue", + "sobrescribiendo", + "subu", + "tipe", + "tipo", + "toca", + "trozo", + "typex", + "visitar", + "vtype" + ] +} \ No newline at end of file diff --git a/doc/Report.md b/doc/Report.md new file mode 100644 index 000000000..d878378dd --- /dev/null +++ b/doc/Report.md @@ -0,0 +1,66 @@ +# Compilación + +### Proyecto Cool Compiler 2021-2022: + +##### Integrantes: + +-Richard García De la Osa C-412. richard.garcia@estudiantes.matcom.uh.cu. + +-Andy A. Castañeda Guerra C-412. andy.castaneda@estudiantes.matcom.uh.cu. + + + +#### Uso del compilador: + +Para usar nuestro compilador deberá ejecutar en la consola el siguiente comando: + +```bash +bash coolc.sh $INPUT_FILE +``` + +El archivo __INPUT_FILE__ debe tener extension .cl, correspondiente a un programa del lenguaje Cool. + +Este comando generará un fichero con igual nombre pero con extensión .mips, el cual estará listo para ser ejecutado. Para ejecutar el __INPUT_FILE__ (el cual debe tener extensión .mips) deberá usar el siguiente comando en la consola: + +```bash +spim -file $INPUT_FILE +``` + +No hay otros parámetros adicionales para ejecutar nuestro compilador. + +#### Arquitectura del compilador: + +El proyecto tiene la siguiente estructura: + +###### Módulos: + +-lexer: Este módulo está compuesto por __lexer.py__. En este archivo se encuentran las reglas lexicográficas para tokenizar un programa (texto) escrito el __COOL__. Se utiliza la biblioteca __PLY__ de python. + +-c_parser: Este módulo está compuesto por __parser.py__ y __parsetab.py__. En el archivo __parser.py__ están escritas las producciones de la gramática utilizada por nosotros para generar un __AST__ de __COOL__ estructurado a nuestra conveniencia. Por otra parte __parsetab.py__ es un archivo generado por la biblioteca __PLY__ al ejecutar el parser en conjunto con el __lexer.py__ antes mencionado. Este contiene especificaciones sobre el método de parsing utilizado así como los tokens asociados a sus producciones. + +-cool_ast: En este módulo se encuentra el archivo __cool_ast.py__ el cual contiene los nodos del __AST__ de __COOL__ que consideramos necesarios para la implementación de nuestro compilador. + +-cil_ast: En este módulo se encuentra el archivo __cil_ast.py__ el cual contiene los nodos del __AST__ del código intermedio generado (__CIL__) que utilizamos para traducir el código de __COOL__ a instrucciones sencillas de forma que sea más fácil transformarlo a código __mips__. + +-utils: Compuesto por __errors.py__, este contiene el formato de los errores lexicográficos, sintácticos y semánticos que empleamos durante los recorridos al __AST__. Luego encontramos __mip_utils__ donde podemos encontrar 3 clases que son utilizadas durante la conversión de __CIL__ a __mips__ para acceder de manera más sencilla a los strings de los operadores, registros y tipos de datos en __mips__. El archivo __semantic.py__ es uno de los módulos obtenidos durante el desarrollo de las clases prácticas, con algunas modificaciones. + +-visitors: + +​ -__collector.py__: contiene el visitor utilzado solo para registrar los tipos del programa en un objeto context el cual es importado de __semantic.py__. Este visitor solo recorre los nodos que representan declaraciones de clases. + +​ -__builder.py__: primeramente definimos los tipos básicos de __COOL__ así como sus funciones built_in. Además visitamos todos los tipos ya recogidos en el colector para registrar sus métodos y atributos (features). Finalmente nos construimos el grafo de herencia de los tipos para asegurarnos de que no existan ciclos en este. + +​ -__checker.py__: revisamos que el programa esté semánticamente correcto. Es decir, una vez nuestro programa es sintácticamente válido corresponde asegurarnos que los tipos de las variables y funciones estén en correspondencia con el contexto en el que se usan. También anotamos a cada nodo su tipo estático para posterior uso durante la generación de código intermedio. Cada nodo existe en un ámbito específico en el cual son visibles variables locales y de ámbitos más externos; cada vez que se visita un nodo se crea un ámbito nuevo en el cual se registren sus variables locales para aquellos casos en los que unas variables solapan a otras con el mismo lexema pero en ámbitos padres. + +​ -__CooltoCill.py__: aca realizamos otro recorrido sobre el __AST__ de __COOL__ con el cual traducimos las instrucciones de alto nivel a instrucciones que simplifiquen el proceso de generar código mips. Nuestro __CIL__ está compuesto por tres secciones: data, donde se registran todas aquellas cadenas de caracteres ya sea especificados por el usuario o por nosotros para lanzar errores en ejecución; type, compuesta por estructuras que agrupan todos los métodos y atributos de cada tipo (features), para luego en la traducción a mips poder organizar de manera más fluida el direccionamiento a estos; por último code, en este se encuentran agrupadas en estructuras el código intermedio generado para cada una de las funciones de los tipos del programa (contructores, built in y definidas por el usuario). Durante el recorrido por los nodos del __AST__ de __COOL__ se genera a la par un nuevo __AST__ esta vez de __CIL__ para luego traducir a __mips__. + +​ -__CiltoMips.py__: se utiliza el __AST__ de __CIL__ generado por el recorrido anterior para traducir cada nodo a una secuencia de instrucciones en __mips__ correspondientes al mismo. Primero se visitan los nodos que se encuentran en la sección de data luego la sección de type y por último la sección de code y de esta forma queda organizado el programa en __mips__ añadiendole al final algunas funciones por defecto como 'alocate' para reservar memoria y otras. + +#### Problemas técnicos: + +El mayor desafío de implementación que encontramos fue la correcta generación a código intermedio para su posterior traducción a código __mips__ de los nodos __switchcase__ del __AST__ de __COOL__. + +Para ello organizamos las ramas del nodo de mayor a menor, donde las mayores son aquellas cuyo tipo se encuentra a mayor profundidad en el árbol de herencia del programa. Por cada una de estas ramas recorremos el subárbol cuya raiz es el tipo actual de la rama, registrando un salto al label asociado a esta rama. Al recorrer cada uno de estos subárboles, si coincide en algún tipo de este, podemos asegurar que este es el menor tipo que lo conforma (dado que recorremos las ramas en orden decreciente en profundida). + + + diff --git a/doc/Report.pdf b/doc/Report.pdf new file mode 100644 index 000000000..b5b7a777c Binary files /dev/null and b/doc/Report.pdf differ diff --git a/doc/report.md b/doc/report.md new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/doc/report.md @@ -0,0 +1 @@ + diff --git a/doc/team.yml b/doc/team.yml index c16162532..c1de8ab9c 100644 --- a/doc/team.yml +++ b/doc/team.yml @@ -1,10 +1,7 @@ members: - - name: Nombre Apellido1 Apellido2 - github: github_id - group: CXXX - - name: Nombre Apellido1 Apellido2 - github: github_id - group: CXXX - - name: Nombre Apellido1 Apellido2 - github: github_id - group: CXXX + - name: Andy Alejandro Castañeda Guerra + github: Yumenio + group: C412 + - name: Richard García De la Osa + github: Regnod + group: C412 diff --git a/requirements.txt b/requirements.txt index 9eb0cad1a..cba16ee2f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,3 @@ pytest pytest-ordering +ply diff --git a/src/.vscode/settings.json b/src/.vscode/settings.json new file mode 100644 index 000000000..4af6a0711 --- /dev/null +++ b/src/.vscode/settings.json @@ -0,0 +1,12 @@ +{ + "cSpell.words": [ + "addi", + "addiu", + "addu", + "asciiz", + "heeerreeee", + "heerrrre", + "proto", + "subu" + ] +} \ No newline at end of file diff --git a/src/__main__.py b/src/__main__.py new file mode 100644 index 000000000..5b0ed8972 --- /dev/null +++ b/src/__main__.py @@ -0,0 +1,30 @@ +import sys +import lexer.lexer as lexer +import c_parser.parser as parser +from pipeline import Pipeline + +def main(): + if len(sys.argv) > 1: + input_file = sys.argv[1] + else: + # input_file = "./tests/codegen/basic.cl" + raise Exception("Incorrect number of arguments") + + program_file = open(input_file) + program = program_file.read() + program_file.close() + + pipe = Pipeline(program, lexer.CoolLexer(), parser.CoolParser()) + if pipe.errors: + for error in pipe.errors: + print(error) + exit(1) + else: + out_file = input_file.split(".") + out_file[-1] = "mips" + out_file = ".".join(out_file) + with open(out_file, 'w') as f: + f.write(pipe.mipsCode) + +if __name__ == "__main__": + main() diff --git a/src/c_parser/parser.py b/src/c_parser/parser.py new file mode 100644 index 000000000..ae896eb44 --- /dev/null +++ b/src/c_parser/parser.py @@ -0,0 +1,324 @@ +import lexer.lexer as lexer +from lexer.lexer import _tokens +from cool_ast.cool_ast import * +import ply.yacc as yacc +import ply.lex as lt +from utils.errors import _SyntacticError +coolLexer = lexer.CoolLexer() +tokens = _tokens + +precedence = ( + ( 'nonassoc', 'assignArrow'), + ( 'left', 'not'), + ( 'nonassoc', 'leq', 'lneq', 'equal'), + ( 'left', 'plus', 'minus'), + ( 'left', 'star', 'div'), + ( 'nonassoc', 'isvoid'), + ( 'nonassoc', 'complement'), + ( 'nonassoc', 'arroba'), + ( 'nonassoc', 'dot' ) +) +errors = [] +class CoolParser: + # def __init__(self): + + def parse(self, lexer, program): + self.tokens = _tokens + self.lexer = lexer + self.lexer.build() + ast = self.parser.parse(program) + self.errors = errors + return ast + + def find_column(input, token): + line_start = input.rfind('\n', 0, token.lexpos) + 1 + return (token.lexpos - line_start) + 1 + + def p_program(p): + 'program : class_list' + p[0] = ProgramNode(p[1]) + p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] + + def p_class_list(p): + '''class_list : def_class + | def_class class_list + ''' + if len(p) == 2: + p[0] = [p[1]] + else: + p[0] = [p[1]] + p[2] + + def p_def_class(p): + ''' def_class : class type ocur feature_list ccur semi + | class type inherits type ocur feature_list ccur semi + ''' + if len(p) == 7: + p[0] = ClassDeclarationNode(p[2], p[4]) + p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] + else: + p[0] = ClassDeclarationNode(p[2], p[6], p[4]) + p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] + + def p_feature_list_attr(p): + ''' feature_list : def_attr feature_list + | def_func feature_list + | + ''' + if len(p) == 1: + p[0] = [] + elif isinstance(p[1], AttrDeclarationNode): + if len(p) == 3: + p[0] = [p[1]] + p[2] + else: + p[0] = [p[1]] + elif isinstance(p[1], FuncDeclarationNode): + if len(p) == 3: + p[0] = [p[1]] + p[2] + else: + p[0] = [p[1]] + + def p_def_attr(p): + '''def_attr : id colon type semi + | id colon type assignArrow expr semi + ''' + if len(p) == 5: + p[0] = AttrDeclarationNode(p[1], p[3]) + p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] + else: + p[0] = AttrDeclarationNode(p[1],p[3],p[5]) + p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] + + def p_def_func(p): + 'def_func : id opar arg_list cpar colon type ocur expr ccur semi' + p[0] = FuncDeclarationNode(p[1],p[3],p[6],p[8]) + p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] + + def p_arg_list(p): + '''arg_list : non_empty_arg_list + | + ''' + if len(p) == 2: + p[0] = p[1] + else: + p[0] = [] + + def p_non_empty_arg_list(p): + '''non_empty_arg_list : arg + | arg comma non_empty_arg_list + ''' + if len(p) == 4: + p[0] = [p[1]] + p[3] + elif len(p) == 2: + p[0] = [p[1]] + + def p_arg(p): + 'arg : id colon type' + p[0] = (p[1], p[3]) + + def p_param_list(p): + '''param_list : expr_list + | + ''' + if len(p) == 2: + p[0] = p[1] + else: + p[0] = [] + + def p_expr_list(p): + '''expr_list : expr + | expr comma expr_list + ''' + if len(p) == 2: + p[0] = [p[1]] + else: + p[0] = [p[1]] + p[3] + + def p_chunk(p): + '''chunk : expr semi + | expr semi chunk + ''' + if len(p) == 3: + p[0] = [p[1]] + else: + p[0] = [p[1]] + p[3] + + def p_expr_assign(p): + 'expr : id assignArrow expr' + p[0] = AssignNode(p[1],p[3]) + p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] + + def p_expr_call(p): + '''expr : expr dot id opar param_list cpar + | expr arroba type dot id opar param_list cpar + | id opar param_list cpar + ''' + if len(p) == 7: + p[0] = CallNode(p[3], p[5], p[1]) + p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] + elif len(p) == 9: + p[0] = CallNode(p[5], p[7], p[1], p[3]) + p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] + else: + p[0] = CallNode(p[1], p[3]) + p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] + + def p_expr_if(p): + 'expr : if expr then expr else expr fi' + p[0] = ConditionalNode(p[2],p[4],p[6]) + p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] + + def p_expr_while(p): + 'expr : while expr loop expr pool' + p[0] = WhileNode(p[2], p[4]) + p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] + + def p_expr_chunk(p): + 'expr : ocur chunk ccur' + p[0] = ChunkNode(p[2]) + p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] + + def p_expr_let(p): + 'expr : let decl_list in expr' + p[0] = LetInNode(p[2],p[4]) + p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] + + def p_expr_case(p): + 'expr : case expr of case_list esac' + p[0] = SwitchCaseNode(p[2],p[4]) + p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] + + def p_expr_instantiate(p): + 'expr : new type' + p[0] = InstantiateNode(p[2]) + p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] + + def p_expr_isvoid(p): + 'expr : isvoid expr' + p[0] = IsVoidNode(p[2]) + p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] + + def p_expr_bin1(p): + '''expr : expr plus expr + | expr minus expr + ''' + if p[2] == '+': + p[0] = PlusNode(p[1], p[3]) + p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] + else: + p[0] = MinusNode(p[1], p[3]) + p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] + + def p_expr_bin2(p): + '''expr : expr star expr + | expr div expr + ''' + if p[2] == '*': + p[0] = StarNode(p[1], p[3]) + p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] + else: + p[0] = DivNode(p[1], p[3]) + p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] + + def p_expr_bin3(p): + '''expr : expr equal expr + | expr lneq expr + | expr leq expr + ''' + if p[2] == '=': + p[0] = EqualNode(p[1],p[3]) + p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] + elif p[2] == '<=': + p[0] = LeqNode(p[1], p[3]) + p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] + else: + p[0] = LessNode(p[1], p[3]) + p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] + + def p_expr_unary(p): + '''expr : complement expr + | not expr + ''' + if p[1] == '~': + p[0] = ComplementNode(p[2]) + p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] + else: + p[0] = NotNode(p[2]) + p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] + + def p_expr_par(p): + 'expr : opar expr cpar' + p[0] = p[2] + + def p_expr_id(p): + 'expr : id' + p[0] = VariableNode(p[1]) + p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] + + def p_expr_int(p): + 'expr : number' + p[0] = ConstantNumNode(p[1]) + p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] + + def p_expr_string(p): + 'expr : string' + p[0] = StringNode(p[1]) + p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] + + def p_expr_boolean(p): + '''expr : true + | false''' + if p[1] == 'true': + p[0] = TrueNode(p[1]) + p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] + else: + p[0] = FalseNode(p[1]) + p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] + + def p_decl_list(p): + '''decl_list : decl + | decl comma decl_list''' + if len(p) == 2: + p[0] = [p[1]] + else: + p[0] = [p[1]] + p[3] + + def p_decl(p): + '''decl : id colon type + | id colon type assignArrow expr + ''' + if len(p) == 4: + p[0] = VarDeclarationNode(p[1], p[3]) + p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] + else: + p[0] = VarDeclarationNode(p[1], p[3], p[5]) + p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] + + def p_case_list(p): + '''case_list : id colon type rArrow expr semi + | id colon type rArrow expr semi case_list + ''' + if len(p) == 7: + p[0] = [(p[1], p[3], p[5], [sl for sl in p.slice if type(lt.LexToken()) == type(sl)])] + else: + p[0] = [(p[1], p[3], p[5], [sl for sl in p.slice if type(lt.LexToken()) == type(sl)])]+ p[7] + + # Compute column. + # input is the input text string + # token is a token instance + #parentesis? + + def p_error(p): + global errors + def find_column(input, token): + line_start = input.rfind('\n', 0, token.lexpos) + 1 + return (token.lexpos - line_start) + 1 #parentesis? + + if not p: + errors.append(_SyntacticError % (0,0,'EOF')) + return + + token_column = find_column(p.lexer.lexdata, p) + errors.append(_SyntacticError % (p.lineno, token_column, p.value)) + + + parser = yacc.yacc(debug = True) diff --git a/src/c_parser/parsetab.py b/src/c_parser/parsetab.py new file mode 100644 index 000000000..54289eed6 --- /dev/null +++ b/src/c_parser/parsetab.py @@ -0,0 +1,84 @@ + +# parsetab.py +# This file is automatically generated. Do not edit. +# pylint: disable=W,C,R +_tabversion = '3.10' + +_lr_method = 'LALR' + +_lr_signature = 'nonassocassignArrowleftnotnonassocleqlneqequalleftplusminusleftstardivnonassocisvoidnonassoccomplementnonassocarrobanonassocdotarroba assignArrow case ccur chunkComment class colon comma complement cpar div dot else equal esac false fi id if in inherits isvoid leq let lineComment lneq loop minus new newline not number ocur of opar plus pool rArrow semi space star string tab then true type whileprogram : class_listclass_list : def_class\n | def_class class_list\n def_class : class type ocur feature_list ccur semi\n | class type inherits type ocur feature_list ccur semi\n feature_list : def_attr feature_list\n | def_func feature_list\n | \n def_attr : id colon type semi\n | id colon type assignArrow expr semi\n def_func : id opar arg_list cpar colon type ocur expr ccur semiarg_list : non_empty_arg_list\n | \n non_empty_arg_list : arg\n | arg comma non_empty_arg_list\n arg : id colon typeparam_list : expr_list\n | \n expr_list : expr\n | expr comma expr_list\n chunk : expr semi\n | expr semi chunk\n expr : id assignArrow exprexpr : expr dot id opar param_list cpar\n | expr arroba type dot id opar param_list cpar\n | id opar param_list cpar\n expr : if expr then expr else expr fiexpr : while expr loop expr poolexpr : ocur chunk ccurexpr : let decl_list in exprexpr : case expr of case_list esacexpr : new typeexpr : isvoid exprexpr : expr plus expr\n | expr minus expr\n expr : expr star expr\n | expr div expr\n expr : expr equal expr\n | expr lneq expr\n | expr leq expr\n expr : complement expr\n | not expr\n expr : opar expr cparexpr : idexpr : numberexpr : stringexpr : true \n | falsedecl_list : decl \n | decl comma decl_listdecl : id colon type\n | id colon type assignArrow expr\n case_list : id colon type rArrow expr semi\n | id colon type rArrow expr semi case_list\n ' + +_lr_action_items = {'class':([0,3,20,52,],[4,4,-4,-5,]),'$end':([1,2,3,5,20,52,],[0,-1,-2,-3,-4,-5,]),'type':([4,8,17,29,41,50,57,99,122,],[6,13,21,49,74,78,84,111,128,]),'ocur':([6,13,28,35,36,37,38,40,42,43,44,53,54,58,59,60,61,62,63,64,78,93,94,96,97,101,103,104,118,120,125,132,],[7,19,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,101,38,38,38,38,38,38,38,38,38,38,38,]),'inherits':([6,],[8,]),'ccur':([7,9,10,11,15,16,19,26,27,33,45,46,47,48,55,68,74,75,76,77,79,85,86,87,88,89,90,91,92,95,96,102,108,109,114,119,121,124,129,131,133,],[-8,14,-8,-8,-6,-7,-8,32,-9,-44,-45,-46,-47,-48,-10,95,-32,-33,-41,-42,-23,-34,-35,-36,-37,-38,-39,-40,-43,-29,-21,-26,-22,-30,123,-28,-31,-24,-11,-27,-25,]),'id':([7,10,11,18,19,27,28,31,35,36,37,38,39,40,42,43,44,53,54,55,56,58,59,60,61,62,63,64,93,94,96,97,98,100,101,103,104,105,118,120,125,129,132,135,],[12,12,12,22,12,-9,33,22,33,33,33,33,72,33,33,33,33,33,33,-10,83,33,33,33,33,33,33,33,33,33,33,33,72,113,33,33,33,117,33,33,33,-11,33,113,]),'colon':([12,22,30,72,113,],[17,29,50,99,122,]),'opar':([12,28,33,35,36,37,38,40,42,43,44,53,54,58,59,60,61,62,63,64,83,93,94,96,97,101,103,104,117,118,120,125,132,],[18,35,54,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,104,35,35,35,35,35,35,35,125,35,35,35,35,]),'semi':([14,21,32,33,34,45,46,47,48,69,74,75,76,77,79,85,86,87,88,89,90,91,92,95,102,109,119,121,123,124,131,133,134,],[20,27,52,-44,55,-45,-46,-47,-48,96,-32,-33,-41,-42,-23,-34,-35,-36,-37,-38,-39,-40,-43,-29,-26,-30,-28,-31,129,-24,-27,-25,135,]),'cpar':([18,23,24,25,33,45,46,47,48,49,51,54,65,74,75,76,77,79,80,81,82,85,86,87,88,89,90,91,92,95,102,104,109,115,116,119,121,124,125,130,131,133,],[-13,30,-12,-14,-44,-45,-46,-47,-48,-16,-15,-18,92,-32,-33,-41,-42,-23,102,-17,-19,-34,-35,-36,-37,-38,-39,-40,-43,-29,-26,-18,-30,-20,124,-28,-31,-24,-18,133,-27,-25,]),'assignArrow':([21,33,111,],[28,53,120,]),'comma':([25,33,45,46,47,48,49,71,74,75,76,77,79,82,85,86,87,88,89,90,91,92,95,102,109,111,119,121,124,127,131,133,],[31,-44,-45,-46,-47,-48,-16,98,-32,-33,-41,-42,-23,103,-34,-35,-36,-37,-38,-39,-40,-43,-29,-26,-30,-51,-28,-31,-24,-52,-27,-25,]),'if':([28,35,36,37,38,40,42,43,44,53,54,58,59,60,61,62,63,64,93,94,96,97,101,103,104,118,120,125,132,],[36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,]),'while':([28,35,36,37,38,40,42,43,44,53,54,58,59,60,61,62,63,64,93,94,96,97,101,103,104,118,120,125,132,],[37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,]),'let':([28,35,36,37,38,40,42,43,44,53,54,58,59,60,61,62,63,64,93,94,96,97,101,103,104,118,120,125,132,],[39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,]),'case':([28,35,36,37,38,40,42,43,44,53,54,58,59,60,61,62,63,64,93,94,96,97,101,103,104,118,120,125,132,],[40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,]),'new':([28,35,36,37,38,40,42,43,44,53,54,58,59,60,61,62,63,64,93,94,96,97,101,103,104,118,120,125,132,],[41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,]),'isvoid':([28,35,36,37,38,40,42,43,44,53,54,58,59,60,61,62,63,64,93,94,96,97,101,103,104,118,120,125,132,],[42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,]),'complement':([28,35,36,37,38,40,42,43,44,53,54,58,59,60,61,62,63,64,93,94,96,97,101,103,104,118,120,125,132,],[43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,]),'not':([28,35,36,37,38,40,42,43,44,53,54,58,59,60,61,62,63,64,93,94,96,97,101,103,104,118,120,125,132,],[44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,]),'number':([28,35,36,37,38,40,42,43,44,53,54,58,59,60,61,62,63,64,93,94,96,97,101,103,104,118,120,125,132,],[45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,]),'string':([28,35,36,37,38,40,42,43,44,53,54,58,59,60,61,62,63,64,93,94,96,97,101,103,104,118,120,125,132,],[46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,]),'true':([28,35,36,37,38,40,42,43,44,53,54,58,59,60,61,62,63,64,93,94,96,97,101,103,104,118,120,125,132,],[47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,]),'false':([28,35,36,37,38,40,42,43,44,53,54,58,59,60,61,62,63,64,93,94,96,97,101,103,104,118,120,125,132,],[48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,]),'dot':([33,34,45,46,47,48,65,66,67,69,73,74,75,76,77,79,82,84,85,86,87,88,89,90,91,92,95,102,106,107,109,114,119,121,124,126,127,131,133,134,],[-44,56,-45,-46,-47,-48,56,56,56,56,56,-32,56,56,56,56,56,105,56,56,56,56,56,56,56,-43,-29,-26,56,56,56,56,-28,-31,-24,56,56,-27,-25,56,]),'arroba':([33,34,45,46,47,48,65,66,67,69,73,74,75,76,77,79,82,85,86,87,88,89,90,91,92,95,102,106,107,109,114,119,121,124,126,127,131,133,134,],[-44,57,-45,-46,-47,-48,57,57,57,57,57,-32,57,57,57,57,57,57,57,57,57,57,57,57,-43,-29,-26,57,57,57,57,-28,-31,-24,57,57,-27,-25,57,]),'plus':([33,34,45,46,47,48,65,66,67,69,73,74,75,76,77,79,82,85,86,87,88,89,90,91,92,95,102,106,107,109,114,119,121,124,126,127,131,133,134,],[-44,58,-45,-46,-47,-48,58,58,58,58,58,-32,-33,-41,58,58,58,-34,-35,-36,-37,58,58,58,-43,-29,-26,58,58,58,58,-28,-31,-24,58,58,-27,-25,58,]),'minus':([33,34,45,46,47,48,65,66,67,69,73,74,75,76,77,79,82,85,86,87,88,89,90,91,92,95,102,106,107,109,114,119,121,124,126,127,131,133,134,],[-44,59,-45,-46,-47,-48,59,59,59,59,59,-32,-33,-41,59,59,59,-34,-35,-36,-37,59,59,59,-43,-29,-26,59,59,59,59,-28,-31,-24,59,59,-27,-25,59,]),'star':([33,34,45,46,47,48,65,66,67,69,73,74,75,76,77,79,82,85,86,87,88,89,90,91,92,95,102,106,107,109,114,119,121,124,126,127,131,133,134,],[-44,60,-45,-46,-47,-48,60,60,60,60,60,-32,-33,-41,60,60,60,60,60,-36,-37,60,60,60,-43,-29,-26,60,60,60,60,-28,-31,-24,60,60,-27,-25,60,]),'div':([33,34,45,46,47,48,65,66,67,69,73,74,75,76,77,79,82,85,86,87,88,89,90,91,92,95,102,106,107,109,114,119,121,124,126,127,131,133,134,],[-44,61,-45,-46,-47,-48,61,61,61,61,61,-32,-33,-41,61,61,61,61,61,-36,-37,61,61,61,-43,-29,-26,61,61,61,61,-28,-31,-24,61,61,-27,-25,61,]),'equal':([33,34,45,46,47,48,65,66,67,69,73,74,75,76,77,79,82,85,86,87,88,89,90,91,92,95,102,106,107,109,114,119,121,124,126,127,131,133,134,],[-44,62,-45,-46,-47,-48,62,62,62,62,62,-32,-33,-41,62,62,62,-34,-35,-36,-37,None,None,None,-43,-29,-26,62,62,62,62,-28,-31,-24,62,62,-27,-25,62,]),'lneq':([33,34,45,46,47,48,65,66,67,69,73,74,75,76,77,79,82,85,86,87,88,89,90,91,92,95,102,106,107,109,114,119,121,124,126,127,131,133,134,],[-44,63,-45,-46,-47,-48,63,63,63,63,63,-32,-33,-41,63,63,63,-34,-35,-36,-37,None,None,None,-43,-29,-26,63,63,63,63,-28,-31,-24,63,63,-27,-25,63,]),'leq':([33,34,45,46,47,48,65,66,67,69,73,74,75,76,77,79,82,85,86,87,88,89,90,91,92,95,102,106,107,109,114,119,121,124,126,127,131,133,134,],[-44,64,-45,-46,-47,-48,64,64,64,64,64,-32,-33,-41,64,64,64,-34,-35,-36,-37,None,None,None,-43,-29,-26,64,64,64,64,-28,-31,-24,64,64,-27,-25,64,]),'then':([33,45,46,47,48,66,74,75,76,77,79,85,86,87,88,89,90,91,92,95,102,109,119,121,124,131,133,],[-44,-45,-46,-47,-48,93,-32,-33,-41,-42,-23,-34,-35,-36,-37,-38,-39,-40,-43,-29,-26,-30,-28,-31,-24,-27,-25,]),'loop':([33,45,46,47,48,67,74,75,76,77,79,85,86,87,88,89,90,91,92,95,102,109,119,121,124,131,133,],[-44,-45,-46,-47,-48,94,-32,-33,-41,-42,-23,-34,-35,-36,-37,-38,-39,-40,-43,-29,-26,-30,-28,-31,-24,-27,-25,]),'of':([33,45,46,47,48,73,74,75,76,77,79,85,86,87,88,89,90,91,92,95,102,109,119,121,124,131,133,],[-44,-45,-46,-47,-48,100,-32,-33,-41,-42,-23,-34,-35,-36,-37,-38,-39,-40,-43,-29,-26,-30,-28,-31,-24,-27,-25,]),'else':([33,45,46,47,48,74,75,76,77,79,85,86,87,88,89,90,91,92,95,102,106,109,119,121,124,131,133,],[-44,-45,-46,-47,-48,-32,-33,-41,-42,-23,-34,-35,-36,-37,-38,-39,-40,-43,-29,-26,118,-30,-28,-31,-24,-27,-25,]),'pool':([33,45,46,47,48,74,75,76,77,79,85,86,87,88,89,90,91,92,95,102,107,109,119,121,124,131,133,],[-44,-45,-46,-47,-48,-32,-33,-41,-42,-23,-34,-35,-36,-37,-38,-39,-40,-43,-29,-26,119,-30,-28,-31,-24,-27,-25,]),'fi':([33,45,46,47,48,74,75,76,77,79,85,86,87,88,89,90,91,92,95,102,109,119,121,124,126,131,133,],[-44,-45,-46,-47,-48,-32,-33,-41,-42,-23,-34,-35,-36,-37,-38,-39,-40,-43,-29,-26,-30,-28,-31,-24,131,-27,-25,]),'in':([33,45,46,47,48,70,71,74,75,76,77,79,85,86,87,88,89,90,91,92,95,102,109,110,111,119,121,124,127,131,133,],[-44,-45,-46,-47,-48,97,-49,-32,-33,-41,-42,-23,-34,-35,-36,-37,-38,-39,-40,-43,-29,-26,-30,-50,-51,-28,-31,-24,-52,-27,-25,]),'esac':([112,135,136,],[121,-53,-54,]),'rArrow':([128,],[132,]),} + +_lr_action = {} +for _k, _v in _lr_action_items.items(): + for _x,_y in zip(_v[0],_v[1]): + if not _x in _lr_action: _lr_action[_x] = {} + _lr_action[_x][_k] = _y +del _lr_action_items + +_lr_goto_items = {'program':([0,],[1,]),'class_list':([0,3,],[2,5,]),'def_class':([0,3,],[3,3,]),'feature_list':([7,10,11,19,],[9,15,16,26,]),'def_attr':([7,10,11,19,],[10,10,10,10,]),'def_func':([7,10,11,19,],[11,11,11,11,]),'arg_list':([18,],[23,]),'non_empty_arg_list':([18,31,],[24,51,]),'arg':([18,31,],[25,25,]),'expr':([28,35,36,37,38,40,42,43,44,53,54,58,59,60,61,62,63,64,93,94,96,97,101,103,104,118,120,125,132,],[34,65,66,67,69,73,75,76,77,79,82,85,86,87,88,89,90,91,106,107,69,109,114,82,82,126,127,82,134,]),'chunk':([38,96,],[68,108,]),'decl_list':([39,98,],[70,110,]),'decl':([39,98,],[71,71,]),'param_list':([54,104,125,],[80,116,130,]),'expr_list':([54,103,104,125,],[81,115,81,81,]),'case_list':([100,135,],[112,136,]),} + +_lr_goto = {} +for _k, _v in _lr_goto_items.items(): + for _x, _y in zip(_v[0], _v[1]): + if not _x in _lr_goto: _lr_goto[_x] = {} + _lr_goto[_x][_k] = _y +del _lr_goto_items +_lr_productions = [ + ("S' -> program","S'",1,None,None,None), + ('program -> class_list','program',1,'p_program','parser.py',38), + ('class_list -> def_class','class_list',1,'p_class_list','parser.py',49), + ('class_list -> def_class class_list','class_list',2,'p_class_list','parser.py',50), + ('def_class -> class type ocur feature_list ccur semi','def_class',6,'p_def_class','parser.py',58), + ('def_class -> class type inherits type ocur feature_list ccur semi','def_class',8,'p_def_class','parser.py',59), + ('feature_list -> def_attr feature_list','feature_list',2,'p_feature_list_attr','parser.py',81), + ('feature_list -> def_func feature_list','feature_list',2,'p_feature_list_attr','parser.py',82), + ('feature_list -> ','feature_list',0,'p_feature_list_attr','parser.py',83), + ('def_attr -> id colon type semi','def_attr',4,'p_def_attr','parser.py',107), + ('def_attr -> id colon type assignArrow expr semi','def_attr',6,'p_def_attr','parser.py',108), + ('def_func -> id opar arg_list cpar colon type ocur expr ccur semi','def_func',10,'p_def_func','parser.py',130), + ('arg_list -> non_empty_arg_list','arg_list',1,'p_arg_list','parser.py',141), + ('arg_list -> ','arg_list',0,'p_arg_list','parser.py',142), + ('non_empty_arg_list -> arg','non_empty_arg_list',1,'p_non_empty_arg_list','parser.py',150), + ('non_empty_arg_list -> arg comma non_empty_arg_list','non_empty_arg_list',3,'p_non_empty_arg_list','parser.py',151), + ('arg -> id colon type','arg',3,'p_arg','parser.py',159), + ('param_list -> expr_list','param_list',1,'p_param_list','parser.py',163), + ('param_list -> ','param_list',0,'p_param_list','parser.py',164), + ('expr_list -> expr','expr_list',1,'p_expr_list','parser.py',172), + ('expr_list -> expr comma expr_list','expr_list',3,'p_expr_list','parser.py',173), + ('chunk -> expr semi','chunk',2,'p_chunk','parser.py',181), + ('chunk -> expr semi chunk','chunk',3,'p_chunk','parser.py',182), + ('expr -> id assignArrow expr','expr',3,'p_expr_assign','parser.py',190), + ('expr -> expr dot id opar param_list cpar','expr',6,'p_expr_call','parser.py',201), + ('expr -> expr arroba type dot id opar param_list cpar','expr',8,'p_expr_call','parser.py',202), + ('expr -> id opar param_list cpar','expr',4,'p_expr_call','parser.py',203), + ('expr -> if expr then expr else expr fi','expr',7,'p_expr_if','parser.py',234), + ('expr -> while expr loop expr pool','expr',5,'p_expr_while','parser.py',245), + ('expr -> ocur chunk ccur','expr',3,'p_expr_chunk','parser.py',256), + ('expr -> let decl_list in expr','expr',4,'p_expr_let','parser.py',267), + ('expr -> case expr of case_list esac','expr',5,'p_expr_case','parser.py',278), + ('expr -> new type','expr',2,'p_expr_instantiate','parser.py',289), + ('expr -> isvoid expr','expr',2,'p_expr_isvoid','parser.py',300), + ('expr -> expr plus expr','expr',3,'p_expr_bin1','parser.py',311), + ('expr -> expr minus expr','expr',3,'p_expr_bin1','parser.py',312), + ('expr -> expr star expr','expr',3,'p_expr_bin2','parser.py',336), + ('expr -> expr div expr','expr',3,'p_expr_bin2','parser.py',337), + ('expr -> expr equal expr','expr',3,'p_expr_bin3','parser.py',359), + ('expr -> expr lneq expr','expr',3,'p_expr_bin3','parser.py',360), + ('expr -> expr leq expr','expr',3,'p_expr_bin3','parser.py',361), + ('expr -> complement expr','expr',2,'p_expr_unary','parser.py',392), + ('expr -> not expr','expr',2,'p_expr_unary','parser.py',393), + ('expr -> opar expr cpar','expr',3,'p_expr_par','parser.py',415), + ('expr -> id','expr',1,'p_expr_id','parser.py',419), + ('expr -> number','expr',1,'p_expr_int','parser.py',430), + ('expr -> string','expr',1,'p_expr_string','parser.py',441), + ('expr -> true','expr',1,'p_expr_boolean','parser.py',452), + ('expr -> false','expr',1,'p_expr_boolean','parser.py',453), + ('decl_list -> decl','decl_list',1,'p_decl_list','parser.py',474), + ('decl_list -> decl comma decl_list','decl_list',3,'p_decl_list','parser.py',475), + ('decl -> id colon type','decl',3,'p_decl','parser.py',482), + ('decl -> id colon type assignArrow expr','decl',5,'p_decl','parser.py',483), + ('case_list -> id colon type rArrow expr semi','case_list',6,'p_case_list','parser.py',505), + ('case_list -> id colon type rArrow expr semi case_list','case_list',7,'p_case_list','parser.py',506), +] diff --git a/src/cil_ast/cil_ast.py b/src/cil_ast/cil_ast.py new file mode 100644 index 000000000..95f576f81 --- /dev/null +++ b/src/cil_ast/cil_ast.py @@ -0,0 +1,506 @@ +import visitors.visitor as visitor +class Node: + def __init__(self): + pass + + +class ProgramNode(Node): + def __init__(self, dottypes, dotdata, dotcode): + super().__init__() + self.dottypes = dottypes + self.dotdata = dotdata + self.dotcode = dotcode + +class TypeNode(Node): + def __init__(self, name): + super().__init__() + self.name = name + self.attributes = {} + self.methods = {} + +class DataNode(Node): + def __init__(self, vname, value): + super().__init__() + self.name = vname + self.value = value + +class FunctionNode(Node): + def __init__(self, fname, params, localvars, instructions): + super().__init__() + self.name = fname + self.params = params + self.localvars = localvars + self.instructions = instructions + self.labels_count = 0 + +class LocalNode(Node): + def __init__(self, name): + super().__init__() + self.name = name + +class InstructionNode(Node): + pass + +class AssignNode(InstructionNode): + def __init__(self, dest, source): + super().__init__() + self.dest = dest + self.source = source + +class ArithmeticNode(InstructionNode): + def __init__(self, dest, left, right): + super().__init__() + self.dest = dest + self.left = left + self.right = right + +class PlusNode(ArithmeticNode): + pass + +class MinusNode(ArithmeticNode): + pass + +class StarNode(ArithmeticNode): + pass + +class DivNode(ArithmeticNode): + pass + +class LessNode(ArithmeticNode): + pass + +class EqualNode(ArithmeticNode): + pass + +class EqualStringNode(ArithmeticNode): + pass + +class LessEqualNode(ArithmeticNode): + pass + +class GetAttribNode(InstructionNode): + def __init__(self, dest, obj, attr, computed_type): + super().__init__() + self.dest = dest + self.obj = obj + self.attr = attr + self.computed_type = computed_type + + def __repr__(self): + return f"{self.dest} = GETATTR {self.obj} {self.attr}" + + +class SetAttribNode(InstructionNode): + def __init__(self, obj, attr, value, computed_type): + super().__init__() + self.obj = obj + self.attr = attr + self.value = value + self.computed_type = computed_type + +class AllocateNode(InstructionNode): + def __init__(self, itype, dest): + super().__init__() + self.type = itype + self.dest = dest + +class TypeOfNode(InstructionNode): + def __init__(self, dest, obj): + super().__init__() + self.obj = obj + self.dest = dest + + def __repr__(self): + return f"{self.dest} = TYPEOF {self.obj}" + + +class LabelNode(InstructionNode): + def __init__(self, label): + super().__init__() + self.label = label + + def __repr__(self): + return f"LABEL {self.label}:" + + +class GotoNode(InstructionNode): + def __init__(self, label): + super().__init__() + self.label = label + + def __repr__(self): + return f"GOTO {self.label}" + + +class GotoIfNode(InstructionNode): + def __init__(self, label, condition): + super().__init__() + self.label = label + self.condition = condition + + def __repr__(self): + return f"GOTO {self.label} if {self.condition}" + +class StaticCallNode(InstructionNode): + def __init__(self, function, dest): + super().__init__() + self.function = function + self.dest = dest + + def __repr__(self): + return f"{self.dest} = CALL {self.function}" + +class DynamicCallNode(InstructionNode): + def __init__(self, type, method, dest): + super().__init__() + self.type = type + self.method = method + self.dest = dest + + def __repr__(self): + return f"{self.dest} = VCALL {self.type} {self.method}" + +class ArgNode(InstructionNode): + def __init__(self, name): + super().__init__() + self.name = name + + def __repr__(self): + return f"ARG {self.name}" + + +class ReturnNode(InstructionNode): + def __init__(self, value=None): + super().__init__() + self.value = value + + def __repr__(self): + return f"RETURN {self.value}" + + +class LoadNode(InstructionNode): + def __init__(self, dest, msg): + super().__init__() + self.dest = dest + self.msg = msg + + def __repr__(self): + return f"{self.dest} LOAD {self.msg}" + +class LengthNode(InstructionNode): + def __init__(self, dest, source): + super().__init__() + self.dest = dest + self.source = source + +class ConcatNode(InstructionNode): + def __init__(self, dest, prefix, suffix, length): + super().__init__() + self.dest = dest + self.prefix = prefix + self.suffix = suffix + self.length = length + +class PrefixNode(InstructionNode): + pass + +class SubstringNode(InstructionNode): + def __init__(self, dest, str_value, index, length): + super().__init__() + self.dest = dest + self.str_value = str_value + self.index = index + self.length = length + +class ToStrNode(InstructionNode): + def __init__(self, dest, value): + super().__init__() + self.dest = dest + self.value = value + +class ReadStringNode(InstructionNode): + def __init__(self, dest): + super().__init__() + self.dest = dest + +class ReadIntNode(InstructionNode): + def __init__(self, dest): + super().__init__() + self.dest = dest + +class PrintStringNode(InstructionNode): + def __init__(self, str_addr): + super().__init__() + self.str_addr = str_addr + +class PrintIntNode(InstructionNode): + def __init__(self, value): + super().__init__() + self.value = value + +class ExitNode(InstructionNode): + pass + +class CopyNode(InstructionNode): + def __init__(self, dest, value): + super().__init__() + self.dest = dest + self.value = value + +class ErrorNode(InstructionNode): + def __init__(self, data): + super().__init__() + self.data = data + +class VoidNode(InstructionNode): + def __str__(self): + return 'VOID' + +class NameNode(InstructionNode): + def __init__(self, dest, value): + super().__init__() + self.dest = dest + self.value = value + +class NotNode(InstructionNode): + def __init__(self, dest, value): + super().__init__() + self.dest = dest + self.value = value + +class ComplementNode(InstructionNode): + def __init__(self, dest, value): + super().__init__() + self.dest = dest + self.value = value + +class VarNode(InstructionNode): + def __init__(self, name): + super().__init__() + self.name = name + + def __str__(self): + return f'{self.name}' + +class AttributeNode(VarNode): + def __init__(self, name, type): + super().__init__(name) + self.type = type + + def __str__(self): + return f'{self.type}.{self.name}' + +class ParamNode(VarNode): + def __init__(self, name): + super().__init__(name) + + def __str__(self): + return f'PARAM {self.name}' + + + +def get_formatter(): + + class PrintVisitor(object): + @visitor.on('node') + def visit(self, node): + pass + + @visitor.when(ProgramNode) + def visit(self, node): + dottypes = '\n'.join(self.visit(t) for t in node.dottypes) + dotdata = '\n'.join(self.visit(t) for t in node.dotdata) + dotcode = '\n'.join(self.visit(t) for t in node.dotcode) + + return f'.TYPES\n{dottypes}\n\n.DATA\n{dotdata}\n\n.CODE\n{dotcode}' + + @visitor.when(TypeNode) + def visit(self, node): + attributes = '\n\t'.join(f'attribute {x}' for x in node.attributes) + methods = '\n\t'.join(f'method {x}' for x in node.methods) + + return f'type {node.name} {{\n\t{attributes}\n\t{methods}\n}}' + + @visitor.when(DataNode) + def visit(self, node): + return f'DATA "{node.value}"' + + @visitor.when(FunctionNode) + def visit(self, node): + params = '\n\t'.join(self.visit(x) for x in node.params) + localvars = '\n\t'.join(self.visit(x) for x in node.localvars) + instructions = '\n\t'.join(self.visit(x) for x in node.instructions) + + return f'function {node.name} {{\n\t{params}\n\t{localvars}\n\n\t{instructions}\n}}' + + @visitor.when(ParamNode) + def visit(self, node): + return f'PARAM {node.name}' + + @visitor.when(LocalNode) + def visit(self, node): + return f'LOCAL {node.name}' + + @visitor.when(AssignNode) + def visit(self, node): + return f'{node.dest} = {node.source}' + + @visitor.when(PlusNode) + def visit(self, node): + return f'{node.dest} = {node.left} + {node.right}' + + @visitor.when(MinusNode) + def visit(self, node): + return f'{node.dest} = {node.left} - {node.right}' + + @visitor.when(StarNode) + def visit(self, node): + return f'{node.dest} = {node.left} * {node.right}' + + @visitor.when(DivNode) + def visit(self, node): + return f'{node.dest} = {node.left} / {node.right}' + + @visitor.when(AllocateNode) + def visit(self, node): + return f'{node.dest} = ALLOCATE {node.type}' + + @visitor.when(TypeOfNode) + def visit(self, node): + return f'{node.dest} = TYPEOF {node.obj}' + + @visitor.when(StaticCallNode) + def visit(self, node): + return f'{node.dest} = CALL {node.function}' + + @visitor.when(DynamicCallNode) + def visit(self, node): + return f'{node.dest} = VCALL {node.type} {node.method}' + + @visitor.when(ArgNode) + def visit(self, node): + return f'ARG {node.name}' + + @visitor.when(ReturnNode) + def visit(self, node): + return f'RETURN {node.value if node.value is not None else ""}' + + @visitor.when(LoadNode) + def visit(self, node): + return f'{node.dest} = LOAD {self.visit(node.msg)}' + + @visitor.when(PrintStringNode) + def visit(self, node: PrintStringNode): + return f'PRINTSTRING {node.str_addr}' + + @visitor.when(PrintIntNode) + def visit(self, node: PrintIntNode): + return f'PRINTINT {node.value}' + + @visitor.when(ExitNode) + def visit(self, node: ExitNode): + return f'EXIT' + + @visitor.when(CopyNode) + def visit(self, node): + return f'{node.dest} = COPY {node.value}' + + @visitor.when(GetAttribNode) + def visit(self, node: GetAttribNode): + return f'{node.dest} = GETATTRIB {node.obj}.{node.attr} {node.computed_type}' + + @visitor.when(ErrorNode) + def visit(self, node: ErrorNode): + return f'ERROR {self.visit(node.data)}' + + @visitor.when(ReadStringNode) + def visit(self, node: ReadStringNode): + return f'{node.dest} = READ' + + @visitor.when(ReadIntNode) + def visit(self, node: ReadIntNode): + return f'{node.dest} = READ' + + @visitor.when(SetAttribNode) + def visit(self, node: SetAttribNode): + return f'SETATTR {node.obj}.{node.attr}: {node.computed_type} = {node.value}' + + @visitor.when(LessNode) + def visit(self, node: LessNode): + return f'{node.dest} = {node.left} < {node.right}' + + @visitor.when(GotoIfNode) + def visit(self, node: GotoIfNode): + return f'GOTOIF {node.condition} {node.label}' + + @visitor.when(GotoNode) + def visit(self, node: GotoNode): + return f'GOTO {node.label}' + + @visitor.when(LabelNode) + def visit(self, node: LabelNode): + return f'LABEL {node.label}' + + @visitor.when(SubstringNode) + def visit(self, node: SubstringNode): + return f'{node.dest} = SUBSTRING {node.str_value}[{node.index}:{node.index} up to {node.length}]' + + @visitor.when(ConcatNode) + def visit(self, node: ConcatNode): + return f'{node.dest} = CONCAT {node.prefix} + {node.suffix}' + + @visitor.when(LengthNode) + def visit(self, node: LengthNode): + return f'{node.dest} = LENGTH {node.source}' + + @visitor.when(EqualNode) + def visit(self, node: EqualNode): + return f'{node.dest} = {node.left} == {node.right}' + + @visitor.when(NameNode) + def visit(self, node: NameNode): + return f'{node.dest} = NAME {node.value}' + + @visitor.when(EqualStringNode) + def visit(self, node: EqualStringNode): + return f'{node.dest} = {node.left} == {node.right}' + + @visitor.when(ComplementNode) + def visit(self, node: ComplementNode): + return f'{node.dest} = ~{node.value}' + + @visitor.when(LessEqualNode) + def visit(self, node: LessEqualNode): + return f'{node.dest} = {node.left} <= {node.right}' + + @visitor.when(PrefixNode) + def visit(self, node: PrefixNode): + return f'PREFFIXNODE' + + @visitor.when(ToStrNode) + def visit(self, node: ToStrNode): + return f'{node.dest} = str({node.value})' + + @visitor.when(VoidNode) + def visit(self, node: VoidNode): + return 'VOID' + + @visitor.when(NotNode) + def visit(self, node: NotNode): + return f'{node.dest} = NOT {node.value}' + + @visitor.when(VarNode) + def visit(self, node: VarNode): + return f'{node.name}' + + @visitor.when(AttributeNode) + def visit(self, node: AttributeNode): + return f'ATTRIBUTE {node.type}.{node.name}' + + @visitor.when(ParamNode) + def visit(self, node: ParamNode): + return f'{node.name}' + + + printer = PrintVisitor() + return (lambda ast: printer.visit(ast)) \ No newline at end of file diff --git a/src/cool_ast/cool_ast.py b/src/cool_ast/cool_ast.py new file mode 100644 index 000000000..14129a0e6 --- /dev/null +++ b/src/cool_ast/cool_ast.py @@ -0,0 +1,131 @@ +class Node: + pass + +class ProgramNode(Node): + def __init__(self, declarations): + self.declarations = declarations + +class DeclarationNode(Node): + pass +class ExpressionNode(Node): + pass + +class ClassDeclarationNode(DeclarationNode): + def __init__(self, idx, features, parent=None): + self.id = idx + self.parent = parent + self.features = features + +class FuncDeclarationNode(DeclarationNode): + def __init__(self, idx, params, return_type, body): + self.id = idx + self.params = params + self.type = return_type + self.body = body + + +class AttrDeclarationNode(DeclarationNode): + def __init__(self, idx, typex, value = None): + self.id = idx + self.type = typex + self.value = value + +class VarDeclarationNode(ExpressionNode): + def __init__(self, idx, typex, expr = None): + self.id = idx + self.type = typex + self.expr = expr + +class AssignNode(ExpressionNode): + def __init__(self, idx, expr): + self.id = idx + self.expr = expr + +class CallNode(ExpressionNode): + def __init__(self, method, args, obj = None, parent = None): + self.method = method + self.args = args + self.obj = obj + self.parent = parent #propiedad necesaria para la instruccion id@parentType.prop(args) + +class AtomicNode(ExpressionNode): + def __init__(self, lex): + self.lex = lex + +class BinaryNode(ExpressionNode): + def __init__(self, left, right): + self.left = left + self.right = right + +class ChunkNode(ExpressionNode): + def __init__(self, chunk): + self.chunk = chunk + +class ConditionalNode(ExpressionNode): + def __init__(self, ifChunk, thenChunk, elseChunk): + self.ifChunk = ifChunk + self.thenChunk = thenChunk + self.elseChunk = elseChunk + +class WhileNode(ExpressionNode): + def __init__(self, condition, loopChunk): + self.condition = condition + self.loopChunk = loopChunk + +class LetInNode(ExpressionNode): + def __init__(self, decl_list, expression): + self.decl_list = decl_list + self.expression = expression + +class NotNode(ExpressionNode): + def __init__(self, expression): + self.expression = expression + +class IsVoidNode(ExpressionNode): + def __init__(self, method): + self.method = method + +class ComplementNode(ExpressionNode): + def __init__(self, expr): + self.expr = expr + +class SwitchCaseNode(ExpressionNode): + def __init__(self, expr, case_list): + self.expr = expr + self.case_list = case_list + +class ConstantNumNode(AtomicNode): + pass +class VariableNode(AtomicNode): + pass +class InstantiateNode(AtomicNode): + def __init__(self, lex): + super().__init__(lex) + self.type = lex + +class TrueNode(AtomicNode): + pass +class FalseNode(AtomicNode): + pass +class StringNode(AtomicNode): + pass +class VoidNode(AtomicNode): + pass +class AutoTypeNode(AtomicNode): + pass + +class PlusNode(BinaryNode): + pass +class MinusNode(BinaryNode): + pass +class StarNode(BinaryNode): + pass +class DivNode(BinaryNode): + pass + +class LessNode(BinaryNode): + pass +class LeqNode(BinaryNode): + pass +class EqualNode(BinaryNode): + pass \ No newline at end of file diff --git a/src/coolc.sh b/src/coolc.sh index 3088de4f9..d9d7f8df5 100755 --- a/src/coolc.sh +++ b/src/coolc.sh @@ -4,8 +4,8 @@ INPUT_FILE=$1 OUTPUT_FILE=${INPUT_FILE:0: -2}mips # Si su compilador no lo hace ya, aquí puede imprimir la información de contacto -echo "LINEA_CON_NOMBRE_Y_VERSION_DEL_COMPILADOR" # TODO: Recuerde cambiar estas -echo "Copyright (c) 2019: Nombre1, Nombre2, Nombre3" # TODO: líneas a los valores correctos +echo "Cool Compiler v0.1" # TODO: Recuerde cambiar estas +echo "Copyright (c) 2021: Richard García De la Osa, Andy A. Castañeda Guerra." # TODO: líneas a los valores correctos # Llamar al compilador -echo "Compiling $INPUT_FILE into $OUTPUT_FILE" +exec python3 __main__.py $INPUT_FILE diff --git a/src/lexer/lexer.py b/src/lexer/lexer.py new file mode 100755 index 000000000..281c4e64a --- /dev/null +++ b/src/lexer/lexer.py @@ -0,0 +1,369 @@ +import ply.lex as lex +from utils.errors import _LexicographicError +reserved = { + 'class' : 'class', + 'new' : 'new', + 'while' : 'while', + 'if' : 'if', + 'then' : 'then', + 'else' : 'else', + 'fi' : 'fi', + 'not' : 'not', + 'loop' : 'loop', + 'pool' : 'pool', + 'let' : 'let', + 'in' : 'in', + 'case' : 'case', + 'of' : 'of', + 'esac' : 'esac', + 'inherits' : 'inherits', + 'isvoid' : 'isvoid', + 'true' : 'true', + 'false' : 'false' +} +_tokens = [ + 'space', + 'lineComment', + 'chunkComment', + 'number', + 'semi', + 'colon', + 'comma', + 'dot', + 'opar', + 'cpar', + 'ocur', + 'ccur', + 'plus', + 'minus', + 'star', + 'div', + 'equal', + 'lneq', + 'leq', + 'complement', + 'assignArrow', + 'rArrow', + 'string', + 'arroba', + 'tab', + 'newline', + 'type', + 'id' +] +_tokens += list(reserved.values()) +def find_all(s): + b = [] + a = s.find('a') + while a != -1: + b.append(a) + a = s.find('a', a + 1) + return b + +def find_last(text, row, col): + first = text.find("\n") + temp_text = text + add_col= first + add_row = 0 + loop = True + while loop: + if first > 0: + if temp_text[first-1] == "\\": + temp_text = temp_text[first+1: ] + add_col = first + first = temp_text.find("\n") + add_row += 1 + loop = True + else: + loop = False + if first + 1 == len(temp_text): + eof = True + else: + eof = False + else: + # cuando no hay newline + if first == -1: + add_col = len(temp_text) + 1 + eof = True + # cuando hay newline pero al inicio :) + else: + add_col = 0 + eof = False + break + + if add_row == 0: + add_col += col + add_row += row + return (add_row, add_col, eof) + +class CoolLexer: + tokens = _tokens + states = ( + ('chunkComment', 'exclusive'), + ('string', 'exclusive') + ) + col = 0 + # Define a rule so we can track line numbers + def t_newline(self, t): + r'\n+' + t.lexer.lineno += len(t.value) + self.col = 0 + + # Compute column. + # input is the input text string + # token is a token instance + def find_column(self, input, token): + line_start = input.rfind('\n', 0, token.lexpos) + 1 + return (token.lexpos - line_start) + 1 #parentesis? + + t_ignore_space = r'[ ]+' + # def t_space(self,t): + # r'[ ]+' + # pass + + # t_ignore_lineComment = r'--.*' + # preguntarle a andy como no hacer esto con la precedencia... + def t_ignore_lineComment(self, t): + r'--.*' + pass + + # t_ignore_chunkComment = r'\(\*[^$]*\*\)' + + def t_chunkComment(self, t): + r'\(\*' + t.lexer.code_start = t.lexer.lexpos - 2 + t.lexer.level = 1 + t.lexer.begin('chunkComment') + pass + + def t_chunkComment_initComment(self, t): + r'\(\*' + t.lexer.level += 1 + pass + + def t_chunkComment_endComment(self, t): + r'\*\)' + t.lexer.level += -1 + if t.lexer.level == 0: + t.value = t.lexer.lexdata[t.lexer.code_start : t.lexer.lexpos] + t.type = 'chunkComment' + # t.lexer.lineno += t.value.count('\n') + t.lexer.begin('INITIAL') + if t.lexer.level < 0: + print(f'( {t.lexer.lineno}') + pass + + def t_chunkComment_comment(self, t): + r'.|\n' + if t.value == '\n': + t.lexer.lineno+=len(t.value) + pass + + def t_chunkComment_eof(self, t): + if t.lexer.level > 0: + self.errors.append(_LexicographicError % (t.lexer.lineno, self.find_column(t.lexer.lexdata,t), 'EOF in comment')) + # print(_LexicographicError % (t.lexer.lineno, self.find_column(t.lexer.lexdata,t), 'EOF in comment')) + return None + + # t_assignArrow = r'<\-' + def t_assignArrow(self, t): + r'<\-' + t.col = self.find_column(t.lexer.lexdata,t) + (self.col - self.col//4) + return t + # t_rArrow = r'=>' + def t_rArrow(self, t): + r'=>' + t.col = self.find_column(t.lexer.lexdata,t) + (self.col - self.col//4) + return t + # t_leq = r'<=' + def t_leq(self, t): + r'<=' + t.col = self.find_column(t.lexer.lexdata,t) + (self.col - self.col//4) + return t + def t_number(self, t): + r'\d+' + t.value = int(t.value) + t.col = self.find_column(t.lexer.lexdata,t) + (self.col - self.col//4) + return t + + # t_semi = r';' + def t_semi(self, t): + r';' + t.col = self.find_column(t.lexer.lexdata,t) + (self.col - self.col//4) + return t + # t_colon = r':' + def t_colon(self, t): + r':' + t.col = self.find_column(t.lexer.lexdata,t) + (self.col - self.col//4) + return t + # t_comma = r',' + def t_comma(self, t): + r',' + t.col = self.find_column(t.lexer.lexdata,t) + (self.col - self.col//4) + return t + # t_dot = r'\.' + def t_dot(self, t): + r'\.' + t.col = self.find_column(t.lexer.lexdata,t) + (self.col - self.col//4) + return t + # t_opar = r'\(' + def t_opar(self, t): + r'\(' + t.col = self.find_column(t.lexer.lexdata,t) + (self.col - self.col//4) + return t + # t_cpar = r'\)' + def t_cpar(self, t): + r'\)' + t.col = self.find_column(t.lexer.lexdata,t) + (self.col - self.col//4) + return t + + # t_ocur = r'\{' + def t_ocur(self, t): + r'\{' + t.col = self.find_column(t.lexer.lexdata,t) + (self.col - self.col//4) + return t + # t_ccur = r'\}' + def t_ccur(self, t): + r'\}' + t.col = self.find_column(t.lexer.lexdata,t) + (self.col - self.col//4) + return t + + # t_plus = r'\+' + def t_plus(self,t): + r'\+' + t.col = self.find_column(t.lexer.lexdata,t) + (self.col - self.col//4) + return t + # t_minus = r'\-' + def t_minus(self,t): + r'\-' + t.col = self.find_column(t.lexer.lexdata,t) + (self.col - self.col//4) + return t + + # t_star = r'\*' + def t_star(self,t): + r'\*' + t.col = self.find_column(t.lexer.lexdata,t) + (self.col - self.col//4) + return t + # t_div = r'/' + def t_div(self,t): + r'/' + t.col = self.find_column(t.lexer.lexdata,t) + (self.col - self.col//4) + return t + + # t_equal = r'=' + def t_equal(self,t): + r'=' + t.col = self.find_column(t.lexer.lexdata,t) + (self.col - self.col//4) + return t + # t_lneq = r'<' + def t_lneq(self, t): + r'<' + t.col = self.find_column(t.lexer.lexdata,t) + (self.col - self.col//4) + return t + # t_complement = r'\~' + def t_complement(self, t): + r'\~' + t.col = self.find_column(t.lexer.lexdata,t) + (self.col - self.col//4) + return t + def t_string(self, t): + r'\"' + t.lexer.begin('string') + pass + + def t_string_string(self, t): + r"([^\n]|(? program","S'",1,None,None,None), + ('program -> class_list','program',1,'p_program','parser.py',32), + ('class_list -> def_class','class_list',1,'p_class_list','parser.py',36), + ('class_list -> def_class class_list','class_list',2,'p_class_list','parser.py',37), + ('def_class -> class type ocur feature_list ccur semi','def_class',6,'p_def_class','parser.py',45), + ('def_class -> class type inherits type ocur feature_list ccur semi','def_class',8,'p_def_class','parser.py',46), + ('feature_list -> def_attr feature_list','feature_list',2,'p_feature_list_attr','parser.py',54), + ('feature_list -> def_func feature_list','feature_list',2,'p_feature_list_attr','parser.py',55), + ('feature_list -> ','feature_list',0,'p_feature_list_attr','parser.py',56), + ('def_attr -> id colon type semi','def_attr',4,'p_def_attr','parser.py',80), + ('def_attr -> id colon type assignArrow expr semi','def_attr',6,'p_def_attr','parser.py',81), + ('def_func -> id opar arg_list cpar colon type ocur expr ccur semi','def_func',10,'p_def_func','parser.py',89), + ('arg_list -> arg','arg_list',1,'p_arg_list','parser.py',93), + ('arg_list -> arg comma arg_list','arg_list',3,'p_arg_list','parser.py',94), + ('arg_list -> ','arg_list',0,'p_arg_list','parser.py',95), + ('arg -> id colon type','arg',3,'p_arg','parser.py',105), + ('param_list -> expr_list','param_list',1,'p_param_list','parser.py',109), + ('param_list -> ','param_list',0,'p_param_list','parser.py',110), + ('expr_list -> expr','expr_list',1,'p_expr_list','parser.py',118), + ('expr_list -> expr comma expr_list','expr_list',3,'p_expr_list','parser.py',119), + ('chunk -> expr semi','chunk',2,'p_chunk','parser.py',127), + ('chunk -> expr semi chunk','chunk',3,'p_chunk','parser.py',128), + ('expr -> id assignArrow expr','expr',3,'p_expr_assign','parser.py',136), + ('expr -> expr dot id opar param_list cpar','expr',6,'p_expr_call','parser.py',140), + ('expr -> expr arroba type dot id opar param_list cpar','expr',8,'p_expr_call','parser.py',141), + ('expr -> id opar param_list cpar','expr',4,'p_expr_call','parser.py',142), + ('expr -> if expr then expr else expr fi','expr',7,'p_expr_if','parser.py',152), + ('expr -> while expr loop expr pool','expr',5,'p_expr_while','parser.py',156), + ('expr -> ocur chunk ccur','expr',3,'p_expr_chunk','parser.py',160), + ('expr -> let decl_list in expr','expr',4,'p_expr_let','parser.py',164), + ('expr -> case expr of case_list esac','expr',5,'p_expr_case','parser.py',168), + ('expr -> new type','expr',2,'p_expr_instantiate','parser.py',172), + ('expr -> isvoid expr','expr',2,'p_expr_isvoid','parser.py',176), + ('expr -> expr plus expr','expr',3,'p_expr_bin1','parser.py',180), + ('expr -> expr minus expr','expr',3,'p_expr_bin1','parser.py',181), + ('expr -> expr star expr','expr',3,'p_expr_bin2','parser.py',189), + ('expr -> expr div expr','expr',3,'p_expr_bin2','parser.py',190), + ('expr -> expr equal expr','expr',3,'p_expr_bin3','parser.py',198), + ('expr -> expr lneq expr','expr',3,'p_expr_bin3','parser.py',199), + ('expr -> expr leq expr','expr',3,'p_expr_bin3','parser.py',200), + ('expr -> complement expr','expr',2,'p_expr_unary','parser.py',210), + ('expr -> not expr','expr',2,'p_expr_unary','parser.py',211), + ('expr -> opar expr cpar','expr',3,'p_expr_par','parser.py',219), + ('expr -> id','expr',1,'p_expr_id','parser.py',223), + ('expr -> number','expr',1,'p_expr_int','parser.py',227), + ('expr -> string','expr',1,'p_expr_string','parser.py',231), + ('expr -> true','expr',1,'p_expr_boolean','parser.py',235), + ('expr -> false','expr',1,'p_expr_boolean','parser.py',236), + ('decl_list -> decl','decl_list',1,'p_decl_list','parser.py',243), + ('decl_list -> decl comma decl_list','decl_list',3,'p_decl_list','parser.py',244), + ('decl -> id colon type','decl',3,'p_decl','parser.py',251), + ('decl -> id colon type assignArrow expr','decl',5,'p_decl','parser.py',252), + ('case_list -> id colon type rArrow expr semi','case_list',6,'p_case_list','parser.py',260), + ('case_list -> id colon type rArrow expr semi case_list','case_list',7,'p_case_list','parser.py',261), +] diff --git a/src/pipeline.py b/src/pipeline.py new file mode 100644 index 000000000..79e637221 --- /dev/null +++ b/src/pipeline.py @@ -0,0 +1,46 @@ +from utils.semantic import Scope, Context +from visitors.Depicter import Depicter +from visitors.Collector import TypeCollector +from visitors.Builder import TypeBuilder +from visitors.Checker import TypeChecker +from visitors.CooltoCil import COOLToCILVisitor +from visitors.CiltoMips import CILToMipsVisitor + + +class Pipeline(): + def __init__(self, program, lexer, parser, verbose=False): + self.context: Context = Context() + self.scope: Scope = Scope() + self.program = program + self.parser = parser + self.lexer = lexer + self.ast = self.parser.parse(self.lexer, self.program) + self.errors = self.lexer.errors + self.parser.errors + + if len(self.errors) != 0: + return + + if self.ast is None: + return + + self.depicter = Depicter() + if verbose: + print(self.depicter.visit(self.ast, 0), '\n') + print() + + self.typeCollector = TypeCollector(self.context, self.errors) + self.typeCollector.visit(self.ast) + if len(self.errors) == 0: + self.typeBuilder = TypeBuilder(self.context, self.errors) + self.typeBuilder.visit(self.ast) + scope = Scope() + if len(self.errors) == 0: + self.typeChecker = TypeChecker(self.context, self.errors) + self.typeChecker.visit( self.ast, scope) + if len(self.errors) == 0: + self.coolToCil = COOLToCILVisitor(self.context) + cil_ast = self.coolToCil.visit(self.ast, scope) + + self.cilToMips = CILToMipsVisitor() + self.mipsCode = self.cilToMips.visit(cil_ast) + return diff --git a/src/utils/automata.py b/src/utils/automata.py new file mode 100755 index 000000000..9abb91665 --- /dev/null +++ b/src/utils/automata.py @@ -0,0 +1,511 @@ +try: + import pydot +except: + pass + + +class State: + def __init__(self, state, final=False, formatter=lambda x: str(x), shape='circle'): + self.state = state + self.final = final + self.transitions = {} + self.epsilon_transitions = set() + self.tag = None + self.formatter = formatter + self.shape = shape + + # The method name is set this way from compatibility issues. + def set_formatter(self, value, attr='formatter', visited=None): + if visited is None: + visited = set() + elif self in visited: + return + + visited.add(self) + self.__setattr__(attr, value) + for destinations in self.transitions.values(): + for node in destinations: + node.set_formatter(value, attr, visited) + for node in self.epsilon_transitions: + node.set_formatter(value, attr, visited) + return self + + def has_transition(self, symbol): + return symbol in self.transitions + + def add_transition(self, symbol, state): + try: + self.transitions[symbol].append(state) + except: + self.transitions[symbol] = [state] + return self + + def add_epsilon_transition(self, state): + self.epsilon_transitions.add(state) + return self + + def recognize(self, string): + states = self.epsilon_closure + for symbol in string: + states = self.move_by_state(symbol, *states) + states = self.epsilon_closure_by_state(*states) + return any(s.final for s in states) + + def to_deterministic(self, formatter=lambda x: str(x)): + closure = self.epsilon_closure + start = State(tuple(closure), any(s.final for s in closure), formatter) + + closures = [closure] + states = [start] + pending = [start] + + while pending: + state = pending.pop() + symbols = {symbol for s in state.state for symbol in s.transitions} + + for symbol in symbols: + move = self.move_by_state(symbol, *state.state) + closure = self.epsilon_closure_by_state(*move) + + if closure not in closures: + new_state = State(tuple(closure), any(s.final for s in closure), formatter) + closures.append(closure) + states.append(new_state) + pending.append(new_state) + else: + index = closures.index(closure) + new_state = states[index] + + state.add_transition(symbol, new_state) + + return start + + @staticmethod + def from_nfa(nfa, get_states=False): + states = [] + for n in range(nfa.states): + state = State(n, n in nfa.finals) + states.append(state) + + for (origin, symbol), destinations in nfa.map.items(): + origin = states[origin] + origin[symbol] = [states[d] for d in destinations] + + if get_states: + return states[nfa.start], states + return states[nfa.start] + + @staticmethod + def move_by_state(symbol, *states): + return {s for state in states if state.has_transition(symbol) for s in state[symbol]} + + @staticmethod + def epsilon_closure_by_state(*states): + closure = {state for state in states} + + l = 0 + while l != len(closure): + l = len(closure) + tmp = [s for s in closure] + for s in tmp: + for epsilon_state in s.epsilon_transitions: + closure.add(epsilon_state) + return closure + + @property + def epsilon_closure(self): + return self.epsilon_closure_by_state(self) + + @property + def name(self): + return self.formatter(self.state) + + def get(self, symbol): + target = self.transitions[symbol] + assert len(target) == 1 + return target[0] + + def __getitem__(self, symbol): + if symbol == '': + return self.epsilon_transitions + try: + return self.transitions[symbol] + except KeyError: + return None + + def __setitem__(self, symbol, value): + if symbol == '': + self.epsilon_transitions = value + else: + self.transitions[symbol] = value + + def __repr__(self): + return str(self) + + def __str__(self): + return str(self.state) + + def __hash__(self): + return hash(self.state) + + def __iter__(self): + yield from self._visit() + + def _visit(self, visited=None): + if visited is None: + visited = set() + elif self in visited: + return + + visited.add(self) + yield self + + for destinations in self.transitions.values(): + for node in destinations: + yield from node._visit(visited) + for node in self.epsilon_transitions: + yield from node._visit(visited) + + def graph(self): + G = pydot.Dot(rankdir='LR', margin=0.1) + G.add_node(pydot.Node('start', shape='plaintext', label='', width=0, height=0)) + + visited = set() + + def visit(start): + ids = id(start) + if ids not in visited: + visited.add(ids) + G.add_node(pydot.Node(ids, label=start.name, shape=self.shape, style='bold' if start.final else '')) + for tran, destinations in start.transitions.items(): + for end in destinations: + visit(end) + G.add_edge(pydot.Edge(ids, id(end), label=tran, labeldistance=2)) + for end in start.epsilon_transitions: + visit(end) + G.add_edge(pydot.Edge(ids, id(end), label='ε', labeldistance=2)) + + visit(self) + G.add_edge(pydot.Edge('start', id(self), label='', style='dashed')) + + return G + + def _repr_svg_(self): + try: + return self.graph().create_svg().decode('utf8') + except: + pass + + # def write_to(self, fname): + # return self.graph().write_svg(fname) + + +def multiline_formatter(state): + return '\n'.join(str(item) for item in state) + + +def lr0_formatter(state): + try: + return '\n'.join(str(item)[:-1] for item in state) + except TypeError: + return str(state)[:-1] # this used to be -4 + + +import pydot +from tools.utils import ContainerSet, DisjointSet + + +class NFA: + def __init__(self, states, finals, transitions, start=0): + self.states = states + self.start = start + self.finals = set(finals) + self.map = transitions + self.vocabulary = set() + self.transitions = {state: {} for state in range(states)} + + for (origin, symbol), destinations in transitions.items(): + assert hasattr(destinations, '__iter__'), 'Invalid collection of states' + self.transitions[origin][symbol] = destinations + self.vocabulary.add(symbol) + + self.vocabulary.discard('') + + def epsilon_transitions(self, state): + assert state in self.transitions, 'Invalid state' + try: + return self.transitions[state][''] + except KeyError: + return () + + def graph(self): + G = pydot.Dot(rankdir='LR', margin=0.1) + G.add_node(pydot.Node('start', shape='plaintext', label='', width=0, height=0)) + + for (start, tran), destinations in self.map.items(): + tran = 'ε' if tran == '' else tran + G.add_node(pydot.Node(start, shape='circle', style='bold' if start in self.finals else '')) + for end in destinations: + G.add_node(pydot.Node(end, shape='circle', style='bold' if end in self.finals else '')) + G.add_edge(pydot.Edge(start, end, label=tran, labeldistance=2)) + + G.add_edge(pydot.Edge('start', self.start, label='', style='dashed')) + return G + + def _repr_svg_(self): + try: + return self.graph().create_svg().decode('utf8') + except: + pass + + +class DFA(NFA): + + def __init__(self, states, finals, transitions, start=0): + assert all(isinstance(value, int) for value in transitions.values()) + assert all(len(symbol) > 0 for origin, symbol in transitions) + + transitions = {key: [value] for key, value in transitions.items()} + NFA.__init__(self, states, finals, transitions, start) + self.current = start + + def _move(self, symbol): + try: + self.current = self.transitions[self.current[0]][symbol] + return True + except KeyError: + return False + + def _reset(self): + self.current = self.start + + def recognize(self, string): + self.current = [self.current] + for char in string: + if not self._move(char): + self._reset() + return False + tmp = self.current[0] + self._reset() + return tmp in self.finals + + +def move(automaton, states, symbol): + moves = set() + for state in states: + try: + for new_state in automaton.transitions[state][symbol]: + moves.add(new_state) + except KeyError: + pass + return moves + + +def epsilon_closure(automaton, states): + pending = [s for s in states] + closure = {s for s in states} + + while pending: + state = pending.pop() + # Your code here + for new_state in automaton.epsilon_transitions(state): + closure.add(new_state) + pending.append(new_state) + + return ContainerSet(*closure) + + +def nfa_to_dfa(automaton): + transitions = {} + + start = epsilon_closure(automaton, [automaton.start]) + start.id = 0 + start.is_final = any(s in automaton.finals for s in start) + states = [start] + + pending = [start] + while pending: + state = pending.pop() + + for symbol in automaton.vocabulary: + goto = move(automaton, state, symbol) + new_state = epsilon_closure(automaton, goto) + if len(new_state) == 0: + continue + new_state.is_final = any(s in automaton.finals for s in new_state) + + try: + transitions[state.id, symbol] + assert False, 'Invalid DFA!!!' + except KeyError: + # Your code here + new_id = 0 + for i, item in enumerate(states, 0): + if item.set.issubset(new_state.set) and new_state.set.issubset(item.set): + new_state.id = item.id + new_id = item.id + break + else: + new_state.id = i + 1 + pending.append(new_state) + states.append(new_state) + new_id = i + 1 + + transitions[state.id, symbol] = new_id + + finals = [state.id for state in states if state.is_final] + dfa = DFA(len(states), finals, transitions) + return dfa + + +def automata_union(a1, a2): + transitions = {} + + start = 0 + d1 = 1 + d2 = a1.states + d1 + final = a2.states + d2 + + for (origin, symbol), destinations in a1.map.items(): + transitions[origin + d1, symbol] = [i + d1 for i in destinations] + + for (origin, symbol), destinations in a2.map.items(): + transitions[origin + d2, symbol] = [i + d2 for i in destinations] + + transitions[start, ''] = [d1, d2] + + for final_a1 in a1.finals: + transitions[final_a1 + d1, ''] = [final] + for final_a2 in a2.finals: + transitions[final_a2 + d2, ''] = [final] + + states = a1.states + a2.states + 2 + finals = {final} + + return NFA(states, finals, transitions, start) + + +def automata_concatenation(a1, a2): + transitions = {} + + start = 0 + d1 = 0 + d2 = a1.states + d1 + final = a2.states + d2 + + for (origin, symbol), destinations in a1.map.items(): + transitions[origin, symbol] = destinations + + for (origin, symbol), destinations in a2.map.items(): + transitions[origin + d2, symbol] = [i + d2 for i in destinations] + + for final_a1 in a1.finals: + transitions[final_a1, ''] = [d2] + for final_a2 in a2.finals: + transitions[final_a2 + d2, ''] = [final] + + states = a1.states + a2.states + 1 + finals = {final} + + return NFA(states, finals, transitions, start) + + +def automata_closure(a1): + transitions = {} + + start = 0 + d1 = 1 + final = a1.states + d1 + + for (origin, symbol), destinations in a1.map.items(): + transitions[origin + d1, symbol] = {d + d1 for d in destinations} + transitions[start, ''] = [a1.start + d1, final] + + for f in a1.finals: + try: + X = transitions[f + d1, ''] + except KeyError: + X = transitions[f + d1, ''] = set() + X.add(final) + X.add(a1.start + d1) + J = a1.states + 2 + S = {final} + return NFA(J, S, transitions, start) + + +def distinguish_states(group, automaton, partition): + split = {} + vocabulary = tuple(automaton.vocabulary) + + transition = automaton.transitions + + for member in group: + for item in split.keys(): + for symbol in vocabulary: + q1 = None + q2 = None + try: + q1 = partition[transition[item][symbol][0]].representative + except KeyError: + q1 = None + try: + q2 = partition[transition[member.value][symbol][0]].representative + except KeyError: + q2 = None + if q1 != q2: + break + else: + split[item].append(member.value) + break + else: + split[member.value] = [member.value] + + return [group for group in split.values()] + + +def state_minimization(automaton): + partition = DisjointSet(*range(automaton.states)) + + finals = list(automaton.finals) + non_finals = [state for state in range(automaton.states) if not state in automaton.finals] + partition.merge(finals) + partition.merge(non_finals) + + while True: + new_partition = DisjointSet(*range(automaton.states)) + + for group in partition.groups: + new_groups = distinguish_states(group, automaton, partition) + for new_group in new_groups: + new_partition.merge(new_group) + + if len(new_partition) == len(partition): + break + + partition = new_partition + + return partition + + +def automata_minimization(automaton): + partition = state_minimization(automaton) + + states = [s for s in partition.representatives] + + transitions = {} + for i, state in enumerate(states): + origin = state.value + for symbol, destinations in automaton.transitions[origin].items(): + new_dest = states.index(partition[destinations[0]].representative) + + try: + transitions[i, symbol] + assert False + except KeyError: + transitions[i, symbol] = new_dest + pass + + start = states.index(partition[automaton.start].representative) + finals = set([i for i in range(len(states)) if states[i].value in automaton.finals]) + + return DFA(len(states), finals, transitions, start) diff --git a/src/utils/digraph.py b/src/utils/digraph.py new file mode 100755 index 000000000..8675a2ee3 --- /dev/null +++ b/src/utils/digraph.py @@ -0,0 +1,102 @@ +class DNode: + def setType(self, typex): + pass + +class PrimeNode(DNode): + def __init__(self, typex): + self.type = typex + + def setType(self, new_type): + self.type = new_type + +class AttrNode(DNode): + def __init__(self, typex, attr): + self.type = typex + self.attribute = attr + + def setType(self, new_type): + self.type = new_type + self.attribute.type = new_type + +class ParamNode(DNode): + def __init__(self, typex, method, i): + self.type = typex + self.index = i + self.method = method + + def setType(self, typex): + self.type = typex + self.method.param_types[self.index] = typex + +class RTypeNode(DNode): + def __init__(self, typex, method): + self.type = typex + self.method = method + + def setType(self, typex): + self.type = typex + self.method.return_type = typex + +class VarNode(DNode): #do not confundir con VariableNode de semantic.py + def __init__(self, typex, varInfo): + self.type = typex + self.varInfo = varInfo + + def setType(self, typex): + self.type = typex + self.varInfo.type = typex + +class DGraph: + def __init__(self): + self.dependencies = {} + + def CreateNode(self, node): + if node not in self.dependencies: + self.dependencies[node] = [] + + def AddEdge(self,fromNode, toNode): + try: + self.dependencies[fromNode].append(toNode) + except: + self.dependencies[fromNode] = [toNode] + + self.CreateNode(toNode) + + def Build(self, objectType): + # pending = [v for v in self.dependencies.keys() if isinstance(v,PrimeNode)] + pending = [ ] + for v in self.dependencies.keys(): + if isinstance(v, PrimeNode): + pending.append(v) + + visited = set() + + while pending: + n = pending[0] + pending = pending[1:len(pending)] + + if n in visited: + continue + + self.UpdateNode(n,visited) + + for m in self.dependencies: + if m not in visited: + m.setType(objectType) #object pacasa'e domingo + + def UpdateNode(self, node, visited): + # pending = [node] + self.dependencies[node] + pending = [ node ] + pending.extend(self.dependencies[node]) + + t = node.type + while pending: + n = pending[0] + pending = pending[1:len(pending)] + + if n in visited: + continue + + n.setType(t) + visited.add(n) + pending.extend(self.dependencies[n]) \ No newline at end of file diff --git a/src/utils/errors.py b/src/utils/errors.py new file mode 100644 index 000000000..a2bffc937 --- /dev/null +++ b/src/utils/errors.py @@ -0,0 +1,6 @@ +_LexicographicError = '(%d,%d) - LexicographicError: ERROR "%s"' +_SyntacticError = '(%d, %d) - SyntacticError: ERROR at or near "%s"' +_TypeError = '(%d, %d) - TypeError: %s' +_NameError = '(%d, %d) - NameError: %s' +_SemanticError = '(%d, %d) - SemanticError: %s' +_AtributeError = '(%d, %d) - AttributeError: %s' \ No newline at end of file diff --git a/src/utils/exceptions.py b/src/utils/exceptions.py new file mode 100755 index 000000000..68ddca147 --- /dev/null +++ b/src/utils/exceptions.py @@ -0,0 +1,5 @@ +class ParsingException(Exception): + pass + +class RuntimeException(Exception): + pass \ No newline at end of file diff --git a/src/utils/first_follows.py b/src/utils/first_follows.py new file mode 100755 index 000000000..70a9a5100 --- /dev/null +++ b/src/utils/first_follows.py @@ -0,0 +1,105 @@ +from itertools import islice +from tools.utils import ContainerSet + +def compute_local_first(firsts, alpha): + first_alpha = ContainerSet() + + try: + alpha_is_epsilon = alpha.IsEpsilon + except: + alpha_is_epsilon = False + + if alpha_is_epsilon: + first_alpha.set_epsilon() + else: + for x in alpha: + symbol_first = firsts[x] + + first_alpha.update(symbol_first) + + if not symbol_first.contains_epsilon: + break + else: + first_alpha.set_epsilon() + + # First(alpha) + return first_alpha + +def compute_firsts(G): + firsts = {} + change = True + + # init First(Vt) + for terminal in G.terminals: + firsts[terminal] = ContainerSet(terminal) + + # init First(Vn) + for nonterminal in G.nonTerminals: + firsts[nonterminal] = ContainerSet() + + while change: + change = False + + # P: x -> alpha + for production in G.Productions: + x = production.Left + alpha = production.Right + + # get current First(x) + first_x = firsts[x] + + # init First(alpha) + try: + first_alpha = firsts[alpha] + except KeyError: + first_alpha = firsts[alpha] = ContainerSet() + + # CurrentFirst(alpha)??? + local_first = compute_local_first(firsts, alpha) + + # update First(x) and First(alpha) from CurrentFirst(alpha) + change |= first_alpha.hard_update(local_first) + change |= first_x.hard_update(local_first) + + # First(Vt) + First(Vt) + First(RightSides) + return firsts + +def compute_follows(G, firsts): + follows = {} + change = True + + local_firsts = {} + + # init Follow(Vn) + for nonterminal in G.nonTerminals: + follows[nonterminal] = ContainerSet() + follows[G.startSymbol] = ContainerSet(G.EOF) + + while change: + change = False + + # P: X -> alpha + for production in G.Productions: + x = production.Left + alpha = production.Right + + follow_x = follows[x] + + for i, Y in enumerate(alpha): + + if not Y.IsTerminal: + + follow_y = follows[Y] + + try: + first_beta = local_firsts[alpha, i] + except KeyError: + first_beta = local_firsts[alpha, i] = compute_local_first(firsts, islice(alpha, i + 1, None)) + + change |= follow_y.update(first_beta) + + if i == len(alpha) - 1 or first_beta.contains_epsilon: + change |= follow_y.update(follow_x) + + # Follow(Vn) + return follows diff --git a/src/utils/mip_utils.py b/src/utils/mip_utils.py new file mode 100644 index 000000000..26fbf9b7d --- /dev/null +++ b/src/utils/mip_utils.py @@ -0,0 +1,176 @@ +#registers +class registers: + + zero = '$zero' # constant 0 + + # arguments 1, 2, 3, 4 + a0 = '$a0' + a1 = '$a1' + a2 = '$a2' + a3 = '$a3' + + # expression evaluation and result of a function + v0 = '$v0' + v1 = '$v1' + + # saved temporary (preserved across call) + s0 = '$s0' + s1 = '$s1' + s2 = '$s2' + s3 = '$s3' + s4 = '$s4' + s5 = '$s5' + s6 = '$s6' + s7 = '$s7' + + # temporary (not preserved across call) + t0 = '$t0' + t1 = '$t1' + t2 = '$t2' + t3 = '$t3' + t4 = '$t4' + t5 = '$t5' + t6 = '$t6' + t7 = '$t7' + t8 = '$t8' + t9 = '$t9' + + gp = '$gp' # pointer to global area + sp = '$sp' # stack pointer + fp = '$fp' # frame pointer + ra = '$ra' # return address + +#operations +class operations: + + la = 'la' # la rdest, address -> load computed address (not the content of the location) into rdest + lb = 'lb' # lb rt, address -> load the byte at address into rt + lbu = 'lbu' # lbu rt, address -> lb unsigned + lh = 'lh' # lh rt, address -> load the 16-bit quantity (halfword) at address into rt + lhu = 'lhu' # lhu rt, address -> lh unsigned + lw = 'lw' # lw rt, address -> load the word at address into rt + lwcz = 'lwcz' # lwcz rt, address -> load the word at address into rt of coprocessor z (0-3) + lwl = 'lwl' # lwl rt, address -> load the left bytes from the word at the possibly unaligned address into rt + lwr = 'lwr' # lwr rt, address -> load the right bytes from the word at the possibly unaligned address into rt + ld = 'ld' # ld rdest, address -> load the 64-bit quantity at address into rdest and rdest + 1 + ulh = 'ulh' # ulh rdest, address -> load the 16-bit quantity (halfword) at the possibly unaligned address into rdest + ulhu = 'ulhu' # ulhu rdest, address -> ulh unsigned + ulw = 'ulw' # ulw rdest, address -> load the 32-bit quantity (word) at the possibly unaligned address into rdest + sb = 'sb' # sb rt, address -> store the low byte from rt at address + sh = 'sh' # sh rt, address -> store the low halfword from rt at address + sw = 'sw' # sw rt, address -> store the word from rt at address + swcz = 'swcz' # swcz rt, address -> store the word from rt of coprocessor z at address + swl = 'swl' # swl rt, address -> store the left bytes from rt at the possibly unaligned address + swr = 'swr' # swr rt, address -> store the right bytes from rt at the possibly unaligned address + sd = 'sd' # sd rsrc, address -> store the 64-bit quantity in registers rsrc and rsrc + 1 at address + ush = 'ush' # ush rsrc, address -> stores the low halfword from rsrc at the possibly unaligned address + usw = 'usw' # usw rsrc, address -> stores the word from rsrc at the possibly unaligned address + + abs = 'abs' # abs rdest, rsrc -> put absolute value of rsrc into rdest + add = 'add' # add rd, rs, rt -> put sum of rs and rt into rd (with overflow) + addu = 'addu' # addu rd, rs, rt -> add without overflow + addi = 'addi' # add rt, rs, imm -> put the sum of rs and sign-extended imm into rt (with overflow) + addiu = 'addiu' # add rt, rs, imm -> addi without overflow + and_bw = 'and' # and rd, rs, rt -> put the logical AND of rs and rt into rd + andi = 'andi' # andi rt, rs, imm -> put the logical AND of rs and the zero-extended imm into rt + div = 'div' # div rs, rt -> divide rs by rt. leaves quotient in register lo and reminder in register hi (with overflow) + divu = 'divu' # divu rdest, rsrc1, src2 -> put the quotient of register rsrc1 and src2 into rdest (without overflow) + mult = 'mult' # mult rs, rt -> multiply rs and rt. leaves the low-order word in lo and high-order word in hi + multu = 'multu' # multu rs, rt -> multiply rs and rt. leaves the low-order word in lo and high-order word in hi (unsigned) + mul = 'mul' # mul rdest, rsrc1, src2 -> put the product of the register rsrc1 and src2 into rdest (without overflow) + mulo = 'mulo' # mul rdest, rsrc1, src2 -> mul with overflow + mulou = 'mulou' # mul rdest, rsrc1, src2 -> mulo unsigned + mulu = 'mulu' # + neg = 'neg' # neg rdest, rsrc -> put the negative of register rsrc into rdest (with overflow) + negu = 'negu' # negu rdest, rsrc -> neg without overflow + nor = 'nor' # nor rd, rs, rt -> put the logical NOR of registers rs and rt into register rd + not_bw = 'not' # not rdest, rsrc -> put the bitwise logical negation of the register rsrc into register rdest + or_bw = 'or' # or rd, rs, rt -> put the logical OR of registers rs and rt into register rd revisar + ori = 'ori' # ori rt, rs, imm -> put the logical OR of register rs and the zero-extended imm into register rt + rem = 'rem' # rem rdest, rsrc1, rsrc2 -> put the reminder of divide rsrc1 and rsrc2 into rdest + remu = 'remu' # remu rdest, rsrc1, rsrc2 -> put the reminder of divide rsrc1 and rsrc2 int rdest (unsigned) + sll = 'sll' # sll rd, rt, shamt -> shift register rt left by the distance indicated by shamt and put result in rd + sllv = 'sllv' # sllv rd, rt, rs -> shift register rt left by the distance indicated by rs and put result in rd + sra = 'sra' # sra rd, rt, shamt -> shift register rt right by the distance indicated by shamt and put result in rd + srav = 'srav' # srav rd, rt, rs -> shift register rt right by the distance indicated by rs and put result in rd + srl = 'srl' # srl rd, rt, shamt -> shift register rt right by the distance indicated by shamt and put result in rd + srlv = 'srlv' # srlv rd, rt, rs -> shift register rt right by the distance indicated by rs and put result in rd + rol = 'rol' # rol rdest, rsrc1, rsrc2 -> rotate register rsrc1 left by the distance rsrc2 and put the result in rdest + ror = 'ror' # ror rdest, rsrc1, rsrc2 -> rotate register rsrc1 right by the distance rsrc2 and put the result in rdest + sub = 'sub' # sub rd, rs, rt -> put the difference of registers rs and rt into register rd (with overflow) + subu = 'subu' # subu rd, rs, rt -> sub without overflow + xor = 'xor' # xor rd, rs, rt -> put the logical XOR of registers rs and rt into register rd + xori = 'xori' # xor rt, rs, imm -> put the logical XOR of register rs and the zero-extended imm into register rt + + lui = 'lui' # lui rt, imm -> load the lower halfword of imm into the upper halfword of rt, the lower bits of rt are set to 0 + li = 'li' # li rdest, imm -> move the imm into the register rdest + lid = 'li.d' + lis = 'li.s' + + slt = 'slt' # slt rd, rs, rt -> set rd to 1 if rs is less than rt, and to 0 otherwise + sltu = 'sltu' # sltu rd, rs, rt -> slt unsigned + slti = 'slti' # slt rd, rs, imm -> set rd to 1 if rs is less than the signed-extended imm, and to 0 otherwise + sltiu = 'sltiu' # sltiu rd, rs, imm -> slti unsigned + seq = 'seq' # seq rdest, rsrc1, rsrc2 -> set rdest to 1 if rsrc1 equals to rsrc2, 0 otherwise + sge = 'sge' # sge rdest, rsrc1, rsrc2 -> set rdest to 1 if rsrc1 greater than or equals to rsrc2, 0 otherwise + sgeu = 'sgeu' # sgeu rdest, rsrc1, rsrc2 -> sge unsigned + sgt = 'sgt' # sgt rdest, rsrc1, rsrc2 -> set rdest to 1 if rsrc1 greater than to rsrc2, 0 otherwise + sgtu = 'sgtu' # sgtu rdest, rsrc1, rsrc2 -> sgt unsigned + sle = 'sle' # sle rdest, rsrc1, rsrc2 -> set rdest to 1 if rsrc1 less than or equal to rsrc2, 0 otherwise + sleu = 'sleu' # sleu rdest, rsrc1, rsrc2 -> sle unsigned + sne = 'sne' # sne rdest, rsrc1, rsrc2 -> set rdest to 1 if rsrc1 not equal to rsrc2, 0 otherwise + + b = 'b' # b label -> unconditionally branch to the instruction at the label + bczt = 'bczt' # bczt offset -> conditionally branch the number of instructions specified by the offset if z's condition flag is true. z is 0, 1, 2, or 3. + bczf = 'bczf' # bczf offset -> conditionally branch the number of instructions specified by the offset if z's condition flag is false. z is 0, 1, 2, or 3. + beq = 'beq' # beq rs, rt, offset -> conditionally branch the number of instructions specified by the offset if rs is equal rt + bgez = 'bgez' # bgez rs, offset -> conditionally branch the number of instructions specified by the offset if rs is greater than or equal to 0 + bgezal = 'bgezal' # bgezal rs, offset -> conditionally branch the number of instructions specified by the offset if rs is greater than or equal to 0. save the address of next instruction in register 31 + bgtz = 'bgtz' # bgtz rs, offset -> conditionally branch the number of instructions specified by the offset if rs is greater than 0 + blez = 'blez' # blez rs, offset -> conditionally branch the number of instructions specified by the offset if rs is less than or equal to 0 + bltzal = 'bltzal' # bltzal rs, offset -> conditionally branch the number of instructions specified by the offset if rs is less than 0. save the address of next instruction in register 31 + bltz = 'bltz' # bltz rs, offset -> conditionally branch the number of instructions specified by the offset if rs is less than 0 + bne = 'bne' # bne rs, rt, offset -> conditionally branch the number of instructions specified by the offset if rs is not equal to rt + + beqz = 'beqz' # beqz rsrc, label -> conditionally branch to the label if rsrc equals to 0 + bge = 'bge' # bge rsrc1, rsrc2, label -> conditionally branch to the label if rsrc1 is greater than or equal to rsrc2 + bgeu = 'bgeu' # bgeu rsrc1, rsrc2, label -> bge unsigned + bgt = 'bgt' # bgt rsrc1, rsrc2, label -> conditionally branch to the label if rsrc1 is greater than rsrc2 + bgtu = 'bgtu' # bgtu rsrc1, rsrc2, label -> bgt unsigned + ble = 'ble' # ble rsrc1, rsrc2, label -> conditionally branch to the label if rsrc1 is less than or equal to rsrc2 + bleu = 'bleu' # bleu rsrc1, rsrc2, label -> ble unsigned + blt = 'blt' # blt rsrc1, rsrc2, label -> conditionally branch to the label if rsrc1 is less than rsrc2 + bltu = 'bltu' # bltu rsrc1, rsrc2, label -> blt unsigned + bnez = 'bnez' # bnez rsrc, label -> conditionally branch to the label if rsrc1 is not equal to 0 + + j = 'j' # j target -> unconditionally jumps to target + jal = 'jal' # jal target, rd -> unconditionally jumps to target. Save the address of next instruction in rd + jalr = 'jalr' # jalr rs, rd -> unconditionally jumps to the instruction whose address is in rs. save the address of next instruction in rd (defaults is 31) + jr = 'jr' # jr rs-> unconditionally jumps to the instruction whose address is in rs. + + move = 'move' # move rdest, rsrc -> move rsrc to rdest + mfhi = 'mfhi' # mfhi rd -> move the hi register to rd + mflo = 'mflo' # mflo rd -> move the lo register to rd + mthi = 'mthi' # mthi rs -> move the rs register to hi + mtlo = 'mtlo' # mtlo rs -> move the rs register to lo + mfcz = 'mfcz' # mfcz rt, rd -> move coprocessor z's register rt to CPU register rt + mfc1d = 'mfc1.d' # mfc1.d rdest, frsrc1 -> move floating-point registers frsrc1 and frsrc1 + 1 to CPU registers rdest and rdest + 1 + mtcz = 'mtcz' # mtcz rd, rt -> move CPU register rt to coprocessor z's register rd + + rfe = 'rfe' # rfe -> restore the status register + syscall = 'syscall' # register $v0 contains the number of the system call provided by spim + brk = 'break' # break cause exception code. Exception 1 is reserved for the debugger + nop = 'nop' # nop -> do nothing :) + +#types +class datatype: + ascii = '.ascii' + asciiz = '.asciiz' + space = '.space' + align = '.align' + byte = '.byte' + word = '.word' + half = '.half' + double = '.double' + floatt = '.float' + diff --git a/src/utils/pycompile.py b/src/utils/pycompile.py new file mode 100755 index 000000000..8293c48f6 --- /dev/null +++ b/src/utils/pycompile.py @@ -0,0 +1,504 @@ +import json + + +class Symbol(object): + + def __init__(self, name, grammar): + self.Name = name + self.Grammar = grammar + + def __str__(self): + return self.Name + + def __repr__(self): + return repr(self.Name) + + def __add__(self, other): + if isinstance(other, Symbol): + return Sentence(self, other) + + raise TypeError(other) + + def __or__(self, other): + + if isinstance(other, (Sentence)): + return SentenceList(Sentence(self), other) + + raise TypeError(other) + + @property + def IsEpsilon(self): + return False + + def __len__(self): + return 1 + +class NonTerminal(Symbol): + + def __init__(self, name, grammar): + super().__init__(name, grammar) + self.productions = [] + + def __imod__(self, other): + + if isinstance(other, (Sentence)): + p = Production(self, other) + self.Grammar.Add_Production(p) + return self + + if isinstance(other, tuple): + assert len(other) > 1 + + if len(other) == 2: + other += (None,) * len(other[0]) + + assert len(other) == len( + other[0]) + 2, "Debe definirse una, y solo una, regla por cada símbolo de la producción" + # assert len(other) == 2, "Tiene que ser una Tupla de 2 elementos (sentence, attribute)" + + if isinstance(other[0], Symbol) or isinstance(other[0], Sentence): + p = AttributeProduction(self, other[0], other[1:]) + else: + raise Exception("") + + self.Grammar.Add_Production(p) + return self + + if isinstance(other, Symbol): + p = Production(self, Sentence(other)) + self.Grammar.Add_Production(p) + return self + + if isinstance(other, SentenceList): + + for s in other: + p = Production(self, s) + self.Grammar.Add_Production(p) + + return self + + raise TypeError(other) + + @property + def IsTerminal(self): + return False + + @property + def IsNonTerminal(self): + return True + + @property + def IsEpsilon(self): + return False + +class Terminal(Symbol): + + def __init__(self, name, grammar): + super().__init__(name, grammar) + + @property + def IsTerminal(self): + return True + + @property + def IsNonTerminal(self): + return False + + @property + def IsEpsilon(self): + return False + +class EOF(Terminal): + + def __init__(self, Grammar): + super().__init__('$', Grammar) + +class Sentence(object): + + def __init__(self, *args): + self._symbols = tuple(x for x in args if not x.IsEpsilon) + self.hash = hash(self._symbols) + + def __len__(self): + return len(self._symbols) + + def __add__(self, other): + if isinstance(other, Symbol): + return Sentence(*(self._symbols + (other,))) + + if isinstance(other, Sentence): + return Sentence(*(self._symbols + other._symbols)) + + raise TypeError(other) + + def __or__(self, other): + if isinstance(other, Sentence): + return SentenceList(self, other) + + if isinstance(other, Symbol): + return SentenceList(self, Sentence(other)) + + raise TypeError(other) + + def __repr__(self): + return str(self) + + def __str__(self): + return ("%s " * len(self._symbols) % tuple(self._symbols)).strip() + + def __iter__(self): + return iter(self._symbols) + + def __getitem__(self, index): + return self._symbols[index] + + def __eq__(self, other): + return self._symbols == other._symbols + + def __hash__(self): + return self.hash + + @property + def IsEpsilon(self): + return False + +class SentenceList(object): + + def __init__(self, *args): + self._sentences = list(args) + + def Add(self, symbol): + if not symbol and (symbol is None or not symbol.IsEpsilon): + raise ValueError(symbol) + + self._sentences.append(symbol) + + def __iter__(self): + return iter(self._sentences) + + def __or__(self, other): + if isinstance(other, Sentence): + self.Add(other) + return self + + if isinstance(other, Symbol): + return self | Sentence(other) + +class Epsilon(Terminal, Sentence): + + def __init__(self, grammar): + super().__init__('epsilon', grammar) + + def __str__(self): + return "e" + + def __repr__(self): + return 'epsilon' + + def __iter__(self): + yield from () + + def __len__(self): + return 0 + + def __add__(self, other): + return other + + def __eq__(self, other): + return isinstance(other, (Epsilon,)) + + def __hash__(self): + return hash("") + + @property + def IsEpsilon(self): + return True + +class Production(object): + + def __init__(self, nonTerminal, sentence): + self.Left = nonTerminal + self.Right = sentence + + def __str__(self): + return '%s := %s' % (self.Left, self.Right) + + def __repr__(self): + return '%s -> %s' % (self.Left, self.Right) + + def __iter__(self): + yield self.Left + yield self.Right + + def __eq__(self, other): + return isinstance(other, Production) and self.Left == other.Left and self.Right == other.Right + + def __hash__(self): + return hash((self.Left, self.Right)) + + @property + def IsEpsilon(self): + return self.Right.IsEpsilon + +class AttributeProduction(Production): + + def __init__(self, nonTerminal, sentence, attributes): + if not isinstance(sentence, Sentence) and isinstance(sentence, Symbol): + sentence = Sentence(sentence) + super(AttributeProduction, self).__init__(nonTerminal, sentence) + + self.attributes = attributes + + def __str__(self): + return '%s := %s' % (self.Left, self.Right) + + def __repr__(self): + return '%s -> %s' % (self.Left, self.Right) + + def __iter__(self): + yield self.Left + yield self.Right + + @property + def IsEpsilon(self): + return self.Right.IsEpsilon + + # sintetizar en ingles??????, pending aggrement + def syntetice(self): + pass + +class Grammar(): + + def __init__(self): + + self.Productions = [] + self.nonTerminals = [] + self.terminals = [] + self.startSymbol = None + # production type + self.pType = None + self.Epsilon = Epsilon(self) + self.EOF = EOF(self) + + self.symbDict = {'$': self.EOF} + + def NonTerminal(self, name, startSymbol=False): + + name = name.strip() + if not name: + raise Exception("Empty name") + + term = NonTerminal(name, self) + + if startSymbol: + + if self.startSymbol is None: + self.startSymbol = term + else: + raise Exception("Cannot define more than one start symbol.") + + self.nonTerminals.append(term) + self.symbDict[name] = term + return term + + def NonTerminals(self, names): + + ans = tuple((self.NonTerminal(x) for x in names.strip().split())) + + return ans + + def Add_Production(self, production): + + if len(self.Productions) == 0: + self.pType = type(production) + + # assert type(production) == self.pType, "The Productions most be of only 1 type." + + production.Left.productions.append(production) + self.Productions.append(production) + + def Terminal(self, name): + + name = name.strip() + if not name: + raise Exception("Empty name") + + term = Terminal(name, self) + self.terminals.append(term) + self.symbDict[name] = term + return term + + def Terminals(self, names): + + ans = tuple((self.Terminal(x) for x in names.strip().split())) + + return ans + + def __str__(self): + + mul = '%s, ' + + ans = 'Non-Terminals:\n\t' + + nonterminals = mul * (len(self.nonTerminals) - 1) + '%s\n' + + ans += nonterminals % tuple(self.nonTerminals) + + ans += 'Terminals:\n\t' + + terminals = mul * (len(self.terminals) - 1) + '%s\n' + + ans += terminals % tuple(self.terminals) + + ans += 'Productions:\n\t' + + ans += str(self.Productions) + + return ans + + def __getitem__(self, name): + try: + return self.symbDict[name] + except KeyError: + return None + + @property + def to_json(self): + + productions = [] + + for p in self.Productions: + head = p.Left.Name + + body = [] + + for s in p.Right: + body.append(s.Name) + + productions.append({'Head': head, 'Body': body}) + + d = {'NonTerminals': [symb.Name for symb in self.nonTerminals], + 'Terminals': [symb.Name for symb in self.terminals], \ + 'Productions': productions} + + # [{'Head':p.Left.Name, "Body": [s.Name for s in p.Right]} for p in self.Productions] + return json.dumps(d) + + @staticmethod + def from_json(data): + data = json.loads(data) + + G = Grammar() + dic = {'epsilon': G.Epsilon} + + for term in data['Terminals']: + dic[term] = G.Terminal(term) + + for noTerm in data['NonTerminals']: + dic[noTerm] = G.NonTerminal(noTerm) + + for p in data['Productions']: + head = p['Head'] + dic[head] %= Sentence(*[dic[term] for term in p['Body']]) + + return G + + def copy(self): + G = Grammar() + G.Productions = self.Productions.copy() + G.nonTerminals = self.nonTerminals.copy() + G.terminals = self.terminals.copy() + G.pType = self.pType + G.startSymbol = self.startSymbol + G.Epsilon = self.Epsilon + G.EOF = self.EOF + G.symbDict = self.symbDict.copy() + + return G + + @property + def IsAugmentedGrammar(self): + augmented = 0 + for left, right in self.Productions: + if self.startSymbol == left: + augmented += 1 + if augmented <= 1: + return True + else: + return False + + def AugmentedGrammar(self, force=False): + if not self.IsAugmentedGrammar or force: + + G = self.copy() + # S, self.startSymbol, SS = self.startSymbol, None, self.NonTerminal('S\'', True) + S = G.startSymbol + G.startSymbol = None + SS = G.NonTerminal('S\'', True) + if G.pType is AttributeProduction: + SS %= S + G.Epsilon, lambda x: x + else: + SS %= S + G.Epsilon + + return G + else: + return self.copy() + # endchange + +class Item: + + def __init__(self, production, pos, lookaheads=[]): + self.production = production + self.pos = pos + self.lookaheads = frozenset(look for look in lookaheads) + + def __str__(self): + s = str(self.production.Left) + " -> " + if len(self.production.Right) > 0: + for i, c in enumerate(self.production.Right): + if i == self.pos: + s += "." + s += str(self.production.Right[i]) + if self.pos == len(self.production.Right): + s += "." + else: + s += "." + s += ", " + str(self.lookaheads)[10:-1] + return s + + def __repr__(self): + return str(self) + + def __eq__(self, other): + return ( + (self.pos == other.pos) and + (self.production == other.production) and + (set(self.lookaheads) == set(other.lookaheads)) + ) + + def __hash__(self): + return hash((self.production, self.pos, self.lookaheads)) + + @property + def IsReduceItem(self): + return len(self.production.Right) == self.pos + + @property + def NextSymbol(self): + if self.pos < len(self.production.Right): + return self.production.Right[self.pos] + else: + return None + + def NextItem(self): + if self.pos < len(self.production.Right): + return Item(self.production, self.pos + 1, self.lookaheads) + else: + return None + + def Preview(self, skip=1): + unseen = self.production.Right[self.pos + skip:] + return [unseen + (lookahead,) for lookahead in self.lookaheads] + + def Center(self): + return Item(self.production, self.pos) diff --git a/src/utils/semantic.py b/src/utils/semantic.py new file mode 100755 index 000000000..e8af6836a --- /dev/null +++ b/src/utils/semantic.py @@ -0,0 +1,282 @@ +from enum import Enum, auto +from collections import OrderedDict +from typing import List, Optional, Dict, Tuple, Union + +class SemanticError(Exception): + @property + def text(self): + return self.args[0] + +class Attribute: + def __init__(self, name, typex): + self.name: str = name + self.type: 'Type' = typex + + def __str__(self): + return f'[attrib] {self.name} : {self.type.name};' + + def __repr__(self): + return str(self) + +class Method: + def __init__(self, name, param_names, params_types, return_type): + self.name: str = name + self.param_names: List[str] = param_names + self.param_types: List['Type'] = params_types + self.return_type: 'Type' = return_type + + def __str__(self): + params = ', '.join(f'{n}: {t.name}' for n, t in zip(self.param_names, self.param_types)) + return f'[method] {self.name}({params}): {self.return_type.name};' + + + def __eq__(self, other): + return other.name == self.name and \ + other.return_type == self.return_type and \ + other.param_types == self.param_types + + # def __eq__(self, other): + # return (other.name == self.name and + # other.return_type == self.return_type and + # tuple(other.param_types) == tuple(self.param_types)) + +class Type: + def __init__(self, name: str): + self.name: str = name + self.depth = 0 + self.attributes_dict: OrderedDict[str, Attribute] = OrderedDict() + self.methods_dict: OrderedDict[str, Method] = OrderedDict() + self.parent: Optional['Type'] = None + + @property + def attributes(self): + return [x for _, x in self.attributes_dict.items()] + + @property + def methods(self): + return [x for _, x in self.methods_dict.items()] + + def set_parent(self, parent: 'Type') -> None: + if self.parent is not None: + raise SemanticError(f'Parent type is already set for {self.name}.') + self.parent = parent + + def get_attribute(self, name: str, typex, visited , get_owner: bool = False) -> Union[Attribute, Tuple[Attribute, 'Type']]: + try: + return self.attributes_dict[name] if not get_owner else (self.attributes_dict[name], self) + except KeyError: + if typex.name == self.name: + if visited: + raise SemanticError(f'Attribute "{name}" is not defined in {self.name}.') + visited = True + if self.parent is None: + raise SemanticError(f'Attribute "{name}" is not defined in {self.name}.') + try: + return self.parent.get_attribute(name, typex, visited, get_owner) + except SemanticError: + # self.errors.append(_NameError % ()) + raise SemanticError(f'Attribute "{name}" is not defined in {self.name}.') + + def define_attribute(self, name: str, typex: 'Type') -> Attribute: + try: + self.get_attribute(name, self, False) + except SemanticError: + attribute = Attribute(name, typex) + self.attributes_dict[name] = attribute + return attribute + else: + raise SemanticError(f'Attribute "{name}" is already defined in {self.name}.') + + def contains_attribute(self, name: str) -> bool: + return name in self.attributes_dict or self.parent is not None and self.parent.contains_attribute(name) + + def get_method(self, name: str, typex, visited, get_owner: bool = False) -> Union[Method, Tuple[Method, 'Type']]: + try: + return self.methods_dict[name] if not get_owner else (self.methods_dict[name], self) + except KeyError: + if typex is not None and self.name == typex.name: + if visited: + raise SemanticError(f'Method {name} is not defined in {self.name}.') + visited = True + try: + return self.parent.get_method(name, typex, visited, get_owner) + except SemanticError: + raise SemanticError(f'Attribute {name} is not defined in {self.name}.') + if self.parent is None: + raise SemanticError(f'Method "{name}" is not defined in {self.name}.') + try: + return self.parent.get_method(name, typex, visited, get_owner) + except SemanticError: + raise SemanticError(f'Method "{name}" is not defined in {self.name}.') + + def define_method(self, name: str, + param_names: List[str], + param_types: List['Type'], + return_type: 'Type') -> Method: + if name in self.methods_dict: + raise SemanticError(f'Method "{name}" already defined in {self.name}') + + method = Method(name, param_names, param_types, return_type) + self.methods_dict[name] = method + return method + + def contains_method(self, name) -> bool: + return name in self.methods_dict or (self.parent is not None and self.parent.contains_method(name)) + + def all_attributes(self) -> List[Tuple[Attribute, 'Type']]: + attributes = [] if self.parent is None else self.parent.all_attributes() + attributes += [(x, self) for x in self.attributes] + return attributes + + def all_methods(self) -> List[Tuple[Method, 'Type']]: + methods = [] if self.parent is None else self.parent.all_methods() + methods += [(x, self) for x in self.methods] + return methods + + def conforms_to(self, other: 'Type') -> bool: + return other.bypass() or self == other or self.parent is not None and self.parent.conforms_to(other) + + def join(self, other: 'Type') -> 'Type': + self_ancestors = set(self.get_ancestors()) + + current_type = other + while current_type is not None: + if current_type in self_ancestors: + break + current_type = current_type.parent + return current_type + + @staticmethod + def multi_join(types: List['Type']) -> 'Type': + static_type = types[0] + for t in types[1:]: + static_type = static_type.join(t) + return static_type + + def bypass(self) -> bool: + return False + + def get_ancestors(self): + if self.parent is None: + return [self] + return [self] + self.parent.get_ancestors() + + def __str__(self): + output = f'type {self.name}' + parent = '' if self.parent is None else f' : {self.parent.name}' + output += parent + output += ' {' + output += '\n\t' if self.attributes or self.methods else '' + output += '\n\t'.join(str(x) for x in self.attributes) + output += '\n\t' if self.attributes_dict else '' + output += '\n\t'.join(str(x) for x in self.methods) + output += '\n' if self.methods_dict else '' + output += '}\n' + return output + + def __repr__(self): + return str(self) + +class ErrorType(Type): + def __init__(self): + super().__init__('Error') + + def conforms_to(self, other): + return True + + def bypass(self): + return True + + def __eq__(self, other): + return isinstance(other, Type) + +class Context: + def __init__(self): + self.types: Dict[str, Type] = {} + + def create_type(self, name: str) -> Type: + if name in self.types: + raise SemanticError(f'Type with the same name ({name}) already in context.') + typex = self.types[name] = Type(name) + return typex + + def get_type(self, name: str) -> Type: + try: + return self.types[name] + except KeyError: + raise SemanticError(f'Type "{name}" is not defined.') + + def type_offsprings(self, name : str): + type = self.get_type(name) + conforming = [] + for t in self.types: + tt = self.types[t] + if tt.conforms_to(type): + conforming.append(tt) + return conforming + + def __str__(self): + return '{\n\t' + '\n\t'.join(y for x in self.types.values() for y in str(x).split('\n')) + '\n}' + + def __repr__(self): + return str(self) + + def __iter__(self): + return iter(self.types.values()) + +class VariableInfo: + def __init__(self, name, vtype): + self.name: str = name + self.type: Type = vtype + +class FunctionInfo: + def __init__(self, name, params): + self.name = name + self.params = params + +from random import randint +count = 0 +class Scope: + def __init__(self, parent: Optional['Scope'] = None): + global count + self.locals: Dict[str, VariableInfo] = {} + self.parent: Optional['Scope'] = parent + self.children: List[Scope] = [] + # self.id = randint(1,1000) + self.id = count + count+=1 + + def create_child(self) -> 'Scope': + child = Scope(self) + self.children.append(child) + return child + + def define_variable(self, vname: str, vtype: Type) -> VariableInfo: + info = VariableInfo(vname, vtype) + self.locals[vname] = info + return info + + # def find_variable(self, vname: str) -> Optional[VariableInfo]: + # try: + # return self.locals[vname] + # except KeyError: + # return self.parent.find_variable(vname) if self.parent is not None else None + + def find_variable(self, vname : str): + try: + return self.locals[vname] + except KeyError: + return self.parent.find_variable(vname) if self.parent is not None else None + + + def is_defined(self, vname) -> bool: + return self.find_variable(vname) is not None + + def is_local(self, vname: str) -> bool: + return vname in self.locals + + def clear(self): + self.children = [] + + def __len__(self): + return len(self.locals) \ No newline at end of file diff --git a/src/utils/serialize.py b/src/utils/serialize.py new file mode 100755 index 000000000..157fc39fb --- /dev/null +++ b/src/utils/serialize.py @@ -0,0 +1,41 @@ +import dill +from lexer.lexer import Lexer +from parsers.parser_lr1 import LR1Parser + +class DillLexer: + def __init__(self): + self.regEx = None + self.eof = None + self.lexer = None + + def Create(self, regEx, eof): + self.regEx = regEx + self.eof = eof + self.lexer = Lexer(self.regEx, self.eof) + + def Save(self): + with open('./serializedLexer', 'wb') as _lexer: + dill.dump(self.lexer, _lexer) + + def Load(self): + with open('./serializedLexer', 'rb') as _lexer: + self.lexer = dill.load(_lexer) + return self.lexer + +class DillParser: + def __init__(self): + self.Grammar = None + self.Parser = None + + def Create(self, grammar): + self.Grammar = grammar + self.Parser = LR1Parser(self.Grammar) + + def Save(self): + with open('./serializedParser', 'wb') as _parser: + dill.dump(self.Parser, _parser) + + def Load(self): + with open('./serializedParser', 'rb') as _parser: + self.Parser = dill.load(_parser) + return self.Parser \ No newline at end of file diff --git a/src/utils/utils.py b/src/utils/utils.py new file mode 100755 index 000000000..657710df1 --- /dev/null +++ b/src/utils/utils.py @@ -0,0 +1,258 @@ +from tools.pycompile import Production, Sentence, Symbol, EOF, Epsilon + +class TrieNode: + + def __init__(self, value, terminating=False): + self.value = value + self.children = {} + self.terminating = terminating + +class Trie: + + def __init__(self): + self.root = TrieNode(' ') + + def insert(self, sentence: Sentence): + root = self.root + for symbol in sentence: + if symbol not in root.children: + root.children[symbol] = TrieNode(symbol) + root = root.children[symbol] + root.terminating = True + + def search_prefix(self): + root = self.root + if len(root.children) == 1: + prefix = Sentence() + root = list(root.children.values())[0] + while True: + prefix += root.value + if len(root.children) > 1 or len(root.children) == 0: + break + root = list(root.children.values())[0] + if root.terminating: + return + return prefix + else: + return + +class ContainerSet: + def __init__(self, *values, contains_epsilon=False): + self.set = set(values) + self.contains_epsilon = contains_epsilon + + def add(self, value): + n = len(self.set) + self.set.add(value) + return n != len(self.set) + + def extend(self, values): + change = False + for value in values: + change |= self.add(value) + return change + + def set_epsilon(self, value=True): + last = self.contains_epsilon + self.contains_epsilon = value + return last != self.contains_epsilon + + def update(self, other): + n = len(self.set) + self.set.update(other.set) + return n != len(self.set) + + def epsilon_update(self, other): + return self.set_epsilon(self.contains_epsilon | other.contains_epsilon) + + def hard_update(self, other): + return self.update(other) | self.epsilon_update(other) + + def find_match(self, match): + for item in self.set: + if item == match: + return item + return None + + def __len__(self): + return len(self.set) + int(self.contains_epsilon) + + def __str__(self): + return '%s-%s' % (str(self.set), self.contains_epsilon) + + def __repr__(self): + return str(self) + + def __iter__(self): + return iter(self.set) + + def __nonzero__(self): + return len(self) > 0 + + def __eq__(self, other): + if isinstance(other, set): + return self.set == other + return isinstance(other, + ContainerSet) and self.set == other.set and self.contains_epsilon == other.contains_epsilon + +def inspect(item, grammar_name='G', mapper=None): + try: + return mapper[item] + except (TypeError, KeyError): + if isinstance(item, dict): + items = ',\n '.join( + f'{inspect(key, grammar_name, mapper)}: {inspect(value, grammar_name, mapper)}' for key, value in + item.items()) + return f'{{\n {items} \n}}' + elif isinstance(item, ContainerSet): + args = f'{", ".join(inspect(x, grammar_name, mapper) for x in item.set)} ,' if item.set else '' + return f'ContainerSet({args} contains_epsilon={item.contains_epsilon})' + elif isinstance(item, EOF): + return f'{grammar_name}.EOF' + elif isinstance(item, Epsilon): + return f'{grammar_name}.Epsilon' + elif isinstance(item, Symbol): + return f"G['{item.Name}']" + elif isinstance(item, Sentence): + items = ', '.join(inspect(s, grammar_name, mapper) for s in item._symbols) + return f'Sentence({items})' + elif isinstance(item, Production): + left = inspect(item.Left, grammar_name, mapper) + right = inspect(item.Right, grammar_name, mapper) + return f'Production({left}, {right})' + elif isinstance(item, tuple) or isinstance(item, list): + ctor = ('(', ')') if isinstance(item, tuple) else ('[', ']') + return f'{ctor[0]} {("%s, " * len(item)) % tuple(inspect(x, grammar_name, mapper) for x in item)}{ctor[1]}' + else: + raise ValueError(f'Invalid: {item}') + +def pprint(item, header=""): + if header: + print(header) + + if isinstance(item, dict): + for key, value in item.items(): + print(f'{key} ---> {value}') + elif isinstance(item, list): + print('[') + for x in item: + print(f' {repr(x)}') + print(']') + else: + print(item) + +class Token: + """ + Basic token class. + + Parameters + ---------- + lex : str + Token's lexeme. + token_type : Enum + Token's type. + """ + + def __init__(self, lex, token_type): + self.lex = lex + self.token_type = token_type + + def __str__(self): + return f'{self.token_type}: {self.lex}' + + def __repr__(self): + return str(self) + + @property + def is_valid(self): + return True + +class UnknownToken(Token): + def __init__(self, lex): + Token.__init__(self, lex, None) + + def transform_to(self, token_type): + return Token(self.lex, token_type) + + @property + def is_valid(self): + return False + +def tokenizer(G, fixed_tokens): + def decorate(func): + def tokenize_text(text): + tokens = [] + for lex in text.split(): + try: + token = fixed_tokens[lex] + except KeyError: + token = UnknownToken(lex) + try: + token = func(token) + except TypeError: + pass + tokens.append(token) + tokens.append(Token('$', G.EOF)) + return tokens + + if hasattr(func, '__call__'): + return tokenize_text + elif isinstance(func, str): + return tokenize_text(func) + else: + raise TypeError('Argument must be "str" or a callable object.') + + return decorate + +class DisjointSet: + def __init__(self, *items): + self.nodes = {x: DisjointNode(x) for x in items} + + def merge(self, items): + items = (self.nodes[x] for x in items) + try: + head, *others = items + for other in others: + head.merge(other) + except ValueError: + pass + + @property + def representatives(self): + return {n.representative for n in self.nodes.values()} + + @property + def groups(self): + return [[n for n in self.nodes.values() if n.representative == r] for r in self.representatives] + + def __len__(self): + return len(self.representatives) + + def __getitem__(self, item): + return self.nodes[item] + + def __str__(self): + return str(self.groups) + + def __repr__(self): + return str(self) + +class DisjointNode: + def __init__(self, value): + self.value = value + self.parent = self + + @property + def representative(self): + if self.parent != self: + self.parent = self.parent.representative + return self.parent + + def merge(self, other): + other.representative.parent = self.representative + + def __str__(self): + return str(self.value) + + def __repr__(self): + return str(self) \ No newline at end of file diff --git a/src/visitors/Builder.py b/src/visitors/Builder.py new file mode 100755 index 000000000..2e71a13e2 --- /dev/null +++ b/src/visitors/Builder.py @@ -0,0 +1,263 @@ +from cool_ast.cool_ast import ProgramNode, ClassDeclarationNode, AttrDeclarationNode, FuncDeclarationNode +import visitors.visitor as visitor +from utils.semantic import SemanticError, ErrorType +from utils.errors import _SemanticError, _TypeError + +class TypeBuilder: + def __init__(self, context, errors): + self.context = context + self.current_type = None + self.errors = errors + self.check_node = None + + @visitor.on('node') + def visit(self, node): + pass + + @visitor.when(ProgramNode) + def visit(self, node): + + _object = self.context.get_type('Object') + _int = self.context.get_type('Int') + _bool = self.context.get_type('Bool') + _string = self.context.get_type('String') + _io = self.context.get_type('IO') + _self = self.context.get_type('SELF_TYPE') + + _object.define_method('abort', [], [], _object) + _object.define_method('type_name', [], [], _string) + _object.define_method('copy', [], [], _self) + + _io.set_parent(_object) + _string.set_parent(_object) + _int.set_parent(_object) + _bool.set_parent(_object) + + _object.depth = 0 + _io.depth = 1 + _string.depth = 1 + _int.depth = 1 + _bool.depth = 1 + + _io.define_method('in_string', [], [], _string) + _io.define_method('out_string', ['x'], [_string], _self) + _io.define_method('in_int', [], [], _int) + _io.define_method('out_int', ['x'], [_int], _self) + + _string.define_method('length', [], [], _int) + _string.define_method('substr', ['index', 'length'], [_int, _int], _string) + _string.define_method('concat', ['str'], [_string], _string) + + _int.define_attribute('value', _int) + _bool.define_attribute('value', _int) + _string.define_attribute('value', _string) + + for declaration in node.declarations: + self.visit(declaration) + + self.check_node = Check_Node('Object') + + types = self.context.types + main_type = None + for type in types.values(): + if 'Main' == type.name: + main_type = type + break + if main_type is not None: + methods = main_type.methods + main_method = None + for m in methods: + if m.name == 'main': + main_method = m + break + if main_method is None: + self.errors.append('MainTypeError: Type Main does not have a main method or the main method have params') + else: + self.errors.append("ProgramError: The program doesn't have a type Main") + + acker = OverrideACK(self.context,self.errors) + acker.visit(node) + + @visitor.when(ClassDeclarationNode) + def visit(self, node): + self.current_type = self.context.get_type(node.id) + + if node.parent is not None: + if node.parent in ("Int", "String", "Bool", "SELF_TYPE"): + self.errors.append(_SemanticError% (node.token_list[0].lineno, node.token_list[3].col, f'Class {node.id} cannot inherit class {node.parent}' )) + try: + parent_t = self.context.get_type(node.parent) + self.current_type.set_parent(parent_t) + + parents = [self.current_type] + typo = self.current_type + while True: + if typo.parent is not None: + typo = typo.parent + if typo not in parents: + parents.append(typo) + else: + self.errors.append(_SemanticError % (node.token_list[0].lineno, node.token_list[3].col, f'Class {node.id}, or an ancestor of {node.id}, is involved in an inheritance cycle.' )) + break + else: + break + + except SemanticError as e: + self.errors.append(_TypeError % (node.token_list[0].lineno, node.token_list[3].col, f'Class {node.id} inherit from an undefined class {node.parent}' )) + else: + self.current_type.set_parent(self.context.get_type('Object')) + + for feature in node.features: + self.visit(feature) + + @visitor.when(AttrDeclarationNode) + def visit(self, node): + try: + t_attr = self.context.get_type(node.type) + except SemanticError as e: + self.errors.append(_TypeError % (node.token_list[0].lineno, node.token_list[2].col, f'Class {node.type} of attribute {node.id} is undefined.')) + t_attr = ErrorType() + try: + self.current_type.define_attribute(node.id, t_attr) + except SemanticError as e: + attr, owner = self.current_type.get_attribute(node.id, self.current_type, False, get_owner=True) + if owner == self.current_type: + self.errors.append(_SemanticError % (node.token_list[0].lineno, node.token_list[0].col, f'Attribute {node.id} is multply defined in class {self.current_type.name}.')) + + @visitor.when(FuncDeclarationNode) + def visit(self, node): + param_names = [] + param_types = [] + for name, typex in node.params: + param_names.append(name) + try: + param_types.append(self.context.get_type(typex)) + except SemanticError as e: + param_types.append(ErrorType()) + self.errors.append(_TypeError % (node.token_list[0].lineno, node.token_list[0].col, f'Class {typex} of formal parameter {name} is undefined.')) + + try: + return_type = self.context.get_type(node.type) + except SemanticError as e: + self.errors.append(_TypeError % (node.token_list[4].lineno, node.token_list[4].col, f'Undefined return type {node.type} in method {node.id}.')) + return_type = ErrorType() + try: + self.current_type.define_method(node.id, param_names, param_types, return_type) + except SemanticError as e: + self.errors.append(_SemanticError % (node.token_list[0].lineno, node.token_list[0].col, f'Method {node.id} is multply defined in class {self.current_type.name}.')) +#################################################################### + def CheckHeritageTree(self): + def CheckCyclicHeritage(n): #n is root, idealmente n = Object + pending = [n] + visited = {} + while pending: + node = pending.pop() + try: + if visited[node]: + return True, visited + except KeyError: + visited[node] = True, visited + + pending.extend(node.adj) + return False, visited + + gNodes = self.BuildGraph(self.context.get_type('Object')) + + visited = {} + for n in gNodes: + visited[n] = False + + for n in gNodes: + if visited[n]: + continue + cycle, nVisited = CheckCyclicHeritage(n) + if cycle: + return True + for node in nVisited: + visited[node] = True + + return False + + def BuildGraph(self, rootType): + #esto no deberia lanzar excepcion, a menos que haya hecho mal el bfs o algo.... :D + _root = Check_Node(rootType.name) + + nodes = {} + nodes[_root.name] = _root + + types = self.context.types + for t in types.values(): # no se puede heredar de int ni de bool, y object lo hice a mano + if t.name in ['Object']: + continue + try: + _node = nodes[t.name] + except: + _node = Check_Node(t.name) + nodes[t.name] = _node + if t.parent is not None and t.parent.name not in ['Bool', 'int']: + try: + nodes[t.parent.name].AddAdj(_node) + except KeyError: + parentNode = Check_Node(t.parent.name,[_node]) + nodes[t.parent.name] = parentNode + return nodes.values() + +class Check_Node: + def __init__(self, name, adjuntos = []): + self.name = name + self.adj = [] + for t in adjuntos: + self.adj.append(t) + + def AddAdj(self, node): + if node in self.adj: + raise Exception(f'{self.name} ya era adyacente a {node.name}') + self.adj.append(node) + +class OverrideACK: + def __init__(self, context, errors): + self.context = context + self.current_type = None + self.errors = errors + + @visitor.on('node') + def visit(self, node): + pass + + @visitor.when(ProgramNode) + def visit(self, node): + for declaration in node.declarations: + self.visit(declaration) + + @visitor.when(ClassDeclarationNode) + def visit(self, node): + nodeType = self.context.get_type(node.id) + self.current_type = nodeType + + for feature in node.features: + self.visit(feature) + + @visitor.when(AttrDeclarationNode) + def visit(self, node): + try: + attribute, owner = self.current_type.parent.get_attribute(node.id,self.current_type, False, True) + self.errors.append(_SemanticError % (node.token_list[0].lineno, node.token_list[0].col, f'Attribute {node.id} is an attribute of an inherited class.')) + except: + pass + + @visitor.when(FuncDeclarationNode) + def visit(self, node): + current_method = self.current_type.get_method(node.id, self.current_type, False) + try: + method, owner = self.current_type.parent.get_method(node.id, self.current_type, False, get_owner=True) + + if current_method.return_type != method.return_type: + self.errors.append(_SemanticError % (node.token_list[4].lineno, node.token_list[4].col, f'In redefined method {current_method.name}, return type {current_method.return_type.name} is different from original return type {method.return_type.name}.')) + if len(current_method.param_types) != len(method.param_types): + self.errors.append(_SemanticError % (node.token_list[0].lineno, node.token_list[0].col, f'Incompatible number of formal parameters in redefined method {current_method.name}.')) + else: + for pt1, pt2 in zip(current_method.param_types, method.param_types): + if pt1 != pt2: + self.errors.append(_SemanticError % (node.token_list[0].lineno, node.token_list[0].col, f'In redefined method {current_method.name}, parameter type {pt1.name} is different from original type {pt2.name}.')) + except: + pass \ No newline at end of file diff --git a/src/visitors/Checker.py b/src/visitors/Checker.py new file mode 100755 index 000000000..005d7d468 --- /dev/null +++ b/src/visitors/Checker.py @@ -0,0 +1,447 @@ +from cool_ast.cool_ast import * +from utils.semantic import Context, SemanticError, Type, Method, Scope, ErrorType, VariableInfo +import visitors.visitor as visitor +from utils.errors import _TypeError, _NameError, _SemanticError, _AtributeError +count = 0 +class TypeChecker: + def __init__(self, context, errors, c_m = None, c_t = None): + self.context = context + self.errors = errors + + self.current_method = c_m + self.current_type = c_t + + @visitor.on('node') + def visit(self, node, scope): + pass + + @visitor.when(ProgramNode) + def visit(self, node, scope = None): + if scope is None: + scope = Scope() + + for declaration in node.declarations: + current = self.context.get_type(declaration.id) + parent = current.parent + while parent is not None: + current.depth += 1 + parent = parent.parent + + for declaration in node.declarations: + self.visit(declaration, scope.create_child()) + + return scope + + @visitor.when(ClassDeclarationNode) + def visit(self, node, scope): + self.current_type = self.context.get_type(node.id) + _char = node.id[0] + if _char not in ''.join(chr(n) for n in range(ord('A'),ord('Z')+1)): + self.errors.append((f'Class names must be capitalized')) + + + for attr, owner in self.current_type.all_attributes(): #definir atributos de los ancestros + scope.define_variable(attr.name, attr.type) + + + for feature in node.features: + if isinstance(feature, AttrDeclarationNode): + cscope = scope.create_child() + self.visit(feature, cscope) + else: + self.visit(feature, scope.create_child()) + + node.type = self.current_type + + @visitor.when(FuncDeclarationNode) + def visit(self, node, scope): + self.current_method = self.current_type.get_method(node.id, self.current_type, False) + scope.define_variable('self', self.current_type) + _char = node.id[0] + if _char not in ''.join(chr(n) for n in range(ord('a'),ord('z')+1)): + self.errors.append((f'Class names must be capitalized')) + + for i in range(len(self.current_method.param_names)): + ithParamName = self.current_method.param_names[i] + ithParamType = self.current_method.param_types[i] + if ithParamName == 'self': + self.errors.append(_SemanticError %(node.token_list[0].lineno, node.token_list[0].col, f"'self' cannot be the name of a formal parameter.")) + continue + if not scope.is_local(ithParamName): + if ithParamType.name == 'SELF_TYPE': + self.errors.append('SELF_TYPE cannot be the type of a parameter.') + scope.define_variable(ithParamName, ErrorType()) + else: + scope.define_variable(ithParamName, self.context.get_type(ithParamType.name)) + else: + self.errors.append(_SemanticError %(node.token_list[0].lineno, node.token_list[0].col, f'Formal parameter {ithParamName} is multiply defined.')) + + if node.type != 'SELF_TYPE': + rType = self.context.get_type(node.type) + else: + rType = self.current_type + + exprType = self.visit(node.body, scope) + node.type = self.current_method.return_type + + if not exprType.conforms_to(rType): + self.errors.append(_TypeError %(node.body.token_list[0].lineno, node.body.token_list[0].col, f'Infered return type {exprType.name} of method {node.id} does not conform to declared return type {rType.name}.')) + + @visitor.when(ConditionalNode) + def visit(self, node, scope): + ifT = self.visit(node.ifChunk, scope.create_child()) + thenT = self.visit(node.thenChunk, scope.create_child()) + elseT = self.visit(node.elseChunk, scope.create_child()) + + if ifT != self.context.get_type('Bool'): + self.errors.append(_TypeError % (node.ifChunk.token_list[0].lineno, node.ifChunk.token_list[0].col,f"Predicate of 'if' does not have type Bool.")) + try: + node.type = thenT.join(elseT) + return node.type + except: + node.type = ErrorType() + return ErrorType() + + @visitor.when(LetInNode) + def visit(self, node, scope): + iteration = 0 + for nod in node.decl_list: + _id = nod.id + _t = nod.type + _e = nod.expr + + if _id =='self': + self.errors.append(_SemanticError %(node.decl_list[iteration].token_list[0].lineno, node.decl_list[iteration].token_list[0].col, f"'self' cannot be bound in a 'let' expression.")) + continue + + try: + if _t != 'SELF_TYPE': + var_type = self.context.get_type(_t) + else: + var_type = self.current_type + except SemanticError as e: + self.errors.append(_TypeError %(node.decl_list[iteration].token_list[0].lineno, node.decl_list[iteration].token_list[2].col, f"Class {_t} of let-bound identifier {_id} is undefined.")) + var_type = ErrorType() + + + if _e is not None: + expr = self.visit(_e, scope.create_child()) + else: + expr = None + if expr is not None and not expr.conforms_to(var_type): + self.errors.append(_TypeError %(node.decl_list[iteration].token_list[0].lineno, node.decl_list[iteration].token_list[0].col, f"Infered type {expr.name} of initialization of {_id} does not conform to identifier's declared type {var_type.name}")) + + scope.define_variable(_id, var_type) + iteration+=1 + expr_type = self.visit(node.expression, scope.create_child()) + node.type = expr_type + return node.type + + @visitor.when(AttrDeclarationNode) + def visit(self, node, scope): + if node.id == 'self': + self.errors.append(_SemanticError %(node.token_list[0].lineno, node.token_list[0].col, f"'self' cannot be the name of an attribute.")) + return + + _char = node.id[0] + + if _char not in ''.join(chr(n) for n in range(ord('a'),ord('z')+1)): + self.errors.append(_SemanticError %(node.token_list[0].lineno, node.token_list[0].col, f"Attribute names must not be capitalized.")) + + if node.type != 'SELF_TYPE': + attrType = self.context.get_type(node.type) + node.type = attrType + else: + attrType = self.current_type + node.type = self.current_type + + if node.value is not None: + value_t = self.visit(node.value, scope.create_child()) + if not value_t.conforms_to(attrType): + self.errors.append(_TypeError %(node.value.token_list[0].lineno, node.value.token_list[0].col, f'Infered type {value_t.name} of initialization of attribute {node.id} does not conform to declared type {attrType.name}')) + + @visitor.when(AssignNode) + def visit(self, node, scope): + var_info = scope.find_variable(node.id) + + exprType = self.visit(node.expr, scope.create_child()) + node.type = exprType + + if node.id == 'self': + self.errors.append(_SemanticError % (node.token_list[1].lineno, node.token_list[1].col, f"Cannot assign to 'self'.")) + return ErrorType() + + if var_info is None: + raise Exception('var not found in scope') + self.errors.append(f'Undefined variable {node.id} in {self.current_method.name}.') + else: + if not exprType.conforms_to(var_info.type): + self.errors.append(f"Can't convert {exprType.name} to {var_info.name}.") + + return exprType + + @visitor.when(WhileNode) + def visit(self, node, scope): + condition = self.visit(node.condition, scope.create_child()) + if condition != self.context.get_type('Bool'): + self.errors.append(_TypeError %(node.condition.token_list[0].lineno, node.condition.token_list[0].col, f'Loop condition does not have type Bool.')) + + self.visit(node.loopChunk, scope.create_child()) + node.type = self.context.get_type('Object') + return node.type + + @visitor.when(ChunkNode) + def visit(self, node, scope): + return_type = ErrorType() + + for expr in node.chunk: + return_type = self.visit(expr, scope.create_child()) + + node.type = return_type + return return_type + + @visitor.when(SwitchCaseNode) + def visit(self, node, scope): + self.visit(node.expr, scope) + types = [] + t_set = set() + for i, t, e, token_list in node.case_list: + child_scope = scope.create_child() + try: + if t != 'SELF_TYPE': + if t not in t_set: + t_set.add(t) + else: + self.errors.append(_SemanticError % (token_list[2].lineno, token_list[2].col, f'Duplicate branch {t} in case statement.')) + t_typo = self.context.get_type(t) + child_scope.define_variable(i, t_typo) + else: + self.errors.append(f'SELF_TYPE is not valid as the type of a case branch.') + except SemanticError as exc: + child_scope.define_variable(i, ErrorType()) + self.errors.append(_TypeError % (token_list[2].lineno, token_list[2].col, f'Class {t} of case branch is undefined.')) + + types.append(self.visit(e, child_scope)) + + node.type = Type.multi_join(types) + return node.type + + + @visitor.when(PlusNode) + def visit(self, node, scope): + lt = self.visit(node.left, scope) + rt = self.visit(node.right, scope) + + intType = self.context.get_type('Int') + + if lt == rt == intType: + node.type = intType + return intType + self.errors.append(_TypeError % (node.token_list[0].lineno, node.token_list[0].col, 'non-Int arguments: '+str(lt.name)+' + '+str(rt.name))) + node.type = ErrorType() + return ErrorType() + + @visitor.when(MinusNode) + def visit(self, node, scope): + lt = self.visit(node.left, scope) + rt = self.visit(node.right, scope) + + intType = self.context.get_type('Int') + + if lt == rt == intType: + node.type = intType + return intType + self.errors.append(_TypeError % (node.token_list[0].lineno, node.token_list[0].col, 'non-Int arguments: '+str(lt.name)+' - '+str(rt.name))) + node.type = ErrorType() + return ErrorType() + + @visitor.when(StarNode) + def visit(self, node, scope): + lt = self.visit(node.left, scope) + rt = self.visit(node.right, scope) + + intType = self.context.get_type('Int') + + if lt == rt == intType: + node.type = intType + return intType + self.errors.append(_TypeError % (node.token_list[0].lineno, node.token_list[0].col, 'non-Int arguments: '+str(lt.name)+' * '+str(rt.name))) + node.type = ErrorType() + return ErrorType() + + @visitor.when(DivNode) + def visit(self, node, scope): + lt = self.visit(node.left, scope) + rt = self.visit(node.right, scope) + + intType = self.context.get_type('Int') + + if lt == rt == intType: + node.type = intType + return intType + self.errors.append(_TypeError % (node.token_list[0].lineno, node.token_list[0].col, 'non-Int arguments: '+str(lt.name)+' / '+str(rt.name))) + node.type = ErrorType() + return ErrorType() + + @visitor.when(CallNode) + def visit(self, node, scope): + if node.obj is None: + node.obj = VariableNode('self') + obj_type = self.visit(node.obj, scope) + + if node.parent is not None: + try: + ancestor_type = self.context.get_type(node.parent) + except SemanticError as e: + ancestor_type = ErrorType() + + if not obj_type.conforms_to(ancestor_type): + self.errors.append(_TypeError % (node.token_list[0].lineno, node.token_list[0].col, f'Expression type {obj_type.name} does not conform to declared static dispatch type {ancestor_type.name}.')) + else: + ancestor_type = obj_type + + try: + method = ancestor_type.get_method(node.method, self.current_type, False) + except SemanticError as e: + self.errors.append(_AtributeError % (node.token_list[0].lineno, node.token_list[0].col, f'Dispatch to undefined method {node.method}')) + for arg in node.args: + self.visit(arg, scope) + node.type = ErrorType() + return ErrorType() + + if len(node.args) != len(method.param_types): + self.errors.append(_SemanticError %(node.token_list[1].lineno, node.token_list[1].col, f"Method {method.name} called with wrong number of arguments")) + else: + for i, arg in enumerate(node.args): + arg_type = self.visit(arg, scope) + if not arg_type.conforms_to(method.param_types[i]): + self.errors.append(_TypeError %(node.args[i].token_list[0].lineno, node.args[i].token_list[0].col, f"In call of {method.name}, type {arg_type.name} of parameter {method.param_names[i]} does not conform to declare type {method.param_types[i].name}")) + + if method.return_type.name != 'SELF_TYPE': + node.type = method.return_type + return method.return_type + else: + node.type = ancestor_type + return ancestor_type + + @visitor.when(ConstantNumNode) + def visit(self, node, scope): + node.type = self.context.get_type('Int') + return node.type + + @visitor.when(StringNode) + def visit(self, node, scope): + node.type = self.context.get_type('String') + return node.type + + @visitor.when(TrueNode) + def visit(self, node, scope): + node.type = self.context.get_type('Bool') + return node.type + + @visitor.when(FalseNode) + def visit(self, node, scope): + node.type = self.context.get_type('Bool') + return node.type + + @visitor.when(VariableNode) + def visit(self, node, scope): + if node.lex == 'self': + variable = VariableInfo('self', self.current_type) + else: + variable = scope.find_variable(node.lex) + if variable is None: + try: + _var = self.current_type.get_attribute(node.lex, self.current_type, False) + variable = VariableInfo(_var.name, _var.type) + except SemanticError as e: + pass + if variable is None: + self.errors.append(_NameError % (node.token_list[0].lineno, node.token_list[0].col, f"Undeclared identifier {node.lex}.")) + node.type = ErrorType() + return ErrorType() + node.type = variable.type + return variable.type + + @visitor.when(InstantiateNode) + def visit(self, node, scope): + try: + if node.lex != 'SELF_TYPE': + node.type = self.context.get_type(node.lex) + return node.type + else: + node.type = self.current_type + return self.current_type + except SemanticError as e: + self.errors.append(_TypeError % (node.token_list[1].lineno, node.token_list[1].col, f"'new' used with undefined class {node.lex}.")) + node.errors = ErrorType + return ErrorType() + + @visitor.when(NotNode) + def visit(self, node, scope): + tp = self.visit(node.expression, scope.create_child()) + if tp == self.context.get_type('Bool'): + node.type = tp + return tp + self.errors.append(_TypeError % (node.token_list[0].lineno, node.token_list[0].col, f"Argument of 'not' has type {tp.name} instead of Bool.")) + node.type = ErrorType() + return ErrorType() + + @visitor.when(ComplementNode) + def visit(self, node, scope): + tp = self.visit(node.expr, scope) + if tp == self.context.get_type('Int'): + node.type = tp + return tp + self.errors.append(_TypeError % (node.token_list[0].lineno, node.token_list[0].col, f"Argument of '~' has type {tp.name} instead of Int.")) + node.type = ErrorType() + return ErrorType() + + @visitor.when(IsVoidNode) + def visit(self, node, scope): + self.visit(node.method, scope.create_child()) + node.type = self.context.get_type('Bool') + return node.type + + @visitor.when(LeqNode) + def visit(self, node, scope): + lt = self.visit(node.left, scope) + rt = self.visit(node.right, scope) + + intType = self.context.get_type('Int') + boolType = self.context.get_type('Bool') + + if lt == rt == intType: + node.type = boolType + return boolType + self.errors.append(_TypeError % (node.token_list[0].lineno, node.token_list[0].col, 'non-Int arguments: '+str(lt.name)+' <= '+str(rt.name))) + node.type = ErrorType() + return ErrorType() + + @visitor.when(LessNode) + def visit(self, node, scope): + lt = self.visit(node.left, scope) + rt = self.visit(node.right, scope) + + intType = self.context.get_type('Int') + boolType = self.context.get_type('Bool') + if lt == rt == intType: + node.type = boolType + return boolType + self.errors.append(_TypeError % (node.token_list[0].lineno, node.token_list[0].col, 'non-Int arguments: '+str(lt.name)+' < '+str(rt.name))) + return ErrorType() + + @visitor.when(EqualNode) + def visit(self, node, scope): + lt = self.visit(node.left, scope) + rt = self.visit(node.right, scope) + boolType = self.context.get_type('Bool') + # quite self type de los basicos aqui + if lt.name not in ("Int", "String", "Bool", "IO", "Object") and rt.name not in ("Int", "String", "Bool", "IO", "Object"): + node.type = boolType + return node.type + if lt == rt: + node.type = boolType + return node.type + self.errors.append(_TypeError % (node.token_list[0].lineno, node.token_list[0].col, f'Illegal comparison with a basic type.')) + return ErrorType() \ No newline at end of file diff --git a/src/visitors/CilDepicter.py b/src/visitors/CilDepicter.py new file mode 100644 index 000000000..4054ed00c --- /dev/null +++ b/src/visitors/CilDepicter.py @@ -0,0 +1,110 @@ +from cil_ast.cil_ast import * +import visitors.visitor as visitor + +def get_formatter(ast): + class PrintVisitor(object): + @visitor.on('node') + def visit(self, node): + pass + + @visitor.when(ProgramNode) + def visit(self, node): + dottypes = '\n'.join(self.visit(t) for t in node.dottypes) + dotdata = '\n'.join(self.visit(t) for t in node.dotdata) + dotcode = '\n'.join(self.visit(t) for t in node.dotcode) + + return f'.TYPES\n{dottypes}\n\n.DATA\n{dotdata}\n\n.CODE\n{dotcode}' + + @visitor.when(TypeNode) + def visit(self, node): + attributes = '\n\t'.join(f'attribute {x}' for x in node.attributes) + methods = '\n\t'.join(f'method {x}: {y}' for x,y in node.methods) + + return f'type {node.name} {{\n\t{attributes}\n\n\t{methods}\n}}' + + @visitor.when(FunctionNode) + def visit(self, node): + params = '\n\t'.join(self.visit(x) for x in node.params) + localvars = '\n\t'.join(self.visit(x) for x in node.localvars) + instructions = '\n\t'.join(self.visit(x) for x in node.instructions) + + return f'function {node.name} {{\n\t{params}\n\n\t{localvars}\n\n\t{instructions}\n}}' + + @visitor.when(ParamNode) + def visit(self, node): + return f'PARAM {node.name}' + + @visitor.when(LocalNode) + def visit(self, node): + return f'LOCAL {node.name}' + + @visitor.when(AssignNode) + def visit(self, node): + return f'{node.dest} = {node.source}' + + @visitor.when(PlusNode) + def visit(self, node): + return f'{node.dest} = {node.left} + {node.right}' + + @visitor.when(MinusNode) + def visit(self, node): + return f'{node.dest} = {node.left} - {node.right}' + + @visitor.when(StarNode) + def visit(self, node): + return f'{node.dest} = {node.left} * {node.right}' + + @visitor.when(DivNode) + def visit(self, node): + return f'{node.dest} = {node.left} / {node.right}' + + @visitor.when(AllocateNode) + def visit(self, node): + return f'{node.dest} = ALLOCATE {node.type}' + + @visitor.when(TypeOfNode) + def visit(self, node): + return f'{node.dest} = TYPEOF {node.obj}' + + @visitor.when(StaticCallNode) + def visit(self, node): + return f'{node.dest} = CALL {node.function}' + + @visitor.when(SetAttribNode) + def visit(self, node): + return f'SETATTR {node.inst} {node.attr} {node.source}' + + @visitor.when(GetAttribNode) + def visit(self, node): + return f'GETATTR {node.inst} {node.attr}' + + @visitor.when(GotoIfNode) + def visit(self, node): + return f'IF {node.condition} GOTO {node.label}' + + @visitor.when(GotoNode) + def visit(self, node): + return f'GOTO {node.label}' + + @visitor.when(LabelNode) + def visit(self, node): + return f'LABEL {node.name}' + + @visitor.when(DynamicCallNode) + def visit(self, node): + return f'{node.dest} = VCALL {node.type} {node.method}' + + @visitor.when(ArgNode) + def visit(self, node): + return f'ARG {node.name}' + + @visitor.when(ReturnNode) + def visit(self, node): + return f'RETURN {node.value if node.value is not None else ""}' + + @visitor.when(DataNode) + def visit(self, node): + return f'{node.name} = {node.value};' + + printer = PrintVisitor() + return (printer.visit(ast)) diff --git a/src/visitors/CiltoMips.py b/src/visitors/CiltoMips.py new file mode 100644 index 000000000..8bf79a841 --- /dev/null +++ b/src/visitors/CiltoMips.py @@ -0,0 +1,1237 @@ +from utils.mip_utils import registers as r, operations as o, datatype as dt +import visitors.visitor as visitor +from cil_ast.cil_ast import * + +#heeerreeee con heerrrre carrrill + +class Function(): + def __init__(self, label, params, localvars): + self.label = label + self.localvars = localvars + self.params = params + self.instructions = [] + + def to_str(self): + code = f'{self.label}:\n' + code += '\n'.join(i for i in self.instructions) + return code + + def register_instruction(self, instruction): + self.instructions.append(instruction) + + def register_instructions(self, instructions): + self.instructions.extend(instructions) + + def find_location_param(self, name): + index = self.params.index(name) + offset = ((len(self.params) - 1) - index) * 4 + return '{}({})'.format(offset, r.fp) + + def find_location_local(self, name): + index = self.localvars.index(name) + offset = (len(self.localvars) + 2 - index) * 4 + return '{}({})'.format(-offset, r.fp) + + def find_var_loc(self, name): + try: + return self.find_location_param(name) + except ValueError: + return self.find_location_local(name) + +class MType(): + def __init__(self, name, label, code, index, attrs, methods): + self.name = name + self.label = label + self.index = index + self.methods = methods + self.attributes = attrs + self.code = code + +class DataHandler(): + def __init__(self, label, msg): + self.label = label + self.string = msg + self.code = '{}: {} "{}"'.format(self.label, dt.asciiz, self.string) + +class CILToMipsVisitor: + def __init__(self): + + self.type_lab_cnt = 0 + self.data_lab_cnt = 0 + self.code_lab_cnt = 0 + self.stack_args = 0 + self._function_names = {} + self._labels = {} + + self._data_section = {} + self._types_section = {} + self._functions_section = {} + self._current_function : FunctionNode = None + + def register_instruction(self, instruction): + self._current_function.register_instruction(instruction) + + def register_instructions(self, instructions): + self._current_function.register_instructions( instructions) + + def build_type_label(self): + self.type_lab_cnt += 1 + return f'type_{self.type_lab_cnt}' + + def build_data_label(self): + self.data_lab_cnt += 1 + return f'data_{self.data_lab_cnt}' + + def build_code_label(self): + self.code_lab_cnt += 1 + return f'label_{self.code_lab_cnt}' + + def start_function(self, name, function): + self._functions_section[name] = function + self._current_function = function + self._labels = {} + + def end_function(self): + self._current_function = None + + def register_label(self, label, new_label): + self._labels[label] = new_label + + def get_label(self, label): + return self._labels[label] + + def push_register(self, reg): + move_stack = '{} {} {} {}'.format(o.addi, r.sp, r.sp, -4) + save_location = '{}({})'.format(0, r.sp) + save_register = '{} {} {}'.format(o.sw, reg, save_location) + return [move_stack, save_register] + + def pop_register(self, reg): + load_value = '{} {} {}({})'.format(o.lw, reg, 0, r.sp) + move_stack = '{} {} {} {}'.format(o.addi, r.sp, r.sp, 4) + return [load_value, move_stack] + + def initialize_object(self, reg1, reg2): + instructions = [] + + instructions.append('{} {} {} {}'.format(o.sll, reg1, reg1, 2)) + instructions.append('{} {} {}'.format(o.la, reg2, 'prototype_table')) + instructions.append('{} {} {} {}'.format(o.add, reg2, reg2, reg1)) + instructions.append("{} {} {}({})".format(o.lw, reg2, 0, reg2)) + instructions.append("{} {} {}({})".format(o.lw, r.a0, 4, reg2)) + instructions.append('{} {} {} {}'.format(o.sll, r.a0, r.a0, 2)) + instructions.append('{} {}'.format(o.jal, "allocate")) + instructions.append("{} {} {}".format(o.move, r.a2, r.a0)) + instructions.append("{} {} {}".format(o.move, r.a0, reg2)) + instructions.append("{} {} {}".format(o.move, r.a1, r.v0)) + instructions.append('{} {}'.format(o.jal, "copy")) + + return instructions + + def find_var_loc(self, node): + if isinstance(node, AttributeNode): + return '0({})'.format(r.sp) + if isinstance(node, str): + return self._current_function.find_var_loc(node) + return self._current_function.find_var_loc(node.name) + + @visitor.on('node') + def collector_fnames(self, node): + pass + + @visitor.when(ProgramNode) + def collector_fnames(self, node): + for f in node.dotcode: + self.collector_fnames(f) + + @visitor.when(FunctionNode) + def collector_fnames(self, node): + if node.name == "entry": + self._function_names[node.name] = 'main' + else: + self._function_names[node.name] = node.name + + @visitor.on('node') + def visit(self, node): + pass + + @visitor.when(ProgramNode) + def visit(self, node): + self.collector_fnames(node) + self._data_section["default_str"] = DataHandler("default_str", "") + + for i in node.dottypes: + self.visit(i) + for i in node.dotdata: + self.visit(i) + for i in node.dotcode: + self.visit(i) + + data = f'.data\n' + '\n.word 0\n'.join(d.code for d in self._data_section.values()) + '\n' + names_table = f"types_table:\n" + "\n".join([f".word {tp.name}" for tp in self._types_section.values()]) + proto_table = f"prototype_table:\n" + "\n".join([f" .word {tp.label}_prototype" for tp in self._types_section.values()]) + types_table = "\n\n\n".join([tp.code for tp in self._types_section.values()]) + code = '\n\n'.join(f.to_str() for f in self._functions_section.values()) + '\n' + + mipsCode = f'{data}\n\n{names_table}\n\n{proto_table}\n\n{types_table}\n\n\n.text\n.globl main\n{code}\n\n' + mipsCode += '\n'+self.define_util_functions() + + return mipsCode + +# section nodes + @visitor.when(TypeNode) + def visit(self, node): + name_label = self.build_data_label() + self._data_section[node.name] = DataHandler(name_label, node.name) + + type_label = self.build_type_label() + methods = [self._function_names[key] for key in node.methods.values()] + + type_attrs = list(node.attributes.keys()) + + _methods = "\n".join([f".word {m}" for m in methods]) + dispatch_table = f"{type_label}_dispatch:\n{_methods}" + begin = f"{type_label}_prototype:\n.word {len(self._types_section)}\n.word {len(type_attrs) + 4}\n.word {type_label}_dispatch" + attr = "\n".join([f'.word 0' for attr in type_attrs]) + end = f".word\t-1" + proto = f"{begin}\n{attr}\n{end}" if attr != "" else f"{begin}\n{end}" + + code = f'{dispatch_table}\n\n{proto}' + + self._types_section[node.name] = MType(name_label, type_label, code, len(self._types_section), type_attrs, methods) + + @visitor.when(DataNode) + def visit(self, node): + label = self.build_data_label() + self._data_section[node.name] = DataHandler(label, node.value) + + @visitor.when(FunctionNode) + def visit(self, node): + label = self._function_names[node.name] + params = [param.name for param in node.params] + localvars = [local.name for local in node.localvars] + size_for_locals = len(localvars) * 4 + + new_func = Function(label, params, localvars) + self.start_function(node.name, new_func) + + for instruction in node.instructions: + if isinstance(instruction, LabelNode): + mips_label = self.build_code_label() + self.register_label(instruction.label, mips_label) + + instructions = [] + instructions.extend(self.push_register(r.ra)) + instructions.extend(self.push_register(r.fp)) + instructions.append('{} {} {} {}'.format(o.addi, r.fp, r.sp, 8)) + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, -size_for_locals)) + + for i in node.instructions: + instructions.extend(self.visit(i)) + + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, size_for_locals)) + instructions.extend(self.pop_register(r.fp)) + instructions.extend(self.pop_register(r.ra)) + + if self._current_function.label != 'main': + instructions.append('{} {}'.format(o.jr, r.ra)) + else: + instructions.append('{} {} {}'.format(o.li, r.v0, 10)) + instructions.append('{}'.format(o.syscall)) + + new_func.register_instructions( instructions) + self.end_function() + +# binary + # arithmetics + @visitor.when(PlusNode) + def visit(self, node): + instructions = [] + + if isinstance(node.left, int): + instructions.append('{} {} {}'.format(o.li, r.t0, node.left)) + else: + instructions.extend(self.visit(node.left)) + instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.left))) + if isinstance(node.left, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + if isinstance(node.right, int): + instructions.append('{} {} {}'.format(o.li, r.t1, node.right)) + else: + instructions.extend(self.visit(node.right)) + instructions.append('{} {} {}'.format(o.lw, r.t1, self.find_var_loc(node.right))) + if isinstance(node.right, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + instructions.append('{} {} {} {}'.format(o.add, r.t0, r.t0, r.t1)) + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.t0, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + return instructions + + @visitor.when(MinusNode) + def visit(self, node): + instructions = [] + + if isinstance(node.left, int): + instructions.append('{} {} {}'.format(o.li, r.t0, node.left)) + else: + instructions.extend(self.visit(node.left)) + instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.left))) + if isinstance(node.left, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + if isinstance(node.right, int): + instructions.append('{} {} {}'.format(o.li, r.t1, node.right)) + else: + instructions.extend(self.visit(node.right)) + instructions.append('{} {} {}'.format(o.lw, r.t1, self.find_var_loc(node.right))) + if isinstance(node.right, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + instructions.append('{} {} {} {}'.format(o.sub, r.t0, r.t0, r.t1)) + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.t0, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + return instructions + + @visitor.when(StarNode) + def visit(self, node): + instructions = [] + + if isinstance(node.left, int): + instructions.append('{} {} {}'.format(o.li, r.t0, node.left)) + else: + instructions.extend(self.visit(node.left)) + instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.left))) + if isinstance(node.left, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + if isinstance(node.right, int): + instructions.append('{} {} {}'.format(o.li, r.t1, node.right)) + else: + instructions.extend(self.visit(node.right)) + instructions.append('{} {} {}'.format(o.lw, r.t1, self.find_var_loc(node.right))) + if isinstance(node.right, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + instructions.append('{} {} {} {}'.format(o.mul, r.t0, r.t0, r.t1)) + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.t0, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + return instructions + + @visitor.when(DivNode) + def visit(self, node): + instructions = [] + + if isinstance(node.left, int): + instructions.append('{} {} {}'.format(o.li, r.t0, node.left)) + else: + instructions.extend(self.visit(node.left)) + instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.left))) + if isinstance(node.left, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + if isinstance(node.right, int): + instructions.append('{} {} {}'.format(o.li, r.t1, node.right)) + else: + instructions.extend(self.visit(node.right)) + instructions.append('{} {} {}'.format(o.lw, r.t1, self.find_var_loc(node.right))) + if isinstance(node.right, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + instructions.append('{} {} {}'.format(o.div, r.t0, r.t1)) + instructions.append('{} {}'.format(o.mflo, r.t0)) + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.t0, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + return instructions + + #logics + @visitor.when(LessNode) + def visit(self, node): + instructions = [] + + instructions.extend(self.visit(node.left)) + instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.left))) + if isinstance(node.left, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + instructions.extend(self.visit(node.right)) + instructions.append('{} {} {}'.format(o.lw, r.t1, self.find_var_loc(node.right))) + if isinstance(node.right, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + instructions.append('{} {} {} {}'.format(o.slt, r.t1, r.t0, r.t1)) + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.t1, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + return instructions + + @visitor.when(LessEqualNode) + def visit(self, node): + instructions = [] + + instructions.extend(self.visit(node.left)) + instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.left))) + if isinstance(node.left, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + instructions.extend(self.visit(node.right)) + instructions.append('{} {} {}'.format(o.lw, r.t1, self.find_var_loc(node.right))) + if isinstance(node.right, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + instructions.append('{} {} {} {}'.format(o.sle, r.t0, r.t0, r.t1)) + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.t0, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + return instructions + + @visitor.when(EqualNode) + def visit(self, node): + instructions = [] + + if type(node.left) == VoidNode: + instructions.append('{} {} {}'.format(o.li, r.t0, 0)) + else: + instructions.extend(self.visit(node.left)) + instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.left))) + if isinstance(node.left, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + if type(node.right) == VoidNode: + instructions.append('{} {} {}'.format(o.li, r.t1, 0)) + else: + instructions.extend(self.visit(node.right)) + instructions.append('{} {} {}'.format(o.lw, r.t1, self.find_var_loc(node.right))) + if isinstance(node.right, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + instructions.append('{} {} {} {}'.format(o.seq, r.t0, r.t0, r.t1)) + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.t0, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + return instructions + + @visitor.when(EqualStringNode) + def visit(self, node): + instructions = [] + + instructions.extend(self.visit(node.left)) + instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.left))) + if isinstance(node.left, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + instructions.append('{} {} {}'.format(o.move, r.a0, r.t0)) + + instructions.extend(self.visit(node.right)) + instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.right))) + if isinstance(node.right, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + instructions.append('{} {} {}'.format(o.move, r.a1, r.t0)) + + instructions.append('{} {}'.format(o.jal, "equal_str")) + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.v0, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + return instructions + +# Unary + # arithmetics + @visitor.when(ComplementNode) + def visit(self, node): + instructions = [] + + instructions.extend(self.visit(node.value)) + instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.value))) + if isinstance(node.value, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + instructions.append('{} {} {}'.format(o.not_bw, r.t0, r.t0)) + instructions.append('{} {} {} {}'.format(o.addi, r.t0, r.t0, 1)) + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.t0, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + return instructions + + #logics + @visitor.when(NotNode) + def visit(self, node): + instructions = [] + + instructions.extend(self.visit(node.value)) + instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.value))) + if isinstance(node.value, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + instructions.append('{} {} {} {}'.format(o.xori, r.t0, r.t0, 1)) + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.t0, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + return instructions + +# basics + @visitor.when(AllocateNode) + def visit(self, node): + instructions = [] + + if isinstance(node.type, int): + _type = node.type + else: + _type = self._types_section[node.type].index + instructions.append('{} {} {}'.format(o.li, r.t0, _type)) + instructions.extend(self.initialize_object(r.t0, r.t1)) + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.v0, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + return instructions + + @visitor.when(CopyNode) + def visit(self, node): + instructions = [] + + instructions.extend(self.visit(node.value)) + instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.value))) + if isinstance(node.value, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + instructions.append('{} {} 4({})'.format(o.lw, r.a0, r.t0)) + instructions.append('{} {} {} {}'.format(o.sll, r.a0, r.a0, 2)) + instructions.append('{} {}'.format(o.jal, "allocate")) + instructions.append('{} {} {}'.format(o.move, r.a2, r.a0)) + instructions.append('{} {} {}'.format(o.move, r.a0, r.t0)) + instructions.append('{} {} {}'.format(o.move, r.a1, r.v0)) + instructions.append('{} {}'.format(o.jal, "copy")) + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.v0, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + return instructions + + @visitor.when(AssignNode) + def visit(self, node): + instructions = [] + + if isinstance(node.source, VoidNode): + register = r.zero + elif isinstance(node.source, int): + register = r.t0 + instructions.append('{} {} {}'.format(o.li, r.t0, int(node.source))) + else: + register = r.t0 + instructions.extend(self.visit(node.source)) + instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.source))) + if isinstance(node.source, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + if isinstance(node.dest, AttributeNode): + self_var = self._current_function.params[0] + instructions.append('{} {} {}'.format(o.lw, r.t1, self.find_var_loc(self_var))) + + index = self._types_section[node.dest.type].attributes.index(node.dest.name) + 3 + instructions.append('{} {} {} {}'.format(o.addi, r.t1, r.t1, index * 4)) + instructions.append('{} {} 0({})'.format(o.sw, register, r.t1)) + else: + instructions.append('{} {} {}'.format(o.sw, register, self.find_var_loc(node.dest))) + + return instructions + + @visitor.when(TypeOfNode) + def visit(self, node): + instructions = [] + + instructions.extend(self.visit(node.obj)) + instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.obj))) + if isinstance(node.obj, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + instructions.append('{} {} 0({})'.format(o.lw, r.t1, r.t0)) + instructions.append('{} {} {} {}'.format(o.sll, r.t1, r.t1, 2)) + instructions.append('{} {} {}'.format(o.la, r.t0, 'types_table')) + instructions.append('{} {} {} {}'.format(o.add, r.t0, r.t0, r.t1)) + instructions.append('{} {} 0({})'.format(o.lw, r.t1, r.t0)) + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.t1, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + return instructions + + @visitor.when(NameNode) + def visit(self, node): + instructions = [] + + instructions.append('{} {} {}'.format(o.la, r.t0, 'types_table')) + + tp_number = self._types_section[node.value].index + instructions.append('{} {} {} {}'.format(o.addi, r.t0, r.t0, tp_number * 4)) + instructions.append('{} {} 0({})'.format(o.lw, r.t0, r.t0)) + + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.t0, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + return instructions + + @visitor.when(StaticCallNode) + def visit(self, node): + instructions = [] + + func_name = self._function_names[node.function] + instructions.append('{} {}'.format(o.jal, func_name)) + if self.stack_args > 0: + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, self.stack_args * 4)) + self.stack_args = 0 + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.v0, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + return instructions + + @visitor.when(DynamicCallNode) + def visit(self, node): + instructions = [] + + _type = self._types_section[node.type] + method = _type.methods.index(self._function_names[node.method]) + + instructions.append('{} {} 0({})'.format(o.lw, r.t0, r.sp)) + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + self.stack_args -= 1 + + instructions.append('{} {} 8({})'.format(o.lw, r.t0, r.t0)) + instructions.append('{} {} {}({})'.format(o.lw, r.t0, method * 4, r.t0)) + instructions.append('{} {} {}'.format(o.jalr, r.ra, r.t0)) + + if self.stack_args > 0: + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, self.stack_args * 4)) + self.stack_args = 0 + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.v0, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + return instructions + + @visitor.when(ArgNode) + def visit(self, node): + instructions = [] + + self.stack_args += 1 + if isinstance(node.name, int): + instructions.append('{} {} {}'.format(o.li, r.t0, node.name)) + else: + instructions.extend(self.visit(node.name)) + instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.name))) + if isinstance(node.name, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + instructions.extend(self.push_register(r.t0)) + + return instructions + + @visitor.when(ParamNode) + def visit(self, node): + return [] + + @visitor.when(VarNode) + def visit(self, node): + return [] + + @visitor.when(ReturnNode) + def visit(self, node): + instructions = [] + + if node.value is None or isinstance(node.value, VoidNode): + instructions.append('{} {} {}'.format(o.li, r.v0, 0)) + elif isinstance(node.value, int): + instructions.append('{} {} {}'.format(o.li, r.v0, node.value)) + else: + instructions.extend(self.visit(node.value)) + instructions.append('{} {} {}'.format(o.lw, r.v0, self.find_var_loc(node.value))) + if isinstance(node.value, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + return instructions + + @visitor.when(ExitNode) + def visit(self, node): + instructions = [] + + instructions.append('{} {} {}'.format(o.li, r.v0, 10)) + instructions.append('{}'.format(o.syscall)) + + return instructions + +# string + @visitor.when(LoadNode) + def visit(self, node): + instructions = [] + + instructions.append('{} {} {}'.format(o.la, r.t0, self._data_section[node.msg.name].label)) + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.t0, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + return instructions + + @visitor.when(PrintStringNode) + def visit(self, node): + instructions = [] + + instructions.append('{} {} {}'.format(o.li, r.v0, 4)) + instructions.extend(self.visit(node.str_addr)) + instructions.append('{} {} {}'.format(o.lw, r.a0, self.find_var_loc(node.str_addr))) + if isinstance(node.str_addr, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + instructions.append('{}'.format(o.syscall)) + + return instructions + + @visitor.when(ReadStringNode) + def visit(self, node): + instructions = [] + + instructions.append('{} {}'.format(o.jal, "read_string")) + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.v0, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + return instructions + + @visitor.when(SubstringNode) + def visit(self, node): + instructions = [] + + instructions.extend(self.visit(node.str_value)) + instructions.append('{} {} {}'.format(o.lw, r.a0, self.find_var_loc(node.str_value))) + if isinstance(node.str_value, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + if type(node.index) == int: + instructions.append('{} {} {}'.format(o.li, r.a1, node.index)) + else: + instructions.extend(self.visit(node.index)) + instructions.append('{} {} {}'.format(o.lw, r.a1, self.find_var_loc(node.index))) + if isinstance(node.index, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + if type(node.index) == int: + instructions.append('{} {} {}'.format(o.li, r.a2, node.length)) + else: + instructions.extend(self.visit(node.length)) + instructions.append('{} {} {}'.format(o.lw, r.a2, self.find_var_loc(node.length))) + if isinstance(node.length, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + instructions.append('{} {}'.format(o.jal, "substr")) + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.v0, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + return instructions + + @visitor.when(ConcatNode) + def visit(self, node): + instructions = [] + + instructions.extend(self.visit(node.prefix)) + instructions.append('{} {} {}'.format(o.lw, r.a0, self.find_var_loc(node.prefix))) + if isinstance(node.prefix, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + instructions.extend(self.visit(node.suffix)) + instructions.append('{} {} {}'.format(o.lw, r.a1, self.find_var_loc(node.suffix))) + if isinstance(node.suffix, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + instructions.extend(self.visit(node.length)) + instructions.append('{} {} {}'.format(o.lw, r.a2, self.find_var_loc(node.length))) + if isinstance(node.length, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + instructions.append('{} {}'.format(o.jal, "concat")) + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.v0, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + return instructions + + @visitor.when(LengthNode) + def visit(self, node): + instructions = [] + + instructions.extend(self.visit(node.source)) + instructions.append('{} {} {}'.format(o.lw, r.a0, self.find_var_loc(node.source))) + if isinstance(node.source, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + instructions.append('{} {}'.format(o.jal, "length")) + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.v0, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + return instructions + +# Int + @visitor.when(PrintIntNode) + def visit(self, node): + instructions = [] + + instructions.append('{} {} {}'.format(o.li, r.v0, 1)) + instructions.extend(self.visit(node.value)) + instructions.append('{} {} {}'.format(o.lw, r.a0, self.find_var_loc(node.value))) + if isinstance(node.value, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + instructions.append('{}'.format(o.syscall)) + + return instructions + + @visitor.when(ReadIntNode) + def visit(self, node): + instructions = [] + + instructions.append('{} {} {}'.format(o.li, r.v0, 5)) + instructions.append('{}'.format(o.syscall)) + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.v0, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + return instructions + +# attributes + @visitor.when(AttributeNode) + def visit(self, node): + instructions = [] + + self_var = self._current_function.params[0] + instructions.append('{} {} {}'.format(o.lw, r.t4, self.find_var_loc(self_var))) + + index = self._types_section[node.type].attributes.index(node.name) + 3 + instructions.append('{} {} {}({})'.format(o.lw, r.t4, index * 4, r.t4)) + instructions.extend(self.push_register(r.t4)) + + return instructions + + @visitor.when(GetAttribNode) + def visit(self, node): + instructions = [] + + instructions.extend(self.visit(node.obj)) + instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.obj))) + if isinstance(node.obj, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + tp = self._types_section[node.computed_type] + offset = (tp.attributes.index(node.attr) + 3) * 4 + instructions.append('{} {} {}({})'.format(o.lw, r.t1, offset, r.t0)) + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.t1, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + return instructions + + @visitor.when(SetAttribNode) + def visit(self, node): + instructions = [] + + tp = self._types_section[node.computed_type] + offset = (tp.attributes.index(node.attr) + 3) * 4 + + instructions.extend(self.visit(node.obj)) + instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.obj))) + if isinstance(node.obj, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + if type(node.value) == int: + instructions.append('{} {} {}'.format(o.li, r.t1, node.value)) + else: + instructions.extend(self.visit(node.value)) + instructions.append('{} {} {}'.format(o.lw, r.t1, self.find_var_loc(node.value))) + if isinstance(node.value, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + instructions.append('{} {} {}({})'.format(o.sw, r.t1, offset, r.t0)) + + return instructions + +# goto's + @visitor.when(GotoIfNode) + def visit(self, node): + instructions = [] + + mips_label = self.get_label(node.label) + instructions.extend(self.visit(node.condition)) + instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.condition))) + if isinstance(node.condition, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + instructions.append('{} {} {} {}'.format(o.bne, r.t0, r.zero, mips_label)) + + return instructions + + @visitor.when(GotoNode) + def visit(self, node): + instructions = [] + + mips_label = self.get_label(node.label) + instructions.append('{} {}'.format(o.j, mips_label)) + + return instructions + + @visitor.when(LabelNode) + def visit(self, node): + instructions = [] + + mips_label = self.get_label(node.label) + instructions.append('{}:'.format(mips_label)) + + return instructions + +# error + @visitor.when(ErrorNode) + def visit(self, node): + instructions = [] + + mips_label = self._data_section[node.data.name].label + instructions.append('{} {} {}'.format(o.li, r.v0, 4)) + instructions.append('{} {} {}'.format(o.la, r.a0, mips_label)) + instructions.append('{}'.format(o.syscall)) + instructions.append('{} {} {}'.format(o.li, r.v0, 10)) + instructions.append('{}'.format(o.syscall)) + + return instructions + +# + def string_equals(self): + instructions = [] + + instructions.append('{}:'.format('equal_str')) + instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, -24)) + instructions.append('{} {} {}({})'.format(o.sw, r.t0, 0, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t1, 4, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.a0, 8, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.a1, 12, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t2, 16, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t3, 20, r.sp)) + instructions.append('{} {} {}'.format(o.move, r.t0, r.a0)) + instructions.append('{} {} {}'.format(o.move, r.t1, r.a1)) + instructions.append('{}:'.format('while_equal_str')) + instructions.append('{} {} {}({})'.format(o.lb, r.t2, 0, r.t0)) + instructions.append('{} {} {}({})'.format(o.lb, r.t3, 0, r.t1)) + instructions.append('{} {} {} {}'.format(o.bne, r.t2, r.t3, 'equal_str_different_strings')) + instructions.append('{} {} {} {}'.format(o.beq, r.t2, r.zero, 'first_end_equal_str')) + instructions.append('{} {} {} {}'.format(o.beq, r.t3, r.zero, 'second_end_equal_str')) + instructions.append('{} {} {} {}'.format(o.addi, r.t1, r.t1, 1)) + instructions.append('{} {} {} {}'.format(o.addi, r.t0, r.t0, 1)) + instructions.append('{} {}'.format(o.j, 'while_equal_str')) + instructions.append('{}:'.format('equal_str_different_strings')) + instructions.append('{} {} {}'.format(o.move, r.v0, r.zero)) + instructions.append('{} {}'.format(o.j, 'equal_str_end')) + instructions.append('{}:'.format('first_end_equal_str')) + instructions.append('{} {} {} {}'.format(o.beq, r.t3, r.zero, 'second_end_equal_str')) + instructions.append('{} {} {}'.format(o.move, r.v0, r.zero)) + instructions.append('{} {}'.format(o.j, 'equal_str_end')) + instructions.append('{}:'.format('second_end_equal_str')) + instructions.append('{} {} {}'.format(o.li, r.v0, 1)) + instructions.append('{}:'.format('equal_str_end')) + instructions.append('{} {} {}({})'.format(o.lw, r.t0, 0, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t1, 4, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.a0, 8, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.a1, 12, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t2, 16, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t3, 20, r.sp)) + instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, 24)) + instructions.append('{} {}'.format(o.jr, r.ra)) + + return instructions + + def allocate(self): + instructions = [] + + instructions.append('{}:'.format('allocate')) + instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, -12)) + instructions.append('{} {} {}({})'.format(o.sw, r.a0, 0, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t0, 4, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t1, 8, r.sp)) + instructions.append('{} {} {}'.format(o.li, r.t0, 4)) + instructions.append('{} {} {}'.format(o.div, r.a0, r.t0)) + instructions.append('{} {}'.format(o.mfhi, r.t1)) + instructions.append('{} {} {} {}'.format(o.sub, r.t0, r.t0, r.t1)) + instructions.append('{} {} {} {}'.format(o.add, r.a0, r.a0, r.t0)) + instructions.append('{} {} {}'.format(o.li, r.v0, 9)) + instructions.append('{}'.format(o.syscall)) + instructions.append('{} {} {}({})'.format(o.lw, r.a0, 0, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t0, 4, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t1, 8, r.sp)) + instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, 12)) + instructions.append('{} {}'.format(o.jr, r.ra)) + + return instructions + + def copy(self): + instructions = [] + + instructions.append('{}:'.format('copy')) + instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, -16)) + instructions.append('{} {} {}({})'.format(o.sw, r.a0, 0, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.a1, 4, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.a2, 8, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t0, 12, r.sp)) + instructions.append('{}:'.format('while_copy')) + instructions.append('{} {} {} {}'.format(o.beq, r.a2, r.zero, 'copy_end')) + instructions.append('{} {} {}({})'.format(o.lw, r.t0, 0, r.a0)) + instructions.append('{} {} {}({})'.format(o.sw, r.t0, 0, r.a1)) + instructions.append('{} {} {} {}'.format(o.addiu, r.a0, r.a0, 4)) + instructions.append('{} {} {} {}'.format(o.addiu, r.a1, r.a1, 4)) + instructions.append('{} {} {} {}'.format(o.addi, r.a2, r.a2, -4)) + instructions.append('{} {}'.format(o.j, 'while_copy')) + instructions.append('{}:'.format('copy_end')) + instructions.append('{} {} {}({})'.format(o.lw, r.a0, 0, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.a1, 4, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.a2, 8, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t0, 12, r.sp)) + instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, 16)) + instructions.append('{} {}'.format(o.jr, r.ra)) + + return instructions + + def read_string(self): + instructions = [] + + instructions.append('{}:'.format('read_string')) + instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, -28)) + instructions.append('{} {} {}({})'.format(o.sw, r.ra, 0, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t0, 4, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t1, 8, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.a0, 12, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.a1, 16, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.a2, 20, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t2, 24, r.sp)) + instructions.append('{} {} {}'.format(o.li, r.t0, 8)) + instructions.append('{} {} {} {}'.format(o.addi, r.a0, r.t0, 4)) + instructions.append('{} {}'.format(o.jal, 'allocate')) + instructions.append('{} {} {}'.format(o.move, r.t1, r.v0)) + instructions.append('{} {} {}'.format(o.move, r.t2, r.zero)) + instructions.append('{}:'.format('while_read_string')) + instructions.append('{} {} {} {}'.format(o.addu, r.a0, r.t1, r.t2)) + instructions.append('{} {} {} {}'.format(o.subu, r.a1, r.t0, r.t2)) + instructions.append('{} {} {} {}'.format(o.addu, r.t2, r.t2, r.a1)) + instructions.append('{} {}'.format(o.jal, 'read_string_up_to')) + instructions.append('{} {} {} {}'.format(o.beq, r.v0, r.zero, 'read_string_not_finished')) + instructions.append('{} {} {}'.format(o.move, r.v0, r.t1)) + instructions.append('{} {}'.format(o.j, 'end_read_string')) + instructions.append('{}:'.format('read_string_not_finished')) + instructions.append('{} {} {} {}'.format(o.sll, r.t0, r.t0, 1)) + instructions.append('{} {} {} {}'.format(o.addi, r.a0, r.t0, 4)) + instructions.append('{} {}'.format(o.jal, 'allocate')) + instructions.append('{} {} {}'.format(o.move, r.a0, r.t1)) + instructions.append('{} {} {}'.format(o.move, r.t1, r.v0)) + instructions.append('{} {} {}'.format(o.move, r.a1, r.v0)) + instructions.append('{} {} {}'.format(o.move, r.a2, r.t2)) + instructions.append('{} {}'.format(o.jal, 'copy')) + instructions.append('{} {}'.format(o.j, 'while_read_string')) + instructions.append('{}:'.format('end_read_string')) + instructions.append('{} {} {}({})'.format(o.lw, r.ra, 0, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t0, 4, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t1, 8, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.a0, 12, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.a1, 16, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.a2, 20, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t2, 24, r.sp)) + instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, 28)) + instructions.append('{} {}'.format(o.jr, r.ra)) + instructions.append('{}:'.format('read_string_up_to')) + instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, -28)) + instructions.append('{} {} {}({})'.format(o.sw, r.ra, 0, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t0, 4, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t1, 8, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t2, 12, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t3, 16, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t4, 20, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t5, 24, r.sp)) + instructions.append('{} {} {}'.format(o.move, r.t0, r.a0)) + instructions.append('{} {} {}'.format(o.move, r.t1, r.zero)) + instructions.append('{} {} {}'.format(o.li, r.t2, 10)) + instructions.append('{} {} {} {}'.format(o.addu, r.t3, r.t0, r.a1)) + instructions.append('{} {} {} {}'.format(o.addiu, r.a1, r.a1, 1)) + instructions.append('{} {} {}'.format(o.li, r.v0, 8)) + instructions.append('{}'.format(o.syscall)) + instructions.append('{} {} {}({})'.format(o.lw, r.a0, 0, r.a0)) + instructions.append('{} {} {} {}'.format(o.beq, r.a0, r.zero, 'eol_terminated')) + instructions.append('{} {} {}'.format(o.li, r.v0, 0)) + instructions.append('{}:'.format('eol_check')) + instructions.append('{} {} {} {}'.format(o.beq, r.t0, r.t3, 'read_loop_continue')) + instructions.append('{} {} {}({})'.format(o.lb, r.t1, 0, r.t0)) + instructions.append('{} {} {} {}'.format(o.beq, r.t1, r.t2, 'eol_terminated')) + instructions.append('{} {} {} {}'.format(o.addiu, r.t0, r.t0, 1)) + instructions.append('{} {}'.format(o.j, 'eol_check')) + instructions.append('{}:'.format('eol_terminated')) + instructions.append('{} {} {}({})'.format(o.sb, r.zero, 0, r.t0)) + instructions.append('{} {} {}'.format(o.li, r.v0, 1)) + instructions.append('{}:'.format('read_loop_continue')) + instructions.append('{} {} {}({})'.format(o.lw, r.ra, 0, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t0, 4, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t1, 8, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t2, 12, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t3, 16, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t4, 20, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t5, 24, r.sp)) + instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, 28)) + instructions.append('{} {}'.format(o.jr, r.ra)) + + return instructions + + def substring(self): + instructions = [] + + instructions.append('{}:'.format('substr')) + instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, -32)) + instructions.append('{} {} {}({})'.format(o.sw, r.t0, 0, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t1, 4, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t2, 8, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t3, 12, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.a0, 16, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.a1, 20, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.a2, 24, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.ra, 28, r.sp)) + instructions.append('{} {} {}'.format(o.move, r.t0, r.a0)) + instructions.append('{} {} {} {}'.format(o.add, r.t0, r.t0, r.a1)) + instructions.append('{} {} {}'.format(o.li, r.t1, 4)) + instructions.append('{} {} {}'.format(o.div, r.a2, r.t1)) + instructions.append('{} {}'.format(o.mfhi, r.t2)) + instructions.append('{} {} {} {}'.format(o.bne, r.t2, r.zero, 'substr_allign_size')) + instructions.append('{} {} {}'.format(o.move, r.t1, r.a2)) + instructions.append('{} {}'.format(o.j, 'substr_new_chunk')) + instructions.append('{}:'.format('substr_allign_size')) + instructions.append('{} {} {} {}'.format(o.sub, r.t1, r.t1, r.t2)) + instructions.append('{} {} {} {}'.format(o.add, r.t1, r.t1, r.a2)) + instructions.append('{}:'.format('substr_new_chunk')) + instructions.append('{} {} {}'.format(o.move, r.a0, r.t1)) + instructions.append('{} {}'.format(o.jal, 'allocate')) + instructions.append('{} {} {}'.format(o.move, r.t3, r.v0)) + instructions.append('{} {} {}'.format(o.move, r.t1, r.zero)) + instructions.append('{}:'.format('while_substr_copy')) + instructions.append('{} {} {} {}'.format(o.beq, r.t1, r.a2, 'substr_end')) + instructions.append('{} {} {}({})'.format(o.lb, r.t2, 0, r.t0)) + instructions.append('{} {} {}({})'.format(o.sb, r.t2, 0, r.t3)) + instructions.append('{} {} {} {}'.format(o.addiu, r.t0, r.t0, 1)) + instructions.append('{} {} {} {}'.format(o.addiu, r.t3, r.t3, 1)) + instructions.append('{} {} {} {}'.format(o.addiu, r.t1, r.t1, 1)) + instructions.append('{} {}'.format(o.j, 'while_substr_copy')) + instructions.append('{}:'.format('substr_end')) + instructions.append('{} {} {}({})'.format(o.sb, r.zero, 0, r.t3)) + instructions.append('{} {} {}({})'.format(o.lw, r.t0, 0, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t1, 4, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t2, 8, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t3, 12, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.a0, 16, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.a1, 20, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.a2, 24, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.ra, 28, r.sp)) + instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, 32)) + instructions.append('{} {}'.format(o.jr, r.ra)) + + return instructions + + def concat(self): + instructions = [] + + instructions.append('{}:'.format('concat')) + instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, -24)) + instructions.append('{} {} {}({})'.format(o.sw, r.t0, 0, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t1, 4, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t2, 8, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.a0, 12, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.a1, 16, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.ra, 20, r.sp)) + instructions.append('{} {} {}'.format(o.move, r.t0, r.a0)) + instructions.append('{} {} {}'.format(o.move, r.t1, r.a1)) + instructions.append('{} {} {} {}'.format(o.addiu, r.a0, r.a2, 1)) + instructions.append('{} {} {}'.format(o.li, r.t2, 4)) + instructions.append('{} {} {}'.format(o.div, r.a0, r.t2)) + instructions.append('{} {}'.format(o.mfhi, r.a0)) + instructions.append('{} {} {} {}'.format(o.bne, r.a0, r.zero, 'concat_allign_size')) + instructions.append('{} {} {} {}'.format(o.addiu, r.a0, r.a2, 1)) + instructions.append('{} {}'.format(o.j, 'concat_size_allignned')) + instructions.append('{}:'.format('concat_allign_size')) + instructions.append('{} {} {} {}'.format(o.sub, r.t2, r.t2, r.a0)) + instructions.append('{} {} {} {}'.format(o.add, r.a0, r.a2, r.t2)) + instructions.append('{} {} {} {}'.format(o.addiu, r.a0, r.a0, 1)) + instructions.append('{}:'.format('concat_size_allignned')) + instructions.append('{} {}'.format(o.jal, 'allocate')) + instructions.append('{} {} {}'.format(o.move, r.t2, r.v0)) + instructions.append('{} {}'.format(o.j, 'first_while_concat_copy')) + instructions.append('{}:'.format('first_while_concat_copy')) + instructions.append('{} {} {}({})'.format(o.lb, r.a0, 0, r.t0)) + instructions.append('{} {} {} {}'.format(o.beq, r.a0, r.zero, 'second_while_concat_copy')) + instructions.append('{} {} {}({})'.format(o.sb, r.a0, 0, r.t2)) + instructions.append('{} {} {} {}'.format(o.addiu, r.t0, r.t0, 1)) + instructions.append('{} {} {} {}'.format(o.addiu, r.t2, r.t2, 1)) + instructions.append('{} {}'.format(o.j, 'first_while_concat_copy')) + instructions.append('{}:'.format('second_while_concat_copy')) + instructions.append('{} {} {}({})'.format(o.lb, r.a0, 0, r.t1)) + instructions.append('{} {} {} {}'.format(o.beq, r.a0, r.zero, 'concat_end')) + instructions.append('{} {} {}({})'.format(o.sb, r.a0, 0, r.t2)) + instructions.append('{} {} {} {}'.format(o.addiu, r.t1, r.t1, 1)) + instructions.append('{} {} {} {}'.format(o.addiu, r.t2, r.t2, 1)) + instructions.append('{} {}'.format(o.j, 'second_while_concat_copy')) + instructions.append('{}:'.format('concat_end')) + instructions.append('{} {} {}({})'.format(o.sb, r.zero, 0, r.t2)) + instructions.append('{} {} {}({})'.format(o.lw, r.t0, 0, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t1, 4, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t2, 8, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.a0, 12, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.a1, 16, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.ra, 20, r.sp)) + instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, 24)) + instructions.append('{} {}'.format(o.jr, r.ra)) + + return instructions + + def length(self): + instructions = [] + + instructions.append('{}:'.format('length')) + instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, -8)) + instructions.append('{} {} {}({})'.format(o.sw, r.t0, 0, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t1, 4, r.sp)) + instructions.append('{} {} {}'.format(o.move, r.t0, r.a0)) + instructions.append('{} {} {}'.format(o.move, r.v0, r.zero)) + instructions.append('{}:'.format('while_len')) + instructions.append('{} {} {}({})'.format(o.lb, r.t1, 0, r.t0)) + instructions.append('{} {} {} {}'.format(o.beq, r.t1, r.zero, 'len_end')) + instructions.append('{} {} {} {}'.format(o.addi, r.v0, r.v0, 1)) + instructions.append('{} {} {} {}'.format(o.addiu, r.t0, r.t0, 1)) + instructions.append('{} {}'.format(o.j, 'while_len')) + instructions.append('{}:'.format('len_end')) + instructions.append('{} {} {}({})'.format(o.lw, r.t0, 0, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t1, 4, r.sp)) + instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, 8)) + instructions.append('{} {}'.format(o.jr, r.ra)) + + return instructions + + def define_util_functions(self): + instructions = [self.string_equals(), self.allocate(), self.copy(), self.read_string(), self.substring(), self.concat(), self.length()] + + code = '\n\n'.join('\n'.join(i for i in j) for j in instructions) + return code + \ No newline at end of file diff --git a/src/visitors/Collector.py b/src/visitors/Collector.py new file mode 100755 index 000000000..ee5eeb74d --- /dev/null +++ b/src/visitors/Collector.py @@ -0,0 +1,39 @@ +from cool_ast.cool_ast import ProgramNode, ClassDeclarationNode +import visitors.visitor as visitor +from utils.semantic import Context, SemanticError +from utils.errors import _SemanticError + + +class TypeCollector: + def __init__(self, context = Context(), errors = []): + self.errors = errors + self.context = context + + @visitor.on('node') + def visit(self, node): + pass + + @visitor.when(ProgramNode) + def visit(self, node): + self.context.create_type('Object') + self.context.create_type('Int') + self.context.create_type('Bool') + self.context.create_type('String') + self.context.create_type('IO') + self.context.create_type('SELF_TYPE') + # self.context.create_type('AUTO_TYPE') + + for declaration in node.declarations: + self.visit(declaration) + + @visitor.when(ClassDeclarationNode) + def visit(self, node): + try: + self.context.create_type(node.id) + except SemanticError as e: + f = e.text.find(')') + typo = e.text[25:f] + if typo in ("Int", "String", "Bool", "SELF_TYPE", "IO", "Object"): + self.errors.append(_SemanticError % (node.token_list[1].lineno, node.token_list[1].col, f"Redefinition of basic class {typo}.")) + else: + self.errors.append(_SemanticError % (node.token_list[1].lineno, node.token_list[1].col, f"Classes may not be redefined")) \ No newline at end of file diff --git a/src/visitors/CooltoCil.py b/src/visitors/CooltoCil.py new file mode 100644 index 000000000..c027559c4 --- /dev/null +++ b/src/visitors/CooltoCil.py @@ -0,0 +1,1161 @@ +from cool_ast.cool_ast import * +import cil_ast.cil_ast as cil +from utils.semantic import VariableInfo +import visitors.visitor as visitor + +class BaseCOOLToCILVisitor: + def __init__(self, context): + self.dottypes = [] + self.dotdata = [] + self.dotcode = [] + self.current_type = None + self.current_function = None + + self.context = context + self._self = VariableInfo('self', None) + + self.dvars = {} + self.ctrs = {} + self.dtypes = {} + + self.breakline_data = self.register_data('\n') + self.emptystring_data = self.register_data('') + + self.locals = {} + + + def transform_to_keys(self, xtype, keys): + for i, key in enumerate(keys): + xtype.attrs[key] = i + return xtype.attrs + + # def build_type(self, node): + # type = self.createClass(node.id) + # self.dtypes[node.id.lex] = type + # ctype = self.context.get_type(node.id.lex) + + # queue = [] + # while ctype is not None: + # queue.append(ctype) + # ctype = ctype.parent + + # rqueue = [ queue[i] for i in range(len(queue)-1, -1, -1)] #.reverse() + # for i in rqueue: + # _ = 0 + # mm = sorted(i.methods) + # attribs = sorted(i.attributes) + # for attr in attribs: + # type.attributes[attr.name] = cil.AttributeNode(attr.name, i.name) + # for meth in mm: + # type.methods[meth] = self.to_function_name(meth, i.name) + + + @property + def params(self): + return self.current_function.params + + @property + def localvars(self): + return self.current_function.localvars + + @property + def instructions(self): + return self.current_function.instructions + + + def register_param(self, p): + # try: + # p.lex + # except: + # _ = 0 + name = f'param_at_{self.current_function.name}_{p.name}_{len(self.params)}' + pnode = cil.ParamNode(name) + self.dvars[p.name] = cil.VarNode(name) + self.params.append(pnode) + return self.dvars[p.name] + + def register_local(self, v): + name = v.name + try: + v.lex + except: + _ = 0 + v.name = f'local_{self.current_function.name[9:]}_{v.name}_{len(self.localvars)}' + local_node = cil.LocalNode(v.name) + self.dvars[name] = cil.VarNode(v.name) + self.localvars.append(local_node) + return self.dvars[name] + + def register_attribute(self, name, type): + name = f'attr_{type}_{name}' + return cil.AttributeNode(name, type) + + def define_internal_local(self): + vinfo = VariableInfo('internal', None) + return self.register_local(vinfo) + + def register_instruction(self, instruction): + self.instructions.append(instruction) + return instruction + + def to_function_name(self, method_name, type_name): + return f'function_{method_name}_at_{type_name}' + + def register_function(self, function_name): + function_node = cil.FunctionNode(function_name, [], [], []) + self.dotcode.append(function_node) + return function_node + + def createClass(self, name): + tnod = cil.TypeNode(name) + self.dtypes[name] = tnod + self.dottypes.append(tnod) + return tnod + + def register_data(self, val): + name = f'data_{len(self.dotdata)}' + dnod = cil.DataNode(name, val) + self.dotdata.append(dnod) + return dnod + + def addLabel(self, label): + lname = f'{label}_{self.current_function.labels_count}' + self.current_function.labels_count += 1 + return cil.LabelNode(lname) + + def ctor(self, name): + return '__ctor_{}'.format(name) + + def attrib_ctor_name(self, name): + return '__attributes_ctor_{}'.format(name) + + + def create_ctr(self, class_node, scope): + attrs = [att for att in class_node.features if isinstance(att, AttrDeclarationNode)] + while True: + break + self.current_function = self.register_function(self.to_function_name('ctor', self.current_type.name)) + self.register_instruction(cil.ParamNode('self')) + + for i, attr in enumerate(attrs): + set_attr_node = self.visit(attr, scope) + set_attr_node.index = i + self.register_instruction(set_attr_node) + self.register_instruction(cil.ReturnNode(VariableInfo('self', self.current_type))) + + + def add_runtime_exception(self, cond, msg): + error_node = self.addLabel('error_label') + continue_node = self.addLabel('end_label') + self.register_instruction(cil.GotoIfNode(error_node.label, cond)) + self.register_instruction(cil.GotoNode(continue_node.label)) + self.register_instruction(error_node) + dnod = self.register_data(msg) + self.register_instruction(cil.ErrorNode(dnod)) + self.register_instruction(continue_node) + + def build_basic(self): + tnod = self.createClass('Object') + self.current_function = self.register_function(self.ctor('Object')) + instance = self.define_internal_local() + self.register_instruction(cil.AllocateNode('Object', instance)) + self.register_instruction(cil.ReturnNode(instance)) + + self.current_function = self.register_function(self.to_function_name('abort', 'Object')) + self_ref = self.register_param(self._self) + vname = self.define_internal_local() + abort_data = self.register_data('Abort called from class ') + self.register_instruction(cil.LoadNode(vname, abort_data)) + self.register_instruction(cil.PrintStringNode(vname)) + self.register_instruction(cil.TypeOfNode(vname, self_ref)) + self.register_instruction(cil.PrintStringNode(vname)) + self.register_instruction(cil.LoadNode(vname, self.breakline_data)) + self.register_instruction(cil.PrintStringNode(vname)) + self.register_instruction(cil.ExitNode()) + + self.current_function = self.register_function(self.to_function_name('type_name', 'Object')) + self_ref = self.register_param(self._self) + result = self.define_internal_local() + self.register_instruction(cil.TypeOfNode(result, self_ref)) + instance = self.define_internal_local() + self.register_instruction(cil.ArgNode(result)) + self.register_instruction(cil.StaticCallNode(self.ctor('String'), instance)) + self.register_instruction(cil.ReturnNode(instance)) + + self.current_function = self.register_function(self.to_function_name('copy', 'Object')) + self_ref = self.register_param(self._self) + result = self.define_internal_local() + self.register_instruction(cil.CopyNode(result, self_ref)) + self.register_instruction(cil.ReturnNode(result)) + + tnod.methods = {name: self.to_function_name(name, 'Object') for name in ['abort', 'type_name', 'copy']} + tnod.methods['ctor'] = self.ctor('Object') + obj_methods = ['abort', 'type_name', 'copy'] + + tnod = self.createClass('IO') + self.current_function = self.register_function(self.ctor('IO')) + instance = self.define_internal_local() + self.register_instruction(cil.AllocateNode('IO', instance)) + self.register_instruction(cil.ReturnNode(instance)) + self.current_function = self.register_function(self.to_function_name('out_string', 'IO')) + self_ref = self.register_param(self._self) + x = self.register_param(VariableInfo('x', None)) + vname = self.define_internal_local() + self.register_instruction(cil.GetAttribNode(vname, x, '__prop', 'String')) + self.register_instruction(cil.PrintStringNode(vname)) + self.register_instruction(cil.ReturnNode(self_ref)) + + self.current_function = self.register_function(self.to_function_name('out_int', 'IO')) + self_ref = self.register_param(self._self) + x = self.register_param(VariableInfo('x', None)) + vname = self.define_internal_local() + self.register_instruction(cil.GetAttribNode(vname, x, '__prop', 'Int')) + self.register_instruction(cil.PrintIntNode(vname)) + self.register_instruction(cil.ReturnNode(self_ref)) + + self.current_function = self.register_function(self.to_function_name('in_string', 'IO')) + self_ref = self.register_param(self._self) + result = self.define_internal_local() + self.register_instruction(cil.ReadStringNode(result)) + instance = self.define_internal_local() + self.register_instruction(cil.ArgNode(result)) + self.register_instruction(cil.StaticCallNode(self.ctor('String'), instance)) + self.register_instruction(cil.ReturnNode(instance)) + + self.current_function = self.register_function(self.to_function_name('in_int', 'IO')) + self_ref = self.register_param(self._self) + result = self.define_internal_local() + self.register_instruction(cil.ReadIntNode(result)) + instance = self.define_internal_local() + self.register_instruction(cil.ArgNode(result)) + self.register_instruction(cil.StaticCallNode(self.ctor('Int'), instance)) + self.register_instruction(cil.ReturnNode(instance)) + + tnod.methods = {method: self.to_function_name(method, 'Object') for method in obj_methods} + tnod.methods.update({name: self.to_function_name(name, 'IO') for name in + ['out_string', 'out_int', 'in_string', 'in_int']}) + tnod.methods['ctor'] = self.ctor('IO') + + + tnod = self.createClass('String') + tnod.attributes = {name:self.register_attribute(name, 'String') for name in ['__prop', 'length']} + self.current_function = self.register_function(self.ctor('String')) + val = self.register_param(VariableInfo('val', None)) + instance = self.define_internal_local() + self.register_instruction(cil.AllocateNode('String', instance)) + self.register_instruction(cil.SetAttribNode(instance, '__prop', val, 'String')) + result = self.define_internal_local() + self.register_instruction(cil.LengthNode(result, val)) + attr = self.define_internal_local() + self.register_instruction(cil.ArgNode(result)) + self.register_instruction(cil.StaticCallNode(self.ctor('Int'), attr)) + self.register_instruction(cil.SetAttribNode(instance, 'length', attr, 'String')) + self.register_instruction(cil.ReturnNode(instance)) + + self.current_function = self.register_function(self.to_function_name('length', 'String')) + self_ref = self.register_param(self._self) + result = self.define_internal_local() + self.register_instruction(cil.GetAttribNode(result, self_ref, 'length', 'String')) + self.register_instruction(cil.ReturnNode(result)) + + self.current_function = self.register_function(self.to_function_name('concat', 'String')) + self_ref = self.register_param(self._self) + s = self.register_param(VariableInfo('s', None)) + str_1 = self.define_internal_local() + str_2 = self.define_internal_local() + length_1 = self.define_internal_local() + length_2 = self.define_internal_local() + self.register_instruction(cil.GetAttribNode(str_1, self_ref, '__prop', 'String')) + self.register_instruction(cil.GetAttribNode(str_2, s, '__prop', 'String')) + self.register_instruction(cil.GetAttribNode(length_1, self_ref, 'length', 'String')) + self.register_instruction(cil.GetAttribNode(length_2, s, 'length', 'String')) + self.register_instruction(cil.GetAttribNode(length_1, length_1, '__prop', 'Int')) + self.register_instruction(cil.GetAttribNode(length_2, length_2, '__prop', 'Int')) + self.register_instruction(cil.PlusNode(length_1, length_1, length_2)) + + result = self.define_internal_local() + self.register_instruction(cil.ConcatNode(result, str_1, str_2, length_1)) + instance = self.define_internal_local() + self.register_instruction(cil.ArgNode(result)) + self.register_instruction(cil.StaticCallNode(self.ctor('String'), instance)) + self.register_instruction(cil.ReturnNode(instance)) + + self.current_function = self.register_function(self.to_function_name('substr', 'String')) + self_ref = self.register_param(self._self) + i = self.register_param(VariableInfo('i', None)) + l = self.register_param(VariableInfo('l', None)) + result = self.define_internal_local() + substrIndex = self.define_internal_local() + strlength = self.define_internal_local() + length_wrapper = self.define_internal_local() + length_attr = self.define_internal_local() + length_substr = self.define_internal_local() + less_value = self.define_internal_local() + str_value = self.define_internal_local() + self.register_instruction(cil.GetAttribNode(str_value, self_ref, '__prop', 'String')) + self.register_instruction(cil.GetAttribNode(substrIndex, i, '__prop', 'Int')) + self.register_instruction(cil.GetAttribNode(strlength, l, '__prop', 'Int')) + + self.register_instruction(cil.GetAttribNode(length_wrapper, self_ref, 'length', 'String')) + self.register_instruction(cil.GetAttribNode(length_attr, length_wrapper, '__prop', 'Int')) + self.register_instruction(cil.PlusNode(length_substr, strlength, substrIndex)) + self.register_instruction(cil.LessNode(less_value, length_attr, length_substr)) + self.add_runtime_exception(less_value, 'Index out of range exception') + self.register_instruction(cil.SubstringNode(result, str_value, substrIndex, strlength)) + instance = self.define_internal_local() + self.register_instruction(cil.ArgNode(result)) + self.register_instruction(cil.StaticCallNode(self.ctor('String'), instance)) + self.register_instruction(cil.ReturnNode(instance)) + + tnod.methods = {method: self.to_function_name(method, 'Object') for method in obj_methods} + tnod.methods.update({name: self.to_function_name(name, 'String') for name in ['length', 'concat', 'substr']}) + tnod.methods['ctor'] = self.ctor('String') + + tnod = self.createClass('Int') + tnod.attributes = {name:self.register_attribute(name, 'Int') for name in ['__prop']} + self.current_function = self.register_function(self.ctor('Int')) + val = self.register_param(VariableInfo('val', None)) + instance = self.define_internal_local() + self.register_instruction(cil.AllocateNode('Int', instance)) + self.register_instruction(cil.SetAttribNode(instance, '__prop', val, 'Int')) + self.register_instruction(cil.ReturnNode(instance)) + tnod.methods = {method:self.to_function_name(method, 'Object') for method in obj_methods} + tnod.methods['ctor'] = self.ctor('Int') + + tnod = self.createClass('Bool') + tnod.attributes = {name:self.register_attribute(name, 'Bool') for name in ['__prop']} + self.current_function = self.register_function(self.ctor('Bool')) + val = self.register_param(VariableInfo('val', None)) + instance = self.define_internal_local() + self.register_instruction(cil.AllocateNode('Bool', instance)) + self.register_instruction(cil.SetAttribNode(instance, '__prop', val, 'Bool')) + self.register_instruction(cil.ReturnNode(instance)) + tnod.methods = {method: self.to_function_name(method, 'Object') for method in obj_methods} + tnod.methods['ctor'] = self.ctor('Bool') + + + + +class COOLToCILVisitor(BaseCOOLToCILVisitor): + @visitor.on('node') + def visit(self, node): + pass + + def class_node_from_context(self, type): + idx = type.name + features = self.features_from_context(type) + parent = 'Object' if idx not in ['Object', 'Void'] else None + return ClassDeclarationNode(idx, features, parent) + + def features_from_context(self, type): + feats = [AttrDeclarationNode(feat.name, feat.type) for feat in type.attributes] + for func in type.methods: + feats.append(FuncDeclarationNode(func.name, func.param_names, func.return_type, None)) + + return feats + + + def build_types(self, node): + type = self.createClass(node.id) + self.dtypes[node.id] = type + ctype = self.context.get_type(node.id) + + queue = [] + while ctype is not None: + queue.append(ctype) + ctype = ctype.parent + + # queue.reverse() + rqueue = [ queue[i] for i in range(len(queue)-1, -1, -1)] #.reverse() + for i in rqueue: + _ = 0 + methods = [m.name for m in i.methods] + _attributes = i.attributes + attributes = [x.name for x in _attributes] + methods.sort() + attributes.sort() + for attr in attributes: + type.attributes[attr] = cil.AttributeNode(attr, i.name) + for meth in methods: + type.methods[meth] = self.to_function_name(meth, i.name) + + + # def build_type(self, node): + # type = self.createClass(node.id) + # self.dtypes[node.id.lex] = type + # ctype = self.context.get_type(node.id.lex) + + # queue = [] + # while ctype is not None: + # queue.append(ctype) + # ctype = ctype.parent + + # rqueue = [ queue[i] for i in range(len(queue)-1, -1, -1)] #.reverse() + # for i in rqueue: + # _ = 0 + # mm = sorted(i.methods) + # attribs = sorted(i.attributes) + # for attr in attribs: + # type.attributes[attr.name] = cil.AttributeNode(attr.name, i.name) + # for meth in mm: + # type.methods[meth] = self.to_function_name(meth, i.name) + + + + @visitor.when(ProgramNode) + def visit(self, node, scope): + ###################################################### + # node.declarations -> [ ClassDeclarationNode ... ] + ###################################################### + self.build_basic() + self.current_function = None + + self.current_function = self.register_function('entry') + inst = self.define_internal_local() + + + self.register_instruction(cil.StaticCallNode(self.ctor('Main'), inst)) + self.register_instruction(cil.ArgNode(inst)) + self.register_instruction(cil.StaticCallNode(self.to_function_name('main', 'Main'),inst)) + self.register_instruction(cil.ReturnNode(0)) + + for typ in node.declarations: + self.build_types(typ) + + for i, typ in enumerate(node.declarations): + self.visit(typ, scope.children[i]) + + return cil.ProgramNode(self.dottypes, self.dotdata, self.dotcode) + + + @visitor.when(ClassDeclarationNode) + def visit(self, node, scope): + #################################################################### + # node.id -> str + # node.parent -> str + # node.features -> [ FuncDeclarationNode/AttrDeclarationNode ... ] + #################################################################### + self.current_type = self.context.get_type(node.id) + type = self.dtypes[node.id] + + self.current_function = self.register_function(self.attrib_ctor_name(node.id)) + type.methods['__attributes_ctor'] = self.current_function.name + self_ref = self.register_param(self._self) + + # for at in type.attributes: + # # try: + # # type[attributes][at] + # # except: + # # _ = 0 + # self.localvars.append(type.attributes[at]) + + self.dvars.update({i:cil.AttributeNode(j.name, type.name) + for i,j in type.attributes.items()}) + + self._self.name = self_ref + if self.current_type.parent.name not in ('Object', 'IO'): + dst = self.define_internal_local() + self.register_instruction(cil.ArgNode(self_ref)) + self.register_instruction(cil.StaticCallNode( + self.attrib_ctor_name(self.current_type.parent.name), dst)) + + for i, feat in enumerate(node.features): + if isinstance(feat, AttrDeclarationNode): + # try: + self.visit(feat, scope.children[i]) + self.register_instruction(cil.SetAttribNode(self_ref, feat.id, feat.noted_value, node.id,)) + # except Exception as e: + # _ = 0 + self.register_instruction(cil.ReturnNode(self_ref)) + + # for feat, child in zip(node.features, scope.children): + for i, feat in enumerate(node.features): + if isinstance(feat, FuncDeclarationNode): + # try: + self.visit(feat, scope.children[i]) + # except Exception as e: + # _ = 0 + self._self.name = 'self' + + self.current_function = self.register_function(self.ctor(node.id)) + type.methods['__ctor'] = self.current_function.name + # for at in type.attributes: + # self.localvars.append(type.attributes[at]) + + instance = self.define_internal_local() + self.register_instruction(cil.AllocateNode(node.id, instance)) + + dst = self.define_internal_local() + self.register_instruction(cil.ArgNode(instance)) + self.register_instruction(cil.StaticCallNode(self.attrib_ctor_name(node.id), dst)) + + self.register_instruction(cil.ReturnNode(dst)) + + self.current_function = None + self.current_type = None + + @visitor.when(AttrDeclarationNode) + def visit(self, node, scope): + ############################### + # node.id -> str + # node.type -> str + # node.value = ExpressionNode + ############################### + # local function to determine the default value of an attribute given its type + def default_value_init(type): + if type == 'Int': + return ConstantNumNode(0) + elif type == 'Bool': + return FalseNode() + elif type == 'String': + return StringNode("") + else: + return VoidNode('void') + + dst = self.define_internal_local() + if node.value: + a = 0 + self.visit(node.value, scope.children[0]) + self.register_instruction(cil.AssignNode(dst, node.value.noted_value)) + + + elif node.type.name in ['SELF_TYPE', 'Int', 'Bool', 'String']: + if node.type.name == 'SELF_TYPE': + checked_t = self.current_type.name + else: + checked_t = node.type.name + + if checked_t == 'String': + data = self.emptystring_data + self.register_instruction(cil.LoadNode(dst, data)) + self.register_instruction(cil.ArgNode(dst)) + elif checked_t in ['Int', 'Bool']: + self.register_instruction(cil.ArgNode(0)) + else: + raise Exception('...builtin type not found? or bad registered type') + self.register_instruction(cil.StaticCallNode(self.ctor(checked_t), dst)) + node.noted_value = dst + + @visitor.when(FuncDeclarationNode) + def visit(self, node, scope): + ############################### + # node.id -> str + # node.params -> [ (str, str) ... ] + # node.type -> str + # node.body -> [ ExpressionNode ... ] + ############################### + m = self.current_type.get_method(node.id, self.current_type, False) + type = self.dtypes[self.current_type.name] + self.current_function = self.register_function(self.to_function_name(m.name, self.current_type.name)) + # for at in type.attributes: + # self.localvars.append(type.attributes[at]) + + self_ref = self.register_param(self._self) + self._self.name = self_ref + for param, type in node.params: + self.register_param(VariableInfo(param, type)) + + self.visit(node.body, scope) + self.register_instruction(cil.ReturnNode(node.body.noted_value)) + self._self.name = 'self' + + @visitor.when(VarDeclarationNode) # AssignNode + def visit(self, node, scope): + ############################### + # node.id -> str + # node.type -> str + # node.expr -> ExpressionNode + ############################### + var = scope.find_variable(node.id) + dest = self.locals[var.name] = self.register_local(var) + + if node.expr is not None: + source = self.visit(node.expr, scope) + else: + if node.type.name.lower() == 'int': + source = 0 + elif node.type.name.lower() == 'string': + source = '' + elif node.type.name.lower() == 'bool': + source = False + else: + source = None + self.register_instruction(cil.AssignNode(dest, source)) + return dest + + @visitor.when(AssignNode) # + def visit(self, node, scope): + ############################### + # node.id -> str + # node.expr -> ExpressionNode + ############################### + dst = self.dvars[node.id] + self.visit(node.expr, scope.children[0]) + self.register_instruction(cil.AssignNode(dst, node.expr.noted_value)) + node.noted_value = dst + + @visitor.when(CallNode) + def visit(self, node, scope): + ############################### + # node.obj -> AtomicNode + # node.method -> str + # node.args -> [ ExpressionNode ... ] + ############################### + if isinstance(node.obj, CallNode) : + _ = 0 + try: + if node.method == 'type_name': + _ = 0 + except: + pass + if node.obj: + args = [] + for arg in node.args: + self.visit(arg, scope) + args.append(cil.ArgNode(arg.noted_value)) + + self.visit(node.obj, scope) + + + void = cil.VoidNode() + isvoid = self.define_internal_local() + self.register_instruction(cil.EqualNode(isvoid, node.obj.noted_value, void)) + self.add_runtime_exception(isvoid, 'Function call in a void instance') + + self.register_instruction(cil.ArgNode(node.obj.noted_value)) + for arg in args: self.register_instruction(arg) + nval1 = self.define_internal_local() + + checked_t = node.obj.type.name + # if isinstance(node.obj, InstantiateNode): + # checked_t = node.obj.lex + # elif isinstance(node.obj, CallNode): + # checked_t = node.type.name + # else: + # checked_t = scope.find_variable(node.obj.lex) + # if checked_t is None: + # if isinstance(node.obj, StringNode): + # checked_t = 'String' + # else: + # raise Exception("calling a function in a dst not found that is not a string wtf :D") + # else: + # checked_t = checked_t.type.name + + if node.parent is not None: + # checked_t = node.type.lex + nodefunc = self.dtypes[node.parent].methods[node.method] + if nodefunc == '__ctor_type Object {\n\t[method] abort(): Object;\n\t[method] type_name(): String;\n\t[method] copy(): SELF_TYPE;\n}\n': + _ = 0 + self.register_instruction(cil.StaticCallNode(self.dtypes[node.parent].methods[node.method], nval1)) + else: + # checked_t = node.obj.static_type.name + self.register_instruction(cil.ArgNode(node.obj.noted_value)) + self.register_instruction(cil.DynamicCallNode(checked_t, self.dtypes[checked_t].methods[node.method], nval1)) + + + node.noted_value = nval1 + + else: + nval2 = self.define_internal_local() + + args = [] + for arg in node.args: + self.visit(arg, scope) + args.append(cil.ArgNode(arg.noted_value)) + + self.register_instruction(cil.ArgNode(self._self.name)) + for arg in args: self.register_instruction(arg) + self.register_instruction(cil.ArgNode(self._self.name)) + + checked_t = self.current_type.name + self.register_instruction(cil.DynamicCallNode(checked_t, self.dtypes[checked_t].methods[node.method], nval2)) + node.noted_value = nval2 + + + @visitor.when(ConstantNumNode) + def visit(self, node, scope): + ############################### + # node.lex -> str + ############################### + nval = self.define_internal_local() + + self.register_instruction(cil.ArgNode(node.lex)) + self.register_instruction(cil.StaticCallNode(self.ctor('Int'), nval)) + node.noted_value = nval + + @visitor.when(VariableNode) + def visit(self, node, scope): + ############################### + # node.lex -> str + ############################### + if node.lex == 'self': + node.noted_value = self._self.name + else: + node.noted_value = self.dvars[node.lex] + + @visitor.when(InstantiateNode) + def visit(self, node, scope): + ############################### + # node.lex -> str + ############################### + instval = self.define_internal_local() + + if node.type.name == 'SELF_TYPE': + checked_t = self.current_type.name + else: + checked_t = node.type.name + + if checked_t in ['Int', 'Bool']: + self.register_instruction(cil.ArgNode(0)) + elif checked_t == 'String': + data = self.emptystring_data + dst = self.define_internal_local() + self.register_instruction(cil.LoadNode(dst, data)) + self.register_instruction(cil.ArgNode(dst)) + self.register_instruction(cil.StaticCallNode(self.ctor(checked_t), instval)) + node.noted_value = instval + + @visitor.when(PlusNode) + def visit(self, node, scope): + ############################### + # node.left -> ExpressionNode + # node.right -> ExpressionNode + ############################### + nval = self.define_internal_local() + left = self.define_internal_local() + right = self.define_internal_local() + value = self.define_internal_local() + + self.visit(node.left, scope) + self.register_instruction(cil.GetAttribNode(left, node.left.noted_value, '__prop', 'Int')) + self.visit(node.right, scope) + self.register_instruction(cil.GetAttribNode(right, node.right.noted_value, '__prop', 'Int')) + self.register_instruction(cil.PlusNode(value, left, right)) + + self.register_instruction(cil.ArgNode(value)) + self.register_instruction(cil.StaticCallNode(self.ctor('Int'), nval,)) + + node.noted_value = nval + + @visitor.when(MinusNode) + def visit(self, node, scope): + ############################### + # node.left -> ExpressionNode + # node.right -> ExpressionNode + ############################### + nval = self.define_internal_local() + left = self.define_internal_local() + right = self.define_internal_local() + value = self.define_internal_local() + + self.visit(node.left, scope) + self.register_instruction(cil.GetAttribNode(left, node.left.noted_value, '__prop', 'Int')) + self.visit(node.right, scope) + self.register_instruction(cil.GetAttribNode(right, node.right.noted_value, '__prop', 'Int')) + self.register_instruction(cil.MinusNode(value, left, right)) + + self.register_instruction(cil.ArgNode(value)) + self.register_instruction(cil.StaticCallNode(self.ctor('Int'), nval)) + + node.noted_value = nval + + @visitor.when(StarNode) + def visit(self, node, scope): + ############################### + # node.left -> ExpressionNode + # node.right -> ExpressionNode + ############################### + nval = self.define_internal_local() + left = self.define_internal_local() + right = self.define_internal_local() + value = self.define_internal_local() + + self.visit(node.left, scope) + self.register_instruction(cil.GetAttribNode(left, node.left.noted_value, '__prop', 'Int')) + self.visit(node.right, scope) + self.register_instruction(cil.GetAttribNode(right, node.right.noted_value, '__prop', 'Int')) + self.register_instruction(cil.StarNode(value, left, right)) + + self.register_instruction(cil.ArgNode(value)) + self.register_instruction(cil.StaticCallNode(self.ctor('Int'), nval)) + node.noted_value = nval + + @visitor.when(DivNode) + def visit(self, node, scope): + ############################### + # node.left -> ExpressionNode + # node.right -> ExpressionNode + ############################### + nval = self.define_internal_local() + left = self.define_internal_local() + right = self.define_internal_local() + value = self.define_internal_local() + zero = self.define_internal_local() + + self.visit(node.left, scope) + self.register_instruction(cil.GetAttribNode(left, node.left.noted_value, '__prop', 'Int')) + self.visit(node.right, scope) + + self.register_instruction(cil.ArgNode(0)) + self.register_instruction(cil.StaticCallNode(self.ctor('Int'), zero)) + self.register_instruction(cil.GetAttribNode(zero, zero, '__prop', 'Int')) + self.register_instruction(cil.GetAttribNode(right, node.right.noted_value, '__prop', 'Int')) + self.register_instruction(cil.EqualNode(zero, zero, right, + )) + self.add_runtime_exception(zero, 'Division by zero exception') + + self.register_instruction(cil.DivNode(value, left, right)) + + self.register_instruction(cil.ArgNode(value)) + self.register_instruction(cil.StaticCallNode(self.ctor('Int'), nval)) + node.noted_value = nval + + @visitor.when(ChunkNode) + def visit(self, node, scope): + ############################### + # node.chunk -> [ ExpressionNode... ] + ############################### + + for i, expr in enumerate(node.chunk): + self.visit(expr, scope.children[i]) + node.noted_value = node.chunk[-1].noted_value + + + @visitor.when(ConditionalNode) + def visit(self, node, scope): + ############################### + # node.ifChunk -> ExpressionNode + # node.thenChunk -> ExpressionNode + # node.elseChunk -> ExpressionNode + ############################### + + nval = self.define_internal_local() + cval = self.define_internal_local() + + then_label = self.addLabel('then_label') + end_label = self.addLabel('end_label') + + self.visit(node.ifChunk, scope.children[0]) + self.register_instruction(cil.GetAttribNode(cval, node.ifChunk.noted_value, '__prop', 'Bool')) + self.register_instruction(cil.GotoIfNode(then_label.label, cval)) + + self.visit(node.elseChunk, scope.children[2]) + self.register_instruction(cil.AssignNode(nval, node.elseChunk.noted_value)) + self.register_instruction(cil.GotoNode(end_label.label)) + + self.register_instruction(then_label) + self.visit(node.thenChunk, scope.children[1]) + self.register_instruction(cil.AssignNode(nval, node.thenChunk.noted_value)) + + self.register_instruction(end_label) + node.noted_value = nval + + @visitor.when(LetInNode) + def visit(self, node, scope): + ############################### + # node.decl_list -> [ DeclarationNode... ] + # node.expression -> ExpressionNode + ############################### + + i = 0 + for decl in node.decl_list: + id = decl.id + type = decl.type + dst = self.register_local(VariableInfo(id, type)) + if decl.expr: + self.visit(decl.expr, scope.children[i]) + self.register_instruction(cil.AssignNode(dst, decl.expr.noted_value)) + i += 1 + elif type in ['SELF_TYPE', 'Int', 'Bool', 'String']: + if type == 'SELF_TYPE': + checked_t = self.current_type.name + else: + checked_t = type + if checked_t == 'Int': + self.register_instruction(cil.ArgNode(0)) + elif checked_t == 'Bool': + self.register_instruction(cil.ArgNode(0)) + elif checked_t == 'String': + data = self.emptystring_data + self.register_instruction(cil.LoadNode(dst, data)) + self.register_instruction(cil.ArgNode(dst)) + self.register_instruction(cil.StaticCallNode(self.ctor(checked_t), dst)) + + self.visit(node.expression, scope.children[-1]) + node.noted_value = node.expression.noted_value + + @visitor.when(WhileNode) + def visit(self, node, scope): + while_label = self.addLabel('while_label') + loop_label = self.addLabel('loop_label') + pool_label = self.addLabel('pool_label') + cval = self.define_internal_local() + + self.register_instruction(while_label) + self.visit(node.condition, scope.children[0]) + self.register_instruction(cil.GetAttribNode(cval, node.condition.noted_value, '__prop', 'Bool')) + self.register_instruction(cil.GotoIfNode(loop_label.label, cval)) + self.register_instruction(cil.GotoNode(pool_label.label)) + + self.register_instruction(loop_label) + self.visit(node.loopChunk, scope.children[1]) + self.register_instruction( + cil.GotoNode(while_label.label)) + + self.register_instruction(pool_label) + node.noted_value = cil.VoidNode() + + @visitor.when(NotNode) + def visit(self, node, scope): + ############################### + # node.expression -> ExpressionNode + ############################### + nval = self.define_internal_local() + value = self.define_internal_local() + neg_value = self.define_internal_local() + + self.visit(node.expression, scope.children[0]) + self.register_instruction(cil.GetAttribNode(value, node.expression.noted_value, '__prop', 'Bool')) + self.register_instruction(cil.NotNode(neg_value, value)) + self.register_instruction(cil.ArgNode(neg_value)) + self.register_instruction(cil.StaticCallNode(self.ctor('Bool'), nval)) + + node.noted_value = nval + + @visitor.when(IsVoidNode) + def visit(self, node, scope): + ############################### + # node.method -> ExpressionNode + ############################### + nval = self.define_internal_local() + ret = self.define_internal_local() + + void = cil.VoidNode() + self.visit(node.method, scope.children[0]) + self.register_instruction(cil.EqualNode(ret, node.method.noted_value, void)) + + self.register_instruction(cil.ArgNode(ret)) + self.register_instruction(cil.StaticCallNode(self.ctor('Bool'), nval)) + node.noted_value = nval + + @visitor.when(ComplementNode) + def visit(self, node, scope): + ############################### + # node.expr -> ExpressionNode + ############################### + nval = self.define_internal_local() + value = self.define_internal_local() + ret = self.define_internal_local() + + self.visit(node.expr, scope) + self.register_instruction(cil.GetAttribNode(value, node.expr.noted_value, '__prop', 'Int')) + self.register_instruction(cil.ComplementNode(ret, value)) + self.register_instruction(cil.ArgNode(ret)) + self.register_instruction(cil.StaticCallNode(self.ctor('Int'), nval)) + node.noted_value = nval + + @visitor.when(SwitchCaseNode) + def visit(self, node, scope): + ############################### + # node.expr -> ExpressionNode + # node.case_list = [ (id, type, expr)... ] + ############################### + nval = self.define_internal_local() + vtype = self.define_internal_local() + cond = self.define_internal_local() + + self.visit(node.expr, scope) + self.register_instruction(cil.TypeOfNode(vtype, node.expr.noted_value)) + + isvoid = self.define_internal_local() + self.register_instruction(cil.EqualNode(isvoid, node.expr.noted_value, cil.VoidNode())) + self.add_runtime_exception(isvoid, 'Void isntance found in switch case') + + end_label = self.addLabel('case_end_label') + + branch_type = self.define_internal_local() + visited = [] + labels = [] + branches = sorted(node.case_list, key=lambda x: self.context.get_type(x[1]).depth, reverse=True) + # for p, (id, type, expr) in enumerate(branches): + for p, case in enumerate(branches): + id = case[0] + type = case[1] + expr = case[2] + labels.append(self.addLabel(f'case_label_{p}')) + + st = self.context.type_offsprings(type) + for t in st: + if t not in visited: + self.register_instruction(cil.NameNode(branch_type, t.name)) + self.register_instruction(cil.EqualNode(cond, branch_type, vtype)) + self.register_instruction(cil.GotoIfNode(labels[-1].label, cond)) + visited.append(t) + + # not a runtime exception, but the data section to throw it + data = self.register_data('Switch Case without valid branches') + self.register_instruction(cil.ErrorNode(data)) + + for p, label in enumerate(labels): + id = branches[p][0] + type = branches[p][1] + expr = branches[p][2] + # id, type, expr = branches[p] + sc = scope.children[p] + + self.register_instruction(label) + var = self.register_local(VariableInfo(id, vtype)) + self.register_instruction(cil.AssignNode(var, node.expr.noted_value)) + self.visit(expr, sc) + self.register_instruction(cil.AssignNode(nval, expr.noted_value)) + self.register_instruction(cil.GotoNode(end_label.label)) + + self.register_instruction(end_label) + node.noted_value = nval + + @visitor.when(TrueNode) + def visit(self, node, scope): + nval = self.define_internal_local() + self.register_instruction(cil.ArgNode(1)) + self.register_instruction(cil.StaticCallNode(self.ctor('Bool'), nval)) + node.noted_value = nval + + @visitor.when(FalseNode) + def visit(self, node, scope): + nval = self.define_internal_local() + self.register_instruction(cil.ArgNode(0)) + self.register_instruction(cil.StaticCallNode(self.ctor('Bool'), nval)) + node.noted_value = nval + + @visitor.when(StringNode) + def visit(self, node, scope): + try: + data = [i for i in self.dotdata if i.value == node.lex][0] + except IndexError: + data = self.register_data(node.lex[1:-1]) + + dst = self.define_internal_local() + nval = self.define_internal_local() + self.register_instruction(cil.LoadNode(dst, data)) + self.register_instruction(cil.ArgNode(dst)) + self.register_instruction(cil.StaticCallNode(self.ctor('String'), nval)) + node.noted_value = nval + + + @visitor.when(EqualNode) + def visit(self, node, scope): + ############################### + # node.left -> ExpressionNode + # node.right -> ExpressionNode + ############################### + nval = self.define_internal_local() + left = self.define_internal_local() + type_left = self.define_internal_local() + + right = self.define_internal_local() + int_t = self.define_internal_local() + bool_t = self.define_internal_local() + string_t = self.define_internal_local() + equal = self.define_internal_local() + value = self.define_internal_local() + int_comparisson = self.addLabel('comparing_ints') + bool_comparisson = self.addLabel('comparing_bools') + string_comparisson = self.addLabel('comparing_strings') + end_label = self.addLabel('comparing_notbuiltin') + + # def compare_specific(self, node, scope, type : str): + # self.register_instruction(string_comparisson) + # self.register_instruction(cil.GetAttribNode(left, node.left.noted_value, '__prop', type)) + # self.register_instruction(cil.GetAttribNode(right, node.right.noted_value, '__prop', type)) + # self.register_instruction(cil.EqualStringNode(value, left, right)) + # self.register_instruction(cil.GotoNode(end_label.label)) + # pass + + self.visit(node.left, scope) + self.visit(node.right, scope) + self.register_instruction(cil.TypeOfNode(type_left, node.left.noted_value)) + self.register_instruction(cil.NameNode(int_t, 'Int')) + self.register_instruction(cil.NameNode(string_t, 'String')) + self.register_instruction(cil.NameNode(bool_t, 'Bool')) + self.register_instruction(cil.EqualNode(equal, type_left, int_t)) + self.register_instruction(cil.GotoIfNode(int_comparisson.label, equal)) + self.register_instruction(cil.EqualNode(equal, type_left, string_t)) + self.register_instruction(cil.GotoIfNode(string_comparisson.label, equal)) + self.register_instruction(cil.EqualNode(equal, type_left, bool_t)) + self.register_instruction(cil.GotoIfNode(bool_comparisson.label, equal)) + + # for i in self.dtypes: + # try: + # self.visit() + # except: + # __ = 0 + + self.register_instruction(cil.EqualNode(value, node.left.noted_value, node.right.noted_value)) + self.register_instruction(cil.GotoNode(end_label.label)) + + self.register_instruction(int_comparisson) + self.register_instruction(cil.GetAttribNode(left, node.left.noted_value, '__prop', 'Int')) + self.register_instruction(cil.GetAttribNode(right, node.right.noted_value, '__prop', 'Int')) + self.register_instruction(cil.EqualNode(value, left, right)) + self.register_instruction(cil.GotoNode(end_label.label)) + + self.register_instruction(string_comparisson) + self.register_instruction(cil.GetAttribNode(left, node.left.noted_value, '__prop', 'String')) + self.register_instruction(cil.GetAttribNode(right, node.right.noted_value, '__prop', 'String')) + self.register_instruction(cil.EqualStringNode(value, left, right)) + self.register_instruction(cil.GotoNode(end_label.label)) + + self.register_instruction(bool_comparisson) + self.register_instruction(cil.GetAttribNode(left, node.left.noted_value, '__prop', 'Bool')) + self.register_instruction(cil.GetAttribNode(right, node.right.noted_value, '__prop', 'Bool')) + self.register_instruction(cil.EqualNode(value, left, right)) + self.register_instruction(cil.GotoNode(end_label.label)) + + self.register_instruction(end_label) + + self.register_instruction(cil.ArgNode(value)) + self.register_instruction(cil.StaticCallNode(self.ctor('Bool'), nval)) + node.noted_value = nval + + @visitor.when(LessNode) + def visit(self, node, scope): + ############################### + # node.left -> ExpressionNode + # node.right -> ExpressionNode + ############################### + nval = self.define_internal_local() + left = self.define_internal_local() + right = self.define_internal_local() + value = self.define_internal_local() + self.visit(node.left, scope) + self.register_instruction(cil.GetAttribNode(left, node.left.noted_value, '__prop', 'Int')) + self.visit(node.right, scope) + self.register_instruction(cil.GetAttribNode(right, node.right.noted_value, '__prop', 'Int')) + self.register_instruction(cil.LessNode(value, left, right)) + self.register_instruction(cil.ArgNode(value)) + self.register_instruction(cil.StaticCallNode(self.ctor('Bool'), nval)) + + node.noted_value = nval + + + @visitor.when(LeqNode) + def visit(self, node, scope): + ############################### + # node.left -> ExpressionNode + # node.right -> ExpressionNode + ############################### + nval = self.define_internal_local() + left = self.define_internal_local() + right = self.define_internal_local() + value = self.define_internal_local() + + self.visit(node.left, scope) + self.register_instruction(cil.GetAttribNode(left, node.left.noted_value, '__prop', 'Int')) + self.visit(node.right, scope) + self.register_instruction(cil.GetAttribNode(right, node.right.noted_value, '__prop', 'Int')) + self.register_instruction(cil.LessEqualNode(value, left, right)) + + self.register_instruction(cil.ArgNode(value)) + self.register_instruction(cil.StaticCallNode(self.ctor('Bool'), nval)) + + node.noted_value = nval diff --git a/src/visitors/Depicter.py b/src/visitors/Depicter.py new file mode 100755 index 000000000..5629be74b --- /dev/null +++ b/src/visitors/Depicter.py @@ -0,0 +1,178 @@ +import visitors.visitor as visitor +from cool_ast.cool_ast import ProgramNode, ClassDeclarationNode, AttrDeclarationNode, FuncDeclarationNode, LetInNode +from cool_ast.cool_ast import AssignNode, ChunkNode, ConditionalNode, WhileNode, SwitchCaseNode, CallNode +from cool_ast.cool_ast import PlusNode, MinusNode, StarNode, DivNode, LeqNode, LessNode, EqualNode, NotNode +from cool_ast.cool_ast import ComplementNode, IsVoidNode, AtomicNode, InstantiateNode, BinaryNode + +class Depicter(object): + @visitor.on('node') + def visit(self, node, tabs): + pass + + @visitor.when(ProgramNode) + def visit(self, node, tabs = 0): + return '\n\n'.join(self.visit(dec, tabs) for dec in node.declarations) + + @visitor.when(ClassDeclarationNode) + def visit(self, node, tabs = 0): + par = '' if node.parent is None else f"inherits {node.parent}" + depiction = f'class {node.id} {par} {{\n' + '\n'.join(self.visit(feature, tabs + 1) for feature in node.features) + '\n};' + return (depiction) + + @visitor.when(AttrDeclarationNode) + def visit(self, node, tabs = 0): + value = f' <- {self.visit(node.value, 0)}' if node.value else '' + depiction = ' ' * tabs + f'{node.id}: {node.type}{value}' + return depiction + + @visitor.when(FuncDeclarationNode) + def visit(self, node, tabs = 0): + params = ', '.join(': '.join(param) for param in node.params) + header = ' ' * tabs + f'{node.id} ({params}): {node.type}' + body = self.visit(node.body, tabs + 1) + depiction = f'{header} {{\n{body}\n }};' + return depiction + + @visitor.when(ChunkNode) + def visit(self, node, tabs = 0): + exprs = '' + for smth in node.chunk: + to_concat = self.visit(smth, tabs + 1) + exprs += to_concat + exprs += ';\n' + depiction = ' ' * tabs + f'{{\n{exprs}\n' + ' ' * tabs + '};' + return depiction + + @visitor.when(AssignNode) + def visit(self, node, tabs = 0): + depiction = ' ' * tabs + f'{node.id} <- {self.visit(node.expr)}' + return depiction + + @visitor.when(ConditionalNode) + def visit(self, node, tabs = 0): + if_expr = self.visit(node.ifChunk, 0)# + then_expr = self.visit(node.thenChunk, tabs + 1) + else_expr = self.visit(node.elseChunk, tabs + 1) + # depiction = ' ' * tabs + f'if {if_expr}\n' + ' ' * tabs + f'then\n{then_expr}\n' + ' ' * tabs + f'else\n{else_expr}\n' + ' ' * tabs + 'fi' + depiction = ' ' * tabs + f'if {if_expr} then\n' + f'{then_expr}\n' + ' ' * tabs + f'else\n{else_expr}\n' + ' ' * tabs + 'fi' + return depiction + + @visitor.when(LetInNode) + def visit(self, node, tabs = 0): + decls = [] + for decl in node.decl_list: + _id = decl.id + _type = decl.type + _val = decl.expr + if _val is not None: + decls.append(f'{_id}: {_type} <- {self.visit(_val)}') + else: + decls.append(f'{_id} : {_type}') + decls = ('\n' + ' ' * (tabs + 1)).join(decls) + depiction = ' ' * tabs + f'let {decls} in \n{self.visit(node.expression, tabs + 1)}' + return depiction + + @visitor.when(WhileNode) + def visit(self, node, tabs = 0): + _cond = self.visit(node.condition, 0) + _loop = self.visit(node.loopChunk, tabs + 1) + depiction = ' ' * tabs + f'while {_cond} loop\n {_loop}\n' + ' ' * tabs + 'pool' + return depiction + + @visitor.when(SwitchCaseNode) + def visit(self, node, tabs = 0): + _case_list = [] + for case in node.case_list: + _id = case[0] + _type = case[1] + _expr = case[2] + expr = self.visit(_expr, tabs + 2) + _case_list.append(' ' * (tabs + 1) + f'{_id} : {_type} =>\n{expr};') + expr = self.visit(node.expr) + _case_list = '\n'.join(_case_list) + depiction = ' ' * tabs + f'case {expr} of \n{_case_list}\n' + ' ' * tabs + 'esac' + return depiction + + @visitor.when(CallNode) + def visit(self, node, tabs = 0): + _id = f'{self.visit(node.obj, 0)}.' if node.obj is not None else '' + depiction = ' ' * tabs + f'{_id}{node.method}({", ".join(self.visit(arg, 0) for arg in node.args)})' + return depiction + + @visitor.when(NotNode) + def visit(self, node, tabs = 0): + expr = self.visit(node.expression) + depiction = f'Not {expr}' + return depiction + + @visitor.when(InstantiateNode) + def visit(self, node, tabs = 0): + depiction = ' ' * tabs + f'new {node.lex}' + return depiction + + @visitor.when(IsVoidNode) + def visit(self, node, tabs = 0): + expr = self.visit(node.method) + depiction = f'IsVoid({expr})' + return depiction + + @visitor.when(ComplementNode) + def visit(self, node, tabs = 0): + expr = self.visit(node.expr) + depiction = f'~ {expr}' + return depiction + + @visitor.when(AtomicNode) + def visit(self, node, tabs = 0): + depiction = ' ' * tabs + f'{node.lex}' + return depiction + + @visitor.when(EqualNode) + def visit(self, node, tabs = 0): + l = self.visit(node.left) if isinstance(node.left, BinaryNode) else self.visit(node.left, tabs) + r = self.visit(node.right) + depiction = f'{l} = {r}' + return depiction + + @visitor.when(PlusNode) + def visit(self, node, tabs = 0): + left = self.visit(node.left) if isinstance(node.left, BinaryNode) else self.visit(node.left, tabs) + right = self.visit(node.right) + depiction = f'{left} + {right}' + return depiction + + @visitor.when(MinusNode) + def visit(self, node, tabs = 0): + left = self.visit(node.left) if isinstance(node.left, BinaryNode) else self.visit(node.left, tabs) + right = self.visit(node.right) + depiction = f'{left} - {right}' + return depiction + + @visitor.when(StarNode) + def visit(self, node, tabs = 0): + left = self.visit(node.left) if isinstance(node.left, BinaryNode) else self.visit(node.left, tabs) + right = self.visit(node.right) + depiction = f'{left} * {right}' + return depiction + + @visitor.when(DivNode) + def visit(self, node, tabs = 0): + left = self.visit(node.left) if isinstance(node.left, BinaryNode) else self.visit(node.left, tabs) + right = self.visit(node.right) + depiction = f'{left} / {right}' + return depiction + + @visitor.when(LessNode) + def visit(self, node, tabs = 0): + left = self.visit(node.left) if isinstance(node.left, BinaryNode) else self.visit(node.left, tabs) + right = self.visit(node.right) + depiction = f'{left} < {right}' + return depiction + + @visitor.when(LeqNode) + def visit(self, node, tabs = 0): + left = self.visit(node.left) if isinstance(node.left, BinaryNode) else self.visit(node.left, tabs) + right = self.visit(node.right) + depiction = f'{left} <= {right}' + return depiction + diff --git a/src/visitors/Executor.py b/src/visitors/Executor.py new file mode 100755 index 000000000..ff0cc3d1b --- /dev/null +++ b/src/visitors/Executor.py @@ -0,0 +1,350 @@ +from cool_ast.cool_ast import * +import visitors.visitor as visitor +from utils.semantic import Context, Scope +from utils.exceptions import RuntimeException + +class Pod: + def __init__(self, typex, value = None): + if value is None: + value = id(self) + + self.type = typex + self.value = value + self.attr = {} + + def set_attribute(self, name, value): + self.attr[name] = value + + def get_attribute(self, name): + return self.attr[name] + + def get_method(self, name, typex, visited): + return self.type.get_method(name, typex, visited) + + def __str__(self): + return f'{self.type.name}: {self.value}' + +def type_name(obj, context): + return Pod(context.get_type('String'), obj.type.name) + +def out_string(obj, s, context): + print(s.value, end='') + return obj + +def out_int(obj, s, context): + print(s.value, end='') + return obj + +def in_string(obj, context): + return Pod(context.get_type('Int'), input()) + +def in_int(obj, context): + return Pod(context.get_type('Int'), int(input())) + +def ocopy(obj, context) -> None: + x_copy = Pod(obj.type, obj.value if obj.type.name in ('Int', 'String', 'Bool') else None) + x_copy.attr_values = obj.attr_values + return x_copy + +def length(obj, context): + return Pod(context.get_type('Int'), len(obj.value)) + +def concat(obj, s, context): + return Pod(context.get_type('String'), obj.value + s.value) + +def substr(obj, i, l, context): + return Pod(context.get_type('String'), obj.value[i.value: i.value + l.value]) + +def abort(obj, context): + print('Aborting execution') + exit() + +cl_baseline = { + ('Object', 'type_name'): type_name, + ('Object', 'abort'): abort, + ('Object', 'copy'): ocopy, + ('IO', 'out_int'): out_int, + ('IO', 'out_string'): out_string, + ('IO', 'in_string'): in_string, + ('IO', 'in_int'): in_int, + ('String', 'concat'): concat, + ('String', 'substr'): substr, + ('String', 'length'): length +} + +class Executor: + def __init__(self, context: Context): + self.context: Context = context + self.currentType = None + self.currentPod = None + self.stack = [] + + @visitor.on('node') + def visit(self, node, tabs): + pass + + @visitor.when(ProgramNode) + def visit(self, node, scope): + for declaration in node.declarations: + self.visit(declaration, None) + + main_callnode = CallNode('main', [], InstantiateNode('Main')) + self.visit(main_callnode, scope) + + @visitor.when(ClassDeclarationNode) + def visit(self, node, scope): + self.currentType = self.context.get_type(node.id) + + attrs = [f for f in node.features if isinstance(f, AttrDeclarationNode)] + methods = [f for f in node.features if isinstance(f, FuncDeclarationNode)] + + for attr in attrs: + self.visit(attr, None) + + for method in methods: + self.visit(method, None) + + @visitor.when(AttrDeclarationNode) + def visit(self, node, scope): + self.currentType.get_attribute(node.id, self.currentType, False).expr = node.value + + @visitor.when(FuncDeclarationNode) + def visit(self, node, scope): + self.currentType.get_method(node.id, self.currentType, False).expr = node.body + + @visitor.when(CallNode) + def visit(self, node, scope): + token = self.visit(node.obj, scope) + + if isinstance(token, VoidPod): + raise RuntimeException('Reference to an instance of a void object.') + + _o = self.context.get_type('Object') + _s = self.context.get_type('String') + _io = self.context.get_type('IO') + + if token.type.conforms_to(_o) and (_o.name, node.method) in cl_baseline: + args = (token,) + tuple(self.visit(arg, scope) for arg in node.args) + (self.context,) + return cl_baseline[_o.name, node.method](*args) + + if token.type.conforms_to(_s) and (_s.name, node.method) in cl_baseline: + args = (token,) + tuple(self.visit(arg, scope) for arg in node.args) + (self.context,) + return cl_baseline[_s.name, node.method](*args) + + if token.type.conforms_to(_io) and (_io.name, node.method) in cl_baseline: + args = (token,) + tuple(self.visit(arg, scope) for arg in node.args) + (self.context,) + return cl_baseline[_io.name, node.method](*args) + + #si es una instantiate.f() meter en el scope hijo todos sus atributos + _funcCall_scope = Scope() + #para el caso a@b.f() + if not node.parent is None: + parent_t = self.context.get_type(node.parent) + method = parent_t.get_method(node.method, parent_t, False) + else: + method = token.get_method(node.method, self.currentType, False) + + for _id, _t, _arg in zip(method.param_names, method.param_types, node.args): + _funcCall_scope.define_variable(_id, _t).token = self.visit(_arg, scope) + + + _funcCall_scope.define_variable('self', token.type).token = token + + self.stack.append(self.currentPod) + self.currentPod = token + + result = self.visit(method.expr, _funcCall_scope) + + self.currentPod = self.stack.pop() + return result + + @visitor.when(LetInNode) + def visit(self, node, scope): + a = 0 + + for nod in node.decl_list: + _id = nod.id + _t = nod.type + _expr = nod.expr + if _t in ['Int', 'String', 'Bool'] and _expr is None: + tempNode = InstantiateNode(_t) + token = self.visit(tempNode, scope) + else: + if _expr is not None: + token = self.visit(_expr, scope.create_child()) + else: + token = VoidPod() + + if isinstance(token, VoidPod): + try: + token.type = self.context.get_type(_t) + except: + pass + scope.define_variable(_id, token.type).token = token + + return self.visit(node.expression, scope.create_child()) + + @visitor.when(AssignNode) + def visit(self, node, scope): + variable_info = scope.find_variable(node.id) + if variable_info is None: + token = self.visit(node.expr, scope) + attr = self.currentPod.get_attribute(node.id) + self.currentPod.set_attribute(node.id, token) + return token + + variable_info.token = self.visit(node.expr, scope) + return variable_info.token + + @visitor.when(VariableNode) + def visit(self, node, scope): + if node.lex == 'self': + return self.currentPod + + variable_info = scope.find_variable(node.lex) + + if variable_info is not None and not isinstance(variable_info.token, VoidPod): + return variable_info.token + try: + return self.currentPod.get_attribute(node.lex) + except: + return variable_info.token + + @visitor.when(InstantiateNode) + def visit(self, node, scope): + start_value = None + if node.lex == 'Int': + start_value = 0 + elif node.lex == 'Bool': + start_value = False + elif node.lex == 'String': + start_value = '' + + token = Pod(self.context.get_type(node.lex), start_value) + + self.stack.append(self.currentPod) + self.currentPod = token + for attr, _t in token.type.all_attributes(): + if attr.expr is not None: + attr_token = self.visit(attr.expr, scope) + else: + attr_token = VoidPod() + self.currentPod.set_attribute(attr.name, attr_token) + self.currentPod = self.stack.pop() + return token + + @visitor.when(ChunkNode) + def visit(self, node, scope): + child_scope = scope.create_child() + token = None + for expr in node.chunk: + token = self.visit(expr, child_scope) + return token + + @visitor.when(ConditionalNode) + def visit(self, node, scope): + if_token = self.visit(node.ifChunk, scope) + + if if_token.value: + return self.visit(node.thenChunk, scope.create_child()) + + return self.visit(node.elseChunk, scope.create_child()) + + @visitor.when(EqualNode) + def visit(self, node, scope): + return Pod(self.context.get_type('Bool'), self.visit(node.left, scope).value == self.visit(node.right, scope).value) + + @visitor.when(LeqNode) + def visit(self, node, scope): + return Pod(self.context.get_type('Bool'), self.visit(node.left, scope).value <= self.visit(node.right, scope).value) + + @visitor.when(LessNode) + def visit(self, node, scope): + return Pod(self.context.get_type('Bool'), self.visit(node.left, scope).value < self.visit(node.right, scope).value) + + @visitor.when(SwitchCaseNode) + def visit(self, node, scope): + token = self.visit(node.expr, scope) + + if isinstance(token, VoidPod): + raise RuntimeException('Reference to an instance of a void object.') + + types = [(i, self.context.get_type(t)) for i, (_, t, _) in enumerate(node.case_list) + if token.type.conforms_to(self.context.get_type(t))] + + if len(types) == 0: + raise RuntimeException('NotTypeFoundError: None of the types were valid') + + (index, temp) = types[0] + for i, t in types: + if t.conforms_to(temp): + index, temp = i, t + + child_scope = scope.create_child() + _id, _t, _e = node.case_list[index] + child_scope.define_variable(_id, self.context.get_type(_t)).token = token + return self.visit(_e, child_scope) + + @visitor.when(WhileNode) + def visit(self, node, scope): + a = 0 + while self.visit(node.condition, scope).value: + self.visit(node.loopChunk, scope.create_child()) + + return VoidPod() + + @visitor.when(ConstantNumNode) + def visit(self, node, scope): + return Pod(self.context.get_type('Int'), int(node.lex)) + + @visitor.when(StringNode) + def visit(self, node, scope): + return Pod(self.context.get_type('String'), str(node.lex[1:-1].replace('\\n', '\n')).replace('\\t', '\t')) + + @visitor.when(TrueNode) + def visit(self, node, scope): + return Pod(self.context.get_type('Bool'), True) + + @visitor.when(FalseNode) + def visit(self, node, scope): + return Pod(self.context.get_type('Bool'), False) + + @visitor.when(PlusNode) + def visit(self, node, scope): + return Pod(self.context.get_type('Int'), self.visit(node.left, scope).value + self.visit(node.right, scope).value) + + @visitor.when(MinusNode) + def visit(self, node, scope): + return Pod(self.context.get_type('Int'), self.visit(node.left, scope).value - self.visit(node.right, scope).value) + + @visitor.when(StarNode) + def visit(self, node, scope): + return Pod(self.context.get_type('Int'), self.visit(node.left, scope).value * self.visit(node.right, scope).value) + + @visitor.when(DivNode) + def visit(self, node, scope): + try: + return Pod(self.context.get_type('Int'), self.visit(node.left, scope).value // self.visit(node.right, scope).value) + except ZeroDivisionError as err: + raise RuntimeException('Runtime exception: ' + err.args[0]) + + @visitor.when(NotNode) + def visit(self, node, scope): + return Pod(self.context.get_type('Bool'), not self.visit(node.expression, scope).value) + + @visitor.when(IsVoidNode) + def visit(self, node, scope): + return Pod(self.context.get_type('Bool'), isinstance(self.visit(node.method, scope), VoidPod)) + + @visitor.when(ComplementNode) + def visit(self, node, scope): + return Pod(self.context.get_type('Int'), ~ self.visit(node.expression, scope).value) + + +## +class VoidPod(Pod): + def __init__(self): + super(VoidPod, self).__init__(None, None) + + def __eq__(self, cousin): + return isinstance(cousin, VoidPod) \ No newline at end of file diff --git a/src/visitors/Inferencer.py b/src/visitors/Inferencer.py new file mode 100755 index 000000000..1853b7c86 --- /dev/null +++ b/src/visitors/Inferencer.py @@ -0,0 +1,542 @@ +from cool_ast.cool_ast import * +import visitors.visitor as visitor +from utils.semantic import * +from utils.digraph import * + +class Inferencer: + def __init__(self, context, errors): + self.context = context + self.errors = errors + self.dGraph = DGraph() + self.attributes = { } + self.vars = { } + self.methods = { } + + self.currentType = None + self.currentMethod = None + self.defaultType = self.context.get_type('Object') + + for t in context.types.values(): + for attr in t.attributes: + self.attributes[t.name, attr.name] = AttrNode(t, attr) + for m in t.methods: + + paramNodesList = [ ] + for index, ptype in enumerate(m.param_types): + paramNodesList.append(ParamNode(ptype, m, index)) + self.methods[t.name,m.name] = (paramNodesList, RTypeNode(m.return_type,m)) + + @visitor.on('node') + def visit(self, node, scope): + pass + + @visitor.when(ProgramNode)# + def visit(self, node): + scope = Scope() + for _classDeclaration in node.declarations: + self.visit(_classDeclaration, scope.create_child()) + + self.dGraph.Build(self.defaultType) + backtracker = Backtracker(self.context, self.errors) + backtracker.visit(node, scope) + + @visitor.when(ClassDeclarationNode)# + def visit(self, node, scope): + self.currentType = self.context.get_type(node.id) + + for feature in node.features: + if isinstance(feature,AttrDeclarationNode): + self.visit(feature, scope) + else: + self.visit(feature, scope.create_child()) + + @visitor.when(AttrDeclarationNode)# + def visit(self, node, scope): + #crear un nodo del digrafo con la informacion del atributo encapsulada en un VarNode + attrType = self.context.get_type(node.type) + attr = scope.define_variable(node.id, attrType) + self.vars[attr] = VarNode(attrType, attr) + varNode = self.vars[attr] + + attrValueNode = None + if node.value is not None: + attrValueNode = self.visit(node.value, scope.create_child()) + + if node.type == 'AUTO_TYPE': + attrNode = self.attributes[self.currentType.name, node.id] + self.dGraph.AddEdge(attrNode, varNode) + self.dGraph.AddEdge(varNode, attrNode) + if attrValueNode is not None: + self.dGraph.AddEdge(attrValueNode, varNode) + self.dGraph.AddEdge(varNode, attrValueNode) + + @visitor.when(FuncDeclarationNode)# + def visit(self, node, scope): + #el scope se pasa como un scope hijo del anterior, asi que toca definir self como variable + node.type = self.context.get_type(node.type) + _self = scope.define_variable('self', self.currentType) + self.vars[_self] = VarNode(self.currentType, _self) + + #ahora recorrer los parametros del metodo en busca de AUTO_TYPES para agregarlos al digrafo + self.currentMethod = self.currentType.get_method(node.id, self.currentType, False) + paramNodeList, _returnTypeNode = self.methods[self.currentType.name, self.currentMethod.name] + + + for i in range(len(self.currentMethod.param_names)): + _ithParamName = self.currentMethod.param_names[i] + _ithParamType = self.currentMethod.param_types[i] + + #definir los parametros como variables locales, sobrescribiendo cualquier referencia a una variable de mismo nombre en un scope padre + ithParam = scope.define_variable(_ithParamName, _ithParamType) + self.vars[ithParam] = VarNode(_ithParamType, ithParam) + ithParamVarNode = self.vars[ithParam] + + if _ithParamType.name == 'AUTO_TYPE': + paramNode = paramNodeList[i] + self.dGraph.AddEdge(ithParamVarNode, paramNode) + self.dGraph.AddEdge(paramNode, ithParamVarNode) + + + + methodBodyNode = self.visit(node.body, scope) + if _returnTypeNode.type.name == 'AUTO_TYPE': + self.dGraph.AddEdge(methodBodyNode, _returnTypeNode) + + @visitor.when(TrueNode)# + def visit(self, node, scope): + _type = self.context.get_type('Bool') + return PrimeNode(_type) + + @visitor.when(FalseNode)# + def visit(self, node, scope): + _type = self.context.get_type('Bool') + return PrimeNode(_type) + + @visitor.when(ConstantNumNode)# + def visit(self, node, scope): + _type = self.context.get_type('Int') + return PrimeNode(_type) + + @visitor.when(StringNode)# + def visit(self, node, scope): + _type = self.context.get_type('String') + return PrimeNode(_type) + + @visitor.when(NotNode)# + def visit(self, node, scope): + n = self.visit(node.expression, scope) + _type = self.context.get_type('Bool') + return PrimeNode(_type) + + @visitor.when(ComplementNode)# + def visit(self, node, scope): + n = self.visit(node.expr, scope) + _type = self.context.get_type('Int') + return PrimeNode(_type) + + @visitor.when(PlusNode)# + def visit(self, node, scope): + intType = self.context.get_type('Int') + + left = self.visit(node.left, scope) + right = self.visit(node.right, scope) + + intPrimeNode = PrimeNode(intType) + + if not isinstance(left, PrimeNode): + self.dGraph.AddEdge(intPrimeNode, left) + + if not isinstance(right, PrimeNode): + self.dGraph.AddEdge(intPrimeNode, right) + + return PrimeNode(intType) + + @visitor.when(MinusNode)# + def visit(self, node, scope): + intType = self.context.get_type('Int') + + left = self.visit(node.left, scope) + right = self.visit(node.right, scope) + + intPrimeNode = PrimeNode(intType) + + if not isinstance(left, PrimeNode): + self.dGraph.AddEdge(intPrimeNode, left) + + if not isinstance(right, PrimeNode): + self.dGraph.AddEdge(intPrimeNode, right) + + return PrimeNode(intType) + + @visitor.when(StarNode)# + def visit(self, node, scope): + intType = self.context.get_type('Int') + + left = self.visit(node.left, scope) + right = self.visit(node.right, scope) + + intPrimeNode = PrimeNode(intType) + + if not isinstance(left, PrimeNode): + self.dGraph.AddEdge(intPrimeNode, left) + + if not isinstance(right, PrimeNode): + self.dGraph.AddEdge(intPrimeNode, right) + + return PrimeNode(intType) + + @visitor.when(DivNode)# + def visit(self, node, scope): + intType = self.context.get_type('Int') + + left = self.visit(node.left, scope) + right = self.visit(node.right, scope) + + intPrimeNode = PrimeNode(intType) + + if not isinstance(left, PrimeNode): + self.dGraph.AddEdge(intPrimeNode, left) + + if not isinstance(right, PrimeNode): + self.dGraph.AddEdge(intPrimeNode, right) + + return PrimeNode(intType) + + @visitor.when(EqualNode)# + def visit(self, node, scope): + boolType = self.context.get_type('Bool') + self.visit(node.left, scope) + self.visit(node.right, scope) + return PrimeNode(boolType) + + @visitor.when(LessNode)# + def visit(self, node, scope): + boolType = self.context.get_type('Bool') + intType = self.context.get_type('Int') + + left = self.visit(node.left, scope) + right = self.visit(node.right, scope) + + intPrimeNode = PrimeNode(intType) + + if not isinstance(left, PrimeNode): + self.dGraph.AddEdge(intPrimeNode, left) + + if not isinstance(right, PrimeNode): + self.dGraph.AddEdge(intPrimeNode, right) + + return PrimeNode(boolType) + + @visitor.when(LeqNode)# + def visit(self, node, scope): + boolType = self.context.get_type('Bool') + intType = self.context.get_type('Int') + + left = self.visit(node.left, scope) + right = self.visit(node.right, scope) + + intPrimeNode = PrimeNode(intType) + + if not isinstance(left, PrimeNode): + self.dGraph.AddEdge(intPrimeNode, left) + + if not isinstance(right, PrimeNode): + self.dGraph.AddEdge(intPrimeNode, right) + + return PrimeNode(boolType) + + @visitor.when(WhileNode)# + def visit(self, node, scope): + self.visit(node.condition, scope) + self.visit(node.loopChunk, scope.create_child()) + return PrimeNode(self.defaultType) #The predicate must have static type Bool. The body may have any static type. The static type of a loop expression is Object section 7.6 + + @visitor.when(CallNode)# + def visit(self, node, scope): + node.obj = node.obj if node.obj is not None else VariableNode('self') + _node = self.visit(node.obj, scope) + if isinstance(_node, PrimeNode): + _method_type = self.context.get_type(node.parent) if node.parent is not None else _node.type + _function, _obj = _method_type.get_method(node.method, _method_type, False, True) + paramNodeList, _returnTypeNode = self.methods[_obj.name, _function.name] + for i in range(len(node.args)): + _ithFuncParam = paramNodeList[i] + _ithArg = node.args[i] + _ithArgNode = self.visit(_ithArg, scope) + if not isinstance(_ithArgNode, PrimeNode): + if _ithFuncParam.type.name == 'AUTO_TYPE': + self.dGraph.AddEdge(_ithFuncParam, _ithArgNode) + else: + self.dGraph.AddEdge(_ithFuncParam, _ithArgNode) + self.dGraph.AddEdge(_ithArgNode, _ithFuncParam) + elif isinstance(_ithArgNode, PrimeNode) and _ithFuncParam.type.name == 'AUTO_TYPE': + self.dGraph.AddEdge(_ithArgNode, _ithFuncParam) + if _returnTypeNode.type.name == 'AUTO_TYPE': + return _returnTypeNode + if _returnTypeNode.type.name == 'SELF_TYPE': + return PrimeNode(_node.type) + return PrimeNode(_returnTypeNode.type) + + + + for _arg in node.args: + self.visit(_arg, scope) + return PrimeNode(self.defaultType) + + @visitor.when(ConditionalNode)# + def visit(self, node, scope): + thenChunkNode = self.visit(node.thenChunk, scope.create_child()) + elseChunkNode = self.visit(node.elseChunk, scope.create_child()) + + ifChunkNode = self.visit(node.ifChunk, scope) + if not isinstance(ifChunkNode, PrimeNode): + _boolType = self.context.get_type('Bool') + _auxBoolNode = PrimeNode(_boolType) + self.dGraph.AddEdge(_auxBoolNode,ifChunkNode) + + + if isinstance(thenChunkNode, PrimeNode) and isinstance(elseChunkNode, PrimeNode): + #sea x el tipo del trozo 'then', sea ademas y el tipo del trozo 'else' + #el tipo de la expresion if completa es el "menor" tipo t, tal que x e y conformen a t + #according to COOL Reference Manual page 10 section 7.5 + + tType = thenChunkNode.type + eType = thenChunkNode.type + + while not isinstance(tType, Type): + tType = tType.type + while not isinstance(eType, Type): + eType = eType.type + + ancestorType = tType.join(eType) + return PrimeNode(ancestorType) + + else: + #sad + return PrimeNode(self.defaultType) + + @visitor.when(LetInNode)# + def visit(self, node, scope): + #definir cada una de las variables de node.decl_list en el scope y luego visitar la expresion + for d in node.decl_list: + try: + _varType = self.context.get_type(d.type) + _var = scope.define_variable(d.id, _varType) + except: #si el type no existe....... + _var = scope.define_variable(d.id, ErrorType()) #error type de semantic.py para modelar estos casos + self.vars[_var] = VarNode(_var.type, _var) + _varNode = self.vars[_var] + + _varValueNode = None + if d.expr is not None: + _varValueNode = self.visit(d.expr, scope.create_child()) + + if d.type == 'AUTO_TYPE': + if _varValueNode is None: + self.dGraph.CreateNode(_varNode) + else: + self.dGraph.AddEdge(_varValueNode, _varNode) + #no use la variable i del enumerate, asi que cuando deje de debuggear se puede quitar + + _inScope = scope.create_child() + return self.visit(node.expression, _inScope) + + @visitor.when(SwitchCaseNode)# + def visit(self, node, scope): + _caseExpr0Node = self.visit(node.expr, scope) + _cases = [] + for _ithVarName, _ithTypeName, _ithExpr in node.case_list: + _ithVarType = self.context.get_type(_ithTypeName) + _ithScope = scope.create_child() + _ithVar = _ithScope.define_variable(_ithVarName, _ithVarType) + self.vars[_ithVar] = VarNode(_ithVarType, _ithVar) + _cases.append(self.visit(_ithExpr,_ithScope)) + + #jachtagsad + lca = _cases[0].type #todo switch case tiene al menos un case + if lca.name == 'AUTO_TYPE': #ehhhhhhhhhhh + return PrimeNode(self.defaultType) + for other_case in _cases[1:]: + if other_case.type.name == 'AUTO_TYPE': #ehhhhhhhhhhhh + return PrimeNode(self.defaultType) + lca.join(other_case.type) + return PrimeNode(lca) + + @visitor.when(ChunkNode)# + def visit(self, node, scope): + innerScope = scope.create_child() + exprNodes = [self.visit(i, innerScope) for i in node.chunk] + return exprNodes[-1] if exprNodes else None + + @visitor.when(AssignNode)# + def visit(self, node, scope): + var = scope.find_variable(node.id) + valueNode = self.visit(node.expr, scope.create_child()) + + if var is not None: #cuando es None es xq esa variable no existe, y ese error no toca detectarlo ahora + _var = self.vars[var] + if var.type.name == "AUTO_TYPE" and valueNode.type.name == 'AUTO_TYPE': + self.dGraph.AddEdge(_var, valueNode) + self.dGraph.AddEdge(valueNode, _var) + if var.type.name == "AUTO_TYPE" and valueNode.type.name != 'AUTO_TYPE': + self.dGraph.AddEdge(valueNode, _var) + if var.type.name != "AUTO_TYPE" and valueNode.type.name == 'AUTO_TYPE': + self.dGraph.AddEdge(_var, valueNode) + return valueNode + + @visitor.when(IsVoidNode)# + def visit(self, node, scope): + n = self.visit(node.method, scope) + _type = self.context.get_type('Bool') + return PrimeNode(_type) + + @visitor.when(InstantiateNode) + def visit(self, node, scope): + _type = self.context.get_type(node.lex) + return PrimeNode(_type) + + @visitor.when(VariableNode) + def visit(self, node, scope): + if node.lex == 'self' : + _var = PrimeNode(self.currentType) + else: + _var = scope.find_variable(node.lex) + if _var is None: + _var = self.currentType.get_attribute(node.lex, self.currentType, False) + + if _var.type.name == 'AUTO_TYPE': + return self.vars[_var] + + return PrimeNode(_var.type) + + +class Backtracker: + def __init__(self, context, errors): + self.errors = errors + self.context = context + self.defaultType = self.context.get_type('Object') + self.currentType = self.defaultType + self.autoType = self.context.get_type('AUTO_TYPE') + + @visitor.on('node') + def visit(self, node, scope): + pass + + @visitor.when(ProgramNode)# + def visit(self, node, scope): + for i in range(len(node.declarations)): + _ithScope = scope.children[i] + self.visit(node.declarations[i], _ithScope) + + return scope + + @visitor.when(ClassDeclarationNode)# + def visit(self, node, scope): + index = 0 + + self.currentType = self.context.get_type(node.id) + + for feature in node.features: + if isinstance(feature, AttrDeclarationNode): + if feature.value is not None: + feature._auxIndex = index + index += 1 + self.visit(feature, scope) + + else: #funcDeclaration + _ithMethodScope = scope.children[index] + index += 1 + self.visit(feature,_ithMethodScope) + + @visitor.when(AttrDeclarationNode)# + def visit(self, node, scope): + _var = scope.find_variable(node.id) + _type = self.context.get_type(node.type) + if node.value is not None: + self.visit(node.value, scope.children[node._auxIndex]) + if _type == self.autoType: + if _var.type == self.autoType: + self.errors.append(f'Unable to infer the type of {node.id}') + node.type = _var.type.name + + @visitor.when(FuncDeclarationNode)# + def visit(self, node, scope): + _func = self.currentType.get_method(node.id, self.currentType, False) + + for i in range(len(node.params)): + _ithParamName = node.params[i][0] + _param = scope.find_variable(_ithParamName) + if _param.type == self.autoType: + self.errors.append(f'Unable to infer the type of {_param.name}') + node.params[i] = (_ithParamName, _param.type.name) + self.visit(node.body, scope) + + if self.context.get_type(node.type.name) == self.autoType: + if _func.return_type == self.autoType: + self.errors.append(f'Unable to infer the type of {_func.name}') + node.type = _func.return_type.name # + elif isinstance(node.type, Type): + node.type = node.type.name + + @visitor.when(ConditionalNode)# + def visit(self, node, scope): + _thenScope = scope.children[0] + _elseScope = scope.children[1] + + + self.visit(node.ifChunk, scope) + self.visit(node.thenChunk, _thenScope) + self.visit(node.elseChunk, _elseScope) + + @visitor.when(ChunkNode)# + def visit(self, node, scope): + for expr in node.chunk: + self.visit(expr, scope.children[0]) + + @visitor.when(CallNode)# + def visit(self, node, scope): + self.visit(node.obj, scope) + for _arg in node.args: + self.visit(_arg, scope) + + @visitor.when(LetInNode)# + def visit(self, node, scope): + count = 0 + for decl in node.decl_list: + expr = decl.expr + if expr is not None: + self.visit(expr, scope.children[count]) + count += 1 + + for d in node.decl_list: + _var = scope.find_variable(d.id) + if d.type == 'AUTO_TYPE': + if _var.type == self.autoType: + self.errors.append(f'Unable to infer the type of {_var.name}') + while not isinstance(_var.type, Type): + _var.type = _var.type.type + d.type = _var.type.name + + @visitor.when(SwitchCaseNode)# + def visit(self, node, scope): + self.visit(node.expr, scope) + for i in range(len(node.case_list)): + self.visit(node.case_list[i][2], scope.children[i]) + + @visitor.when(WhileNode)# + def visit(self, node, scope): + self.visit(node.condition, scope) + self.visit(node.loopChunk, scope.children[0]) + + @visitor.when(BinaryNode)# + def visit(self, node, scope): + self.visit(node.left, scope) + self.visit(node.right, scope) + + @visitor.when(AtomicNode)# + def visit(self, node, scope): + pass + + @visitor.when(AssignNode)# + def visit(self, node, scope): + self.visit(node.expr, scope.children[0]) \ No newline at end of file diff --git a/src/visitors/visitor.py b/src/visitors/visitor.py new file mode 100755 index 000000000..36d3e5d23 --- /dev/null +++ b/src/visitors/visitor.py @@ -0,0 +1,78 @@ +# The MIT License (MIT) +# +# Copyright (c) 2013 Curtis Schlak +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. + +import inspect + +__all__ = ['on', 'when'] + +def on(param_name): + def f(fn): + dispatcher = Dispatcher(param_name, fn) + return dispatcher + return f + +def when(param_type): + def f(fn): + frame = inspect.currentframe().f_back + func_name = fn.func_name if 'func_name' in dir(fn) else fn.__name__ + dispatcher = frame.f_locals[func_name] + if not isinstance(dispatcher, Dispatcher): + dispatcher = dispatcher.dispatcher + dispatcher.add_target(param_type, fn) + def ff(*args, **kw): + return dispatcher(*args, **kw) + ff.dispatcher = dispatcher + return ff + return f + +class Dispatcher(object): + def __init__(self, param_name, fn): + frame = inspect.currentframe().f_back.f_back + top_level = frame.f_locals == frame.f_globals + self.param_index = self.__argspec(fn).args.index(param_name) + self.param_name = param_name + self.targets = {} + + def __call__(self, *args, **kw): + typ = args[self.param_index].__class__ + d = self.targets.get(typ) + if d is not None: + return d(*args, **kw) + else: + issub = issubclass + t = self.targets + ks = t.keys() + ans = [t[k](*args, **kw) for k in ks if issub(typ, k)] + if len(ans) == 1: + return ans.pop() + return ans + + def add_target(self, typ, target): + self.targets[typ] = target + + @staticmethod + def __argspec(fn): + # Support for Python 3 type hints requires inspect.getfullargspec + if hasattr(inspect, 'getfullargspec'): + return inspect.getfullargspec(fn) + else: + return inspect.getargspec(fn) \ No newline at end of file diff --git a/tests/codegen/arith.mips b/tests/codegen/arith.mips new file mode 100644 index 000000000..9cecf1796 --- /dev/null +++ b/tests/codegen/arith.mips @@ -0,0 +1,12779 @@ +.data +default_str: .asciiz "" +.word 0 +data_1: .asciiz "Object" +.word 0 +data_2: .asciiz "IO" +.word 0 +data_3: .asciiz "String" +.word 0 +data_4: .asciiz "Int" +.word 0 +data_5: .asciiz "Bool" +.word 0 +data_6: .asciiz "A" +.word 0 +data_7: .asciiz "B" +.word 0 +data_8: .asciiz "C" +.word 0 +data_9: .asciiz "D" +.word 0 +data_10: .asciiz "E" +.word 0 +data_11: .asciiz "A2I" +.word 0 +data_12: .asciiz "Main" +.word 0 +data_13: .asciiz " +" +.word 0 +data_14: .asciiz "" +.word 0 +data_15: .asciiz "Abort called from class " +.word 0 +data_16: .asciiz "Index out of range exception" +.word 0 +data_17: .asciiz "Function call in a void instance" +.word 0 +data_18: .asciiz "Function call in a void instance" +.word 0 +data_19: .asciiz "Function call in a void instance" +.word 0 +data_20: .asciiz "Function call in a void instance" +.word 0 +data_21: .asciiz "Function call in a void instance" +.word 0 +data_22: .asciiz "Function call in a void instance" +.word 0 +data_23: .asciiz "Function call in a void instance" +.word 0 +data_24: .asciiz "Function call in a void instance" +.word 0 +data_25: .asciiz "Function call in a void instance" +.word 0 +data_26: .asciiz "Function call in a void instance" +.word 0 +data_27: .asciiz "Division by zero exception" +.word 0 +data_28: .asciiz "Function call in a void instance" +.word 0 +data_29: .asciiz "0" +.word 0 +data_30: .asciiz "1" +.word 0 +data_31: .asciiz "2" +.word 0 +data_32: .asciiz "3" +.word 0 +data_33: .asciiz "4" +.word 0 +data_34: .asciiz "5" +.word 0 +data_35: .asciiz "6" +.word 0 +data_36: .asciiz "7" +.word 0 +data_37: .asciiz "8" +.word 0 +data_38: .asciiz "9" +.word 0 +data_39: .asciiz "Function call in a void instance" +.word 0 +data_40: .asciiz "Function call in a void instance" +.word 0 +data_41: .asciiz "" +.word 0 +data_42: .asciiz "9" +.word 0 +data_43: .asciiz "8" +.word 0 +data_44: .asciiz "7" +.word 0 +data_45: .asciiz "6" +.word 0 +data_46: .asciiz "5" +.word 0 +data_47: .asciiz "4" +.word 0 +data_48: .asciiz "3" +.word 0 +data_49: .asciiz "2" +.word 0 +data_50: .asciiz "1" +.word 0 +data_51: .asciiz "0" +.word 0 +data_52: .asciiz "Function call in a void instance" +.word 0 +data_53: .asciiz "Function call in a void instance" +.word 0 +data_54: .asciiz "-" +.word 0 +data_55: .asciiz "Function call in a void instance" +.word 0 +data_56: .asciiz "+" +.word 0 +data_57: .asciiz "Function call in a void instance" +.word 0 +data_58: .asciiz "Function call in a void instance" +.word 0 +data_59: .asciiz "Function call in a void instance" +.word 0 +data_60: .asciiz "Function call in a void instance" +.word 0 +data_61: .asciiz "Function call in a void instance" +.word 0 +data_62: .asciiz "Function call in a void instance" +.word 0 +data_63: .asciiz "Function call in a void instance" +.word 0 +data_64: .asciiz "Function call in a void instance" +.word 0 +data_65: .asciiz "Function call in a void instance" +.word 0 +data_66: .asciiz "Function call in a void instance" +.word 0 +data_67: .asciiz "Function call in a void instance" +.word 0 +data_68: .asciiz "-" +.word 0 +data_69: .asciiz "Function call in a void instance" +.word 0 +data_70: .asciiz "Function call in a void instance" +.word 0 +data_71: .asciiz "0" +.word 0 +data_72: .asciiz "Division by zero exception" +.word 0 +data_73: .asciiz "Function call in a void instance" +.word 0 +data_74: .asciiz "Function call in a void instance" +.word 0 +data_75: .asciiz "Function call in a void instance" +.word 0 +data_76: .asciiz "" +.word 0 +data_77: .asciiz "\n\tTo add a number to " +.word 0 +data_78: .asciiz "Function call in a void instance" +.word 0 +data_79: .asciiz "Function call in a void instance" +.word 0 +data_80: .asciiz "...enter a:\n" +.word 0 +data_81: .asciiz "Function call in a void instance" +.word 0 +data_82: .asciiz "\tTo negate " +.word 0 +data_83: .asciiz "Function call in a void instance" +.word 0 +data_84: .asciiz "Function call in a void instance" +.word 0 +data_85: .asciiz "...enter b:\n" +.word 0 +data_86: .asciiz "Function call in a void instance" +.word 0 +data_87: .asciiz "\tTo find the difference between " +.word 0 +data_88: .asciiz "Function call in a void instance" +.word 0 +data_89: .asciiz "Function call in a void instance" +.word 0 +data_90: .asciiz "and another number...enter c:\n" +.word 0 +data_91: .asciiz "Function call in a void instance" +.word 0 +data_92: .asciiz "\tTo find the factorial of " +.word 0 +data_93: .asciiz "Function call in a void instance" +.word 0 +data_94: .asciiz "Function call in a void instance" +.word 0 +data_95: .asciiz "...enter d:\n" +.word 0 +data_96: .asciiz "Function call in a void instance" +.word 0 +data_97: .asciiz "\tTo square " +.word 0 +data_98: .asciiz "Function call in a void instance" +.word 0 +data_99: .asciiz "Function call in a void instance" +.word 0 +data_100: .asciiz "...enter e:\n" +.word 0 +data_101: .asciiz "Function call in a void instance" +.word 0 +data_102: .asciiz "\tTo cube " +.word 0 +data_103: .asciiz "Function call in a void instance" +.word 0 +data_104: .asciiz "Function call in a void instance" +.word 0 +data_105: .asciiz "...enter f:\n" +.word 0 +data_106: .asciiz "Function call in a void instance" +.word 0 +data_107: .asciiz "\tTo find out if " +.word 0 +data_108: .asciiz "Function call in a void instance" +.word 0 +data_109: .asciiz "Function call in a void instance" +.word 0 +data_110: .asciiz "is a multiple of 3...enter g:\n" +.word 0 +data_111: .asciiz "Function call in a void instance" +.word 0 +data_112: .asciiz "\tTo divide " +.word 0 +data_113: .asciiz "Function call in a void instance" +.word 0 +data_114: .asciiz "Function call in a void instance" +.word 0 +data_115: .asciiz "by 8...enter h:\n" +.word 0 +data_116: .asciiz "Function call in a void instance" +.word 0 +data_117: .asciiz "\tTo get a new number...enter j:\n" +.word 0 +data_118: .asciiz "Function call in a void instance" +.word 0 +data_119: .asciiz "\tTo quit...enter q:\n\n" +.word 0 +data_120: .asciiz "Function call in a void instance" +.word 0 +data_121: .asciiz "Function call in a void instance" +.word 0 +data_122: .asciiz "\n" +.word 0 +data_123: .asciiz "Function call in a void instance" +.word 0 +data_124: .asciiz "Please enter a number... " +.word 0 +data_125: .asciiz "Function call in a void instance" +.word 0 +data_126: .asciiz "Function call in a void instance" +.word 0 +data_127: .asciiz "Function call in a void instance" +.word 0 +data_128: .asciiz "Function call in a void instance" +.word 0 +data_129: .asciiz "Function call in a void instance" +.word 0 +data_130: .asciiz "Function call in a void instance" +.word 0 +data_131: .asciiz "Void isntance found in switch case" +.word 0 +data_132: .asciiz "Switch Case without valid branches" +.word 0 +data_133: .asciiz "Class type is now E\n" +.word 0 +data_134: .asciiz "Function call in a void instance" +.word 0 +data_135: .asciiz "Class type is now C\n" +.word 0 +data_136: .asciiz "Function call in a void instance" +.word 0 +data_137: .asciiz "Class type is now D\n" +.word 0 +data_138: .asciiz "Function call in a void instance" +.word 0 +data_139: .asciiz "Class type is now B\n" +.word 0 +data_140: .asciiz "Function call in a void instance" +.word 0 +data_141: .asciiz "Class type is now A\n" +.word 0 +data_142: .asciiz "Function call in a void instance" +.word 0 +data_143: .asciiz "Oooops\n" +.word 0 +data_144: .asciiz "Function call in a void instance" +.word 0 +data_145: .asciiz "Function call in a void instance" +.word 0 +data_146: .asciiz "Function call in a void instance" +.word 0 +data_147: .asciiz "Function call in a void instance" +.word 0 +data_148: .asciiz " " +.word 0 +data_149: .asciiz "Function call in a void instance" +.word 0 +data_150: .asciiz "number " +.word 0 +data_151: .asciiz "Function call in a void instance" +.word 0 +data_152: .asciiz "Function call in a void instance" +.word 0 +data_153: .asciiz "Function call in a void instance" +.word 0 +data_154: .asciiz "Function call in a void instance" +.word 0 +data_155: .asciiz "is odd!\n" +.word 0 +data_156: .asciiz "Function call in a void instance" +.word 0 +data_157: .asciiz "is even!\n" +.word 0 +data_158: .asciiz "Function call in a void instance" +.word 0 +data_159: .asciiz "Function call in a void instance" +.word 0 +data_160: .asciiz "Function call in a void instance" +.word 0 +data_161: .asciiz "a" +.word 0 +data_162: .asciiz "b" +.word 0 +data_163: .asciiz "c" +.word 0 +data_164: .asciiz "d" +.word 0 +data_165: .asciiz "e" +.word 0 +data_166: .asciiz "f" +.word 0 +data_167: .asciiz "g" +.word 0 +data_168: .asciiz "h" +.word 0 +data_169: .asciiz "j" +.word 0 +data_170: .asciiz "q" +.word 0 +data_171: .asciiz "Function call in a void instance" +.word 0 +data_172: .asciiz "Function call in a void instance" +.word 0 +data_173: .asciiz "Function call in a void instance" +.word 0 +data_174: .asciiz "Function call in a void instance" +.word 0 +data_175: .asciiz "Function call in a void instance" +.word 0 +data_176: .asciiz "Function call in a void instance" +.word 0 +data_177: .asciiz "number " +.word 0 +data_178: .asciiz "Function call in a void instance" +.word 0 +data_179: .asciiz "Function call in a void instance" +.word 0 +data_180: .asciiz "is equal to " +.word 0 +data_181: .asciiz "Function call in a void instance" +.word 0 +data_182: .asciiz "Function call in a void instance" +.word 0 +data_183: .asciiz "times 8 with a remainder of " +.word 0 +data_184: .asciiz "Function call in a void instance" +.word 0 +data_185: .asciiz "Function call in a void instance" +.word 0 +data_186: .asciiz "Function call in a void instance" +.word 0 +data_187: .asciiz "\n" +.word 0 +data_188: .asciiz "Function call in a void instance" +.word 0 +data_189: .asciiz "Function call in a void instance" +.word 0 +data_190: .asciiz "Function call in a void instance" +.word 0 +data_191: .asciiz "number " +.word 0 +data_192: .asciiz "Function call in a void instance" +.word 0 +data_193: .asciiz "Function call in a void instance" +.word 0 +data_194: .asciiz "is not divisible by 3.\n" +.word 0 +data_195: .asciiz "Function call in a void instance" +.word 0 +data_196: .asciiz "number " +.word 0 +data_197: .asciiz "Function call in a void instance" +.word 0 +data_198: .asciiz "Function call in a void instance" +.word 0 +data_199: .asciiz "is divisible by 3.\n" +.word 0 +data_200: .asciiz "Function call in a void instance" +.word 0 +data_201: .asciiz "Function call in a void instance" +.word 0 +data_202: .asciiz "Function call in a void instance" +.word 0 +data_203: .asciiz "Function call in a void instance" +.word 0 +data_204: .asciiz "Function call in a void instance" +.word 0 +data_205: .asciiz "Function call in a void instance" +.word 0 +data_206: .asciiz "Function call in a void instance" +.word 0 +data_207: .asciiz "Function call in a void instance" +.word 0 +data_208: .asciiz "Function call in a void instance" +.word 0 +data_209: .asciiz "Function call in a void instance" +.word 0 +data_210: .asciiz "Function call in a void instance" +.word 0 +data_211: .asciiz "Function call in a void instance" +.word 0 +data_212: .asciiz "Void isntance found in switch case" +.word 0 +data_213: .asciiz "Switch Case without valid branches" +.word 0 +data_214: .asciiz "Function call in a void instance" +.word 0 +data_215: .asciiz "Function call in a void instance" +.word 0 +data_216: .asciiz "Function call in a void instance" +.word 0 +data_217: .asciiz "Function call in a void instance" +.word 0 +data_218: .asciiz "Oooops\n" +.word 0 +data_219: .asciiz "Function call in a void instance" +.word 0 +data_220: .asciiz "Function call in a void instance" +.word 0 +data_221: .asciiz "Function call in a void instance" +.word 0 +data_222: .asciiz "Function call in a void instance" +.word 0 +data_223: .asciiz "Function call in a void instance" +.word 0 +data_224: .asciiz "Function call in a void instance" +.word 0 +data_225: .asciiz "Function call in a void instance" + + +types_table: +.word data_1 +.word data_2 +.word data_3 +.word data_4 +.word data_5 +.word data_6 +.word data_7 +.word data_8 +.word data_9 +.word data_10 +.word data_11 +.word data_12 + +prototype_table: + .word type_1_prototype + .word type_2_prototype + .word type_3_prototype + .word type_4_prototype + .word type_5_prototype + .word type_6_prototype + .word type_7_prototype + .word type_8_prototype + .word type_9_prototype + .word type_10_prototype + .word type_11_prototype + .word type_12_prototype + +type_1_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __ctor_Object + +type_1_prototype: +.word 0 +.word 4 +.word type_1_dispatch +.word -1 + + +type_2_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word function_out_string_at_IO +.word function_out_int_at_IO +.word function_in_string_at_IO +.word function_in_int_at_IO +.word __ctor_IO + +type_2_prototype: +.word 1 +.word 4 +.word type_2_dispatch +.word -1 + + +type_3_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word function_length_at_String +.word function_concat_at_String +.word function_substr_at_String +.word __ctor_String + +type_3_prototype: +.word 2 +.word 6 +.word type_3_dispatch +.word 0 +.word 0 +.word -1 + + +type_4_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __ctor_Int + +type_4_prototype: +.word 3 +.word 5 +.word type_4_dispatch +.word 0 +.word -1 + + +type_5_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __ctor_Bool + +type_5_prototype: +.word 4 +.word 5 +.word type_5_dispatch +.word 0 +.word -1 + + +type_6_dispatch: +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_method1_at_A +.word function_method2_at_A +.word function_method3_at_A +.word function_method4_at_A +.word function_method5_at_A +.word function_set_var_at_A +.word function_value_at_A +.word __attributes_ctor_A +.word __ctor_A + +type_6_prototype: +.word 5 +.word 5 +.word type_6_dispatch +.word 0 +.word -1 + + +type_7_dispatch: +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_method1_at_A +.word function_method2_at_A +.word function_method3_at_A +.word function_method4_at_A +.word function_method5_at_B +.word function_set_var_at_A +.word function_value_at_A +.word __attributes_ctor_B +.word __ctor_B + +type_7_prototype: +.word 6 +.word 5 +.word type_7_dispatch +.word 0 +.word -1 + + +type_8_dispatch: +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_method1_at_A +.word function_method2_at_A +.word function_method3_at_A +.word function_method4_at_A +.word function_method5_at_C +.word function_set_var_at_A +.word function_value_at_A +.word function_method6_at_C +.word __attributes_ctor_C +.word __ctor_C + +type_8_prototype: +.word 7 +.word 5 +.word type_8_dispatch +.word 0 +.word -1 + + +type_9_dispatch: +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_method1_at_A +.word function_method2_at_A +.word function_method3_at_A +.word function_method4_at_A +.word function_method5_at_B +.word function_set_var_at_A +.word function_value_at_A +.word function_method7_at_D +.word __attributes_ctor_D +.word __ctor_D + +type_9_prototype: +.word 8 +.word 5 +.word type_9_dispatch +.word 0 +.word -1 + + +type_10_dispatch: +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_method1_at_A +.word function_method2_at_A +.word function_method3_at_A +.word function_method4_at_A +.word function_method5_at_B +.word function_set_var_at_A +.word function_value_at_A +.word function_method7_at_D +.word function_method6_at_E +.word __attributes_ctor_E +.word __ctor_E + +type_10_prototype: +.word 9 +.word 5 +.word type_10_dispatch +.word 0 +.word -1 + + +type_11_dispatch: +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_a2i_at_A2I +.word function_a2i_aux_at_A2I +.word function_c2i_at_A2I +.word function_i2a_at_A2I +.word function_i2a_aux_at_A2I +.word function_i2c_at_A2I +.word __attributes_ctor_A2I +.word __ctor_A2I + +type_11_prototype: +.word 10 +.word 4 +.word type_11_dispatch +.word -1 + + +type_12_dispatch: +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_class_type_at_Main +.word function_get_int_at_Main +.word function_is_even_at_Main +.word function_main_at_Main +.word function_menu_at_Main +.word function_print_at_Main +.word function_prompt_at_Main +.word __attributes_ctor_Main +.word __ctor_Main + +type_12_prototype: +.word 11 +.word 8 +.word type_12_dispatch +.word 0 +.word 0 +.word 0 +.word 0 +.word -1 + + +.text +.globl main +__ctor_Object: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 0 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_abort_at_Object: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +la $t0 data_15 +sw $t0 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +la $t0 data_13 +sw $t0 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +li $v0 10 +syscall +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_type_name_at_Object: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_copy_at_Object: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $a0 4($t0) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t0 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 1 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_out_string_at_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +lw $v0 4($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_out_int_at_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -12($fp) +li $v0 1 +lw $a0 -12($fp) +syscall +lw $v0 4($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_in_string_at_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +jal read_string +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_in_int_at_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $v0 5 +syscall +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_String: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +li $t0 2 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -20($fp) +lw $t0 -20($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $a0 0($fp) +jal length +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -20($fp) +lw $t1 -12($fp) +sw $t1 16($t0) +lw $v0 -20($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_length_at_String: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 16($t0) +sw $t1 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_concat_at_String: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -24 +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -32($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 4($fp) +lw $t1 16($t0) +sw $t1 -24($fp) +lw $t0 0($fp) +lw $t1 16($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 12($t0) +sw $t1 -24($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 -20($fp) +add $t0 $t0 $t1 +sw $t0 -24($fp) +lw $a0 -32($fp) +lw $a1 -28($fp) +lw $a2 -24($fp) +jal concat +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 24 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_substr_at_String: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -36 +lw $t0 8($fp) +lw $t1 12($t0) +sw $t1 -16($fp) +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -40($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -36($fp) +lw $t0 8($fp) +lw $t1 16($t0) +sw $t1 -32($fp) +lw $t0 -32($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 -36($fp) +lw $t1 -40($fp) +add $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -28($fp) +lw $t1 -24($fp) +slt $t1 $t0 $t1 +sw $t1 -20($fp) +lw $t0 -20($fp) +bne $t0 $zero label_1 +j label_2 +label_1: +li $v0 4 +la $a0 data_16 +syscall +li $v0 10 +syscall +label_2: +lw $a0 -16($fp) +lw $a1 -40($fp) +lw $a2 -36($fp) +jal substr +sw $v0 -44($fp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 36 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_Int: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 3 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_Bool: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 4 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +jal __ctor_Main +sw $v0 -12($fp) +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal function_main_at_Main +addi $sp $sp 4 +sw $v0 -12($fp) +li $v0 0 +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +li $v0 10 +syscall + +__attributes_ctor_A: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -16($fp) +lw $t0 0($fp) +lw $t1 -16($fp) +sw $t1 12($t0) +lw $v0 0($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_value_at_A: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp 0 +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $v0 0($sp) +addi $sp $sp 4 +addi $sp $sp 0 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_set_var_at_A: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp 0 +lw $t0 0($fp) +lw $t1 4($fp) +addi $t1 $t1 12 +sw $t0 0($t1) +lw $v0 4($fp) +addi $sp $sp 0 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_method1_at_A: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp 0 +lw $v0 4($fp) +addi $sp $sp 0 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_method2_at_A: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -32 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -40($fp) +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -32($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 -32($fp) +lw $t1 -28($fp) +add $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 -36($fp) +sw $t0 -40($fp) +jal __ctor_B +sw $v0 -20($fp) +lw $t0 -20($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_3 +j label_4 +label_3: +li $v0 4 +la $a0 data_17 +syscall +li $v0 10 +syscall +label_4: +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -40($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 32 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_method3_at_A: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -28 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 -28($fp) +not $t0 $t0 +addi $t0 $t0 1 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -32($fp) +lw $t0 -32($fp) +sw $t0 -36($fp) +jal __ctor_C +sw $v0 -20($fp) +lw $t0 -20($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_5 +j label_6 +label_5: +li $v0 4 +la $a0 data_18 +syscall +li $v0 10 +syscall +label_6: +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 28 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_method4_at_A: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -88 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -84($fp) +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -80($fp) +lw $t0 -84($fp) +lw $t1 -80($fp) +slt $t1 $t0 $t1 +sw $t1 -76($fp) +lw $t0 -76($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -88($fp) +lw $t0 -88($fp) +lw $t1 12($t0) +sw $t1 -92($fp) +lw $t0 -92($fp) +bne $t0 $zero label_9 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -72($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -64($fp) +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -60($fp) +lw $t0 -64($fp) +lw $t1 -60($fp) +sub $t0 $t0 $t1 +sw $t0 -56($fp) +lw $t0 -56($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -68($fp) +lw $t0 -68($fp) +sw $t0 -72($fp) +jal __ctor_D +sw $v0 -52($fp) +lw $t0 -52($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -48($fp) +lw $t0 -48($fp) +bne $t0 $zero label_7 +j label_8 +label_7: +li $v0 4 +la $a0 data_19 +syscall +li $v0 10 +syscall +label_8: +lw $t0 -52($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -72($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -52($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -44($fp) +lw $t0 -44($fp) +sw $t0 -96($fp) +j label_12 +label_9: +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -40($fp) +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -32($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 -32($fp) +lw $t1 -28($fp) +sub $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 -36($fp) +sw $t0 -40($fp) +jal __ctor_D +sw $v0 -20($fp) +lw $t0 -20($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_10 +j label_11 +label_10: +li $v0 4 +la $a0 data_20 +syscall +li $v0 10 +syscall +label_11: +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -40($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -96($fp) +label_12: +lw $v0 -96($fp) +addi $sp $sp 88 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_method5_at_A: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -84 +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -88($fp) +lw $t0 -88($fp) +sw $t0 -92($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -80($fp) +lw $t0 -80($fp) +sw $t0 -84($fp) +label_13: +lw $t0 -84($fp) +lw $t1 12($t0) +sw $t1 -68($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -64($fp) +lw $t0 -68($fp) +lw $t1 -64($fp) +sle $t0 $t0 $t1 +sw $t0 -60($fp) +lw $t0 -60($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -72($fp) +lw $t0 -72($fp) +lw $t1 12($t0) +sw $t1 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_14 +j label_15 +label_14: +lw $t0 -92($fp) +lw $t1 12($t0) +sw $t1 -52($fp) +lw $t0 -84($fp) +lw $t1 12($t0) +sw $t1 -48($fp) +lw $t0 -52($fp) +lw $t1 -48($fp) +mul $t0 $t0 $t1 +sw $t0 -44($fp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -56($fp) +lw $t0 -56($fp) +sw $t0 -92($fp) +lw $t0 -84($fp) +lw $t1 12($t0) +sw $t1 -36($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -24($fp) +lw $t0 -24($fp) +lw $t1 12($t0) +sw $t1 -32($fp) +lw $t0 -36($fp) +lw $t1 -32($fp) +add $t0 $t0 $t1 +sw $t0 -28($fp) +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -40($fp) +lw $t0 -40($fp) +sw $t0 -84($fp) +j label_13 +label_15: +jal __ctor_E +sw $v0 -20($fp) +lw $t0 -20($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_16 +j label_17 +label_16: +li $v0 4 +la $a0 data_21 +syscall +li $v0 10 +syscall +label_17: +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -92($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 84 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_A: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 5 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_A +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__attributes_ctor_B: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_A +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 0($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_method5_at_B: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -32 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -40($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -32($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 -32($fp) +lw $t1 -28($fp) +mul $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 -36($fp) +sw $t0 -40($fp) +jal __ctor_E +sw $v0 -20($fp) +lw $t0 -20($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_18 +j label_19 +label_18: +li $v0 4 +la $a0 data_22 +syscall +li $v0 10 +syscall +label_19: +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -40($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 32 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_B: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 6 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_B +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__attributes_ctor_C: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_B +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 0($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_method6_at_C: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -28 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 -28($fp) +not $t0 $t0 +addi $t0 $t0 1 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -32($fp) +lw $t0 -32($fp) +sw $t0 -36($fp) +jal __ctor_A +sw $v0 -20($fp) +lw $t0 -20($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_20 +j label_21 +label_20: +li $v0 4 +la $a0 data_23 +syscall +li $v0 10 +syscall +label_21: +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 28 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_method5_at_C: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -48 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -56($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -32($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 -32($fp) +lw $t1 -28($fp) +mul $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 -36($fp) +lw $t1 12($t0) +sw $t1 -48($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -44($fp) +lw $t0 -48($fp) +lw $t1 -44($fp) +mul $t0 $t0 $t1 +sw $t0 -40($fp) +lw $t0 -40($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -52($fp) +lw $t0 -52($fp) +sw $t0 -56($fp) +jal __ctor_E +sw $v0 -20($fp) +lw $t0 -20($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_22 +j label_23 +label_22: +li $v0 4 +la $a0 data_24 +syscall +li $v0 10 +syscall +label_23: +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -56($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 48 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_C: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 7 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_C +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__attributes_ctor_D: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_B +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 0($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_method7_at_D: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -236 +lw $t0 0($fp) +sw $t0 -244($fp) +lw $t0 -244($fp) +lw $t1 12($t0) +sw $t1 -228($fp) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -216($fp) +lw $t0 -216($fp) +lw $t1 12($t0) +sw $t1 -224($fp) +lw $t0 -228($fp) +lw $t1 -224($fp) +slt $t1 $t0 $t1 +sw $t1 -220($fp) +lw $t0 -220($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -232($fp) +lw $t0 -232($fp) +lw $t1 12($t0) +sw $t1 -236($fp) +lw $t0 -236($fp) +bne $t0 $zero label_44 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -168($fp) +lw $t0 -168($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -196($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -188($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -180($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -184($fp) +lw $t0 -196($fp) +lw $t1 -188($fp) +seq $t0 $t0 $t1 +sw $t0 -176($fp) +lw $t0 -176($fp) +bne $t0 $zero label_24 +lw $t0 -196($fp) +lw $t1 -180($fp) +seq $t0 $t0 $t1 +sw $t0 -176($fp) +lw $t0 -176($fp) +bne $t0 $zero label_25 +lw $t0 -196($fp) +lw $t1 -184($fp) +seq $t0 $t0 $t1 +sw $t0 -176($fp) +lw $t0 -176($fp) +bne $t0 $zero label_26 +lw $t0 -168($fp) +lw $t1 -244($fp) +seq $t0 $t0 $t1 +sw $t0 -172($fp) +j label_27 +label_24: +lw $t0 -168($fp) +lw $t1 12($t0) +sw $t1 -200($fp) +lw $t0 -244($fp) +lw $t1 12($t0) +sw $t1 -192($fp) +lw $t0 -200($fp) +lw $t1 -192($fp) +seq $t0 $t0 $t1 +sw $t0 -172($fp) +j label_27 +label_25: +lw $t0 -168($fp) +lw $t1 12($t0) +sw $t1 -200($fp) +lw $t0 -244($fp) +lw $t1 12($t0) +sw $t1 -192($fp) +lw $t0 -200($fp) +move $a0 $t0 +lw $t0 -192($fp) +move $a1 $t0 +jal equal_str +sw $v0 -172($fp) +j label_27 +label_26: +lw $t0 -168($fp) +lw $t1 12($t0) +sw $t1 -200($fp) +lw $t0 -244($fp) +lw $t1 12($t0) +sw $t1 -192($fp) +lw $t0 -200($fp) +lw $t1 -192($fp) +seq $t0 $t0 $t1 +sw $t0 -172($fp) +j label_27 +label_27: +lw $t0 -172($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -204($fp) +lw $t0 -204($fp) +lw $t1 12($t0) +sw $t1 -208($fp) +lw $t0 -208($fp) +bne $t0 $zero label_42 +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -120($fp) +lw $t0 -120($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -148($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -140($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -132($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -136($fp) +lw $t0 -148($fp) +lw $t1 -140($fp) +seq $t0 $t0 $t1 +sw $t0 -128($fp) +lw $t0 -128($fp) +bne $t0 $zero label_28 +lw $t0 -148($fp) +lw $t1 -132($fp) +seq $t0 $t0 $t1 +sw $t0 -128($fp) +lw $t0 -128($fp) +bne $t0 $zero label_29 +lw $t0 -148($fp) +lw $t1 -136($fp) +seq $t0 $t0 $t1 +sw $t0 -128($fp) +lw $t0 -128($fp) +bne $t0 $zero label_30 +lw $t0 -120($fp) +lw $t1 -244($fp) +seq $t0 $t0 $t1 +sw $t0 -124($fp) +j label_31 +label_28: +lw $t0 -120($fp) +lw $t1 12($t0) +sw $t1 -152($fp) +lw $t0 -244($fp) +lw $t1 12($t0) +sw $t1 -144($fp) +lw $t0 -152($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -124($fp) +j label_31 +label_29: +lw $t0 -120($fp) +lw $t1 12($t0) +sw $t1 -152($fp) +lw $t0 -244($fp) +lw $t1 12($t0) +sw $t1 -144($fp) +lw $t0 -152($fp) +move $a0 $t0 +lw $t0 -144($fp) +move $a1 $t0 +jal equal_str +sw $v0 -124($fp) +j label_31 +label_30: +lw $t0 -120($fp) +lw $t1 12($t0) +sw $t1 -152($fp) +lw $t0 -244($fp) +lw $t1 12($t0) +sw $t1 -144($fp) +lw $t0 -152($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -124($fp) +j label_31 +label_31: +lw $t0 -124($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -156($fp) +lw $t0 -156($fp) +lw $t1 12($t0) +sw $t1 -160($fp) +lw $t0 -160($fp) +bne $t0 $zero label_40 +li $t0 2 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -72($fp) +lw $t0 -72($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -100($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -92($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -84($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -88($fp) +lw $t0 -100($fp) +lw $t1 -92($fp) +seq $t0 $t0 $t1 +sw $t0 -80($fp) +lw $t0 -80($fp) +bne $t0 $zero label_32 +lw $t0 -100($fp) +lw $t1 -84($fp) +seq $t0 $t0 $t1 +sw $t0 -80($fp) +lw $t0 -80($fp) +bne $t0 $zero label_33 +lw $t0 -100($fp) +lw $t1 -88($fp) +seq $t0 $t0 $t1 +sw $t0 -80($fp) +lw $t0 -80($fp) +bne $t0 $zero label_34 +lw $t0 -72($fp) +lw $t1 -244($fp) +seq $t0 $t0 $t1 +sw $t0 -76($fp) +j label_35 +label_32: +lw $t0 -72($fp) +lw $t1 12($t0) +sw $t1 -104($fp) +lw $t0 -244($fp) +lw $t1 12($t0) +sw $t1 -96($fp) +lw $t0 -104($fp) +lw $t1 -96($fp) +seq $t0 $t0 $t1 +sw $t0 -76($fp) +j label_35 +label_33: +lw $t0 -72($fp) +lw $t1 12($t0) +sw $t1 -104($fp) +lw $t0 -244($fp) +lw $t1 12($t0) +sw $t1 -96($fp) +lw $t0 -104($fp) +move $a0 $t0 +lw $t0 -96($fp) +move $a1 $t0 +jal equal_str +sw $v0 -76($fp) +j label_35 +label_34: +lw $t0 -72($fp) +lw $t1 12($t0) +sw $t1 -104($fp) +lw $t0 -244($fp) +lw $t1 12($t0) +sw $t1 -96($fp) +lw $t0 -104($fp) +lw $t1 -96($fp) +seq $t0 $t0 $t1 +sw $t0 -76($fp) +j label_35 +label_35: +lw $t0 -76($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -108($fp) +lw $t0 -108($fp) +lw $t1 12($t0) +sw $t1 -112($fp) +lw $t0 -112($fp) +bne $t0 $zero label_38 +lw $t0 -244($fp) +lw $t1 12($t0) +sw $t1 -64($fp) +li $t0 3 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -52($fp) +lw $t0 -52($fp) +lw $t1 12($t0) +sw $t1 -60($fp) +lw $t0 -64($fp) +lw $t1 -60($fp) +sub $t0 $t0 $t1 +sw $t0 -56($fp) +lw $t0 -56($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -68($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -48($fp) +lw $t0 -48($fp) +bne $t0 $zero label_36 +j label_37 +label_36: +li $v0 4 +la $a0 data_25 +syscall +li $v0 10 +syscall +label_37: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -68($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 40($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -44($fp) +lw $t0 -44($fp) +sw $t0 -116($fp) +j label_39 +label_38: +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -40($fp) +lw $t0 -40($fp) +sw $t0 -116($fp) +label_39: +lw $t0 -116($fp) +sw $t0 -164($fp) +j label_41 +label_40: +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 -36($fp) +sw $t0 -164($fp) +label_41: +lw $t0 -164($fp) +sw $t0 -212($fp) +j label_43 +label_42: +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -32($fp) +lw $t0 -32($fp) +sw $t0 -212($fp) +label_43: +lw $t0 -212($fp) +sw $t0 -240($fp) +j label_47 +label_44: +lw $t0 -244($fp) +lw $t1 12($t0) +sw $t1 -24($fp) +lw $t0 -24($fp) +not $t0 $t0 +addi $t0 $t0 1 +sw $t0 -20($fp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_45 +j label_46 +label_45: +li $v0 4 +la $a0 data_26 +syscall +li $v0 10 +syscall +label_46: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 40($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -240($fp) +label_47: +lw $v0 -240($fp) +addi $sp $sp 236 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_D: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 8 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_D +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__attributes_ctor_E: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_D +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 0($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_method6_at_E: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -40 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -48($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -40($fp) +li $t0 8 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -24($fp) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t0 -28($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 -24($fp) +lw $t1 12($t0) +sw $t1 -36($fp) +lw $t0 -28($fp) +lw $t1 -36($fp) +seq $t0 $t0 $t1 +sw $t0 -28($fp) +lw $t0 -28($fp) +bne $t0 $zero label_48 +j label_49 +label_48: +li $v0 4 +la $a0 data_27 +syscall +li $v0 10 +syscall +label_49: +lw $t0 -40($fp) +lw $t1 -36($fp) +div $t0 $t1 +mflo $t0 +sw $t0 -32($fp) +lw $t0 -32($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -44($fp) +lw $t0 -44($fp) +sw $t0 -48($fp) +jal __ctor_A +sw $v0 -20($fp) +lw $t0 -20($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_50 +j label_51 +label_50: +li $v0 4 +la $a0 data_28 +syscall +li $v0 10 +syscall +label_51: +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -48($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 40 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_E: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 9 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_E +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__attributes_ctor_A2I: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp 0 +lw $v0 0($fp) +addi $sp $sp 0 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_c2i_at_A2I: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -572 +la $t0 data_29 +sw $t0 -536($fp) +lw $t0 -536($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -532($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -564($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -556($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -548($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -552($fp) +lw $t0 -564($fp) +lw $t1 -556($fp) +seq $t0 $t0 $t1 +sw $t0 -544($fp) +lw $t0 -544($fp) +bne $t0 $zero label_52 +lw $t0 -564($fp) +lw $t1 -548($fp) +seq $t0 $t0 $t1 +sw $t0 -544($fp) +lw $t0 -544($fp) +bne $t0 $zero label_53 +lw $t0 -564($fp) +lw $t1 -552($fp) +seq $t0 $t0 $t1 +sw $t0 -544($fp) +lw $t0 -544($fp) +bne $t0 $zero label_54 +lw $t0 0($fp) +lw $t1 -532($fp) +seq $t0 $t0 $t1 +sw $t0 -540($fp) +j label_55 +label_52: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -568($fp) +lw $t0 -532($fp) +lw $t1 12($t0) +sw $t1 -560($fp) +lw $t0 -568($fp) +lw $t1 -560($fp) +seq $t0 $t0 $t1 +sw $t0 -540($fp) +j label_55 +label_53: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -568($fp) +lw $t0 -532($fp) +lw $t1 12($t0) +sw $t1 -560($fp) +lw $t0 -568($fp) +move $a0 $t0 +lw $t0 -560($fp) +move $a1 $t0 +jal equal_str +sw $v0 -540($fp) +j label_55 +label_54: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -568($fp) +lw $t0 -532($fp) +lw $t1 12($t0) +sw $t1 -560($fp) +lw $t0 -568($fp) +lw $t1 -560($fp) +seq $t0 $t0 $t1 +sw $t0 -540($fp) +j label_55 +label_55: +lw $t0 -540($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -572($fp) +lw $t0 -572($fp) +lw $t1 12($t0) +sw $t1 -576($fp) +lw $t0 -576($fp) +bne $t0 $zero label_112 +la $t0 data_30 +sw $t0 -484($fp) +lw $t0 -484($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -480($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -512($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -504($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -496($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -500($fp) +lw $t0 -512($fp) +lw $t1 -504($fp) +seq $t0 $t0 $t1 +sw $t0 -492($fp) +lw $t0 -492($fp) +bne $t0 $zero label_56 +lw $t0 -512($fp) +lw $t1 -496($fp) +seq $t0 $t0 $t1 +sw $t0 -492($fp) +lw $t0 -492($fp) +bne $t0 $zero label_57 +lw $t0 -512($fp) +lw $t1 -500($fp) +seq $t0 $t0 $t1 +sw $t0 -492($fp) +lw $t0 -492($fp) +bne $t0 $zero label_58 +lw $t0 0($fp) +lw $t1 -480($fp) +seq $t0 $t0 $t1 +sw $t0 -488($fp) +j label_59 +label_56: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -516($fp) +lw $t0 -480($fp) +lw $t1 12($t0) +sw $t1 -508($fp) +lw $t0 -516($fp) +lw $t1 -508($fp) +seq $t0 $t0 $t1 +sw $t0 -488($fp) +j label_59 +label_57: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -516($fp) +lw $t0 -480($fp) +lw $t1 12($t0) +sw $t1 -508($fp) +lw $t0 -516($fp) +move $a0 $t0 +lw $t0 -508($fp) +move $a1 $t0 +jal equal_str +sw $v0 -488($fp) +j label_59 +label_58: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -516($fp) +lw $t0 -480($fp) +lw $t1 12($t0) +sw $t1 -508($fp) +lw $t0 -516($fp) +lw $t1 -508($fp) +seq $t0 $t0 $t1 +sw $t0 -488($fp) +j label_59 +label_59: +lw $t0 -488($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -520($fp) +lw $t0 -520($fp) +lw $t1 12($t0) +sw $t1 -524($fp) +lw $t0 -524($fp) +bne $t0 $zero label_110 +la $t0 data_31 +sw $t0 -432($fp) +lw $t0 -432($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -428($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -460($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -452($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -444($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -448($fp) +lw $t0 -460($fp) +lw $t1 -452($fp) +seq $t0 $t0 $t1 +sw $t0 -440($fp) +lw $t0 -440($fp) +bne $t0 $zero label_60 +lw $t0 -460($fp) +lw $t1 -444($fp) +seq $t0 $t0 $t1 +sw $t0 -440($fp) +lw $t0 -440($fp) +bne $t0 $zero label_61 +lw $t0 -460($fp) +lw $t1 -448($fp) +seq $t0 $t0 $t1 +sw $t0 -440($fp) +lw $t0 -440($fp) +bne $t0 $zero label_62 +lw $t0 0($fp) +lw $t1 -428($fp) +seq $t0 $t0 $t1 +sw $t0 -436($fp) +j label_63 +label_60: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -464($fp) +lw $t0 -428($fp) +lw $t1 12($t0) +sw $t1 -456($fp) +lw $t0 -464($fp) +lw $t1 -456($fp) +seq $t0 $t0 $t1 +sw $t0 -436($fp) +j label_63 +label_61: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -464($fp) +lw $t0 -428($fp) +lw $t1 12($t0) +sw $t1 -456($fp) +lw $t0 -464($fp) +move $a0 $t0 +lw $t0 -456($fp) +move $a1 $t0 +jal equal_str +sw $v0 -436($fp) +j label_63 +label_62: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -464($fp) +lw $t0 -428($fp) +lw $t1 12($t0) +sw $t1 -456($fp) +lw $t0 -464($fp) +lw $t1 -456($fp) +seq $t0 $t0 $t1 +sw $t0 -436($fp) +j label_63 +label_63: +lw $t0 -436($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -468($fp) +lw $t0 -468($fp) +lw $t1 12($t0) +sw $t1 -472($fp) +lw $t0 -472($fp) +bne $t0 $zero label_108 +la $t0 data_32 +sw $t0 -380($fp) +lw $t0 -380($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -376($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -408($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -400($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -392($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -396($fp) +lw $t0 -408($fp) +lw $t1 -400($fp) +seq $t0 $t0 $t1 +sw $t0 -388($fp) +lw $t0 -388($fp) +bne $t0 $zero label_64 +lw $t0 -408($fp) +lw $t1 -392($fp) +seq $t0 $t0 $t1 +sw $t0 -388($fp) +lw $t0 -388($fp) +bne $t0 $zero label_65 +lw $t0 -408($fp) +lw $t1 -396($fp) +seq $t0 $t0 $t1 +sw $t0 -388($fp) +lw $t0 -388($fp) +bne $t0 $zero label_66 +lw $t0 0($fp) +lw $t1 -376($fp) +seq $t0 $t0 $t1 +sw $t0 -384($fp) +j label_67 +label_64: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -412($fp) +lw $t0 -376($fp) +lw $t1 12($t0) +sw $t1 -404($fp) +lw $t0 -412($fp) +lw $t1 -404($fp) +seq $t0 $t0 $t1 +sw $t0 -384($fp) +j label_67 +label_65: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -412($fp) +lw $t0 -376($fp) +lw $t1 12($t0) +sw $t1 -404($fp) +lw $t0 -412($fp) +move $a0 $t0 +lw $t0 -404($fp) +move $a1 $t0 +jal equal_str +sw $v0 -384($fp) +j label_67 +label_66: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -412($fp) +lw $t0 -376($fp) +lw $t1 12($t0) +sw $t1 -404($fp) +lw $t0 -412($fp) +lw $t1 -404($fp) +seq $t0 $t0 $t1 +sw $t0 -384($fp) +j label_67 +label_67: +lw $t0 -384($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -416($fp) +lw $t0 -416($fp) +lw $t1 12($t0) +sw $t1 -420($fp) +lw $t0 -420($fp) +bne $t0 $zero label_106 +la $t0 data_33 +sw $t0 -328($fp) +lw $t0 -328($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -324($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -356($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -348($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -340($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -344($fp) +lw $t0 -356($fp) +lw $t1 -348($fp) +seq $t0 $t0 $t1 +sw $t0 -336($fp) +lw $t0 -336($fp) +bne $t0 $zero label_68 +lw $t0 -356($fp) +lw $t1 -340($fp) +seq $t0 $t0 $t1 +sw $t0 -336($fp) +lw $t0 -336($fp) +bne $t0 $zero label_69 +lw $t0 -356($fp) +lw $t1 -344($fp) +seq $t0 $t0 $t1 +sw $t0 -336($fp) +lw $t0 -336($fp) +bne $t0 $zero label_70 +lw $t0 0($fp) +lw $t1 -324($fp) +seq $t0 $t0 $t1 +sw $t0 -332($fp) +j label_71 +label_68: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -360($fp) +lw $t0 -324($fp) +lw $t1 12($t0) +sw $t1 -352($fp) +lw $t0 -360($fp) +lw $t1 -352($fp) +seq $t0 $t0 $t1 +sw $t0 -332($fp) +j label_71 +label_69: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -360($fp) +lw $t0 -324($fp) +lw $t1 12($t0) +sw $t1 -352($fp) +lw $t0 -360($fp) +move $a0 $t0 +lw $t0 -352($fp) +move $a1 $t0 +jal equal_str +sw $v0 -332($fp) +j label_71 +label_70: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -360($fp) +lw $t0 -324($fp) +lw $t1 12($t0) +sw $t1 -352($fp) +lw $t0 -360($fp) +lw $t1 -352($fp) +seq $t0 $t0 $t1 +sw $t0 -332($fp) +j label_71 +label_71: +lw $t0 -332($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -364($fp) +lw $t0 -364($fp) +lw $t1 12($t0) +sw $t1 -368($fp) +lw $t0 -368($fp) +bne $t0 $zero label_104 +la $t0 data_34 +sw $t0 -276($fp) +lw $t0 -276($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -272($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -304($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -296($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -288($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -292($fp) +lw $t0 -304($fp) +lw $t1 -296($fp) +seq $t0 $t0 $t1 +sw $t0 -284($fp) +lw $t0 -284($fp) +bne $t0 $zero label_72 +lw $t0 -304($fp) +lw $t1 -288($fp) +seq $t0 $t0 $t1 +sw $t0 -284($fp) +lw $t0 -284($fp) +bne $t0 $zero label_73 +lw $t0 -304($fp) +lw $t1 -292($fp) +seq $t0 $t0 $t1 +sw $t0 -284($fp) +lw $t0 -284($fp) +bne $t0 $zero label_74 +lw $t0 0($fp) +lw $t1 -272($fp) +seq $t0 $t0 $t1 +sw $t0 -280($fp) +j label_75 +label_72: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -308($fp) +lw $t0 -272($fp) +lw $t1 12($t0) +sw $t1 -300($fp) +lw $t0 -308($fp) +lw $t1 -300($fp) +seq $t0 $t0 $t1 +sw $t0 -280($fp) +j label_75 +label_73: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -308($fp) +lw $t0 -272($fp) +lw $t1 12($t0) +sw $t1 -300($fp) +lw $t0 -308($fp) +move $a0 $t0 +lw $t0 -300($fp) +move $a1 $t0 +jal equal_str +sw $v0 -280($fp) +j label_75 +label_74: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -308($fp) +lw $t0 -272($fp) +lw $t1 12($t0) +sw $t1 -300($fp) +lw $t0 -308($fp) +lw $t1 -300($fp) +seq $t0 $t0 $t1 +sw $t0 -280($fp) +j label_75 +label_75: +lw $t0 -280($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -312($fp) +lw $t0 -312($fp) +lw $t1 12($t0) +sw $t1 -316($fp) +lw $t0 -316($fp) +bne $t0 $zero label_102 +la $t0 data_35 +sw $t0 -224($fp) +lw $t0 -224($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -220($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -252($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -244($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -236($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -240($fp) +lw $t0 -252($fp) +lw $t1 -244($fp) +seq $t0 $t0 $t1 +sw $t0 -232($fp) +lw $t0 -232($fp) +bne $t0 $zero label_76 +lw $t0 -252($fp) +lw $t1 -236($fp) +seq $t0 $t0 $t1 +sw $t0 -232($fp) +lw $t0 -232($fp) +bne $t0 $zero label_77 +lw $t0 -252($fp) +lw $t1 -240($fp) +seq $t0 $t0 $t1 +sw $t0 -232($fp) +lw $t0 -232($fp) +bne $t0 $zero label_78 +lw $t0 0($fp) +lw $t1 -220($fp) +seq $t0 $t0 $t1 +sw $t0 -228($fp) +j label_79 +label_76: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -256($fp) +lw $t0 -220($fp) +lw $t1 12($t0) +sw $t1 -248($fp) +lw $t0 -256($fp) +lw $t1 -248($fp) +seq $t0 $t0 $t1 +sw $t0 -228($fp) +j label_79 +label_77: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -256($fp) +lw $t0 -220($fp) +lw $t1 12($t0) +sw $t1 -248($fp) +lw $t0 -256($fp) +move $a0 $t0 +lw $t0 -248($fp) +move $a1 $t0 +jal equal_str +sw $v0 -228($fp) +j label_79 +label_78: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -256($fp) +lw $t0 -220($fp) +lw $t1 12($t0) +sw $t1 -248($fp) +lw $t0 -256($fp) +lw $t1 -248($fp) +seq $t0 $t0 $t1 +sw $t0 -228($fp) +j label_79 +label_79: +lw $t0 -228($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -260($fp) +lw $t0 -260($fp) +lw $t1 12($t0) +sw $t1 -264($fp) +lw $t0 -264($fp) +bne $t0 $zero label_100 +la $t0 data_36 +sw $t0 -172($fp) +lw $t0 -172($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -168($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -200($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -192($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -184($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -188($fp) +lw $t0 -200($fp) +lw $t1 -192($fp) +seq $t0 $t0 $t1 +sw $t0 -180($fp) +lw $t0 -180($fp) +bne $t0 $zero label_80 +lw $t0 -200($fp) +lw $t1 -184($fp) +seq $t0 $t0 $t1 +sw $t0 -180($fp) +lw $t0 -180($fp) +bne $t0 $zero label_81 +lw $t0 -200($fp) +lw $t1 -188($fp) +seq $t0 $t0 $t1 +sw $t0 -180($fp) +lw $t0 -180($fp) +bne $t0 $zero label_82 +lw $t0 0($fp) +lw $t1 -168($fp) +seq $t0 $t0 $t1 +sw $t0 -176($fp) +j label_83 +label_80: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -204($fp) +lw $t0 -168($fp) +lw $t1 12($t0) +sw $t1 -196($fp) +lw $t0 -204($fp) +lw $t1 -196($fp) +seq $t0 $t0 $t1 +sw $t0 -176($fp) +j label_83 +label_81: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -204($fp) +lw $t0 -168($fp) +lw $t1 12($t0) +sw $t1 -196($fp) +lw $t0 -204($fp) +move $a0 $t0 +lw $t0 -196($fp) +move $a1 $t0 +jal equal_str +sw $v0 -176($fp) +j label_83 +label_82: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -204($fp) +lw $t0 -168($fp) +lw $t1 12($t0) +sw $t1 -196($fp) +lw $t0 -204($fp) +lw $t1 -196($fp) +seq $t0 $t0 $t1 +sw $t0 -176($fp) +j label_83 +label_83: +lw $t0 -176($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -208($fp) +lw $t0 -208($fp) +lw $t1 12($t0) +sw $t1 -212($fp) +lw $t0 -212($fp) +bne $t0 $zero label_98 +la $t0 data_37 +sw $t0 -120($fp) +lw $t0 -120($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -116($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -148($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -140($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -132($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -136($fp) +lw $t0 -148($fp) +lw $t1 -140($fp) +seq $t0 $t0 $t1 +sw $t0 -128($fp) +lw $t0 -128($fp) +bne $t0 $zero label_84 +lw $t0 -148($fp) +lw $t1 -132($fp) +seq $t0 $t0 $t1 +sw $t0 -128($fp) +lw $t0 -128($fp) +bne $t0 $zero label_85 +lw $t0 -148($fp) +lw $t1 -136($fp) +seq $t0 $t0 $t1 +sw $t0 -128($fp) +lw $t0 -128($fp) +bne $t0 $zero label_86 +lw $t0 0($fp) +lw $t1 -116($fp) +seq $t0 $t0 $t1 +sw $t0 -124($fp) +j label_87 +label_84: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -152($fp) +lw $t0 -116($fp) +lw $t1 12($t0) +sw $t1 -144($fp) +lw $t0 -152($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -124($fp) +j label_87 +label_85: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -152($fp) +lw $t0 -116($fp) +lw $t1 12($t0) +sw $t1 -144($fp) +lw $t0 -152($fp) +move $a0 $t0 +lw $t0 -144($fp) +move $a1 $t0 +jal equal_str +sw $v0 -124($fp) +j label_87 +label_86: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -152($fp) +lw $t0 -116($fp) +lw $t1 12($t0) +sw $t1 -144($fp) +lw $t0 -152($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -124($fp) +j label_87 +label_87: +lw $t0 -124($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -156($fp) +lw $t0 -156($fp) +lw $t1 12($t0) +sw $t1 -160($fp) +lw $t0 -160($fp) +bne $t0 $zero label_96 +la $t0 data_38 +sw $t0 -68($fp) +lw $t0 -68($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -64($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -96($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -88($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -80($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -84($fp) +lw $t0 -96($fp) +lw $t1 -88($fp) +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_88 +lw $t0 -96($fp) +lw $t1 -80($fp) +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_89 +lw $t0 -96($fp) +lw $t1 -84($fp) +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_90 +lw $t0 0($fp) +lw $t1 -64($fp) +seq $t0 $t0 $t1 +sw $t0 -72($fp) +j label_91 +label_88: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -100($fp) +lw $t0 -64($fp) +lw $t1 12($t0) +sw $t1 -92($fp) +lw $t0 -100($fp) +lw $t1 -92($fp) +seq $t0 $t0 $t1 +sw $t0 -72($fp) +j label_91 +label_89: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -100($fp) +lw $t0 -64($fp) +lw $t1 12($t0) +sw $t1 -92($fp) +lw $t0 -100($fp) +move $a0 $t0 +lw $t0 -92($fp) +move $a1 $t0 +jal equal_str +sw $v0 -72($fp) +j label_91 +label_90: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -100($fp) +lw $t0 -64($fp) +lw $t1 12($t0) +sw $t1 -92($fp) +lw $t0 -100($fp) +lw $t1 -92($fp) +seq $t0 $t0 $t1 +sw $t0 -72($fp) +j label_91 +label_91: +lw $t0 -72($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -104($fp) +lw $t0 -104($fp) +lw $t1 12($t0) +sw $t1 -108($fp) +lw $t0 -108($fp) +bne $t0 $zero label_94 +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -60($fp) +lw $t0 -60($fp) +bne $t0 $zero label_92 +j label_93 +label_92: +li $v0 4 +la $a0 data_39 +syscall +li $v0 10 +syscall +label_93: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 0($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -56($fp) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -52($fp) +lw $t0 -52($fp) +sw $t0 -112($fp) +j label_95 +label_94: +li $t0 9 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -48($fp) +lw $t0 -48($fp) +sw $t0 -112($fp) +label_95: +lw $t0 -112($fp) +sw $t0 -164($fp) +j label_97 +label_96: +li $t0 8 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -44($fp) +lw $t0 -44($fp) +sw $t0 -164($fp) +label_97: +lw $t0 -164($fp) +sw $t0 -216($fp) +j label_99 +label_98: +li $t0 7 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -40($fp) +lw $t0 -40($fp) +sw $t0 -216($fp) +label_99: +lw $t0 -216($fp) +sw $t0 -268($fp) +j label_101 +label_100: +li $t0 6 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 -36($fp) +sw $t0 -268($fp) +label_101: +lw $t0 -268($fp) +sw $t0 -320($fp) +j label_103 +label_102: +li $t0 5 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -32($fp) +lw $t0 -32($fp) +sw $t0 -320($fp) +label_103: +lw $t0 -320($fp) +sw $t0 -372($fp) +j label_105 +label_104: +li $t0 4 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t0 -28($fp) +sw $t0 -372($fp) +label_105: +lw $t0 -372($fp) +sw $t0 -424($fp) +j label_107 +label_106: +li $t0 3 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -24($fp) +lw $t0 -24($fp) +sw $t0 -424($fp) +label_107: +lw $t0 -424($fp) +sw $t0 -476($fp) +j label_109 +label_108: +li $t0 2 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 -20($fp) +sw $t0 -476($fp) +label_109: +lw $t0 -476($fp) +sw $t0 -528($fp) +j label_111 +label_110: +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -16($fp) +lw $t0 -16($fp) +sw $t0 -528($fp) +label_111: +lw $t0 -528($fp) +sw $t0 -580($fp) +j label_113 +label_112: +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -580($fp) +label_113: +lw $v0 -580($fp) +addi $sp $sp 572 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_i2c_at_A2I: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -576 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -540($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -568($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -560($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -552($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -556($fp) +lw $t0 -568($fp) +lw $t1 -560($fp) +seq $t0 $t0 $t1 +sw $t0 -548($fp) +lw $t0 -548($fp) +bne $t0 $zero label_114 +lw $t0 -568($fp) +lw $t1 -552($fp) +seq $t0 $t0 $t1 +sw $t0 -548($fp) +lw $t0 -548($fp) +bne $t0 $zero label_115 +lw $t0 -568($fp) +lw $t1 -556($fp) +seq $t0 $t0 $t1 +sw $t0 -548($fp) +lw $t0 -548($fp) +bne $t0 $zero label_116 +lw $t0 0($fp) +lw $t1 -540($fp) +seq $t0 $t0 $t1 +sw $t0 -544($fp) +j label_117 +label_114: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -572($fp) +lw $t0 -540($fp) +lw $t1 12($t0) +sw $t1 -564($fp) +lw $t0 -572($fp) +lw $t1 -564($fp) +seq $t0 $t0 $t1 +sw $t0 -544($fp) +j label_117 +label_115: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -572($fp) +lw $t0 -540($fp) +lw $t1 12($t0) +sw $t1 -564($fp) +lw $t0 -572($fp) +move $a0 $t0 +lw $t0 -564($fp) +move $a1 $t0 +jal equal_str +sw $v0 -544($fp) +j label_117 +label_116: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -572($fp) +lw $t0 -540($fp) +lw $t1 12($t0) +sw $t1 -564($fp) +lw $t0 -572($fp) +lw $t1 -564($fp) +seq $t0 $t0 $t1 +sw $t0 -544($fp) +j label_117 +label_117: +lw $t0 -544($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -576($fp) +lw $t0 -576($fp) +lw $t1 12($t0) +sw $t1 -580($fp) +lw $t0 -580($fp) +bne $t0 $zero label_174 +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -492($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -520($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -512($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -504($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -508($fp) +lw $t0 -520($fp) +lw $t1 -512($fp) +seq $t0 $t0 $t1 +sw $t0 -500($fp) +lw $t0 -500($fp) +bne $t0 $zero label_118 +lw $t0 -520($fp) +lw $t1 -504($fp) +seq $t0 $t0 $t1 +sw $t0 -500($fp) +lw $t0 -500($fp) +bne $t0 $zero label_119 +lw $t0 -520($fp) +lw $t1 -508($fp) +seq $t0 $t0 $t1 +sw $t0 -500($fp) +lw $t0 -500($fp) +bne $t0 $zero label_120 +lw $t0 0($fp) +lw $t1 -492($fp) +seq $t0 $t0 $t1 +sw $t0 -496($fp) +j label_121 +label_118: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -524($fp) +lw $t0 -492($fp) +lw $t1 12($t0) +sw $t1 -516($fp) +lw $t0 -524($fp) +lw $t1 -516($fp) +seq $t0 $t0 $t1 +sw $t0 -496($fp) +j label_121 +label_119: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -524($fp) +lw $t0 -492($fp) +lw $t1 12($t0) +sw $t1 -516($fp) +lw $t0 -524($fp) +move $a0 $t0 +lw $t0 -516($fp) +move $a1 $t0 +jal equal_str +sw $v0 -496($fp) +j label_121 +label_120: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -524($fp) +lw $t0 -492($fp) +lw $t1 12($t0) +sw $t1 -516($fp) +lw $t0 -524($fp) +lw $t1 -516($fp) +seq $t0 $t0 $t1 +sw $t0 -496($fp) +j label_121 +label_121: +lw $t0 -496($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -528($fp) +lw $t0 -528($fp) +lw $t1 12($t0) +sw $t1 -532($fp) +lw $t0 -532($fp) +bne $t0 $zero label_172 +li $t0 2 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -444($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -472($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -464($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -456($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -460($fp) +lw $t0 -472($fp) +lw $t1 -464($fp) +seq $t0 $t0 $t1 +sw $t0 -452($fp) +lw $t0 -452($fp) +bne $t0 $zero label_122 +lw $t0 -472($fp) +lw $t1 -456($fp) +seq $t0 $t0 $t1 +sw $t0 -452($fp) +lw $t0 -452($fp) +bne $t0 $zero label_123 +lw $t0 -472($fp) +lw $t1 -460($fp) +seq $t0 $t0 $t1 +sw $t0 -452($fp) +lw $t0 -452($fp) +bne $t0 $zero label_124 +lw $t0 0($fp) +lw $t1 -444($fp) +seq $t0 $t0 $t1 +sw $t0 -448($fp) +j label_125 +label_122: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -476($fp) +lw $t0 -444($fp) +lw $t1 12($t0) +sw $t1 -468($fp) +lw $t0 -476($fp) +lw $t1 -468($fp) +seq $t0 $t0 $t1 +sw $t0 -448($fp) +j label_125 +label_123: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -476($fp) +lw $t0 -444($fp) +lw $t1 12($t0) +sw $t1 -468($fp) +lw $t0 -476($fp) +move $a0 $t0 +lw $t0 -468($fp) +move $a1 $t0 +jal equal_str +sw $v0 -448($fp) +j label_125 +label_124: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -476($fp) +lw $t0 -444($fp) +lw $t1 12($t0) +sw $t1 -468($fp) +lw $t0 -476($fp) +lw $t1 -468($fp) +seq $t0 $t0 $t1 +sw $t0 -448($fp) +j label_125 +label_125: +lw $t0 -448($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -480($fp) +lw $t0 -480($fp) +lw $t1 12($t0) +sw $t1 -484($fp) +lw $t0 -484($fp) +bne $t0 $zero label_170 +li $t0 3 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -396($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -424($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -416($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -408($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -412($fp) +lw $t0 -424($fp) +lw $t1 -416($fp) +seq $t0 $t0 $t1 +sw $t0 -404($fp) +lw $t0 -404($fp) +bne $t0 $zero label_126 +lw $t0 -424($fp) +lw $t1 -408($fp) +seq $t0 $t0 $t1 +sw $t0 -404($fp) +lw $t0 -404($fp) +bne $t0 $zero label_127 +lw $t0 -424($fp) +lw $t1 -412($fp) +seq $t0 $t0 $t1 +sw $t0 -404($fp) +lw $t0 -404($fp) +bne $t0 $zero label_128 +lw $t0 0($fp) +lw $t1 -396($fp) +seq $t0 $t0 $t1 +sw $t0 -400($fp) +j label_129 +label_126: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -428($fp) +lw $t0 -396($fp) +lw $t1 12($t0) +sw $t1 -420($fp) +lw $t0 -428($fp) +lw $t1 -420($fp) +seq $t0 $t0 $t1 +sw $t0 -400($fp) +j label_129 +label_127: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -428($fp) +lw $t0 -396($fp) +lw $t1 12($t0) +sw $t1 -420($fp) +lw $t0 -428($fp) +move $a0 $t0 +lw $t0 -420($fp) +move $a1 $t0 +jal equal_str +sw $v0 -400($fp) +j label_129 +label_128: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -428($fp) +lw $t0 -396($fp) +lw $t1 12($t0) +sw $t1 -420($fp) +lw $t0 -428($fp) +lw $t1 -420($fp) +seq $t0 $t0 $t1 +sw $t0 -400($fp) +j label_129 +label_129: +lw $t0 -400($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -432($fp) +lw $t0 -432($fp) +lw $t1 12($t0) +sw $t1 -436($fp) +lw $t0 -436($fp) +bne $t0 $zero label_168 +li $t0 4 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -348($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -376($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -368($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -360($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -364($fp) +lw $t0 -376($fp) +lw $t1 -368($fp) +seq $t0 $t0 $t1 +sw $t0 -356($fp) +lw $t0 -356($fp) +bne $t0 $zero label_130 +lw $t0 -376($fp) +lw $t1 -360($fp) +seq $t0 $t0 $t1 +sw $t0 -356($fp) +lw $t0 -356($fp) +bne $t0 $zero label_131 +lw $t0 -376($fp) +lw $t1 -364($fp) +seq $t0 $t0 $t1 +sw $t0 -356($fp) +lw $t0 -356($fp) +bne $t0 $zero label_132 +lw $t0 0($fp) +lw $t1 -348($fp) +seq $t0 $t0 $t1 +sw $t0 -352($fp) +j label_133 +label_130: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -380($fp) +lw $t0 -348($fp) +lw $t1 12($t0) +sw $t1 -372($fp) +lw $t0 -380($fp) +lw $t1 -372($fp) +seq $t0 $t0 $t1 +sw $t0 -352($fp) +j label_133 +label_131: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -380($fp) +lw $t0 -348($fp) +lw $t1 12($t0) +sw $t1 -372($fp) +lw $t0 -380($fp) +move $a0 $t0 +lw $t0 -372($fp) +move $a1 $t0 +jal equal_str +sw $v0 -352($fp) +j label_133 +label_132: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -380($fp) +lw $t0 -348($fp) +lw $t1 12($t0) +sw $t1 -372($fp) +lw $t0 -380($fp) +lw $t1 -372($fp) +seq $t0 $t0 $t1 +sw $t0 -352($fp) +j label_133 +label_133: +lw $t0 -352($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -384($fp) +lw $t0 -384($fp) +lw $t1 12($t0) +sw $t1 -388($fp) +lw $t0 -388($fp) +bne $t0 $zero label_166 +li $t0 5 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -300($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -328($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -320($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -312($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -316($fp) +lw $t0 -328($fp) +lw $t1 -320($fp) +seq $t0 $t0 $t1 +sw $t0 -308($fp) +lw $t0 -308($fp) +bne $t0 $zero label_134 +lw $t0 -328($fp) +lw $t1 -312($fp) +seq $t0 $t0 $t1 +sw $t0 -308($fp) +lw $t0 -308($fp) +bne $t0 $zero label_135 +lw $t0 -328($fp) +lw $t1 -316($fp) +seq $t0 $t0 $t1 +sw $t0 -308($fp) +lw $t0 -308($fp) +bne $t0 $zero label_136 +lw $t0 0($fp) +lw $t1 -300($fp) +seq $t0 $t0 $t1 +sw $t0 -304($fp) +j label_137 +label_134: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -332($fp) +lw $t0 -300($fp) +lw $t1 12($t0) +sw $t1 -324($fp) +lw $t0 -332($fp) +lw $t1 -324($fp) +seq $t0 $t0 $t1 +sw $t0 -304($fp) +j label_137 +label_135: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -332($fp) +lw $t0 -300($fp) +lw $t1 12($t0) +sw $t1 -324($fp) +lw $t0 -332($fp) +move $a0 $t0 +lw $t0 -324($fp) +move $a1 $t0 +jal equal_str +sw $v0 -304($fp) +j label_137 +label_136: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -332($fp) +lw $t0 -300($fp) +lw $t1 12($t0) +sw $t1 -324($fp) +lw $t0 -332($fp) +lw $t1 -324($fp) +seq $t0 $t0 $t1 +sw $t0 -304($fp) +j label_137 +label_137: +lw $t0 -304($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -336($fp) +lw $t0 -336($fp) +lw $t1 12($t0) +sw $t1 -340($fp) +lw $t0 -340($fp) +bne $t0 $zero label_164 +li $t0 6 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -252($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -280($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -272($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -264($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -268($fp) +lw $t0 -280($fp) +lw $t1 -272($fp) +seq $t0 $t0 $t1 +sw $t0 -260($fp) +lw $t0 -260($fp) +bne $t0 $zero label_138 +lw $t0 -280($fp) +lw $t1 -264($fp) +seq $t0 $t0 $t1 +sw $t0 -260($fp) +lw $t0 -260($fp) +bne $t0 $zero label_139 +lw $t0 -280($fp) +lw $t1 -268($fp) +seq $t0 $t0 $t1 +sw $t0 -260($fp) +lw $t0 -260($fp) +bne $t0 $zero label_140 +lw $t0 0($fp) +lw $t1 -252($fp) +seq $t0 $t0 $t1 +sw $t0 -256($fp) +j label_141 +label_138: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -284($fp) +lw $t0 -252($fp) +lw $t1 12($t0) +sw $t1 -276($fp) +lw $t0 -284($fp) +lw $t1 -276($fp) +seq $t0 $t0 $t1 +sw $t0 -256($fp) +j label_141 +label_139: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -284($fp) +lw $t0 -252($fp) +lw $t1 12($t0) +sw $t1 -276($fp) +lw $t0 -284($fp) +move $a0 $t0 +lw $t0 -276($fp) +move $a1 $t0 +jal equal_str +sw $v0 -256($fp) +j label_141 +label_140: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -284($fp) +lw $t0 -252($fp) +lw $t1 12($t0) +sw $t1 -276($fp) +lw $t0 -284($fp) +lw $t1 -276($fp) +seq $t0 $t0 $t1 +sw $t0 -256($fp) +j label_141 +label_141: +lw $t0 -256($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -288($fp) +lw $t0 -288($fp) +lw $t1 12($t0) +sw $t1 -292($fp) +lw $t0 -292($fp) +bne $t0 $zero label_162 +li $t0 7 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -204($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -232($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -224($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -216($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -220($fp) +lw $t0 -232($fp) +lw $t1 -224($fp) +seq $t0 $t0 $t1 +sw $t0 -212($fp) +lw $t0 -212($fp) +bne $t0 $zero label_142 +lw $t0 -232($fp) +lw $t1 -216($fp) +seq $t0 $t0 $t1 +sw $t0 -212($fp) +lw $t0 -212($fp) +bne $t0 $zero label_143 +lw $t0 -232($fp) +lw $t1 -220($fp) +seq $t0 $t0 $t1 +sw $t0 -212($fp) +lw $t0 -212($fp) +bne $t0 $zero label_144 +lw $t0 0($fp) +lw $t1 -204($fp) +seq $t0 $t0 $t1 +sw $t0 -208($fp) +j label_145 +label_142: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -236($fp) +lw $t0 -204($fp) +lw $t1 12($t0) +sw $t1 -228($fp) +lw $t0 -236($fp) +lw $t1 -228($fp) +seq $t0 $t0 $t1 +sw $t0 -208($fp) +j label_145 +label_143: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -236($fp) +lw $t0 -204($fp) +lw $t1 12($t0) +sw $t1 -228($fp) +lw $t0 -236($fp) +move $a0 $t0 +lw $t0 -228($fp) +move $a1 $t0 +jal equal_str +sw $v0 -208($fp) +j label_145 +label_144: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -236($fp) +lw $t0 -204($fp) +lw $t1 12($t0) +sw $t1 -228($fp) +lw $t0 -236($fp) +lw $t1 -228($fp) +seq $t0 $t0 $t1 +sw $t0 -208($fp) +j label_145 +label_145: +lw $t0 -208($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -240($fp) +lw $t0 -240($fp) +lw $t1 12($t0) +sw $t1 -244($fp) +lw $t0 -244($fp) +bne $t0 $zero label_160 +li $t0 8 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -156($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -184($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -176($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -168($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -172($fp) +lw $t0 -184($fp) +lw $t1 -176($fp) +seq $t0 $t0 $t1 +sw $t0 -164($fp) +lw $t0 -164($fp) +bne $t0 $zero label_146 +lw $t0 -184($fp) +lw $t1 -168($fp) +seq $t0 $t0 $t1 +sw $t0 -164($fp) +lw $t0 -164($fp) +bne $t0 $zero label_147 +lw $t0 -184($fp) +lw $t1 -172($fp) +seq $t0 $t0 $t1 +sw $t0 -164($fp) +lw $t0 -164($fp) +bne $t0 $zero label_148 +lw $t0 0($fp) +lw $t1 -156($fp) +seq $t0 $t0 $t1 +sw $t0 -160($fp) +j label_149 +label_146: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -188($fp) +lw $t0 -156($fp) +lw $t1 12($t0) +sw $t1 -180($fp) +lw $t0 -188($fp) +lw $t1 -180($fp) +seq $t0 $t0 $t1 +sw $t0 -160($fp) +j label_149 +label_147: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -188($fp) +lw $t0 -156($fp) +lw $t1 12($t0) +sw $t1 -180($fp) +lw $t0 -188($fp) +move $a0 $t0 +lw $t0 -180($fp) +move $a1 $t0 +jal equal_str +sw $v0 -160($fp) +j label_149 +label_148: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -188($fp) +lw $t0 -156($fp) +lw $t1 12($t0) +sw $t1 -180($fp) +lw $t0 -188($fp) +lw $t1 -180($fp) +seq $t0 $t0 $t1 +sw $t0 -160($fp) +j label_149 +label_149: +lw $t0 -160($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -192($fp) +lw $t0 -192($fp) +lw $t1 12($t0) +sw $t1 -196($fp) +lw $t0 -196($fp) +bne $t0 $zero label_158 +li $t0 9 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -108($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -136($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -128($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -120($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -124($fp) +lw $t0 -136($fp) +lw $t1 -128($fp) +seq $t0 $t0 $t1 +sw $t0 -116($fp) +lw $t0 -116($fp) +bne $t0 $zero label_150 +lw $t0 -136($fp) +lw $t1 -120($fp) +seq $t0 $t0 $t1 +sw $t0 -116($fp) +lw $t0 -116($fp) +bne $t0 $zero label_151 +lw $t0 -136($fp) +lw $t1 -124($fp) +seq $t0 $t0 $t1 +sw $t0 -116($fp) +lw $t0 -116($fp) +bne $t0 $zero label_152 +lw $t0 0($fp) +lw $t1 -108($fp) +seq $t0 $t0 $t1 +sw $t0 -112($fp) +j label_153 +label_150: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -140($fp) +lw $t0 -108($fp) +lw $t1 12($t0) +sw $t1 -132($fp) +lw $t0 -140($fp) +lw $t1 -132($fp) +seq $t0 $t0 $t1 +sw $t0 -112($fp) +j label_153 +label_151: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -140($fp) +lw $t0 -108($fp) +lw $t1 12($t0) +sw $t1 -132($fp) +lw $t0 -140($fp) +move $a0 $t0 +lw $t0 -132($fp) +move $a1 $t0 +jal equal_str +sw $v0 -112($fp) +j label_153 +label_152: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -140($fp) +lw $t0 -108($fp) +lw $t1 12($t0) +sw $t1 -132($fp) +lw $t0 -140($fp) +lw $t1 -132($fp) +seq $t0 $t0 $t1 +sw $t0 -112($fp) +j label_153 +label_153: +lw $t0 -112($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -144($fp) +lw $t0 -144($fp) +lw $t1 12($t0) +sw $t1 -148($fp) +lw $t0 -148($fp) +bne $t0 $zero label_156 +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -104($fp) +lw $t0 -104($fp) +bne $t0 $zero label_154 +j label_155 +label_154: +li $v0 4 +la $a0 data_40 +syscall +li $v0 10 +syscall +label_155: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 0($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -100($fp) +la $t0 data_41 +sw $t0 -96($fp) +lw $t0 -96($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -92($fp) +lw $t0 -92($fp) +sw $t0 -152($fp) +j label_157 +label_156: +la $t0 data_42 +sw $t0 -88($fp) +lw $t0 -88($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -84($fp) +lw $t0 -84($fp) +sw $t0 -152($fp) +label_157: +lw $t0 -152($fp) +sw $t0 -200($fp) +j label_159 +label_158: +la $t0 data_43 +sw $t0 -80($fp) +lw $t0 -80($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -76($fp) +lw $t0 -76($fp) +sw $t0 -200($fp) +label_159: +lw $t0 -200($fp) +sw $t0 -248($fp) +j label_161 +label_160: +la $t0 data_44 +sw $t0 -72($fp) +lw $t0 -72($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -68($fp) +lw $t0 -68($fp) +sw $t0 -248($fp) +label_161: +lw $t0 -248($fp) +sw $t0 -296($fp) +j label_163 +label_162: +la $t0 data_45 +sw $t0 -64($fp) +lw $t0 -64($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -60($fp) +lw $t0 -60($fp) +sw $t0 -296($fp) +label_163: +lw $t0 -296($fp) +sw $t0 -344($fp) +j label_165 +label_164: +la $t0 data_46 +sw $t0 -56($fp) +lw $t0 -56($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -52($fp) +lw $t0 -52($fp) +sw $t0 -344($fp) +label_165: +lw $t0 -344($fp) +sw $t0 -392($fp) +j label_167 +label_166: +la $t0 data_47 +sw $t0 -48($fp) +lw $t0 -48($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -44($fp) +lw $t0 -44($fp) +sw $t0 -392($fp) +label_167: +lw $t0 -392($fp) +sw $t0 -440($fp) +j label_169 +label_168: +la $t0 data_48 +sw $t0 -40($fp) +lw $t0 -40($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 -36($fp) +sw $t0 -440($fp) +label_169: +lw $t0 -440($fp) +sw $t0 -488($fp) +j label_171 +label_170: +la $t0 data_49 +sw $t0 -32($fp) +lw $t0 -32($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t0 -28($fp) +sw $t0 -488($fp) +label_171: +lw $t0 -488($fp) +sw $t0 -536($fp) +j label_173 +label_172: +la $t0 data_50 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 -20($fp) +sw $t0 -536($fp) +label_173: +lw $t0 -536($fp) +sw $t0 -584($fp) +j label_175 +label_174: +la $t0 data_51 +sw $t0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -584($fp) +label_175: +lw $v0 -584($fp) +addi $sp $sp 576 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_a2i_at_A2I: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -312 +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -276($fp) +lw $t0 -276($fp) +bne $t0 $zero label_176 +j label_177 +label_176: +li $v0 4 +la $a0 data_52 +syscall +li $v0 10 +syscall +label_177: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -272($fp) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -268($fp) +lw $t0 -272($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -304($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -296($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -288($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -292($fp) +lw $t0 -304($fp) +lw $t1 -296($fp) +seq $t0 $t0 $t1 +sw $t0 -284($fp) +lw $t0 -284($fp) +bne $t0 $zero label_178 +lw $t0 -304($fp) +lw $t1 -288($fp) +seq $t0 $t0 $t1 +sw $t0 -284($fp) +lw $t0 -284($fp) +bne $t0 $zero label_179 +lw $t0 -304($fp) +lw $t1 -292($fp) +seq $t0 $t0 $t1 +sw $t0 -284($fp) +lw $t0 -284($fp) +bne $t0 $zero label_180 +lw $t0 -272($fp) +lw $t1 -268($fp) +seq $t0 $t0 $t1 +sw $t0 -280($fp) +j label_181 +label_178: +lw $t0 -272($fp) +lw $t1 12($t0) +sw $t1 -308($fp) +lw $t0 -268($fp) +lw $t1 12($t0) +sw $t1 -300($fp) +lw $t0 -308($fp) +lw $t1 -300($fp) +seq $t0 $t0 $t1 +sw $t0 -280($fp) +j label_181 +label_179: +lw $t0 -272($fp) +lw $t1 12($t0) +sw $t1 -308($fp) +lw $t0 -268($fp) +lw $t1 12($t0) +sw $t1 -300($fp) +lw $t0 -308($fp) +move $a0 $t0 +lw $t0 -300($fp) +move $a1 $t0 +jal equal_str +sw $v0 -280($fp) +j label_181 +label_180: +lw $t0 -272($fp) +lw $t1 12($t0) +sw $t1 -308($fp) +lw $t0 -268($fp) +lw $t1 12($t0) +sw $t1 -300($fp) +lw $t0 -308($fp) +lw $t1 -300($fp) +seq $t0 $t0 $t1 +sw $t0 -280($fp) +j label_181 +label_181: +lw $t0 -280($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -312($fp) +lw $t0 -312($fp) +lw $t1 12($t0) +sw $t1 -316($fp) +lw $t0 -316($fp) +bne $t0 $zero label_212 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -220($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -216($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -212($fp) +lw $t0 -212($fp) +bne $t0 $zero label_182 +j label_183 +label_182: +li $v0 4 +la $a0 data_53 +syscall +li $v0 10 +syscall +label_183: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -220($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -216($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -208($fp) +la $t0 data_54 +sw $t0 -204($fp) +lw $t0 -204($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -200($fp) +lw $t0 -208($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -248($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -240($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -232($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -236($fp) +lw $t0 -248($fp) +lw $t1 -240($fp) +seq $t0 $t0 $t1 +sw $t0 -228($fp) +lw $t0 -228($fp) +bne $t0 $zero label_184 +lw $t0 -248($fp) +lw $t1 -232($fp) +seq $t0 $t0 $t1 +sw $t0 -228($fp) +lw $t0 -228($fp) +bne $t0 $zero label_185 +lw $t0 -248($fp) +lw $t1 -236($fp) +seq $t0 $t0 $t1 +sw $t0 -228($fp) +lw $t0 -228($fp) +bne $t0 $zero label_186 +lw $t0 -208($fp) +lw $t1 -200($fp) +seq $t0 $t0 $t1 +sw $t0 -224($fp) +j label_187 +label_184: +lw $t0 -208($fp) +lw $t1 12($t0) +sw $t1 -252($fp) +lw $t0 -200($fp) +lw $t1 12($t0) +sw $t1 -244($fp) +lw $t0 -252($fp) +lw $t1 -244($fp) +seq $t0 $t0 $t1 +sw $t0 -224($fp) +j label_187 +label_185: +lw $t0 -208($fp) +lw $t1 12($t0) +sw $t1 -252($fp) +lw $t0 -200($fp) +lw $t1 12($t0) +sw $t1 -244($fp) +lw $t0 -252($fp) +move $a0 $t0 +lw $t0 -244($fp) +move $a1 $t0 +jal equal_str +sw $v0 -224($fp) +j label_187 +label_186: +lw $t0 -208($fp) +lw $t1 12($t0) +sw $t1 -252($fp) +lw $t0 -200($fp) +lw $t1 12($t0) +sw $t1 -244($fp) +lw $t0 -252($fp) +lw $t1 -244($fp) +seq $t0 $t0 $t1 +sw $t0 -224($fp) +j label_187 +label_187: +lw $t0 -224($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -256($fp) +lw $t0 -256($fp) +lw $t1 12($t0) +sw $t1 -260($fp) +lw $t0 -260($fp) +bne $t0 $zero label_204 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -152($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -148($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -144($fp) +lw $t0 -144($fp) +bne $t0 $zero label_188 +j label_189 +label_188: +li $v0 4 +la $a0 data_55 +syscall +li $v0 10 +syscall +label_189: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -152($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -148($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -140($fp) +la $t0 data_56 +sw $t0 -136($fp) +lw $t0 -136($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -132($fp) +lw $t0 -140($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -180($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -172($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -164($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -168($fp) +lw $t0 -180($fp) +lw $t1 -172($fp) +seq $t0 $t0 $t1 +sw $t0 -160($fp) +lw $t0 -160($fp) +bne $t0 $zero label_190 +lw $t0 -180($fp) +lw $t1 -164($fp) +seq $t0 $t0 $t1 +sw $t0 -160($fp) +lw $t0 -160($fp) +bne $t0 $zero label_191 +lw $t0 -180($fp) +lw $t1 -168($fp) +seq $t0 $t0 $t1 +sw $t0 -160($fp) +lw $t0 -160($fp) +bne $t0 $zero label_192 +lw $t0 -140($fp) +lw $t1 -132($fp) +seq $t0 $t0 $t1 +sw $t0 -156($fp) +j label_193 +label_190: +lw $t0 -140($fp) +lw $t1 12($t0) +sw $t1 -184($fp) +lw $t0 -132($fp) +lw $t1 12($t0) +sw $t1 -176($fp) +lw $t0 -184($fp) +lw $t1 -176($fp) +seq $t0 $t0 $t1 +sw $t0 -156($fp) +j label_193 +label_191: +lw $t0 -140($fp) +lw $t1 12($t0) +sw $t1 -184($fp) +lw $t0 -132($fp) +lw $t1 12($t0) +sw $t1 -176($fp) +lw $t0 -184($fp) +move $a0 $t0 +lw $t0 -176($fp) +move $a1 $t0 +jal equal_str +sw $v0 -156($fp) +j label_193 +label_192: +lw $t0 -140($fp) +lw $t1 12($t0) +sw $t1 -184($fp) +lw $t0 -132($fp) +lw $t1 12($t0) +sw $t1 -176($fp) +lw $t0 -184($fp) +lw $t1 -176($fp) +seq $t0 $t0 $t1 +sw $t0 -156($fp) +j label_193 +label_193: +lw $t0 -156($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -188($fp) +lw $t0 -188($fp) +lw $t1 12($t0) +sw $t1 -192($fp) +lw $t0 -192($fp) +bne $t0 $zero label_196 +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -128($fp) +lw $t0 -128($fp) +bne $t0 $zero label_194 +j label_195 +label_194: +li $v0 4 +la $a0 data_57 +syscall +li $v0 10 +syscall +label_195: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 16($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -124($fp) +lw $t0 -124($fp) +sw $t0 -196($fp) +j label_203 +label_196: +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -120($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -100($fp) +lw $t0 -100($fp) +bne $t0 $zero label_197 +j label_198 +label_197: +li $v0 4 +la $a0 data_58 +syscall +li $v0 10 +syscall +label_198: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -96($fp) +lw $t0 -96($fp) +lw $t1 12($t0) +sw $t1 -112($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -92($fp) +lw $t0 -92($fp) +lw $t1 12($t0) +sw $t1 -108($fp) +lw $t0 -112($fp) +lw $t1 -108($fp) +sub $t0 $t0 $t1 +sw $t0 -104($fp) +lw $t0 -104($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -116($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -88($fp) +lw $t0 -88($fp) +bne $t0 $zero label_199 +j label_200 +label_199: +li $v0 4 +la $a0 data_59 +syscall +li $v0 10 +syscall +label_200: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -120($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -116($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -84($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -80($fp) +lw $t0 -80($fp) +bne $t0 $zero label_201 +j label_202 +label_201: +li $v0 4 +la $a0 data_60 +syscall +li $v0 10 +syscall +label_202: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -84($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 16($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -76($fp) +lw $t0 -76($fp) +sw $t0 -196($fp) +label_203: +lw $t0 -196($fp) +sw $t0 -264($fp) +j label_211 +label_204: +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -60($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -40($fp) +lw $t0 -40($fp) +bne $t0 $zero label_205 +j label_206 +label_205: +li $v0 4 +la $a0 data_61 +syscall +li $v0 10 +syscall +label_206: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 -36($fp) +lw $t1 12($t0) +sw $t1 -52($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -32($fp) +lw $t0 -32($fp) +lw $t1 12($t0) +sw $t1 -48($fp) +lw $t0 -52($fp) +lw $t1 -48($fp) +sub $t0 $t0 $t1 +sw $t0 -44($fp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -56($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -28($fp) +lw $t0 -28($fp) +bne $t0 $zero label_207 +j label_208 +label_207: +li $v0 4 +la $a0 data_62 +syscall +li $v0 10 +syscall +label_208: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -60($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -56($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -24($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -20($fp) +lw $t0 -20($fp) +bne $t0 $zero label_209 +j label_210 +label_209: +li $v0 4 +la $a0 data_63 +syscall +li $v0 10 +syscall +label_210: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 16($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -16($fp) +lw $t0 -16($fp) +lw $t1 12($t0) +sw $t1 -68($fp) +lw $t0 -68($fp) +not $t0 $t0 +addi $t0 $t0 1 +sw $t0 -64($fp) +lw $t0 -64($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -72($fp) +lw $t0 -72($fp) +sw $t0 -264($fp) +label_211: +lw $t0 -264($fp) +sw $t0 -320($fp) +j label_213 +label_212: +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -320($fp) +label_213: +lw $v0 -320($fp) +addi $sp $sp 312 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_a2i_aux_at_A2I: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -124 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -128($fp) +lw $t0 -128($fp) +sw $t0 -132($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -120($fp) +lw $t0 -120($fp) +bne $t0 $zero label_214 +j label_215 +label_214: +li $v0 4 +la $a0 data_64 +syscall +li $v0 10 +syscall +label_215: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -116($fp) +lw $t0 -116($fp) +sw $t0 -124($fp) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -108($fp) +lw $t0 -108($fp) +sw $t0 -112($fp) +label_216: +lw $t0 -112($fp) +lw $t1 12($t0) +sw $t1 -96($fp) +lw $t0 -124($fp) +lw $t1 12($t0) +sw $t1 -92($fp) +lw $t0 -96($fp) +lw $t1 -92($fp) +slt $t1 $t0 $t1 +sw $t1 -88($fp) +lw $t0 -88($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -100($fp) +lw $t0 -100($fp) +lw $t1 12($t0) +sw $t1 -104($fp) +lw $t0 -104($fp) +bne $t0 $zero label_217 +j label_222 +label_217: +lw $t0 -132($fp) +lw $t1 12($t0) +sw $t1 -64($fp) +li $t0 10 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -52($fp) +lw $t0 -52($fp) +lw $t1 12($t0) +sw $t1 -60($fp) +lw $t0 -64($fp) +lw $t1 -60($fp) +mul $t0 $t0 $t1 +sw $t0 -56($fp) +lw $t0 -56($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -68($fp) +lw $t0 -68($fp) +lw $t1 12($t0) +sw $t1 -80($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -48($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -44($fp) +lw $t0 -44($fp) +bne $t0 $zero label_218 +j label_219 +label_218: +li $v0 4 +la $a0 data_65 +syscall +li $v0 10 +syscall +label_219: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -112($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -48($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -40($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -36($fp) +lw $t0 -36($fp) +bne $t0 $zero label_220 +j label_221 +label_220: +li $v0 4 +la $a0 data_66 +syscall +li $v0 10 +syscall +label_221: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -40($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -32($fp) +lw $t0 -32($fp) +lw $t1 12($t0) +sw $t1 -76($fp) +lw $t0 -80($fp) +lw $t1 -76($fp) +add $t0 $t0 $t1 +sw $t0 -72($fp) +lw $t0 -72($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -84($fp) +lw $t0 -84($fp) +sw $t0 -132($fp) +lw $t0 -112($fp) +lw $t1 12($t0) +sw $t1 -24($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 12($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 -20($fp) +add $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t0 -28($fp) +sw $t0 -112($fp) +j label_216 +label_222: +lw $v0 -132($fp) +addi $sp $sp 124 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_i2a_at_A2I: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -148 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -112($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -140($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -132($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -124($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -128($fp) +lw $t0 -140($fp) +lw $t1 -132($fp) +seq $t0 $t0 $t1 +sw $t0 -120($fp) +lw $t0 -120($fp) +bne $t0 $zero label_223 +lw $t0 -140($fp) +lw $t1 -124($fp) +seq $t0 $t0 $t1 +sw $t0 -120($fp) +lw $t0 -120($fp) +bne $t0 $zero label_224 +lw $t0 -140($fp) +lw $t1 -128($fp) +seq $t0 $t0 $t1 +sw $t0 -120($fp) +lw $t0 -120($fp) +bne $t0 $zero label_225 +lw $t0 0($fp) +lw $t1 -112($fp) +seq $t0 $t0 $t1 +sw $t0 -116($fp) +j label_226 +label_223: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -144($fp) +lw $t0 -112($fp) +lw $t1 12($t0) +sw $t1 -136($fp) +lw $t0 -144($fp) +lw $t1 -136($fp) +seq $t0 $t0 $t1 +sw $t0 -116($fp) +j label_226 +label_224: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -144($fp) +lw $t0 -112($fp) +lw $t1 12($t0) +sw $t1 -136($fp) +lw $t0 -144($fp) +move $a0 $t0 +lw $t0 -136($fp) +move $a1 $t0 +jal equal_str +sw $v0 -116($fp) +j label_226 +label_225: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -144($fp) +lw $t0 -112($fp) +lw $t1 12($t0) +sw $t1 -136($fp) +lw $t0 -144($fp) +lw $t1 -136($fp) +seq $t0 $t0 $t1 +sw $t0 -116($fp) +j label_226 +label_226: +lw $t0 -116($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -148($fp) +lw $t0 -148($fp) +lw $t1 12($t0) +sw $t1 -152($fp) +lw $t0 -152($fp) +bne $t0 $zero label_235 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -84($fp) +lw $t0 -84($fp) +lw $t1 12($t0) +sw $t1 -96($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -92($fp) +lw $t0 -96($fp) +lw $t1 -92($fp) +slt $t1 $t0 $t1 +sw $t1 -88($fp) +lw $t0 -88($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -100($fp) +lw $t0 -100($fp) +lw $t1 12($t0) +sw $t1 -104($fp) +lw $t0 -104($fp) +bne $t0 $zero label_231 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -76($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -52($fp) +lw $t0 -52($fp) +lw $t1 12($t0) +sw $t1 -60($fp) +lw $t0 -60($fp) +not $t0 $t0 +addi $t0 $t0 1 +sw $t0 -56($fp) +lw $t0 -56($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -64($fp) +lw $t0 -64($fp) +lw $t1 12($t0) +sw $t1 -72($fp) +lw $t0 -76($fp) +lw $t1 -72($fp) +mul $t0 $t0 $t1 +sw $t0 -68($fp) +lw $t0 -68($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -80($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -48($fp) +lw $t0 -48($fp) +bne $t0 $zero label_227 +j label_228 +label_227: +li $v0 4 +la $a0 data_67 +syscall +li $v0 10 +syscall +label_228: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -80($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -44($fp) +la $t0 data_68 +sw $t0 -40($fp) +lw $t0 -40($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 -36($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_229 +j label_230 +label_229: +li $v0 4 +la $a0 data_69 +syscall +li $v0 10 +syscall +label_230: +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 16($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -28($fp) +lw $t0 -28($fp) +sw $t0 -108($fp) +j label_234 +label_231: +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_232 +j label_233 +label_232: +li $v0 4 +la $a0 data_70 +syscall +li $v0 10 +syscall +label_233: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -20($fp) +lw $t0 -20($fp) +sw $t0 -108($fp) +label_234: +lw $t0 -108($fp) +sw $t0 -156($fp) +j label_236 +label_235: +la $t0 data_71 +sw $t0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -156($fp) +label_236: +lw $v0 -156($fp) +addi $sp $sp 148 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_i2a_aux_at_A2I: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -144 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -108($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -136($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -128($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -120($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -124($fp) +lw $t0 -136($fp) +lw $t1 -128($fp) +seq $t0 $t0 $t1 +sw $t0 -116($fp) +lw $t0 -116($fp) +bne $t0 $zero label_237 +lw $t0 -136($fp) +lw $t1 -120($fp) +seq $t0 $t0 $t1 +sw $t0 -116($fp) +lw $t0 -116($fp) +bne $t0 $zero label_238 +lw $t0 -136($fp) +lw $t1 -124($fp) +seq $t0 $t0 $t1 +sw $t0 -116($fp) +lw $t0 -116($fp) +bne $t0 $zero label_239 +lw $t0 0($fp) +lw $t1 -108($fp) +seq $t0 $t0 $t1 +sw $t0 -112($fp) +j label_240 +label_237: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -140($fp) +lw $t0 -108($fp) +lw $t1 12($t0) +sw $t1 -132($fp) +lw $t0 -140($fp) +lw $t1 -132($fp) +seq $t0 $t0 $t1 +sw $t0 -112($fp) +j label_240 +label_238: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -140($fp) +lw $t0 -108($fp) +lw $t1 12($t0) +sw $t1 -132($fp) +lw $t0 -140($fp) +move $a0 $t0 +lw $t0 -132($fp) +move $a1 $t0 +jal equal_str +sw $v0 -112($fp) +j label_240 +label_239: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -140($fp) +lw $t0 -108($fp) +lw $t1 12($t0) +sw $t1 -132($fp) +lw $t0 -140($fp) +lw $t1 -132($fp) +seq $t0 $t0 $t1 +sw $t0 -112($fp) +j label_240 +label_240: +lw $t0 -112($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -144($fp) +lw $t0 -144($fp) +lw $t1 12($t0) +sw $t1 -148($fp) +lw $t0 -148($fp) +bne $t0 $zero label_249 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -96($fp) +li $t0 10 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -80($fp) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -84($fp) +lw $t0 -84($fp) +lw $t1 12($t0) +sw $t1 -84($fp) +lw $t0 -80($fp) +lw $t1 12($t0) +sw $t1 -92($fp) +lw $t0 -84($fp) +lw $t1 -92($fp) +seq $t0 $t0 $t1 +sw $t0 -84($fp) +lw $t0 -84($fp) +bne $t0 $zero label_241 +j label_242 +label_241: +li $v0 4 +la $a0 data_72 +syscall +li $v0 10 +syscall +label_242: +lw $t0 -96($fp) +lw $t1 -92($fp) +div $t0 $t1 +mflo $t0 +sw $t0 -88($fp) +lw $t0 -88($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -100($fp) +lw $t0 -100($fp) +sw $t0 -104($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -72($fp) +lw $t0 -104($fp) +lw $t1 12($t0) +sw $t1 -56($fp) +li $t0 10 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -44($fp) +lw $t0 -44($fp) +lw $t1 12($t0) +sw $t1 -52($fp) +lw $t0 -56($fp) +lw $t1 -52($fp) +mul $t0 $t0 $t1 +sw $t0 -48($fp) +lw $t0 -48($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -60($fp) +lw $t0 -60($fp) +lw $t1 12($t0) +sw $t1 -68($fp) +lw $t0 -72($fp) +lw $t1 -68($fp) +sub $t0 $t0 $t1 +sw $t0 -64($fp) +lw $t0 -64($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -76($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -40($fp) +lw $t0 -40($fp) +bne $t0 $zero label_243 +j label_244 +label_243: +li $v0 4 +la $a0 data_73 +syscall +li $v0 10 +syscall +label_244: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -76($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -36($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_245 +j label_246 +label_245: +li $v0 4 +la $a0 data_74 +syscall +li $v0 10 +syscall +label_246: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -104($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -28($fp) +lw $t0 -28($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_247 +j label_248 +label_247: +li $v0 4 +la $a0 data_75 +syscall +li $v0 10 +syscall +label_248: +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 16($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -20($fp) +lw $t0 -20($fp) +sw $t0 -152($fp) +j label_250 +label_249: +la $t0 data_76 +sw $t0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -152($fp) +label_250: +lw $v0 -152($fp) +addi $sp $sp 144 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_A2I: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 10 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_A2I +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__attributes_ctor_Main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -20 +la $t0 data_14 +sw $t0 -28($fp) +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t0 0($fp) +lw $t1 -28($fp) +sw $t1 20($t0) +lw $t0 0($fp) +lw $t1 -24($fp) +sw $t1 16($t0) +lw $t0 0($fp) +lw $t1 -20($fp) +sw $t1 12($t0) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -16($fp) +lw $t0 0($fp) +lw $t1 -16($fp) +sw $t1 24($t0) +lw $v0 0($fp) +addi $sp $sp 20 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_menu_at_Main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -360 +la $t0 data_77 +sw $t0 -368($fp) +lw $t0 -368($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -364($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -360($fp) +lw $t0 -360($fp) +bne $t0 $zero label_251 +j label_252 +label_251: +li $v0 4 +la $a0 data_78 +syscall +li $v0 10 +syscall +label_252: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -364($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -356($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -352($fp) +lw $t0 -352($fp) +bne $t0 $zero label_253 +j label_254 +label_253: +li $v0 4 +la $a0 data_79 +syscall +li $v0 10 +syscall +label_254: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 48($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -348($fp) +la $t0 data_80 +sw $t0 -344($fp) +lw $t0 -344($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -340($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -336($fp) +lw $t0 -336($fp) +bne $t0 $zero label_255 +j label_256 +label_255: +li $v0 4 +la $a0 data_81 +syscall +li $v0 10 +syscall +label_256: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -340($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -332($fp) +la $t0 data_82 +sw $t0 -328($fp) +lw $t0 -328($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -324($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -320($fp) +lw $t0 -320($fp) +bne $t0 $zero label_257 +j label_258 +label_257: +li $v0 4 +la $a0 data_83 +syscall +li $v0 10 +syscall +label_258: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -324($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -316($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -312($fp) +lw $t0 -312($fp) +bne $t0 $zero label_259 +j label_260 +label_259: +li $v0 4 +la $a0 data_84 +syscall +li $v0 10 +syscall +label_260: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 48($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -308($fp) +la $t0 data_85 +sw $t0 -304($fp) +lw $t0 -304($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -300($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -296($fp) +lw $t0 -296($fp) +bne $t0 $zero label_261 +j label_262 +label_261: +li $v0 4 +la $a0 data_86 +syscall +li $v0 10 +syscall +label_262: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -300($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -292($fp) +la $t0 data_87 +sw $t0 -288($fp) +lw $t0 -288($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -284($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -280($fp) +lw $t0 -280($fp) +bne $t0 $zero label_263 +j label_264 +label_263: +li $v0 4 +la $a0 data_88 +syscall +li $v0 10 +syscall +label_264: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -284($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -276($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -272($fp) +lw $t0 -272($fp) +bne $t0 $zero label_265 +j label_266 +label_265: +li $v0 4 +la $a0 data_89 +syscall +li $v0 10 +syscall +label_266: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 48($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -268($fp) +la $t0 data_90 +sw $t0 -264($fp) +lw $t0 -264($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -260($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -256($fp) +lw $t0 -256($fp) +bne $t0 $zero label_267 +j label_268 +label_267: +li $v0 4 +la $a0 data_91 +syscall +li $v0 10 +syscall +label_268: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -260($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -252($fp) +la $t0 data_92 +sw $t0 -248($fp) +lw $t0 -248($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -244($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -240($fp) +lw $t0 -240($fp) +bne $t0 $zero label_269 +j label_270 +label_269: +li $v0 4 +la $a0 data_93 +syscall +li $v0 10 +syscall +label_270: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -244($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -236($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -232($fp) +lw $t0 -232($fp) +bne $t0 $zero label_271 +j label_272 +label_271: +li $v0 4 +la $a0 data_94 +syscall +li $v0 10 +syscall +label_272: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 48($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -228($fp) +la $t0 data_95 +sw $t0 -224($fp) +lw $t0 -224($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -220($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -216($fp) +lw $t0 -216($fp) +bne $t0 $zero label_273 +j label_274 +label_273: +li $v0 4 +la $a0 data_96 +syscall +li $v0 10 +syscall +label_274: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -220($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -212($fp) +la $t0 data_97 +sw $t0 -208($fp) +lw $t0 -208($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -204($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -200($fp) +lw $t0 -200($fp) +bne $t0 $zero label_275 +j label_276 +label_275: +li $v0 4 +la $a0 data_98 +syscall +li $v0 10 +syscall +label_276: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -204($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -196($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -192($fp) +lw $t0 -192($fp) +bne $t0 $zero label_277 +j label_278 +label_277: +li $v0 4 +la $a0 data_99 +syscall +li $v0 10 +syscall +label_278: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 48($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -188($fp) +la $t0 data_100 +sw $t0 -184($fp) +lw $t0 -184($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -180($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -176($fp) +lw $t0 -176($fp) +bne $t0 $zero label_279 +j label_280 +label_279: +li $v0 4 +la $a0 data_101 +syscall +li $v0 10 +syscall +label_280: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -180($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -172($fp) +la $t0 data_102 +sw $t0 -168($fp) +lw $t0 -168($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -164($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -160($fp) +lw $t0 -160($fp) +bne $t0 $zero label_281 +j label_282 +label_281: +li $v0 4 +la $a0 data_103 +syscall +li $v0 10 +syscall +label_282: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -164($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -156($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -152($fp) +lw $t0 -152($fp) +bne $t0 $zero label_283 +j label_284 +label_283: +li $v0 4 +la $a0 data_104 +syscall +li $v0 10 +syscall +label_284: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 48($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -148($fp) +la $t0 data_105 +sw $t0 -144($fp) +lw $t0 -144($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -140($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -136($fp) +lw $t0 -136($fp) +bne $t0 $zero label_285 +j label_286 +label_285: +li $v0 4 +la $a0 data_106 +syscall +li $v0 10 +syscall +label_286: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -140($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -132($fp) +la $t0 data_107 +sw $t0 -128($fp) +lw $t0 -128($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -124($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -120($fp) +lw $t0 -120($fp) +bne $t0 $zero label_287 +j label_288 +label_287: +li $v0 4 +la $a0 data_108 +syscall +li $v0 10 +syscall +label_288: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -124($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -116($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -112($fp) +lw $t0 -112($fp) +bne $t0 $zero label_289 +j label_290 +label_289: +li $v0 4 +la $a0 data_109 +syscall +li $v0 10 +syscall +label_290: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 48($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -108($fp) +la $t0 data_110 +sw $t0 -104($fp) +lw $t0 -104($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -100($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -96($fp) +lw $t0 -96($fp) +bne $t0 $zero label_291 +j label_292 +label_291: +li $v0 4 +la $a0 data_111 +syscall +li $v0 10 +syscall +label_292: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -100($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -92($fp) +la $t0 data_112 +sw $t0 -88($fp) +lw $t0 -88($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -84($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -80($fp) +lw $t0 -80($fp) +bne $t0 $zero label_293 +j label_294 +label_293: +li $v0 4 +la $a0 data_113 +syscall +li $v0 10 +syscall +label_294: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -84($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -76($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -72($fp) +lw $t0 -72($fp) +bne $t0 $zero label_295 +j label_296 +label_295: +li $v0 4 +la $a0 data_114 +syscall +li $v0 10 +syscall +label_296: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 48($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -68($fp) +la $t0 data_115 +sw $t0 -64($fp) +lw $t0 -64($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -60($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -56($fp) +lw $t0 -56($fp) +bne $t0 $zero label_297 +j label_298 +label_297: +li $v0 4 +la $a0 data_116 +syscall +li $v0 10 +syscall +label_298: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -60($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -52($fp) +la $t0 data_117 +sw $t0 -48($fp) +lw $t0 -48($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -44($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -40($fp) +lw $t0 -40($fp) +bne $t0 $zero label_299 +j label_300 +label_299: +li $v0 4 +la $a0 data_118 +syscall +li $v0 10 +syscall +label_300: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -36($fp) +la $t0 data_119 +sw $t0 -32($fp) +lw $t0 -32($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_301 +j label_302 +label_301: +li $v0 4 +la $a0 data_120 +syscall +li $v0 10 +syscall +label_302: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -20($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_303 +j label_304 +label_303: +li $v0 4 +la $a0 data_121 +syscall +li $v0 10 +syscall +label_304: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 16($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 360 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_prompt_at_Main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -40 +la $t0 data_122 +sw $t0 -48($fp) +lw $t0 -48($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -44($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -40($fp) +lw $t0 -40($fp) +bne $t0 $zero label_305 +j label_306 +label_305: +li $v0 4 +la $a0 data_123 +syscall +li $v0 10 +syscall +label_306: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -36($fp) +la $t0 data_124 +sw $t0 -32($fp) +lw $t0 -32($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_307 +j label_308 +label_307: +li $v0 4 +la $a0 data_125 +syscall +li $v0 10 +syscall +label_308: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -20($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_309 +j label_310 +label_309: +li $v0 4 +la $a0 data_126 +syscall +li $v0 10 +syscall +label_310: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 16($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 40 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_get_int_at_Main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -28 +jal __ctor_A2I +sw $v0 -32($fp) +lw $t0 -32($fp) +sw $t0 -36($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_311 +j label_312 +label_311: +li $v0 4 +la $a0 data_127 +syscall +li $v0 10 +syscall +label_312: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 52($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 -20($fp) +sw $t0 -28($fp) +lw $t0 -36($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_313 +j label_314 +label_313: +li $v0 4 +la $a0 data_128 +syscall +li $v0 10 +syscall +label_314: +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 28 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_is_even_at_Main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -184 +lw $t0 0($fp) +sw $t0 -192($fp) +lw $t0 -192($fp) +lw $t1 12($t0) +sw $t1 -176($fp) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -164($fp) +lw $t0 -164($fp) +lw $t1 12($t0) +sw $t1 -172($fp) +lw $t0 -176($fp) +lw $t1 -172($fp) +slt $t1 $t0 $t1 +sw $t1 -168($fp) +lw $t0 -168($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -180($fp) +lw $t0 -180($fp) +lw $t1 12($t0) +sw $t1 -184($fp) +lw $t0 -184($fp) +bne $t0 $zero label_329 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -116($fp) +lw $t0 -116($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -144($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -136($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -128($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -132($fp) +lw $t0 -144($fp) +lw $t1 -136($fp) +seq $t0 $t0 $t1 +sw $t0 -124($fp) +lw $t0 -124($fp) +bne $t0 $zero label_315 +lw $t0 -144($fp) +lw $t1 -128($fp) +seq $t0 $t0 $t1 +sw $t0 -124($fp) +lw $t0 -124($fp) +bne $t0 $zero label_316 +lw $t0 -144($fp) +lw $t1 -132($fp) +seq $t0 $t0 $t1 +sw $t0 -124($fp) +lw $t0 -124($fp) +bne $t0 $zero label_317 +lw $t0 -116($fp) +lw $t1 -192($fp) +seq $t0 $t0 $t1 +sw $t0 -120($fp) +j label_318 +label_315: +lw $t0 -116($fp) +lw $t1 12($t0) +sw $t1 -148($fp) +lw $t0 -192($fp) +lw $t1 12($t0) +sw $t1 -140($fp) +lw $t0 -148($fp) +lw $t1 -140($fp) +seq $t0 $t0 $t1 +sw $t0 -120($fp) +j label_318 +label_316: +lw $t0 -116($fp) +lw $t1 12($t0) +sw $t1 -148($fp) +lw $t0 -192($fp) +lw $t1 12($t0) +sw $t1 -140($fp) +lw $t0 -148($fp) +move $a0 $t0 +lw $t0 -140($fp) +move $a1 $t0 +jal equal_str +sw $v0 -120($fp) +j label_318 +label_317: +lw $t0 -116($fp) +lw $t1 12($t0) +sw $t1 -148($fp) +lw $t0 -192($fp) +lw $t1 12($t0) +sw $t1 -140($fp) +lw $t0 -148($fp) +lw $t1 -140($fp) +seq $t0 $t0 $t1 +sw $t0 -120($fp) +j label_318 +label_318: +lw $t0 -120($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -152($fp) +lw $t0 -152($fp) +lw $t1 12($t0) +sw $t1 -156($fp) +lw $t0 -156($fp) +bne $t0 $zero label_327 +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -68($fp) +lw $t0 -68($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -96($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -88($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -80($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -84($fp) +lw $t0 -96($fp) +lw $t1 -88($fp) +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_319 +lw $t0 -96($fp) +lw $t1 -80($fp) +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_320 +lw $t0 -96($fp) +lw $t1 -84($fp) +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_321 +lw $t0 -68($fp) +lw $t1 -192($fp) +seq $t0 $t0 $t1 +sw $t0 -72($fp) +j label_322 +label_319: +lw $t0 -68($fp) +lw $t1 12($t0) +sw $t1 -100($fp) +lw $t0 -192($fp) +lw $t1 12($t0) +sw $t1 -92($fp) +lw $t0 -100($fp) +lw $t1 -92($fp) +seq $t0 $t0 $t1 +sw $t0 -72($fp) +j label_322 +label_320: +lw $t0 -68($fp) +lw $t1 12($t0) +sw $t1 -100($fp) +lw $t0 -192($fp) +lw $t1 12($t0) +sw $t1 -92($fp) +lw $t0 -100($fp) +move $a0 $t0 +lw $t0 -92($fp) +move $a1 $t0 +jal equal_str +sw $v0 -72($fp) +j label_322 +label_321: +lw $t0 -68($fp) +lw $t1 12($t0) +sw $t1 -100($fp) +lw $t0 -192($fp) +lw $t1 12($t0) +sw $t1 -92($fp) +lw $t0 -100($fp) +lw $t1 -92($fp) +seq $t0 $t0 $t1 +sw $t0 -72($fp) +j label_322 +label_322: +lw $t0 -72($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -104($fp) +lw $t0 -104($fp) +lw $t1 12($t0) +sw $t1 -108($fp) +lw $t0 -108($fp) +bne $t0 $zero label_325 +lw $t0 -192($fp) +lw $t1 12($t0) +sw $t1 -60($fp) +li $t0 2 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -48($fp) +lw $t0 -48($fp) +lw $t1 12($t0) +sw $t1 -56($fp) +lw $t0 -60($fp) +lw $t1 -56($fp) +sub $t0 $t0 $t1 +sw $t0 -52($fp) +lw $t0 -52($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -64($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -44($fp) +lw $t0 -44($fp) +bne $t0 $zero label_323 +j label_324 +label_323: +li $v0 4 +la $a0 data_129 +syscall +li $v0 10 +syscall +label_324: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -64($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 36($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -40($fp) +lw $t0 -40($fp) +sw $t0 -112($fp) +j label_326 +label_325: +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 -36($fp) +sw $t0 -112($fp) +label_326: +lw $t0 -112($fp) +sw $t0 -160($fp) +j label_328 +label_327: +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -32($fp) +lw $t0 -32($fp) +sw $t0 -160($fp) +label_328: +lw $t0 -160($fp) +sw $t0 -188($fp) +j label_332 +label_329: +lw $t0 -192($fp) +lw $t1 12($t0) +sw $t1 -24($fp) +lw $t0 -24($fp) +not $t0 $t0 +addi $t0 $t0 1 +sw $t0 -20($fp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_330 +j label_331 +label_330: +li $v0 4 +la $a0 data_130 +syscall +li $v0 10 +syscall +label_331: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 36($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -188($fp) +label_332: +lw $v0 -188($fp) +addi $sp $sp 184 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_class_type_at_Main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -140 +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -144($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -136($fp) +lw $t0 -136($fp) +bne $t0 $zero label_333 +j label_334 +label_333: +li $v0 4 +la $a0 data_131 +syscall +li $v0 10 +syscall +label_334: +la $t0 types_table +addi $t0 $t0 36 +lw $t0 0($t0) +sw $t0 -132($fp) +lw $t0 -132($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -140($fp) +lw $t0 -140($fp) +bne $t0 $zero label_335 +la $t0 types_table +addi $t0 $t0 28 +lw $t0 0($t0) +sw $t0 -132($fp) +lw $t0 -132($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -140($fp) +lw $t0 -140($fp) +bne $t0 $zero label_338 +la $t0 types_table +addi $t0 $t0 32 +lw $t0 0($t0) +sw $t0 -132($fp) +lw $t0 -132($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -140($fp) +lw $t0 -140($fp) +bne $t0 $zero label_341 +la $t0 types_table +addi $t0 $t0 24 +lw $t0 0($t0) +sw $t0 -132($fp) +lw $t0 -132($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -140($fp) +lw $t0 -140($fp) +bne $t0 $zero label_344 +la $t0 types_table +addi $t0 $t0 20 +lw $t0 0($t0) +sw $t0 -132($fp) +lw $t0 -132($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -140($fp) +lw $t0 -140($fp) +bne $t0 $zero label_347 +la $t0 types_table +addi $t0 $t0 0 +lw $t0 0($t0) +sw $t0 -132($fp) +lw $t0 -132($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -140($fp) +lw $t0 -140($fp) +bne $t0 $zero label_350 +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -132($fp) +lw $t0 -132($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -140($fp) +lw $t0 -140($fp) +bne $t0 $zero label_350 +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -132($fp) +lw $t0 -132($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -140($fp) +lw $t0 -140($fp) +bne $t0 $zero label_350 +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -132($fp) +lw $t0 -132($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -140($fp) +lw $t0 -140($fp) +bne $t0 $zero label_350 +la $t0 types_table +addi $t0 $t0 4 +lw $t0 0($t0) +sw $t0 -132($fp) +lw $t0 -132($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -140($fp) +lw $t0 -140($fp) +bne $t0 $zero label_350 +la $t0 types_table +addi $t0 $t0 40 +lw $t0 0($t0) +sw $t0 -132($fp) +lw $t0 -132($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -140($fp) +lw $t0 -140($fp) +bne $t0 $zero label_350 +la $t0 types_table +addi $t0 $t0 44 +lw $t0 0($t0) +sw $t0 -132($fp) +lw $t0 -132($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -140($fp) +lw $t0 -140($fp) +bne $t0 $zero label_350 +li $v0 4 +la $a0 data_132 +syscall +li $v0 10 +syscall +label_335: +lw $t0 0($fp) +sw $t0 -128($fp) +la $t0 data_133 +sw $t0 -124($fp) +lw $t0 -124($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -120($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -116($fp) +lw $t0 -116($fp) +bne $t0 $zero label_336 +j label_337 +label_336: +li $v0 4 +la $a0 data_134 +syscall +li $v0 10 +syscall +label_337: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -120($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -112($fp) +lw $t0 -112($fp) +sw $t0 -148($fp) +j label_353 +label_338: +lw $t0 0($fp) +sw $t0 -108($fp) +la $t0 data_135 +sw $t0 -104($fp) +lw $t0 -104($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -100($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -96($fp) +lw $t0 -96($fp) +bne $t0 $zero label_339 +j label_340 +label_339: +li $v0 4 +la $a0 data_136 +syscall +li $v0 10 +syscall +label_340: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -100($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -92($fp) +lw $t0 -92($fp) +sw $t0 -148($fp) +j label_353 +label_341: +lw $t0 0($fp) +sw $t0 -88($fp) +la $t0 data_137 +sw $t0 -84($fp) +lw $t0 -84($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -80($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_342 +j label_343 +label_342: +li $v0 4 +la $a0 data_138 +syscall +li $v0 10 +syscall +label_343: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -80($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -72($fp) +lw $t0 -72($fp) +sw $t0 -148($fp) +j label_353 +label_344: +lw $t0 0($fp) +sw $t0 -68($fp) +la $t0 data_139 +sw $t0 -64($fp) +lw $t0 -64($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -60($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -56($fp) +lw $t0 -56($fp) +bne $t0 $zero label_345 +j label_346 +label_345: +li $v0 4 +la $a0 data_140 +syscall +li $v0 10 +syscall +label_346: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -60($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -52($fp) +lw $t0 -52($fp) +sw $t0 -148($fp) +j label_353 +label_347: +lw $t0 0($fp) +sw $t0 -48($fp) +la $t0 data_141 +sw $t0 -44($fp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -40($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -36($fp) +lw $t0 -36($fp) +bne $t0 $zero label_348 +j label_349 +label_348: +li $v0 4 +la $a0 data_142 +syscall +li $v0 10 +syscall +label_349: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -40($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -32($fp) +lw $t0 -32($fp) +sw $t0 -148($fp) +j label_353 +label_350: +lw $t0 0($fp) +sw $t0 -28($fp) +la $t0 data_143 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_351 +j label_352 +label_351: +li $v0 4 +la $a0 data_144 +syscall +li $v0 10 +syscall +label_352: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -148($fp) +j label_353 +label_353: +lw $v0 -148($fp) +addi $sp $sp 140 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_print_at_Main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -48 +jal __ctor_A2I +sw $v0 -52($fp) +lw $t0 -52($fp) +sw $t0 -56($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -48($fp) +lw $t0 -48($fp) +bne $t0 $zero label_354 +j label_355 +label_354: +li $v0 4 +la $a0 data_145 +syscall +li $v0 10 +syscall +label_355: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 36($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -44($fp) +lw $t0 -56($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -40($fp) +lw $t0 -40($fp) +bne $t0 $zero label_356 +j label_357 +label_356: +li $v0 4 +la $a0 data_146 +syscall +li $v0 10 +syscall +label_357: +lw $t0 -56($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -56($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -36($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_358 +j label_359 +label_358: +li $v0 4 +la $a0 data_147 +syscall +li $v0 10 +syscall +label_359: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -28($fp) +la $t0 data_148 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_360 +j label_361 +label_360: +li $v0 4 +la $a0 data_149 +syscall +li $v0 10 +syscall +label_361: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 48 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_main_at_Main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -1192 +jal __ctor_A +sw $v0 -1200($fp) +lw $t0 -1200($fp) +lw $t1 0($fp) +addi $t1 $t1 16 +sw $t0 0($t1) +label_362: +lw $t4 0($fp) +lw $t4 24($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -1196($fp) +lw $t0 -1196($fp) +bne $t0 $zero label_363 +j label_538 +label_363: +la $t0 data_150 +sw $t0 -1192($fp) +lw $t0 -1192($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -1188($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -1184($fp) +lw $t0 -1184($fp) +bne $t0 $zero label_364 +j label_365 +label_364: +li $v0 4 +la $a0 data_151 +syscall +li $v0 10 +syscall +label_365: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -1188($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -1180($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -1176($fp) +lw $t0 -1176($fp) +bne $t0 $zero label_366 +j label_367 +label_366: +li $v0 4 +la $a0 data_152 +syscall +li $v0 10 +syscall +label_367: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 48($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -1172($fp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -1160($fp) +lw $t0 -1160($fp) +bne $t0 $zero label_368 +j label_369 +label_368: +li $v0 4 +la $a0 data_153 +syscall +li $v0 10 +syscall +label_369: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 36($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -1156($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -1152($fp) +lw $t0 -1152($fp) +bne $t0 $zero label_370 +j label_371 +label_370: +li $v0 4 +la $a0 data_154 +syscall +li $v0 10 +syscall +label_371: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -1156($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 36($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -1148($fp) +lw $t0 -1148($fp) +lw $t1 12($t0) +sw $t1 -1164($fp) +lw $t0 -1164($fp) +bne $t0 $zero label_374 +la $t0 data_155 +sw $t0 -1144($fp) +lw $t0 -1144($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -1140($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -1136($fp) +lw $t0 -1136($fp) +bne $t0 $zero label_372 +j label_373 +label_372: +li $v0 4 +la $a0 data_156 +syscall +li $v0 10 +syscall +label_373: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -1140($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -1132($fp) +lw $t0 -1132($fp) +sw $t0 -1168($fp) +j label_377 +label_374: +la $t0 data_157 +sw $t0 -1128($fp) +lw $t0 -1128($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -1124($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -1120($fp) +lw $t0 -1120($fp) +bne $t0 $zero label_375 +j label_376 +label_375: +li $v0 4 +la $a0 data_158 +syscall +li $v0 10 +syscall +label_376: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -1124($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -1116($fp) +lw $t0 -1116($fp) +sw $t0 -1168($fp) +label_377: +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -1112($fp) +lw $t0 -1112($fp) +bne $t0 $zero label_378 +j label_379 +label_378: +li $v0 4 +la $a0 data_159 +syscall +li $v0 10 +syscall +label_379: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -1108($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -1104($fp) +lw $t0 -1104($fp) +bne $t0 $zero label_380 +j label_381 +label_380: +li $v0 4 +la $a0 data_160 +syscall +li $v0 10 +syscall +label_381: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 44($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -1100($fp) +lw $t0 -1100($fp) +lw $t1 0($fp) +addi $t1 $t1 20 +sw $t0 0($t1) +la $t0 data_161 +sw $t0 -1052($fp) +lw $t0 -1052($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -1048($fp) +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -1080($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -1072($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -1064($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -1068($fp) +lw $t0 -1080($fp) +lw $t1 -1072($fp) +seq $t0 $t0 $t1 +sw $t0 -1060($fp) +lw $t0 -1060($fp) +bne $t0 $zero label_382 +lw $t0 -1080($fp) +lw $t1 -1064($fp) +seq $t0 $t0 $t1 +sw $t0 -1060($fp) +lw $t0 -1060($fp) +bne $t0 $zero label_383 +lw $t0 -1080($fp) +lw $t1 -1068($fp) +seq $t0 $t0 $t1 +sw $t0 -1060($fp) +lw $t0 -1060($fp) +bne $t0 $zero label_384 +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 -1048($fp) +seq $t0 $t0 $t1 +sw $t0 -1056($fp) +j label_385 +label_382: +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -1084($fp) +lw $t0 -1048($fp) +lw $t1 12($t0) +sw $t1 -1076($fp) +lw $t0 -1084($fp) +lw $t1 -1076($fp) +seq $t0 $t0 $t1 +sw $t0 -1056($fp) +j label_385 +label_383: +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -1084($fp) +lw $t0 -1048($fp) +lw $t1 12($t0) +sw $t1 -1076($fp) +lw $t0 -1084($fp) +move $a0 $t0 +lw $t0 -1076($fp) +move $a1 $t0 +jal equal_str +sw $v0 -1056($fp) +j label_385 +label_384: +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -1084($fp) +lw $t0 -1048($fp) +lw $t1 12($t0) +sw $t1 -1076($fp) +lw $t0 -1084($fp) +lw $t1 -1076($fp) +seq $t0 $t0 $t1 +sw $t0 -1056($fp) +j label_385 +label_385: +lw $t0 -1056($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -1088($fp) +lw $t0 -1088($fp) +lw $t1 12($t0) +sw $t1 -1092($fp) +lw $t0 -1092($fp) +bne $t0 $zero label_526 +la $t0 data_162 +sw $t0 -1000($fp) +lw $t0 -1000($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -996($fp) +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -1028($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -1020($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -1012($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -1016($fp) +lw $t0 -1028($fp) +lw $t1 -1020($fp) +seq $t0 $t0 $t1 +sw $t0 -1008($fp) +lw $t0 -1008($fp) +bne $t0 $zero label_386 +lw $t0 -1028($fp) +lw $t1 -1012($fp) +seq $t0 $t0 $t1 +sw $t0 -1008($fp) +lw $t0 -1008($fp) +bne $t0 $zero label_387 +lw $t0 -1028($fp) +lw $t1 -1016($fp) +seq $t0 $t0 $t1 +sw $t0 -1008($fp) +lw $t0 -1008($fp) +bne $t0 $zero label_388 +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 -996($fp) +seq $t0 $t0 $t1 +sw $t0 -1004($fp) +j label_389 +label_386: +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -1032($fp) +lw $t0 -996($fp) +lw $t1 12($t0) +sw $t1 -1024($fp) +lw $t0 -1032($fp) +lw $t1 -1024($fp) +seq $t0 $t0 $t1 +sw $t0 -1004($fp) +j label_389 +label_387: +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -1032($fp) +lw $t0 -996($fp) +lw $t1 12($t0) +sw $t1 -1024($fp) +lw $t0 -1032($fp) +move $a0 $t0 +lw $t0 -1024($fp) +move $a1 $t0 +jal equal_str +sw $v0 -1004($fp) +j label_389 +label_388: +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -1032($fp) +lw $t0 -996($fp) +lw $t1 12($t0) +sw $t1 -1024($fp) +lw $t0 -1032($fp) +lw $t1 -1024($fp) +seq $t0 $t0 $t1 +sw $t0 -1004($fp) +j label_389 +label_389: +lw $t0 -1004($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -1036($fp) +lw $t0 -1036($fp) +lw $t1 12($t0) +sw $t1 -1040($fp) +lw $t0 -1040($fp) +bne $t0 $zero label_506 +la $t0 data_163 +sw $t0 -948($fp) +lw $t0 -948($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -944($fp) +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -976($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -968($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -960($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -964($fp) +lw $t0 -976($fp) +lw $t1 -968($fp) +seq $t0 $t0 $t1 +sw $t0 -956($fp) +lw $t0 -956($fp) +bne $t0 $zero label_390 +lw $t0 -976($fp) +lw $t1 -960($fp) +seq $t0 $t0 $t1 +sw $t0 -956($fp) +lw $t0 -956($fp) +bne $t0 $zero label_391 +lw $t0 -976($fp) +lw $t1 -964($fp) +seq $t0 $t0 $t1 +sw $t0 -956($fp) +lw $t0 -956($fp) +bne $t0 $zero label_392 +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 -944($fp) +seq $t0 $t0 $t1 +sw $t0 -952($fp) +j label_393 +label_390: +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -980($fp) +lw $t0 -944($fp) +lw $t1 12($t0) +sw $t1 -972($fp) +lw $t0 -980($fp) +lw $t1 -972($fp) +seq $t0 $t0 $t1 +sw $t0 -952($fp) +j label_393 +label_391: +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -980($fp) +lw $t0 -944($fp) +lw $t1 12($t0) +sw $t1 -972($fp) +lw $t0 -980($fp) +move $a0 $t0 +lw $t0 -972($fp) +move $a1 $t0 +jal equal_str +sw $v0 -952($fp) +j label_393 +label_392: +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -980($fp) +lw $t0 -944($fp) +lw $t1 12($t0) +sw $t1 -972($fp) +lw $t0 -980($fp) +lw $t1 -972($fp) +seq $t0 $t0 $t1 +sw $t0 -952($fp) +j label_393 +label_393: +lw $t0 -952($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -984($fp) +lw $t0 -984($fp) +lw $t1 12($t0) +sw $t1 -988($fp) +lw $t0 -988($fp) +bne $t0 $zero label_494 +la $t0 data_164 +sw $t0 -896($fp) +lw $t0 -896($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -892($fp) +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -924($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -916($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -908($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -912($fp) +lw $t0 -924($fp) +lw $t1 -916($fp) +seq $t0 $t0 $t1 +sw $t0 -904($fp) +lw $t0 -904($fp) +bne $t0 $zero label_394 +lw $t0 -924($fp) +lw $t1 -908($fp) +seq $t0 $t0 $t1 +sw $t0 -904($fp) +lw $t0 -904($fp) +bne $t0 $zero label_395 +lw $t0 -924($fp) +lw $t1 -912($fp) +seq $t0 $t0 $t1 +sw $t0 -904($fp) +lw $t0 -904($fp) +bne $t0 $zero label_396 +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 -892($fp) +seq $t0 $t0 $t1 +sw $t0 -900($fp) +j label_397 +label_394: +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -928($fp) +lw $t0 -892($fp) +lw $t1 12($t0) +sw $t1 -920($fp) +lw $t0 -928($fp) +lw $t1 -920($fp) +seq $t0 $t0 $t1 +sw $t0 -900($fp) +j label_397 +label_395: +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -928($fp) +lw $t0 -892($fp) +lw $t1 12($t0) +sw $t1 -920($fp) +lw $t0 -928($fp) +move $a0 $t0 +lw $t0 -920($fp) +move $a1 $t0 +jal equal_str +sw $v0 -900($fp) +j label_397 +label_396: +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -928($fp) +lw $t0 -892($fp) +lw $t1 12($t0) +sw $t1 -920($fp) +lw $t0 -928($fp) +lw $t1 -920($fp) +seq $t0 $t0 $t1 +sw $t0 -900($fp) +j label_397 +label_397: +lw $t0 -900($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -932($fp) +lw $t0 -932($fp) +lw $t1 12($t0) +sw $t1 -936($fp) +lw $t0 -936($fp) +bne $t0 $zero label_488 +la $t0 data_165 +sw $t0 -844($fp) +lw $t0 -844($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -840($fp) +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -872($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -864($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -856($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -860($fp) +lw $t0 -872($fp) +lw $t1 -864($fp) +seq $t0 $t0 $t1 +sw $t0 -852($fp) +lw $t0 -852($fp) +bne $t0 $zero label_398 +lw $t0 -872($fp) +lw $t1 -856($fp) +seq $t0 $t0 $t1 +sw $t0 -852($fp) +lw $t0 -852($fp) +bne $t0 $zero label_399 +lw $t0 -872($fp) +lw $t1 -860($fp) +seq $t0 $t0 $t1 +sw $t0 -852($fp) +lw $t0 -852($fp) +bne $t0 $zero label_400 +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 -840($fp) +seq $t0 $t0 $t1 +sw $t0 -848($fp) +j label_401 +label_398: +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -876($fp) +lw $t0 -840($fp) +lw $t1 12($t0) +sw $t1 -868($fp) +lw $t0 -876($fp) +lw $t1 -868($fp) +seq $t0 $t0 $t1 +sw $t0 -848($fp) +j label_401 +label_399: +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -876($fp) +lw $t0 -840($fp) +lw $t1 12($t0) +sw $t1 -868($fp) +lw $t0 -876($fp) +move $a0 $t0 +lw $t0 -868($fp) +move $a1 $t0 +jal equal_str +sw $v0 -848($fp) +j label_401 +label_400: +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -876($fp) +lw $t0 -840($fp) +lw $t1 12($t0) +sw $t1 -868($fp) +lw $t0 -876($fp) +lw $t1 -868($fp) +seq $t0 $t0 $t1 +sw $t0 -848($fp) +j label_401 +label_401: +lw $t0 -848($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -880($fp) +lw $t0 -880($fp) +lw $t1 12($t0) +sw $t1 -884($fp) +lw $t0 -884($fp) +bne $t0 $zero label_482 +la $t0 data_166 +sw $t0 -792($fp) +lw $t0 -792($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -788($fp) +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -820($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -812($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -804($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -808($fp) +lw $t0 -820($fp) +lw $t1 -812($fp) +seq $t0 $t0 $t1 +sw $t0 -800($fp) +lw $t0 -800($fp) +bne $t0 $zero label_402 +lw $t0 -820($fp) +lw $t1 -804($fp) +seq $t0 $t0 $t1 +sw $t0 -800($fp) +lw $t0 -800($fp) +bne $t0 $zero label_403 +lw $t0 -820($fp) +lw $t1 -808($fp) +seq $t0 $t0 $t1 +sw $t0 -800($fp) +lw $t0 -800($fp) +bne $t0 $zero label_404 +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 -788($fp) +seq $t0 $t0 $t1 +sw $t0 -796($fp) +j label_405 +label_402: +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -824($fp) +lw $t0 -788($fp) +lw $t1 12($t0) +sw $t1 -816($fp) +lw $t0 -824($fp) +lw $t1 -816($fp) +seq $t0 $t0 $t1 +sw $t0 -796($fp) +j label_405 +label_403: +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -824($fp) +lw $t0 -788($fp) +lw $t1 12($t0) +sw $t1 -816($fp) +lw $t0 -824($fp) +move $a0 $t0 +lw $t0 -816($fp) +move $a1 $t0 +jal equal_str +sw $v0 -796($fp) +j label_405 +label_404: +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -824($fp) +lw $t0 -788($fp) +lw $t1 12($t0) +sw $t1 -816($fp) +lw $t0 -824($fp) +lw $t1 -816($fp) +seq $t0 $t0 $t1 +sw $t0 -796($fp) +j label_405 +label_405: +lw $t0 -796($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -828($fp) +lw $t0 -828($fp) +lw $t1 12($t0) +sw $t1 -832($fp) +lw $t0 -832($fp) +bne $t0 $zero label_476 +la $t0 data_167 +sw $t0 -740($fp) +lw $t0 -740($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -736($fp) +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -768($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -760($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -752($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -756($fp) +lw $t0 -768($fp) +lw $t1 -760($fp) +seq $t0 $t0 $t1 +sw $t0 -748($fp) +lw $t0 -748($fp) +bne $t0 $zero label_406 +lw $t0 -768($fp) +lw $t1 -752($fp) +seq $t0 $t0 $t1 +sw $t0 -748($fp) +lw $t0 -748($fp) +bne $t0 $zero label_407 +lw $t0 -768($fp) +lw $t1 -756($fp) +seq $t0 $t0 $t1 +sw $t0 -748($fp) +lw $t0 -748($fp) +bne $t0 $zero label_408 +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 -736($fp) +seq $t0 $t0 $t1 +sw $t0 -744($fp) +j label_409 +label_406: +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -772($fp) +lw $t0 -736($fp) +lw $t1 12($t0) +sw $t1 -764($fp) +lw $t0 -772($fp) +lw $t1 -764($fp) +seq $t0 $t0 $t1 +sw $t0 -744($fp) +j label_409 +label_407: +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -772($fp) +lw $t0 -736($fp) +lw $t1 12($t0) +sw $t1 -764($fp) +lw $t0 -772($fp) +move $a0 $t0 +lw $t0 -764($fp) +move $a1 $t0 +jal equal_str +sw $v0 -744($fp) +j label_409 +label_408: +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -772($fp) +lw $t0 -736($fp) +lw $t1 12($t0) +sw $t1 -764($fp) +lw $t0 -772($fp) +lw $t1 -764($fp) +seq $t0 $t0 $t1 +sw $t0 -744($fp) +j label_409 +label_409: +lw $t0 -744($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -776($fp) +lw $t0 -776($fp) +lw $t1 12($t0) +sw $t1 -780($fp) +lw $t0 -780($fp) +bne $t0 $zero label_456 +la $t0 data_168 +sw $t0 -688($fp) +lw $t0 -688($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -684($fp) +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -716($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -708($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -700($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -704($fp) +lw $t0 -716($fp) +lw $t1 -708($fp) +seq $t0 $t0 $t1 +sw $t0 -696($fp) +lw $t0 -696($fp) +bne $t0 $zero label_410 +lw $t0 -716($fp) +lw $t1 -700($fp) +seq $t0 $t0 $t1 +sw $t0 -696($fp) +lw $t0 -696($fp) +bne $t0 $zero label_411 +lw $t0 -716($fp) +lw $t1 -704($fp) +seq $t0 $t0 $t1 +sw $t0 -696($fp) +lw $t0 -696($fp) +bne $t0 $zero label_412 +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 -684($fp) +seq $t0 $t0 $t1 +sw $t0 -692($fp) +j label_413 +label_410: +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -720($fp) +lw $t0 -684($fp) +lw $t1 12($t0) +sw $t1 -712($fp) +lw $t0 -720($fp) +lw $t1 -712($fp) +seq $t0 $t0 $t1 +sw $t0 -692($fp) +j label_413 +label_411: +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -720($fp) +lw $t0 -684($fp) +lw $t1 12($t0) +sw $t1 -712($fp) +lw $t0 -720($fp) +move $a0 $t0 +lw $t0 -712($fp) +move $a1 $t0 +jal equal_str +sw $v0 -692($fp) +j label_413 +label_412: +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -720($fp) +lw $t0 -684($fp) +lw $t1 12($t0) +sw $t1 -712($fp) +lw $t0 -720($fp) +lw $t1 -712($fp) +seq $t0 $t0 $t1 +sw $t0 -692($fp) +j label_413 +label_413: +lw $t0 -692($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -724($fp) +lw $t0 -724($fp) +lw $t1 12($t0) +sw $t1 -728($fp) +lw $t0 -728($fp) +bne $t0 $zero label_430 +la $t0 data_169 +sw $t0 -636($fp) +lw $t0 -636($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -632($fp) +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -664($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -656($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -648($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -652($fp) +lw $t0 -664($fp) +lw $t1 -656($fp) +seq $t0 $t0 $t1 +sw $t0 -644($fp) +lw $t0 -644($fp) +bne $t0 $zero label_414 +lw $t0 -664($fp) +lw $t1 -648($fp) +seq $t0 $t0 $t1 +sw $t0 -644($fp) +lw $t0 -644($fp) +bne $t0 $zero label_415 +lw $t0 -664($fp) +lw $t1 -652($fp) +seq $t0 $t0 $t1 +sw $t0 -644($fp) +lw $t0 -644($fp) +bne $t0 $zero label_416 +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 -632($fp) +seq $t0 $t0 $t1 +sw $t0 -640($fp) +j label_417 +label_414: +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -668($fp) +lw $t0 -632($fp) +lw $t1 12($t0) +sw $t1 -660($fp) +lw $t0 -668($fp) +lw $t1 -660($fp) +seq $t0 $t0 $t1 +sw $t0 -640($fp) +j label_417 +label_415: +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -668($fp) +lw $t0 -632($fp) +lw $t1 12($t0) +sw $t1 -660($fp) +lw $t0 -668($fp) +move $a0 $t0 +lw $t0 -660($fp) +move $a1 $t0 +jal equal_str +sw $v0 -640($fp) +j label_417 +label_416: +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -668($fp) +lw $t0 -632($fp) +lw $t1 12($t0) +sw $t1 -660($fp) +lw $t0 -668($fp) +lw $t1 -660($fp) +seq $t0 $t0 $t1 +sw $t0 -640($fp) +j label_417 +label_417: +lw $t0 -640($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -672($fp) +lw $t0 -672($fp) +lw $t1 12($t0) +sw $t1 -676($fp) +lw $t0 -676($fp) +bne $t0 $zero label_428 +la $t0 data_170 +sw $t0 -584($fp) +lw $t0 -584($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -580($fp) +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -612($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -604($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -596($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -600($fp) +lw $t0 -612($fp) +lw $t1 -604($fp) +seq $t0 $t0 $t1 +sw $t0 -592($fp) +lw $t0 -592($fp) +bne $t0 $zero label_418 +lw $t0 -612($fp) +lw $t1 -596($fp) +seq $t0 $t0 $t1 +sw $t0 -592($fp) +lw $t0 -592($fp) +bne $t0 $zero label_419 +lw $t0 -612($fp) +lw $t1 -600($fp) +seq $t0 $t0 $t1 +sw $t0 -592($fp) +lw $t0 -592($fp) +bne $t0 $zero label_420 +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 -580($fp) +seq $t0 $t0 $t1 +sw $t0 -588($fp) +j label_421 +label_418: +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -616($fp) +lw $t0 -580($fp) +lw $t1 12($t0) +sw $t1 -608($fp) +lw $t0 -616($fp) +lw $t1 -608($fp) +seq $t0 $t0 $t1 +sw $t0 -588($fp) +j label_421 +label_419: +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -616($fp) +lw $t0 -580($fp) +lw $t1 12($t0) +sw $t1 -608($fp) +lw $t0 -616($fp) +move $a0 $t0 +lw $t0 -608($fp) +move $a1 $t0 +jal equal_str +sw $v0 -588($fp) +j label_421 +label_420: +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -616($fp) +lw $t0 -580($fp) +lw $t1 12($t0) +sw $t1 -608($fp) +lw $t0 -616($fp) +lw $t1 -608($fp) +seq $t0 $t0 $t1 +sw $t0 -588($fp) +j label_421 +label_421: +lw $t0 -588($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -620($fp) +lw $t0 -620($fp) +lw $t1 12($t0) +sw $t1 -624($fp) +lw $t0 -624($fp) +bne $t0 $zero label_426 +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -576($fp) +lw $t0 -576($fp) +bne $t0 $zero label_422 +j label_423 +label_422: +li $v0 4 +la $a0 data_171 +syscall +li $v0 10 +syscall +label_423: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 36($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -572($fp) +jal __ctor_A +sw $v0 -568($fp) +lw $t0 -568($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -564($fp) +lw $t0 -564($fp) +bne $t0 $zero label_424 +j label_425 +label_424: +li $v0 4 +la $a0 data_172 +syscall +li $v0 10 +syscall +label_425: +lw $t0 -568($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -572($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -568($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -560($fp) +lw $t0 -560($fp) +lw $t1 0($fp) +addi $t1 $t1 16 +sw $t0 0($t1) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +sw $t0 -628($fp) +j label_427 +label_426: +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -556($fp) +lw $t0 -556($fp) +lw $t1 0($fp) +addi $t1 $t1 24 +sw $t0 0($t1) +lw $t4 0($fp) +lw $t4 24($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +sw $t0 -628($fp) +label_427: +lw $t0 -628($fp) +sw $t0 -680($fp) +j label_429 +label_428: +jal __ctor_A +sw $v0 -552($fp) +lw $t0 -552($fp) +lw $t1 0($fp) +addi $t1 $t1 16 +sw $t0 0($t1) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +sw $t0 -680($fp) +label_429: +lw $t0 -680($fp) +sw $t0 -732($fp) +j label_455 +label_430: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -544($fp) +lw $t0 -544($fp) +bne $t0 $zero label_431 +j label_432 +label_431: +li $v0 4 +la $a0 data_173 +syscall +li $v0 10 +syscall +label_432: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 36($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -540($fp) +jal __ctor_E +sw $v0 -536($fp) +lw $t0 -536($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -532($fp) +lw $t0 -532($fp) +bne $t0 $zero label_433 +j label_434 +label_433: +li $v0 4 +la $a0 data_174 +syscall +li $v0 10 +syscall +label_434: +lw $t0 -536($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -540($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -536($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 44($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -528($fp) +lw $t0 -528($fp) +sw $t0 -548($fp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -504($fp) +lw $t0 -504($fp) +bne $t0 $zero label_435 +j label_436 +label_435: +li $v0 4 +la $a0 data_175 +syscall +li $v0 10 +syscall +label_436: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 36($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -500($fp) +lw $t0 -500($fp) +lw $t1 12($t0) +sw $t1 -516($fp) +lw $t0 -548($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -480($fp) +lw $t0 -480($fp) +bne $t0 $zero label_437 +j label_438 +label_437: +li $v0 4 +la $a0 data_176 +syscall +li $v0 10 +syscall +label_438: +lw $t0 -548($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -548($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 36($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -476($fp) +lw $t0 -476($fp) +lw $t1 12($t0) +sw $t1 -492($fp) +li $t0 8 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -472($fp) +lw $t0 -472($fp) +lw $t1 12($t0) +sw $t1 -488($fp) +lw $t0 -492($fp) +lw $t1 -488($fp) +mul $t0 $t0 $t1 +sw $t0 -484($fp) +lw $t0 -484($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -496($fp) +lw $t0 -496($fp) +lw $t1 12($t0) +sw $t1 -512($fp) +lw $t0 -516($fp) +lw $t1 -512($fp) +sub $t0 $t0 $t1 +sw $t0 -508($fp) +lw $t0 -508($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -520($fp) +lw $t0 -520($fp) +sw $t0 -524($fp) +la $t0 data_177 +sw $t0 -468($fp) +lw $t0 -468($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -464($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -460($fp) +lw $t0 -460($fp) +bne $t0 $zero label_439 +j label_440 +label_439: +li $v0 4 +la $a0 data_178 +syscall +li $v0 10 +syscall +label_440: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -464($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -456($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -452($fp) +lw $t0 -452($fp) +bne $t0 $zero label_441 +j label_442 +label_441: +li $v0 4 +la $a0 data_179 +syscall +li $v0 10 +syscall +label_442: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 48($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -448($fp) +la $t0 data_180 +sw $t0 -444($fp) +lw $t0 -444($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -440($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -436($fp) +lw $t0 -436($fp) +bne $t0 $zero label_443 +j label_444 +label_443: +li $v0 4 +la $a0 data_181 +syscall +li $v0 10 +syscall +label_444: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -440($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -432($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -428($fp) +lw $t0 -428($fp) +bne $t0 $zero label_445 +j label_446 +label_445: +li $v0 4 +la $a0 data_182 +syscall +li $v0 10 +syscall +label_446: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -548($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 48($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -424($fp) +la $t0 data_183 +sw $t0 -420($fp) +lw $t0 -420($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -416($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -412($fp) +lw $t0 -412($fp) +bne $t0 $zero label_447 +j label_448 +label_447: +li $v0 4 +la $a0 data_184 +syscall +li $v0 10 +syscall +label_448: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -416($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -408($fp) +jal __ctor_A2I +sw $v0 -400($fp) +lw $t0 -400($fp) +sw $t0 -404($fp) +lw $t0 -404($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -396($fp) +lw $t0 -396($fp) +bne $t0 $zero label_449 +j label_450 +label_449: +li $v0 4 +la $a0 data_185 +syscall +li $v0 10 +syscall +label_450: +lw $t0 -404($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -524($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -404($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -392($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -388($fp) +lw $t0 -388($fp) +bne $t0 $zero label_451 +j label_452 +label_451: +li $v0 4 +la $a0 data_186 +syscall +li $v0 10 +syscall +label_452: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -392($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -384($fp) +la $t0 data_187 +sw $t0 -380($fp) +lw $t0 -380($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -376($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -372($fp) +lw $t0 -372($fp) +bne $t0 $zero label_453 +j label_454 +label_453: +li $v0 4 +la $a0 data_188 +syscall +li $v0 10 +syscall +label_454: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -376($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -368($fp) +lw $t0 -548($fp) +lw $t1 0($fp) +addi $t1 $t1 16 +sw $t0 0($t1) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +sw $t0 -732($fp) +label_455: +lw $t0 -732($fp) +sw $t0 -784($fp) +j label_475 +label_456: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -356($fp) +lw $t0 -356($fp) +bne $t0 $zero label_457 +j label_458 +label_457: +li $v0 4 +la $a0 data_189 +syscall +li $v0 10 +syscall +label_458: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 36($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -352($fp) +jal __ctor_D +sw $v0 -348($fp) +lw $t0 -348($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -344($fp) +lw $t0 -344($fp) +bne $t0 $zero label_459 +j label_460 +label_459: +li $v0 4 +la $a0 data_190 +syscall +li $v0 10 +syscall +label_460: +lw $t0 -348($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -352($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -348($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 40($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -340($fp) +lw $t0 -340($fp) +lw $t1 12($t0) +sw $t1 -360($fp) +lw $t0 -360($fp) +bne $t0 $zero label_467 +la $t0 data_191 +sw $t0 -336($fp) +lw $t0 -336($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -332($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -328($fp) +lw $t0 -328($fp) +bne $t0 $zero label_461 +j label_462 +label_461: +li $v0 4 +la $a0 data_192 +syscall +li $v0 10 +syscall +label_462: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -332($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -324($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -320($fp) +lw $t0 -320($fp) +bne $t0 $zero label_463 +j label_464 +label_463: +li $v0 4 +la $a0 data_193 +syscall +li $v0 10 +syscall +label_464: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 48($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -316($fp) +la $t0 data_194 +sw $t0 -312($fp) +lw $t0 -312($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -308($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -304($fp) +lw $t0 -304($fp) +bne $t0 $zero label_465 +j label_466 +label_465: +li $v0 4 +la $a0 data_195 +syscall +li $v0 10 +syscall +label_466: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -308($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -300($fp) +lw $t0 -300($fp) +sw $t0 -364($fp) +j label_474 +label_467: +la $t0 data_196 +sw $t0 -296($fp) +lw $t0 -296($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -292($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -288($fp) +lw $t0 -288($fp) +bne $t0 $zero label_468 +j label_469 +label_468: +li $v0 4 +la $a0 data_197 +syscall +li $v0 10 +syscall +label_469: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -292($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -284($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -280($fp) +lw $t0 -280($fp) +bne $t0 $zero label_470 +j label_471 +label_470: +li $v0 4 +la $a0 data_198 +syscall +li $v0 10 +syscall +label_471: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 48($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -276($fp) +la $t0 data_199 +sw $t0 -272($fp) +lw $t0 -272($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -268($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -264($fp) +lw $t0 -264($fp) +bne $t0 $zero label_472 +j label_473 +label_472: +li $v0 4 +la $a0 data_200 +syscall +li $v0 10 +syscall +label_473: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -268($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -260($fp) +lw $t0 -260($fp) +sw $t0 -364($fp) +label_474: +lw $t0 -364($fp) +sw $t0 -784($fp) +label_475: +lw $t0 -784($fp) +sw $t0 -836($fp) +j label_481 +label_476: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -256($fp) +lw $t0 -256($fp) +bne $t0 $zero label_477 +j label_478 +label_477: +li $v0 4 +la $a0 data_201 +syscall +li $v0 10 +syscall +label_478: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 36($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -252($fp) +jal __ctor_C +sw $v0 -248($fp) +lw $t0 -248($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -244($fp) +lw $t0 -244($fp) +bne $t0 $zero label_479 +j label_480 +label_479: +li $v0 4 +la $a0 data_202 +syscall +li $v0 10 +syscall +label_480: +lw $t0 -248($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -252($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal function_method5_at_C +addi $sp $sp 8 +sw $v0 -240($fp) +lw $t0 -240($fp) +lw $t1 0($fp) +addi $t1 $t1 16 +sw $t0 0($t1) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +sw $t0 -836($fp) +label_481: +lw $t0 -836($fp) +sw $t0 -888($fp) +j label_487 +label_482: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -236($fp) +lw $t0 -236($fp) +bne $t0 $zero label_483 +j label_484 +label_483: +li $v0 4 +la $a0 data_203 +syscall +li $v0 10 +syscall +label_484: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 36($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -232($fp) +jal __ctor_C +sw $v0 -228($fp) +lw $t0 -228($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -224($fp) +lw $t0 -224($fp) +bne $t0 $zero label_485 +j label_486 +label_485: +li $v0 4 +la $a0 data_204 +syscall +li $v0 10 +syscall +label_486: +lw $t0 -228($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -232($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal function_method5_at_B +addi $sp $sp 8 +sw $v0 -220($fp) +lw $t0 -220($fp) +lw $t1 0($fp) +addi $t1 $t1 16 +sw $t0 0($t1) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +sw $t0 -888($fp) +label_487: +lw $t0 -888($fp) +sw $t0 -940($fp) +j label_493 +label_488: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -216($fp) +lw $t0 -216($fp) +bne $t0 $zero label_489 +j label_490 +label_489: +li $v0 4 +la $a0 data_205 +syscall +li $v0 10 +syscall +label_490: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 36($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -212($fp) +jal __ctor_C +sw $v0 -208($fp) +lw $t0 -208($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -204($fp) +lw $t0 -204($fp) +bne $t0 $zero label_491 +j label_492 +label_491: +li $v0 4 +la $a0 data_206 +syscall +li $v0 10 +syscall +label_492: +lw $t0 -208($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -212($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal function_method5_at_A +addi $sp $sp 8 +sw $v0 -200($fp) +lw $t0 -200($fp) +lw $t1 0($fp) +addi $t1 $t1 16 +sw $t0 0($t1) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +sw $t0 -940($fp) +label_493: +lw $t0 -940($fp) +sw $t0 -992($fp) +j label_505 +label_494: +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -196($fp) +lw $t0 -196($fp) +bne $t0 $zero label_495 +j label_496 +label_495: +li $v0 4 +la $a0 data_207 +syscall +li $v0 10 +syscall +label_496: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -192($fp) +jal __ctor_A +sw $v0 -188($fp) +lw $t0 -188($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -184($fp) +lw $t0 -184($fp) +bne $t0 $zero label_497 +j label_498 +label_497: +li $v0 4 +la $a0 data_208 +syscall +li $v0 10 +syscall +label_498: +lw $t0 -188($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -192($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -188($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -180($fp) +lw $t0 -180($fp) +lw $t1 0($fp) +addi $t1 $t1 12 +sw $t0 0($t1) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -176($fp) +lw $t0 -176($fp) +bne $t0 $zero label_499 +j label_500 +label_499: +li $v0 4 +la $a0 data_209 +syscall +li $v0 10 +syscall +label_500: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 36($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -172($fp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -168($fp) +lw $t0 -168($fp) +bne $t0 $zero label_501 +j label_502 +label_501: +li $v0 4 +la $a0 data_210 +syscall +li $v0 10 +syscall +label_502: +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 36($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -164($fp) +jal __ctor_D +sw $v0 -160($fp) +lw $t0 -160($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -156($fp) +lw $t0 -156($fp) +bne $t0 $zero label_503 +j label_504 +label_503: +li $v0 4 +la $a0 data_211 +syscall +li $v0 10 +syscall +label_504: +lw $t0 -160($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -172($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -164($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -160($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -152($fp) +lw $t0 -152($fp) +lw $t1 0($fp) +addi $t1 $t1 16 +sw $t0 0($t1) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +sw $t0 -992($fp) +label_505: +lw $t0 -992($fp) +sw $t0 -1044($fp) +j label_525 +label_506: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -144($fp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -136($fp) +lw $t0 -136($fp) +bne $t0 $zero label_507 +j label_508 +label_507: +li $v0 4 +la $a0 data_212 +syscall +li $v0 10 +syscall +label_508: +la $t0 types_table +addi $t0 $t0 28 +lw $t0 0($t0) +sw $t0 -132($fp) +lw $t0 -132($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -140($fp) +lw $t0 -140($fp) +bne $t0 $zero label_509 +la $t0 types_table +addi $t0 $t0 20 +lw $t0 0($t0) +sw $t0 -132($fp) +lw $t0 -132($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -140($fp) +lw $t0 -140($fp) +bne $t0 $zero label_514 +la $t0 types_table +addi $t0 $t0 24 +lw $t0 0($t0) +sw $t0 -132($fp) +lw $t0 -132($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -140($fp) +lw $t0 -140($fp) +bne $t0 $zero label_514 +la $t0 types_table +addi $t0 $t0 32 +lw $t0 0($t0) +sw $t0 -132($fp) +lw $t0 -132($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -140($fp) +lw $t0 -140($fp) +bne $t0 $zero label_514 +la $t0 types_table +addi $t0 $t0 36 +lw $t0 0($t0) +sw $t0 -132($fp) +lw $t0 -132($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -140($fp) +lw $t0 -140($fp) +bne $t0 $zero label_514 +la $t0 types_table +addi $t0 $t0 0 +lw $t0 0($t0) +sw $t0 -132($fp) +lw $t0 -132($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -140($fp) +lw $t0 -140($fp) +bne $t0 $zero label_519 +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -132($fp) +lw $t0 -132($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -140($fp) +lw $t0 -140($fp) +bne $t0 $zero label_519 +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -132($fp) +lw $t0 -132($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -140($fp) +lw $t0 -140($fp) +bne $t0 $zero label_519 +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -132($fp) +lw $t0 -132($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -140($fp) +lw $t0 -140($fp) +bne $t0 $zero label_519 +la $t0 types_table +addi $t0 $t0 4 +lw $t0 0($t0) +sw $t0 -132($fp) +lw $t0 -132($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -140($fp) +lw $t0 -140($fp) +bne $t0 $zero label_519 +la $t0 types_table +addi $t0 $t0 40 +lw $t0 0($t0) +sw $t0 -132($fp) +lw $t0 -132($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -140($fp) +lw $t0 -140($fp) +bne $t0 $zero label_519 +la $t0 types_table +addi $t0 $t0 44 +lw $t0 0($t0) +sw $t0 -132($fp) +lw $t0 -132($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -140($fp) +lw $t0 -140($fp) +bne $t0 $zero label_519 +li $v0 4 +la $a0 data_213 +syscall +li $v0 10 +syscall +label_509: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +sw $t0 -128($fp) +lw $t0 -128($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -124($fp) +lw $t0 -124($fp) +bne $t0 $zero label_510 +j label_511 +label_510: +li $v0 4 +la $a0 data_214 +syscall +li $v0 10 +syscall +label_511: +lw $t0 -128($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -128($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 36($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -120($fp) +lw $t0 -128($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -116($fp) +lw $t0 -116($fp) +bne $t0 $zero label_512 +j label_513 +label_512: +li $v0 4 +la $a0 data_215 +syscall +li $v0 10 +syscall +label_513: +lw $t0 -128($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -120($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -128($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 40($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -112($fp) +lw $t0 -112($fp) +lw $t1 0($fp) +addi $t1 $t1 16 +sw $t0 0($t1) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +sw $t0 -148($fp) +j label_524 +label_514: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +sw $t0 -108($fp) +lw $t0 -108($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -104($fp) +lw $t0 -104($fp) +bne $t0 $zero label_515 +j label_516 +label_515: +li $v0 4 +la $a0 data_216 +syscall +li $v0 10 +syscall +label_516: +lw $t0 -108($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -108($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 36($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -100($fp) +lw $t0 -108($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -96($fp) +lw $t0 -96($fp) +bne $t0 $zero label_517 +j label_518 +label_517: +li $v0 4 +la $a0 data_217 +syscall +li $v0 10 +syscall +label_518: +lw $t0 -108($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -100($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -108($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -92($fp) +lw $t0 -92($fp) +lw $t1 0($fp) +addi $t1 $t1 16 +sw $t0 0($t1) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +sw $t0 -148($fp) +j label_524 +label_519: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +sw $t0 -88($fp) +la $t0 data_218 +sw $t0 -84($fp) +lw $t0 -84($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -80($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_520 +j label_521 +label_520: +li $v0 4 +la $a0 data_219 +syscall +li $v0 10 +syscall +label_521: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -80($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -72($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -68($fp) +lw $t0 -68($fp) +bne $t0 $zero label_522 +j label_523 +label_522: +li $v0 4 +la $a0 data_220 +syscall +li $v0 10 +syscall +label_523: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 0($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -64($fp) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -60($fp) +lw $t0 -60($fp) +sw $t0 -148($fp) +j label_524 +label_524: +lw $t0 -148($fp) +sw $t0 -1044($fp) +label_525: +lw $t0 -1044($fp) +sw $t0 -1096($fp) +j label_537 +label_526: +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -56($fp) +lw $t0 -56($fp) +bne $t0 $zero label_527 +j label_528 +label_527: +li $v0 4 +la $a0 data_221 +syscall +li $v0 10 +syscall +label_528: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -52($fp) +jal __ctor_A +sw $v0 -48($fp) +lw $t0 -48($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -44($fp) +lw $t0 -44($fp) +bne $t0 $zero label_529 +j label_530 +label_529: +li $v0 4 +la $a0 data_222 +syscall +li $v0 10 +syscall +label_530: +lw $t0 -48($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -52($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -48($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -40($fp) +lw $t0 -40($fp) +lw $t1 0($fp) +addi $t1 $t1 12 +sw $t0 0($t1) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -36($fp) +lw $t0 -36($fp) +bne $t0 $zero label_531 +j label_532 +label_531: +li $v0 4 +la $a0 data_223 +syscall +li $v0 10 +syscall +label_532: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 36($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -32($fp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -28($fp) +lw $t0 -28($fp) +bne $t0 $zero label_533 +j label_534 +label_533: +li $v0 4 +la $a0 data_224 +syscall +li $v0 10 +syscall +label_534: +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 36($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -24($fp) +jal __ctor_B +sw $v0 -20($fp) +lw $t0 -20($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_535 +j label_536 +label_535: +li $v0 4 +la $a0 data_225 +syscall +li $v0 10 +syscall +label_536: +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -32($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 16($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 0($fp) +addi $t1 $t1 16 +sw $t0 0($t1) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +sw $t0 -1096($fp) +label_537: +j label_362 +label_538: +li $v0 0 +addi $sp $sp 1192 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_Main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 11 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_Main +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + + + +equal_str: +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $a0 8($sp) +sw $a1 12($sp) +sw $t2 16($sp) +sw $t3 20($sp) +move $t0 $a0 +move $t1 $a1 +while_equal_str: +lb $t2 0($t0) +lb $t3 0($t1) +bne $t2 $t3 equal_str_different_strings +beq $t2 $zero first_end_equal_str +beq $t3 $zero second_end_equal_str +addi $t1 $t1 1 +addi $t0 $t0 1 +j while_equal_str +equal_str_different_strings: +move $v0 $zero +j equal_str_end +first_end_equal_str: +beq $t3 $zero second_end_equal_str +move $v0 $zero +j equal_str_end +second_end_equal_str: +li $v0 1 +equal_str_end: +lw $t0 0($sp) +lw $t1 4($sp) +lw $a0 8($sp) +lw $a1 12($sp) +lw $t2 16($sp) +lw $t3 20($sp) +addiu $sp $sp 24 +jr $ra + +allocate: +addiu $sp $sp -12 +sw $a0 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +li $t0 4 +div $a0 $t0 +mfhi $t1 +sub $t0 $t0 $t1 +add $a0 $a0 $t0 +li $v0 9 +syscall +lw $a0 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +addiu $sp $sp 12 +jr $ra + +copy: +addiu $sp $sp -16 +sw $a0 0($sp) +sw $a1 4($sp) +sw $a2 8($sp) +sw $t0 12($sp) +while_copy: +beq $a2 $zero copy_end +lw $t0 0($a0) +sw $t0 0($a1) +addiu $a0 $a0 4 +addiu $a1 $a1 4 +addi $a2 $a2 -4 +j while_copy +copy_end: +lw $a0 0($sp) +lw $a1 4($sp) +lw $a2 8($sp) +lw $t0 12($sp) +addiu $sp $sp 16 +jr $ra + +read_string: +addiu $sp $sp -28 +sw $ra 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $a2 20($sp) +sw $t2 24($sp) +li $t0 8 +addi $a0 $t0 4 +jal allocate +move $t1 $v0 +move $t2 $zero +while_read_string: +addu $a0 $t1 $t2 +subu $a1 $t0 $t2 +addu $t2 $t2 $a1 +jal read_string_up_to +beq $v0 $zero read_string_not_finished +move $v0 $t1 +j end_read_string +read_string_not_finished: +sll $t0 $t0 1 +addi $a0 $t0 4 +jal allocate +move $a0 $t1 +move $t1 $v0 +move $a1 $v0 +move $a2 $t2 +jal copy +j while_read_string +end_read_string: +lw $ra 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $a2 20($sp) +lw $t2 24($sp) +addiu $sp $sp 28 +jr $ra +read_string_up_to: +addiu $sp $sp -28 +sw $ra 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +sw $t2 12($sp) +sw $t3 16($sp) +sw $t4 20($sp) +sw $t5 24($sp) +move $t0 $a0 +move $t1 $zero +li $t2 10 +addu $t3 $t0 $a1 +addiu $a1 $a1 1 +li $v0 8 +syscall +lw $a0 0($a0) +beq $a0 $zero eol_terminated +li $v0 0 +eol_check: +beq $t0 $t3 read_loop_continue +lb $t1 0($t0) +beq $t1 $t2 eol_terminated +addiu $t0 $t0 1 +j eol_check +eol_terminated: +sb $zero 0($t0) +li $v0 1 +read_loop_continue: +lw $ra 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +lw $t2 12($sp) +lw $t3 16($sp) +lw $t4 20($sp) +lw $t5 24($sp) +addiu $sp $sp 28 +jr $ra + +substr: +addiu $sp $sp -32 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $t3 12($sp) +sw $a0 16($sp) +sw $a1 20($sp) +sw $a2 24($sp) +sw $ra 28($sp) +move $t0 $a0 +add $t0 $t0 $a1 +li $t1 4 +div $a2 $t1 +mfhi $t2 +bne $t2 $zero substr_allign_size +move $t1 $a2 +j substr_new_chunk +substr_allign_size: +sub $t1 $t1 $t2 +add $t1 $t1 $a2 +substr_new_chunk: +move $a0 $t1 +jal allocate +move $t3 $v0 +move $t1 $zero +while_substr_copy: +beq $t1 $a2 substr_end +lb $t2 0($t0) +sb $t2 0($t3) +addiu $t0 $t0 1 +addiu $t3 $t3 1 +addiu $t1 $t1 1 +j while_substr_copy +substr_end: +sb $zero 0($t3) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $t3 12($sp) +lw $a0 16($sp) +lw $a1 20($sp) +lw $a2 24($sp) +lw $ra 28($sp) +addiu $sp $sp 32 +jr $ra + +concat: +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $ra 20($sp) +move $t0 $a0 +move $t1 $a1 +addiu $a0 $a2 1 +li $t2 4 +div $a0 $t2 +mfhi $a0 +bne $a0 $zero concat_allign_size +addiu $a0 $a2 1 +j concat_size_allignned +concat_allign_size: +sub $t2 $t2 $a0 +add $a0 $a2 $t2 +addiu $a0 $a0 1 +concat_size_allignned: +jal allocate +move $t2 $v0 +j first_while_concat_copy +first_while_concat_copy: +lb $a0 0($t0) +beq $a0 $zero second_while_concat_copy +sb $a0 0($t2) +addiu $t0 $t0 1 +addiu $t2 $t2 1 +j first_while_concat_copy +second_while_concat_copy: +lb $a0 0($t1) +beq $a0 $zero concat_end +sb $a0 0($t2) +addiu $t1 $t1 1 +addiu $t2 $t2 1 +j second_while_concat_copy +concat_end: +sb $zero 0($t2) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $ra 20($sp) +addiu $sp $sp 24 +jr $ra + +length: +addiu $sp $sp -8 +sw $t0 0($sp) +sw $t1 4($sp) +move $t0 $a0 +move $v0 $zero +while_len: +lb $t1 0($t0) +beq $t1 $zero len_end +addi $v0 $v0 1 +addiu $t0 $t0 1 +j while_len +len_end: +lw $t0 0($sp) +lw $t1 4($sp) +addiu $sp $sp 8 +jr $ra \ No newline at end of file diff --git a/tests/codegen/atoi.mips b/tests/codegen/atoi.mips new file mode 100644 index 000000000..14c106c30 --- /dev/null +++ b/tests/codegen/atoi.mips @@ -0,0 +1,5281 @@ +.data +default_str: .asciiz "" +.word 0 +data_1: .asciiz "Object" +.word 0 +data_2: .asciiz "IO" +.word 0 +data_3: .asciiz "String" +.word 0 +data_4: .asciiz "Int" +.word 0 +data_5: .asciiz "Bool" +.word 0 +data_6: .asciiz "A2I" +.word 0 +data_7: .asciiz "Main" +.word 0 +data_8: .asciiz " +" +.word 0 +data_9: .asciiz "" +.word 0 +data_10: .asciiz "Abort called from class " +.word 0 +data_11: .asciiz "Index out of range exception" +.word 0 +data_12: .asciiz "0" +.word 0 +data_13: .asciiz "1" +.word 0 +data_14: .asciiz "2" +.word 0 +data_15: .asciiz "3" +.word 0 +data_16: .asciiz "4" +.word 0 +data_17: .asciiz "5" +.word 0 +data_18: .asciiz "6" +.word 0 +data_19: .asciiz "7" +.word 0 +data_20: .asciiz "8" +.word 0 +data_21: .asciiz "9" +.word 0 +data_22: .asciiz "Function call in a void instance" +.word 0 +data_23: .asciiz "Function call in a void instance" +.word 0 +data_24: .asciiz "" +.word 0 +data_25: .asciiz "9" +.word 0 +data_26: .asciiz "8" +.word 0 +data_27: .asciiz "7" +.word 0 +data_28: .asciiz "6" +.word 0 +data_29: .asciiz "5" +.word 0 +data_30: .asciiz "4" +.word 0 +data_31: .asciiz "3" +.word 0 +data_32: .asciiz "2" +.word 0 +data_33: .asciiz "1" +.word 0 +data_34: .asciiz "0" +.word 0 +data_35: .asciiz "Function call in a void instance" +.word 0 +data_36: .asciiz "Function call in a void instance" +.word 0 +data_37: .asciiz "-" +.word 0 +data_38: .asciiz "Function call in a void instance" +.word 0 +data_39: .asciiz "+" +.word 0 +data_40: .asciiz "Function call in a void instance" +.word 0 +data_41: .asciiz "Function call in a void instance" +.word 0 +data_42: .asciiz "Function call in a void instance" +.word 0 +data_43: .asciiz "Function call in a void instance" +.word 0 +data_44: .asciiz "Function call in a void instance" +.word 0 +data_45: .asciiz "Function call in a void instance" +.word 0 +data_46: .asciiz "Function call in a void instance" +.word 0 +data_47: .asciiz "Function call in a void instance" +.word 0 +data_48: .asciiz "Function call in a void instance" +.word 0 +data_49: .asciiz "Function call in a void instance" +.word 0 +data_50: .asciiz "Function call in a void instance" +.word 0 +data_51: .asciiz "-" +.word 0 +data_52: .asciiz "Function call in a void instance" +.word 0 +data_53: .asciiz "Function call in a void instance" +.word 0 +data_54: .asciiz "0" +.word 0 +data_55: .asciiz "Division by zero exception" +.word 0 +data_56: .asciiz "Function call in a void instance" +.word 0 +data_57: .asciiz "Function call in a void instance" +.word 0 +data_58: .asciiz "Function call in a void instance" +.word 0 +data_59: .asciiz "" +.word 0 +data_60: .asciiz "678987" +.word 0 +data_61: .asciiz "Function call in a void instance" +.word 0 +data_62: .asciiz "Function call in a void instance" +.word 0 +data_63: .asciiz "Function call in a void instance" +.word 0 +data_64: .asciiz " == " +.word 0 +data_65: .asciiz "Function call in a void instance" +.word 0 +data_66: .asciiz "Function call in a void instance" +.word 0 +data_67: .asciiz "\n" +.word 0 +data_68: .asciiz "Function call in a void instance" + + +types_table: +.word data_1 +.word data_2 +.word data_3 +.word data_4 +.word data_5 +.word data_6 +.word data_7 + +prototype_table: + .word type_1_prototype + .word type_2_prototype + .word type_3_prototype + .word type_4_prototype + .word type_5_prototype + .word type_6_prototype + .word type_7_prototype + +type_1_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __ctor_Object + +type_1_prototype: +.word 0 +.word 4 +.word type_1_dispatch +.word -1 + + +type_2_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word function_out_string_at_IO +.word function_out_int_at_IO +.word function_in_string_at_IO +.word function_in_int_at_IO +.word __ctor_IO + +type_2_prototype: +.word 1 +.word 4 +.word type_2_dispatch +.word -1 + + +type_3_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word function_length_at_String +.word function_concat_at_String +.word function_substr_at_String +.word __ctor_String + +type_3_prototype: +.word 2 +.word 6 +.word type_3_dispatch +.word 0 +.word 0 +.word -1 + + +type_4_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __ctor_Int + +type_4_prototype: +.word 3 +.word 5 +.word type_4_dispatch +.word 0 +.word -1 + + +type_5_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __ctor_Bool + +type_5_prototype: +.word 4 +.word 5 +.word type_5_dispatch +.word 0 +.word -1 + + +type_6_dispatch: +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_a2i_at_A2I +.word function_a2i_aux_at_A2I +.word function_c2i_at_A2I +.word function_i2a_at_A2I +.word function_i2a_aux_at_A2I +.word function_i2c_at_A2I +.word __attributes_ctor_A2I +.word __ctor_A2I + +type_6_prototype: +.word 5 +.word 4 +.word type_6_dispatch +.word -1 + + +type_7_dispatch: +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_main_at_Main +.word __attributes_ctor_Main +.word __ctor_Main + +type_7_prototype: +.word 6 +.word 4 +.word type_7_dispatch +.word -1 + + +.text +.globl main +__ctor_Object: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 0 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_abort_at_Object: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +la $t0 data_10 +sw $t0 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +la $t0 data_8 +sw $t0 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +li $v0 10 +syscall +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_type_name_at_Object: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_copy_at_Object: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $a0 4($t0) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t0 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 1 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_out_string_at_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +lw $v0 4($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_out_int_at_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -12($fp) +li $v0 1 +lw $a0 -12($fp) +syscall +lw $v0 4($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_in_string_at_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +jal read_string +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_in_int_at_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $v0 5 +syscall +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_String: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +li $t0 2 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -20($fp) +lw $t0 -20($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $a0 0($fp) +jal length +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -20($fp) +lw $t1 -12($fp) +sw $t1 16($t0) +lw $v0 -20($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_length_at_String: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 16($t0) +sw $t1 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_concat_at_String: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -24 +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -32($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 4($fp) +lw $t1 16($t0) +sw $t1 -24($fp) +lw $t0 0($fp) +lw $t1 16($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 12($t0) +sw $t1 -24($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 -20($fp) +add $t0 $t0 $t1 +sw $t0 -24($fp) +lw $a0 -32($fp) +lw $a1 -28($fp) +lw $a2 -24($fp) +jal concat +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 24 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_substr_at_String: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -36 +lw $t0 8($fp) +lw $t1 12($t0) +sw $t1 -16($fp) +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -40($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -36($fp) +lw $t0 8($fp) +lw $t1 16($t0) +sw $t1 -32($fp) +lw $t0 -32($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 -36($fp) +lw $t1 -40($fp) +add $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -28($fp) +lw $t1 -24($fp) +slt $t1 $t0 $t1 +sw $t1 -20($fp) +lw $t0 -20($fp) +bne $t0 $zero label_1 +j label_2 +label_1: +li $v0 4 +la $a0 data_11 +syscall +li $v0 10 +syscall +label_2: +lw $a0 -16($fp) +lw $a1 -40($fp) +lw $a2 -36($fp) +jal substr +sw $v0 -44($fp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 36 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_Int: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 3 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_Bool: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 4 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +jal __ctor_Main +sw $v0 -12($fp) +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal function_main_at_Main +addi $sp $sp 4 +sw $v0 -12($fp) +li $v0 0 +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +li $v0 10 +syscall + +__attributes_ctor_A2I: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp 0 +lw $v0 0($fp) +addi $sp $sp 0 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_c2i_at_A2I: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -572 +la $t0 data_12 +sw $t0 -536($fp) +lw $t0 -536($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -532($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -564($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -556($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -548($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -552($fp) +lw $t0 -564($fp) +lw $t1 -556($fp) +seq $t0 $t0 $t1 +sw $t0 -544($fp) +lw $t0 -544($fp) +bne $t0 $zero label_3 +lw $t0 -564($fp) +lw $t1 -548($fp) +seq $t0 $t0 $t1 +sw $t0 -544($fp) +lw $t0 -544($fp) +bne $t0 $zero label_4 +lw $t0 -564($fp) +lw $t1 -552($fp) +seq $t0 $t0 $t1 +sw $t0 -544($fp) +lw $t0 -544($fp) +bne $t0 $zero label_5 +lw $t0 0($fp) +lw $t1 -532($fp) +seq $t0 $t0 $t1 +sw $t0 -540($fp) +j label_6 +label_3: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -568($fp) +lw $t0 -532($fp) +lw $t1 12($t0) +sw $t1 -560($fp) +lw $t0 -568($fp) +lw $t1 -560($fp) +seq $t0 $t0 $t1 +sw $t0 -540($fp) +j label_6 +label_4: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -568($fp) +lw $t0 -532($fp) +lw $t1 12($t0) +sw $t1 -560($fp) +lw $t0 -568($fp) +move $a0 $t0 +lw $t0 -560($fp) +move $a1 $t0 +jal equal_str +sw $v0 -540($fp) +j label_6 +label_5: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -568($fp) +lw $t0 -532($fp) +lw $t1 12($t0) +sw $t1 -560($fp) +lw $t0 -568($fp) +lw $t1 -560($fp) +seq $t0 $t0 $t1 +sw $t0 -540($fp) +j label_6 +label_6: +lw $t0 -540($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -572($fp) +lw $t0 -572($fp) +lw $t1 12($t0) +sw $t1 -576($fp) +lw $t0 -576($fp) +bne $t0 $zero label_63 +la $t0 data_13 +sw $t0 -484($fp) +lw $t0 -484($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -480($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -512($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -504($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -496($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -500($fp) +lw $t0 -512($fp) +lw $t1 -504($fp) +seq $t0 $t0 $t1 +sw $t0 -492($fp) +lw $t0 -492($fp) +bne $t0 $zero label_7 +lw $t0 -512($fp) +lw $t1 -496($fp) +seq $t0 $t0 $t1 +sw $t0 -492($fp) +lw $t0 -492($fp) +bne $t0 $zero label_8 +lw $t0 -512($fp) +lw $t1 -500($fp) +seq $t0 $t0 $t1 +sw $t0 -492($fp) +lw $t0 -492($fp) +bne $t0 $zero label_9 +lw $t0 0($fp) +lw $t1 -480($fp) +seq $t0 $t0 $t1 +sw $t0 -488($fp) +j label_10 +label_7: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -516($fp) +lw $t0 -480($fp) +lw $t1 12($t0) +sw $t1 -508($fp) +lw $t0 -516($fp) +lw $t1 -508($fp) +seq $t0 $t0 $t1 +sw $t0 -488($fp) +j label_10 +label_8: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -516($fp) +lw $t0 -480($fp) +lw $t1 12($t0) +sw $t1 -508($fp) +lw $t0 -516($fp) +move $a0 $t0 +lw $t0 -508($fp) +move $a1 $t0 +jal equal_str +sw $v0 -488($fp) +j label_10 +label_9: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -516($fp) +lw $t0 -480($fp) +lw $t1 12($t0) +sw $t1 -508($fp) +lw $t0 -516($fp) +lw $t1 -508($fp) +seq $t0 $t0 $t1 +sw $t0 -488($fp) +j label_10 +label_10: +lw $t0 -488($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -520($fp) +lw $t0 -520($fp) +lw $t1 12($t0) +sw $t1 -524($fp) +lw $t0 -524($fp) +bne $t0 $zero label_61 +la $t0 data_14 +sw $t0 -432($fp) +lw $t0 -432($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -428($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -460($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -452($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -444($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -448($fp) +lw $t0 -460($fp) +lw $t1 -452($fp) +seq $t0 $t0 $t1 +sw $t0 -440($fp) +lw $t0 -440($fp) +bne $t0 $zero label_11 +lw $t0 -460($fp) +lw $t1 -444($fp) +seq $t0 $t0 $t1 +sw $t0 -440($fp) +lw $t0 -440($fp) +bne $t0 $zero label_12 +lw $t0 -460($fp) +lw $t1 -448($fp) +seq $t0 $t0 $t1 +sw $t0 -440($fp) +lw $t0 -440($fp) +bne $t0 $zero label_13 +lw $t0 0($fp) +lw $t1 -428($fp) +seq $t0 $t0 $t1 +sw $t0 -436($fp) +j label_14 +label_11: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -464($fp) +lw $t0 -428($fp) +lw $t1 12($t0) +sw $t1 -456($fp) +lw $t0 -464($fp) +lw $t1 -456($fp) +seq $t0 $t0 $t1 +sw $t0 -436($fp) +j label_14 +label_12: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -464($fp) +lw $t0 -428($fp) +lw $t1 12($t0) +sw $t1 -456($fp) +lw $t0 -464($fp) +move $a0 $t0 +lw $t0 -456($fp) +move $a1 $t0 +jal equal_str +sw $v0 -436($fp) +j label_14 +label_13: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -464($fp) +lw $t0 -428($fp) +lw $t1 12($t0) +sw $t1 -456($fp) +lw $t0 -464($fp) +lw $t1 -456($fp) +seq $t0 $t0 $t1 +sw $t0 -436($fp) +j label_14 +label_14: +lw $t0 -436($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -468($fp) +lw $t0 -468($fp) +lw $t1 12($t0) +sw $t1 -472($fp) +lw $t0 -472($fp) +bne $t0 $zero label_59 +la $t0 data_15 +sw $t0 -380($fp) +lw $t0 -380($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -376($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -408($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -400($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -392($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -396($fp) +lw $t0 -408($fp) +lw $t1 -400($fp) +seq $t0 $t0 $t1 +sw $t0 -388($fp) +lw $t0 -388($fp) +bne $t0 $zero label_15 +lw $t0 -408($fp) +lw $t1 -392($fp) +seq $t0 $t0 $t1 +sw $t0 -388($fp) +lw $t0 -388($fp) +bne $t0 $zero label_16 +lw $t0 -408($fp) +lw $t1 -396($fp) +seq $t0 $t0 $t1 +sw $t0 -388($fp) +lw $t0 -388($fp) +bne $t0 $zero label_17 +lw $t0 0($fp) +lw $t1 -376($fp) +seq $t0 $t0 $t1 +sw $t0 -384($fp) +j label_18 +label_15: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -412($fp) +lw $t0 -376($fp) +lw $t1 12($t0) +sw $t1 -404($fp) +lw $t0 -412($fp) +lw $t1 -404($fp) +seq $t0 $t0 $t1 +sw $t0 -384($fp) +j label_18 +label_16: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -412($fp) +lw $t0 -376($fp) +lw $t1 12($t0) +sw $t1 -404($fp) +lw $t0 -412($fp) +move $a0 $t0 +lw $t0 -404($fp) +move $a1 $t0 +jal equal_str +sw $v0 -384($fp) +j label_18 +label_17: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -412($fp) +lw $t0 -376($fp) +lw $t1 12($t0) +sw $t1 -404($fp) +lw $t0 -412($fp) +lw $t1 -404($fp) +seq $t0 $t0 $t1 +sw $t0 -384($fp) +j label_18 +label_18: +lw $t0 -384($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -416($fp) +lw $t0 -416($fp) +lw $t1 12($t0) +sw $t1 -420($fp) +lw $t0 -420($fp) +bne $t0 $zero label_57 +la $t0 data_16 +sw $t0 -328($fp) +lw $t0 -328($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -324($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -356($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -348($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -340($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -344($fp) +lw $t0 -356($fp) +lw $t1 -348($fp) +seq $t0 $t0 $t1 +sw $t0 -336($fp) +lw $t0 -336($fp) +bne $t0 $zero label_19 +lw $t0 -356($fp) +lw $t1 -340($fp) +seq $t0 $t0 $t1 +sw $t0 -336($fp) +lw $t0 -336($fp) +bne $t0 $zero label_20 +lw $t0 -356($fp) +lw $t1 -344($fp) +seq $t0 $t0 $t1 +sw $t0 -336($fp) +lw $t0 -336($fp) +bne $t0 $zero label_21 +lw $t0 0($fp) +lw $t1 -324($fp) +seq $t0 $t0 $t1 +sw $t0 -332($fp) +j label_22 +label_19: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -360($fp) +lw $t0 -324($fp) +lw $t1 12($t0) +sw $t1 -352($fp) +lw $t0 -360($fp) +lw $t1 -352($fp) +seq $t0 $t0 $t1 +sw $t0 -332($fp) +j label_22 +label_20: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -360($fp) +lw $t0 -324($fp) +lw $t1 12($t0) +sw $t1 -352($fp) +lw $t0 -360($fp) +move $a0 $t0 +lw $t0 -352($fp) +move $a1 $t0 +jal equal_str +sw $v0 -332($fp) +j label_22 +label_21: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -360($fp) +lw $t0 -324($fp) +lw $t1 12($t0) +sw $t1 -352($fp) +lw $t0 -360($fp) +lw $t1 -352($fp) +seq $t0 $t0 $t1 +sw $t0 -332($fp) +j label_22 +label_22: +lw $t0 -332($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -364($fp) +lw $t0 -364($fp) +lw $t1 12($t0) +sw $t1 -368($fp) +lw $t0 -368($fp) +bne $t0 $zero label_55 +la $t0 data_17 +sw $t0 -276($fp) +lw $t0 -276($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -272($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -304($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -296($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -288($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -292($fp) +lw $t0 -304($fp) +lw $t1 -296($fp) +seq $t0 $t0 $t1 +sw $t0 -284($fp) +lw $t0 -284($fp) +bne $t0 $zero label_23 +lw $t0 -304($fp) +lw $t1 -288($fp) +seq $t0 $t0 $t1 +sw $t0 -284($fp) +lw $t0 -284($fp) +bne $t0 $zero label_24 +lw $t0 -304($fp) +lw $t1 -292($fp) +seq $t0 $t0 $t1 +sw $t0 -284($fp) +lw $t0 -284($fp) +bne $t0 $zero label_25 +lw $t0 0($fp) +lw $t1 -272($fp) +seq $t0 $t0 $t1 +sw $t0 -280($fp) +j label_26 +label_23: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -308($fp) +lw $t0 -272($fp) +lw $t1 12($t0) +sw $t1 -300($fp) +lw $t0 -308($fp) +lw $t1 -300($fp) +seq $t0 $t0 $t1 +sw $t0 -280($fp) +j label_26 +label_24: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -308($fp) +lw $t0 -272($fp) +lw $t1 12($t0) +sw $t1 -300($fp) +lw $t0 -308($fp) +move $a0 $t0 +lw $t0 -300($fp) +move $a1 $t0 +jal equal_str +sw $v0 -280($fp) +j label_26 +label_25: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -308($fp) +lw $t0 -272($fp) +lw $t1 12($t0) +sw $t1 -300($fp) +lw $t0 -308($fp) +lw $t1 -300($fp) +seq $t0 $t0 $t1 +sw $t0 -280($fp) +j label_26 +label_26: +lw $t0 -280($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -312($fp) +lw $t0 -312($fp) +lw $t1 12($t0) +sw $t1 -316($fp) +lw $t0 -316($fp) +bne $t0 $zero label_53 +la $t0 data_18 +sw $t0 -224($fp) +lw $t0 -224($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -220($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -252($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -244($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -236($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -240($fp) +lw $t0 -252($fp) +lw $t1 -244($fp) +seq $t0 $t0 $t1 +sw $t0 -232($fp) +lw $t0 -232($fp) +bne $t0 $zero label_27 +lw $t0 -252($fp) +lw $t1 -236($fp) +seq $t0 $t0 $t1 +sw $t0 -232($fp) +lw $t0 -232($fp) +bne $t0 $zero label_28 +lw $t0 -252($fp) +lw $t1 -240($fp) +seq $t0 $t0 $t1 +sw $t0 -232($fp) +lw $t0 -232($fp) +bne $t0 $zero label_29 +lw $t0 0($fp) +lw $t1 -220($fp) +seq $t0 $t0 $t1 +sw $t0 -228($fp) +j label_30 +label_27: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -256($fp) +lw $t0 -220($fp) +lw $t1 12($t0) +sw $t1 -248($fp) +lw $t0 -256($fp) +lw $t1 -248($fp) +seq $t0 $t0 $t1 +sw $t0 -228($fp) +j label_30 +label_28: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -256($fp) +lw $t0 -220($fp) +lw $t1 12($t0) +sw $t1 -248($fp) +lw $t0 -256($fp) +move $a0 $t0 +lw $t0 -248($fp) +move $a1 $t0 +jal equal_str +sw $v0 -228($fp) +j label_30 +label_29: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -256($fp) +lw $t0 -220($fp) +lw $t1 12($t0) +sw $t1 -248($fp) +lw $t0 -256($fp) +lw $t1 -248($fp) +seq $t0 $t0 $t1 +sw $t0 -228($fp) +j label_30 +label_30: +lw $t0 -228($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -260($fp) +lw $t0 -260($fp) +lw $t1 12($t0) +sw $t1 -264($fp) +lw $t0 -264($fp) +bne $t0 $zero label_51 +la $t0 data_19 +sw $t0 -172($fp) +lw $t0 -172($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -168($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -200($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -192($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -184($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -188($fp) +lw $t0 -200($fp) +lw $t1 -192($fp) +seq $t0 $t0 $t1 +sw $t0 -180($fp) +lw $t0 -180($fp) +bne $t0 $zero label_31 +lw $t0 -200($fp) +lw $t1 -184($fp) +seq $t0 $t0 $t1 +sw $t0 -180($fp) +lw $t0 -180($fp) +bne $t0 $zero label_32 +lw $t0 -200($fp) +lw $t1 -188($fp) +seq $t0 $t0 $t1 +sw $t0 -180($fp) +lw $t0 -180($fp) +bne $t0 $zero label_33 +lw $t0 0($fp) +lw $t1 -168($fp) +seq $t0 $t0 $t1 +sw $t0 -176($fp) +j label_34 +label_31: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -204($fp) +lw $t0 -168($fp) +lw $t1 12($t0) +sw $t1 -196($fp) +lw $t0 -204($fp) +lw $t1 -196($fp) +seq $t0 $t0 $t1 +sw $t0 -176($fp) +j label_34 +label_32: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -204($fp) +lw $t0 -168($fp) +lw $t1 12($t0) +sw $t1 -196($fp) +lw $t0 -204($fp) +move $a0 $t0 +lw $t0 -196($fp) +move $a1 $t0 +jal equal_str +sw $v0 -176($fp) +j label_34 +label_33: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -204($fp) +lw $t0 -168($fp) +lw $t1 12($t0) +sw $t1 -196($fp) +lw $t0 -204($fp) +lw $t1 -196($fp) +seq $t0 $t0 $t1 +sw $t0 -176($fp) +j label_34 +label_34: +lw $t0 -176($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -208($fp) +lw $t0 -208($fp) +lw $t1 12($t0) +sw $t1 -212($fp) +lw $t0 -212($fp) +bne $t0 $zero label_49 +la $t0 data_20 +sw $t0 -120($fp) +lw $t0 -120($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -116($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -148($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -140($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -132($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -136($fp) +lw $t0 -148($fp) +lw $t1 -140($fp) +seq $t0 $t0 $t1 +sw $t0 -128($fp) +lw $t0 -128($fp) +bne $t0 $zero label_35 +lw $t0 -148($fp) +lw $t1 -132($fp) +seq $t0 $t0 $t1 +sw $t0 -128($fp) +lw $t0 -128($fp) +bne $t0 $zero label_36 +lw $t0 -148($fp) +lw $t1 -136($fp) +seq $t0 $t0 $t1 +sw $t0 -128($fp) +lw $t0 -128($fp) +bne $t0 $zero label_37 +lw $t0 0($fp) +lw $t1 -116($fp) +seq $t0 $t0 $t1 +sw $t0 -124($fp) +j label_38 +label_35: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -152($fp) +lw $t0 -116($fp) +lw $t1 12($t0) +sw $t1 -144($fp) +lw $t0 -152($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -124($fp) +j label_38 +label_36: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -152($fp) +lw $t0 -116($fp) +lw $t1 12($t0) +sw $t1 -144($fp) +lw $t0 -152($fp) +move $a0 $t0 +lw $t0 -144($fp) +move $a1 $t0 +jal equal_str +sw $v0 -124($fp) +j label_38 +label_37: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -152($fp) +lw $t0 -116($fp) +lw $t1 12($t0) +sw $t1 -144($fp) +lw $t0 -152($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -124($fp) +j label_38 +label_38: +lw $t0 -124($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -156($fp) +lw $t0 -156($fp) +lw $t1 12($t0) +sw $t1 -160($fp) +lw $t0 -160($fp) +bne $t0 $zero label_47 +la $t0 data_21 +sw $t0 -68($fp) +lw $t0 -68($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -64($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -96($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -88($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -80($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -84($fp) +lw $t0 -96($fp) +lw $t1 -88($fp) +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_39 +lw $t0 -96($fp) +lw $t1 -80($fp) +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_40 +lw $t0 -96($fp) +lw $t1 -84($fp) +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_41 +lw $t0 0($fp) +lw $t1 -64($fp) +seq $t0 $t0 $t1 +sw $t0 -72($fp) +j label_42 +label_39: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -100($fp) +lw $t0 -64($fp) +lw $t1 12($t0) +sw $t1 -92($fp) +lw $t0 -100($fp) +lw $t1 -92($fp) +seq $t0 $t0 $t1 +sw $t0 -72($fp) +j label_42 +label_40: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -100($fp) +lw $t0 -64($fp) +lw $t1 12($t0) +sw $t1 -92($fp) +lw $t0 -100($fp) +move $a0 $t0 +lw $t0 -92($fp) +move $a1 $t0 +jal equal_str +sw $v0 -72($fp) +j label_42 +label_41: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -100($fp) +lw $t0 -64($fp) +lw $t1 12($t0) +sw $t1 -92($fp) +lw $t0 -100($fp) +lw $t1 -92($fp) +seq $t0 $t0 $t1 +sw $t0 -72($fp) +j label_42 +label_42: +lw $t0 -72($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -104($fp) +lw $t0 -104($fp) +lw $t1 12($t0) +sw $t1 -108($fp) +lw $t0 -108($fp) +bne $t0 $zero label_45 +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -60($fp) +lw $t0 -60($fp) +bne $t0 $zero label_43 +j label_44 +label_43: +li $v0 4 +la $a0 data_22 +syscall +li $v0 10 +syscall +label_44: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 0($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -56($fp) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -52($fp) +lw $t0 -52($fp) +sw $t0 -112($fp) +j label_46 +label_45: +li $t0 9 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -48($fp) +lw $t0 -48($fp) +sw $t0 -112($fp) +label_46: +lw $t0 -112($fp) +sw $t0 -164($fp) +j label_48 +label_47: +li $t0 8 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -44($fp) +lw $t0 -44($fp) +sw $t0 -164($fp) +label_48: +lw $t0 -164($fp) +sw $t0 -216($fp) +j label_50 +label_49: +li $t0 7 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -40($fp) +lw $t0 -40($fp) +sw $t0 -216($fp) +label_50: +lw $t0 -216($fp) +sw $t0 -268($fp) +j label_52 +label_51: +li $t0 6 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 -36($fp) +sw $t0 -268($fp) +label_52: +lw $t0 -268($fp) +sw $t0 -320($fp) +j label_54 +label_53: +li $t0 5 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -32($fp) +lw $t0 -32($fp) +sw $t0 -320($fp) +label_54: +lw $t0 -320($fp) +sw $t0 -372($fp) +j label_56 +label_55: +li $t0 4 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t0 -28($fp) +sw $t0 -372($fp) +label_56: +lw $t0 -372($fp) +sw $t0 -424($fp) +j label_58 +label_57: +li $t0 3 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -24($fp) +lw $t0 -24($fp) +sw $t0 -424($fp) +label_58: +lw $t0 -424($fp) +sw $t0 -476($fp) +j label_60 +label_59: +li $t0 2 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 -20($fp) +sw $t0 -476($fp) +label_60: +lw $t0 -476($fp) +sw $t0 -528($fp) +j label_62 +label_61: +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -16($fp) +lw $t0 -16($fp) +sw $t0 -528($fp) +label_62: +lw $t0 -528($fp) +sw $t0 -580($fp) +j label_64 +label_63: +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -580($fp) +label_64: +lw $v0 -580($fp) +addi $sp $sp 572 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_i2c_at_A2I: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -576 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -540($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -568($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -560($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -552($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -556($fp) +lw $t0 -568($fp) +lw $t1 -560($fp) +seq $t0 $t0 $t1 +sw $t0 -548($fp) +lw $t0 -548($fp) +bne $t0 $zero label_65 +lw $t0 -568($fp) +lw $t1 -552($fp) +seq $t0 $t0 $t1 +sw $t0 -548($fp) +lw $t0 -548($fp) +bne $t0 $zero label_66 +lw $t0 -568($fp) +lw $t1 -556($fp) +seq $t0 $t0 $t1 +sw $t0 -548($fp) +lw $t0 -548($fp) +bne $t0 $zero label_67 +lw $t0 0($fp) +lw $t1 -540($fp) +seq $t0 $t0 $t1 +sw $t0 -544($fp) +j label_68 +label_65: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -572($fp) +lw $t0 -540($fp) +lw $t1 12($t0) +sw $t1 -564($fp) +lw $t0 -572($fp) +lw $t1 -564($fp) +seq $t0 $t0 $t1 +sw $t0 -544($fp) +j label_68 +label_66: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -572($fp) +lw $t0 -540($fp) +lw $t1 12($t0) +sw $t1 -564($fp) +lw $t0 -572($fp) +move $a0 $t0 +lw $t0 -564($fp) +move $a1 $t0 +jal equal_str +sw $v0 -544($fp) +j label_68 +label_67: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -572($fp) +lw $t0 -540($fp) +lw $t1 12($t0) +sw $t1 -564($fp) +lw $t0 -572($fp) +lw $t1 -564($fp) +seq $t0 $t0 $t1 +sw $t0 -544($fp) +j label_68 +label_68: +lw $t0 -544($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -576($fp) +lw $t0 -576($fp) +lw $t1 12($t0) +sw $t1 -580($fp) +lw $t0 -580($fp) +bne $t0 $zero label_125 +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -492($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -520($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -512($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -504($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -508($fp) +lw $t0 -520($fp) +lw $t1 -512($fp) +seq $t0 $t0 $t1 +sw $t0 -500($fp) +lw $t0 -500($fp) +bne $t0 $zero label_69 +lw $t0 -520($fp) +lw $t1 -504($fp) +seq $t0 $t0 $t1 +sw $t0 -500($fp) +lw $t0 -500($fp) +bne $t0 $zero label_70 +lw $t0 -520($fp) +lw $t1 -508($fp) +seq $t0 $t0 $t1 +sw $t0 -500($fp) +lw $t0 -500($fp) +bne $t0 $zero label_71 +lw $t0 0($fp) +lw $t1 -492($fp) +seq $t0 $t0 $t1 +sw $t0 -496($fp) +j label_72 +label_69: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -524($fp) +lw $t0 -492($fp) +lw $t1 12($t0) +sw $t1 -516($fp) +lw $t0 -524($fp) +lw $t1 -516($fp) +seq $t0 $t0 $t1 +sw $t0 -496($fp) +j label_72 +label_70: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -524($fp) +lw $t0 -492($fp) +lw $t1 12($t0) +sw $t1 -516($fp) +lw $t0 -524($fp) +move $a0 $t0 +lw $t0 -516($fp) +move $a1 $t0 +jal equal_str +sw $v0 -496($fp) +j label_72 +label_71: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -524($fp) +lw $t0 -492($fp) +lw $t1 12($t0) +sw $t1 -516($fp) +lw $t0 -524($fp) +lw $t1 -516($fp) +seq $t0 $t0 $t1 +sw $t0 -496($fp) +j label_72 +label_72: +lw $t0 -496($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -528($fp) +lw $t0 -528($fp) +lw $t1 12($t0) +sw $t1 -532($fp) +lw $t0 -532($fp) +bne $t0 $zero label_123 +li $t0 2 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -444($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -472($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -464($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -456($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -460($fp) +lw $t0 -472($fp) +lw $t1 -464($fp) +seq $t0 $t0 $t1 +sw $t0 -452($fp) +lw $t0 -452($fp) +bne $t0 $zero label_73 +lw $t0 -472($fp) +lw $t1 -456($fp) +seq $t0 $t0 $t1 +sw $t0 -452($fp) +lw $t0 -452($fp) +bne $t0 $zero label_74 +lw $t0 -472($fp) +lw $t1 -460($fp) +seq $t0 $t0 $t1 +sw $t0 -452($fp) +lw $t0 -452($fp) +bne $t0 $zero label_75 +lw $t0 0($fp) +lw $t1 -444($fp) +seq $t0 $t0 $t1 +sw $t0 -448($fp) +j label_76 +label_73: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -476($fp) +lw $t0 -444($fp) +lw $t1 12($t0) +sw $t1 -468($fp) +lw $t0 -476($fp) +lw $t1 -468($fp) +seq $t0 $t0 $t1 +sw $t0 -448($fp) +j label_76 +label_74: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -476($fp) +lw $t0 -444($fp) +lw $t1 12($t0) +sw $t1 -468($fp) +lw $t0 -476($fp) +move $a0 $t0 +lw $t0 -468($fp) +move $a1 $t0 +jal equal_str +sw $v0 -448($fp) +j label_76 +label_75: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -476($fp) +lw $t0 -444($fp) +lw $t1 12($t0) +sw $t1 -468($fp) +lw $t0 -476($fp) +lw $t1 -468($fp) +seq $t0 $t0 $t1 +sw $t0 -448($fp) +j label_76 +label_76: +lw $t0 -448($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -480($fp) +lw $t0 -480($fp) +lw $t1 12($t0) +sw $t1 -484($fp) +lw $t0 -484($fp) +bne $t0 $zero label_121 +li $t0 3 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -396($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -424($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -416($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -408($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -412($fp) +lw $t0 -424($fp) +lw $t1 -416($fp) +seq $t0 $t0 $t1 +sw $t0 -404($fp) +lw $t0 -404($fp) +bne $t0 $zero label_77 +lw $t0 -424($fp) +lw $t1 -408($fp) +seq $t0 $t0 $t1 +sw $t0 -404($fp) +lw $t0 -404($fp) +bne $t0 $zero label_78 +lw $t0 -424($fp) +lw $t1 -412($fp) +seq $t0 $t0 $t1 +sw $t0 -404($fp) +lw $t0 -404($fp) +bne $t0 $zero label_79 +lw $t0 0($fp) +lw $t1 -396($fp) +seq $t0 $t0 $t1 +sw $t0 -400($fp) +j label_80 +label_77: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -428($fp) +lw $t0 -396($fp) +lw $t1 12($t0) +sw $t1 -420($fp) +lw $t0 -428($fp) +lw $t1 -420($fp) +seq $t0 $t0 $t1 +sw $t0 -400($fp) +j label_80 +label_78: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -428($fp) +lw $t0 -396($fp) +lw $t1 12($t0) +sw $t1 -420($fp) +lw $t0 -428($fp) +move $a0 $t0 +lw $t0 -420($fp) +move $a1 $t0 +jal equal_str +sw $v0 -400($fp) +j label_80 +label_79: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -428($fp) +lw $t0 -396($fp) +lw $t1 12($t0) +sw $t1 -420($fp) +lw $t0 -428($fp) +lw $t1 -420($fp) +seq $t0 $t0 $t1 +sw $t0 -400($fp) +j label_80 +label_80: +lw $t0 -400($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -432($fp) +lw $t0 -432($fp) +lw $t1 12($t0) +sw $t1 -436($fp) +lw $t0 -436($fp) +bne $t0 $zero label_119 +li $t0 4 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -348($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -376($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -368($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -360($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -364($fp) +lw $t0 -376($fp) +lw $t1 -368($fp) +seq $t0 $t0 $t1 +sw $t0 -356($fp) +lw $t0 -356($fp) +bne $t0 $zero label_81 +lw $t0 -376($fp) +lw $t1 -360($fp) +seq $t0 $t0 $t1 +sw $t0 -356($fp) +lw $t0 -356($fp) +bne $t0 $zero label_82 +lw $t0 -376($fp) +lw $t1 -364($fp) +seq $t0 $t0 $t1 +sw $t0 -356($fp) +lw $t0 -356($fp) +bne $t0 $zero label_83 +lw $t0 0($fp) +lw $t1 -348($fp) +seq $t0 $t0 $t1 +sw $t0 -352($fp) +j label_84 +label_81: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -380($fp) +lw $t0 -348($fp) +lw $t1 12($t0) +sw $t1 -372($fp) +lw $t0 -380($fp) +lw $t1 -372($fp) +seq $t0 $t0 $t1 +sw $t0 -352($fp) +j label_84 +label_82: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -380($fp) +lw $t0 -348($fp) +lw $t1 12($t0) +sw $t1 -372($fp) +lw $t0 -380($fp) +move $a0 $t0 +lw $t0 -372($fp) +move $a1 $t0 +jal equal_str +sw $v0 -352($fp) +j label_84 +label_83: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -380($fp) +lw $t0 -348($fp) +lw $t1 12($t0) +sw $t1 -372($fp) +lw $t0 -380($fp) +lw $t1 -372($fp) +seq $t0 $t0 $t1 +sw $t0 -352($fp) +j label_84 +label_84: +lw $t0 -352($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -384($fp) +lw $t0 -384($fp) +lw $t1 12($t0) +sw $t1 -388($fp) +lw $t0 -388($fp) +bne $t0 $zero label_117 +li $t0 5 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -300($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -328($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -320($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -312($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -316($fp) +lw $t0 -328($fp) +lw $t1 -320($fp) +seq $t0 $t0 $t1 +sw $t0 -308($fp) +lw $t0 -308($fp) +bne $t0 $zero label_85 +lw $t0 -328($fp) +lw $t1 -312($fp) +seq $t0 $t0 $t1 +sw $t0 -308($fp) +lw $t0 -308($fp) +bne $t0 $zero label_86 +lw $t0 -328($fp) +lw $t1 -316($fp) +seq $t0 $t0 $t1 +sw $t0 -308($fp) +lw $t0 -308($fp) +bne $t0 $zero label_87 +lw $t0 0($fp) +lw $t1 -300($fp) +seq $t0 $t0 $t1 +sw $t0 -304($fp) +j label_88 +label_85: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -332($fp) +lw $t0 -300($fp) +lw $t1 12($t0) +sw $t1 -324($fp) +lw $t0 -332($fp) +lw $t1 -324($fp) +seq $t0 $t0 $t1 +sw $t0 -304($fp) +j label_88 +label_86: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -332($fp) +lw $t0 -300($fp) +lw $t1 12($t0) +sw $t1 -324($fp) +lw $t0 -332($fp) +move $a0 $t0 +lw $t0 -324($fp) +move $a1 $t0 +jal equal_str +sw $v0 -304($fp) +j label_88 +label_87: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -332($fp) +lw $t0 -300($fp) +lw $t1 12($t0) +sw $t1 -324($fp) +lw $t0 -332($fp) +lw $t1 -324($fp) +seq $t0 $t0 $t1 +sw $t0 -304($fp) +j label_88 +label_88: +lw $t0 -304($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -336($fp) +lw $t0 -336($fp) +lw $t1 12($t0) +sw $t1 -340($fp) +lw $t0 -340($fp) +bne $t0 $zero label_115 +li $t0 6 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -252($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -280($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -272($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -264($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -268($fp) +lw $t0 -280($fp) +lw $t1 -272($fp) +seq $t0 $t0 $t1 +sw $t0 -260($fp) +lw $t0 -260($fp) +bne $t0 $zero label_89 +lw $t0 -280($fp) +lw $t1 -264($fp) +seq $t0 $t0 $t1 +sw $t0 -260($fp) +lw $t0 -260($fp) +bne $t0 $zero label_90 +lw $t0 -280($fp) +lw $t1 -268($fp) +seq $t0 $t0 $t1 +sw $t0 -260($fp) +lw $t0 -260($fp) +bne $t0 $zero label_91 +lw $t0 0($fp) +lw $t1 -252($fp) +seq $t0 $t0 $t1 +sw $t0 -256($fp) +j label_92 +label_89: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -284($fp) +lw $t0 -252($fp) +lw $t1 12($t0) +sw $t1 -276($fp) +lw $t0 -284($fp) +lw $t1 -276($fp) +seq $t0 $t0 $t1 +sw $t0 -256($fp) +j label_92 +label_90: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -284($fp) +lw $t0 -252($fp) +lw $t1 12($t0) +sw $t1 -276($fp) +lw $t0 -284($fp) +move $a0 $t0 +lw $t0 -276($fp) +move $a1 $t0 +jal equal_str +sw $v0 -256($fp) +j label_92 +label_91: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -284($fp) +lw $t0 -252($fp) +lw $t1 12($t0) +sw $t1 -276($fp) +lw $t0 -284($fp) +lw $t1 -276($fp) +seq $t0 $t0 $t1 +sw $t0 -256($fp) +j label_92 +label_92: +lw $t0 -256($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -288($fp) +lw $t0 -288($fp) +lw $t1 12($t0) +sw $t1 -292($fp) +lw $t0 -292($fp) +bne $t0 $zero label_113 +li $t0 7 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -204($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -232($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -224($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -216($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -220($fp) +lw $t0 -232($fp) +lw $t1 -224($fp) +seq $t0 $t0 $t1 +sw $t0 -212($fp) +lw $t0 -212($fp) +bne $t0 $zero label_93 +lw $t0 -232($fp) +lw $t1 -216($fp) +seq $t0 $t0 $t1 +sw $t0 -212($fp) +lw $t0 -212($fp) +bne $t0 $zero label_94 +lw $t0 -232($fp) +lw $t1 -220($fp) +seq $t0 $t0 $t1 +sw $t0 -212($fp) +lw $t0 -212($fp) +bne $t0 $zero label_95 +lw $t0 0($fp) +lw $t1 -204($fp) +seq $t0 $t0 $t1 +sw $t0 -208($fp) +j label_96 +label_93: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -236($fp) +lw $t0 -204($fp) +lw $t1 12($t0) +sw $t1 -228($fp) +lw $t0 -236($fp) +lw $t1 -228($fp) +seq $t0 $t0 $t1 +sw $t0 -208($fp) +j label_96 +label_94: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -236($fp) +lw $t0 -204($fp) +lw $t1 12($t0) +sw $t1 -228($fp) +lw $t0 -236($fp) +move $a0 $t0 +lw $t0 -228($fp) +move $a1 $t0 +jal equal_str +sw $v0 -208($fp) +j label_96 +label_95: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -236($fp) +lw $t0 -204($fp) +lw $t1 12($t0) +sw $t1 -228($fp) +lw $t0 -236($fp) +lw $t1 -228($fp) +seq $t0 $t0 $t1 +sw $t0 -208($fp) +j label_96 +label_96: +lw $t0 -208($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -240($fp) +lw $t0 -240($fp) +lw $t1 12($t0) +sw $t1 -244($fp) +lw $t0 -244($fp) +bne $t0 $zero label_111 +li $t0 8 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -156($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -184($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -176($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -168($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -172($fp) +lw $t0 -184($fp) +lw $t1 -176($fp) +seq $t0 $t0 $t1 +sw $t0 -164($fp) +lw $t0 -164($fp) +bne $t0 $zero label_97 +lw $t0 -184($fp) +lw $t1 -168($fp) +seq $t0 $t0 $t1 +sw $t0 -164($fp) +lw $t0 -164($fp) +bne $t0 $zero label_98 +lw $t0 -184($fp) +lw $t1 -172($fp) +seq $t0 $t0 $t1 +sw $t0 -164($fp) +lw $t0 -164($fp) +bne $t0 $zero label_99 +lw $t0 0($fp) +lw $t1 -156($fp) +seq $t0 $t0 $t1 +sw $t0 -160($fp) +j label_100 +label_97: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -188($fp) +lw $t0 -156($fp) +lw $t1 12($t0) +sw $t1 -180($fp) +lw $t0 -188($fp) +lw $t1 -180($fp) +seq $t0 $t0 $t1 +sw $t0 -160($fp) +j label_100 +label_98: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -188($fp) +lw $t0 -156($fp) +lw $t1 12($t0) +sw $t1 -180($fp) +lw $t0 -188($fp) +move $a0 $t0 +lw $t0 -180($fp) +move $a1 $t0 +jal equal_str +sw $v0 -160($fp) +j label_100 +label_99: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -188($fp) +lw $t0 -156($fp) +lw $t1 12($t0) +sw $t1 -180($fp) +lw $t0 -188($fp) +lw $t1 -180($fp) +seq $t0 $t0 $t1 +sw $t0 -160($fp) +j label_100 +label_100: +lw $t0 -160($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -192($fp) +lw $t0 -192($fp) +lw $t1 12($t0) +sw $t1 -196($fp) +lw $t0 -196($fp) +bne $t0 $zero label_109 +li $t0 9 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -108($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -136($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -128($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -120($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -124($fp) +lw $t0 -136($fp) +lw $t1 -128($fp) +seq $t0 $t0 $t1 +sw $t0 -116($fp) +lw $t0 -116($fp) +bne $t0 $zero label_101 +lw $t0 -136($fp) +lw $t1 -120($fp) +seq $t0 $t0 $t1 +sw $t0 -116($fp) +lw $t0 -116($fp) +bne $t0 $zero label_102 +lw $t0 -136($fp) +lw $t1 -124($fp) +seq $t0 $t0 $t1 +sw $t0 -116($fp) +lw $t0 -116($fp) +bne $t0 $zero label_103 +lw $t0 0($fp) +lw $t1 -108($fp) +seq $t0 $t0 $t1 +sw $t0 -112($fp) +j label_104 +label_101: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -140($fp) +lw $t0 -108($fp) +lw $t1 12($t0) +sw $t1 -132($fp) +lw $t0 -140($fp) +lw $t1 -132($fp) +seq $t0 $t0 $t1 +sw $t0 -112($fp) +j label_104 +label_102: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -140($fp) +lw $t0 -108($fp) +lw $t1 12($t0) +sw $t1 -132($fp) +lw $t0 -140($fp) +move $a0 $t0 +lw $t0 -132($fp) +move $a1 $t0 +jal equal_str +sw $v0 -112($fp) +j label_104 +label_103: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -140($fp) +lw $t0 -108($fp) +lw $t1 12($t0) +sw $t1 -132($fp) +lw $t0 -140($fp) +lw $t1 -132($fp) +seq $t0 $t0 $t1 +sw $t0 -112($fp) +j label_104 +label_104: +lw $t0 -112($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -144($fp) +lw $t0 -144($fp) +lw $t1 12($t0) +sw $t1 -148($fp) +lw $t0 -148($fp) +bne $t0 $zero label_107 +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -104($fp) +lw $t0 -104($fp) +bne $t0 $zero label_105 +j label_106 +label_105: +li $v0 4 +la $a0 data_23 +syscall +li $v0 10 +syscall +label_106: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 0($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -100($fp) +la $t0 data_24 +sw $t0 -96($fp) +lw $t0 -96($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -92($fp) +lw $t0 -92($fp) +sw $t0 -152($fp) +j label_108 +label_107: +la $t0 data_25 +sw $t0 -88($fp) +lw $t0 -88($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -84($fp) +lw $t0 -84($fp) +sw $t0 -152($fp) +label_108: +lw $t0 -152($fp) +sw $t0 -200($fp) +j label_110 +label_109: +la $t0 data_26 +sw $t0 -80($fp) +lw $t0 -80($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -76($fp) +lw $t0 -76($fp) +sw $t0 -200($fp) +label_110: +lw $t0 -200($fp) +sw $t0 -248($fp) +j label_112 +label_111: +la $t0 data_27 +sw $t0 -72($fp) +lw $t0 -72($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -68($fp) +lw $t0 -68($fp) +sw $t0 -248($fp) +label_112: +lw $t0 -248($fp) +sw $t0 -296($fp) +j label_114 +label_113: +la $t0 data_28 +sw $t0 -64($fp) +lw $t0 -64($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -60($fp) +lw $t0 -60($fp) +sw $t0 -296($fp) +label_114: +lw $t0 -296($fp) +sw $t0 -344($fp) +j label_116 +label_115: +la $t0 data_29 +sw $t0 -56($fp) +lw $t0 -56($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -52($fp) +lw $t0 -52($fp) +sw $t0 -344($fp) +label_116: +lw $t0 -344($fp) +sw $t0 -392($fp) +j label_118 +label_117: +la $t0 data_30 +sw $t0 -48($fp) +lw $t0 -48($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -44($fp) +lw $t0 -44($fp) +sw $t0 -392($fp) +label_118: +lw $t0 -392($fp) +sw $t0 -440($fp) +j label_120 +label_119: +la $t0 data_31 +sw $t0 -40($fp) +lw $t0 -40($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 -36($fp) +sw $t0 -440($fp) +label_120: +lw $t0 -440($fp) +sw $t0 -488($fp) +j label_122 +label_121: +la $t0 data_32 +sw $t0 -32($fp) +lw $t0 -32($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t0 -28($fp) +sw $t0 -488($fp) +label_122: +lw $t0 -488($fp) +sw $t0 -536($fp) +j label_124 +label_123: +la $t0 data_33 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 -20($fp) +sw $t0 -536($fp) +label_124: +lw $t0 -536($fp) +sw $t0 -584($fp) +j label_126 +label_125: +la $t0 data_34 +sw $t0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -584($fp) +label_126: +lw $v0 -584($fp) +addi $sp $sp 576 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_a2i_at_A2I: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -312 +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -276($fp) +lw $t0 -276($fp) +bne $t0 $zero label_127 +j label_128 +label_127: +li $v0 4 +la $a0 data_35 +syscall +li $v0 10 +syscall +label_128: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -272($fp) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -268($fp) +lw $t0 -272($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -304($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -296($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -288($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -292($fp) +lw $t0 -304($fp) +lw $t1 -296($fp) +seq $t0 $t0 $t1 +sw $t0 -284($fp) +lw $t0 -284($fp) +bne $t0 $zero label_129 +lw $t0 -304($fp) +lw $t1 -288($fp) +seq $t0 $t0 $t1 +sw $t0 -284($fp) +lw $t0 -284($fp) +bne $t0 $zero label_130 +lw $t0 -304($fp) +lw $t1 -292($fp) +seq $t0 $t0 $t1 +sw $t0 -284($fp) +lw $t0 -284($fp) +bne $t0 $zero label_131 +lw $t0 -272($fp) +lw $t1 -268($fp) +seq $t0 $t0 $t1 +sw $t0 -280($fp) +j label_132 +label_129: +lw $t0 -272($fp) +lw $t1 12($t0) +sw $t1 -308($fp) +lw $t0 -268($fp) +lw $t1 12($t0) +sw $t1 -300($fp) +lw $t0 -308($fp) +lw $t1 -300($fp) +seq $t0 $t0 $t1 +sw $t0 -280($fp) +j label_132 +label_130: +lw $t0 -272($fp) +lw $t1 12($t0) +sw $t1 -308($fp) +lw $t0 -268($fp) +lw $t1 12($t0) +sw $t1 -300($fp) +lw $t0 -308($fp) +move $a0 $t0 +lw $t0 -300($fp) +move $a1 $t0 +jal equal_str +sw $v0 -280($fp) +j label_132 +label_131: +lw $t0 -272($fp) +lw $t1 12($t0) +sw $t1 -308($fp) +lw $t0 -268($fp) +lw $t1 12($t0) +sw $t1 -300($fp) +lw $t0 -308($fp) +lw $t1 -300($fp) +seq $t0 $t0 $t1 +sw $t0 -280($fp) +j label_132 +label_132: +lw $t0 -280($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -312($fp) +lw $t0 -312($fp) +lw $t1 12($t0) +sw $t1 -316($fp) +lw $t0 -316($fp) +bne $t0 $zero label_163 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -220($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -216($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -212($fp) +lw $t0 -212($fp) +bne $t0 $zero label_133 +j label_134 +label_133: +li $v0 4 +la $a0 data_36 +syscall +li $v0 10 +syscall +label_134: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -220($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -216($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -208($fp) +la $t0 data_37 +sw $t0 -204($fp) +lw $t0 -204($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -200($fp) +lw $t0 -208($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -248($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -240($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -232($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -236($fp) +lw $t0 -248($fp) +lw $t1 -240($fp) +seq $t0 $t0 $t1 +sw $t0 -228($fp) +lw $t0 -228($fp) +bne $t0 $zero label_135 +lw $t0 -248($fp) +lw $t1 -232($fp) +seq $t0 $t0 $t1 +sw $t0 -228($fp) +lw $t0 -228($fp) +bne $t0 $zero label_136 +lw $t0 -248($fp) +lw $t1 -236($fp) +seq $t0 $t0 $t1 +sw $t0 -228($fp) +lw $t0 -228($fp) +bne $t0 $zero label_137 +lw $t0 -208($fp) +lw $t1 -200($fp) +seq $t0 $t0 $t1 +sw $t0 -224($fp) +j label_138 +label_135: +lw $t0 -208($fp) +lw $t1 12($t0) +sw $t1 -252($fp) +lw $t0 -200($fp) +lw $t1 12($t0) +sw $t1 -244($fp) +lw $t0 -252($fp) +lw $t1 -244($fp) +seq $t0 $t0 $t1 +sw $t0 -224($fp) +j label_138 +label_136: +lw $t0 -208($fp) +lw $t1 12($t0) +sw $t1 -252($fp) +lw $t0 -200($fp) +lw $t1 12($t0) +sw $t1 -244($fp) +lw $t0 -252($fp) +move $a0 $t0 +lw $t0 -244($fp) +move $a1 $t0 +jal equal_str +sw $v0 -224($fp) +j label_138 +label_137: +lw $t0 -208($fp) +lw $t1 12($t0) +sw $t1 -252($fp) +lw $t0 -200($fp) +lw $t1 12($t0) +sw $t1 -244($fp) +lw $t0 -252($fp) +lw $t1 -244($fp) +seq $t0 $t0 $t1 +sw $t0 -224($fp) +j label_138 +label_138: +lw $t0 -224($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -256($fp) +lw $t0 -256($fp) +lw $t1 12($t0) +sw $t1 -260($fp) +lw $t0 -260($fp) +bne $t0 $zero label_155 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -152($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -148($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -144($fp) +lw $t0 -144($fp) +bne $t0 $zero label_139 +j label_140 +label_139: +li $v0 4 +la $a0 data_38 +syscall +li $v0 10 +syscall +label_140: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -152($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -148($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -140($fp) +la $t0 data_39 +sw $t0 -136($fp) +lw $t0 -136($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -132($fp) +lw $t0 -140($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -180($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -172($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -164($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -168($fp) +lw $t0 -180($fp) +lw $t1 -172($fp) +seq $t0 $t0 $t1 +sw $t0 -160($fp) +lw $t0 -160($fp) +bne $t0 $zero label_141 +lw $t0 -180($fp) +lw $t1 -164($fp) +seq $t0 $t0 $t1 +sw $t0 -160($fp) +lw $t0 -160($fp) +bne $t0 $zero label_142 +lw $t0 -180($fp) +lw $t1 -168($fp) +seq $t0 $t0 $t1 +sw $t0 -160($fp) +lw $t0 -160($fp) +bne $t0 $zero label_143 +lw $t0 -140($fp) +lw $t1 -132($fp) +seq $t0 $t0 $t1 +sw $t0 -156($fp) +j label_144 +label_141: +lw $t0 -140($fp) +lw $t1 12($t0) +sw $t1 -184($fp) +lw $t0 -132($fp) +lw $t1 12($t0) +sw $t1 -176($fp) +lw $t0 -184($fp) +lw $t1 -176($fp) +seq $t0 $t0 $t1 +sw $t0 -156($fp) +j label_144 +label_142: +lw $t0 -140($fp) +lw $t1 12($t0) +sw $t1 -184($fp) +lw $t0 -132($fp) +lw $t1 12($t0) +sw $t1 -176($fp) +lw $t0 -184($fp) +move $a0 $t0 +lw $t0 -176($fp) +move $a1 $t0 +jal equal_str +sw $v0 -156($fp) +j label_144 +label_143: +lw $t0 -140($fp) +lw $t1 12($t0) +sw $t1 -184($fp) +lw $t0 -132($fp) +lw $t1 12($t0) +sw $t1 -176($fp) +lw $t0 -184($fp) +lw $t1 -176($fp) +seq $t0 $t0 $t1 +sw $t0 -156($fp) +j label_144 +label_144: +lw $t0 -156($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -188($fp) +lw $t0 -188($fp) +lw $t1 12($t0) +sw $t1 -192($fp) +lw $t0 -192($fp) +bne $t0 $zero label_147 +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -128($fp) +lw $t0 -128($fp) +bne $t0 $zero label_145 +j label_146 +label_145: +li $v0 4 +la $a0 data_40 +syscall +li $v0 10 +syscall +label_146: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 16($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -124($fp) +lw $t0 -124($fp) +sw $t0 -196($fp) +j label_154 +label_147: +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -120($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -100($fp) +lw $t0 -100($fp) +bne $t0 $zero label_148 +j label_149 +label_148: +li $v0 4 +la $a0 data_41 +syscall +li $v0 10 +syscall +label_149: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -96($fp) +lw $t0 -96($fp) +lw $t1 12($t0) +sw $t1 -112($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -92($fp) +lw $t0 -92($fp) +lw $t1 12($t0) +sw $t1 -108($fp) +lw $t0 -112($fp) +lw $t1 -108($fp) +sub $t0 $t0 $t1 +sw $t0 -104($fp) +lw $t0 -104($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -116($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -88($fp) +lw $t0 -88($fp) +bne $t0 $zero label_150 +j label_151 +label_150: +li $v0 4 +la $a0 data_42 +syscall +li $v0 10 +syscall +label_151: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -120($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -116($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -84($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -80($fp) +lw $t0 -80($fp) +bne $t0 $zero label_152 +j label_153 +label_152: +li $v0 4 +la $a0 data_43 +syscall +li $v0 10 +syscall +label_153: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -84($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 16($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -76($fp) +lw $t0 -76($fp) +sw $t0 -196($fp) +label_154: +lw $t0 -196($fp) +sw $t0 -264($fp) +j label_162 +label_155: +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -60($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -40($fp) +lw $t0 -40($fp) +bne $t0 $zero label_156 +j label_157 +label_156: +li $v0 4 +la $a0 data_44 +syscall +li $v0 10 +syscall +label_157: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 -36($fp) +lw $t1 12($t0) +sw $t1 -52($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -32($fp) +lw $t0 -32($fp) +lw $t1 12($t0) +sw $t1 -48($fp) +lw $t0 -52($fp) +lw $t1 -48($fp) +sub $t0 $t0 $t1 +sw $t0 -44($fp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -56($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -28($fp) +lw $t0 -28($fp) +bne $t0 $zero label_158 +j label_159 +label_158: +li $v0 4 +la $a0 data_45 +syscall +li $v0 10 +syscall +label_159: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -60($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -56($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -24($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -20($fp) +lw $t0 -20($fp) +bne $t0 $zero label_160 +j label_161 +label_160: +li $v0 4 +la $a0 data_46 +syscall +li $v0 10 +syscall +label_161: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 16($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -16($fp) +lw $t0 -16($fp) +lw $t1 12($t0) +sw $t1 -68($fp) +lw $t0 -68($fp) +not $t0 $t0 +addi $t0 $t0 1 +sw $t0 -64($fp) +lw $t0 -64($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -72($fp) +lw $t0 -72($fp) +sw $t0 -264($fp) +label_162: +lw $t0 -264($fp) +sw $t0 -320($fp) +j label_164 +label_163: +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -320($fp) +label_164: +lw $v0 -320($fp) +addi $sp $sp 312 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_a2i_aux_at_A2I: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -124 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -128($fp) +lw $t0 -128($fp) +sw $t0 -132($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -120($fp) +lw $t0 -120($fp) +bne $t0 $zero label_165 +j label_166 +label_165: +li $v0 4 +la $a0 data_47 +syscall +li $v0 10 +syscall +label_166: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -116($fp) +lw $t0 -116($fp) +sw $t0 -124($fp) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -108($fp) +lw $t0 -108($fp) +sw $t0 -112($fp) +label_167: +lw $t0 -112($fp) +lw $t1 12($t0) +sw $t1 -96($fp) +lw $t0 -124($fp) +lw $t1 12($t0) +sw $t1 -92($fp) +lw $t0 -96($fp) +lw $t1 -92($fp) +slt $t1 $t0 $t1 +sw $t1 -88($fp) +lw $t0 -88($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -100($fp) +lw $t0 -100($fp) +lw $t1 12($t0) +sw $t1 -104($fp) +lw $t0 -104($fp) +bne $t0 $zero label_168 +j label_173 +label_168: +lw $t0 -132($fp) +lw $t1 12($t0) +sw $t1 -64($fp) +li $t0 10 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -52($fp) +lw $t0 -52($fp) +lw $t1 12($t0) +sw $t1 -60($fp) +lw $t0 -64($fp) +lw $t1 -60($fp) +mul $t0 $t0 $t1 +sw $t0 -56($fp) +lw $t0 -56($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -68($fp) +lw $t0 -68($fp) +lw $t1 12($t0) +sw $t1 -80($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -48($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -44($fp) +lw $t0 -44($fp) +bne $t0 $zero label_169 +j label_170 +label_169: +li $v0 4 +la $a0 data_48 +syscall +li $v0 10 +syscall +label_170: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -112($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -48($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -40($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -36($fp) +lw $t0 -36($fp) +bne $t0 $zero label_171 +j label_172 +label_171: +li $v0 4 +la $a0 data_49 +syscall +li $v0 10 +syscall +label_172: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -40($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -32($fp) +lw $t0 -32($fp) +lw $t1 12($t0) +sw $t1 -76($fp) +lw $t0 -80($fp) +lw $t1 -76($fp) +add $t0 $t0 $t1 +sw $t0 -72($fp) +lw $t0 -72($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -84($fp) +lw $t0 -84($fp) +sw $t0 -132($fp) +lw $t0 -112($fp) +lw $t1 12($t0) +sw $t1 -24($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 12($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 -20($fp) +add $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t0 -28($fp) +sw $t0 -112($fp) +j label_167 +label_173: +lw $v0 -132($fp) +addi $sp $sp 124 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_i2a_at_A2I: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -148 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -112($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -140($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -132($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -124($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -128($fp) +lw $t0 -140($fp) +lw $t1 -132($fp) +seq $t0 $t0 $t1 +sw $t0 -120($fp) +lw $t0 -120($fp) +bne $t0 $zero label_174 +lw $t0 -140($fp) +lw $t1 -124($fp) +seq $t0 $t0 $t1 +sw $t0 -120($fp) +lw $t0 -120($fp) +bne $t0 $zero label_175 +lw $t0 -140($fp) +lw $t1 -128($fp) +seq $t0 $t0 $t1 +sw $t0 -120($fp) +lw $t0 -120($fp) +bne $t0 $zero label_176 +lw $t0 0($fp) +lw $t1 -112($fp) +seq $t0 $t0 $t1 +sw $t0 -116($fp) +j label_177 +label_174: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -144($fp) +lw $t0 -112($fp) +lw $t1 12($t0) +sw $t1 -136($fp) +lw $t0 -144($fp) +lw $t1 -136($fp) +seq $t0 $t0 $t1 +sw $t0 -116($fp) +j label_177 +label_175: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -144($fp) +lw $t0 -112($fp) +lw $t1 12($t0) +sw $t1 -136($fp) +lw $t0 -144($fp) +move $a0 $t0 +lw $t0 -136($fp) +move $a1 $t0 +jal equal_str +sw $v0 -116($fp) +j label_177 +label_176: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -144($fp) +lw $t0 -112($fp) +lw $t1 12($t0) +sw $t1 -136($fp) +lw $t0 -144($fp) +lw $t1 -136($fp) +seq $t0 $t0 $t1 +sw $t0 -116($fp) +j label_177 +label_177: +lw $t0 -116($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -148($fp) +lw $t0 -148($fp) +lw $t1 12($t0) +sw $t1 -152($fp) +lw $t0 -152($fp) +bne $t0 $zero label_186 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -84($fp) +lw $t0 -84($fp) +lw $t1 12($t0) +sw $t1 -96($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -92($fp) +lw $t0 -96($fp) +lw $t1 -92($fp) +slt $t1 $t0 $t1 +sw $t1 -88($fp) +lw $t0 -88($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -100($fp) +lw $t0 -100($fp) +lw $t1 12($t0) +sw $t1 -104($fp) +lw $t0 -104($fp) +bne $t0 $zero label_182 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -76($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -52($fp) +lw $t0 -52($fp) +lw $t1 12($t0) +sw $t1 -60($fp) +lw $t0 -60($fp) +not $t0 $t0 +addi $t0 $t0 1 +sw $t0 -56($fp) +lw $t0 -56($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -64($fp) +lw $t0 -64($fp) +lw $t1 12($t0) +sw $t1 -72($fp) +lw $t0 -76($fp) +lw $t1 -72($fp) +mul $t0 $t0 $t1 +sw $t0 -68($fp) +lw $t0 -68($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -80($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -48($fp) +lw $t0 -48($fp) +bne $t0 $zero label_178 +j label_179 +label_178: +li $v0 4 +la $a0 data_50 +syscall +li $v0 10 +syscall +label_179: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -80($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -44($fp) +la $t0 data_51 +sw $t0 -40($fp) +lw $t0 -40($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 -36($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_180 +j label_181 +label_180: +li $v0 4 +la $a0 data_52 +syscall +li $v0 10 +syscall +label_181: +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 16($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -28($fp) +lw $t0 -28($fp) +sw $t0 -108($fp) +j label_185 +label_182: +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_183 +j label_184 +label_183: +li $v0 4 +la $a0 data_53 +syscall +li $v0 10 +syscall +label_184: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -20($fp) +lw $t0 -20($fp) +sw $t0 -108($fp) +label_185: +lw $t0 -108($fp) +sw $t0 -156($fp) +j label_187 +label_186: +la $t0 data_54 +sw $t0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -156($fp) +label_187: +lw $v0 -156($fp) +addi $sp $sp 148 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_i2a_aux_at_A2I: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -144 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -108($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -136($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -128($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -120($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -124($fp) +lw $t0 -136($fp) +lw $t1 -128($fp) +seq $t0 $t0 $t1 +sw $t0 -116($fp) +lw $t0 -116($fp) +bne $t0 $zero label_188 +lw $t0 -136($fp) +lw $t1 -120($fp) +seq $t0 $t0 $t1 +sw $t0 -116($fp) +lw $t0 -116($fp) +bne $t0 $zero label_189 +lw $t0 -136($fp) +lw $t1 -124($fp) +seq $t0 $t0 $t1 +sw $t0 -116($fp) +lw $t0 -116($fp) +bne $t0 $zero label_190 +lw $t0 0($fp) +lw $t1 -108($fp) +seq $t0 $t0 $t1 +sw $t0 -112($fp) +j label_191 +label_188: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -140($fp) +lw $t0 -108($fp) +lw $t1 12($t0) +sw $t1 -132($fp) +lw $t0 -140($fp) +lw $t1 -132($fp) +seq $t0 $t0 $t1 +sw $t0 -112($fp) +j label_191 +label_189: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -140($fp) +lw $t0 -108($fp) +lw $t1 12($t0) +sw $t1 -132($fp) +lw $t0 -140($fp) +move $a0 $t0 +lw $t0 -132($fp) +move $a1 $t0 +jal equal_str +sw $v0 -112($fp) +j label_191 +label_190: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -140($fp) +lw $t0 -108($fp) +lw $t1 12($t0) +sw $t1 -132($fp) +lw $t0 -140($fp) +lw $t1 -132($fp) +seq $t0 $t0 $t1 +sw $t0 -112($fp) +j label_191 +label_191: +lw $t0 -112($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -144($fp) +lw $t0 -144($fp) +lw $t1 12($t0) +sw $t1 -148($fp) +lw $t0 -148($fp) +bne $t0 $zero label_200 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -96($fp) +li $t0 10 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -80($fp) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -84($fp) +lw $t0 -84($fp) +lw $t1 12($t0) +sw $t1 -84($fp) +lw $t0 -80($fp) +lw $t1 12($t0) +sw $t1 -92($fp) +lw $t0 -84($fp) +lw $t1 -92($fp) +seq $t0 $t0 $t1 +sw $t0 -84($fp) +lw $t0 -84($fp) +bne $t0 $zero label_192 +j label_193 +label_192: +li $v0 4 +la $a0 data_55 +syscall +li $v0 10 +syscall +label_193: +lw $t0 -96($fp) +lw $t1 -92($fp) +div $t0 $t1 +mflo $t0 +sw $t0 -88($fp) +lw $t0 -88($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -100($fp) +lw $t0 -100($fp) +sw $t0 -104($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -72($fp) +lw $t0 -104($fp) +lw $t1 12($t0) +sw $t1 -56($fp) +li $t0 10 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -44($fp) +lw $t0 -44($fp) +lw $t1 12($t0) +sw $t1 -52($fp) +lw $t0 -56($fp) +lw $t1 -52($fp) +mul $t0 $t0 $t1 +sw $t0 -48($fp) +lw $t0 -48($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -60($fp) +lw $t0 -60($fp) +lw $t1 12($t0) +sw $t1 -68($fp) +lw $t0 -72($fp) +lw $t1 -68($fp) +sub $t0 $t0 $t1 +sw $t0 -64($fp) +lw $t0 -64($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -76($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -40($fp) +lw $t0 -40($fp) +bne $t0 $zero label_194 +j label_195 +label_194: +li $v0 4 +la $a0 data_56 +syscall +li $v0 10 +syscall +label_195: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -76($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -36($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_196 +j label_197 +label_196: +li $v0 4 +la $a0 data_57 +syscall +li $v0 10 +syscall +label_197: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -104($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -28($fp) +lw $t0 -28($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_198 +j label_199 +label_198: +li $v0 4 +la $a0 data_58 +syscall +li $v0 10 +syscall +label_199: +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 16($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -20($fp) +lw $t0 -20($fp) +sw $t0 -152($fp) +j label_201 +label_200: +la $t0 data_59 +sw $t0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -152($fp) +label_201: +lw $v0 -152($fp) +addi $sp $sp 144 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_A2I: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 5 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_A2I +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__attributes_ctor_Main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp 0 +lw $v0 0($fp) +addi $sp $sp 0 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_main_at_Main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -92 +la $t0 data_60 +sw $t0 -96($fp) +lw $t0 -96($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -92($fp) +jal __ctor_A2I +sw $v0 -88($fp) +lw $t0 -88($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -84($fp) +lw $t0 -84($fp) +bne $t0 $zero label_202 +j label_203 +label_202: +li $v0 4 +la $a0 data_61 +syscall +li $v0 10 +syscall +label_203: +lw $t0 -88($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -92($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -88($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -80($fp) +lw $t0 -80($fp) +sw $t0 -100($fp) +li $t0 678987 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -72($fp) +jal __ctor_A2I +sw $v0 -68($fp) +lw $t0 -68($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -64($fp) +lw $t0 -64($fp) +bne $t0 $zero label_204 +j label_205 +label_204: +li $v0 4 +la $a0 data_62 +syscall +li $v0 10 +syscall +label_205: +lw $t0 -68($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -72($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -68($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -60($fp) +lw $t0 -60($fp) +sw $t0 -76($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -56($fp) +lw $t0 -56($fp) +bne $t0 $zero label_206 +j label_207 +label_206: +li $v0 4 +la $a0 data_63 +syscall +li $v0 10 +syscall +label_207: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -100($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -52($fp) +la $t0 data_64 +sw $t0 -48($fp) +lw $t0 -48($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -44($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -40($fp) +lw $t0 -40($fp) +bne $t0 $zero label_208 +j label_209 +label_208: +li $v0 4 +la $a0 data_65 +syscall +li $v0 10 +syscall +label_209: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -36($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_210 +j label_211 +label_210: +li $v0 4 +la $a0 data_66 +syscall +li $v0 10 +syscall +label_211: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -76($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -28($fp) +la $t0 data_67 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_212 +j label_213 +label_212: +li $v0 4 +la $a0 data_68 +syscall +li $v0 10 +syscall +label_213: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 92 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_Main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 6 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_Main +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + + + +equal_str: +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $a0 8($sp) +sw $a1 12($sp) +sw $t2 16($sp) +sw $t3 20($sp) +move $t0 $a0 +move $t1 $a1 +while_equal_str: +lb $t2 0($t0) +lb $t3 0($t1) +bne $t2 $t3 equal_str_different_strings +beq $t2 $zero first_end_equal_str +beq $t3 $zero second_end_equal_str +addi $t1 $t1 1 +addi $t0 $t0 1 +j while_equal_str +equal_str_different_strings: +move $v0 $zero +j equal_str_end +first_end_equal_str: +beq $t3 $zero second_end_equal_str +move $v0 $zero +j equal_str_end +second_end_equal_str: +li $v0 1 +equal_str_end: +lw $t0 0($sp) +lw $t1 4($sp) +lw $a0 8($sp) +lw $a1 12($sp) +lw $t2 16($sp) +lw $t3 20($sp) +addiu $sp $sp 24 +jr $ra + +allocate: +addiu $sp $sp -12 +sw $a0 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +li $t0 4 +div $a0 $t0 +mfhi $t1 +sub $t0 $t0 $t1 +add $a0 $a0 $t0 +li $v0 9 +syscall +lw $a0 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +addiu $sp $sp 12 +jr $ra + +copy: +addiu $sp $sp -16 +sw $a0 0($sp) +sw $a1 4($sp) +sw $a2 8($sp) +sw $t0 12($sp) +while_copy: +beq $a2 $zero copy_end +lw $t0 0($a0) +sw $t0 0($a1) +addiu $a0 $a0 4 +addiu $a1 $a1 4 +addi $a2 $a2 -4 +j while_copy +copy_end: +lw $a0 0($sp) +lw $a1 4($sp) +lw $a2 8($sp) +lw $t0 12($sp) +addiu $sp $sp 16 +jr $ra + +read_string: +addiu $sp $sp -28 +sw $ra 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $a2 20($sp) +sw $t2 24($sp) +li $t0 8 +addi $a0 $t0 4 +jal allocate +move $t1 $v0 +move $t2 $zero +while_read_string: +addu $a0 $t1 $t2 +subu $a1 $t0 $t2 +addu $t2 $t2 $a1 +jal read_string_up_to +beq $v0 $zero read_string_not_finished +move $v0 $t1 +j end_read_string +read_string_not_finished: +sll $t0 $t0 1 +addi $a0 $t0 4 +jal allocate +move $a0 $t1 +move $t1 $v0 +move $a1 $v0 +move $a2 $t2 +jal copy +j while_read_string +end_read_string: +lw $ra 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $a2 20($sp) +lw $t2 24($sp) +addiu $sp $sp 28 +jr $ra +read_string_up_to: +addiu $sp $sp -28 +sw $ra 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +sw $t2 12($sp) +sw $t3 16($sp) +sw $t4 20($sp) +sw $t5 24($sp) +move $t0 $a0 +move $t1 $zero +li $t2 10 +addu $t3 $t0 $a1 +addiu $a1 $a1 1 +li $v0 8 +syscall +lw $a0 0($a0) +beq $a0 $zero eol_terminated +li $v0 0 +eol_check: +beq $t0 $t3 read_loop_continue +lb $t1 0($t0) +beq $t1 $t2 eol_terminated +addiu $t0 $t0 1 +j eol_check +eol_terminated: +sb $zero 0($t0) +li $v0 1 +read_loop_continue: +lw $ra 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +lw $t2 12($sp) +lw $t3 16($sp) +lw $t4 20($sp) +lw $t5 24($sp) +addiu $sp $sp 28 +jr $ra + +substr: +addiu $sp $sp -32 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $t3 12($sp) +sw $a0 16($sp) +sw $a1 20($sp) +sw $a2 24($sp) +sw $ra 28($sp) +move $t0 $a0 +add $t0 $t0 $a1 +li $t1 4 +div $a2 $t1 +mfhi $t2 +bne $t2 $zero substr_allign_size +move $t1 $a2 +j substr_new_chunk +substr_allign_size: +sub $t1 $t1 $t2 +add $t1 $t1 $a2 +substr_new_chunk: +move $a0 $t1 +jal allocate +move $t3 $v0 +move $t1 $zero +while_substr_copy: +beq $t1 $a2 substr_end +lb $t2 0($t0) +sb $t2 0($t3) +addiu $t0 $t0 1 +addiu $t3 $t3 1 +addiu $t1 $t1 1 +j while_substr_copy +substr_end: +sb $zero 0($t3) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $t3 12($sp) +lw $a0 16($sp) +lw $a1 20($sp) +lw $a2 24($sp) +lw $ra 28($sp) +addiu $sp $sp 32 +jr $ra + +concat: +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $ra 20($sp) +move $t0 $a0 +move $t1 $a1 +addiu $a0 $a2 1 +li $t2 4 +div $a0 $t2 +mfhi $a0 +bne $a0 $zero concat_allign_size +addiu $a0 $a2 1 +j concat_size_allignned +concat_allign_size: +sub $t2 $t2 $a0 +add $a0 $a2 $t2 +addiu $a0 $a0 1 +concat_size_allignned: +jal allocate +move $t2 $v0 +j first_while_concat_copy +first_while_concat_copy: +lb $a0 0($t0) +beq $a0 $zero second_while_concat_copy +sb $a0 0($t2) +addiu $t0 $t0 1 +addiu $t2 $t2 1 +j first_while_concat_copy +second_while_concat_copy: +lb $a0 0($t1) +beq $a0 $zero concat_end +sb $a0 0($t2) +addiu $t1 $t1 1 +addiu $t2 $t2 1 +j second_while_concat_copy +concat_end: +sb $zero 0($t2) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $ra 20($sp) +addiu $sp $sp 24 +jr $ra + +length: +addiu $sp $sp -8 +sw $t0 0($sp) +sw $t1 4($sp) +move $t0 $a0 +move $v0 $zero +while_len: +lb $t1 0($t0) +beq $t1 $zero len_end +addi $v0 $v0 1 +addiu $t0 $t0 1 +j while_len +len_end: +lw $t0 0($sp) +lw $t1 4($sp) +addiu $sp $sp 8 +jr $ra \ No newline at end of file diff --git a/tests/codegen/book_list.mips b/tests/codegen/book_list.mips new file mode 100644 index 000000000..6f1864306 --- /dev/null +++ b/tests/codegen/book_list.mips @@ -0,0 +1,2757 @@ +.data +default_str: .asciiz "" +.word 0 +data_1: .asciiz "Object" +.word 0 +data_2: .asciiz "IO" +.word 0 +data_3: .asciiz "String" +.word 0 +data_4: .asciiz "Int" +.word 0 +data_5: .asciiz "Bool" +.word 0 +data_6: .asciiz "Book" +.word 0 +data_7: .asciiz "Article" +.word 0 +data_8: .asciiz "BookList" +.word 0 +data_9: .asciiz "Cons" +.word 0 +data_10: .asciiz "Nil" +.word 0 +data_11: .asciiz "Main" +.word 0 +data_12: .asciiz " +" +.word 0 +data_13: .asciiz "" +.word 0 +data_14: .asciiz "Abort called from class " +.word 0 +data_15: .asciiz "Index out of range exception" +.word 0 +data_16: .asciiz "\n" +.word 0 +data_17: .asciiz "title: " +.word 0 +data_18: .asciiz "Function call in a void instance" +.word 0 +data_19: .asciiz "Function call in a void instance" +.word 0 +data_20: .asciiz "Function call in a void instance" +.word 0 +data_21: .asciiz "\n" +.word 0 +data_22: .asciiz "author: " +.word 0 +data_23: .asciiz "Function call in a void instance" +.word 0 +data_24: .asciiz "Function call in a void instance" +.word 0 +data_25: .asciiz "Function call in a void instance" +.word 0 +data_26: .asciiz "Function call in a void instance" +.word 0 +data_27: .asciiz "Function call in a void instance" +.word 0 +data_28: .asciiz "\n" +.word 0 +data_29: .asciiz "periodical: " +.word 0 +data_30: .asciiz "Function call in a void instance" +.word 0 +data_31: .asciiz "Function call in a void instance" +.word 0 +data_32: .asciiz "Function call in a void instance" +.word 0 +data_33: .asciiz "Function call in a void instance" +.word 0 +data_34: .asciiz "Function call in a void instance" +.word 0 +data_35: .asciiz "Function call in a void instance" +.word 0 +data_36: .asciiz "Function call in a void instance" +.word 0 +data_37: .asciiz "Function call in a void instance" +.word 0 +data_38: .asciiz "Function call in a void instance" +.word 0 +data_39: .asciiz "Void isntance found in switch case" +.word 0 +data_40: .asciiz "Switch Case without valid branches" +.word 0 +data_41: .asciiz "- dynamic type was Article -\n" +.word 0 +data_42: .asciiz "Function call in a void instance" +.word 0 +data_43: .asciiz "- dynamic type was Book -\n" +.word 0 +data_44: .asciiz "Function call in a void instance" +.word 0 +data_45: .asciiz "Function call in a void instance" +.word 0 +data_46: .asciiz "Compilers, Principles, Techniques, and Tools" +.word 0 +data_47: .asciiz "Aho, Sethi, and Ullman" +.word 0 +data_48: .asciiz "Function call in a void instance" +.word 0 +data_49: .asciiz "The Top 100 CD_ROMs" +.word 0 +data_50: .asciiz "Ulanoff" +.word 0 +data_51: .asciiz "PC Magazine" +.word 0 +data_52: .asciiz "Function call in a void instance" +.word 0 +data_53: .asciiz "Function call in a void instance" +.word 0 +data_54: .asciiz "Function call in a void instance" +.word 0 +data_55: .asciiz "Function call in a void instance" + + +types_table: +.word data_1 +.word data_2 +.word data_3 +.word data_4 +.word data_5 +.word data_6 +.word data_7 +.word data_8 +.word data_9 +.word data_10 +.word data_11 + +prototype_table: + .word type_1_prototype + .word type_2_prototype + .word type_3_prototype + .word type_4_prototype + .word type_5_prototype + .word type_6_prototype + .word type_7_prototype + .word type_8_prototype + .word type_9_prototype + .word type_10_prototype + .word type_11_prototype + +type_1_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __ctor_Object + +type_1_prototype: +.word 0 +.word 4 +.word type_1_dispatch +.word -1 + + +type_2_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word function_out_string_at_IO +.word function_out_int_at_IO +.word function_in_string_at_IO +.word function_in_int_at_IO +.word __ctor_IO + +type_2_prototype: +.word 1 +.word 4 +.word type_2_dispatch +.word -1 + + +type_3_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word function_length_at_String +.word function_concat_at_String +.word function_substr_at_String +.word __ctor_String + +type_3_prototype: +.word 2 +.word 6 +.word type_3_dispatch +.word 0 +.word 0 +.word -1 + + +type_4_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __ctor_Int + +type_4_prototype: +.word 3 +.word 5 +.word type_4_dispatch +.word 0 +.word -1 + + +type_5_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __ctor_Bool + +type_5_prototype: +.word 4 +.word 5 +.word type_5_dispatch +.word 0 +.word -1 + + +type_6_dispatch: +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_initBook_at_Book +.word function_print_at_Book +.word __attributes_ctor_Book +.word __ctor_Book + +type_6_prototype: +.word 5 +.word 6 +.word type_6_dispatch +.word 0 +.word 0 +.word -1 + + +type_7_dispatch: +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_initBook_at_Book +.word function_print_at_Article +.word function_initArticle_at_Article +.word __attributes_ctor_Article +.word __ctor_Article + +type_7_prototype: +.word 6 +.word 7 +.word type_7_dispatch +.word 0 +.word 0 +.word 0 +.word -1 + + +type_8_dispatch: +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_car_at_BookList +.word function_cdr_at_BookList +.word function_cons_at_BookList +.word function_isNil_at_BookList +.word function_print_list_at_BookList +.word __attributes_ctor_BookList +.word __ctor_BookList + +type_8_prototype: +.word 7 +.word 4 +.word type_8_dispatch +.word -1 + + +type_9_dispatch: +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_car_at_Cons +.word function_cdr_at_Cons +.word function_cons_at_BookList +.word function_isNil_at_Cons +.word function_print_list_at_Cons +.word function_init_at_Cons +.word __attributes_ctor_Cons +.word __ctor_Cons + +type_9_prototype: +.word 8 +.word 6 +.word type_9_dispatch +.word 0 +.word 0 +.word -1 + + +type_10_dispatch: +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_car_at_BookList +.word function_cdr_at_BookList +.word function_cons_at_BookList +.word function_isNil_at_Nil +.word function_print_list_at_Nil +.word __attributes_ctor_Nil +.word __ctor_Nil + +type_10_prototype: +.word 9 +.word 4 +.word type_10_dispatch +.word -1 + + +type_11_dispatch: +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_main_at_Main +.word __attributes_ctor_Main +.word __ctor_Main + +type_11_prototype: +.word 10 +.word 5 +.word type_11_dispatch +.word 0 +.word -1 + + +.text +.globl main +__ctor_Object: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 0 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_abort_at_Object: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +la $t0 data_14 +sw $t0 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +la $t0 data_12 +sw $t0 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +li $v0 10 +syscall +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_type_name_at_Object: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_copy_at_Object: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $a0 4($t0) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t0 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 1 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_out_string_at_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +lw $v0 4($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_out_int_at_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -12($fp) +li $v0 1 +lw $a0 -12($fp) +syscall +lw $v0 4($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_in_string_at_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +jal read_string +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_in_int_at_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $v0 5 +syscall +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_String: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +li $t0 2 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -20($fp) +lw $t0 -20($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $a0 0($fp) +jal length +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -20($fp) +lw $t1 -12($fp) +sw $t1 16($t0) +lw $v0 -20($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_length_at_String: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 16($t0) +sw $t1 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_concat_at_String: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -24 +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -32($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 4($fp) +lw $t1 16($t0) +sw $t1 -24($fp) +lw $t0 0($fp) +lw $t1 16($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 12($t0) +sw $t1 -24($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 -20($fp) +add $t0 $t0 $t1 +sw $t0 -24($fp) +lw $a0 -32($fp) +lw $a1 -28($fp) +lw $a2 -24($fp) +jal concat +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 24 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_substr_at_String: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -36 +lw $t0 8($fp) +lw $t1 12($t0) +sw $t1 -16($fp) +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -40($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -36($fp) +lw $t0 8($fp) +lw $t1 16($t0) +sw $t1 -32($fp) +lw $t0 -32($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 -36($fp) +lw $t1 -40($fp) +add $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -28($fp) +lw $t1 -24($fp) +slt $t1 $t0 $t1 +sw $t1 -20($fp) +lw $t0 -20($fp) +bne $t0 $zero label_1 +j label_2 +label_1: +li $v0 4 +la $a0 data_15 +syscall +li $v0 10 +syscall +label_2: +lw $a0 -16($fp) +lw $a1 -40($fp) +lw $a2 -36($fp) +jal substr +sw $v0 -44($fp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 36 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_Int: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 3 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_Bool: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 4 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +jal __ctor_Main +sw $v0 -12($fp) +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal function_main_at_Main +addi $sp $sp 4 +sw $v0 -12($fp) +li $v0 0 +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +li $v0 10 +syscall + +__attributes_ctor_Book: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +la $t0 data_13 +sw $t0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -16($fp) +lw $t0 0($fp) +lw $t1 -16($fp) +sw $t1 16($t0) +la $t0 data_13 +sw $t0 -12($fp) +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 0($fp) +lw $t1 -12($fp) +sw $t1 12($t0) +lw $v0 0($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_initBook_at_Book: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp 0 +lw $t0 4($fp) +lw $t1 8($fp) +addi $t1 $t1 16 +sw $t0 0($t1) +lw $t0 0($fp) +lw $t1 8($fp) +addi $t1 $t1 12 +sw $t0 0($t1) +lw $v0 8($fp) +addi $sp $sp 0 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_print_at_Book: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -80 +la $t0 data_16 +sw $t0 -88($fp) +lw $t0 -88($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -84($fp) +la $t0 data_17 +sw $t0 -80($fp) +lw $t0 -80($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -76($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -72($fp) +lw $t0 -72($fp) +bne $t0 $zero label_3 +j label_4 +label_3: +li $v0 4 +la $a0 data_18 +syscall +li $v0 10 +syscall +label_4: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -76($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -68($fp) +lw $t0 -68($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -64($fp) +lw $t0 -64($fp) +bne $t0 $zero label_5 +j label_6 +label_5: +li $v0 4 +la $a0 data_19 +syscall +li $v0 10 +syscall +label_6: +lw $t0 -68($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -68($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -60($fp) +lw $t0 -60($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -56($fp) +lw $t0 -56($fp) +bne $t0 $zero label_7 +j label_8 +label_7: +li $v0 4 +la $a0 data_20 +syscall +li $v0 10 +syscall +label_8: +lw $t0 -60($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -84($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -60($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -52($fp) +la $t0 data_21 +sw $t0 -48($fp) +lw $t0 -48($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -44($fp) +la $t0 data_22 +sw $t0 -40($fp) +lw $t0 -40($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_9 +j label_10 +label_9: +li $v0 4 +la $a0 data_23 +syscall +li $v0 10 +syscall +label_10: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -28($fp) +lw $t0 -28($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_11 +j label_12 +label_11: +li $v0 4 +la $a0 data_24 +syscall +li $v0 10 +syscall +label_12: +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -20($fp) +lw $t0 -20($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_13 +j label_14 +label_13: +li $v0 4 +la $a0 data_25 +syscall +li $v0 10 +syscall +label_14: +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $v0 0($fp) +addi $sp $sp 80 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_Book: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 5 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_Book +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__attributes_ctor_Article: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_Book +addi $sp $sp 4 +sw $v0 -16($fp) +la $t0 data_13 +sw $t0 -12($fp) +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 0($fp) +lw $t1 -12($fp) +sw $t1 20($t0) +lw $v0 0($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_initArticle_at_Article: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 12($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_15 +j label_16 +label_15: +li $v0 4 +la $a0 data_26 +syscall +li $v0 10 +syscall +label_16: +lw $t0 12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 8($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -12($fp) +lw $t0 0($fp) +lw $t1 12($fp) +addi $t1 $t1 20 +sw $t0 0($t1) +lw $v0 12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_print_at_Article: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -48 +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -56($fp) +lw $t0 -56($fp) +bne $t0 $zero label_17 +j label_18 +label_17: +li $v0 4 +la $a0 data_27 +syscall +li $v0 10 +syscall +label_18: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal function_print_at_Book +addi $sp $sp 4 +sw $v0 -52($fp) +la $t0 data_28 +sw $t0 -48($fp) +lw $t0 -48($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -44($fp) +la $t0 data_29 +sw $t0 -40($fp) +lw $t0 -40($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_19 +j label_20 +label_19: +li $v0 4 +la $a0 data_30 +syscall +li $v0 10 +syscall +label_20: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -28($fp) +lw $t0 -28($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_21 +j label_22 +label_21: +li $v0 4 +la $a0 data_31 +syscall +li $v0 10 +syscall +label_22: +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -20($fp) +lw $t0 -20($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_23 +j label_24 +label_23: +li $v0 4 +la $a0 data_32 +syscall +li $v0 10 +syscall +label_24: +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $v0 0($fp) +addi $sp $sp 48 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_Article: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 6 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_Article +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__attributes_ctor_BookList: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp 0 +lw $v0 0($fp) +addi $sp $sp 0 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_isNil_at_BookList: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -20($fp) +lw $t0 -20($fp) +bne $t0 $zero label_25 +j label_26 +label_25: +li $v0 4 +la $a0 data_33 +syscall +li $v0 10 +syscall +label_26: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 0($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -16($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_cons_at_BookList: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -16 +jal __ctor_Cons +sw $v0 -20($fp) +lw $t0 -20($fp) +sw $t0 -24($fp) +lw $t0 -24($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_27 +j label_28 +label_27: +li $v0 4 +la $a0 data_34 +syscall +li $v0 10 +syscall +label_28: +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 48($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 16 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_car_at_BookList: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -20($fp) +lw $t0 -20($fp) +bne $t0 $zero label_29 +j label_30 +label_29: +li $v0 4 +la $a0 data_35 +syscall +li $v0 10 +syscall +label_30: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 0($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -16($fp) +jal __ctor_Book +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_cdr_at_BookList: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -20($fp) +lw $t0 -20($fp) +bne $t0 $zero label_31 +j label_32 +label_31: +li $v0 4 +la $a0 data_36 +syscall +li $v0 10 +syscall +label_32: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 0($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -16($fp) +jal __ctor_BookList +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_print_list_at_BookList: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_33 +j label_34 +label_33: +li $v0 4 +la $a0 data_37 +syscall +li $v0 10 +syscall +label_34: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 0($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_BookList: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 7 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_BookList +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__attributes_ctor_Cons: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_BookList +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 0($fp) +lw $t1 -16($fp) +sw $t1 12($t0) +lw $t0 0($fp) +lw $t1 -12($fp) +sw $t1 16($t0) +lw $v0 0($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_isNil_at_Cons: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_init_at_Cons: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp 0 +lw $t0 4($fp) +lw $t1 8($fp) +addi $t1 $t1 12 +sw $t0 0($t1) +lw $t0 0($fp) +lw $t1 8($fp) +addi $t1 $t1 16 +sw $t0 0($t1) +lw $v0 8($fp) +addi $sp $sp 0 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_car_at_Cons: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp 0 +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $v0 0($sp) +addi $sp $sp 4 +addi $sp $sp 0 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_cdr_at_Cons: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp 0 +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $v0 0($sp) +addi $sp $sp 4 +addi $sp $sp 0 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_print_list_at_Cons: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -76 +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -72($fp) +lw $t0 -72($fp) +bne $t0 $zero label_35 +j label_36 +label_35: +li $v0 4 +la $a0 data_38 +syscall +li $v0 10 +syscall +label_36: +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -68($fp) +lw $t0 -68($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -80($fp) +lw $t0 -68($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -64($fp) +lw $t0 -64($fp) +bne $t0 $zero label_37 +j label_38 +label_37: +li $v0 4 +la $a0 data_39 +syscall +li $v0 10 +syscall +label_38: +la $t0 types_table +addi $t0 $t0 24 +lw $t0 0($t0) +sw $t0 -60($fp) +lw $t0 -60($fp) +lw $t1 -80($fp) +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_39 +la $t0 types_table +addi $t0 $t0 20 +lw $t0 0($t0) +sw $t0 -60($fp) +lw $t0 -60($fp) +lw $t1 -80($fp) +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_42 +li $v0 4 +la $a0 data_40 +syscall +li $v0 10 +syscall +label_39: +lw $t0 -68($fp) +sw $t0 -56($fp) +la $t0 data_41 +sw $t0 -52($fp) +lw $t0 -52($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -48($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -44($fp) +lw $t0 -44($fp) +bne $t0 $zero label_40 +j label_41 +label_40: +li $v0 4 +la $a0 data_42 +syscall +li $v0 10 +syscall +label_41: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -48($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -40($fp) +lw $t0 -40($fp) +sw $t0 -84($fp) +j label_45 +label_42: +lw $t0 -68($fp) +sw $t0 -36($fp) +la $t0 data_43 +sw $t0 -32($fp) +lw $t0 -32($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_43 +j label_44 +label_43: +li $v0 4 +la $a0 data_44 +syscall +li $v0 10 +syscall +label_44: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -20($fp) +lw $t0 -20($fp) +sw $t0 -84($fp) +j label_45 +label_45: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_46 +j label_47 +label_46: +li $v0 4 +la $a0 data_45 +syscall +li $v0 10 +syscall +label_47: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 44($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 76 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_Cons: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 8 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_Cons +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__attributes_ctor_Nil: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_BookList +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 0($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_isNil_at_Nil: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_print_list_at_Nil: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_Nil: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 9 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_Nil +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__attributes_ctor_Main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 -12($fp) +sw $t1 12($t0) +lw $v0 0($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_main_at_Main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -100 +la $t0 data_46 +sw $t0 -104($fp) +lw $t0 -104($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -100($fp) +la $t0 data_47 +sw $t0 -96($fp) +lw $t0 -96($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -92($fp) +jal __ctor_Book +sw $v0 -88($fp) +lw $t0 -88($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -84($fp) +lw $t0 -84($fp) +bne $t0 $zero label_48 +j label_49 +label_48: +li $v0 4 +la $a0 data_48 +syscall +li $v0 10 +syscall +label_49: +lw $t0 -88($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -100($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -92($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -88($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -80($fp) +lw $t0 -80($fp) +sw $t0 -108($fp) +la $t0 data_49 +sw $t0 -72($fp) +lw $t0 -72($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -68($fp) +la $t0 data_50 +sw $t0 -64($fp) +lw $t0 -64($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -60($fp) +la $t0 data_51 +sw $t0 -56($fp) +lw $t0 -56($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -52($fp) +jal __ctor_Article +sw $v0 -48($fp) +lw $t0 -48($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -44($fp) +lw $t0 -44($fp) +bne $t0 $zero label_50 +j label_51 +label_50: +li $v0 4 +la $a0 data_52 +syscall +li $v0 10 +syscall +label_51: +lw $t0 -48($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -68($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -60($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -52($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -48($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 36($t0) +jalr $ra $t0 +addi $sp $sp 16 +sw $v0 -40($fp) +lw $t0 -40($fp) +sw $t0 -76($fp) +jal __ctor_Nil +sw $v0 -36($fp) +lw $t0 -36($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_52 +j label_53 +label_52: +li $v0 4 +la $a0 data_53 +syscall +li $v0 10 +syscall +label_53: +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -108($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 36($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -28($fp) +lw $t0 -28($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_54 +j label_55 +label_54: +li $v0 4 +la $a0 data_54 +syscall +li $v0 10 +syscall +label_55: +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -76($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 36($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -20($fp) +lw $t0 -20($fp) +lw $t1 0($fp) +addi $t1 $t1 12 +sw $t0 0($t1) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_56 +j label_57 +label_56: +li $v0 4 +la $a0 data_55 +syscall +li $v0 10 +syscall +label_57: +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 44($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 100 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_Main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 10 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_Main +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + + + +equal_str: +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $a0 8($sp) +sw $a1 12($sp) +sw $t2 16($sp) +sw $t3 20($sp) +move $t0 $a0 +move $t1 $a1 +while_equal_str: +lb $t2 0($t0) +lb $t3 0($t1) +bne $t2 $t3 equal_str_different_strings +beq $t2 $zero first_end_equal_str +beq $t3 $zero second_end_equal_str +addi $t1 $t1 1 +addi $t0 $t0 1 +j while_equal_str +equal_str_different_strings: +move $v0 $zero +j equal_str_end +first_end_equal_str: +beq $t3 $zero second_end_equal_str +move $v0 $zero +j equal_str_end +second_end_equal_str: +li $v0 1 +equal_str_end: +lw $t0 0($sp) +lw $t1 4($sp) +lw $a0 8($sp) +lw $a1 12($sp) +lw $t2 16($sp) +lw $t3 20($sp) +addiu $sp $sp 24 +jr $ra + +allocate: +addiu $sp $sp -12 +sw $a0 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +li $t0 4 +div $a0 $t0 +mfhi $t1 +sub $t0 $t0 $t1 +add $a0 $a0 $t0 +li $v0 9 +syscall +lw $a0 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +addiu $sp $sp 12 +jr $ra + +copy: +addiu $sp $sp -16 +sw $a0 0($sp) +sw $a1 4($sp) +sw $a2 8($sp) +sw $t0 12($sp) +while_copy: +beq $a2 $zero copy_end +lw $t0 0($a0) +sw $t0 0($a1) +addiu $a0 $a0 4 +addiu $a1 $a1 4 +addi $a2 $a2 -4 +j while_copy +copy_end: +lw $a0 0($sp) +lw $a1 4($sp) +lw $a2 8($sp) +lw $t0 12($sp) +addiu $sp $sp 16 +jr $ra + +read_string: +addiu $sp $sp -28 +sw $ra 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $a2 20($sp) +sw $t2 24($sp) +li $t0 8 +addi $a0 $t0 4 +jal allocate +move $t1 $v0 +move $t2 $zero +while_read_string: +addu $a0 $t1 $t2 +subu $a1 $t0 $t2 +addu $t2 $t2 $a1 +jal read_string_up_to +beq $v0 $zero read_string_not_finished +move $v0 $t1 +j end_read_string +read_string_not_finished: +sll $t0 $t0 1 +addi $a0 $t0 4 +jal allocate +move $a0 $t1 +move $t1 $v0 +move $a1 $v0 +move $a2 $t2 +jal copy +j while_read_string +end_read_string: +lw $ra 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $a2 20($sp) +lw $t2 24($sp) +addiu $sp $sp 28 +jr $ra +read_string_up_to: +addiu $sp $sp -28 +sw $ra 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +sw $t2 12($sp) +sw $t3 16($sp) +sw $t4 20($sp) +sw $t5 24($sp) +move $t0 $a0 +move $t1 $zero +li $t2 10 +addu $t3 $t0 $a1 +addiu $a1 $a1 1 +li $v0 8 +syscall +lw $a0 0($a0) +beq $a0 $zero eol_terminated +li $v0 0 +eol_check: +beq $t0 $t3 read_loop_continue +lb $t1 0($t0) +beq $t1 $t2 eol_terminated +addiu $t0 $t0 1 +j eol_check +eol_terminated: +sb $zero 0($t0) +li $v0 1 +read_loop_continue: +lw $ra 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +lw $t2 12($sp) +lw $t3 16($sp) +lw $t4 20($sp) +lw $t5 24($sp) +addiu $sp $sp 28 +jr $ra + +substr: +addiu $sp $sp -32 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $t3 12($sp) +sw $a0 16($sp) +sw $a1 20($sp) +sw $a2 24($sp) +sw $ra 28($sp) +move $t0 $a0 +add $t0 $t0 $a1 +li $t1 4 +div $a2 $t1 +mfhi $t2 +bne $t2 $zero substr_allign_size +move $t1 $a2 +j substr_new_chunk +substr_allign_size: +sub $t1 $t1 $t2 +add $t1 $t1 $a2 +substr_new_chunk: +move $a0 $t1 +jal allocate +move $t3 $v0 +move $t1 $zero +while_substr_copy: +beq $t1 $a2 substr_end +lb $t2 0($t0) +sb $t2 0($t3) +addiu $t0 $t0 1 +addiu $t3 $t3 1 +addiu $t1 $t1 1 +j while_substr_copy +substr_end: +sb $zero 0($t3) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $t3 12($sp) +lw $a0 16($sp) +lw $a1 20($sp) +lw $a2 24($sp) +lw $ra 28($sp) +addiu $sp $sp 32 +jr $ra + +concat: +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $ra 20($sp) +move $t0 $a0 +move $t1 $a1 +addiu $a0 $a2 1 +li $t2 4 +div $a0 $t2 +mfhi $a0 +bne $a0 $zero concat_allign_size +addiu $a0 $a2 1 +j concat_size_allignned +concat_allign_size: +sub $t2 $t2 $a0 +add $a0 $a2 $t2 +addiu $a0 $a0 1 +concat_size_allignned: +jal allocate +move $t2 $v0 +j first_while_concat_copy +first_while_concat_copy: +lb $a0 0($t0) +beq $a0 $zero second_while_concat_copy +sb $a0 0($t2) +addiu $t0 $t0 1 +addiu $t2 $t2 1 +j first_while_concat_copy +second_while_concat_copy: +lb $a0 0($t1) +beq $a0 $zero concat_end +sb $a0 0($t2) +addiu $t1 $t1 1 +addiu $t2 $t2 1 +j second_while_concat_copy +concat_end: +sb $zero 0($t2) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $ra 20($sp) +addiu $sp $sp 24 +jr $ra + +length: +addiu $sp $sp -8 +sw $t0 0($sp) +sw $t1 4($sp) +move $t0 $a0 +move $v0 $zero +while_len: +lb $t1 0($t0) +beq $t1 $zero len_end +addi $v0 $v0 1 +addiu $t0 $t0 1 +j while_len +len_end: +lw $t0 0($sp) +lw $t1 4($sp) +addiu $sp $sp 8 +jr $ra \ No newline at end of file diff --git a/tests/codegen/cells.mips b/tests/codegen/cells.mips new file mode 100644 index 000000000..49d04506e --- /dev/null +++ b/tests/codegen/cells.mips @@ -0,0 +1,2877 @@ +.data +default_str: .asciiz "" +.word 0 +data_1: .asciiz "Object" +.word 0 +data_2: .asciiz "IO" +.word 0 +data_3: .asciiz "String" +.word 0 +data_4: .asciiz "Int" +.word 0 +data_5: .asciiz "Bool" +.word 0 +data_6: .asciiz "CellularAutomaton" +.word 0 +data_7: .asciiz "Main" +.word 0 +data_8: .asciiz " +" +.word 0 +data_9: .asciiz "" +.word 0 +data_10: .asciiz "Abort called from class " +.word 0 +data_11: .asciiz "Index out of range exception" +.word 0 +data_12: .asciiz "\n" +.word 0 +data_13: .asciiz "Function call in a void instance" +.word 0 +data_14: .asciiz "Function call in a void instance" +.word 0 +data_15: .asciiz "Function call in a void instance" +.word 0 +data_16: .asciiz "Function call in a void instance" +.word 0 +data_17: .asciiz "Function call in a void instance" +.word 0 +data_18: .asciiz "Function call in a void instance" +.word 0 +data_19: .asciiz "Function call in a void instance" +.word 0 +data_20: .asciiz "Function call in a void instance" +.word 0 +data_21: .asciiz "Function call in a void instance" +.word 0 +data_22: .asciiz "Function call in a void instance" +.word 0 +data_23: .asciiz "Function call in a void instance" +.word 0 +data_24: .asciiz "X" +.word 0 +data_25: .asciiz "Function call in a void instance" +.word 0 +data_26: .asciiz "X" +.word 0 +data_27: .asciiz "Function call in a void instance" +.word 0 +data_28: .asciiz "X" +.word 0 +data_29: .asciiz "." +.word 0 +data_30: .asciiz "X" +.word 0 +data_31: .asciiz "Function call in a void instance" +.word 0 +data_32: .asciiz "Function call in a void instance" +.word 0 +data_33: .asciiz "Function call in a void instance" +.word 0 +data_34: .asciiz " X " +.word 0 +data_35: .asciiz "Function call in a void instance" +.word 0 +data_36: .asciiz "Function call in a void instance" +.word 0 +data_37: .asciiz "Function call in a void instance" +.word 0 +data_38: .asciiz "Function call in a void instance" + + +types_table: +.word data_1 +.word data_2 +.word data_3 +.word data_4 +.word data_5 +.word data_6 +.word data_7 + +prototype_table: + .word type_1_prototype + .word type_2_prototype + .word type_3_prototype + .word type_4_prototype + .word type_5_prototype + .word type_6_prototype + .word type_7_prototype + +type_1_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __ctor_Object + +type_1_prototype: +.word 0 +.word 4 +.word type_1_dispatch +.word -1 + + +type_2_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word function_out_string_at_IO +.word function_out_int_at_IO +.word function_in_string_at_IO +.word function_in_int_at_IO +.word __ctor_IO + +type_2_prototype: +.word 1 +.word 4 +.word type_2_dispatch +.word -1 + + +type_3_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word function_length_at_String +.word function_concat_at_String +.word function_substr_at_String +.word __ctor_String + +type_3_prototype: +.word 2 +.word 6 +.word type_3_dispatch +.word 0 +.word 0 +.word -1 + + +type_4_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __ctor_Int + +type_4_prototype: +.word 3 +.word 5 +.word type_4_dispatch +.word 0 +.word -1 + + +type_5_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __ctor_Bool + +type_5_prototype: +.word 4 +.word 5 +.word type_5_dispatch +.word 0 +.word -1 + + +type_6_dispatch: +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_cell_at_CellularAutomaton +.word function_cell_at_next_evolution_at_CellularAutomaton +.word function_cell_left_neighbor_at_CellularAutomaton +.word function_cell_right_neighbor_at_CellularAutomaton +.word function_evolve_at_CellularAutomaton +.word function_init_at_CellularAutomaton +.word function_num_cells_at_CellularAutomaton +.word function_print_at_CellularAutomaton +.word __attributes_ctor_CellularAutomaton +.word __ctor_CellularAutomaton + +type_6_prototype: +.word 5 +.word 5 +.word type_6_dispatch +.word 0 +.word -1 + + +type_7_dispatch: +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_main_at_Main +.word __attributes_ctor_Main +.word __ctor_Main + +type_7_prototype: +.word 6 +.word 5 +.word type_7_dispatch +.word 0 +.word -1 + + +.text +.globl main +__ctor_Object: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 0 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_abort_at_Object: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +la $t0 data_10 +sw $t0 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +la $t0 data_8 +sw $t0 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +li $v0 10 +syscall +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_type_name_at_Object: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_copy_at_Object: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $a0 4($t0) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t0 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 1 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_out_string_at_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +lw $v0 4($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_out_int_at_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -12($fp) +li $v0 1 +lw $a0 -12($fp) +syscall +lw $v0 4($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_in_string_at_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +jal read_string +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_in_int_at_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $v0 5 +syscall +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_String: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +li $t0 2 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -20($fp) +lw $t0 -20($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $a0 0($fp) +jal length +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -20($fp) +lw $t1 -12($fp) +sw $t1 16($t0) +lw $v0 -20($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_length_at_String: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 16($t0) +sw $t1 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_concat_at_String: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -24 +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -32($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 4($fp) +lw $t1 16($t0) +sw $t1 -24($fp) +lw $t0 0($fp) +lw $t1 16($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 12($t0) +sw $t1 -24($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 -20($fp) +add $t0 $t0 $t1 +sw $t0 -24($fp) +lw $a0 -32($fp) +lw $a1 -28($fp) +lw $a2 -24($fp) +jal concat +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 24 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_substr_at_String: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -36 +lw $t0 8($fp) +lw $t1 12($t0) +sw $t1 -16($fp) +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -40($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -36($fp) +lw $t0 8($fp) +lw $t1 16($t0) +sw $t1 -32($fp) +lw $t0 -32($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 -36($fp) +lw $t1 -40($fp) +add $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -28($fp) +lw $t1 -24($fp) +slt $t1 $t0 $t1 +sw $t1 -20($fp) +lw $t0 -20($fp) +bne $t0 $zero label_1 +j label_2 +label_1: +li $v0 4 +la $a0 data_11 +syscall +li $v0 10 +syscall +label_2: +lw $a0 -16($fp) +lw $a1 -40($fp) +lw $a2 -36($fp) +jal substr +sw $v0 -44($fp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 36 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_Int: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 3 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_Bool: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 4 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +jal __ctor_Main +sw $v0 -12($fp) +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal function_main_at_Main +addi $sp $sp 4 +sw $v0 -12($fp) +li $v0 0 +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +li $v0 10 +syscall + +__attributes_ctor_CellularAutomaton: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +la $t0 data_9 +sw $t0 -12($fp) +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 0($fp) +lw $t1 -12($fp) +sw $t1 12($t0) +lw $v0 0($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_init_at_CellularAutomaton: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp 0 +lw $t0 0($fp) +lw $t1 4($fp) +addi $t1 $t1 12 +sw $t0 0($t1) +lw $v0 4($fp) +addi $sp $sp 0 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_print_at_CellularAutomaton: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -24 +la $t0 data_12 +sw $t0 -32($fp) +lw $t0 -32($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_3 +j label_4 +label_3: +li $v0 4 +la $a0 data_13 +syscall +li $v0 10 +syscall +label_4: +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 16($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -20($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_5 +j label_6 +label_5: +li $v0 4 +la $a0 data_14 +syscall +li $v0 10 +syscall +label_6: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $v0 0($fp) +addi $sp $sp 24 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_num_cells_at_CellularAutomaton: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_7 +j label_8 +label_7: +li $v0 4 +la $a0 data_15 +syscall +li $v0 10 +syscall +label_8: +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_cell_at_CellularAutomaton: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t4 4($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_9 +j label_10 +label_9: +li $v0 4 +la $a0 data_16 +syscall +li $v0 10 +syscall +label_10: +lw $t4 4($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 4($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_cell_left_neighbor_at_CellularAutomaton: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -112 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -76($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -104($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -96($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -88($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -92($fp) +lw $t0 -104($fp) +lw $t1 -96($fp) +seq $t0 $t0 $t1 +sw $t0 -84($fp) +lw $t0 -84($fp) +bne $t0 $zero label_11 +lw $t0 -104($fp) +lw $t1 -88($fp) +seq $t0 $t0 $t1 +sw $t0 -84($fp) +lw $t0 -84($fp) +bne $t0 $zero label_12 +lw $t0 -104($fp) +lw $t1 -92($fp) +seq $t0 $t0 $t1 +sw $t0 -84($fp) +lw $t0 -84($fp) +bne $t0 $zero label_13 +lw $t0 0($fp) +lw $t1 -76($fp) +seq $t0 $t0 $t1 +sw $t0 -80($fp) +j label_14 +label_11: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -108($fp) +lw $t0 -76($fp) +lw $t1 12($t0) +sw $t1 -100($fp) +lw $t0 -108($fp) +lw $t1 -100($fp) +seq $t0 $t0 $t1 +sw $t0 -80($fp) +j label_14 +label_12: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -108($fp) +lw $t0 -76($fp) +lw $t1 12($t0) +sw $t1 -100($fp) +lw $t0 -108($fp) +move $a0 $t0 +lw $t0 -100($fp) +move $a1 $t0 +jal equal_str +sw $v0 -80($fp) +j label_14 +label_13: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -108($fp) +lw $t0 -76($fp) +lw $t1 12($t0) +sw $t1 -100($fp) +lw $t0 -108($fp) +lw $t1 -100($fp) +seq $t0 $t0 $t1 +sw $t0 -80($fp) +j label_14 +label_14: +lw $t0 -80($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -112($fp) +lw $t0 -112($fp) +lw $t1 12($t0) +sw $t1 -116($fp) +lw $t0 -116($fp) +bne $t0 $zero label_17 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -68($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -56($fp) +lw $t0 -56($fp) +lw $t1 12($t0) +sw $t1 -64($fp) +lw $t0 -68($fp) +lw $t1 -64($fp) +sub $t0 $t0 $t1 +sw $t0 -60($fp) +lw $t0 -60($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -72($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -52($fp) +lw $t0 -52($fp) +bne $t0 $zero label_15 +j label_16 +label_15: +li $v0 4 +la $a0 data_17 +syscall +li $v0 10 +syscall +label_16: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -72($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -48($fp) +lw $t0 -48($fp) +sw $t0 -120($fp) +j label_22 +label_17: +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -28($fp) +lw $t0 -28($fp) +bne $t0 $zero label_18 +j label_19 +label_18: +li $v0 4 +la $a0 data_18 +syscall +li $v0 10 +syscall +label_19: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 52($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -24($fp) +lw $t0 -24($fp) +lw $t1 12($t0) +sw $t1 -40($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -36($fp) +lw $t0 -40($fp) +lw $t1 -36($fp) +sub $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -44($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_20 +j label_21 +label_20: +li $v0 4 +la $a0 data_19 +syscall +li $v0 10 +syscall +label_21: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -120($fp) +label_22: +lw $v0 -120($fp) +addi $sp $sp 112 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_cell_right_neighbor_at_CellularAutomaton: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -112 +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -60($fp) +lw $t0 -60($fp) +bne $t0 $zero label_23 +j label_24 +label_23: +li $v0 4 +la $a0 data_20 +syscall +li $v0 10 +syscall +label_24: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 52($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -56($fp) +lw $t0 -56($fp) +lw $t1 12($t0) +sw $t1 -72($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -52($fp) +lw $t0 -52($fp) +lw $t1 12($t0) +sw $t1 -68($fp) +lw $t0 -72($fp) +lw $t1 -68($fp) +sub $t0 $t0 $t1 +sw $t0 -64($fp) +lw $t0 -64($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -76($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -104($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -96($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -88($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -92($fp) +lw $t0 -104($fp) +lw $t1 -96($fp) +seq $t0 $t0 $t1 +sw $t0 -84($fp) +lw $t0 -84($fp) +bne $t0 $zero label_25 +lw $t0 -104($fp) +lw $t1 -88($fp) +seq $t0 $t0 $t1 +sw $t0 -84($fp) +lw $t0 -84($fp) +bne $t0 $zero label_26 +lw $t0 -104($fp) +lw $t1 -92($fp) +seq $t0 $t0 $t1 +sw $t0 -84($fp) +lw $t0 -84($fp) +bne $t0 $zero label_27 +lw $t0 0($fp) +lw $t1 -76($fp) +seq $t0 $t0 $t1 +sw $t0 -80($fp) +j label_28 +label_25: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -108($fp) +lw $t0 -76($fp) +lw $t1 12($t0) +sw $t1 -100($fp) +lw $t0 -108($fp) +lw $t1 -100($fp) +seq $t0 $t0 $t1 +sw $t0 -80($fp) +j label_28 +label_26: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -108($fp) +lw $t0 -76($fp) +lw $t1 12($t0) +sw $t1 -100($fp) +lw $t0 -108($fp) +move $a0 $t0 +lw $t0 -100($fp) +move $a1 $t0 +jal equal_str +sw $v0 -80($fp) +j label_28 +label_27: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -108($fp) +lw $t0 -76($fp) +lw $t1 12($t0) +sw $t1 -100($fp) +lw $t0 -108($fp) +lw $t1 -100($fp) +seq $t0 $t0 $t1 +sw $t0 -80($fp) +j label_28 +label_28: +lw $t0 -80($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -112($fp) +lw $t0 -112($fp) +lw $t1 12($t0) +sw $t1 -116($fp) +lw $t0 -116($fp) +bne $t0 $zero label_31 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -44($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -32($fp) +lw $t0 -32($fp) +lw $t1 12($t0) +sw $t1 -40($fp) +lw $t0 -44($fp) +lw $t1 -40($fp) +add $t0 $t0 $t1 +sw $t0 -36($fp) +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -48($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -28($fp) +lw $t0 -28($fp) +bne $t0 $zero label_29 +j label_30 +label_29: +li $v0 4 +la $a0 data_21 +syscall +li $v0 10 +syscall +label_30: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -48($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -24($fp) +lw $t0 -24($fp) +sw $t0 -120($fp) +j label_34 +label_31: +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_32 +j label_33 +label_32: +li $v0 4 +la $a0 data_22 +syscall +li $v0 10 +syscall +label_33: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -120($fp) +label_34: +lw $v0 -120($fp) +addi $sp $sp 112 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_cell_at_next_evolution_at_CellularAutomaton: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -300 +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -188($fp) +lw $t0 -188($fp) +bne $t0 $zero label_35 +j label_36 +label_35: +li $v0 4 +la $a0 data_23 +syscall +li $v0 10 +syscall +label_36: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -184($fp) +la $t0 data_24 +sw $t0 -180($fp) +lw $t0 -180($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -176($fp) +lw $t0 -184($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -216($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -208($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -200($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -204($fp) +lw $t0 -216($fp) +lw $t1 -208($fp) +seq $t0 $t0 $t1 +sw $t0 -196($fp) +lw $t0 -196($fp) +bne $t0 $zero label_37 +lw $t0 -216($fp) +lw $t1 -200($fp) +seq $t0 $t0 $t1 +sw $t0 -196($fp) +lw $t0 -196($fp) +bne $t0 $zero label_38 +lw $t0 -216($fp) +lw $t1 -204($fp) +seq $t0 $t0 $t1 +sw $t0 -196($fp) +lw $t0 -196($fp) +bne $t0 $zero label_39 +lw $t0 -184($fp) +lw $t1 -176($fp) +seq $t0 $t0 $t1 +sw $t0 -192($fp) +j label_40 +label_37: +lw $t0 -184($fp) +lw $t1 12($t0) +sw $t1 -220($fp) +lw $t0 -176($fp) +lw $t1 12($t0) +sw $t1 -212($fp) +lw $t0 -220($fp) +lw $t1 -212($fp) +seq $t0 $t0 $t1 +sw $t0 -192($fp) +j label_40 +label_38: +lw $t0 -184($fp) +lw $t1 12($t0) +sw $t1 -220($fp) +lw $t0 -176($fp) +lw $t1 12($t0) +sw $t1 -212($fp) +lw $t0 -220($fp) +move $a0 $t0 +lw $t0 -212($fp) +move $a1 $t0 +jal equal_str +sw $v0 -192($fp) +j label_40 +label_39: +lw $t0 -184($fp) +lw $t1 12($t0) +sw $t1 -220($fp) +lw $t0 -176($fp) +lw $t1 12($t0) +sw $t1 -212($fp) +lw $t0 -220($fp) +lw $t1 -212($fp) +seq $t0 $t0 $t1 +sw $t0 -192($fp) +j label_40 +label_40: +lw $t0 -192($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -224($fp) +lw $t0 -224($fp) +lw $t1 12($t0) +sw $t1 -228($fp) +lw $t0 -228($fp) +bne $t0 $zero label_41 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -172($fp) +lw $t0 -172($fp) +sw $t0 -232($fp) +j label_42 +label_41: +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -168($fp) +lw $t0 -168($fp) +sw $t0 -232($fp) +label_42: +lw $t0 -232($fp) +lw $t1 12($t0) +sw $t1 -244($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -120($fp) +lw $t0 -120($fp) +bne $t0 $zero label_43 +j label_44 +label_43: +li $v0 4 +la $a0 data_25 +syscall +li $v0 10 +syscall +label_44: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 36($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -116($fp) +la $t0 data_26 +sw $t0 -112($fp) +lw $t0 -112($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -108($fp) +lw $t0 -116($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -148($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -140($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -132($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -136($fp) +lw $t0 -148($fp) +lw $t1 -140($fp) +seq $t0 $t0 $t1 +sw $t0 -128($fp) +lw $t0 -128($fp) +bne $t0 $zero label_45 +lw $t0 -148($fp) +lw $t1 -132($fp) +seq $t0 $t0 $t1 +sw $t0 -128($fp) +lw $t0 -128($fp) +bne $t0 $zero label_46 +lw $t0 -148($fp) +lw $t1 -136($fp) +seq $t0 $t0 $t1 +sw $t0 -128($fp) +lw $t0 -128($fp) +bne $t0 $zero label_47 +lw $t0 -116($fp) +lw $t1 -108($fp) +seq $t0 $t0 $t1 +sw $t0 -124($fp) +j label_48 +label_45: +lw $t0 -116($fp) +lw $t1 12($t0) +sw $t1 -152($fp) +lw $t0 -108($fp) +lw $t1 12($t0) +sw $t1 -144($fp) +lw $t0 -152($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -124($fp) +j label_48 +label_46: +lw $t0 -116($fp) +lw $t1 12($t0) +sw $t1 -152($fp) +lw $t0 -108($fp) +lw $t1 12($t0) +sw $t1 -144($fp) +lw $t0 -152($fp) +move $a0 $t0 +lw $t0 -144($fp) +move $a1 $t0 +jal equal_str +sw $v0 -124($fp) +j label_48 +label_47: +lw $t0 -116($fp) +lw $t1 12($t0) +sw $t1 -152($fp) +lw $t0 -108($fp) +lw $t1 12($t0) +sw $t1 -144($fp) +lw $t0 -152($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -124($fp) +j label_48 +label_48: +lw $t0 -124($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -156($fp) +lw $t0 -156($fp) +lw $t1 12($t0) +sw $t1 -160($fp) +lw $t0 -160($fp) +bne $t0 $zero label_49 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -104($fp) +lw $t0 -104($fp) +sw $t0 -164($fp) +j label_50 +label_49: +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -100($fp) +lw $t0 -100($fp) +sw $t0 -164($fp) +label_50: +lw $t0 -164($fp) +lw $t1 12($t0) +sw $t1 -240($fp) +lw $t0 -244($fp) +lw $t1 -240($fp) +add $t0 $t0 $t1 +sw $t0 -236($fp) +lw $t0 -236($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -248($fp) +lw $t0 -248($fp) +lw $t1 12($t0) +sw $t1 -260($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -52($fp) +lw $t0 -52($fp) +bne $t0 $zero label_51 +j label_52 +label_51: +li $v0 4 +la $a0 data_27 +syscall +li $v0 10 +syscall +label_52: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 40($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -48($fp) +la $t0 data_28 +sw $t0 -44($fp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -40($fp) +lw $t0 -48($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -80($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -72($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -64($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -68($fp) +lw $t0 -80($fp) +lw $t1 -72($fp) +seq $t0 $t0 $t1 +sw $t0 -60($fp) +lw $t0 -60($fp) +bne $t0 $zero label_53 +lw $t0 -80($fp) +lw $t1 -64($fp) +seq $t0 $t0 $t1 +sw $t0 -60($fp) +lw $t0 -60($fp) +bne $t0 $zero label_54 +lw $t0 -80($fp) +lw $t1 -68($fp) +seq $t0 $t0 $t1 +sw $t0 -60($fp) +lw $t0 -60($fp) +bne $t0 $zero label_55 +lw $t0 -48($fp) +lw $t1 -40($fp) +seq $t0 $t0 $t1 +sw $t0 -56($fp) +j label_56 +label_53: +lw $t0 -48($fp) +lw $t1 12($t0) +sw $t1 -84($fp) +lw $t0 -40($fp) +lw $t1 12($t0) +sw $t1 -76($fp) +lw $t0 -84($fp) +lw $t1 -76($fp) +seq $t0 $t0 $t1 +sw $t0 -56($fp) +j label_56 +label_54: +lw $t0 -48($fp) +lw $t1 12($t0) +sw $t1 -84($fp) +lw $t0 -40($fp) +lw $t1 12($t0) +sw $t1 -76($fp) +lw $t0 -84($fp) +move $a0 $t0 +lw $t0 -76($fp) +move $a1 $t0 +jal equal_str +sw $v0 -56($fp) +j label_56 +label_55: +lw $t0 -48($fp) +lw $t1 12($t0) +sw $t1 -84($fp) +lw $t0 -40($fp) +lw $t1 12($t0) +sw $t1 -76($fp) +lw $t0 -84($fp) +lw $t1 -76($fp) +seq $t0 $t0 $t1 +sw $t0 -56($fp) +j label_56 +label_56: +lw $t0 -56($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -88($fp) +lw $t0 -88($fp) +lw $t1 12($t0) +sw $t1 -92($fp) +lw $t0 -92($fp) +bne $t0 $zero label_57 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 -36($fp) +sw $t0 -96($fp) +j label_58 +label_57: +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -32($fp) +lw $t0 -32($fp) +sw $t0 -96($fp) +label_58: +lw $t0 -96($fp) +lw $t1 12($t0) +sw $t1 -256($fp) +lw $t0 -260($fp) +lw $t1 -256($fp) +add $t0 $t0 $t1 +sw $t0 -252($fp) +lw $t0 -252($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -264($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t0 -264($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -292($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -284($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -276($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -280($fp) +lw $t0 -292($fp) +lw $t1 -284($fp) +seq $t0 $t0 $t1 +sw $t0 -272($fp) +lw $t0 -272($fp) +bne $t0 $zero label_59 +lw $t0 -292($fp) +lw $t1 -276($fp) +seq $t0 $t0 $t1 +sw $t0 -272($fp) +lw $t0 -272($fp) +bne $t0 $zero label_60 +lw $t0 -292($fp) +lw $t1 -280($fp) +seq $t0 $t0 $t1 +sw $t0 -272($fp) +lw $t0 -272($fp) +bne $t0 $zero label_61 +lw $t0 -264($fp) +lw $t1 -28($fp) +seq $t0 $t0 $t1 +sw $t0 -268($fp) +j label_62 +label_59: +lw $t0 -264($fp) +lw $t1 12($t0) +sw $t1 -296($fp) +lw $t0 -28($fp) +lw $t1 12($t0) +sw $t1 -288($fp) +lw $t0 -296($fp) +lw $t1 -288($fp) +seq $t0 $t0 $t1 +sw $t0 -268($fp) +j label_62 +label_60: +lw $t0 -264($fp) +lw $t1 12($t0) +sw $t1 -296($fp) +lw $t0 -28($fp) +lw $t1 12($t0) +sw $t1 -288($fp) +lw $t0 -296($fp) +move $a0 $t0 +lw $t0 -288($fp) +move $a1 $t0 +jal equal_str +sw $v0 -268($fp) +j label_62 +label_61: +lw $t0 -264($fp) +lw $t1 12($t0) +sw $t1 -296($fp) +lw $t0 -28($fp) +lw $t1 12($t0) +sw $t1 -288($fp) +lw $t0 -296($fp) +lw $t1 -288($fp) +seq $t0 $t0 $t1 +sw $t0 -268($fp) +j label_62 +label_62: +lw $t0 -268($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -300($fp) +lw $t0 -300($fp) +lw $t1 12($t0) +sw $t1 -304($fp) +lw $t0 -304($fp) +bne $t0 $zero label_63 +la $t0 data_29 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 -20($fp) +sw $t0 -308($fp) +j label_64 +label_63: +la $t0 data_30 +sw $t0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -308($fp) +label_64: +lw $v0 -308($fp) +addi $sp $sp 300 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_evolve_at_CellularAutomaton: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -76 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -84($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_65 +j label_66 +label_65: +li $v0 4 +la $a0 data_31 +syscall +li $v0 10 +syscall +label_66: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 52($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -72($fp) +lw $t0 -72($fp) +sw $t0 -80($fp) +la $t0 data_9 +sw $t0 -68($fp) +lw $t0 -68($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -68($fp) +label_67: +lw $t0 -84($fp) +lw $t1 12($t0) +sw $t1 -56($fp) +lw $t0 -80($fp) +lw $t1 12($t0) +sw $t1 -52($fp) +lw $t0 -56($fp) +lw $t1 -52($fp) +slt $t1 $t0 $t1 +sw $t1 -48($fp) +lw $t0 -48($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -60($fp) +lw $t0 -60($fp) +lw $t1 12($t0) +sw $t1 -64($fp) +lw $t0 -64($fp) +bne $t0 $zero label_68 +j label_73 +label_68: +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -44($fp) +lw $t0 -44($fp) +bne $t0 $zero label_69 +j label_70 +label_69: +li $v0 4 +la $a0 data_32 +syscall +li $v0 10 +syscall +label_70: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -84($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -40($fp) +lw $t0 -68($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -36($fp) +lw $t0 -36($fp) +bne $t0 $zero label_71 +j label_72 +label_71: +li $v0 4 +la $a0 data_33 +syscall +li $v0 10 +syscall +label_72: +lw $t0 -68($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -40($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -68($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 16($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -32($fp) +lw $t0 -32($fp) +sw $t0 -68($fp) +lw $t0 -84($fp) +lw $t1 12($t0) +sw $t1 -24($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 12($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 -20($fp) +add $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t0 -28($fp) +sw $t0 -84($fp) +j label_67 +label_73: +lw $t0 -68($fp) +lw $t1 0($fp) +addi $t1 $t1 12 +sw $t0 0($t1) +lw $v0 0($fp) +addi $sp $sp 76 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_CellularAutomaton: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 5 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_CellularAutomaton +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__attributes_ctor_Main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 -12($fp) +sw $t1 12($t0) +lw $v0 0($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_main_at_Main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -96 +la $t0 data_34 +sw $t0 -104($fp) +lw $t0 -104($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -100($fp) +jal __ctor_CellularAutomaton +sw $v0 -96($fp) +lw $t0 -96($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -92($fp) +lw $t0 -92($fp) +bne $t0 $zero label_74 +j label_75 +label_74: +li $v0 4 +la $a0 data_35 +syscall +li $v0 10 +syscall +label_75: +lw $t0 -96($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -100($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -96($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 48($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -88($fp) +lw $t0 -88($fp) +lw $t1 0($fp) +addi $t1 $t1 12 +sw $t0 0($t1) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -84($fp) +lw $t0 -84($fp) +bne $t0 $zero label_76 +j label_77 +label_76: +li $v0 4 +la $a0 data_36 +syscall +li $v0 10 +syscall +label_77: +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 56($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -80($fp) +li $t0 20 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -72($fp) +lw $t0 -72($fp) +sw $t0 -76($fp) +label_78: +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -48($fp) +lw $t0 -48($fp) +lw $t1 12($t0) +sw $t1 -60($fp) +lw $t0 -76($fp) +lw $t1 12($t0) +sw $t1 -56($fp) +lw $t0 -60($fp) +lw $t1 -56($fp) +slt $t1 $t0 $t1 +sw $t1 -52($fp) +lw $t0 -52($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -64($fp) +lw $t0 -64($fp) +lw $t1 12($t0) +sw $t1 -68($fp) +lw $t0 -68($fp) +bne $t0 $zero label_79 +j label_84 +label_79: +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -44($fp) +lw $t0 -44($fp) +bne $t0 $zero label_80 +j label_81 +label_80: +li $v0 4 +la $a0 data_37 +syscall +li $v0 10 +syscall +label_81: +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 44($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -40($fp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -36($fp) +lw $t0 -36($fp) +bne $t0 $zero label_82 +j label_83 +label_82: +li $v0 4 +la $a0 data_38 +syscall +li $v0 10 +syscall +label_83: +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 56($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -32($fp) +lw $t0 -76($fp) +lw $t1 12($t0) +sw $t1 -24($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 12($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 -20($fp) +sub $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t0 -28($fp) +sw $t0 -76($fp) +j label_78 +label_84: +lw $v0 0($fp) +addi $sp $sp 96 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_Main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 6 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_Main +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + + + +equal_str: +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $a0 8($sp) +sw $a1 12($sp) +sw $t2 16($sp) +sw $t3 20($sp) +move $t0 $a0 +move $t1 $a1 +while_equal_str: +lb $t2 0($t0) +lb $t3 0($t1) +bne $t2 $t3 equal_str_different_strings +beq $t2 $zero first_end_equal_str +beq $t3 $zero second_end_equal_str +addi $t1 $t1 1 +addi $t0 $t0 1 +j while_equal_str +equal_str_different_strings: +move $v0 $zero +j equal_str_end +first_end_equal_str: +beq $t3 $zero second_end_equal_str +move $v0 $zero +j equal_str_end +second_end_equal_str: +li $v0 1 +equal_str_end: +lw $t0 0($sp) +lw $t1 4($sp) +lw $a0 8($sp) +lw $a1 12($sp) +lw $t2 16($sp) +lw $t3 20($sp) +addiu $sp $sp 24 +jr $ra + +allocate: +addiu $sp $sp -12 +sw $a0 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +li $t0 4 +div $a0 $t0 +mfhi $t1 +sub $t0 $t0 $t1 +add $a0 $a0 $t0 +li $v0 9 +syscall +lw $a0 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +addiu $sp $sp 12 +jr $ra + +copy: +addiu $sp $sp -16 +sw $a0 0($sp) +sw $a1 4($sp) +sw $a2 8($sp) +sw $t0 12($sp) +while_copy: +beq $a2 $zero copy_end +lw $t0 0($a0) +sw $t0 0($a1) +addiu $a0 $a0 4 +addiu $a1 $a1 4 +addi $a2 $a2 -4 +j while_copy +copy_end: +lw $a0 0($sp) +lw $a1 4($sp) +lw $a2 8($sp) +lw $t0 12($sp) +addiu $sp $sp 16 +jr $ra + +read_string: +addiu $sp $sp -28 +sw $ra 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $a2 20($sp) +sw $t2 24($sp) +li $t0 8 +addi $a0 $t0 4 +jal allocate +move $t1 $v0 +move $t2 $zero +while_read_string: +addu $a0 $t1 $t2 +subu $a1 $t0 $t2 +addu $t2 $t2 $a1 +jal read_string_up_to +beq $v0 $zero read_string_not_finished +move $v0 $t1 +j end_read_string +read_string_not_finished: +sll $t0 $t0 1 +addi $a0 $t0 4 +jal allocate +move $a0 $t1 +move $t1 $v0 +move $a1 $v0 +move $a2 $t2 +jal copy +j while_read_string +end_read_string: +lw $ra 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $a2 20($sp) +lw $t2 24($sp) +addiu $sp $sp 28 +jr $ra +read_string_up_to: +addiu $sp $sp -28 +sw $ra 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +sw $t2 12($sp) +sw $t3 16($sp) +sw $t4 20($sp) +sw $t5 24($sp) +move $t0 $a0 +move $t1 $zero +li $t2 10 +addu $t3 $t0 $a1 +addiu $a1 $a1 1 +li $v0 8 +syscall +lw $a0 0($a0) +beq $a0 $zero eol_terminated +li $v0 0 +eol_check: +beq $t0 $t3 read_loop_continue +lb $t1 0($t0) +beq $t1 $t2 eol_terminated +addiu $t0 $t0 1 +j eol_check +eol_terminated: +sb $zero 0($t0) +li $v0 1 +read_loop_continue: +lw $ra 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +lw $t2 12($sp) +lw $t3 16($sp) +lw $t4 20($sp) +lw $t5 24($sp) +addiu $sp $sp 28 +jr $ra + +substr: +addiu $sp $sp -32 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $t3 12($sp) +sw $a0 16($sp) +sw $a1 20($sp) +sw $a2 24($sp) +sw $ra 28($sp) +move $t0 $a0 +add $t0 $t0 $a1 +li $t1 4 +div $a2 $t1 +mfhi $t2 +bne $t2 $zero substr_allign_size +move $t1 $a2 +j substr_new_chunk +substr_allign_size: +sub $t1 $t1 $t2 +add $t1 $t1 $a2 +substr_new_chunk: +move $a0 $t1 +jal allocate +move $t3 $v0 +move $t1 $zero +while_substr_copy: +beq $t1 $a2 substr_end +lb $t2 0($t0) +sb $t2 0($t3) +addiu $t0 $t0 1 +addiu $t3 $t3 1 +addiu $t1 $t1 1 +j while_substr_copy +substr_end: +sb $zero 0($t3) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $t3 12($sp) +lw $a0 16($sp) +lw $a1 20($sp) +lw $a2 24($sp) +lw $ra 28($sp) +addiu $sp $sp 32 +jr $ra + +concat: +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $ra 20($sp) +move $t0 $a0 +move $t1 $a1 +addiu $a0 $a2 1 +li $t2 4 +div $a0 $t2 +mfhi $a0 +bne $a0 $zero concat_allign_size +addiu $a0 $a2 1 +j concat_size_allignned +concat_allign_size: +sub $t2 $t2 $a0 +add $a0 $a2 $t2 +addiu $a0 $a0 1 +concat_size_allignned: +jal allocate +move $t2 $v0 +j first_while_concat_copy +first_while_concat_copy: +lb $a0 0($t0) +beq $a0 $zero second_while_concat_copy +sb $a0 0($t2) +addiu $t0 $t0 1 +addiu $t2 $t2 1 +j first_while_concat_copy +second_while_concat_copy: +lb $a0 0($t1) +beq $a0 $zero concat_end +sb $a0 0($t2) +addiu $t1 $t1 1 +addiu $t2 $t2 1 +j second_while_concat_copy +concat_end: +sb $zero 0($t2) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $ra 20($sp) +addiu $sp $sp 24 +jr $ra + +length: +addiu $sp $sp -8 +sw $t0 0($sp) +sw $t1 4($sp) +move $t0 $a0 +move $v0 $zero +while_len: +lb $t1 0($t0) +beq $t1 $zero len_end +addi $v0 $v0 1 +addiu $t0 $t0 1 +j while_len +len_end: +lw $t0 0($sp) +lw $t1 4($sp) +addiu $sp $sp 8 +jr $ra \ No newline at end of file diff --git a/tests/codegen/complex.mips b/tests/codegen/complex.mips new file mode 100644 index 000000000..4e2334a2d --- /dev/null +++ b/tests/codegen/complex.mips @@ -0,0 +1,2525 @@ +.data +default_str: .asciiz "" +.word 0 +data_1: .asciiz "Object" +.word 0 +data_2: .asciiz "IO" +.word 0 +data_3: .asciiz "String" +.word 0 +data_4: .asciiz "Int" +.word 0 +data_5: .asciiz "Bool" +.word 0 +data_6: .asciiz "Main" +.word 0 +data_7: .asciiz "Complex" +.word 0 +data_8: .asciiz " +" +.word 0 +data_9: .asciiz "" +.word 0 +data_10: .asciiz "Abort called from class " +.word 0 +data_11: .asciiz "Index out of range exception" +.word 0 +data_12: .asciiz "Function call in a void instance" +.word 0 +data_13: .asciiz "Function call in a void instance" +.word 0 +data_14: .asciiz "Function call in a void instance" +.word 0 +data_15: .asciiz "Function call in a void instance" +.word 0 +data_16: .asciiz "=(\n" +.word 0 +data_17: .asciiz "Function call in a void instance" +.word 0 +data_18: .asciiz "=)\n" +.word 0 +data_19: .asciiz "Function call in a void instance" +.word 0 +data_20: .asciiz "I" +.word 0 +data_21: .asciiz "+" +.word 0 +data_22: .asciiz "Function call in a void instance" +.word 0 +data_23: .asciiz "Function call in a void instance" +.word 0 +data_24: .asciiz "Function call in a void instance" +.word 0 +data_25: .asciiz "Function call in a void instance" +.word 0 +data_26: .asciiz "Function call in a void instance" + + +types_table: +.word data_1 +.word data_2 +.word data_3 +.word data_4 +.word data_5 +.word data_6 +.word data_7 + +prototype_table: + .word type_1_prototype + .word type_2_prototype + .word type_3_prototype + .word type_4_prototype + .word type_5_prototype + .word type_6_prototype + .word type_7_prototype + +type_1_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __ctor_Object + +type_1_prototype: +.word 0 +.word 4 +.word type_1_dispatch +.word -1 + + +type_2_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word function_out_string_at_IO +.word function_out_int_at_IO +.word function_in_string_at_IO +.word function_in_int_at_IO +.word __ctor_IO + +type_2_prototype: +.word 1 +.word 4 +.word type_2_dispatch +.word -1 + + +type_3_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word function_length_at_String +.word function_concat_at_String +.word function_substr_at_String +.word __ctor_String + +type_3_prototype: +.word 2 +.word 6 +.word type_3_dispatch +.word 0 +.word 0 +.word -1 + + +type_4_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __ctor_Int + +type_4_prototype: +.word 3 +.word 5 +.word type_4_dispatch +.word 0 +.word -1 + + +type_5_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __ctor_Bool + +type_5_prototype: +.word 4 +.word 5 +.word type_5_dispatch +.word 0 +.word -1 + + +type_6_dispatch: +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_main_at_Main +.word __attributes_ctor_Main +.word __ctor_Main + +type_6_prototype: +.word 5 +.word 4 +.word type_6_dispatch +.word -1 + + +type_7_dispatch: +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_init_at_Complex +.word function_print_at_Complex +.word function_reflect_0_at_Complex +.word function_reflect_X_at_Complex +.word function_reflect_Y_at_Complex +.word __attributes_ctor_Complex +.word __ctor_Complex + +type_7_prototype: +.word 6 +.word 6 +.word type_7_dispatch +.word 0 +.word 0 +.word -1 + + +.text +.globl main +__ctor_Object: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 0 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_abort_at_Object: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +la $t0 data_10 +sw $t0 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +la $t0 data_8 +sw $t0 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +li $v0 10 +syscall +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_type_name_at_Object: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_copy_at_Object: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $a0 4($t0) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t0 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 1 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_out_string_at_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +lw $v0 4($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_out_int_at_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -12($fp) +li $v0 1 +lw $a0 -12($fp) +syscall +lw $v0 4($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_in_string_at_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +jal read_string +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_in_int_at_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $v0 5 +syscall +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_String: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +li $t0 2 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -20($fp) +lw $t0 -20($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $a0 0($fp) +jal length +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -20($fp) +lw $t1 -12($fp) +sw $t1 16($t0) +lw $v0 -20($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_length_at_String: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 16($t0) +sw $t1 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_concat_at_String: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -24 +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -32($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 4($fp) +lw $t1 16($t0) +sw $t1 -24($fp) +lw $t0 0($fp) +lw $t1 16($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 12($t0) +sw $t1 -24($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 -20($fp) +add $t0 $t0 $t1 +sw $t0 -24($fp) +lw $a0 -32($fp) +lw $a1 -28($fp) +lw $a2 -24($fp) +jal concat +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 24 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_substr_at_String: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -36 +lw $t0 8($fp) +lw $t1 12($t0) +sw $t1 -16($fp) +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -40($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -36($fp) +lw $t0 8($fp) +lw $t1 16($t0) +sw $t1 -32($fp) +lw $t0 -32($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 -36($fp) +lw $t1 -40($fp) +add $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -28($fp) +lw $t1 -24($fp) +slt $t1 $t0 $t1 +sw $t1 -20($fp) +lw $t0 -20($fp) +bne $t0 $zero label_1 +j label_2 +label_1: +li $v0 4 +la $a0 data_11 +syscall +li $v0 10 +syscall +label_2: +lw $a0 -16($fp) +lw $a1 -40($fp) +lw $a2 -36($fp) +jal substr +sw $v0 -44($fp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 36 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_Int: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 3 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_Bool: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 4 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +jal __ctor_Main +sw $v0 -12($fp) +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal function_main_at_Main +addi $sp $sp 4 +sw $v0 -12($fp) +li $v0 0 +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +li $v0 10 +syscall + +__attributes_ctor_Main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp 0 +lw $v0 0($fp) +addi $sp $sp 0 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_main_at_Main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -124 +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -128($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -124($fp) +jal __ctor_Complex +sw $v0 -120($fp) +lw $t0 -120($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -116($fp) +lw $t0 -116($fp) +bne $t0 $zero label_3 +j label_4 +label_3: +li $v0 4 +la $a0 data_12 +syscall +li $v0 10 +syscall +label_4: +lw $t0 -120($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -128($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -124($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -120($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -112($fp) +lw $t0 -112($fp) +sw $t0 -132($fp) +lw $t0 -132($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -64($fp) +lw $t0 -64($fp) +bne $t0 $zero label_5 +j label_6 +label_5: +li $v0 4 +la $a0 data_13 +syscall +li $v0 10 +syscall +label_6: +lw $t0 -132($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -132($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 40($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -60($fp) +lw $t0 -60($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -56($fp) +lw $t0 -56($fp) +bne $t0 $zero label_7 +j label_8 +label_7: +li $v0 4 +la $a0 data_14 +syscall +li $v0 10 +syscall +label_8: +lw $t0 -60($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -60($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 44($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -52($fp) +lw $t0 -132($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -48($fp) +lw $t0 -48($fp) +bne $t0 $zero label_9 +j label_10 +label_9: +li $v0 4 +la $a0 data_15 +syscall +li $v0 10 +syscall +label_10: +lw $t0 -132($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -132($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 36($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -44($fp) +lw $t0 -52($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -92($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -84($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -76($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -80($fp) +lw $t0 -92($fp) +lw $t1 -84($fp) +seq $t0 $t0 $t1 +sw $t0 -72($fp) +lw $t0 -72($fp) +bne $t0 $zero label_11 +lw $t0 -92($fp) +lw $t1 -76($fp) +seq $t0 $t0 $t1 +sw $t0 -72($fp) +lw $t0 -72($fp) +bne $t0 $zero label_12 +lw $t0 -92($fp) +lw $t1 -80($fp) +seq $t0 $t0 $t1 +sw $t0 -72($fp) +lw $t0 -72($fp) +bne $t0 $zero label_13 +lw $t0 -52($fp) +lw $t1 -44($fp) +seq $t0 $t0 $t1 +sw $t0 -68($fp) +j label_14 +label_11: +lw $t0 -52($fp) +lw $t1 12($t0) +sw $t1 -96($fp) +lw $t0 -44($fp) +lw $t1 12($t0) +sw $t1 -88($fp) +lw $t0 -96($fp) +lw $t1 -88($fp) +seq $t0 $t0 $t1 +sw $t0 -68($fp) +j label_14 +label_12: +lw $t0 -52($fp) +lw $t1 12($t0) +sw $t1 -96($fp) +lw $t0 -44($fp) +lw $t1 12($t0) +sw $t1 -88($fp) +lw $t0 -96($fp) +move $a0 $t0 +lw $t0 -88($fp) +move $a1 $t0 +jal equal_str +sw $v0 -68($fp) +j label_14 +label_13: +lw $t0 -52($fp) +lw $t1 12($t0) +sw $t1 -96($fp) +lw $t0 -44($fp) +lw $t1 12($t0) +sw $t1 -88($fp) +lw $t0 -96($fp) +lw $t1 -88($fp) +seq $t0 $t0 $t1 +sw $t0 -68($fp) +j label_14 +label_14: +lw $t0 -68($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -100($fp) +lw $t0 -100($fp) +lw $t1 12($t0) +sw $t1 -104($fp) +lw $t0 -104($fp) +bne $t0 $zero label_17 +la $t0 data_16 +sw $t0 -40($fp) +lw $t0 -40($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_15 +j label_16 +label_15: +li $v0 4 +la $a0 data_17 +syscall +li $v0 10 +syscall +label_16: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -28($fp) +lw $t0 -28($fp) +sw $t0 -108($fp) +j label_20 +label_17: +la $t0 data_18 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_18 +j label_19 +label_18: +li $v0 4 +la $a0 data_19 +syscall +li $v0 10 +syscall +label_19: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -108($fp) +label_20: +lw $v0 -108($fp) +addi $sp $sp 124 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_Main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 5 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_Main +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__attributes_ctor_Complex: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -16($fp) +lw $t0 0($fp) +lw $t1 -16($fp) +sw $t1 12($t0) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 0($fp) +lw $t1 -12($fp) +sw $t1 16($t0) +lw $v0 0($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_init_at_Complex: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -72 +lw $t4 8($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -72($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -64($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -56($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -60($fp) +lw $t0 -72($fp) +lw $t1 -64($fp) +seq $t0 $t0 $t1 +sw $t0 -52($fp) +lw $t0 -52($fp) +bne $t0 $zero label_21 +lw $t0 -72($fp) +lw $t1 -56($fp) +seq $t0 $t0 $t1 +sw $t0 -52($fp) +lw $t0 -52($fp) +bne $t0 $zero label_22 +lw $t0 -72($fp) +lw $t1 -60($fp) +seq $t0 $t0 $t1 +sw $t0 -52($fp) +lw $t0 -52($fp) +bne $t0 $zero label_23 +lw $t4 8($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 4($fp) +seq $t0 $t0 $t1 +sw $t0 -48($fp) +j label_24 +label_21: +lw $t4 8($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -76($fp) +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -68($fp) +lw $t0 -76($fp) +lw $t1 -68($fp) +seq $t0 $t0 $t1 +sw $t0 -48($fp) +j label_24 +label_22: +lw $t4 8($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -76($fp) +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -68($fp) +lw $t0 -76($fp) +move $a0 $t0 +lw $t0 -68($fp) +move $a1 $t0 +jal equal_str +sw $v0 -48($fp) +j label_24 +label_23: +lw $t4 8($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -76($fp) +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -68($fp) +lw $t0 -76($fp) +lw $t1 -68($fp) +seq $t0 $t0 $t1 +sw $t0 -48($fp) +j label_24 +label_24: +lw $t0 -48($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -80($fp) +lw $t4 8($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -36($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -28($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -20($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -24($fp) +lw $t0 -36($fp) +lw $t1 -28($fp) +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_25 +lw $t0 -36($fp) +lw $t1 -20($fp) +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_26 +lw $t0 -36($fp) +lw $t1 -24($fp) +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_27 +lw $t4 8($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 0($fp) +seq $t0 $t0 $t1 +sw $t0 -12($fp) +j label_28 +label_25: +lw $t4 8($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -40($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -32($fp) +lw $t0 -40($fp) +lw $t1 -32($fp) +seq $t0 $t0 $t1 +sw $t0 -12($fp) +j label_28 +label_26: +lw $t4 8($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -40($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -32($fp) +lw $t0 -40($fp) +move $a0 $t0 +lw $t0 -32($fp) +move $a1 $t0 +jal equal_str +sw $v0 -12($fp) +j label_28 +label_27: +lw $t4 8($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -40($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -32($fp) +lw $t0 -40($fp) +lw $t1 -32($fp) +seq $t0 $t0 $t1 +sw $t0 -12($fp) +j label_28 +label_28: +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -44($fp) +lw $v0 8($fp) +addi $sp $sp 72 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_print_at_Complex: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -104 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -68($fp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -96($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -88($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -80($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -84($fp) +lw $t0 -96($fp) +lw $t1 -88($fp) +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_29 +lw $t0 -96($fp) +lw $t1 -80($fp) +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_30 +lw $t0 -96($fp) +lw $t1 -84($fp) +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_31 +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 -68($fp) +seq $t0 $t0 $t1 +sw $t0 -72($fp) +j label_32 +label_29: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -100($fp) +lw $t0 -68($fp) +lw $t1 12($t0) +sw $t1 -92($fp) +lw $t0 -100($fp) +lw $t1 -92($fp) +seq $t0 $t0 $t1 +sw $t0 -72($fp) +j label_32 +label_30: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -100($fp) +lw $t0 -68($fp) +lw $t1 12($t0) +sw $t1 -92($fp) +lw $t0 -100($fp) +move $a0 $t0 +lw $t0 -92($fp) +move $a1 $t0 +jal equal_str +sw $v0 -72($fp) +j label_32 +label_31: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -100($fp) +lw $t0 -68($fp) +lw $t1 12($t0) +sw $t1 -92($fp) +lw $t0 -100($fp) +lw $t1 -92($fp) +seq $t0 $t0 $t1 +sw $t0 -72($fp) +j label_32 +label_32: +lw $t0 -72($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -104($fp) +lw $t0 -104($fp) +lw $t1 12($t0) +sw $t1 -108($fp) +lw $t0 -108($fp) +bne $t0 $zero label_41 +la $t0 data_20 +sw $t0 -64($fp) +lw $t0 -64($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -60($fp) +la $t0 data_21 +sw $t0 -56($fp) +lw $t0 -56($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -52($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -48($fp) +lw $t0 -48($fp) +bne $t0 $zero label_33 +j label_34 +label_33: +li $v0 4 +la $a0 data_22 +syscall +li $v0 10 +syscall +label_34: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -44($fp) +lw $t0 -44($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -40($fp) +lw $t0 -40($fp) +bne $t0 $zero label_35 +j label_36 +label_35: +li $v0 4 +la $a0 data_23 +syscall +li $v0 10 +syscall +label_36: +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -52($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -36($fp) +lw $t0 -36($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_37 +j label_38 +label_37: +li $v0 4 +la $a0 data_24 +syscall +li $v0 10 +syscall +label_38: +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -28($fp) +lw $t0 -28($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_39 +j label_40 +label_39: +li $v0 4 +la $a0 data_25 +syscall +li $v0 10 +syscall +label_40: +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -60($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -20($fp) +lw $t0 -20($fp) +sw $t0 -112($fp) +j label_44 +label_41: +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_42 +j label_43 +label_42: +li $v0 4 +la $a0 data_26 +syscall +li $v0 10 +syscall +label_43: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -112($fp) +label_44: +lw $v0 -112($fp) +addi $sp $sp 104 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_reflect_0_at_Complex: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -96 +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -64($fp) +lw $t0 -64($fp) +not $t0 $t0 +addi $t0 $t0 1 +sw $t0 -60($fp) +lw $t0 -60($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -68($fp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -96($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -88($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -80($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -84($fp) +lw $t0 -96($fp) +lw $t1 -88($fp) +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_45 +lw $t0 -96($fp) +lw $t1 -80($fp) +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_46 +lw $t0 -96($fp) +lw $t1 -84($fp) +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_47 +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 -68($fp) +seq $t0 $t0 $t1 +sw $t0 -72($fp) +j label_48 +label_45: +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -100($fp) +lw $t0 -68($fp) +lw $t1 12($t0) +sw $t1 -92($fp) +lw $t0 -100($fp) +lw $t1 -92($fp) +seq $t0 $t0 $t1 +sw $t0 -72($fp) +j label_48 +label_46: +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -100($fp) +lw $t0 -68($fp) +lw $t1 12($t0) +sw $t1 -92($fp) +lw $t0 -100($fp) +move $a0 $t0 +lw $t0 -92($fp) +move $a1 $t0 +jal equal_str +sw $v0 -72($fp) +j label_48 +label_47: +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -100($fp) +lw $t0 -68($fp) +lw $t1 12($t0) +sw $t1 -92($fp) +lw $t0 -100($fp) +lw $t1 -92($fp) +seq $t0 $t0 $t1 +sw $t0 -72($fp) +j label_48 +label_48: +lw $t0 -72($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -104($fp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -16($fp) +lw $t0 -16($fp) +not $t0 $t0 +addi $t0 $t0 1 +sw $t0 -12($fp) +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -48($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -40($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -32($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -36($fp) +lw $t0 -48($fp) +lw $t1 -40($fp) +seq $t0 $t0 $t1 +sw $t0 -28($fp) +lw $t0 -28($fp) +bne $t0 $zero label_49 +lw $t0 -48($fp) +lw $t1 -32($fp) +seq $t0 $t0 $t1 +sw $t0 -28($fp) +lw $t0 -28($fp) +bne $t0 $zero label_50 +lw $t0 -48($fp) +lw $t1 -36($fp) +seq $t0 $t0 $t1 +sw $t0 -28($fp) +lw $t0 -28($fp) +bne $t0 $zero label_51 +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 -20($fp) +seq $t0 $t0 $t1 +sw $t0 -24($fp) +j label_52 +label_49: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -52($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -44($fp) +lw $t0 -52($fp) +lw $t1 -44($fp) +seq $t0 $t0 $t1 +sw $t0 -24($fp) +j label_52 +label_50: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -52($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -44($fp) +lw $t0 -52($fp) +move $a0 $t0 +lw $t0 -44($fp) +move $a1 $t0 +jal equal_str +sw $v0 -24($fp) +j label_52 +label_51: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -52($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -44($fp) +lw $t0 -52($fp) +lw $t1 -44($fp) +seq $t0 $t0 $t1 +sw $t0 -24($fp) +j label_52 +label_52: +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -56($fp) +lw $v0 0($fp) +addi $sp $sp 96 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_reflect_X_at_Complex: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -48 +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -16($fp) +lw $t0 -16($fp) +not $t0 $t0 +addi $t0 $t0 1 +sw $t0 -12($fp) +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -48($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -40($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -32($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -36($fp) +lw $t0 -48($fp) +lw $t1 -40($fp) +seq $t0 $t0 $t1 +sw $t0 -28($fp) +lw $t0 -28($fp) +bne $t0 $zero label_53 +lw $t0 -48($fp) +lw $t1 -32($fp) +seq $t0 $t0 $t1 +sw $t0 -28($fp) +lw $t0 -28($fp) +bne $t0 $zero label_54 +lw $t0 -48($fp) +lw $t1 -36($fp) +seq $t0 $t0 $t1 +sw $t0 -28($fp) +lw $t0 -28($fp) +bne $t0 $zero label_55 +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 -20($fp) +seq $t0 $t0 $t1 +sw $t0 -24($fp) +j label_56 +label_53: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -52($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -44($fp) +lw $t0 -52($fp) +lw $t1 -44($fp) +seq $t0 $t0 $t1 +sw $t0 -24($fp) +j label_56 +label_54: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -52($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -44($fp) +lw $t0 -52($fp) +move $a0 $t0 +lw $t0 -44($fp) +move $a1 $t0 +jal equal_str +sw $v0 -24($fp) +j label_56 +label_55: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -52($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -44($fp) +lw $t0 -52($fp) +lw $t1 -44($fp) +seq $t0 $t0 $t1 +sw $t0 -24($fp) +j label_56 +label_56: +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -56($fp) +lw $v0 0($fp) +addi $sp $sp 48 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_reflect_Y_at_Complex: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -48 +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -16($fp) +lw $t0 -16($fp) +not $t0 $t0 +addi $t0 $t0 1 +sw $t0 -12($fp) +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -48($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -40($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -32($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -36($fp) +lw $t0 -48($fp) +lw $t1 -40($fp) +seq $t0 $t0 $t1 +sw $t0 -28($fp) +lw $t0 -28($fp) +bne $t0 $zero label_57 +lw $t0 -48($fp) +lw $t1 -32($fp) +seq $t0 $t0 $t1 +sw $t0 -28($fp) +lw $t0 -28($fp) +bne $t0 $zero label_58 +lw $t0 -48($fp) +lw $t1 -36($fp) +seq $t0 $t0 $t1 +sw $t0 -28($fp) +lw $t0 -28($fp) +bne $t0 $zero label_59 +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 -20($fp) +seq $t0 $t0 $t1 +sw $t0 -24($fp) +j label_60 +label_57: +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -52($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -44($fp) +lw $t0 -52($fp) +lw $t1 -44($fp) +seq $t0 $t0 $t1 +sw $t0 -24($fp) +j label_60 +label_58: +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -52($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -44($fp) +lw $t0 -52($fp) +move $a0 $t0 +lw $t0 -44($fp) +move $a1 $t0 +jal equal_str +sw $v0 -24($fp) +j label_60 +label_59: +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -52($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -44($fp) +lw $t0 -52($fp) +lw $t1 -44($fp) +seq $t0 $t0 $t1 +sw $t0 -24($fp) +j label_60 +label_60: +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -56($fp) +lw $v0 0($fp) +addi $sp $sp 48 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_Complex: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 6 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_Complex +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + + + +equal_str: +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $a0 8($sp) +sw $a1 12($sp) +sw $t2 16($sp) +sw $t3 20($sp) +move $t0 $a0 +move $t1 $a1 +while_equal_str: +lb $t2 0($t0) +lb $t3 0($t1) +bne $t2 $t3 equal_str_different_strings +beq $t2 $zero first_end_equal_str +beq $t3 $zero second_end_equal_str +addi $t1 $t1 1 +addi $t0 $t0 1 +j while_equal_str +equal_str_different_strings: +move $v0 $zero +j equal_str_end +first_end_equal_str: +beq $t3 $zero second_end_equal_str +move $v0 $zero +j equal_str_end +second_end_equal_str: +li $v0 1 +equal_str_end: +lw $t0 0($sp) +lw $t1 4($sp) +lw $a0 8($sp) +lw $a1 12($sp) +lw $t2 16($sp) +lw $t3 20($sp) +addiu $sp $sp 24 +jr $ra + +allocate: +addiu $sp $sp -12 +sw $a0 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +li $t0 4 +div $a0 $t0 +mfhi $t1 +sub $t0 $t0 $t1 +add $a0 $a0 $t0 +li $v0 9 +syscall +lw $a0 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +addiu $sp $sp 12 +jr $ra + +copy: +addiu $sp $sp -16 +sw $a0 0($sp) +sw $a1 4($sp) +sw $a2 8($sp) +sw $t0 12($sp) +while_copy: +beq $a2 $zero copy_end +lw $t0 0($a0) +sw $t0 0($a1) +addiu $a0 $a0 4 +addiu $a1 $a1 4 +addi $a2 $a2 -4 +j while_copy +copy_end: +lw $a0 0($sp) +lw $a1 4($sp) +lw $a2 8($sp) +lw $t0 12($sp) +addiu $sp $sp 16 +jr $ra + +read_string: +addiu $sp $sp -28 +sw $ra 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $a2 20($sp) +sw $t2 24($sp) +li $t0 8 +addi $a0 $t0 4 +jal allocate +move $t1 $v0 +move $t2 $zero +while_read_string: +addu $a0 $t1 $t2 +subu $a1 $t0 $t2 +addu $t2 $t2 $a1 +jal read_string_up_to +beq $v0 $zero read_string_not_finished +move $v0 $t1 +j end_read_string +read_string_not_finished: +sll $t0 $t0 1 +addi $a0 $t0 4 +jal allocate +move $a0 $t1 +move $t1 $v0 +move $a1 $v0 +move $a2 $t2 +jal copy +j while_read_string +end_read_string: +lw $ra 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $a2 20($sp) +lw $t2 24($sp) +addiu $sp $sp 28 +jr $ra +read_string_up_to: +addiu $sp $sp -28 +sw $ra 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +sw $t2 12($sp) +sw $t3 16($sp) +sw $t4 20($sp) +sw $t5 24($sp) +move $t0 $a0 +move $t1 $zero +li $t2 10 +addu $t3 $t0 $a1 +addiu $a1 $a1 1 +li $v0 8 +syscall +lw $a0 0($a0) +beq $a0 $zero eol_terminated +li $v0 0 +eol_check: +beq $t0 $t3 read_loop_continue +lb $t1 0($t0) +beq $t1 $t2 eol_terminated +addiu $t0 $t0 1 +j eol_check +eol_terminated: +sb $zero 0($t0) +li $v0 1 +read_loop_continue: +lw $ra 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +lw $t2 12($sp) +lw $t3 16($sp) +lw $t4 20($sp) +lw $t5 24($sp) +addiu $sp $sp 28 +jr $ra + +substr: +addiu $sp $sp -32 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $t3 12($sp) +sw $a0 16($sp) +sw $a1 20($sp) +sw $a2 24($sp) +sw $ra 28($sp) +move $t0 $a0 +add $t0 $t0 $a1 +li $t1 4 +div $a2 $t1 +mfhi $t2 +bne $t2 $zero substr_allign_size +move $t1 $a2 +j substr_new_chunk +substr_allign_size: +sub $t1 $t1 $t2 +add $t1 $t1 $a2 +substr_new_chunk: +move $a0 $t1 +jal allocate +move $t3 $v0 +move $t1 $zero +while_substr_copy: +beq $t1 $a2 substr_end +lb $t2 0($t0) +sb $t2 0($t3) +addiu $t0 $t0 1 +addiu $t3 $t3 1 +addiu $t1 $t1 1 +j while_substr_copy +substr_end: +sb $zero 0($t3) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $t3 12($sp) +lw $a0 16($sp) +lw $a1 20($sp) +lw $a2 24($sp) +lw $ra 28($sp) +addiu $sp $sp 32 +jr $ra + +concat: +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $ra 20($sp) +move $t0 $a0 +move $t1 $a1 +addiu $a0 $a2 1 +li $t2 4 +div $a0 $t2 +mfhi $a0 +bne $a0 $zero concat_allign_size +addiu $a0 $a2 1 +j concat_size_allignned +concat_allign_size: +sub $t2 $t2 $a0 +add $a0 $a2 $t2 +addiu $a0 $a0 1 +concat_size_allignned: +jal allocate +move $t2 $v0 +j first_while_concat_copy +first_while_concat_copy: +lb $a0 0($t0) +beq $a0 $zero second_while_concat_copy +sb $a0 0($t2) +addiu $t0 $t0 1 +addiu $t2 $t2 1 +j first_while_concat_copy +second_while_concat_copy: +lb $a0 0($t1) +beq $a0 $zero concat_end +sb $a0 0($t2) +addiu $t1 $t1 1 +addiu $t2 $t2 1 +j second_while_concat_copy +concat_end: +sb $zero 0($t2) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $ra 20($sp) +addiu $sp $sp 24 +jr $ra + +length: +addiu $sp $sp -8 +sw $t0 0($sp) +sw $t1 4($sp) +move $t0 $a0 +move $v0 $zero +while_len: +lb $t1 0($t0) +beq $t1 $zero len_end +addi $v0 $v0 1 +addiu $t0 $t0 1 +j while_len +len_end: +lw $t0 0($sp) +lw $t1 4($sp) +addiu $sp $sp 8 +jr $ra \ No newline at end of file diff --git a/tests/codegen/fib.mips b/tests/codegen/fib.mips new file mode 100644 index 000000000..386c6a01d --- /dev/null +++ b/tests/codegen/fib.mips @@ -0,0 +1,1342 @@ +.data +default_str: .asciiz "" +.word 0 +data_1: .asciiz "Object" +.word 0 +data_2: .asciiz "IO" +.word 0 +data_3: .asciiz "String" +.word 0 +data_4: .asciiz "Int" +.word 0 +data_5: .asciiz "Bool" +.word 0 +data_6: .asciiz "Main" +.word 0 +data_7: .asciiz " +" +.word 0 +data_8: .asciiz "" +.word 0 +data_9: .asciiz "Abort called from class " +.word 0 +data_10: .asciiz "Index out of range exception" +.word 0 +data_11: .asciiz "Enter n to find nth fibonacci number!\n" +.word 0 +data_12: .asciiz "Function call in a void instance" +.word 0 +data_13: .asciiz "Function call in a void instance" +.word 0 +data_14: .asciiz "Function call in a void instance" +.word 0 +data_15: .asciiz "Function call in a void instance" +.word 0 +data_16: .asciiz "\n" +.word 0 +data_17: .asciiz "Function call in a void instance" + + +types_table: +.word data_1 +.word data_2 +.word data_3 +.word data_4 +.word data_5 +.word data_6 + +prototype_table: + .word type_1_prototype + .word type_2_prototype + .word type_3_prototype + .word type_4_prototype + .word type_5_prototype + .word type_6_prototype + +type_1_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __ctor_Object + +type_1_prototype: +.word 0 +.word 4 +.word type_1_dispatch +.word -1 + + +type_2_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word function_out_string_at_IO +.word function_out_int_at_IO +.word function_in_string_at_IO +.word function_in_int_at_IO +.word __ctor_IO + +type_2_prototype: +.word 1 +.word 4 +.word type_2_dispatch +.word -1 + + +type_3_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word function_length_at_String +.word function_concat_at_String +.word function_substr_at_String +.word __ctor_String + +type_3_prototype: +.word 2 +.word 6 +.word type_3_dispatch +.word 0 +.word 0 +.word -1 + + +type_4_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __ctor_Int + +type_4_prototype: +.word 3 +.word 5 +.word type_4_dispatch +.word 0 +.word -1 + + +type_5_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __ctor_Bool + +type_5_prototype: +.word 4 +.word 5 +.word type_5_dispatch +.word 0 +.word -1 + + +type_6_dispatch: +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_fib_at_Main +.word function_main_at_Main +.word __attributes_ctor_Main +.word __ctor_Main + +type_6_prototype: +.word 5 +.word 4 +.word type_6_dispatch +.word -1 + + +.text +.globl main +__ctor_Object: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 0 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_abort_at_Object: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +la $t0 data_9 +sw $t0 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +la $t0 data_7 +sw $t0 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +li $v0 10 +syscall +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_type_name_at_Object: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_copy_at_Object: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $a0 4($t0) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t0 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 1 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_out_string_at_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +lw $v0 4($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_out_int_at_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -12($fp) +li $v0 1 +lw $a0 -12($fp) +syscall +lw $v0 4($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_in_string_at_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +jal read_string +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_in_int_at_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $v0 5 +syscall +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_String: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +li $t0 2 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -20($fp) +lw $t0 -20($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $a0 0($fp) +jal length +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -20($fp) +lw $t1 -12($fp) +sw $t1 16($t0) +lw $v0 -20($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_length_at_String: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 16($t0) +sw $t1 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_concat_at_String: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -24 +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -32($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 4($fp) +lw $t1 16($t0) +sw $t1 -24($fp) +lw $t0 0($fp) +lw $t1 16($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 12($t0) +sw $t1 -24($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 -20($fp) +add $t0 $t0 $t1 +sw $t0 -24($fp) +lw $a0 -32($fp) +lw $a1 -28($fp) +lw $a2 -24($fp) +jal concat +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 24 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_substr_at_String: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -36 +lw $t0 8($fp) +lw $t1 12($t0) +sw $t1 -16($fp) +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -40($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -36($fp) +lw $t0 8($fp) +lw $t1 16($t0) +sw $t1 -32($fp) +lw $t0 -32($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 -36($fp) +lw $t1 -40($fp) +add $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -28($fp) +lw $t1 -24($fp) +slt $t1 $t0 $t1 +sw $t1 -20($fp) +lw $t0 -20($fp) +bne $t0 $zero label_1 +j label_2 +label_1: +li $v0 4 +la $a0 data_10 +syscall +li $v0 10 +syscall +label_2: +lw $a0 -16($fp) +lw $a1 -40($fp) +lw $a2 -36($fp) +jal substr +sw $v0 -44($fp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 36 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_Int: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 3 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_Bool: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 4 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +jal __ctor_Main +sw $v0 -12($fp) +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal function_main_at_Main +addi $sp $sp 4 +sw $v0 -12($fp) +li $v0 0 +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +li $v0 10 +syscall + +__attributes_ctor_Main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp 0 +lw $v0 0($fp) +addi $sp $sp 0 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_main_at_Main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -56 +la $t0 data_11 +sw $t0 -64($fp) +lw $t0 -64($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -60($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -56($fp) +lw $t0 -56($fp) +bne $t0 $zero label_3 +j label_4 +label_3: +li $v0 4 +la $a0 data_12 +syscall +li $v0 10 +syscall +label_4: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -60($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -52($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -48($fp) +lw $t0 -48($fp) +bne $t0 $zero label_5 +j label_6 +label_5: +li $v0 4 +la $a0 data_13 +syscall +li $v0 10 +syscall +label_6: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -44($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -40($fp) +lw $t0 -40($fp) +bne $t0 $zero label_7 +j label_8 +label_7: +li $v0 4 +la $a0 data_14 +syscall +li $v0 10 +syscall +label_8: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -36($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_9 +j label_10 +label_9: +li $v0 4 +la $a0 data_15 +syscall +li $v0 10 +syscall +label_10: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -28($fp) +la $t0 data_16 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_11 +j label_12 +label_11: +li $v0 4 +la $a0 data_17 +syscall +li $v0 10 +syscall +label_12: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 56 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_fib_at_Main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -116 +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -120($fp) +lw $t0 -120($fp) +sw $t0 -124($fp) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -112($fp) +lw $t0 -112($fp) +sw $t0 -116($fp) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -104($fp) +lw $t0 -104($fp) +sw $t0 -108($fp) +label_13: +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -48($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -76($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -68($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -60($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -64($fp) +lw $t0 -76($fp) +lw $t1 -68($fp) +seq $t0 $t0 $t1 +sw $t0 -56($fp) +lw $t0 -56($fp) +bne $t0 $zero label_14 +lw $t0 -76($fp) +lw $t1 -60($fp) +seq $t0 $t0 $t1 +sw $t0 -56($fp) +lw $t0 -56($fp) +bne $t0 $zero label_15 +lw $t0 -76($fp) +lw $t1 -64($fp) +seq $t0 $t0 $t1 +sw $t0 -56($fp) +lw $t0 -56($fp) +bne $t0 $zero label_16 +lw $t0 0($fp) +lw $t1 -48($fp) +seq $t0 $t0 $t1 +sw $t0 -52($fp) +j label_17 +label_14: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -80($fp) +lw $t0 -48($fp) +lw $t1 12($t0) +sw $t1 -72($fp) +lw $t0 -80($fp) +lw $t1 -72($fp) +seq $t0 $t0 $t1 +sw $t0 -52($fp) +j label_17 +label_15: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -80($fp) +lw $t0 -48($fp) +lw $t1 12($t0) +sw $t1 -72($fp) +lw $t0 -80($fp) +move $a0 $t0 +lw $t0 -72($fp) +move $a1 $t0 +jal equal_str +sw $v0 -52($fp) +j label_17 +label_16: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -80($fp) +lw $t0 -48($fp) +lw $t1 12($t0) +sw $t1 -72($fp) +lw $t0 -80($fp) +lw $t1 -72($fp) +seq $t0 $t0 $t1 +sw $t0 -52($fp) +j label_17 +label_17: +lw $t0 -52($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -84($fp) +lw $t0 -84($fp) +lw $t1 12($t0) +sw $t1 -92($fp) +lw $t0 -92($fp) +xori $t0 $t0 1 +sw $t0 -88($fp) +lw $t0 -88($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -96($fp) +lw $t0 -96($fp) +lw $t1 12($t0) +sw $t1 -100($fp) +lw $t0 -100($fp) +bne $t0 $zero label_18 +j label_19 +label_18: +lw $t0 -124($fp) +lw $t1 12($t0) +sw $t1 -40($fp) +lw $t0 -116($fp) +lw $t1 12($t0) +sw $t1 -36($fp) +lw $t0 -40($fp) +lw $t1 -36($fp) +add $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -44($fp) +lw $t0 -44($fp) +sw $t0 -108($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -24($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 12($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 -20($fp) +sub $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t0 -28($fp) +sw $t0 0($fp) +lw $t0 -124($fp) +sw $t0 -116($fp) +lw $t0 -108($fp) +sw $t0 -124($fp) +j label_13 +label_19: +lw $v0 -108($fp) +addi $sp $sp 116 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_Main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 5 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_Main +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + + + +equal_str: +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $a0 8($sp) +sw $a1 12($sp) +sw $t2 16($sp) +sw $t3 20($sp) +move $t0 $a0 +move $t1 $a1 +while_equal_str: +lb $t2 0($t0) +lb $t3 0($t1) +bne $t2 $t3 equal_str_different_strings +beq $t2 $zero first_end_equal_str +beq $t3 $zero second_end_equal_str +addi $t1 $t1 1 +addi $t0 $t0 1 +j while_equal_str +equal_str_different_strings: +move $v0 $zero +j equal_str_end +first_end_equal_str: +beq $t3 $zero second_end_equal_str +move $v0 $zero +j equal_str_end +second_end_equal_str: +li $v0 1 +equal_str_end: +lw $t0 0($sp) +lw $t1 4($sp) +lw $a0 8($sp) +lw $a1 12($sp) +lw $t2 16($sp) +lw $t3 20($sp) +addiu $sp $sp 24 +jr $ra + +allocate: +addiu $sp $sp -12 +sw $a0 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +li $t0 4 +div $a0 $t0 +mfhi $t1 +sub $t0 $t0 $t1 +add $a0 $a0 $t0 +li $v0 9 +syscall +lw $a0 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +addiu $sp $sp 12 +jr $ra + +copy: +addiu $sp $sp -16 +sw $a0 0($sp) +sw $a1 4($sp) +sw $a2 8($sp) +sw $t0 12($sp) +while_copy: +beq $a2 $zero copy_end +lw $t0 0($a0) +sw $t0 0($a1) +addiu $a0 $a0 4 +addiu $a1 $a1 4 +addi $a2 $a2 -4 +j while_copy +copy_end: +lw $a0 0($sp) +lw $a1 4($sp) +lw $a2 8($sp) +lw $t0 12($sp) +addiu $sp $sp 16 +jr $ra + +read_string: +addiu $sp $sp -28 +sw $ra 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $a2 20($sp) +sw $t2 24($sp) +li $t0 8 +addi $a0 $t0 4 +jal allocate +move $t1 $v0 +move $t2 $zero +while_read_string: +addu $a0 $t1 $t2 +subu $a1 $t0 $t2 +addu $t2 $t2 $a1 +jal read_string_up_to +beq $v0 $zero read_string_not_finished +move $v0 $t1 +j end_read_string +read_string_not_finished: +sll $t0 $t0 1 +addi $a0 $t0 4 +jal allocate +move $a0 $t1 +move $t1 $v0 +move $a1 $v0 +move $a2 $t2 +jal copy +j while_read_string +end_read_string: +lw $ra 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $a2 20($sp) +lw $t2 24($sp) +addiu $sp $sp 28 +jr $ra +read_string_up_to: +addiu $sp $sp -28 +sw $ra 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +sw $t2 12($sp) +sw $t3 16($sp) +sw $t4 20($sp) +sw $t5 24($sp) +move $t0 $a0 +move $t1 $zero +li $t2 10 +addu $t3 $t0 $a1 +addiu $a1 $a1 1 +li $v0 8 +syscall +lw $a0 0($a0) +beq $a0 $zero eol_terminated +li $v0 0 +eol_check: +beq $t0 $t3 read_loop_continue +lb $t1 0($t0) +beq $t1 $t2 eol_terminated +addiu $t0 $t0 1 +j eol_check +eol_terminated: +sb $zero 0($t0) +li $v0 1 +read_loop_continue: +lw $ra 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +lw $t2 12($sp) +lw $t3 16($sp) +lw $t4 20($sp) +lw $t5 24($sp) +addiu $sp $sp 28 +jr $ra + +substr: +addiu $sp $sp -32 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $t3 12($sp) +sw $a0 16($sp) +sw $a1 20($sp) +sw $a2 24($sp) +sw $ra 28($sp) +move $t0 $a0 +add $t0 $t0 $a1 +li $t1 4 +div $a2 $t1 +mfhi $t2 +bne $t2 $zero substr_allign_size +move $t1 $a2 +j substr_new_chunk +substr_allign_size: +sub $t1 $t1 $t2 +add $t1 $t1 $a2 +substr_new_chunk: +move $a0 $t1 +jal allocate +move $t3 $v0 +move $t1 $zero +while_substr_copy: +beq $t1 $a2 substr_end +lb $t2 0($t0) +sb $t2 0($t3) +addiu $t0 $t0 1 +addiu $t3 $t3 1 +addiu $t1 $t1 1 +j while_substr_copy +substr_end: +sb $zero 0($t3) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $t3 12($sp) +lw $a0 16($sp) +lw $a1 20($sp) +lw $a2 24($sp) +lw $ra 28($sp) +addiu $sp $sp 32 +jr $ra + +concat: +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $ra 20($sp) +move $t0 $a0 +move $t1 $a1 +addiu $a0 $a2 1 +li $t2 4 +div $a0 $t2 +mfhi $a0 +bne $a0 $zero concat_allign_size +addiu $a0 $a2 1 +j concat_size_allignned +concat_allign_size: +sub $t2 $t2 $a0 +add $a0 $a2 $t2 +addiu $a0 $a0 1 +concat_size_allignned: +jal allocate +move $t2 $v0 +j first_while_concat_copy +first_while_concat_copy: +lb $a0 0($t0) +beq $a0 $zero second_while_concat_copy +sb $a0 0($t2) +addiu $t0 $t0 1 +addiu $t2 $t2 1 +j first_while_concat_copy +second_while_concat_copy: +lb $a0 0($t1) +beq $a0 $zero concat_end +sb $a0 0($t2) +addiu $t1 $t1 1 +addiu $t2 $t2 1 +j second_while_concat_copy +concat_end: +sb $zero 0($t2) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $ra 20($sp) +addiu $sp $sp 24 +jr $ra + +length: +addiu $sp $sp -8 +sw $t0 0($sp) +sw $t1 4($sp) +move $t0 $a0 +move $v0 $zero +while_len: +lb $t1 0($t0) +beq $t1 $zero len_end +addi $v0 $v0 1 +addiu $t0 $t0 1 +j while_len +len_end: +lw $t0 0($sp) +lw $t1 4($sp) +addiu $sp $sp 8 +jr $ra \ No newline at end of file diff --git a/tests/codegen/graph.mips b/tests/codegen/graph.mips new file mode 100644 index 000000000..69965826f --- /dev/null +++ b/tests/codegen/graph.mips @@ -0,0 +1,7387 @@ +.data +default_str: .asciiz "" +.word 0 +data_1: .asciiz "Object" +.word 0 +data_2: .asciiz "IO" +.word 0 +data_3: .asciiz "String" +.word 0 +data_4: .asciiz "Int" +.word 0 +data_5: .asciiz "Bool" +.word 0 +data_6: .asciiz "Graph" +.word 0 +data_7: .asciiz "Vertice" +.word 0 +data_8: .asciiz "Edge" +.word 0 +data_9: .asciiz "EList" +.word 0 +data_10: .asciiz "ECons" +.word 0 +data_11: .asciiz "VList" +.word 0 +data_12: .asciiz "VCons" +.word 0 +data_13: .asciiz "Parse" +.word 0 +data_14: .asciiz "Main" +.word 0 +data_15: .asciiz "BoolOp" +.word 0 +data_16: .asciiz " +" +.word 0 +data_17: .asciiz "" +.word 0 +data_18: .asciiz "Abort called from class " +.word 0 +data_19: .asciiz "Index out of range exception" +.word 0 +data_20: .asciiz "Function call in a void instance" +.word 0 +data_21: .asciiz "Function call in a void instance" +.word 0 +data_22: .asciiz "Function call in a void instance" +.word 0 +data_23: .asciiz "Function call in a void instance" +.word 0 +data_24: .asciiz "Function call in a void instance" +.word 0 +data_25: .asciiz "Function call in a void instance" +.word 0 +data_26: .asciiz "Function call in a void instance" +.word 0 +data_27: .asciiz "Function call in a void instance" +.word 0 +data_28: .asciiz " (" +.word 0 +data_29: .asciiz "Function call in a void instance" +.word 0 +data_30: .asciiz "Function call in a void instance" +.word 0 +data_31: .asciiz "," +.word 0 +data_32: .asciiz "Function call in a void instance" +.word 0 +data_33: .asciiz "Function call in a void instance" +.word 0 +data_34: .asciiz ")" +.word 0 +data_35: .asciiz "Function call in a void instance" +.word 0 +data_36: .asciiz "Function call in a void instance" +.word 0 +data_37: .asciiz "Function call in a void instance" +.word 0 +data_38: .asciiz "Function call in a void instance" +.word 0 +data_39: .asciiz "Function call in a void instance" +.word 0 +data_40: .asciiz "Function call in a void instance" +.word 0 +data_41: .asciiz "Function call in a void instance" +.word 0 +data_42: .asciiz "Function call in a void instance" +.word 0 +data_43: .asciiz "Function call in a void instance" +.word 0 +data_44: .asciiz "Function call in a void instance" +.word 0 +data_45: .asciiz "\n" +.word 0 +data_46: .asciiz "Function call in a void instance" +.word 0 +data_47: .asciiz "Function call in a void instance" +.word 0 +data_48: .asciiz "Function call in a void instance" +.word 0 +data_49: .asciiz "Function call in a void instance" +.word 0 +data_50: .asciiz "Function call in a void instance" +.word 0 +data_51: .asciiz "Function call in a void instance" +.word 0 +data_52: .asciiz "\n" +.word 0 +data_53: .asciiz "Function call in a void instance" +.word 0 +data_54: .asciiz "Function call in a void instance" +.word 0 +data_55: .asciiz "Function call in a void instance" +.word 0 +data_56: .asciiz "Function call in a void instance" +.word 0 +data_57: .asciiz "\n" +.word 0 +data_58: .asciiz "" +.word 0 +data_59: .asciiz "Function call in a void instance" +.word 0 +data_60: .asciiz "Function call in a void instance" +.word 0 +data_61: .asciiz "Function call in a void instance" +.word 0 +data_62: .asciiz "Function call in a void instance" +.word 0 +data_63: .asciiz "Function call in a void instance" +.word 0 +data_64: .asciiz "Function call in a void instance" +.word 0 +data_65: .asciiz "Function call in a void instance" +.word 0 +data_66: .asciiz "Function call in a void instance" +.word 0 +data_67: .asciiz "Function call in a void instance" +.word 0 +data_68: .asciiz "Function call in a void instance" +.word 0 +data_69: .asciiz "Function call in a void instance" +.word 0 +data_70: .asciiz "Function call in a void instance" +.word 0 +data_71: .asciiz "0" +.word 0 +data_72: .asciiz "1" +.word 0 +data_73: .asciiz "2" +.word 0 +data_74: .asciiz "3" +.word 0 +data_75: .asciiz "4" +.word 0 +data_76: .asciiz "5" +.word 0 +data_77: .asciiz "6" +.word 0 +data_78: .asciiz "7" +.word 0 +data_79: .asciiz "8" +.word 0 +data_80: .asciiz "9" +.word 0 +data_81: .asciiz "Function call in a void instance" +.word 0 +data_82: .asciiz "Function call in a void instance" +.word 0 +data_83: .asciiz "Function call in a void instance" +.word 0 +data_84: .asciiz "-" +.word 0 +data_85: .asciiz "Function call in a void instance" +.word 0 +data_86: .asciiz " " +.word 0 +data_87: .asciiz "Function call in a void instance" +.word 0 +data_88: .asciiz "Function call in a void instance" +.word 0 +data_89: .asciiz "Function call in a void instance" +.word 0 +data_90: .asciiz "Function call in a void instance" +.word 0 +data_91: .asciiz "Function call in a void instance" +.word 0 +data_92: .asciiz "Function call in a void instance" +.word 0 +data_93: .asciiz "Function call in a void instance" +.word 0 +data_94: .asciiz "Function call in a void instance" +.word 0 +data_95: .asciiz "Function call in a void instance" +.word 0 +data_96: .asciiz " " +.word 0 +data_97: .asciiz "," +.word 0 +data_98: .asciiz "Function call in a void instance" +.word 0 +data_99: .asciiz "Function call in a void instance" +.word 0 +data_100: .asciiz "" +.word 0 +data_101: .asciiz "" +.word 0 +data_102: .asciiz "Function call in a void instance" +.word 0 +data_103: .asciiz "Function call in a void instance" +.word 0 +data_104: .asciiz "Function call in a void instance" +.word 0 +data_105: .asciiz "Function call in a void instance" +.word 0 +data_106: .asciiz "Function call in a void instance" +.word 0 +data_107: .asciiz "Function call in a void instance" +.word 0 +data_108: .asciiz "Function call in a void instance" + + +types_table: +.word data_1 +.word data_2 +.word data_3 +.word data_4 +.word data_5 +.word data_6 +.word data_7 +.word data_8 +.word data_9 +.word data_10 +.word data_11 +.word data_12 +.word data_13 +.word data_14 +.word data_15 + +prototype_table: + .word type_1_prototype + .word type_2_prototype + .word type_3_prototype + .word type_4_prototype + .word type_5_prototype + .word type_6_prototype + .word type_7_prototype + .word type_8_prototype + .word type_9_prototype + .word type_10_prototype + .word type_11_prototype + .word type_12_prototype + .word type_13_prototype + .word type_14_prototype + .word type_15_prototype + +type_1_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __ctor_Object + +type_1_prototype: +.word 0 +.word 4 +.word type_1_dispatch +.word -1 + + +type_2_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word function_out_string_at_IO +.word function_out_int_at_IO +.word function_in_string_at_IO +.word function_in_int_at_IO +.word __ctor_IO + +type_2_prototype: +.word 1 +.word 4 +.word type_2_dispatch +.word -1 + + +type_3_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word function_length_at_String +.word function_concat_at_String +.word function_substr_at_String +.word __ctor_String + +type_3_prototype: +.word 2 +.word 6 +.word type_3_dispatch +.word 0 +.word 0 +.word -1 + + +type_4_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __ctor_Int + +type_4_prototype: +.word 3 +.word 5 +.word type_4_dispatch +.word 0 +.word -1 + + +type_5_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __ctor_Bool + +type_5_prototype: +.word 4 +.word 5 +.word type_5_dispatch +.word 0 +.word -1 + + +type_6_dispatch: +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_add_vertice_at_Graph +.word function_print_E_at_Graph +.word function_print_V_at_Graph +.word __attributes_ctor_Graph +.word __ctor_Graph + +type_6_prototype: +.word 5 +.word 6 +.word type_6_dispatch +.word 0 +.word 0 +.word -1 + + +type_7_dispatch: +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_add_out_at_Vertice +.word function_init_at_Vertice +.word function_number_at_Vertice +.word function_outgoing_at_Vertice +.word function_print_at_Vertice +.word __attributes_ctor_Vertice +.word __ctor_Vertice + +type_7_prototype: +.word 6 +.word 6 +.word type_7_dispatch +.word 0 +.word 0 +.word -1 + + +type_8_dispatch: +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_init_at_Edge +.word function_print_at_Edge +.word __attributes_ctor_Edge +.word __ctor_Edge + +type_8_prototype: +.word 7 +.word 7 +.word type_8_dispatch +.word 0 +.word 0 +.word 0 +.word -1 + + +type_9_dispatch: +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_append_at_EList +.word function_cons_at_EList +.word function_head_at_EList +.word function_isNil_at_EList +.word function_print_at_EList +.word function_tail_at_EList +.word __attributes_ctor_EList +.word __ctor_EList + +type_9_prototype: +.word 8 +.word 5 +.word type_9_dispatch +.word 0 +.word -1 + + +type_10_dispatch: +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_append_at_EList +.word function_cons_at_EList +.word function_head_at_ECons +.word function_isNil_at_ECons +.word function_print_at_ECons +.word function_tail_at_ECons +.word function_init_at_ECons +.word __attributes_ctor_ECons +.word __ctor_ECons + +type_10_prototype: +.word 9 +.word 6 +.word type_10_dispatch +.word 0 +.word 0 +.word -1 + + +type_11_dispatch: +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_cons_at_VList +.word function_head_at_VList +.word function_isNil_at_VList +.word function_print_at_VList +.word function_tail_at_VList +.word __attributes_ctor_VList +.word __ctor_VList + +type_11_prototype: +.word 10 +.word 5 +.word type_11_dispatch +.word 0 +.word -1 + + +type_12_dispatch: +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_cons_at_VList +.word function_head_at_VCons +.word function_isNil_at_VCons +.word function_print_at_VCons +.word function_tail_at_VCons +.word function_init_at_VCons +.word __attributes_ctor_VCons +.word __ctor_VCons + +type_12_prototype: +.word 11 +.word 6 +.word type_12_dispatch +.word 0 +.word 0 +.word -1 + + +type_13_dispatch: +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_a2i_at_Parse +.word function_a2i_aux_at_Parse +.word function_c2i_at_Parse +.word function_parse_line_at_Parse +.word function_read_input_at_Parse +.word __attributes_ctor_Parse +.word __ctor_Parse + +type_13_prototype: +.word 12 +.word 6 +.word type_13_dispatch +.word 0 +.word 0 +.word -1 + + +type_14_dispatch: +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_a2i_at_Parse +.word function_a2i_aux_at_Parse +.word function_c2i_at_Parse +.word function_parse_line_at_Parse +.word function_read_input_at_Parse +.word function_main_at_Main +.word __attributes_ctor_Main +.word __ctor_Main + +type_14_prototype: +.word 13 +.word 7 +.word type_14_dispatch +.word 0 +.word 0 +.word 0 +.word -1 + + +type_15_dispatch: +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_and_at_BoolOp +.word function_or_at_BoolOp +.word __attributes_ctor_BoolOp +.word __ctor_BoolOp + +type_15_prototype: +.word 14 +.word 4 +.word type_15_dispatch +.word -1 + + +.text +.globl main +__ctor_Object: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 0 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_abort_at_Object: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +la $t0 data_18 +sw $t0 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +la $t0 data_16 +sw $t0 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +li $v0 10 +syscall +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_type_name_at_Object: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_copy_at_Object: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $a0 4($t0) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t0 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 1 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_out_string_at_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +lw $v0 4($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_out_int_at_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -12($fp) +li $v0 1 +lw $a0 -12($fp) +syscall +lw $v0 4($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_in_string_at_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +jal read_string +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_in_int_at_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $v0 5 +syscall +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_String: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +li $t0 2 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -20($fp) +lw $t0 -20($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $a0 0($fp) +jal length +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -20($fp) +lw $t1 -12($fp) +sw $t1 16($t0) +lw $v0 -20($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_length_at_String: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 16($t0) +sw $t1 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_concat_at_String: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -24 +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -32($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 4($fp) +lw $t1 16($t0) +sw $t1 -24($fp) +lw $t0 0($fp) +lw $t1 16($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 12($t0) +sw $t1 -24($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 -20($fp) +add $t0 $t0 $t1 +sw $t0 -24($fp) +lw $a0 -32($fp) +lw $a1 -28($fp) +lw $a2 -24($fp) +jal concat +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 24 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_substr_at_String: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -36 +lw $t0 8($fp) +lw $t1 12($t0) +sw $t1 -16($fp) +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -40($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -36($fp) +lw $t0 8($fp) +lw $t1 16($t0) +sw $t1 -32($fp) +lw $t0 -32($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 -36($fp) +lw $t1 -40($fp) +add $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -28($fp) +lw $t1 -24($fp) +slt $t1 $t0 $t1 +sw $t1 -20($fp) +lw $t0 -20($fp) +bne $t0 $zero label_1 +j label_2 +label_1: +li $v0 4 +la $a0 data_19 +syscall +li $v0 10 +syscall +label_2: +lw $a0 -16($fp) +lw $a1 -40($fp) +lw $a2 -36($fp) +jal substr +sw $v0 -44($fp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 36 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_Int: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 3 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_Bool: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 4 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +jal __ctor_Main +sw $v0 -12($fp) +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal function_main_at_Main +addi $sp $sp 4 +sw $v0 -12($fp) +li $v0 0 +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +li $v0 10 +syscall + +__attributes_ctor_Graph: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -16 +jal __ctor_VList +sw $v0 -20($fp) +lw $t0 -20($fp) +sw $t0 -24($fp) +lw $t0 0($fp) +lw $t1 -24($fp) +sw $t1 16($t0) +jal __ctor_EList +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -16($fp) +lw $t0 0($fp) +lw $t1 -16($fp) +sw $t1 12($t0) +lw $v0 0($fp) +addi $sp $sp 16 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_add_vertice_at_Graph: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -24 +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_3 +j label_4 +label_3: +li $v0 4 +la $a0 data_20 +syscall +li $v0 10 +syscall +label_4: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 40($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t0 -28($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_5 +j label_6 +label_5: +li $v0 4 +la $a0 data_21 +syscall +li $v0 10 +syscall +label_6: +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 4($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -20($fp) +lw $t0 -20($fp) +lw $t1 4($fp) +addi $t1 $t1 12 +sw $t0 0($t1) +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_7 +j label_8 +label_7: +li $v0 4 +la $a0 data_22 +syscall +li $v0 10 +syscall +label_8: +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 4($fp) +addi $t1 $t1 16 +sw $t0 0($t1) +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $v0 0($sp) +addi $sp $sp 4 +addi $sp $sp 24 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_print_E_at_Graph: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_9 +j label_10 +label_9: +li $v0 4 +la $a0 data_23 +syscall +li $v0 10 +syscall +label_10: +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 44($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_print_V_at_Graph: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_11 +j label_12 +label_11: +li $v0 4 +la $a0 data_24 +syscall +li $v0 10 +syscall +label_12: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 40($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_Graph: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 5 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_Graph +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__attributes_ctor_Vertice: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 0($fp) +lw $t1 -20($fp) +sw $t1 12($t0) +jal __ctor_EList +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -16($fp) +lw $t0 0($fp) +lw $t1 -16($fp) +sw $t1 16($t0) +lw $v0 0($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_outgoing_at_Vertice: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp 0 +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $v0 0($sp) +addi $sp $sp 4 +addi $sp $sp 0 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_number_at_Vertice: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp 0 +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $v0 0($sp) +addi $sp $sp 4 +addi $sp $sp 0 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_init_at_Vertice: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp 0 +lw $t0 0($fp) +lw $t1 4($fp) +addi $t1 $t1 12 +sw $t0 0($t1) +lw $v0 4($fp) +addi $sp $sp 0 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_add_out_at_Vertice: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_13 +j label_14 +label_13: +li $v0 4 +la $a0 data_25 +syscall +li $v0 10 +syscall +label_14: +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 4($fp) +addi $t1 $t1 16 +sw $t0 0($t1) +lw $v0 4($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_print_at_Vertice: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -16 +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_15 +j label_16 +label_15: +li $v0 4 +la $a0 data_26 +syscall +li $v0 10 +syscall +label_16: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -20($fp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_17 +j label_18 +label_17: +li $v0 4 +la $a0 data_27 +syscall +li $v0 10 +syscall +label_18: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 44($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 16 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_Vertice: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 6 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_Vertice +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__attributes_ctor_Edge: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 0($fp) +lw $t1 -20($fp) +sw $t1 12($t0) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -16($fp) +lw $t0 0($fp) +lw $t1 -16($fp) +sw $t1 16($t0) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 0($fp) +lw $t1 -12($fp) +sw $t1 20($t0) +lw $v0 0($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_init_at_Edge: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp 0 +lw $t0 8($fp) +lw $t1 12($fp) +addi $t1 $t1 12 +sw $t0 0($t1) +lw $t0 4($fp) +lw $t1 12($fp) +addi $t1 $t1 16 +sw $t0 0($t1) +lw $t0 0($fp) +lw $t1 12($fp) +addi $t1 $t1 20 +sw $t0 0($t1) +lw $v0 12($fp) +addi $sp $sp 0 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_print_at_Edge: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -72 +la $t0 data_28 +sw $t0 -80($fp) +lw $t0 -80($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -76($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -72($fp) +lw $t0 -72($fp) +bne $t0 $zero label_19 +j label_20 +label_19: +li $v0 4 +la $a0 data_29 +syscall +li $v0 10 +syscall +label_20: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -76($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -68($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -64($fp) +lw $t0 -64($fp) +bne $t0 $zero label_21 +j label_22 +label_21: +li $v0 4 +la $a0 data_30 +syscall +li $v0 10 +syscall +label_22: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -60($fp) +la $t0 data_31 +sw $t0 -56($fp) +lw $t0 -56($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -52($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -48($fp) +lw $t0 -48($fp) +bne $t0 $zero label_23 +j label_24 +label_23: +li $v0 4 +la $a0 data_32 +syscall +li $v0 10 +syscall +label_24: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -52($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -44($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -40($fp) +lw $t0 -40($fp) +bne $t0 $zero label_25 +j label_26 +label_25: +li $v0 4 +la $a0 data_33 +syscall +li $v0 10 +syscall +label_26: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -36($fp) +la $t0 data_34 +sw $t0 -32($fp) +lw $t0 -32($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_27 +j label_28 +label_27: +li $v0 4 +la $a0 data_35 +syscall +li $v0 10 +syscall +label_28: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -20($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_29 +j label_30 +label_29: +li $v0 4 +la $a0 data_36 +syscall +li $v0 10 +syscall +label_30: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 72 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_Edge: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 7 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_Edge +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__attributes_ctor_EList: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 -12($fp) +sw $t1 12($t0) +lw $v0 0($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_isNil_at_EList: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_head_at_EList: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_31 +j label_32 +label_31: +li $v0 4 +la $a0 data_37 +syscall +li $v0 10 +syscall +label_32: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 0($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $v0 0($sp) +addi $sp $sp 4 +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_tail_at_EList: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_33 +j label_34 +label_33: +li $v0 4 +la $a0 data_38 +syscall +li $v0 10 +syscall +label_34: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 0($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 0($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_cons_at_EList: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +jal __ctor_ECons +sw $v0 -20($fp) +lw $t0 -20($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_35 +j label_36 +label_35: +li $v0 4 +la $a0 data_39 +syscall +li $v0 10 +syscall +label_36: +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 52($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_append_at_EList: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -48 +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -48($fp) +lw $t0 -48($fp) +bne $t0 $zero label_37 +j label_38 +label_37: +li $v0 4 +la $a0 data_40 +syscall +li $v0 10 +syscall +label_38: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 40($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -44($fp) +lw $t0 -44($fp) +lw $t1 12($t0) +sw $t1 -52($fp) +lw $t0 -52($fp) +bne $t0 $zero label_47 +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -40($fp) +lw $t0 -40($fp) +bne $t0 $zero label_39 +j label_40 +label_39: +li $v0 4 +la $a0 data_41 +syscall +li $v0 10 +syscall +label_40: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 36($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_41 +j label_42 +label_41: +li $v0 4 +la $a0 data_42 +syscall +li $v0 10 +syscall +label_42: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 48($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t0 -28($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_43 +j label_44 +label_43: +li $v0 4 +la $a0 data_43 +syscall +li $v0 10 +syscall +label_44: +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -20($fp) +lw $t0 -20($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_45 +j label_46 +label_45: +li $v0 4 +la $a0 data_44 +syscall +li $v0 10 +syscall +label_46: +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -56($fp) +j label_48 +label_47: +lw $t0 0($fp) +sw $t0 -56($fp) +label_48: +lw $v0 -56($fp) +addi $sp $sp 48 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_print_at_EList: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -16 +la $t0 data_45 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_49 +j label_50 +label_49: +li $v0 4 +la $a0 data_46 +syscall +li $v0 10 +syscall +label_50: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 16 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_EList: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 8 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_EList +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__attributes_ctor_ECons: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_EList +addi $sp $sp 4 +sw $v0 -16($fp) +lw $t0 0($fp) +lw $t1 -12($fp) +sw $t1 16($t0) +lw $v0 0($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_isNil_at_ECons: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_head_at_ECons: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp 0 +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $v0 0($sp) +addi $sp $sp 4 +addi $sp $sp 0 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_tail_at_ECons: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp 0 +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $v0 0($sp) +addi $sp $sp 4 +addi $sp $sp 0 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_init_at_ECons: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp 0 +lw $t0 4($fp) +lw $t1 8($fp) +addi $t1 $t1 12 +sw $t0 0($t1) +lw $t0 0($fp) +lw $t1 8($fp) +addi $t1 $t1 16 +sw $t0 0($t1) +lw $v0 8($fp) +addi $sp $sp 0 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_print_at_ECons: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -16 +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_51 +j label_52 +label_51: +li $v0 4 +la $a0 data_47 +syscall +li $v0 10 +syscall +label_52: +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_53 +j label_54 +label_53: +li $v0 4 +la $a0 data_48 +syscall +li $v0 10 +syscall +label_54: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 44($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 16 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_ECons: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 9 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_ECons +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__attributes_ctor_VList: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 -12($fp) +sw $t1 12($t0) +lw $v0 0($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_isNil_at_VList: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_head_at_VList: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_55 +j label_56 +label_55: +li $v0 4 +la $a0 data_49 +syscall +li $v0 10 +syscall +label_56: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 0($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $v0 0($sp) +addi $sp $sp 4 +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_tail_at_VList: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_57 +j label_58 +label_57: +li $v0 4 +la $a0 data_50 +syscall +li $v0 10 +syscall +label_58: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 0($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 0($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_cons_at_VList: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +jal __ctor_VCons +sw $v0 -20($fp) +lw $t0 -20($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_59 +j label_60 +label_59: +li $v0 4 +la $a0 data_51 +syscall +li $v0 10 +syscall +label_60: +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 48($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_print_at_VList: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -16 +la $t0 data_52 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_61 +j label_62 +label_61: +li $v0 4 +la $a0 data_53 +syscall +li $v0 10 +syscall +label_62: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 16 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_VList: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 10 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_VList +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__attributes_ctor_VCons: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_VList +addi $sp $sp 4 +sw $v0 -16($fp) +lw $t0 0($fp) +lw $t1 -12($fp) +sw $t1 16($t0) +lw $v0 0($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_isNil_at_VCons: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_head_at_VCons: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp 0 +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $v0 0($sp) +addi $sp $sp 4 +addi $sp $sp 0 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_tail_at_VCons: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp 0 +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $v0 0($sp) +addi $sp $sp 4 +addi $sp $sp 0 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_init_at_VCons: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp 0 +lw $t0 4($fp) +lw $t1 8($fp) +addi $t1 $t1 12 +sw $t0 0($t1) +lw $t0 0($fp) +lw $t1 8($fp) +addi $t1 $t1 16 +sw $t0 0($t1) +lw $v0 8($fp) +addi $sp $sp 0 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_print_at_VCons: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -16 +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_63 +j label_64 +label_63: +li $v0 4 +la $a0 data_54 +syscall +li $v0 10 +syscall +label_64: +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 44($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_65 +j label_66 +label_65: +li $v0 4 +la $a0 data_55 +syscall +li $v0 10 +syscall +label_66: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 40($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 16 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_VCons: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 11 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_VCons +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__attributes_ctor_Parse: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +jal __ctor_BoolOp +sw $v0 -16($fp) +lw $t0 -16($fp) +sw $t0 -20($fp) +lw $t0 0($fp) +lw $t1 -20($fp) +sw $t1 12($t0) +la $t0 data_17 +sw $t0 -12($fp) +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 0($fp) +lw $t1 -12($fp) +sw $t1 16($t0) +lw $v0 0($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_read_input_at_Parse: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -168 +jal __ctor_Graph +sw $v0 -172($fp) +lw $t0 -172($fp) +sw $t0 -176($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -164($fp) +lw $t0 -164($fp) +bne $t0 $zero label_67 +j label_68 +label_67: +li $v0 4 +la $a0 data_56 +syscall +li $v0 10 +syscall +label_68: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 16($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -160($fp) +lw $t0 -160($fp) +sw $t0 -168($fp) +label_69: +la $t0 data_57 +sw $t0 -104($fp) +lw $t0 -104($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -100($fp) +lw $t0 -168($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -132($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -124($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -116($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -120($fp) +lw $t0 -132($fp) +lw $t1 -124($fp) +seq $t0 $t0 $t1 +sw $t0 -112($fp) +lw $t0 -112($fp) +bne $t0 $zero label_70 +lw $t0 -132($fp) +lw $t1 -116($fp) +seq $t0 $t0 $t1 +sw $t0 -112($fp) +lw $t0 -112($fp) +bne $t0 $zero label_71 +lw $t0 -132($fp) +lw $t1 -120($fp) +seq $t0 $t0 $t1 +sw $t0 -112($fp) +lw $t0 -112($fp) +bne $t0 $zero label_72 +lw $t0 -168($fp) +lw $t1 -100($fp) +seq $t0 $t0 $t1 +sw $t0 -108($fp) +j label_73 +label_70: +lw $t0 -168($fp) +lw $t1 12($t0) +sw $t1 -136($fp) +lw $t0 -100($fp) +lw $t1 12($t0) +sw $t1 -128($fp) +lw $t0 -136($fp) +lw $t1 -128($fp) +seq $t0 $t0 $t1 +sw $t0 -108($fp) +j label_73 +label_71: +lw $t0 -168($fp) +lw $t1 12($t0) +sw $t1 -136($fp) +lw $t0 -100($fp) +lw $t1 12($t0) +sw $t1 -128($fp) +lw $t0 -136($fp) +move $a0 $t0 +lw $t0 -128($fp) +move $a1 $t0 +jal equal_str +sw $v0 -108($fp) +j label_73 +label_72: +lw $t0 -168($fp) +lw $t1 12($t0) +sw $t1 -136($fp) +lw $t0 -100($fp) +lw $t1 12($t0) +sw $t1 -128($fp) +lw $t0 -136($fp) +lw $t1 -128($fp) +seq $t0 $t0 $t1 +sw $t0 -108($fp) +j label_73 +label_73: +lw $t0 -108($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -140($fp) +lw $t0 -140($fp) +lw $t1 12($t0) +sw $t1 -148($fp) +lw $t0 -148($fp) +xori $t0 $t0 1 +sw $t0 -144($fp) +lw $t0 -144($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -152($fp) +la $t0 data_58 +sw $t0 -48($fp) +lw $t0 -48($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -44($fp) +lw $t0 -168($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -76($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -68($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -60($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -64($fp) +lw $t0 -76($fp) +lw $t1 -68($fp) +seq $t0 $t0 $t1 +sw $t0 -56($fp) +lw $t0 -56($fp) +bne $t0 $zero label_74 +lw $t0 -76($fp) +lw $t1 -60($fp) +seq $t0 $t0 $t1 +sw $t0 -56($fp) +lw $t0 -56($fp) +bne $t0 $zero label_75 +lw $t0 -76($fp) +lw $t1 -64($fp) +seq $t0 $t0 $t1 +sw $t0 -56($fp) +lw $t0 -56($fp) +bne $t0 $zero label_76 +lw $t0 -168($fp) +lw $t1 -44($fp) +seq $t0 $t0 $t1 +sw $t0 -52($fp) +j label_77 +label_74: +lw $t0 -168($fp) +lw $t1 12($t0) +sw $t1 -80($fp) +lw $t0 -44($fp) +lw $t1 12($t0) +sw $t1 -72($fp) +lw $t0 -80($fp) +lw $t1 -72($fp) +seq $t0 $t0 $t1 +sw $t0 -52($fp) +j label_77 +label_75: +lw $t0 -168($fp) +lw $t1 12($t0) +sw $t1 -80($fp) +lw $t0 -44($fp) +lw $t1 12($t0) +sw $t1 -72($fp) +lw $t0 -80($fp) +move $a0 $t0 +lw $t0 -72($fp) +move $a1 $t0 +jal equal_str +sw $v0 -52($fp) +j label_77 +label_76: +lw $t0 -168($fp) +lw $t1 12($t0) +sw $t1 -80($fp) +lw $t0 -44($fp) +lw $t1 12($t0) +sw $t1 -72($fp) +lw $t0 -80($fp) +lw $t1 -72($fp) +seq $t0 $t0 $t1 +sw $t0 -52($fp) +j label_77 +label_77: +lw $t0 -52($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -84($fp) +lw $t0 -84($fp) +lw $t1 12($t0) +sw $t1 -92($fp) +lw $t0 -92($fp) +xori $t0 $t0 1 +sw $t0 -88($fp) +lw $t0 -88($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -96($fp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -40($fp) +lw $t0 -40($fp) +bne $t0 $zero label_78 +j label_79 +label_78: +li $v0 4 +la $a0 data_59 +syscall +li $v0 10 +syscall +label_79: +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -152($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -96($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -36($fp) +lw $t0 -36($fp) +lw $t1 12($t0) +sw $t1 -156($fp) +lw $t0 -156($fp) +bne $t0 $zero label_80 +j label_87 +label_80: +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_81 +j label_82 +label_81: +li $v0 4 +la $a0 data_60 +syscall +li $v0 10 +syscall +label_82: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -168($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 40($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -28($fp) +lw $t0 -176($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_83 +j label_84 +label_83: +li $v0 4 +la $a0 data_61 +syscall +li $v0 10 +syscall +label_84: +lw $t0 -176($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -176($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -20($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_85 +j label_86 +label_85: +li $v0 4 +la $a0 data_62 +syscall +li $v0 10 +syscall +label_86: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 16($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -168($fp) +j label_69 +label_87: +lw $v0 -176($fp) +addi $sp $sp 168 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_parse_line_at_Parse: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -140 +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -144($fp) +lw $t0 -144($fp) +bne $t0 $zero label_88 +j label_89 +label_88: +li $v0 4 +la $a0 data_63 +syscall +li $v0 10 +syscall +label_89: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -140($fp) +jal __ctor_Vertice +sw $v0 -136($fp) +lw $t0 -136($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -132($fp) +lw $t0 -132($fp) +bne $t0 $zero label_90 +j label_91 +label_90: +li $v0 4 +la $a0 data_64 +syscall +li $v0 10 +syscall +label_91: +lw $t0 -136($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -140($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -136($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -128($fp) +lw $t0 -128($fp) +sw $t0 -148($fp) +label_92: +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -72($fp) +lw $t0 -72($fp) +bne $t0 $zero label_93 +j label_94 +label_93: +li $v0 4 +la $a0 data_65 +syscall +li $v0 10 +syscall +label_94: +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -68($fp) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -64($fp) +lw $t0 -68($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -100($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -92($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -84($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -88($fp) +lw $t0 -100($fp) +lw $t1 -92($fp) +seq $t0 $t0 $t1 +sw $t0 -80($fp) +lw $t0 -80($fp) +bne $t0 $zero label_95 +lw $t0 -100($fp) +lw $t1 -84($fp) +seq $t0 $t0 $t1 +sw $t0 -80($fp) +lw $t0 -80($fp) +bne $t0 $zero label_96 +lw $t0 -100($fp) +lw $t1 -88($fp) +seq $t0 $t0 $t1 +sw $t0 -80($fp) +lw $t0 -80($fp) +bne $t0 $zero label_97 +lw $t0 -68($fp) +lw $t1 -64($fp) +seq $t0 $t0 $t1 +sw $t0 -76($fp) +j label_98 +label_95: +lw $t0 -68($fp) +lw $t1 12($t0) +sw $t1 -104($fp) +lw $t0 -64($fp) +lw $t1 12($t0) +sw $t1 -96($fp) +lw $t0 -104($fp) +lw $t1 -96($fp) +seq $t0 $t0 $t1 +sw $t0 -76($fp) +j label_98 +label_96: +lw $t0 -68($fp) +lw $t1 12($t0) +sw $t1 -104($fp) +lw $t0 -64($fp) +lw $t1 12($t0) +sw $t1 -96($fp) +lw $t0 -104($fp) +move $a0 $t0 +lw $t0 -96($fp) +move $a1 $t0 +jal equal_str +sw $v0 -76($fp) +j label_98 +label_97: +lw $t0 -68($fp) +lw $t1 12($t0) +sw $t1 -104($fp) +lw $t0 -64($fp) +lw $t1 12($t0) +sw $t1 -96($fp) +lw $t0 -104($fp) +lw $t1 -96($fp) +seq $t0 $t0 $t1 +sw $t0 -76($fp) +j label_98 +label_98: +lw $t0 -76($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -108($fp) +lw $t0 -108($fp) +lw $t1 12($t0) +sw $t1 -116($fp) +lw $t0 -116($fp) +xori $t0 $t0 1 +sw $t0 -112($fp) +lw $t0 -112($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -120($fp) +lw $t0 -120($fp) +lw $t1 12($t0) +sw $t1 -124($fp) +lw $t0 -124($fp) +bne $t0 $zero label_99 +j label_110 +label_99: +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -56($fp) +lw $t0 -56($fp) +bne $t0 $zero label_100 +j label_101 +label_100: +li $v0 4 +la $a0 data_66 +syscall +li $v0 10 +syscall +label_101: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -52($fp) +lw $t0 -52($fp) +sw $t0 -60($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -44($fp) +lw $t0 -44($fp) +bne $t0 $zero label_102 +j label_103 +label_102: +li $v0 4 +la $a0 data_67 +syscall +li $v0 10 +syscall +label_103: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -40($fp) +lw $t0 -40($fp) +sw $t0 -48($fp) +lw $t0 -148($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -36($fp) +lw $t0 -36($fp) +bne $t0 $zero label_104 +j label_105 +label_104: +li $v0 4 +la $a0 data_68 +syscall +li $v0 10 +syscall +label_105: +lw $t0 -148($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -148($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 36($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -32($fp) +jal __ctor_Edge +sw $v0 -28($fp) +lw $t0 -28($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_106 +j label_107 +label_106: +li $v0 4 +la $a0 data_69 +syscall +li $v0 10 +syscall +label_107: +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -32($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -60($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -48($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 16 +sw $v0 -20($fp) +lw $t0 -148($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_108 +j label_109 +label_108: +li $v0 4 +la $a0 data_70 +syscall +li $v0 10 +syscall +label_109: +lw $t0 -148($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -148($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +j label_92 +label_110: +lw $v0 -148($fp) +addi $sp $sp 140 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_c2i_at_Parse: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -572 +la $t0 data_71 +sw $t0 -536($fp) +lw $t0 -536($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -532($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -564($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -556($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -548($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -552($fp) +lw $t0 -564($fp) +lw $t1 -556($fp) +seq $t0 $t0 $t1 +sw $t0 -544($fp) +lw $t0 -544($fp) +bne $t0 $zero label_111 +lw $t0 -564($fp) +lw $t1 -548($fp) +seq $t0 $t0 $t1 +sw $t0 -544($fp) +lw $t0 -544($fp) +bne $t0 $zero label_112 +lw $t0 -564($fp) +lw $t1 -552($fp) +seq $t0 $t0 $t1 +sw $t0 -544($fp) +lw $t0 -544($fp) +bne $t0 $zero label_113 +lw $t0 0($fp) +lw $t1 -532($fp) +seq $t0 $t0 $t1 +sw $t0 -540($fp) +j label_114 +label_111: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -568($fp) +lw $t0 -532($fp) +lw $t1 12($t0) +sw $t1 -560($fp) +lw $t0 -568($fp) +lw $t1 -560($fp) +seq $t0 $t0 $t1 +sw $t0 -540($fp) +j label_114 +label_112: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -568($fp) +lw $t0 -532($fp) +lw $t1 12($t0) +sw $t1 -560($fp) +lw $t0 -568($fp) +move $a0 $t0 +lw $t0 -560($fp) +move $a1 $t0 +jal equal_str +sw $v0 -540($fp) +j label_114 +label_113: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -568($fp) +lw $t0 -532($fp) +lw $t1 12($t0) +sw $t1 -560($fp) +lw $t0 -568($fp) +lw $t1 -560($fp) +seq $t0 $t0 $t1 +sw $t0 -540($fp) +j label_114 +label_114: +lw $t0 -540($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -572($fp) +lw $t0 -572($fp) +lw $t1 12($t0) +sw $t1 -576($fp) +lw $t0 -576($fp) +bne $t0 $zero label_171 +la $t0 data_72 +sw $t0 -484($fp) +lw $t0 -484($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -480($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -512($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -504($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -496($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -500($fp) +lw $t0 -512($fp) +lw $t1 -504($fp) +seq $t0 $t0 $t1 +sw $t0 -492($fp) +lw $t0 -492($fp) +bne $t0 $zero label_115 +lw $t0 -512($fp) +lw $t1 -496($fp) +seq $t0 $t0 $t1 +sw $t0 -492($fp) +lw $t0 -492($fp) +bne $t0 $zero label_116 +lw $t0 -512($fp) +lw $t1 -500($fp) +seq $t0 $t0 $t1 +sw $t0 -492($fp) +lw $t0 -492($fp) +bne $t0 $zero label_117 +lw $t0 0($fp) +lw $t1 -480($fp) +seq $t0 $t0 $t1 +sw $t0 -488($fp) +j label_118 +label_115: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -516($fp) +lw $t0 -480($fp) +lw $t1 12($t0) +sw $t1 -508($fp) +lw $t0 -516($fp) +lw $t1 -508($fp) +seq $t0 $t0 $t1 +sw $t0 -488($fp) +j label_118 +label_116: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -516($fp) +lw $t0 -480($fp) +lw $t1 12($t0) +sw $t1 -508($fp) +lw $t0 -516($fp) +move $a0 $t0 +lw $t0 -508($fp) +move $a1 $t0 +jal equal_str +sw $v0 -488($fp) +j label_118 +label_117: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -516($fp) +lw $t0 -480($fp) +lw $t1 12($t0) +sw $t1 -508($fp) +lw $t0 -516($fp) +lw $t1 -508($fp) +seq $t0 $t0 $t1 +sw $t0 -488($fp) +j label_118 +label_118: +lw $t0 -488($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -520($fp) +lw $t0 -520($fp) +lw $t1 12($t0) +sw $t1 -524($fp) +lw $t0 -524($fp) +bne $t0 $zero label_169 +la $t0 data_73 +sw $t0 -432($fp) +lw $t0 -432($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -428($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -460($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -452($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -444($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -448($fp) +lw $t0 -460($fp) +lw $t1 -452($fp) +seq $t0 $t0 $t1 +sw $t0 -440($fp) +lw $t0 -440($fp) +bne $t0 $zero label_119 +lw $t0 -460($fp) +lw $t1 -444($fp) +seq $t0 $t0 $t1 +sw $t0 -440($fp) +lw $t0 -440($fp) +bne $t0 $zero label_120 +lw $t0 -460($fp) +lw $t1 -448($fp) +seq $t0 $t0 $t1 +sw $t0 -440($fp) +lw $t0 -440($fp) +bne $t0 $zero label_121 +lw $t0 0($fp) +lw $t1 -428($fp) +seq $t0 $t0 $t1 +sw $t0 -436($fp) +j label_122 +label_119: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -464($fp) +lw $t0 -428($fp) +lw $t1 12($t0) +sw $t1 -456($fp) +lw $t0 -464($fp) +lw $t1 -456($fp) +seq $t0 $t0 $t1 +sw $t0 -436($fp) +j label_122 +label_120: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -464($fp) +lw $t0 -428($fp) +lw $t1 12($t0) +sw $t1 -456($fp) +lw $t0 -464($fp) +move $a0 $t0 +lw $t0 -456($fp) +move $a1 $t0 +jal equal_str +sw $v0 -436($fp) +j label_122 +label_121: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -464($fp) +lw $t0 -428($fp) +lw $t1 12($t0) +sw $t1 -456($fp) +lw $t0 -464($fp) +lw $t1 -456($fp) +seq $t0 $t0 $t1 +sw $t0 -436($fp) +j label_122 +label_122: +lw $t0 -436($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -468($fp) +lw $t0 -468($fp) +lw $t1 12($t0) +sw $t1 -472($fp) +lw $t0 -472($fp) +bne $t0 $zero label_167 +la $t0 data_74 +sw $t0 -380($fp) +lw $t0 -380($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -376($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -408($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -400($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -392($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -396($fp) +lw $t0 -408($fp) +lw $t1 -400($fp) +seq $t0 $t0 $t1 +sw $t0 -388($fp) +lw $t0 -388($fp) +bne $t0 $zero label_123 +lw $t0 -408($fp) +lw $t1 -392($fp) +seq $t0 $t0 $t1 +sw $t0 -388($fp) +lw $t0 -388($fp) +bne $t0 $zero label_124 +lw $t0 -408($fp) +lw $t1 -396($fp) +seq $t0 $t0 $t1 +sw $t0 -388($fp) +lw $t0 -388($fp) +bne $t0 $zero label_125 +lw $t0 0($fp) +lw $t1 -376($fp) +seq $t0 $t0 $t1 +sw $t0 -384($fp) +j label_126 +label_123: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -412($fp) +lw $t0 -376($fp) +lw $t1 12($t0) +sw $t1 -404($fp) +lw $t0 -412($fp) +lw $t1 -404($fp) +seq $t0 $t0 $t1 +sw $t0 -384($fp) +j label_126 +label_124: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -412($fp) +lw $t0 -376($fp) +lw $t1 12($t0) +sw $t1 -404($fp) +lw $t0 -412($fp) +move $a0 $t0 +lw $t0 -404($fp) +move $a1 $t0 +jal equal_str +sw $v0 -384($fp) +j label_126 +label_125: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -412($fp) +lw $t0 -376($fp) +lw $t1 12($t0) +sw $t1 -404($fp) +lw $t0 -412($fp) +lw $t1 -404($fp) +seq $t0 $t0 $t1 +sw $t0 -384($fp) +j label_126 +label_126: +lw $t0 -384($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -416($fp) +lw $t0 -416($fp) +lw $t1 12($t0) +sw $t1 -420($fp) +lw $t0 -420($fp) +bne $t0 $zero label_165 +la $t0 data_75 +sw $t0 -328($fp) +lw $t0 -328($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -324($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -356($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -348($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -340($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -344($fp) +lw $t0 -356($fp) +lw $t1 -348($fp) +seq $t0 $t0 $t1 +sw $t0 -336($fp) +lw $t0 -336($fp) +bne $t0 $zero label_127 +lw $t0 -356($fp) +lw $t1 -340($fp) +seq $t0 $t0 $t1 +sw $t0 -336($fp) +lw $t0 -336($fp) +bne $t0 $zero label_128 +lw $t0 -356($fp) +lw $t1 -344($fp) +seq $t0 $t0 $t1 +sw $t0 -336($fp) +lw $t0 -336($fp) +bne $t0 $zero label_129 +lw $t0 0($fp) +lw $t1 -324($fp) +seq $t0 $t0 $t1 +sw $t0 -332($fp) +j label_130 +label_127: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -360($fp) +lw $t0 -324($fp) +lw $t1 12($t0) +sw $t1 -352($fp) +lw $t0 -360($fp) +lw $t1 -352($fp) +seq $t0 $t0 $t1 +sw $t0 -332($fp) +j label_130 +label_128: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -360($fp) +lw $t0 -324($fp) +lw $t1 12($t0) +sw $t1 -352($fp) +lw $t0 -360($fp) +move $a0 $t0 +lw $t0 -352($fp) +move $a1 $t0 +jal equal_str +sw $v0 -332($fp) +j label_130 +label_129: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -360($fp) +lw $t0 -324($fp) +lw $t1 12($t0) +sw $t1 -352($fp) +lw $t0 -360($fp) +lw $t1 -352($fp) +seq $t0 $t0 $t1 +sw $t0 -332($fp) +j label_130 +label_130: +lw $t0 -332($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -364($fp) +lw $t0 -364($fp) +lw $t1 12($t0) +sw $t1 -368($fp) +lw $t0 -368($fp) +bne $t0 $zero label_163 +la $t0 data_76 +sw $t0 -276($fp) +lw $t0 -276($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -272($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -304($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -296($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -288($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -292($fp) +lw $t0 -304($fp) +lw $t1 -296($fp) +seq $t0 $t0 $t1 +sw $t0 -284($fp) +lw $t0 -284($fp) +bne $t0 $zero label_131 +lw $t0 -304($fp) +lw $t1 -288($fp) +seq $t0 $t0 $t1 +sw $t0 -284($fp) +lw $t0 -284($fp) +bne $t0 $zero label_132 +lw $t0 -304($fp) +lw $t1 -292($fp) +seq $t0 $t0 $t1 +sw $t0 -284($fp) +lw $t0 -284($fp) +bne $t0 $zero label_133 +lw $t0 0($fp) +lw $t1 -272($fp) +seq $t0 $t0 $t1 +sw $t0 -280($fp) +j label_134 +label_131: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -308($fp) +lw $t0 -272($fp) +lw $t1 12($t0) +sw $t1 -300($fp) +lw $t0 -308($fp) +lw $t1 -300($fp) +seq $t0 $t0 $t1 +sw $t0 -280($fp) +j label_134 +label_132: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -308($fp) +lw $t0 -272($fp) +lw $t1 12($t0) +sw $t1 -300($fp) +lw $t0 -308($fp) +move $a0 $t0 +lw $t0 -300($fp) +move $a1 $t0 +jal equal_str +sw $v0 -280($fp) +j label_134 +label_133: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -308($fp) +lw $t0 -272($fp) +lw $t1 12($t0) +sw $t1 -300($fp) +lw $t0 -308($fp) +lw $t1 -300($fp) +seq $t0 $t0 $t1 +sw $t0 -280($fp) +j label_134 +label_134: +lw $t0 -280($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -312($fp) +lw $t0 -312($fp) +lw $t1 12($t0) +sw $t1 -316($fp) +lw $t0 -316($fp) +bne $t0 $zero label_161 +la $t0 data_77 +sw $t0 -224($fp) +lw $t0 -224($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -220($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -252($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -244($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -236($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -240($fp) +lw $t0 -252($fp) +lw $t1 -244($fp) +seq $t0 $t0 $t1 +sw $t0 -232($fp) +lw $t0 -232($fp) +bne $t0 $zero label_135 +lw $t0 -252($fp) +lw $t1 -236($fp) +seq $t0 $t0 $t1 +sw $t0 -232($fp) +lw $t0 -232($fp) +bne $t0 $zero label_136 +lw $t0 -252($fp) +lw $t1 -240($fp) +seq $t0 $t0 $t1 +sw $t0 -232($fp) +lw $t0 -232($fp) +bne $t0 $zero label_137 +lw $t0 0($fp) +lw $t1 -220($fp) +seq $t0 $t0 $t1 +sw $t0 -228($fp) +j label_138 +label_135: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -256($fp) +lw $t0 -220($fp) +lw $t1 12($t0) +sw $t1 -248($fp) +lw $t0 -256($fp) +lw $t1 -248($fp) +seq $t0 $t0 $t1 +sw $t0 -228($fp) +j label_138 +label_136: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -256($fp) +lw $t0 -220($fp) +lw $t1 12($t0) +sw $t1 -248($fp) +lw $t0 -256($fp) +move $a0 $t0 +lw $t0 -248($fp) +move $a1 $t0 +jal equal_str +sw $v0 -228($fp) +j label_138 +label_137: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -256($fp) +lw $t0 -220($fp) +lw $t1 12($t0) +sw $t1 -248($fp) +lw $t0 -256($fp) +lw $t1 -248($fp) +seq $t0 $t0 $t1 +sw $t0 -228($fp) +j label_138 +label_138: +lw $t0 -228($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -260($fp) +lw $t0 -260($fp) +lw $t1 12($t0) +sw $t1 -264($fp) +lw $t0 -264($fp) +bne $t0 $zero label_159 +la $t0 data_78 +sw $t0 -172($fp) +lw $t0 -172($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -168($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -200($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -192($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -184($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -188($fp) +lw $t0 -200($fp) +lw $t1 -192($fp) +seq $t0 $t0 $t1 +sw $t0 -180($fp) +lw $t0 -180($fp) +bne $t0 $zero label_139 +lw $t0 -200($fp) +lw $t1 -184($fp) +seq $t0 $t0 $t1 +sw $t0 -180($fp) +lw $t0 -180($fp) +bne $t0 $zero label_140 +lw $t0 -200($fp) +lw $t1 -188($fp) +seq $t0 $t0 $t1 +sw $t0 -180($fp) +lw $t0 -180($fp) +bne $t0 $zero label_141 +lw $t0 0($fp) +lw $t1 -168($fp) +seq $t0 $t0 $t1 +sw $t0 -176($fp) +j label_142 +label_139: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -204($fp) +lw $t0 -168($fp) +lw $t1 12($t0) +sw $t1 -196($fp) +lw $t0 -204($fp) +lw $t1 -196($fp) +seq $t0 $t0 $t1 +sw $t0 -176($fp) +j label_142 +label_140: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -204($fp) +lw $t0 -168($fp) +lw $t1 12($t0) +sw $t1 -196($fp) +lw $t0 -204($fp) +move $a0 $t0 +lw $t0 -196($fp) +move $a1 $t0 +jal equal_str +sw $v0 -176($fp) +j label_142 +label_141: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -204($fp) +lw $t0 -168($fp) +lw $t1 12($t0) +sw $t1 -196($fp) +lw $t0 -204($fp) +lw $t1 -196($fp) +seq $t0 $t0 $t1 +sw $t0 -176($fp) +j label_142 +label_142: +lw $t0 -176($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -208($fp) +lw $t0 -208($fp) +lw $t1 12($t0) +sw $t1 -212($fp) +lw $t0 -212($fp) +bne $t0 $zero label_157 +la $t0 data_79 +sw $t0 -120($fp) +lw $t0 -120($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -116($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -148($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -140($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -132($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -136($fp) +lw $t0 -148($fp) +lw $t1 -140($fp) +seq $t0 $t0 $t1 +sw $t0 -128($fp) +lw $t0 -128($fp) +bne $t0 $zero label_143 +lw $t0 -148($fp) +lw $t1 -132($fp) +seq $t0 $t0 $t1 +sw $t0 -128($fp) +lw $t0 -128($fp) +bne $t0 $zero label_144 +lw $t0 -148($fp) +lw $t1 -136($fp) +seq $t0 $t0 $t1 +sw $t0 -128($fp) +lw $t0 -128($fp) +bne $t0 $zero label_145 +lw $t0 0($fp) +lw $t1 -116($fp) +seq $t0 $t0 $t1 +sw $t0 -124($fp) +j label_146 +label_143: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -152($fp) +lw $t0 -116($fp) +lw $t1 12($t0) +sw $t1 -144($fp) +lw $t0 -152($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -124($fp) +j label_146 +label_144: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -152($fp) +lw $t0 -116($fp) +lw $t1 12($t0) +sw $t1 -144($fp) +lw $t0 -152($fp) +move $a0 $t0 +lw $t0 -144($fp) +move $a1 $t0 +jal equal_str +sw $v0 -124($fp) +j label_146 +label_145: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -152($fp) +lw $t0 -116($fp) +lw $t1 12($t0) +sw $t1 -144($fp) +lw $t0 -152($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -124($fp) +j label_146 +label_146: +lw $t0 -124($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -156($fp) +lw $t0 -156($fp) +lw $t1 12($t0) +sw $t1 -160($fp) +lw $t0 -160($fp) +bne $t0 $zero label_155 +la $t0 data_80 +sw $t0 -68($fp) +lw $t0 -68($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -64($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -96($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -88($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -80($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -84($fp) +lw $t0 -96($fp) +lw $t1 -88($fp) +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_147 +lw $t0 -96($fp) +lw $t1 -80($fp) +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_148 +lw $t0 -96($fp) +lw $t1 -84($fp) +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_149 +lw $t0 0($fp) +lw $t1 -64($fp) +seq $t0 $t0 $t1 +sw $t0 -72($fp) +j label_150 +label_147: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -100($fp) +lw $t0 -64($fp) +lw $t1 12($t0) +sw $t1 -92($fp) +lw $t0 -100($fp) +lw $t1 -92($fp) +seq $t0 $t0 $t1 +sw $t0 -72($fp) +j label_150 +label_148: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -100($fp) +lw $t0 -64($fp) +lw $t1 12($t0) +sw $t1 -92($fp) +lw $t0 -100($fp) +move $a0 $t0 +lw $t0 -92($fp) +move $a1 $t0 +jal equal_str +sw $v0 -72($fp) +j label_150 +label_149: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -100($fp) +lw $t0 -64($fp) +lw $t1 12($t0) +sw $t1 -92($fp) +lw $t0 -100($fp) +lw $t1 -92($fp) +seq $t0 $t0 $t1 +sw $t0 -72($fp) +j label_150 +label_150: +lw $t0 -72($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -104($fp) +lw $t0 -104($fp) +lw $t1 12($t0) +sw $t1 -108($fp) +lw $t0 -108($fp) +bne $t0 $zero label_153 +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -60($fp) +lw $t0 -60($fp) +bne $t0 $zero label_151 +j label_152 +label_151: +li $v0 4 +la $a0 data_81 +syscall +li $v0 10 +syscall +label_152: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 0($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -56($fp) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -52($fp) +lw $t0 -52($fp) +sw $t0 -112($fp) +j label_154 +label_153: +li $t0 9 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -48($fp) +lw $t0 -48($fp) +sw $t0 -112($fp) +label_154: +lw $t0 -112($fp) +sw $t0 -164($fp) +j label_156 +label_155: +li $t0 8 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -44($fp) +lw $t0 -44($fp) +sw $t0 -164($fp) +label_156: +lw $t0 -164($fp) +sw $t0 -216($fp) +j label_158 +label_157: +li $t0 7 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -40($fp) +lw $t0 -40($fp) +sw $t0 -216($fp) +label_158: +lw $t0 -216($fp) +sw $t0 -268($fp) +j label_160 +label_159: +li $t0 6 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 -36($fp) +sw $t0 -268($fp) +label_160: +lw $t0 -268($fp) +sw $t0 -320($fp) +j label_162 +label_161: +li $t0 5 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -32($fp) +lw $t0 -32($fp) +sw $t0 -320($fp) +label_162: +lw $t0 -320($fp) +sw $t0 -372($fp) +j label_164 +label_163: +li $t0 4 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t0 -28($fp) +sw $t0 -372($fp) +label_164: +lw $t0 -372($fp) +sw $t0 -424($fp) +j label_166 +label_165: +li $t0 3 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -24($fp) +lw $t0 -24($fp) +sw $t0 -424($fp) +label_166: +lw $t0 -424($fp) +sw $t0 -476($fp) +j label_168 +label_167: +li $t0 2 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 -20($fp) +sw $t0 -476($fp) +label_168: +lw $t0 -476($fp) +sw $t0 -528($fp) +j label_170 +label_169: +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -16($fp) +lw $t0 -16($fp) +sw $t0 -528($fp) +label_170: +lw $t0 -528($fp) +sw $t0 -580($fp) +j label_172 +label_171: +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -580($fp) +label_172: +lw $v0 -580($fp) +addi $sp $sp 572 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_a2i_at_Parse: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -312 +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -276($fp) +lw $t0 -276($fp) +bne $t0 $zero label_173 +j label_174 +label_173: +li $v0 4 +la $a0 data_82 +syscall +li $v0 10 +syscall +label_174: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -272($fp) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -268($fp) +lw $t0 -272($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -304($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -296($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -288($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -292($fp) +lw $t0 -304($fp) +lw $t1 -296($fp) +seq $t0 $t0 $t1 +sw $t0 -284($fp) +lw $t0 -284($fp) +bne $t0 $zero label_175 +lw $t0 -304($fp) +lw $t1 -288($fp) +seq $t0 $t0 $t1 +sw $t0 -284($fp) +lw $t0 -284($fp) +bne $t0 $zero label_176 +lw $t0 -304($fp) +lw $t1 -292($fp) +seq $t0 $t0 $t1 +sw $t0 -284($fp) +lw $t0 -284($fp) +bne $t0 $zero label_177 +lw $t0 -272($fp) +lw $t1 -268($fp) +seq $t0 $t0 $t1 +sw $t0 -280($fp) +j label_178 +label_175: +lw $t0 -272($fp) +lw $t1 12($t0) +sw $t1 -308($fp) +lw $t0 -268($fp) +lw $t1 12($t0) +sw $t1 -300($fp) +lw $t0 -308($fp) +lw $t1 -300($fp) +seq $t0 $t0 $t1 +sw $t0 -280($fp) +j label_178 +label_176: +lw $t0 -272($fp) +lw $t1 12($t0) +sw $t1 -308($fp) +lw $t0 -268($fp) +lw $t1 12($t0) +sw $t1 -300($fp) +lw $t0 -308($fp) +move $a0 $t0 +lw $t0 -300($fp) +move $a1 $t0 +jal equal_str +sw $v0 -280($fp) +j label_178 +label_177: +lw $t0 -272($fp) +lw $t1 12($t0) +sw $t1 -308($fp) +lw $t0 -268($fp) +lw $t1 12($t0) +sw $t1 -300($fp) +lw $t0 -308($fp) +lw $t1 -300($fp) +seq $t0 $t0 $t1 +sw $t0 -280($fp) +j label_178 +label_178: +lw $t0 -280($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -312($fp) +lw $t0 -312($fp) +lw $t1 12($t0) +sw $t1 -316($fp) +lw $t0 -316($fp) +bne $t0 $zero label_209 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -220($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -216($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -212($fp) +lw $t0 -212($fp) +bne $t0 $zero label_179 +j label_180 +label_179: +li $v0 4 +la $a0 data_83 +syscall +li $v0 10 +syscall +label_180: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -220($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -216($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -208($fp) +la $t0 data_84 +sw $t0 -204($fp) +lw $t0 -204($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -200($fp) +lw $t0 -208($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -248($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -240($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -232($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -236($fp) +lw $t0 -248($fp) +lw $t1 -240($fp) +seq $t0 $t0 $t1 +sw $t0 -228($fp) +lw $t0 -228($fp) +bne $t0 $zero label_181 +lw $t0 -248($fp) +lw $t1 -232($fp) +seq $t0 $t0 $t1 +sw $t0 -228($fp) +lw $t0 -228($fp) +bne $t0 $zero label_182 +lw $t0 -248($fp) +lw $t1 -236($fp) +seq $t0 $t0 $t1 +sw $t0 -228($fp) +lw $t0 -228($fp) +bne $t0 $zero label_183 +lw $t0 -208($fp) +lw $t1 -200($fp) +seq $t0 $t0 $t1 +sw $t0 -224($fp) +j label_184 +label_181: +lw $t0 -208($fp) +lw $t1 12($t0) +sw $t1 -252($fp) +lw $t0 -200($fp) +lw $t1 12($t0) +sw $t1 -244($fp) +lw $t0 -252($fp) +lw $t1 -244($fp) +seq $t0 $t0 $t1 +sw $t0 -224($fp) +j label_184 +label_182: +lw $t0 -208($fp) +lw $t1 12($t0) +sw $t1 -252($fp) +lw $t0 -200($fp) +lw $t1 12($t0) +sw $t1 -244($fp) +lw $t0 -252($fp) +move $a0 $t0 +lw $t0 -244($fp) +move $a1 $t0 +jal equal_str +sw $v0 -224($fp) +j label_184 +label_183: +lw $t0 -208($fp) +lw $t1 12($t0) +sw $t1 -252($fp) +lw $t0 -200($fp) +lw $t1 12($t0) +sw $t1 -244($fp) +lw $t0 -252($fp) +lw $t1 -244($fp) +seq $t0 $t0 $t1 +sw $t0 -224($fp) +j label_184 +label_184: +lw $t0 -224($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -256($fp) +lw $t0 -256($fp) +lw $t1 12($t0) +sw $t1 -260($fp) +lw $t0 -260($fp) +bne $t0 $zero label_201 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -152($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -148($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -144($fp) +lw $t0 -144($fp) +bne $t0 $zero label_185 +j label_186 +label_185: +li $v0 4 +la $a0 data_85 +syscall +li $v0 10 +syscall +label_186: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -152($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -148($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -140($fp) +la $t0 data_86 +sw $t0 -136($fp) +lw $t0 -136($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -132($fp) +lw $t0 -140($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -180($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -172($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -164($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -168($fp) +lw $t0 -180($fp) +lw $t1 -172($fp) +seq $t0 $t0 $t1 +sw $t0 -160($fp) +lw $t0 -160($fp) +bne $t0 $zero label_187 +lw $t0 -180($fp) +lw $t1 -164($fp) +seq $t0 $t0 $t1 +sw $t0 -160($fp) +lw $t0 -160($fp) +bne $t0 $zero label_188 +lw $t0 -180($fp) +lw $t1 -168($fp) +seq $t0 $t0 $t1 +sw $t0 -160($fp) +lw $t0 -160($fp) +bne $t0 $zero label_189 +lw $t0 -140($fp) +lw $t1 -132($fp) +seq $t0 $t0 $t1 +sw $t0 -156($fp) +j label_190 +label_187: +lw $t0 -140($fp) +lw $t1 12($t0) +sw $t1 -184($fp) +lw $t0 -132($fp) +lw $t1 12($t0) +sw $t1 -176($fp) +lw $t0 -184($fp) +lw $t1 -176($fp) +seq $t0 $t0 $t1 +sw $t0 -156($fp) +j label_190 +label_188: +lw $t0 -140($fp) +lw $t1 12($t0) +sw $t1 -184($fp) +lw $t0 -132($fp) +lw $t1 12($t0) +sw $t1 -176($fp) +lw $t0 -184($fp) +move $a0 $t0 +lw $t0 -176($fp) +move $a1 $t0 +jal equal_str +sw $v0 -156($fp) +j label_190 +label_189: +lw $t0 -140($fp) +lw $t1 12($t0) +sw $t1 -184($fp) +lw $t0 -132($fp) +lw $t1 12($t0) +sw $t1 -176($fp) +lw $t0 -184($fp) +lw $t1 -176($fp) +seq $t0 $t0 $t1 +sw $t0 -156($fp) +j label_190 +label_190: +lw $t0 -156($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -188($fp) +lw $t0 -188($fp) +lw $t1 12($t0) +sw $t1 -192($fp) +lw $t0 -192($fp) +bne $t0 $zero label_193 +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -128($fp) +lw $t0 -128($fp) +bne $t0 $zero label_191 +j label_192 +label_191: +li $v0 4 +la $a0 data_87 +syscall +li $v0 10 +syscall +label_192: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -124($fp) +lw $t0 -124($fp) +sw $t0 -196($fp) +j label_200 +label_193: +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -120($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -100($fp) +lw $t0 -100($fp) +bne $t0 $zero label_194 +j label_195 +label_194: +li $v0 4 +la $a0 data_88 +syscall +li $v0 10 +syscall +label_195: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -96($fp) +lw $t0 -96($fp) +lw $t1 12($t0) +sw $t1 -112($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -92($fp) +lw $t0 -92($fp) +lw $t1 12($t0) +sw $t1 -108($fp) +lw $t0 -112($fp) +lw $t1 -108($fp) +sub $t0 $t0 $t1 +sw $t0 -104($fp) +lw $t0 -104($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -116($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -88($fp) +lw $t0 -88($fp) +bne $t0 $zero label_196 +j label_197 +label_196: +li $v0 4 +la $a0 data_89 +syscall +li $v0 10 +syscall +label_197: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -120($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -116($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -84($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -80($fp) +lw $t0 -80($fp) +bne $t0 $zero label_198 +j label_199 +label_198: +li $v0 4 +la $a0 data_90 +syscall +li $v0 10 +syscall +label_199: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -84($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -76($fp) +lw $t0 -76($fp) +sw $t0 -196($fp) +label_200: +lw $t0 -196($fp) +sw $t0 -264($fp) +j label_208 +label_201: +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -60($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -40($fp) +lw $t0 -40($fp) +bne $t0 $zero label_202 +j label_203 +label_202: +li $v0 4 +la $a0 data_91 +syscall +li $v0 10 +syscall +label_203: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 -36($fp) +lw $t1 12($t0) +sw $t1 -52($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -32($fp) +lw $t0 -32($fp) +lw $t1 12($t0) +sw $t1 -48($fp) +lw $t0 -52($fp) +lw $t1 -48($fp) +sub $t0 $t0 $t1 +sw $t0 -44($fp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -56($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -28($fp) +lw $t0 -28($fp) +bne $t0 $zero label_204 +j label_205 +label_204: +li $v0 4 +la $a0 data_92 +syscall +li $v0 10 +syscall +label_205: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -60($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -56($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -24($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -20($fp) +lw $t0 -20($fp) +bne $t0 $zero label_206 +j label_207 +label_206: +li $v0 4 +la $a0 data_93 +syscall +li $v0 10 +syscall +label_207: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -16($fp) +lw $t0 -16($fp) +lw $t1 12($t0) +sw $t1 -68($fp) +lw $t0 -68($fp) +not $t0 $t0 +addi $t0 $t0 1 +sw $t0 -64($fp) +lw $t0 -64($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -72($fp) +lw $t0 -72($fp) +sw $t0 -264($fp) +label_208: +lw $t0 -264($fp) +sw $t0 -320($fp) +j label_210 +label_209: +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -320($fp) +label_210: +lw $v0 -320($fp) +addi $sp $sp 312 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_a2i_aux_at_Parse: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -448 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -452($fp) +lw $t0 -452($fp) +sw $t0 -456($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -444($fp) +lw $t0 -444($fp) +bne $t0 $zero label_211 +j label_212 +label_211: +li $v0 4 +la $a0 data_94 +syscall +li $v0 10 +syscall +label_212: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -440($fp) +lw $t0 -440($fp) +sw $t0 -448($fp) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -432($fp) +lw $t0 -432($fp) +sw $t0 -436($fp) +label_213: +lw $t0 -436($fp) +lw $t1 12($t0) +sw $t1 -420($fp) +lw $t0 -448($fp) +lw $t1 12($t0) +sw $t1 -416($fp) +lw $t0 -420($fp) +lw $t1 -416($fp) +slt $t1 $t0 $t1 +sw $t1 -412($fp) +lw $t0 -412($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -424($fp) +lw $t0 -424($fp) +lw $t1 12($t0) +sw $t1 -428($fp) +lw $t0 -428($fp) +bne $t0 $zero label_214 +j label_247 +label_214: +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -404($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -400($fp) +lw $t0 -400($fp) +bne $t0 $zero label_215 +j label_216 +label_215: +li $v0 4 +la $a0 data_95 +syscall +li $v0 10 +syscall +label_216: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -436($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -404($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -396($fp) +lw $t0 -396($fp) +sw $t0 -408($fp) +la $t0 data_96 +sw $t0 -348($fp) +lw $t0 -348($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -344($fp) +lw $t0 -408($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -376($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -368($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -360($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -364($fp) +lw $t0 -376($fp) +lw $t1 -368($fp) +seq $t0 $t0 $t1 +sw $t0 -356($fp) +lw $t0 -356($fp) +bne $t0 $zero label_217 +lw $t0 -376($fp) +lw $t1 -360($fp) +seq $t0 $t0 $t1 +sw $t0 -356($fp) +lw $t0 -356($fp) +bne $t0 $zero label_218 +lw $t0 -376($fp) +lw $t1 -364($fp) +seq $t0 $t0 $t1 +sw $t0 -356($fp) +lw $t0 -356($fp) +bne $t0 $zero label_219 +lw $t0 -408($fp) +lw $t1 -344($fp) +seq $t0 $t0 $t1 +sw $t0 -352($fp) +j label_220 +label_217: +lw $t0 -408($fp) +lw $t1 12($t0) +sw $t1 -380($fp) +lw $t0 -344($fp) +lw $t1 12($t0) +sw $t1 -372($fp) +lw $t0 -380($fp) +lw $t1 -372($fp) +seq $t0 $t0 $t1 +sw $t0 -352($fp) +j label_220 +label_218: +lw $t0 -408($fp) +lw $t1 12($t0) +sw $t1 -380($fp) +lw $t0 -344($fp) +lw $t1 12($t0) +sw $t1 -372($fp) +lw $t0 -380($fp) +move $a0 $t0 +lw $t0 -372($fp) +move $a1 $t0 +jal equal_str +sw $v0 -352($fp) +j label_220 +label_219: +lw $t0 -408($fp) +lw $t1 12($t0) +sw $t1 -380($fp) +lw $t0 -344($fp) +lw $t1 12($t0) +sw $t1 -372($fp) +lw $t0 -380($fp) +lw $t1 -372($fp) +seq $t0 $t0 $t1 +sw $t0 -352($fp) +j label_220 +label_220: +lw $t0 -352($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -384($fp) +lw $t0 -384($fp) +lw $t1 12($t0) +sw $t1 -388($fp) +lw $t0 -388($fp) +bne $t0 $zero label_241 +la $t0 data_97 +sw $t0 -296($fp) +lw $t0 -296($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -292($fp) +lw $t0 -408($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -324($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -316($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -308($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -312($fp) +lw $t0 -324($fp) +lw $t1 -316($fp) +seq $t0 $t0 $t1 +sw $t0 -304($fp) +lw $t0 -304($fp) +bne $t0 $zero label_221 +lw $t0 -324($fp) +lw $t1 -308($fp) +seq $t0 $t0 $t1 +sw $t0 -304($fp) +lw $t0 -304($fp) +bne $t0 $zero label_222 +lw $t0 -324($fp) +lw $t1 -312($fp) +seq $t0 $t0 $t1 +sw $t0 -304($fp) +lw $t0 -304($fp) +bne $t0 $zero label_223 +lw $t0 -408($fp) +lw $t1 -292($fp) +seq $t0 $t0 $t1 +sw $t0 -300($fp) +j label_224 +label_221: +lw $t0 -408($fp) +lw $t1 12($t0) +sw $t1 -328($fp) +lw $t0 -292($fp) +lw $t1 12($t0) +sw $t1 -320($fp) +lw $t0 -328($fp) +lw $t1 -320($fp) +seq $t0 $t0 $t1 +sw $t0 -300($fp) +j label_224 +label_222: +lw $t0 -408($fp) +lw $t1 12($t0) +sw $t1 -328($fp) +lw $t0 -292($fp) +lw $t1 12($t0) +sw $t1 -320($fp) +lw $t0 -328($fp) +move $a0 $t0 +lw $t0 -320($fp) +move $a1 $t0 +jal equal_str +sw $v0 -300($fp) +j label_224 +label_223: +lw $t0 -408($fp) +lw $t1 12($t0) +sw $t1 -328($fp) +lw $t0 -292($fp) +lw $t1 12($t0) +sw $t1 -320($fp) +lw $t0 -328($fp) +lw $t1 -320($fp) +seq $t0 $t0 $t1 +sw $t0 -300($fp) +j label_224 +label_224: +lw $t0 -300($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -332($fp) +lw $t0 -332($fp) +lw $t1 12($t0) +sw $t1 -336($fp) +lw $t0 -336($fp) +bne $t0 $zero label_235 +lw $t0 -456($fp) +lw $t1 12($t0) +sw $t1 -268($fp) +li $t0 10 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -256($fp) +lw $t0 -256($fp) +lw $t1 12($t0) +sw $t1 -264($fp) +lw $t0 -268($fp) +lw $t1 -264($fp) +mul $t0 $t0 $t1 +sw $t0 -260($fp) +lw $t0 -260($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -272($fp) +lw $t0 -272($fp) +lw $t1 12($t0) +sw $t1 -284($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -252($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -248($fp) +lw $t0 -248($fp) +bne $t0 $zero label_225 +j label_226 +label_225: +li $v0 4 +la $a0 data_98 +syscall +li $v0 10 +syscall +label_226: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -436($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -252($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -244($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -240($fp) +lw $t0 -240($fp) +bne $t0 $zero label_227 +j label_228 +label_227: +li $v0 4 +la $a0 data_99 +syscall +li $v0 10 +syscall +label_228: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -244($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 36($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -236($fp) +lw $t0 -236($fp) +lw $t1 12($t0) +sw $t1 -280($fp) +lw $t0 -284($fp) +lw $t1 -280($fp) +add $t0 $t0 $t1 +sw $t0 -276($fp) +lw $t0 -276($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -288($fp) +lw $t0 -288($fp) +sw $t0 -456($fp) +lw $t0 -436($fp) +lw $t1 12($t0) +sw $t1 -228($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -216($fp) +lw $t0 -216($fp) +lw $t1 12($t0) +sw $t1 -224($fp) +lw $t0 -228($fp) +lw $t1 -224($fp) +add $t0 $t0 $t1 +sw $t0 -220($fp) +lw $t0 -220($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -232($fp) +lw $t0 -232($fp) +sw $t0 -436($fp) +lw $t0 -436($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -196($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -188($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -180($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -184($fp) +lw $t0 -196($fp) +lw $t1 -188($fp) +seq $t0 $t0 $t1 +sw $t0 -176($fp) +lw $t0 -176($fp) +bne $t0 $zero label_229 +lw $t0 -196($fp) +lw $t1 -180($fp) +seq $t0 $t0 $t1 +sw $t0 -176($fp) +lw $t0 -176($fp) +bne $t0 $zero label_230 +lw $t0 -196($fp) +lw $t1 -184($fp) +seq $t0 $t0 $t1 +sw $t0 -176($fp) +lw $t0 -176($fp) +bne $t0 $zero label_231 +lw $t0 -436($fp) +lw $t1 -448($fp) +seq $t0 $t0 $t1 +sw $t0 -172($fp) +j label_232 +label_229: +lw $t0 -436($fp) +lw $t1 12($t0) +sw $t1 -200($fp) +lw $t0 -448($fp) +lw $t1 12($t0) +sw $t1 -192($fp) +lw $t0 -200($fp) +lw $t1 -192($fp) +seq $t0 $t0 $t1 +sw $t0 -172($fp) +j label_232 +label_230: +lw $t0 -436($fp) +lw $t1 12($t0) +sw $t1 -200($fp) +lw $t0 -448($fp) +lw $t1 12($t0) +sw $t1 -192($fp) +lw $t0 -200($fp) +move $a0 $t0 +lw $t0 -192($fp) +move $a1 $t0 +jal equal_str +sw $v0 -172($fp) +j label_232 +label_231: +lw $t0 -436($fp) +lw $t1 12($t0) +sw $t1 -200($fp) +lw $t0 -448($fp) +lw $t1 12($t0) +sw $t1 -192($fp) +lw $t0 -200($fp) +lw $t1 -192($fp) +seq $t0 $t0 $t1 +sw $t0 -172($fp) +j label_232 +label_232: +lw $t0 -172($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -204($fp) +lw $t0 -204($fp) +lw $t1 12($t0) +sw $t1 -208($fp) +lw $t0 -208($fp) +bne $t0 $zero label_233 +la $t0 data_100 +sw $t0 -168($fp) +lw $t0 -168($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -164($fp) +lw $t0 -164($fp) +sw $t0 -212($fp) +j label_234 +label_233: +la $t0 data_101 +sw $t0 -160($fp) +lw $t0 -160($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -156($fp) +lw $t0 -156($fp) +lw $t1 4($fp) +addi $t1 $t1 16 +sw $t0 0($t1) +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +sw $t0 -212($fp) +label_234: +lw $t0 -212($fp) +sw $t0 -340($fp) +j label_240 +label_235: +lw $t0 -436($fp) +lw $t1 12($t0) +sw $t1 -148($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -136($fp) +lw $t0 -136($fp) +lw $t1 12($t0) +sw $t1 -144($fp) +lw $t0 -148($fp) +lw $t1 -144($fp) +add $t0 $t0 $t1 +sw $t0 -140($fp) +lw $t0 -140($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -152($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -100($fp) +lw $t0 -100($fp) +bne $t0 $zero label_236 +j label_237 +label_236: +li $v0 4 +la $a0 data_102 +syscall +li $v0 10 +syscall +label_237: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -96($fp) +lw $t0 -96($fp) +lw $t1 12($t0) +sw $t1 -112($fp) +lw $t0 -436($fp) +lw $t1 12($t0) +sw $t1 -108($fp) +lw $t0 -112($fp) +lw $t1 -108($fp) +sub $t0 $t0 $t1 +sw $t0 -104($fp) +lw $t0 -104($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -116($fp) +lw $t0 -116($fp) +lw $t1 12($t0) +sw $t1 -128($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -92($fp) +lw $t0 -92($fp) +lw $t1 12($t0) +sw $t1 -124($fp) +lw $t0 -128($fp) +lw $t1 -124($fp) +sub $t0 $t0 $t1 +sw $t0 -120($fp) +lw $t0 -120($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -132($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -88($fp) +lw $t0 -88($fp) +bne $t0 $zero label_238 +j label_239 +label_238: +li $v0 4 +la $a0 data_103 +syscall +li $v0 10 +syscall +label_239: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -152($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -132($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -84($fp) +lw $t0 -84($fp) +lw $t1 4($fp) +addi $t1 $t1 16 +sw $t0 0($t1) +lw $t0 -448($fp) +sw $t0 -436($fp) +lw $t0 -436($fp) +sw $t0 -340($fp) +label_240: +lw $t0 -340($fp) +sw $t0 -392($fp) +j label_246 +label_241: +lw $t0 -436($fp) +lw $t1 12($t0) +sw $t1 -76($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -64($fp) +lw $t0 -64($fp) +lw $t1 12($t0) +sw $t1 -72($fp) +lw $t0 -76($fp) +lw $t1 -72($fp) +add $t0 $t0 $t1 +sw $t0 -68($fp) +lw $t0 -68($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -80($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -28($fp) +lw $t0 -28($fp) +bne $t0 $zero label_242 +j label_243 +label_242: +li $v0 4 +la $a0 data_104 +syscall +li $v0 10 +syscall +label_243: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -24($fp) +lw $t0 -24($fp) +lw $t1 12($t0) +sw $t1 -40($fp) +lw $t0 -436($fp) +lw $t1 12($t0) +sw $t1 -36($fp) +lw $t0 -40($fp) +lw $t1 -36($fp) +sub $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -44($fp) +lw $t0 -44($fp) +lw $t1 12($t0) +sw $t1 -56($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -52($fp) +lw $t0 -56($fp) +lw $t1 -52($fp) +sub $t0 $t0 $t1 +sw $t0 -48($fp) +lw $t0 -48($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -60($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_244 +j label_245 +label_244: +li $v0 4 +la $a0 data_105 +syscall +li $v0 10 +syscall +label_245: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -80($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -60($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 4($fp) +addi $t1 $t1 16 +sw $t0 0($t1) +lw $t0 -448($fp) +sw $t0 -436($fp) +lw $t0 -436($fp) +sw $t0 -392($fp) +label_246: +j label_213 +label_247: +lw $v0 -456($fp) +addi $sp $sp 448 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_Parse: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 12 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_Parse +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__attributes_ctor_Main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -16 +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_Parse +addi $sp $sp 4 +sw $v0 -24($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_248 +j label_249 +label_248: +li $v0 4 +la $a0 data_106 +syscall +li $v0 10 +syscall +label_249: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 44($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -20($fp) +lw $t0 0($fp) +lw $t1 -20($fp) +sw $t1 20($t0) +lw $v0 0($fp) +addi $sp $sp 16 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_main_at_Main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -16 +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_250 +j label_251 +label_250: +li $v0 4 +la $a0 data_107 +syscall +li $v0 10 +syscall +label_251: +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_252 +j label_253 +label_252: +li $v0 4 +la $a0 data_108 +syscall +li $v0 10 +syscall +label_253: +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 16($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 16 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_Main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 13 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_Main +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__attributes_ctor_BoolOp: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp 0 +lw $v0 0($fp) +addi $sp $sp 0 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_and_at_BoolOp: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_254 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -20($fp) +j label_255 +label_254: +lw $t0 0($fp) +sw $t0 -20($fp) +label_255: +lw $v0 -20($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_or_at_BoolOp: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_256 +lw $t0 0($fp) +sw $t0 -20($fp) +j label_257 +label_256: +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -20($fp) +label_257: +lw $v0 -20($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_BoolOp: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 14 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_BoolOp +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + + + +equal_str: +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $a0 8($sp) +sw $a1 12($sp) +sw $t2 16($sp) +sw $t3 20($sp) +move $t0 $a0 +move $t1 $a1 +while_equal_str: +lb $t2 0($t0) +lb $t3 0($t1) +bne $t2 $t3 equal_str_different_strings +beq $t2 $zero first_end_equal_str +beq $t3 $zero second_end_equal_str +addi $t1 $t1 1 +addi $t0 $t0 1 +j while_equal_str +equal_str_different_strings: +move $v0 $zero +j equal_str_end +first_end_equal_str: +beq $t3 $zero second_end_equal_str +move $v0 $zero +j equal_str_end +second_end_equal_str: +li $v0 1 +equal_str_end: +lw $t0 0($sp) +lw $t1 4($sp) +lw $a0 8($sp) +lw $a1 12($sp) +lw $t2 16($sp) +lw $t3 20($sp) +addiu $sp $sp 24 +jr $ra + +allocate: +addiu $sp $sp -12 +sw $a0 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +li $t0 4 +div $a0 $t0 +mfhi $t1 +sub $t0 $t0 $t1 +add $a0 $a0 $t0 +li $v0 9 +syscall +lw $a0 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +addiu $sp $sp 12 +jr $ra + +copy: +addiu $sp $sp -16 +sw $a0 0($sp) +sw $a1 4($sp) +sw $a2 8($sp) +sw $t0 12($sp) +while_copy: +beq $a2 $zero copy_end +lw $t0 0($a0) +sw $t0 0($a1) +addiu $a0 $a0 4 +addiu $a1 $a1 4 +addi $a2 $a2 -4 +j while_copy +copy_end: +lw $a0 0($sp) +lw $a1 4($sp) +lw $a2 8($sp) +lw $t0 12($sp) +addiu $sp $sp 16 +jr $ra + +read_string: +addiu $sp $sp -28 +sw $ra 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $a2 20($sp) +sw $t2 24($sp) +li $t0 8 +addi $a0 $t0 4 +jal allocate +move $t1 $v0 +move $t2 $zero +while_read_string: +addu $a0 $t1 $t2 +subu $a1 $t0 $t2 +addu $t2 $t2 $a1 +jal read_string_up_to +beq $v0 $zero read_string_not_finished +move $v0 $t1 +j end_read_string +read_string_not_finished: +sll $t0 $t0 1 +addi $a0 $t0 4 +jal allocate +move $a0 $t1 +move $t1 $v0 +move $a1 $v0 +move $a2 $t2 +jal copy +j while_read_string +end_read_string: +lw $ra 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $a2 20($sp) +lw $t2 24($sp) +addiu $sp $sp 28 +jr $ra +read_string_up_to: +addiu $sp $sp -28 +sw $ra 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +sw $t2 12($sp) +sw $t3 16($sp) +sw $t4 20($sp) +sw $t5 24($sp) +move $t0 $a0 +move $t1 $zero +li $t2 10 +addu $t3 $t0 $a1 +addiu $a1 $a1 1 +li $v0 8 +syscall +lw $a0 0($a0) +beq $a0 $zero eol_terminated +li $v0 0 +eol_check: +beq $t0 $t3 read_loop_continue +lb $t1 0($t0) +beq $t1 $t2 eol_terminated +addiu $t0 $t0 1 +j eol_check +eol_terminated: +sb $zero 0($t0) +li $v0 1 +read_loop_continue: +lw $ra 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +lw $t2 12($sp) +lw $t3 16($sp) +lw $t4 20($sp) +lw $t5 24($sp) +addiu $sp $sp 28 +jr $ra + +substr: +addiu $sp $sp -32 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $t3 12($sp) +sw $a0 16($sp) +sw $a1 20($sp) +sw $a2 24($sp) +sw $ra 28($sp) +move $t0 $a0 +add $t0 $t0 $a1 +li $t1 4 +div $a2 $t1 +mfhi $t2 +bne $t2 $zero substr_allign_size +move $t1 $a2 +j substr_new_chunk +substr_allign_size: +sub $t1 $t1 $t2 +add $t1 $t1 $a2 +substr_new_chunk: +move $a0 $t1 +jal allocate +move $t3 $v0 +move $t1 $zero +while_substr_copy: +beq $t1 $a2 substr_end +lb $t2 0($t0) +sb $t2 0($t3) +addiu $t0 $t0 1 +addiu $t3 $t3 1 +addiu $t1 $t1 1 +j while_substr_copy +substr_end: +sb $zero 0($t3) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $t3 12($sp) +lw $a0 16($sp) +lw $a1 20($sp) +lw $a2 24($sp) +lw $ra 28($sp) +addiu $sp $sp 32 +jr $ra + +concat: +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $ra 20($sp) +move $t0 $a0 +move $t1 $a1 +addiu $a0 $a2 1 +li $t2 4 +div $a0 $t2 +mfhi $a0 +bne $a0 $zero concat_allign_size +addiu $a0 $a2 1 +j concat_size_allignned +concat_allign_size: +sub $t2 $t2 $a0 +add $a0 $a2 $t2 +addiu $a0 $a0 1 +concat_size_allignned: +jal allocate +move $t2 $v0 +j first_while_concat_copy +first_while_concat_copy: +lb $a0 0($t0) +beq $a0 $zero second_while_concat_copy +sb $a0 0($t2) +addiu $t0 $t0 1 +addiu $t2 $t2 1 +j first_while_concat_copy +second_while_concat_copy: +lb $a0 0($t1) +beq $a0 $zero concat_end +sb $a0 0($t2) +addiu $t1 $t1 1 +addiu $t2 $t2 1 +j second_while_concat_copy +concat_end: +sb $zero 0($t2) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $ra 20($sp) +addiu $sp $sp 24 +jr $ra + +length: +addiu $sp $sp -8 +sw $t0 0($sp) +sw $t1 4($sp) +move $t0 $a0 +move $v0 $zero +while_len: +lb $t1 0($t0) +beq $t1 $zero len_end +addi $v0 $v0 1 +addiu $t0 $t0 1 +j while_len +len_end: +lw $t0 0($sp) +lw $t1 4($sp) +addiu $sp $sp 8 +jr $ra \ No newline at end of file diff --git a/tests/codegen/hairyscary.mips b/tests/codegen/hairyscary.mips new file mode 100644 index 000000000..c36035e40 --- /dev/null +++ b/tests/codegen/hairyscary.mips @@ -0,0 +1,2323 @@ +.data +default_str: .asciiz "" +.word 0 +data_1: .asciiz "Object" +.word 0 +data_2: .asciiz "IO" +.word 0 +data_3: .asciiz "String" +.word 0 +data_4: .asciiz "Int" +.word 0 +data_5: .asciiz "Bool" +.word 0 +data_6: .asciiz "Foo" +.word 0 +data_7: .asciiz "Bar" +.word 0 +data_8: .asciiz "Razz" +.word 0 +data_9: .asciiz "Bazz" +.word 0 +data_10: .asciiz "Main" +.word 0 +data_11: .asciiz " +" +.word 0 +data_12: .asciiz "" +.word 0 +data_13: .asciiz "Abort called from class " +.word 0 +data_14: .asciiz "Index out of range exception" +.word 0 +data_15: .asciiz "Void isntance found in switch case" +.word 0 +data_16: .asciiz "Switch Case without valid branches" +.word 0 +data_17: .asciiz "Function call in a void instance" +.word 0 +data_18: .asciiz "Function call in a void instance" +.word 0 +data_19: .asciiz "Function call in a void instance" +.word 0 +data_20: .asciiz "Function call in a void instance" +.word 0 +data_21: .asciiz "Function call in a void instance" +.word 0 +data_22: .asciiz "Function call in a void instance" +.word 0 +data_23: .asciiz "Void isntance found in switch case" +.word 0 +data_24: .asciiz "Switch Case without valid branches" +.word 0 +data_25: .asciiz "Function call in a void instance" +.word 0 +data_26: .asciiz "Function call in a void instance" +.word 0 +data_27: .asciiz "Function call in a void instance" +.word 0 +data_28: .asciiz "Function call in a void instance" +.word 0 +data_29: .asciiz "Function call in a void instance" +.word 0 +data_30: .asciiz "Void isntance found in switch case" +.word 0 +data_31: .asciiz "Switch Case without valid branches" +.word 0 +data_32: .asciiz "Function call in a void instance" +.word 0 +data_33: .asciiz "Function call in a void instance" +.word 0 +data_34: .asciiz "do nothing" + + +types_table: +.word data_1 +.word data_2 +.word data_3 +.word data_4 +.word data_5 +.word data_6 +.word data_7 +.word data_8 +.word data_9 +.word data_10 + +prototype_table: + .word type_1_prototype + .word type_2_prototype + .word type_3_prototype + .word type_4_prototype + .word type_5_prototype + .word type_6_prototype + .word type_7_prototype + .word type_8_prototype + .word type_9_prototype + .word type_10_prototype + +type_1_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __ctor_Object + +type_1_prototype: +.word 0 +.word 4 +.word type_1_dispatch +.word -1 + + +type_2_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word function_out_string_at_IO +.word function_out_int_at_IO +.word function_in_string_at_IO +.word function_in_int_at_IO +.word __ctor_IO + +type_2_prototype: +.word 1 +.word 4 +.word type_2_dispatch +.word -1 + + +type_3_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word function_length_at_String +.word function_concat_at_String +.word function_substr_at_String +.word __ctor_String + +type_3_prototype: +.word 2 +.word 6 +.word type_3_dispatch +.word 0 +.word 0 +.word -1 + + +type_4_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __ctor_Int + +type_4_prototype: +.word 3 +.word 5 +.word type_4_dispatch +.word 0 +.word -1 + + +type_5_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __ctor_Bool + +type_5_prototype: +.word 4 +.word 5 +.word type_5_dispatch +.word 0 +.word -1 + + +type_6_dispatch: +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_doh_at_Foo +.word function_printh_at_Bazz +.word __attributes_ctor_Foo +.word __ctor_Foo + +type_6_prototype: +.word 5 +.word 9 +.word type_6_dispatch +.word 0 +.word 0 +.word 0 +.word 0 +.word 0 +.word -1 + + +type_7_dispatch: +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_doh_at_Foo +.word function_printh_at_Bazz +.word __attributes_ctor_Bar +.word __ctor_Bar + +type_7_prototype: +.word 6 +.word 13 +.word type_7_dispatch +.word 0 +.word 0 +.word 0 +.word 0 +.word 0 +.word 0 +.word 0 +.word 0 +.word 0 +.word -1 + + +type_8_dispatch: +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_doh_at_Foo +.word function_printh_at_Bazz +.word __attributes_ctor_Razz +.word __ctor_Razz + +type_8_prototype: +.word 7 +.word 11 +.word type_8_dispatch +.word 0 +.word 0 +.word 0 +.word 0 +.word 0 +.word 0 +.word 0 +.word -1 + + +type_9_dispatch: +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_doh_at_Bazz +.word function_printh_at_Bazz +.word __attributes_ctor_Bazz +.word __ctor_Bazz + +type_9_prototype: +.word 8 +.word 7 +.word type_9_dispatch +.word 0 +.word 0 +.word 0 +.word -1 + + +type_10_dispatch: +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_main_at_Main +.word __attributes_ctor_Main +.word __ctor_Main + +type_10_prototype: +.word 9 +.word 8 +.word type_10_dispatch +.word 0 +.word 0 +.word 0 +.word 0 +.word -1 + + +.text +.globl main +__ctor_Object: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 0 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_abort_at_Object: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +la $t0 data_13 +sw $t0 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +la $t0 data_11 +sw $t0 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +li $v0 10 +syscall +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_type_name_at_Object: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_copy_at_Object: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $a0 4($t0) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t0 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 1 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_out_string_at_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +lw $v0 4($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_out_int_at_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -12($fp) +li $v0 1 +lw $a0 -12($fp) +syscall +lw $v0 4($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_in_string_at_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +jal read_string +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_in_int_at_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $v0 5 +syscall +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_String: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +li $t0 2 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -20($fp) +lw $t0 -20($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $a0 0($fp) +jal length +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -20($fp) +lw $t1 -12($fp) +sw $t1 16($t0) +lw $v0 -20($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_length_at_String: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 16($t0) +sw $t1 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_concat_at_String: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -24 +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -32($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 4($fp) +lw $t1 16($t0) +sw $t1 -24($fp) +lw $t0 0($fp) +lw $t1 16($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 12($t0) +sw $t1 -24($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 -20($fp) +add $t0 $t0 $t1 +sw $t0 -24($fp) +lw $a0 -32($fp) +lw $a1 -28($fp) +lw $a2 -24($fp) +jal concat +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 24 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_substr_at_String: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -36 +lw $t0 8($fp) +lw $t1 12($t0) +sw $t1 -16($fp) +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -40($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -36($fp) +lw $t0 8($fp) +lw $t1 16($t0) +sw $t1 -32($fp) +lw $t0 -32($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 -36($fp) +lw $t1 -40($fp) +add $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -28($fp) +lw $t1 -24($fp) +slt $t1 $t0 $t1 +sw $t1 -20($fp) +lw $t0 -20($fp) +bne $t0 $zero label_1 +j label_2 +label_1: +li $v0 4 +la $a0 data_14 +syscall +li $v0 10 +syscall +label_2: +lw $a0 -16($fp) +lw $a1 -40($fp) +lw $a2 -36($fp) +jal substr +sw $v0 -44($fp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 36 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_Int: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 3 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_Bool: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 4 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +jal __ctor_Main +sw $v0 -12($fp) +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal function_main_at_Main +addi $sp $sp 4 +sw $v0 -12($fp) +li $v0 0 +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +li $v0 10 +syscall + +__attributes_ctor_Foo: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -132 +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_Bazz +addi $sp $sp 4 +sw $v0 -140($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -128($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -120($fp) +lw $t0 -120($fp) +bne $t0 $zero label_3 +j label_4 +label_3: +li $v0 4 +la $a0 data_15 +syscall +li $v0 10 +syscall +label_4: +la $t0 types_table +addi $t0 $t0 24 +lw $t0 0($t0) +sw $t0 -116($fp) +lw $t0 -116($fp) +lw $t1 -128($fp) +seq $t0 $t0 $t1 +sw $t0 -124($fp) +lw $t0 -124($fp) +bne $t0 $zero label_5 +la $t0 types_table +addi $t0 $t0 28 +lw $t0 0($t0) +sw $t0 -116($fp) +lw $t0 -116($fp) +lw $t1 -128($fp) +seq $t0 $t0 $t1 +sw $t0 -124($fp) +lw $t0 -124($fp) +bne $t0 $zero label_6 +la $t0 types_table +addi $t0 $t0 20 +lw $t0 0($t0) +sw $t0 -116($fp) +lw $t0 -116($fp) +lw $t1 -128($fp) +seq $t0 $t0 $t1 +sw $t0 -124($fp) +lw $t0 -124($fp) +bne $t0 $zero label_7 +li $v0 4 +la $a0 data_16 +syscall +li $v0 10 +syscall +label_5: +lw $t0 0($fp) +sw $t0 -112($fp) +lw $t0 -112($fp) +sw $t0 -132($fp) +j label_8 +label_6: +lw $t0 0($fp) +sw $t0 -108($fp) +jal __ctor_Bar +sw $v0 -104($fp) +lw $t0 -104($fp) +sw $t0 -132($fp) +j label_8 +label_7: +lw $t0 0($fp) +sw $t0 -100($fp) +jal __ctor_Razz +sw $v0 -96($fp) +lw $t0 -96($fp) +sw $t0 -132($fp) +j label_8 +label_8: +lw $t0 -132($fp) +sw $t0 -136($fp) +lw $t0 0($fp) +lw $t1 -136($fp) +sw $t1 24($t0) +lw $t4 0($fp) +lw $t4 24($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -40($fp) +lw $t0 -40($fp) +bne $t0 $zero label_9 +j label_10 +label_9: +li $v0 4 +la $a0 data_17 +syscall +li $v0 10 +syscall +label_10: +lw $t4 0($fp) +lw $t4 24($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 24($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 -36($fp) +lw $t1 12($t0) +sw $t1 -52($fp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_11 +j label_12 +label_11: +li $v0 4 +la $a0 data_18 +syscall +li $v0 10 +syscall +label_12: +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t0 -28($fp) +lw $t1 12($t0) +sw $t1 -48($fp) +lw $t0 -52($fp) +lw $t1 -48($fp) +add $t0 $t0 $t1 +sw $t0 -44($fp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -56($fp) +lw $t0 -56($fp) +lw $t1 12($t0) +sw $t1 -68($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_13 +j label_14 +label_13: +li $v0 4 +la $a0 data_19 +syscall +li $v0 10 +syscall +label_14: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -64($fp) +lw $t0 -68($fp) +lw $t1 -64($fp) +add $t0 $t0 $t1 +sw $t0 -60($fp) +lw $t0 -60($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -72($fp) +lw $t0 -72($fp) +lw $t1 12($t0) +sw $t1 -84($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_15 +j label_16 +label_15: +li $v0 4 +la $a0 data_20 +syscall +li $v0 10 +syscall +label_16: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 12($t0) +sw $t1 -80($fp) +lw $t0 -84($fp) +lw $t1 -80($fp) +add $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -88($fp) +lw $t0 -88($fp) +sw $t0 -92($fp) +lw $t0 0($fp) +lw $t1 -92($fp) +sw $t1 28($t0) +lw $v0 0($fp) +addi $sp $sp 132 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_doh_at_Foo: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -24 +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +sw $t0 -32($fp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -24($fp) +li $t0 2 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 12($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 -20($fp) +add $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t0 -28($fp) +lw $t1 0($fp) +addi $t1 $t1 16 +sw $t0 0($t1) +lw $v0 -32($fp) +addi $sp $sp 24 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_Foo: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 5 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_Foo +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__attributes_ctor_Bar: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -28 +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_Razz +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -28($fp) +lw $t0 -28($fp) +bne $t0 $zero label_17 +j label_18 +label_17: +li $v0 4 +la $a0 data_21 +syscall +li $v0 10 +syscall +label_18: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -24($fp) +lw $t0 -24($fp) +sw $t0 -32($fp) +lw $t0 0($fp) +lw $t1 -32($fp) +sw $t1 40($t0) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_19 +j label_20 +label_19: +li $v0 4 +la $a0 data_22 +syscall +li $v0 10 +syscall +label_20: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -20($fp) +lw $t0 0($fp) +lw $t1 -20($fp) +sw $t1 44($t0) +lw $v0 0($fp) +addi $sp $sp 28 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_Bar: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 6 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_Bar +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__attributes_ctor_Razz: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -148 +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_Foo +addi $sp $sp 4 +sw $v0 -156($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -144($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -136($fp) +lw $t0 -136($fp) +bne $t0 $zero label_21 +j label_22 +label_21: +li $v0 4 +la $a0 data_23 +syscall +li $v0 10 +syscall +label_22: +la $t0 types_table +addi $t0 $t0 24 +lw $t0 0($t0) +sw $t0 -132($fp) +lw $t0 -132($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -140($fp) +lw $t0 -140($fp) +bne $t0 $zero label_23 +la $t0 types_table +addi $t0 $t0 28 +lw $t0 0($t0) +sw $t0 -132($fp) +lw $t0 -132($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -140($fp) +lw $t0 -140($fp) +bne $t0 $zero label_24 +li $v0 4 +la $a0 data_24 +syscall +li $v0 10 +syscall +label_23: +lw $t0 0($fp) +sw $t0 -128($fp) +lw $t0 -128($fp) +sw $t0 -148($fp) +j label_25 +label_24: +lw $t0 0($fp) +sw $t0 -124($fp) +jal __ctor_Bar +sw $v0 -120($fp) +lw $t0 -120($fp) +sw $t0 -148($fp) +j label_25 +label_25: +lw $t0 -148($fp) +sw $t0 -152($fp) +lw $t0 0($fp) +lw $t1 -152($fp) +sw $t1 32($t0) +lw $t4 0($fp) +lw $t4 24($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -48($fp) +lw $t0 -48($fp) +bne $t0 $zero label_26 +j label_27 +label_26: +li $v0 4 +la $a0 data_25 +syscall +li $v0 10 +syscall +label_27: +lw $t4 0($fp) +lw $t4 24($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +jal function_doh_at_Bazz +addi $sp $sp 4 +sw $v0 -44($fp) +lw $t0 -44($fp) +lw $t1 12($t0) +sw $t1 -60($fp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -40($fp) +lw $t0 -40($fp) +bne $t0 $zero label_28 +j label_29 +label_28: +li $v0 4 +la $a0 data_26 +syscall +li $v0 10 +syscall +label_29: +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 -36($fp) +lw $t1 12($t0) +sw $t1 -56($fp) +lw $t0 -60($fp) +lw $t1 -56($fp) +add $t0 $t0 $t1 +sw $t0 -52($fp) +lw $t0 -52($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -64($fp) +lw $t0 -64($fp) +lw $t1 12($t0) +sw $t1 -76($fp) +lw $t4 0($fp) +lw $t4 32($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_30 +j label_31 +label_30: +li $v0 4 +la $a0 data_27 +syscall +li $v0 10 +syscall +label_31: +lw $t4 0($fp) +lw $t4 32($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 32($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t0 -28($fp) +lw $t1 12($t0) +sw $t1 -72($fp) +lw $t0 -76($fp) +lw $t1 -72($fp) +add $t0 $t0 $t1 +sw $t0 -68($fp) +lw $t0 -68($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -80($fp) +lw $t0 -80($fp) +lw $t1 12($t0) +sw $t1 -92($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_32 +j label_33 +label_32: +li $v0 4 +la $a0 data_28 +syscall +li $v0 10 +syscall +label_33: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -88($fp) +lw $t0 -92($fp) +lw $t1 -88($fp) +add $t0 $t0 $t1 +sw $t0 -84($fp) +lw $t0 -84($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -96($fp) +lw $t0 -96($fp) +lw $t1 12($t0) +sw $t1 -108($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_34 +j label_35 +label_34: +li $v0 4 +la $a0 data_29 +syscall +li $v0 10 +syscall +label_35: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 12($t0) +sw $t1 -104($fp) +lw $t0 -108($fp) +lw $t1 -104($fp) +add $t0 $t0 $t1 +sw $t0 -100($fp) +lw $t0 -100($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -112($fp) +lw $t0 -112($fp) +sw $t0 -116($fp) +lw $t0 0($fp) +lw $t1 -116($fp) +sw $t1 36($t0) +lw $v0 0($fp) +addi $sp $sp 148 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_Razz: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 7 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_Razz +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__attributes_ctor_Bazz: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -72 +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -76($fp) +lw $t0 -76($fp) +sw $t0 -80($fp) +lw $t0 0($fp) +lw $t1 -80($fp) +sw $t1 16($t0) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -64($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -56($fp) +lw $t0 -56($fp) +bne $t0 $zero label_36 +j label_37 +label_36: +li $v0 4 +la $a0 data_30 +syscall +li $v0 10 +syscall +label_37: +la $t0 types_table +addi $t0 $t0 24 +lw $t0 0($t0) +sw $t0 -52($fp) +lw $t0 -52($fp) +lw $t1 -64($fp) +seq $t0 $t0 $t1 +sw $t0 -60($fp) +lw $t0 -60($fp) +bne $t0 $zero label_38 +la $t0 types_table +addi $t0 $t0 28 +lw $t0 0($t0) +sw $t0 -52($fp) +lw $t0 -52($fp) +lw $t1 -64($fp) +seq $t0 $t0 $t1 +sw $t0 -60($fp) +lw $t0 -60($fp) +bne $t0 $zero label_39 +la $t0 types_table +addi $t0 $t0 20 +lw $t0 0($t0) +sw $t0 -52($fp) +lw $t0 -52($fp) +lw $t1 -64($fp) +seq $t0 $t0 $t1 +sw $t0 -60($fp) +lw $t0 -60($fp) +bne $t0 $zero label_40 +la $t0 types_table +addi $t0 $t0 32 +lw $t0 0($t0) +sw $t0 -52($fp) +lw $t0 -52($fp) +lw $t1 -64($fp) +seq $t0 $t0 $t1 +sw $t0 -60($fp) +lw $t0 -60($fp) +bne $t0 $zero label_41 +li $v0 4 +la $a0 data_31 +syscall +li $v0 10 +syscall +label_38: +lw $t0 0($fp) +sw $t0 -48($fp) +lw $t0 -48($fp) +sw $t0 -68($fp) +j label_42 +label_39: +lw $t0 0($fp) +sw $t0 -44($fp) +jal __ctor_Bar +sw $v0 -40($fp) +lw $t0 -40($fp) +sw $t0 -68($fp) +j label_42 +label_40: +lw $t0 0($fp) +sw $t0 -36($fp) +jal __ctor_Razz +sw $v0 -32($fp) +lw $t0 -32($fp) +sw $t0 -68($fp) +j label_42 +label_41: +lw $t0 0($fp) +sw $t0 -28($fp) +jal __ctor_Foo +sw $v0 -24($fp) +lw $t0 -24($fp) +sw $t0 -68($fp) +j label_42 +label_42: +lw $t0 -68($fp) +sw $t0 -72($fp) +lw $t0 0($fp) +lw $t1 -72($fp) +sw $t1 12($t0) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_43 +j label_44 +label_43: +li $v0 4 +la $a0 data_32 +syscall +li $v0 10 +syscall +label_44: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -20($fp) +lw $t0 0($fp) +lw $t1 -20($fp) +sw $t1 20($t0) +lw $v0 0($fp) +addi $sp $sp 72 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_printh_at_Bazz: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -20($fp) +lw $t0 -20($fp) +bne $t0 $zero label_45 +j label_46 +label_45: +li $v0 4 +la $a0 data_33 +syscall +li $v0 10 +syscall +label_46: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -16($fp) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_doh_at_Bazz: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -24 +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +sw $t0 -32($fp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -24($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 12($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 -20($fp) +add $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t0 -28($fp) +lw $t1 0($fp) +addi $t1 $t1 16 +sw $t0 0($t1) +lw $v0 -32($fp) +addi $sp $sp 24 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_Bazz: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 8 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_Bazz +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__attributes_ctor_Main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -32 +jal __ctor_Bazz +sw $v0 -36($fp) +lw $t0 -36($fp) +sw $t0 -40($fp) +lw $t0 0($fp) +lw $t1 -40($fp) +sw $t1 12($t0) +jal __ctor_Foo +sw $v0 -28($fp) +lw $t0 -28($fp) +sw $t0 -32($fp) +lw $t0 0($fp) +lw $t1 -32($fp) +sw $t1 16($t0) +jal __ctor_Razz +sw $v0 -20($fp) +lw $t0 -20($fp) +sw $t0 -24($fp) +lw $t0 0($fp) +lw $t1 -24($fp) +sw $t1 20($t0) +jal __ctor_Bar +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -16($fp) +lw $t0 0($fp) +lw $t1 -16($fp) +sw $t1 24($t0) +lw $v0 0($fp) +addi $sp $sp 32 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_main_at_Main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +la $t0 data_34 +sw $t0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_Main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 9 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_Main +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + + + +equal_str: +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $a0 8($sp) +sw $a1 12($sp) +sw $t2 16($sp) +sw $t3 20($sp) +move $t0 $a0 +move $t1 $a1 +while_equal_str: +lb $t2 0($t0) +lb $t3 0($t1) +bne $t2 $t3 equal_str_different_strings +beq $t2 $zero first_end_equal_str +beq $t3 $zero second_end_equal_str +addi $t1 $t1 1 +addi $t0 $t0 1 +j while_equal_str +equal_str_different_strings: +move $v0 $zero +j equal_str_end +first_end_equal_str: +beq $t3 $zero second_end_equal_str +move $v0 $zero +j equal_str_end +second_end_equal_str: +li $v0 1 +equal_str_end: +lw $t0 0($sp) +lw $t1 4($sp) +lw $a0 8($sp) +lw $a1 12($sp) +lw $t2 16($sp) +lw $t3 20($sp) +addiu $sp $sp 24 +jr $ra + +allocate: +addiu $sp $sp -12 +sw $a0 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +li $t0 4 +div $a0 $t0 +mfhi $t1 +sub $t0 $t0 $t1 +add $a0 $a0 $t0 +li $v0 9 +syscall +lw $a0 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +addiu $sp $sp 12 +jr $ra + +copy: +addiu $sp $sp -16 +sw $a0 0($sp) +sw $a1 4($sp) +sw $a2 8($sp) +sw $t0 12($sp) +while_copy: +beq $a2 $zero copy_end +lw $t0 0($a0) +sw $t0 0($a1) +addiu $a0 $a0 4 +addiu $a1 $a1 4 +addi $a2 $a2 -4 +j while_copy +copy_end: +lw $a0 0($sp) +lw $a1 4($sp) +lw $a2 8($sp) +lw $t0 12($sp) +addiu $sp $sp 16 +jr $ra + +read_string: +addiu $sp $sp -28 +sw $ra 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $a2 20($sp) +sw $t2 24($sp) +li $t0 8 +addi $a0 $t0 4 +jal allocate +move $t1 $v0 +move $t2 $zero +while_read_string: +addu $a0 $t1 $t2 +subu $a1 $t0 $t2 +addu $t2 $t2 $a1 +jal read_string_up_to +beq $v0 $zero read_string_not_finished +move $v0 $t1 +j end_read_string +read_string_not_finished: +sll $t0 $t0 1 +addi $a0 $t0 4 +jal allocate +move $a0 $t1 +move $t1 $v0 +move $a1 $v0 +move $a2 $t2 +jal copy +j while_read_string +end_read_string: +lw $ra 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $a2 20($sp) +lw $t2 24($sp) +addiu $sp $sp 28 +jr $ra +read_string_up_to: +addiu $sp $sp -28 +sw $ra 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +sw $t2 12($sp) +sw $t3 16($sp) +sw $t4 20($sp) +sw $t5 24($sp) +move $t0 $a0 +move $t1 $zero +li $t2 10 +addu $t3 $t0 $a1 +addiu $a1 $a1 1 +li $v0 8 +syscall +lw $a0 0($a0) +beq $a0 $zero eol_terminated +li $v0 0 +eol_check: +beq $t0 $t3 read_loop_continue +lb $t1 0($t0) +beq $t1 $t2 eol_terminated +addiu $t0 $t0 1 +j eol_check +eol_terminated: +sb $zero 0($t0) +li $v0 1 +read_loop_continue: +lw $ra 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +lw $t2 12($sp) +lw $t3 16($sp) +lw $t4 20($sp) +lw $t5 24($sp) +addiu $sp $sp 28 +jr $ra + +substr: +addiu $sp $sp -32 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $t3 12($sp) +sw $a0 16($sp) +sw $a1 20($sp) +sw $a2 24($sp) +sw $ra 28($sp) +move $t0 $a0 +add $t0 $t0 $a1 +li $t1 4 +div $a2 $t1 +mfhi $t2 +bne $t2 $zero substr_allign_size +move $t1 $a2 +j substr_new_chunk +substr_allign_size: +sub $t1 $t1 $t2 +add $t1 $t1 $a2 +substr_new_chunk: +move $a0 $t1 +jal allocate +move $t3 $v0 +move $t1 $zero +while_substr_copy: +beq $t1 $a2 substr_end +lb $t2 0($t0) +sb $t2 0($t3) +addiu $t0 $t0 1 +addiu $t3 $t3 1 +addiu $t1 $t1 1 +j while_substr_copy +substr_end: +sb $zero 0($t3) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $t3 12($sp) +lw $a0 16($sp) +lw $a1 20($sp) +lw $a2 24($sp) +lw $ra 28($sp) +addiu $sp $sp 32 +jr $ra + +concat: +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $ra 20($sp) +move $t0 $a0 +move $t1 $a1 +addiu $a0 $a2 1 +li $t2 4 +div $a0 $t2 +mfhi $a0 +bne $a0 $zero concat_allign_size +addiu $a0 $a2 1 +j concat_size_allignned +concat_allign_size: +sub $t2 $t2 $a0 +add $a0 $a2 $t2 +addiu $a0 $a0 1 +concat_size_allignned: +jal allocate +move $t2 $v0 +j first_while_concat_copy +first_while_concat_copy: +lb $a0 0($t0) +beq $a0 $zero second_while_concat_copy +sb $a0 0($t2) +addiu $t0 $t0 1 +addiu $t2 $t2 1 +j first_while_concat_copy +second_while_concat_copy: +lb $a0 0($t1) +beq $a0 $zero concat_end +sb $a0 0($t2) +addiu $t1 $t1 1 +addiu $t2 $t2 1 +j second_while_concat_copy +concat_end: +sb $zero 0($t2) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $ra 20($sp) +addiu $sp $sp 24 +jr $ra + +length: +addiu $sp $sp -8 +sw $t0 0($sp) +sw $t1 4($sp) +move $t0 $a0 +move $v0 $zero +while_len: +lb $t1 0($t0) +beq $t1 $zero len_end +addi $v0 $v0 1 +addiu $t0 $t0 1 +j while_len +len_end: +lw $t0 0($sp) +lw $t1 4($sp) +addiu $sp $sp 8 +jr $ra \ No newline at end of file diff --git a/tests/codegen/hello_world.mips b/tests/codegen/hello_world.mips new file mode 100644 index 000000000..3ed6cec19 --- /dev/null +++ b/tests/codegen/hello_world.mips @@ -0,0 +1,1006 @@ +.data +default_str: .asciiz "" +.word 0 +data_1: .asciiz "Object" +.word 0 +data_2: .asciiz "IO" +.word 0 +data_3: .asciiz "String" +.word 0 +data_4: .asciiz "Int" +.word 0 +data_5: .asciiz "Bool" +.word 0 +data_6: .asciiz "Main" +.word 0 +data_7: .asciiz " +" +.word 0 +data_8: .asciiz "" +.word 0 +data_9: .asciiz "Abort called from class " +.word 0 +data_10: .asciiz "Index out of range exception" +.word 0 +data_11: .asciiz "Hello, World.\n" +.word 0 +data_12: .asciiz "Function call in a void instance" + + +types_table: +.word data_1 +.word data_2 +.word data_3 +.word data_4 +.word data_5 +.word data_6 + +prototype_table: + .word type_1_prototype + .word type_2_prototype + .word type_3_prototype + .word type_4_prototype + .word type_5_prototype + .word type_6_prototype + +type_1_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __ctor_Object + +type_1_prototype: +.word 0 +.word 4 +.word type_1_dispatch +.word -1 + + +type_2_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word function_out_string_at_IO +.word function_out_int_at_IO +.word function_in_string_at_IO +.word function_in_int_at_IO +.word __ctor_IO + +type_2_prototype: +.word 1 +.word 4 +.word type_2_dispatch +.word -1 + + +type_3_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word function_length_at_String +.word function_concat_at_String +.word function_substr_at_String +.word __ctor_String + +type_3_prototype: +.word 2 +.word 6 +.word type_3_dispatch +.word 0 +.word 0 +.word -1 + + +type_4_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __ctor_Int + +type_4_prototype: +.word 3 +.word 5 +.word type_4_dispatch +.word 0 +.word -1 + + +type_5_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __ctor_Bool + +type_5_prototype: +.word 4 +.word 5 +.word type_5_dispatch +.word 0 +.word -1 + + +type_6_dispatch: +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_main_at_Main +.word __attributes_ctor_Main +.word __ctor_Main + +type_6_prototype: +.word 5 +.word 4 +.word type_6_dispatch +.word -1 + + +.text +.globl main +__ctor_Object: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 0 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_abort_at_Object: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +la $t0 data_9 +sw $t0 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +la $t0 data_7 +sw $t0 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +li $v0 10 +syscall +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_type_name_at_Object: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_copy_at_Object: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $a0 4($t0) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t0 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 1 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_out_string_at_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +lw $v0 4($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_out_int_at_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -12($fp) +li $v0 1 +lw $a0 -12($fp) +syscall +lw $v0 4($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_in_string_at_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +jal read_string +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_in_int_at_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $v0 5 +syscall +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_String: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +li $t0 2 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -20($fp) +lw $t0 -20($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $a0 0($fp) +jal length +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -20($fp) +lw $t1 -12($fp) +sw $t1 16($t0) +lw $v0 -20($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_length_at_String: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 16($t0) +sw $t1 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_concat_at_String: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -24 +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -32($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 4($fp) +lw $t1 16($t0) +sw $t1 -24($fp) +lw $t0 0($fp) +lw $t1 16($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 12($t0) +sw $t1 -24($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 -20($fp) +add $t0 $t0 $t1 +sw $t0 -24($fp) +lw $a0 -32($fp) +lw $a1 -28($fp) +lw $a2 -24($fp) +jal concat +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 24 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_substr_at_String: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -36 +lw $t0 8($fp) +lw $t1 12($t0) +sw $t1 -16($fp) +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -40($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -36($fp) +lw $t0 8($fp) +lw $t1 16($t0) +sw $t1 -32($fp) +lw $t0 -32($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 -36($fp) +lw $t1 -40($fp) +add $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -28($fp) +lw $t1 -24($fp) +slt $t1 $t0 $t1 +sw $t1 -20($fp) +lw $t0 -20($fp) +bne $t0 $zero label_1 +j label_2 +label_1: +li $v0 4 +la $a0 data_10 +syscall +li $v0 10 +syscall +label_2: +lw $a0 -16($fp) +lw $a1 -40($fp) +lw $a2 -36($fp) +jal substr +sw $v0 -44($fp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 36 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_Int: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 3 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_Bool: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 4 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +jal __ctor_Main +sw $v0 -12($fp) +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal function_main_at_Main +addi $sp $sp 4 +sw $v0 -12($fp) +li $v0 0 +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +li $v0 10 +syscall + +__attributes_ctor_Main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp 0 +lw $v0 0($fp) +addi $sp $sp 0 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_main_at_Main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -16 +la $t0 data_11 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_3 +j label_4 +label_3: +li $v0 4 +la $a0 data_12 +syscall +li $v0 10 +syscall +label_4: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 16 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_Main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 5 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_Main +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + + + +equal_str: +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $a0 8($sp) +sw $a1 12($sp) +sw $t2 16($sp) +sw $t3 20($sp) +move $t0 $a0 +move $t1 $a1 +while_equal_str: +lb $t2 0($t0) +lb $t3 0($t1) +bne $t2 $t3 equal_str_different_strings +beq $t2 $zero first_end_equal_str +beq $t3 $zero second_end_equal_str +addi $t1 $t1 1 +addi $t0 $t0 1 +j while_equal_str +equal_str_different_strings: +move $v0 $zero +j equal_str_end +first_end_equal_str: +beq $t3 $zero second_end_equal_str +move $v0 $zero +j equal_str_end +second_end_equal_str: +li $v0 1 +equal_str_end: +lw $t0 0($sp) +lw $t1 4($sp) +lw $a0 8($sp) +lw $a1 12($sp) +lw $t2 16($sp) +lw $t3 20($sp) +addiu $sp $sp 24 +jr $ra + +allocate: +addiu $sp $sp -12 +sw $a0 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +li $t0 4 +div $a0 $t0 +mfhi $t1 +sub $t0 $t0 $t1 +add $a0 $a0 $t0 +li $v0 9 +syscall +lw $a0 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +addiu $sp $sp 12 +jr $ra + +copy: +addiu $sp $sp -16 +sw $a0 0($sp) +sw $a1 4($sp) +sw $a2 8($sp) +sw $t0 12($sp) +while_copy: +beq $a2 $zero copy_end +lw $t0 0($a0) +sw $t0 0($a1) +addiu $a0 $a0 4 +addiu $a1 $a1 4 +addi $a2 $a2 -4 +j while_copy +copy_end: +lw $a0 0($sp) +lw $a1 4($sp) +lw $a2 8($sp) +lw $t0 12($sp) +addiu $sp $sp 16 +jr $ra + +read_string: +addiu $sp $sp -28 +sw $ra 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $a2 20($sp) +sw $t2 24($sp) +li $t0 8 +addi $a0 $t0 4 +jal allocate +move $t1 $v0 +move $t2 $zero +while_read_string: +addu $a0 $t1 $t2 +subu $a1 $t0 $t2 +addu $t2 $t2 $a1 +jal read_string_up_to +beq $v0 $zero read_string_not_finished +move $v0 $t1 +j end_read_string +read_string_not_finished: +sll $t0 $t0 1 +addi $a0 $t0 4 +jal allocate +move $a0 $t1 +move $t1 $v0 +move $a1 $v0 +move $a2 $t2 +jal copy +j while_read_string +end_read_string: +lw $ra 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $a2 20($sp) +lw $t2 24($sp) +addiu $sp $sp 28 +jr $ra +read_string_up_to: +addiu $sp $sp -28 +sw $ra 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +sw $t2 12($sp) +sw $t3 16($sp) +sw $t4 20($sp) +sw $t5 24($sp) +move $t0 $a0 +move $t1 $zero +li $t2 10 +addu $t3 $t0 $a1 +addiu $a1 $a1 1 +li $v0 8 +syscall +lw $a0 0($a0) +beq $a0 $zero eol_terminated +li $v0 0 +eol_check: +beq $t0 $t3 read_loop_continue +lb $t1 0($t0) +beq $t1 $t2 eol_terminated +addiu $t0 $t0 1 +j eol_check +eol_terminated: +sb $zero 0($t0) +li $v0 1 +read_loop_continue: +lw $ra 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +lw $t2 12($sp) +lw $t3 16($sp) +lw $t4 20($sp) +lw $t5 24($sp) +addiu $sp $sp 28 +jr $ra + +substr: +addiu $sp $sp -32 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $t3 12($sp) +sw $a0 16($sp) +sw $a1 20($sp) +sw $a2 24($sp) +sw $ra 28($sp) +move $t0 $a0 +add $t0 $t0 $a1 +li $t1 4 +div $a2 $t1 +mfhi $t2 +bne $t2 $zero substr_allign_size +move $t1 $a2 +j substr_new_chunk +substr_allign_size: +sub $t1 $t1 $t2 +add $t1 $t1 $a2 +substr_new_chunk: +move $a0 $t1 +jal allocate +move $t3 $v0 +move $t1 $zero +while_substr_copy: +beq $t1 $a2 substr_end +lb $t2 0($t0) +sb $t2 0($t3) +addiu $t0 $t0 1 +addiu $t3 $t3 1 +addiu $t1 $t1 1 +j while_substr_copy +substr_end: +sb $zero 0($t3) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $t3 12($sp) +lw $a0 16($sp) +lw $a1 20($sp) +lw $a2 24($sp) +lw $ra 28($sp) +addiu $sp $sp 32 +jr $ra + +concat: +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $ra 20($sp) +move $t0 $a0 +move $t1 $a1 +addiu $a0 $a2 1 +li $t2 4 +div $a0 $t2 +mfhi $a0 +bne $a0 $zero concat_allign_size +addiu $a0 $a2 1 +j concat_size_allignned +concat_allign_size: +sub $t2 $t2 $a0 +add $a0 $a2 $t2 +addiu $a0 $a0 1 +concat_size_allignned: +jal allocate +move $t2 $v0 +j first_while_concat_copy +first_while_concat_copy: +lb $a0 0($t0) +beq $a0 $zero second_while_concat_copy +sb $a0 0($t2) +addiu $t0 $t0 1 +addiu $t2 $t2 1 +j first_while_concat_copy +second_while_concat_copy: +lb $a0 0($t1) +beq $a0 $zero concat_end +sb $a0 0($t2) +addiu $t1 $t1 1 +addiu $t2 $t2 1 +j second_while_concat_copy +concat_end: +sb $zero 0($t2) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $ra 20($sp) +addiu $sp $sp 24 +jr $ra + +length: +addiu $sp $sp -8 +sw $t0 0($sp) +sw $t1 4($sp) +move $t0 $a0 +move $v0 $zero +while_len: +lb $t1 0($t0) +beq $t1 $zero len_end +addi $v0 $v0 1 +addiu $t0 $t0 1 +j while_len +len_end: +lw $t0 0($sp) +lw $t1 4($sp) +addiu $sp $sp 8 +jr $ra \ No newline at end of file diff --git a/tests/codegen/io.mips b/tests/codegen/io.mips new file mode 100644 index 000000000..9ebe887df --- /dev/null +++ b/tests/codegen/io.mips @@ -0,0 +1,1691 @@ +.data +default_str: .asciiz "" +.word 0 +data_1: .asciiz "Object" +.word 0 +data_2: .asciiz "IO" +.word 0 +data_3: .asciiz "String" +.word 0 +data_4: .asciiz "Int" +.word 0 +data_5: .asciiz "Bool" +.word 0 +data_6: .asciiz "A" +.word 0 +data_7: .asciiz "B" +.word 0 +data_8: .asciiz "C" +.word 0 +data_9: .asciiz "D" +.word 0 +data_10: .asciiz "Main" +.word 0 +data_11: .asciiz " +" +.word 0 +data_12: .asciiz "" +.word 0 +data_13: .asciiz "Abort called from class " +.word 0 +data_14: .asciiz "Index out of range exception" +.word 0 +data_15: .asciiz "A: Hello world\n" +.word 0 +data_16: .asciiz "Function call in a void instance" +.word 0 +data_17: .asciiz "B: Hello world\n" +.word 0 +data_18: .asciiz "Function call in a void instance" +.word 0 +data_19: .asciiz "C: Hello world\n" +.word 0 +data_20: .asciiz "Function call in a void instance" +.word 0 +data_21: .asciiz "D: Hello world\n" +.word 0 +data_22: .asciiz "Function call in a void instance" +.word 0 +data_23: .asciiz "Function call in a void instance" +.word 0 +data_24: .asciiz "Function call in a void instance" +.word 0 +data_25: .asciiz "Function call in a void instance" +.word 0 +data_26: .asciiz "Function call in a void instance" +.word 0 +data_27: .asciiz "Done.\n" +.word 0 +data_28: .asciiz "Function call in a void instance" + + +types_table: +.word data_1 +.word data_2 +.word data_3 +.word data_4 +.word data_5 +.word data_6 +.word data_7 +.word data_8 +.word data_9 +.word data_10 + +prototype_table: + .word type_1_prototype + .word type_2_prototype + .word type_3_prototype + .word type_4_prototype + .word type_5_prototype + .word type_6_prototype + .word type_7_prototype + .word type_8_prototype + .word type_9_prototype + .word type_10_prototype + +type_1_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __ctor_Object + +type_1_prototype: +.word 0 +.word 4 +.word type_1_dispatch +.word -1 + + +type_2_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word function_out_string_at_IO +.word function_out_int_at_IO +.word function_in_string_at_IO +.word function_in_int_at_IO +.word __ctor_IO + +type_2_prototype: +.word 1 +.word 4 +.word type_2_dispatch +.word -1 + + +type_3_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word function_length_at_String +.word function_concat_at_String +.word function_substr_at_String +.word __ctor_String + +type_3_prototype: +.word 2 +.word 6 +.word type_3_dispatch +.word 0 +.word 0 +.word -1 + + +type_4_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __ctor_Int + +type_4_prototype: +.word 3 +.word 5 +.word type_4_dispatch +.word 0 +.word -1 + + +type_5_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __ctor_Bool + +type_5_prototype: +.word 4 +.word 5 +.word type_5_dispatch +.word 0 +.word -1 + + +type_6_dispatch: +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_out_a_at_A +.word __attributes_ctor_A +.word __ctor_A + +type_6_prototype: +.word 5 +.word 5 +.word type_6_dispatch +.word 0 +.word -1 + + +type_7_dispatch: +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_out_a_at_A +.word function_out_b_at_B +.word __attributes_ctor_B +.word __ctor_B + +type_7_prototype: +.word 6 +.word 5 +.word type_7_dispatch +.word 0 +.word -1 + + +type_8_dispatch: +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_out_c_at_C +.word __attributes_ctor_C +.word __ctor_C + +type_8_prototype: +.word 7 +.word 4 +.word type_8_dispatch +.word -1 + + +type_9_dispatch: +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_out_c_at_C +.word function_out_d_at_D +.word __attributes_ctor_D +.word __ctor_D + +type_9_prototype: +.word 8 +.word 4 +.word type_9_dispatch +.word -1 + + +type_10_dispatch: +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_main_at_Main +.word __attributes_ctor_Main +.word __ctor_Main + +type_10_prototype: +.word 9 +.word 4 +.word type_10_dispatch +.word -1 + + +.text +.globl main +__ctor_Object: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 0 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_abort_at_Object: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +la $t0 data_13 +sw $t0 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +la $t0 data_11 +sw $t0 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +li $v0 10 +syscall +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_type_name_at_Object: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_copy_at_Object: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $a0 4($t0) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t0 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 1 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_out_string_at_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +lw $v0 4($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_out_int_at_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -12($fp) +li $v0 1 +lw $a0 -12($fp) +syscall +lw $v0 4($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_in_string_at_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +jal read_string +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_in_int_at_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $v0 5 +syscall +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_String: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +li $t0 2 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -20($fp) +lw $t0 -20($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $a0 0($fp) +jal length +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -20($fp) +lw $t1 -12($fp) +sw $t1 16($t0) +lw $v0 -20($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_length_at_String: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 16($t0) +sw $t1 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_concat_at_String: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -24 +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -32($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 4($fp) +lw $t1 16($t0) +sw $t1 -24($fp) +lw $t0 0($fp) +lw $t1 16($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 12($t0) +sw $t1 -24($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 -20($fp) +add $t0 $t0 $t1 +sw $t0 -24($fp) +lw $a0 -32($fp) +lw $a1 -28($fp) +lw $a2 -24($fp) +jal concat +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 24 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_substr_at_String: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -36 +lw $t0 8($fp) +lw $t1 12($t0) +sw $t1 -16($fp) +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -40($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -36($fp) +lw $t0 8($fp) +lw $t1 16($t0) +sw $t1 -32($fp) +lw $t0 -32($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 -36($fp) +lw $t1 -40($fp) +add $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -28($fp) +lw $t1 -24($fp) +slt $t1 $t0 $t1 +sw $t1 -20($fp) +lw $t0 -20($fp) +bne $t0 $zero label_1 +j label_2 +label_1: +li $v0 4 +la $a0 data_14 +syscall +li $v0 10 +syscall +label_2: +lw $a0 -16($fp) +lw $a1 -40($fp) +lw $a2 -36($fp) +jal substr +sw $v0 -44($fp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 36 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_Int: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 3 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_Bool: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 4 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +jal __ctor_Main +sw $v0 -12($fp) +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal function_main_at_Main +addi $sp $sp 4 +sw $v0 -12($fp) +li $v0 0 +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +li $v0 10 +syscall + +__attributes_ctor_A: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +jal __ctor_IO +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -16($fp) +lw $t0 0($fp) +lw $t1 -16($fp) +sw $t1 12($t0) +lw $v0 0($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_out_a_at_A: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -16 +la $t0 data_15 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_3 +j label_4 +label_3: +li $v0 4 +la $a0 data_16 +syscall +li $v0 10 +syscall +label_4: +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 16 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_A: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 5 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_A +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__attributes_ctor_B: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_A +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 0($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_out_b_at_B: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -16 +la $t0 data_17 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_5 +j label_6 +label_5: +li $v0 4 +la $a0 data_18 +syscall +li $v0 10 +syscall +label_6: +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 16 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_B: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 6 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_B +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__attributes_ctor_C: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp 0 +lw $v0 0($fp) +addi $sp $sp 0 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_out_c_at_C: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -16 +la $t0 data_19 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_7 +j label_8 +label_7: +li $v0 4 +la $a0 data_20 +syscall +li $v0 10 +syscall +label_8: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 16 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_C: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 7 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_C +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__attributes_ctor_D: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_C +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 0($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_out_d_at_D: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -16 +la $t0 data_21 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_9 +j label_10 +label_9: +li $v0 4 +la $a0 data_22 +syscall +li $v0 10 +syscall +label_10: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 16 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_D: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 8 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_D +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__attributes_ctor_Main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp 0 +lw $v0 0($fp) +addi $sp $sp 0 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_main_at_Main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -64 +jal __ctor_A +sw $v0 -72($fp) +lw $t0 -72($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -68($fp) +lw $t0 -68($fp) +bne $t0 $zero label_11 +j label_12 +label_11: +li $v0 4 +la $a0 data_23 +syscall +li $v0 10 +syscall +label_12: +lw $t0 -72($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -72($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -64($fp) +jal __ctor_B +sw $v0 -60($fp) +lw $t0 -60($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -56($fp) +lw $t0 -56($fp) +bne $t0 $zero label_13 +j label_14 +label_13: +li $v0 4 +la $a0 data_24 +syscall +li $v0 10 +syscall +label_14: +lw $t0 -60($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -60($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 16($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -52($fp) +jal __ctor_C +sw $v0 -48($fp) +lw $t0 -48($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -44($fp) +lw $t0 -44($fp) +bne $t0 $zero label_15 +j label_16 +label_15: +li $v0 4 +la $a0 data_25 +syscall +li $v0 10 +syscall +label_16: +lw $t0 -48($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -48($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -40($fp) +jal __ctor_D +sw $v0 -36($fp) +lw $t0 -36($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_17 +j label_18 +label_17: +li $v0 4 +la $a0 data_26 +syscall +li $v0 10 +syscall +label_18: +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -28($fp) +la $t0 data_27 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_19 +j label_20 +label_19: +li $v0 4 +la $a0 data_28 +syscall +li $v0 10 +syscall +label_20: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 64 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_Main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 9 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_Main +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + + + +equal_str: +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $a0 8($sp) +sw $a1 12($sp) +sw $t2 16($sp) +sw $t3 20($sp) +move $t0 $a0 +move $t1 $a1 +while_equal_str: +lb $t2 0($t0) +lb $t3 0($t1) +bne $t2 $t3 equal_str_different_strings +beq $t2 $zero first_end_equal_str +beq $t3 $zero second_end_equal_str +addi $t1 $t1 1 +addi $t0 $t0 1 +j while_equal_str +equal_str_different_strings: +move $v0 $zero +j equal_str_end +first_end_equal_str: +beq $t3 $zero second_end_equal_str +move $v0 $zero +j equal_str_end +second_end_equal_str: +li $v0 1 +equal_str_end: +lw $t0 0($sp) +lw $t1 4($sp) +lw $a0 8($sp) +lw $a1 12($sp) +lw $t2 16($sp) +lw $t3 20($sp) +addiu $sp $sp 24 +jr $ra + +allocate: +addiu $sp $sp -12 +sw $a0 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +li $t0 4 +div $a0 $t0 +mfhi $t1 +sub $t0 $t0 $t1 +add $a0 $a0 $t0 +li $v0 9 +syscall +lw $a0 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +addiu $sp $sp 12 +jr $ra + +copy: +addiu $sp $sp -16 +sw $a0 0($sp) +sw $a1 4($sp) +sw $a2 8($sp) +sw $t0 12($sp) +while_copy: +beq $a2 $zero copy_end +lw $t0 0($a0) +sw $t0 0($a1) +addiu $a0 $a0 4 +addiu $a1 $a1 4 +addi $a2 $a2 -4 +j while_copy +copy_end: +lw $a0 0($sp) +lw $a1 4($sp) +lw $a2 8($sp) +lw $t0 12($sp) +addiu $sp $sp 16 +jr $ra + +read_string: +addiu $sp $sp -28 +sw $ra 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $a2 20($sp) +sw $t2 24($sp) +li $t0 8 +addi $a0 $t0 4 +jal allocate +move $t1 $v0 +move $t2 $zero +while_read_string: +addu $a0 $t1 $t2 +subu $a1 $t0 $t2 +addu $t2 $t2 $a1 +jal read_string_up_to +beq $v0 $zero read_string_not_finished +move $v0 $t1 +j end_read_string +read_string_not_finished: +sll $t0 $t0 1 +addi $a0 $t0 4 +jal allocate +move $a0 $t1 +move $t1 $v0 +move $a1 $v0 +move $a2 $t2 +jal copy +j while_read_string +end_read_string: +lw $ra 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $a2 20($sp) +lw $t2 24($sp) +addiu $sp $sp 28 +jr $ra +read_string_up_to: +addiu $sp $sp -28 +sw $ra 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +sw $t2 12($sp) +sw $t3 16($sp) +sw $t4 20($sp) +sw $t5 24($sp) +move $t0 $a0 +move $t1 $zero +li $t2 10 +addu $t3 $t0 $a1 +addiu $a1 $a1 1 +li $v0 8 +syscall +lw $a0 0($a0) +beq $a0 $zero eol_terminated +li $v0 0 +eol_check: +beq $t0 $t3 read_loop_continue +lb $t1 0($t0) +beq $t1 $t2 eol_terminated +addiu $t0 $t0 1 +j eol_check +eol_terminated: +sb $zero 0($t0) +li $v0 1 +read_loop_continue: +lw $ra 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +lw $t2 12($sp) +lw $t3 16($sp) +lw $t4 20($sp) +lw $t5 24($sp) +addiu $sp $sp 28 +jr $ra + +substr: +addiu $sp $sp -32 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $t3 12($sp) +sw $a0 16($sp) +sw $a1 20($sp) +sw $a2 24($sp) +sw $ra 28($sp) +move $t0 $a0 +add $t0 $t0 $a1 +li $t1 4 +div $a2 $t1 +mfhi $t2 +bne $t2 $zero substr_allign_size +move $t1 $a2 +j substr_new_chunk +substr_allign_size: +sub $t1 $t1 $t2 +add $t1 $t1 $a2 +substr_new_chunk: +move $a0 $t1 +jal allocate +move $t3 $v0 +move $t1 $zero +while_substr_copy: +beq $t1 $a2 substr_end +lb $t2 0($t0) +sb $t2 0($t3) +addiu $t0 $t0 1 +addiu $t3 $t3 1 +addiu $t1 $t1 1 +j while_substr_copy +substr_end: +sb $zero 0($t3) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $t3 12($sp) +lw $a0 16($sp) +lw $a1 20($sp) +lw $a2 24($sp) +lw $ra 28($sp) +addiu $sp $sp 32 +jr $ra + +concat: +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $ra 20($sp) +move $t0 $a0 +move $t1 $a1 +addiu $a0 $a2 1 +li $t2 4 +div $a0 $t2 +mfhi $a0 +bne $a0 $zero concat_allign_size +addiu $a0 $a2 1 +j concat_size_allignned +concat_allign_size: +sub $t2 $t2 $a0 +add $a0 $a2 $t2 +addiu $a0 $a0 1 +concat_size_allignned: +jal allocate +move $t2 $v0 +j first_while_concat_copy +first_while_concat_copy: +lb $a0 0($t0) +beq $a0 $zero second_while_concat_copy +sb $a0 0($t2) +addiu $t0 $t0 1 +addiu $t2 $t2 1 +j first_while_concat_copy +second_while_concat_copy: +lb $a0 0($t1) +beq $a0 $zero concat_end +sb $a0 0($t2) +addiu $t1 $t1 1 +addiu $t2 $t2 1 +j second_while_concat_copy +concat_end: +sb $zero 0($t2) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $ra 20($sp) +addiu $sp $sp 24 +jr $ra + +length: +addiu $sp $sp -8 +sw $t0 0($sp) +sw $t1 4($sp) +move $t0 $a0 +move $v0 $zero +while_len: +lb $t1 0($t0) +beq $t1 $zero len_end +addi $v0 $v0 1 +addiu $t0 $t0 1 +j while_len +len_end: +lw $t0 0($sp) +lw $t1 4($sp) +addiu $sp $sp 8 +jr $ra \ No newline at end of file diff --git a/tests/codegen/life.mips b/tests/codegen/life.mips new file mode 100644 index 000000000..6896348ee --- /dev/null +++ b/tests/codegen/life.mips @@ -0,0 +1,11418 @@ +.data +default_str: .asciiz "" +.word 0 +data_1: .asciiz "Object" +.word 0 +data_2: .asciiz "IO" +.word 0 +data_3: .asciiz "String" +.word 0 +data_4: .asciiz "Int" +.word 0 +data_5: .asciiz "Bool" +.word 0 +data_6: .asciiz "Board" +.word 0 +data_7: .asciiz "CellularAutomaton" +.word 0 +data_8: .asciiz "Main" +.word 0 +data_9: .asciiz " +" +.word 0 +data_10: .asciiz "" +.word 0 +data_11: .asciiz "Abort called from class " +.word 0 +data_12: .asciiz "Index out of range exception" +.word 0 +data_13: .asciiz "Function call in a void instance" +.word 0 +data_14: .asciiz "Function call in a void instance" +.word 0 +data_15: .asciiz "Function call in a void instance" +.word 0 +data_16: .asciiz "\n" +.word 0 +data_17: .asciiz "Function call in a void instance" +.word 0 +data_18: .asciiz "Function call in a void instance" +.word 0 +data_19: .asciiz "Function call in a void instance" +.word 0 +data_20: .asciiz "\n" +.word 0 +data_21: .asciiz "Function call in a void instance" +.word 0 +data_22: .asciiz "\n" +.word 0 +data_23: .asciiz "Function call in a void instance" +.word 0 +data_24: .asciiz "Function call in a void instance" +.word 0 +data_25: .asciiz "Function call in a void instance" +.word 0 +data_26: .asciiz " " +.word 0 +data_27: .asciiz "Function call in a void instance" +.word 0 +data_28: .asciiz " " +.word 0 +data_29: .asciiz "Function call in a void instance" +.word 0 +data_30: .asciiz " " +.word 0 +data_31: .asciiz "Division by zero exception" +.word 0 +data_32: .asciiz "Function call in a void instance" +.word 0 +data_33: .asciiz " " +.word 0 +data_34: .asciiz "Division by zero exception" +.word 0 +data_35: .asciiz "Function call in a void instance" +.word 0 +data_36: .asciiz " " +.word 0 +data_37: .asciiz " " +.word 0 +data_38: .asciiz "Division by zero exception" +.word 0 +data_39: .asciiz "Function call in a void instance" +.word 0 +data_40: .asciiz " " +.word 0 +data_41: .asciiz " " +.word 0 +data_42: .asciiz "Division by zero exception" +.word 0 +data_43: .asciiz "Function call in a void instance" +.word 0 +data_44: .asciiz " " +.word 0 +data_45: .asciiz " " +.word 0 +data_46: .asciiz "Division by zero exception" +.word 0 +data_47: .asciiz "Function call in a void instance" +.word 0 +data_48: .asciiz " " +.word 0 +data_49: .asciiz " " +.word 0 +data_50: .asciiz "Division by zero exception" +.word 0 +data_51: .asciiz "Function call in a void instance" +.word 0 +data_52: .asciiz " " +.word 0 +data_53: .asciiz " " +.word 0 +data_54: .asciiz "Function call in a void instance" +.word 0 +data_55: .asciiz "X" +.word 0 +data_56: .asciiz "Function call in a void instance" +.word 0 +data_57: .asciiz "X" +.word 0 +data_58: .asciiz "Function call in a void instance" +.word 0 +data_59: .asciiz "X" +.word 0 +data_60: .asciiz "Function call in a void instance" +.word 0 +data_61: .asciiz "X" +.word 0 +data_62: .asciiz "Function call in a void instance" +.word 0 +data_63: .asciiz "X" +.word 0 +data_64: .asciiz "Function call in a void instance" +.word 0 +data_65: .asciiz "X" +.word 0 +data_66: .asciiz "Function call in a void instance" +.word 0 +data_67: .asciiz "X" +.word 0 +data_68: .asciiz "Function call in a void instance" +.word 0 +data_69: .asciiz "X" +.word 0 +data_70: .asciiz "Function call in a void instance" +.word 0 +data_71: .asciiz "Function call in a void instance" +.word 0 +data_72: .asciiz "-" +.word 0 +data_73: .asciiz "Function call in a void instance" +.word 0 +data_74: .asciiz "X" +.word 0 +data_75: .asciiz "-" +.word 0 +data_76: .asciiz "X" +.word 0 +data_77: .asciiz "X" +.word 0 +data_78: .asciiz "Function call in a void instance" +.word 0 +data_79: .asciiz "Function call in a void instance" +.word 0 +data_80: .asciiz "Function call in a void instance" +.word 0 +data_81: .asciiz "\nPlease chose a number:\n" +.word 0 +data_82: .asciiz "Function call in a void instance" +.word 0 +data_83: .asciiz "\t1: A cross\n" +.word 0 +data_84: .asciiz "Function call in a void instance" +.word 0 +data_85: .asciiz "\t2: A slash from the upper left to lower right\n" +.word 0 +data_86: .asciiz "Function call in a void instance" +.word 0 +data_87: .asciiz "\t3: A slash from the upper right to lower left\n" +.word 0 +data_88: .asciiz "Function call in a void instance" +.word 0 +data_89: .asciiz "\t4: An X\n" +.word 0 +data_90: .asciiz "Function call in a void instance" +.word 0 +data_91: .asciiz "\t5: A greater than sign \n" +.word 0 +data_92: .asciiz "Function call in a void instance" +.word 0 +data_93: .asciiz "\t6: A less than sign\n" +.word 0 +data_94: .asciiz "Function call in a void instance" +.word 0 +data_95: .asciiz "\t7: Two greater than signs\n" +.word 0 +data_96: .asciiz "Function call in a void instance" +.word 0 +data_97: .asciiz "\t8: Two less than signs\n" +.word 0 +data_98: .asciiz "Function call in a void instance" +.word 0 +data_99: .asciiz "\t9: A 'V'\n" +.word 0 +data_100: .asciiz "Function call in a void instance" +.word 0 +data_101: .asciiz "\t10: An inverse 'V'\n" +.word 0 +data_102: .asciiz "Function call in a void instance" +.word 0 +data_103: .asciiz "\t11: Numbers 9 and 10 combined\n" +.word 0 +data_104: .asciiz "Function call in a void instance" +.word 0 +data_105: .asciiz "\t12: A full grid\n" +.word 0 +data_106: .asciiz "Function call in a void instance" +.word 0 +data_107: .asciiz "\t13: A 'T'\n" +.word 0 +data_108: .asciiz "Function call in a void instance" +.word 0 +data_109: .asciiz "\t14: A plus '+'\n" +.word 0 +data_110: .asciiz "Function call in a void instance" +.word 0 +data_111: .asciiz "\t15: A 'W'\n" +.word 0 +data_112: .asciiz "Function call in a void instance" +.word 0 +data_113: .asciiz "\t16: An 'M'\n" +.word 0 +data_114: .asciiz "Function call in a void instance" +.word 0 +data_115: .asciiz "\t17: An 'E'\n" +.word 0 +data_116: .asciiz "Function call in a void instance" +.word 0 +data_117: .asciiz "\t18: A '3'\n" +.word 0 +data_118: .asciiz "Function call in a void instance" +.word 0 +data_119: .asciiz "\t19: An 'O'\n" +.word 0 +data_120: .asciiz "Function call in a void instance" +.word 0 +data_121: .asciiz "\t20: An '8'\n" +.word 0 +data_122: .asciiz "Function call in a void instance" +.word 0 +data_123: .asciiz "\t21: An 'S'\n" +.word 0 +data_124: .asciiz "Function call in a void instance" +.word 0 +data_125: .asciiz "Your choice => " +.word 0 +data_126: .asciiz "Function call in a void instance" +.word 0 +data_127: .asciiz "Function call in a void instance" +.word 0 +data_128: .asciiz "\n" +.word 0 +data_129: .asciiz "Function call in a void instance" +.word 0 +data_130: .asciiz " " +.word 0 +data_131: .asciiz " XXXX X XX X XXXX " +.word 0 +data_132: .asciiz " XX X XX X XX X XX X XX " +.word 0 +data_133: .asciiz " XX X XX X XX " +.word 0 +data_134: .asciiz "XXX X X X X XXXX " +.word 0 +data_135: .asciiz "XXXXX X XXXXX X XXXX" +.word 0 +data_136: .asciiz " X X X X X X X" +.word 0 +data_137: .asciiz "X X X X X X X " +.word 0 +data_138: .asciiz " X X XXXXX X X " +.word 0 +data_139: .asciiz "XXXXX X X X X " +.word 0 +data_140: .asciiz "XXXXXXXXXXXXXXXXXXXXXXXXX" +.word 0 +data_141: .asciiz "X X X X X X X X" +.word 0 +data_142: .asciiz " X X X X X" +.word 0 +data_143: .asciiz "X X X X X " +.word 0 +data_144: .asciiz " X XX X X X " +.word 0 +data_145: .asciiz "X X X XX X " +.word 0 +data_146: .asciiz " X X X X X" +.word 0 +data_147: .asciiz "X X X X X " +.word 0 +data_148: .asciiz "X X X X X X X X X" +.word 0 +data_149: .asciiz "X X X X X" +.word 0 +data_150: .asciiz " X X X X X " +.word 0 +data_151: .asciiz " XX XXXX XXXX XX " +.word 0 +data_152: .asciiz "Would you like to continue with the next generation? \n" +.word 0 +data_153: .asciiz "Function call in a void instance" +.word 0 +data_154: .asciiz "Please use lowercase y or n for your answer [y]: " +.word 0 +data_155: .asciiz "Function call in a void instance" +.word 0 +data_156: .asciiz "Function call in a void instance" +.word 0 +data_157: .asciiz "\n" +.word 0 +data_158: .asciiz "Function call in a void instance" +.word 0 +data_159: .asciiz "n" +.word 0 +data_160: .asciiz "\n\n" +.word 0 +data_161: .asciiz "Function call in a void instance" +.word 0 +data_162: .asciiz "Would you like to choose a background pattern? \n" +.word 0 +data_163: .asciiz "Function call in a void instance" +.word 0 +data_164: .asciiz "Please use lowercase y or n for your answer [n]: " +.word 0 +data_165: .asciiz "Function call in a void instance" +.word 0 +data_166: .asciiz "Function call in a void instance" +.word 0 +data_167: .asciiz "y" +.word 0 +data_168: .asciiz "Welcome to the Game of Life.\n" +.word 0 +data_169: .asciiz "Function call in a void instance" +.word 0 +data_170: .asciiz "There are many initial states to choose from. \n" +.word 0 +data_171: .asciiz "Function call in a void instance" +.word 0 +data_172: .asciiz "Function call in a void instance" +.word 0 +data_173: .asciiz "Function call in a void instance" +.word 0 +data_174: .asciiz "Function call in a void instance" +.word 0 +data_175: .asciiz "Function call in a void instance" +.word 0 +data_176: .asciiz "Function call in a void instance" +.word 0 +data_177: .asciiz "Function call in a void instance" +.word 0 +data_178: .asciiz "Function call in a void instance" + + +types_table: +.word data_1 +.word data_2 +.word data_3 +.word data_4 +.word data_5 +.word data_6 +.word data_7 +.word data_8 + +prototype_table: + .word type_1_prototype + .word type_2_prototype + .word type_3_prototype + .word type_4_prototype + .word type_5_prototype + .word type_6_prototype + .word type_7_prototype + .word type_8_prototype + +type_1_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __ctor_Object + +type_1_prototype: +.word 0 +.word 4 +.word type_1_dispatch +.word -1 + + +type_2_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word function_out_string_at_IO +.word function_out_int_at_IO +.word function_in_string_at_IO +.word function_in_int_at_IO +.word __ctor_IO + +type_2_prototype: +.word 1 +.word 4 +.word type_2_dispatch +.word -1 + + +type_3_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word function_length_at_String +.word function_concat_at_String +.word function_substr_at_String +.word __ctor_String + +type_3_prototype: +.word 2 +.word 6 +.word type_3_dispatch +.word 0 +.word 0 +.word -1 + + +type_4_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __ctor_Int + +type_4_prototype: +.word 3 +.word 5 +.word type_4_dispatch +.word 0 +.word -1 + + +type_5_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __ctor_Bool + +type_5_prototype: +.word 4 +.word 5 +.word type_5_dispatch +.word 0 +.word -1 + + +type_6_dispatch: +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_board_init_at_Board +.word function_size_of_board_at_Board +.word __attributes_ctor_Board +.word __ctor_Board + +type_6_prototype: +.word 5 +.word 7 +.word type_6_dispatch +.word 0 +.word 0 +.word 0 +.word -1 + + +type_7_dispatch: +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_board_init_at_Board +.word function_size_of_board_at_Board +.word function_cell_at_CellularAutomaton +.word function_cell_at_next_evolution_at_CellularAutomaton +.word function_east_at_CellularAutomaton +.word function_evolve_at_CellularAutomaton +.word function_init_at_CellularAutomaton +.word function_neighbors_at_CellularAutomaton +.word function_north_at_CellularAutomaton +.word function_northeast_at_CellularAutomaton +.word function_northwest_at_CellularAutomaton +.word function_num_cells_at_CellularAutomaton +.word function_option_at_CellularAutomaton +.word function_print_at_CellularAutomaton +.word function_prompt_at_CellularAutomaton +.word function_prompt2_at_CellularAutomaton +.word function_south_at_CellularAutomaton +.word function_southeast_at_CellularAutomaton +.word function_southwest_at_CellularAutomaton +.word function_west_at_CellularAutomaton +.word __attributes_ctor_CellularAutomaton +.word __ctor_CellularAutomaton + +type_7_prototype: +.word 6 +.word 8 +.word type_7_dispatch +.word 0 +.word 0 +.word 0 +.word 0 +.word -1 + + +type_8_dispatch: +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_board_init_at_Board +.word function_size_of_board_at_Board +.word function_cell_at_CellularAutomaton +.word function_cell_at_next_evolution_at_CellularAutomaton +.word function_east_at_CellularAutomaton +.word function_evolve_at_CellularAutomaton +.word function_init_at_CellularAutomaton +.word function_neighbors_at_CellularAutomaton +.word function_north_at_CellularAutomaton +.word function_northeast_at_CellularAutomaton +.word function_northwest_at_CellularAutomaton +.word function_num_cells_at_CellularAutomaton +.word function_option_at_CellularAutomaton +.word function_print_at_CellularAutomaton +.word function_prompt_at_CellularAutomaton +.word function_prompt2_at_CellularAutomaton +.word function_south_at_CellularAutomaton +.word function_southeast_at_CellularAutomaton +.word function_southwest_at_CellularAutomaton +.word function_west_at_CellularAutomaton +.word function_main_at_Main +.word __attributes_ctor_Main +.word __ctor_Main + +type_8_prototype: +.word 7 +.word 9 +.word type_8_dispatch +.word 0 +.word 0 +.word 0 +.word 0 +.word 0 +.word -1 + + +.text +.globl main +__ctor_Object: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 0 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_abort_at_Object: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +la $t0 data_11 +sw $t0 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +la $t0 data_9 +sw $t0 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +li $v0 10 +syscall +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_type_name_at_Object: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_copy_at_Object: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $a0 4($t0) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t0 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 1 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_out_string_at_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +lw $v0 4($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_out_int_at_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -12($fp) +li $v0 1 +lw $a0 -12($fp) +syscall +lw $v0 4($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_in_string_at_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +jal read_string +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_in_int_at_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $v0 5 +syscall +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_String: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +li $t0 2 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -20($fp) +lw $t0 -20($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $a0 0($fp) +jal length +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -20($fp) +lw $t1 -12($fp) +sw $t1 16($t0) +lw $v0 -20($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_length_at_String: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 16($t0) +sw $t1 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_concat_at_String: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -24 +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -32($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 4($fp) +lw $t1 16($t0) +sw $t1 -24($fp) +lw $t0 0($fp) +lw $t1 16($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 12($t0) +sw $t1 -24($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 -20($fp) +add $t0 $t0 $t1 +sw $t0 -24($fp) +lw $a0 -32($fp) +lw $a1 -28($fp) +lw $a2 -24($fp) +jal concat +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 24 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_substr_at_String: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -36 +lw $t0 8($fp) +lw $t1 12($t0) +sw $t1 -16($fp) +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -40($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -36($fp) +lw $t0 8($fp) +lw $t1 16($t0) +sw $t1 -32($fp) +lw $t0 -32($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 -36($fp) +lw $t1 -40($fp) +add $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -28($fp) +lw $t1 -24($fp) +slt $t1 $t0 $t1 +sw $t1 -20($fp) +lw $t0 -20($fp) +bne $t0 $zero label_1 +j label_2 +label_1: +li $v0 4 +la $a0 data_12 +syscall +li $v0 10 +syscall +label_2: +lw $a0 -16($fp) +lw $a1 -40($fp) +lw $a2 -36($fp) +jal substr +sw $v0 -44($fp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 36 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_Int: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 3 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_Bool: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 4 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +jal __ctor_Main +sw $v0 -12($fp) +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal function_main_at_Main +addi $sp $sp 4 +sw $v0 -12($fp) +li $v0 0 +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +li $v0 10 +syscall + +__attributes_ctor_Board: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 0($fp) +lw $t1 -20($fp) +sw $t1 20($t0) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -16($fp) +lw $t0 0($fp) +lw $t1 -16($fp) +sw $t1 16($t0) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 0($fp) +lw $t1 -12($fp) +sw $t1 12($t0) +lw $v0 0($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_size_of_board_at_Board: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_3 +j label_4 +label_3: +li $v0 4 +la $a0 data_13 +syscall +li $v0 10 +syscall +label_4: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_board_init_at_Board: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -356 +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -360($fp) +lw $t0 -360($fp) +bne $t0 $zero label_5 +j label_6 +label_5: +li $v0 4 +la $a0 data_14 +syscall +li $v0 10 +syscall +label_6: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -356($fp) +lw $t0 -356($fp) +sw $t0 -364($fp) +li $t0 15 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -308($fp) +lw $t0 -364($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -336($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -328($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -320($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -324($fp) +lw $t0 -336($fp) +lw $t1 -328($fp) +seq $t0 $t0 $t1 +sw $t0 -316($fp) +lw $t0 -316($fp) +bne $t0 $zero label_7 +lw $t0 -336($fp) +lw $t1 -320($fp) +seq $t0 $t0 $t1 +sw $t0 -316($fp) +lw $t0 -316($fp) +bne $t0 $zero label_8 +lw $t0 -336($fp) +lw $t1 -324($fp) +seq $t0 $t0 $t1 +sw $t0 -316($fp) +lw $t0 -316($fp) +bne $t0 $zero label_9 +lw $t0 -364($fp) +lw $t1 -308($fp) +seq $t0 $t0 $t1 +sw $t0 -312($fp) +j label_10 +label_7: +lw $t0 -364($fp) +lw $t1 12($t0) +sw $t1 -340($fp) +lw $t0 -308($fp) +lw $t1 12($t0) +sw $t1 -332($fp) +lw $t0 -340($fp) +lw $t1 -332($fp) +seq $t0 $t0 $t1 +sw $t0 -312($fp) +j label_10 +label_8: +lw $t0 -364($fp) +lw $t1 12($t0) +sw $t1 -340($fp) +lw $t0 -308($fp) +lw $t1 12($t0) +sw $t1 -332($fp) +lw $t0 -340($fp) +move $a0 $t0 +lw $t0 -332($fp) +move $a1 $t0 +jal equal_str +sw $v0 -312($fp) +j label_10 +label_9: +lw $t0 -364($fp) +lw $t1 12($t0) +sw $t1 -340($fp) +lw $t0 -308($fp) +lw $t1 12($t0) +sw $t1 -332($fp) +lw $t0 -340($fp) +lw $t1 -332($fp) +seq $t0 $t0 $t1 +sw $t0 -312($fp) +j label_10 +label_10: +lw $t0 -312($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -344($fp) +lw $t0 -344($fp) +lw $t1 12($t0) +sw $t1 -348($fp) +lw $t0 -348($fp) +bne $t0 $zero label_41 +li $t0 16 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -260($fp) +lw $t0 -364($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -288($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -280($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -272($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -276($fp) +lw $t0 -288($fp) +lw $t1 -280($fp) +seq $t0 $t0 $t1 +sw $t0 -268($fp) +lw $t0 -268($fp) +bne $t0 $zero label_11 +lw $t0 -288($fp) +lw $t1 -272($fp) +seq $t0 $t0 $t1 +sw $t0 -268($fp) +lw $t0 -268($fp) +bne $t0 $zero label_12 +lw $t0 -288($fp) +lw $t1 -276($fp) +seq $t0 $t0 $t1 +sw $t0 -268($fp) +lw $t0 -268($fp) +bne $t0 $zero label_13 +lw $t0 -364($fp) +lw $t1 -260($fp) +seq $t0 $t0 $t1 +sw $t0 -264($fp) +j label_14 +label_11: +lw $t0 -364($fp) +lw $t1 12($t0) +sw $t1 -292($fp) +lw $t0 -260($fp) +lw $t1 12($t0) +sw $t1 -284($fp) +lw $t0 -292($fp) +lw $t1 -284($fp) +seq $t0 $t0 $t1 +sw $t0 -264($fp) +j label_14 +label_12: +lw $t0 -364($fp) +lw $t1 12($t0) +sw $t1 -292($fp) +lw $t0 -260($fp) +lw $t1 12($t0) +sw $t1 -284($fp) +lw $t0 -292($fp) +move $a0 $t0 +lw $t0 -284($fp) +move $a1 $t0 +jal equal_str +sw $v0 -264($fp) +j label_14 +label_13: +lw $t0 -364($fp) +lw $t1 12($t0) +sw $t1 -292($fp) +lw $t0 -260($fp) +lw $t1 12($t0) +sw $t1 -284($fp) +lw $t0 -292($fp) +lw $t1 -284($fp) +seq $t0 $t0 $t1 +sw $t0 -264($fp) +j label_14 +label_14: +lw $t0 -264($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -296($fp) +lw $t0 -296($fp) +lw $t1 12($t0) +sw $t1 -300($fp) +lw $t0 -300($fp) +bne $t0 $zero label_39 +li $t0 20 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -212($fp) +lw $t0 -364($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -240($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -232($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -224($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -228($fp) +lw $t0 -240($fp) +lw $t1 -232($fp) +seq $t0 $t0 $t1 +sw $t0 -220($fp) +lw $t0 -220($fp) +bne $t0 $zero label_15 +lw $t0 -240($fp) +lw $t1 -224($fp) +seq $t0 $t0 $t1 +sw $t0 -220($fp) +lw $t0 -220($fp) +bne $t0 $zero label_16 +lw $t0 -240($fp) +lw $t1 -228($fp) +seq $t0 $t0 $t1 +sw $t0 -220($fp) +lw $t0 -220($fp) +bne $t0 $zero label_17 +lw $t0 -364($fp) +lw $t1 -212($fp) +seq $t0 $t0 $t1 +sw $t0 -216($fp) +j label_18 +label_15: +lw $t0 -364($fp) +lw $t1 12($t0) +sw $t1 -244($fp) +lw $t0 -212($fp) +lw $t1 12($t0) +sw $t1 -236($fp) +lw $t0 -244($fp) +lw $t1 -236($fp) +seq $t0 $t0 $t1 +sw $t0 -216($fp) +j label_18 +label_16: +lw $t0 -364($fp) +lw $t1 12($t0) +sw $t1 -244($fp) +lw $t0 -212($fp) +lw $t1 12($t0) +sw $t1 -236($fp) +lw $t0 -244($fp) +move $a0 $t0 +lw $t0 -236($fp) +move $a1 $t0 +jal equal_str +sw $v0 -216($fp) +j label_18 +label_17: +lw $t0 -364($fp) +lw $t1 12($t0) +sw $t1 -244($fp) +lw $t0 -212($fp) +lw $t1 12($t0) +sw $t1 -236($fp) +lw $t0 -244($fp) +lw $t1 -236($fp) +seq $t0 $t0 $t1 +sw $t0 -216($fp) +j label_18 +label_18: +lw $t0 -216($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -248($fp) +lw $t0 -248($fp) +lw $t1 12($t0) +sw $t1 -252($fp) +lw $t0 -252($fp) +bne $t0 $zero label_37 +li $t0 21 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -164($fp) +lw $t0 -364($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -192($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -184($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -176($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -180($fp) +lw $t0 -192($fp) +lw $t1 -184($fp) +seq $t0 $t0 $t1 +sw $t0 -172($fp) +lw $t0 -172($fp) +bne $t0 $zero label_19 +lw $t0 -192($fp) +lw $t1 -176($fp) +seq $t0 $t0 $t1 +sw $t0 -172($fp) +lw $t0 -172($fp) +bne $t0 $zero label_20 +lw $t0 -192($fp) +lw $t1 -180($fp) +seq $t0 $t0 $t1 +sw $t0 -172($fp) +lw $t0 -172($fp) +bne $t0 $zero label_21 +lw $t0 -364($fp) +lw $t1 -164($fp) +seq $t0 $t0 $t1 +sw $t0 -168($fp) +j label_22 +label_19: +lw $t0 -364($fp) +lw $t1 12($t0) +sw $t1 -196($fp) +lw $t0 -164($fp) +lw $t1 12($t0) +sw $t1 -188($fp) +lw $t0 -196($fp) +lw $t1 -188($fp) +seq $t0 $t0 $t1 +sw $t0 -168($fp) +j label_22 +label_20: +lw $t0 -364($fp) +lw $t1 12($t0) +sw $t1 -196($fp) +lw $t0 -164($fp) +lw $t1 12($t0) +sw $t1 -188($fp) +lw $t0 -196($fp) +move $a0 $t0 +lw $t0 -188($fp) +move $a1 $t0 +jal equal_str +sw $v0 -168($fp) +j label_22 +label_21: +lw $t0 -364($fp) +lw $t1 12($t0) +sw $t1 -196($fp) +lw $t0 -164($fp) +lw $t1 12($t0) +sw $t1 -188($fp) +lw $t0 -196($fp) +lw $t1 -188($fp) +seq $t0 $t0 $t1 +sw $t0 -168($fp) +j label_22 +label_22: +lw $t0 -168($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -200($fp) +lw $t0 -200($fp) +lw $t1 12($t0) +sw $t1 -204($fp) +lw $t0 -204($fp) +bne $t0 $zero label_35 +li $t0 25 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -116($fp) +lw $t0 -364($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -144($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -136($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -128($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -132($fp) +lw $t0 -144($fp) +lw $t1 -136($fp) +seq $t0 $t0 $t1 +sw $t0 -124($fp) +lw $t0 -124($fp) +bne $t0 $zero label_23 +lw $t0 -144($fp) +lw $t1 -128($fp) +seq $t0 $t0 $t1 +sw $t0 -124($fp) +lw $t0 -124($fp) +bne $t0 $zero label_24 +lw $t0 -144($fp) +lw $t1 -132($fp) +seq $t0 $t0 $t1 +sw $t0 -124($fp) +lw $t0 -124($fp) +bne $t0 $zero label_25 +lw $t0 -364($fp) +lw $t1 -116($fp) +seq $t0 $t0 $t1 +sw $t0 -120($fp) +j label_26 +label_23: +lw $t0 -364($fp) +lw $t1 12($t0) +sw $t1 -148($fp) +lw $t0 -116($fp) +lw $t1 12($t0) +sw $t1 -140($fp) +lw $t0 -148($fp) +lw $t1 -140($fp) +seq $t0 $t0 $t1 +sw $t0 -120($fp) +j label_26 +label_24: +lw $t0 -364($fp) +lw $t1 12($t0) +sw $t1 -148($fp) +lw $t0 -116($fp) +lw $t1 12($t0) +sw $t1 -140($fp) +lw $t0 -148($fp) +move $a0 $t0 +lw $t0 -140($fp) +move $a1 $t0 +jal equal_str +sw $v0 -120($fp) +j label_26 +label_25: +lw $t0 -364($fp) +lw $t1 12($t0) +sw $t1 -148($fp) +lw $t0 -116($fp) +lw $t1 12($t0) +sw $t1 -140($fp) +lw $t0 -148($fp) +lw $t1 -140($fp) +seq $t0 $t0 $t1 +sw $t0 -120($fp) +j label_26 +label_26: +lw $t0 -120($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -152($fp) +lw $t0 -152($fp) +lw $t1 12($t0) +sw $t1 -156($fp) +lw $t0 -156($fp) +bne $t0 $zero label_33 +li $t0 28 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -68($fp) +lw $t0 -364($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -96($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -88($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -80($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -84($fp) +lw $t0 -96($fp) +lw $t1 -88($fp) +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_27 +lw $t0 -96($fp) +lw $t1 -80($fp) +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_28 +lw $t0 -96($fp) +lw $t1 -84($fp) +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_29 +lw $t0 -364($fp) +lw $t1 -68($fp) +seq $t0 $t0 $t1 +sw $t0 -72($fp) +j label_30 +label_27: +lw $t0 -364($fp) +lw $t1 12($t0) +sw $t1 -100($fp) +lw $t0 -68($fp) +lw $t1 12($t0) +sw $t1 -92($fp) +lw $t0 -100($fp) +lw $t1 -92($fp) +seq $t0 $t0 $t1 +sw $t0 -72($fp) +j label_30 +label_28: +lw $t0 -364($fp) +lw $t1 12($t0) +sw $t1 -100($fp) +lw $t0 -68($fp) +lw $t1 12($t0) +sw $t1 -92($fp) +lw $t0 -100($fp) +move $a0 $t0 +lw $t0 -92($fp) +move $a1 $t0 +jal equal_str +sw $v0 -72($fp) +j label_30 +label_29: +lw $t0 -364($fp) +lw $t1 12($t0) +sw $t1 -100($fp) +lw $t0 -68($fp) +lw $t1 12($t0) +sw $t1 -92($fp) +lw $t0 -100($fp) +lw $t1 -92($fp) +seq $t0 $t0 $t1 +sw $t0 -72($fp) +j label_30 +label_30: +lw $t0 -72($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -104($fp) +lw $t0 -104($fp) +lw $t1 12($t0) +sw $t1 -108($fp) +lw $t0 -108($fp) +bne $t0 $zero label_31 +li $t0 5 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -64($fp) +lw $t0 -64($fp) +lw $t1 4($fp) +addi $t1 $t1 20 +sw $t0 0($t1) +li $t0 5 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -60($fp) +lw $t0 -60($fp) +lw $t1 4($fp) +addi $t1 $t1 16 +sw $t0 0($t1) +lw $t0 -364($fp) +lw $t1 4($fp) +addi $t1 $t1 12 +sw $t0 0($t1) +lw $t4 4($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +sw $t0 -112($fp) +j label_32 +label_31: +li $t0 7 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -56($fp) +lw $t0 -56($fp) +lw $t1 4($fp) +addi $t1 $t1 20 +sw $t0 0($t1) +li $t0 4 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -52($fp) +lw $t0 -52($fp) +lw $t1 4($fp) +addi $t1 $t1 16 +sw $t0 0($t1) +lw $t0 -364($fp) +lw $t1 4($fp) +addi $t1 $t1 12 +sw $t0 0($t1) +lw $t4 4($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +sw $t0 -112($fp) +label_32: +lw $t0 -112($fp) +sw $t0 -160($fp) +j label_34 +label_33: +li $t0 5 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -48($fp) +lw $t0 -48($fp) +lw $t1 4($fp) +addi $t1 $t1 20 +sw $t0 0($t1) +li $t0 5 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -44($fp) +lw $t0 -44($fp) +lw $t1 4($fp) +addi $t1 $t1 16 +sw $t0 0($t1) +lw $t0 -364($fp) +lw $t1 4($fp) +addi $t1 $t1 12 +sw $t0 0($t1) +lw $t4 4($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +sw $t0 -160($fp) +label_34: +lw $t0 -160($fp) +sw $t0 -208($fp) +j label_36 +label_35: +li $t0 3 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -40($fp) +lw $t0 -40($fp) +lw $t1 4($fp) +addi $t1 $t1 20 +sw $t0 0($t1) +li $t0 7 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 -36($fp) +lw $t1 4($fp) +addi $t1 $t1 16 +sw $t0 0($t1) +lw $t0 -364($fp) +lw $t1 4($fp) +addi $t1 $t1 12 +sw $t0 0($t1) +lw $t4 4($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +sw $t0 -208($fp) +label_36: +lw $t0 -208($fp) +sw $t0 -256($fp) +j label_38 +label_37: +li $t0 4 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -32($fp) +lw $t0 -32($fp) +lw $t1 4($fp) +addi $t1 $t1 20 +sw $t0 0($t1) +li $t0 5 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t0 -28($fp) +lw $t1 4($fp) +addi $t1 $t1 16 +sw $t0 0($t1) +lw $t0 -364($fp) +lw $t1 4($fp) +addi $t1 $t1 12 +sw $t0 0($t1) +lw $t4 4($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +sw $t0 -256($fp) +label_38: +lw $t0 -256($fp) +sw $t0 -304($fp) +j label_40 +label_39: +li $t0 4 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -24($fp) +lw $t0 -24($fp) +lw $t1 4($fp) +addi $t1 $t1 20 +sw $t0 0($t1) +li $t0 4 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 -20($fp) +lw $t1 4($fp) +addi $t1 $t1 16 +sw $t0 0($t1) +lw $t0 -364($fp) +lw $t1 4($fp) +addi $t1 $t1 12 +sw $t0 0($t1) +lw $t4 4($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +sw $t0 -304($fp) +label_40: +lw $t0 -304($fp) +sw $t0 -352($fp) +j label_42 +label_41: +li $t0 3 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -16($fp) +lw $t0 -16($fp) +lw $t1 4($fp) +addi $t1 $t1 20 +sw $t0 0($t1) +li $t0 5 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 4($fp) +addi $t1 $t1 16 +sw $t0 0($t1) +lw $t0 -364($fp) +lw $t1 4($fp) +addi $t1 $t1 12 +sw $t0 0($t1) +lw $t4 4($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +sw $t0 -352($fp) +label_42: +lw $v0 4($fp) +addi $sp $sp 356 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_Board: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 5 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_Board +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__attributes_ctor_CellularAutomaton: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_Board +addi $sp $sp 4 +sw $v0 -16($fp) +la $t0 data_10 +sw $t0 -12($fp) +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 0($fp) +lw $t1 -12($fp) +sw $t1 24($t0) +lw $v0 0($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_init_at_CellularAutomaton: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 0($fp) +lw $t1 4($fp) +addi $t1 $t1 24 +sw $t0 0($t1) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_43 +j label_44 +label_43: +li $v0 4 +la $a0 data_15 +syscall +li $v0 10 +syscall +label_44: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $v0 4($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_print_at_CellularAutomaton: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -112 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -116($fp) +lw $t0 -116($fp) +sw $t0 -120($fp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +sw $t0 -112($fp) +la $t0 data_16 +sw $t0 -108($fp) +lw $t0 -108($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -104($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -100($fp) +lw $t0 -100($fp) +bne $t0 $zero label_45 +j label_46 +label_45: +li $v0 4 +la $a0 data_17 +syscall +li $v0 10 +syscall +label_46: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -104($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -96($fp) +label_47: +lw $t0 -120($fp) +lw $t1 12($t0) +sw $t1 -84($fp) +lw $t0 -112($fp) +lw $t1 12($t0) +sw $t1 -80($fp) +lw $t0 -84($fp) +lw $t1 -80($fp) +slt $t1 $t0 $t1 +sw $t1 -76($fp) +lw $t0 -76($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -88($fp) +lw $t0 -88($fp) +lw $t1 12($t0) +sw $t1 -92($fp) +lw $t0 -92($fp) +bne $t0 $zero label_48 +j label_55 +label_48: +lw $t4 0($fp) +lw $t4 24($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -72($fp) +lw $t0 -72($fp) +bne $t0 $zero label_49 +j label_50 +label_49: +li $v0 4 +la $a0 data_18 +syscall +li $v0 10 +syscall +label_50: +lw $t4 0($fp) +lw $t4 24($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -120($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 24($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -68($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -64($fp) +lw $t0 -64($fp) +bne $t0 $zero label_51 +j label_52 +label_51: +li $v0 4 +la $a0 data_19 +syscall +li $v0 10 +syscall +label_52: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -68($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -60($fp) +la $t0 data_20 +sw $t0 -56($fp) +lw $t0 -56($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -52($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -48($fp) +lw $t0 -48($fp) +bne $t0 $zero label_53 +j label_54 +label_53: +li $v0 4 +la $a0 data_21 +syscall +li $v0 10 +syscall +label_54: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -52($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -44($fp) +lw $t0 -120($fp) +lw $t1 12($t0) +sw $t1 -36($fp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -32($fp) +lw $t0 -36($fp) +lw $t1 -32($fp) +add $t0 $t0 $t1 +sw $t0 -28($fp) +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -40($fp) +lw $t0 -40($fp) +sw $t0 -120($fp) +j label_47 +label_55: +la $t0 data_22 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_56 +j label_57 +label_56: +li $v0 4 +la $a0 data_23 +syscall +li $v0 10 +syscall +label_57: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $v0 0($fp) +addi $sp $sp 112 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_num_cells_at_CellularAutomaton: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t4 0($fp) +lw $t4 24($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_58 +j label_59 +label_58: +li $v0 4 +la $a0 data_24 +syscall +li $v0 10 +syscall +label_59: +lw $t4 0($fp) +lw $t4 24($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 24($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_cell_at_CellularAutomaton: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -64 +lw $t4 4($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -44($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -32($fp) +lw $t0 -32($fp) +lw $t1 12($t0) +sw $t1 -40($fp) +lw $t0 -44($fp) +lw $t1 -40($fp) +sub $t0 $t0 $t1 +sw $t0 -36($fp) +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -48($fp) +lw $t0 -48($fp) +lw $t1 12($t0) +sw $t1 -60($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -56($fp) +lw $t0 -60($fp) +lw $t1 -56($fp) +slt $t1 $t0 $t1 +sw $t1 -52($fp) +lw $t0 -52($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -64($fp) +lw $t0 -64($fp) +lw $t1 12($t0) +sw $t1 -68($fp) +lw $t0 -68($fp) +bne $t0 $zero label_62 +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t4 4($fp) +lw $t4 24($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_60 +j label_61 +label_60: +li $v0 4 +la $a0 data_25 +syscall +li $v0 10 +syscall +label_61: +lw $t4 4($fp) +lw $t4 24($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 4($fp) +lw $t4 24($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -20($fp) +lw $t0 -20($fp) +sw $t0 -72($fp) +j label_63 +label_62: +la $t0 data_26 +sw $t0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -72($fp) +label_63: +lw $v0 -72($fp) +addi $sp $sp 64 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_north_at_CellularAutomaton: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -76 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -56($fp) +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -52($fp) +lw $t0 -56($fp) +lw $t1 -52($fp) +sub $t0 $t0 $t1 +sw $t0 -48($fp) +lw $t0 -48($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -60($fp) +lw $t0 -60($fp) +lw $t1 12($t0) +sw $t1 -72($fp) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -44($fp) +lw $t0 -44($fp) +lw $t1 12($t0) +sw $t1 -68($fp) +lw $t0 -72($fp) +lw $t1 -68($fp) +slt $t1 $t0 $t1 +sw $t1 -64($fp) +lw $t0 -64($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -76($fp) +lw $t0 -76($fp) +lw $t1 12($t0) +sw $t1 -80($fp) +lw $t0 -80($fp) +bne $t0 $zero label_66 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -36($fp) +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -32($fp) +lw $t0 -36($fp) +lw $t1 -32($fp) +sub $t0 $t0 $t1 +sw $t0 -28($fp) +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -40($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_64 +j label_65 +label_64: +li $v0 4 +la $a0 data_27 +syscall +li $v0 10 +syscall +label_65: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -40($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 36($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -20($fp) +lw $t0 -20($fp) +sw $t0 -84($fp) +j label_67 +label_66: +la $t0 data_28 +sw $t0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -84($fp) +label_67: +lw $v0 -84($fp) +addi $sp $sp 76 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_south_at_CellularAutomaton: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -72 +lw $t4 4($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -68($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -52($fp) +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -48($fp) +lw $t0 -52($fp) +lw $t1 -48($fp) +add $t0 $t0 $t1 +sw $t0 -44($fp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -56($fp) +lw $t0 -56($fp) +lw $t1 12($t0) +sw $t1 -64($fp) +lw $t0 -68($fp) +lw $t1 -64($fp) +slt $t1 $t0 $t1 +sw $t1 -60($fp) +lw $t0 -60($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -72($fp) +lw $t0 -72($fp) +lw $t1 12($t0) +sw $t1 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_70 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -36($fp) +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -32($fp) +lw $t0 -36($fp) +lw $t1 -32($fp) +add $t0 $t0 $t1 +sw $t0 -28($fp) +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -40($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_68 +j label_69 +label_68: +li $v0 4 +la $a0 data_29 +syscall +li $v0 10 +syscall +label_69: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -40($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 36($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -20($fp) +lw $t0 -20($fp) +sw $t0 -80($fp) +j label_71 +label_70: +la $t0 data_30 +sw $t0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -80($fp) +label_71: +lw $v0 -80($fp) +addi $sp $sp 72 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_east_at_CellularAutomaton: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -156 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -80($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -68($fp) +lw $t0 -68($fp) +lw $t1 12($t0) +sw $t1 -76($fp) +lw $t0 -80($fp) +lw $t1 -76($fp) +add $t0 $t0 $t1 +sw $t0 -72($fp) +lw $t0 -72($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -84($fp) +lw $t0 -84($fp) +lw $t1 12($t0) +sw $t1 -100($fp) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -88($fp) +lw $t0 -88($fp) +lw $t1 12($t0) +sw $t1 -88($fp) +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -96($fp) +lw $t0 -88($fp) +lw $t1 -96($fp) +seq $t0 $t0 $t1 +sw $t0 -88($fp) +lw $t0 -88($fp) +bne $t0 $zero label_72 +j label_73 +label_72: +li $v0 4 +la $a0 data_31 +syscall +li $v0 10 +syscall +label_73: +lw $t0 -100($fp) +lw $t1 -96($fp) +div $t0 $t1 +mflo $t0 +sw $t0 -92($fp) +lw $t0 -92($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -104($fp) +lw $t0 -104($fp) +lw $t1 12($t0) +sw $t1 -116($fp) +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -112($fp) +lw $t0 -116($fp) +lw $t1 -112($fp) +mul $t0 $t0 $t1 +sw $t0 -108($fp) +lw $t0 -108($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -120($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -60($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -48($fp) +lw $t0 -48($fp) +lw $t1 12($t0) +sw $t1 -56($fp) +lw $t0 -60($fp) +lw $t1 -56($fp) +add $t0 $t0 $t1 +sw $t0 -52($fp) +lw $t0 -52($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -64($fp) +lw $t0 -120($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -148($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -140($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -132($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -136($fp) +lw $t0 -148($fp) +lw $t1 -140($fp) +seq $t0 $t0 $t1 +sw $t0 -128($fp) +lw $t0 -128($fp) +bne $t0 $zero label_74 +lw $t0 -148($fp) +lw $t1 -132($fp) +seq $t0 $t0 $t1 +sw $t0 -128($fp) +lw $t0 -128($fp) +bne $t0 $zero label_75 +lw $t0 -148($fp) +lw $t1 -136($fp) +seq $t0 $t0 $t1 +sw $t0 -128($fp) +lw $t0 -128($fp) +bne $t0 $zero label_76 +lw $t0 -120($fp) +lw $t1 -64($fp) +seq $t0 $t0 $t1 +sw $t0 -124($fp) +j label_77 +label_74: +lw $t0 -120($fp) +lw $t1 12($t0) +sw $t1 -152($fp) +lw $t0 -64($fp) +lw $t1 12($t0) +sw $t1 -144($fp) +lw $t0 -152($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -124($fp) +j label_77 +label_75: +lw $t0 -120($fp) +lw $t1 12($t0) +sw $t1 -152($fp) +lw $t0 -64($fp) +lw $t1 12($t0) +sw $t1 -144($fp) +lw $t0 -152($fp) +move $a0 $t0 +lw $t0 -144($fp) +move $a1 $t0 +jal equal_str +sw $v0 -124($fp) +j label_77 +label_76: +lw $t0 -120($fp) +lw $t1 12($t0) +sw $t1 -152($fp) +lw $t0 -64($fp) +lw $t1 12($t0) +sw $t1 -144($fp) +lw $t0 -152($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -124($fp) +j label_77 +label_77: +lw $t0 -124($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -156($fp) +lw $t0 -156($fp) +lw $t1 12($t0) +sw $t1 -160($fp) +lw $t0 -160($fp) +bne $t0 $zero label_80 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -40($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t0 -28($fp) +lw $t1 12($t0) +sw $t1 -36($fp) +lw $t0 -40($fp) +lw $t1 -36($fp) +add $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -44($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_78 +j label_79 +label_78: +li $v0 4 +la $a0 data_32 +syscall +li $v0 10 +syscall +label_79: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 36($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -20($fp) +lw $t0 -20($fp) +sw $t0 -164($fp) +j label_81 +label_80: +la $t0 data_33 +sw $t0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -164($fp) +label_81: +lw $v0 -164($fp) +addi $sp $sp 156 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_west_at_CellularAutomaton: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -172 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -136($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -164($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -156($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -148($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -152($fp) +lw $t0 -164($fp) +lw $t1 -156($fp) +seq $t0 $t0 $t1 +sw $t0 -144($fp) +lw $t0 -144($fp) +bne $t0 $zero label_82 +lw $t0 -164($fp) +lw $t1 -148($fp) +seq $t0 $t0 $t1 +sw $t0 -144($fp) +lw $t0 -144($fp) +bne $t0 $zero label_83 +lw $t0 -164($fp) +lw $t1 -152($fp) +seq $t0 $t0 $t1 +sw $t0 -144($fp) +lw $t0 -144($fp) +bne $t0 $zero label_84 +lw $t0 0($fp) +lw $t1 -136($fp) +seq $t0 $t0 $t1 +sw $t0 -140($fp) +j label_85 +label_82: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -168($fp) +lw $t0 -136($fp) +lw $t1 12($t0) +sw $t1 -160($fp) +lw $t0 -168($fp) +lw $t1 -160($fp) +seq $t0 $t0 $t1 +sw $t0 -140($fp) +j label_85 +label_83: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -168($fp) +lw $t0 -136($fp) +lw $t1 12($t0) +sw $t1 -160($fp) +lw $t0 -168($fp) +move $a0 $t0 +lw $t0 -160($fp) +move $a1 $t0 +jal equal_str +sw $v0 -140($fp) +j label_85 +label_84: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -168($fp) +lw $t0 -136($fp) +lw $t1 12($t0) +sw $t1 -160($fp) +lw $t0 -168($fp) +lw $t1 -160($fp) +seq $t0 $t0 $t1 +sw $t0 -140($fp) +j label_85 +label_85: +lw $t0 -140($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -172($fp) +lw $t0 -172($fp) +lw $t1 12($t0) +sw $t1 -176($fp) +lw $t0 -176($fp) +bne $t0 $zero label_96 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -68($fp) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -56($fp) +lw $t0 -56($fp) +lw $t1 12($t0) +sw $t1 -56($fp) +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -64($fp) +lw $t0 -56($fp) +lw $t1 -64($fp) +seq $t0 $t0 $t1 +sw $t0 -56($fp) +lw $t0 -56($fp) +bne $t0 $zero label_86 +j label_87 +label_86: +li $v0 4 +la $a0 data_34 +syscall +li $v0 10 +syscall +label_87: +lw $t0 -68($fp) +lw $t1 -64($fp) +div $t0 $t1 +mflo $t0 +sw $t0 -60($fp) +lw $t0 -60($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -72($fp) +lw $t0 -72($fp) +lw $t1 12($t0) +sw $t1 -84($fp) +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -80($fp) +lw $t0 -84($fp) +lw $t1 -80($fp) +mul $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -88($fp) +lw $t0 -88($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -116($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -108($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -100($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -104($fp) +lw $t0 -116($fp) +lw $t1 -108($fp) +seq $t0 $t0 $t1 +sw $t0 -96($fp) +lw $t0 -96($fp) +bne $t0 $zero label_88 +lw $t0 -116($fp) +lw $t1 -100($fp) +seq $t0 $t0 $t1 +sw $t0 -96($fp) +lw $t0 -96($fp) +bne $t0 $zero label_89 +lw $t0 -116($fp) +lw $t1 -104($fp) +seq $t0 $t0 $t1 +sw $t0 -96($fp) +lw $t0 -96($fp) +bne $t0 $zero label_90 +lw $t0 -88($fp) +lw $t1 0($fp) +seq $t0 $t0 $t1 +sw $t0 -92($fp) +j label_91 +label_88: +lw $t0 -88($fp) +lw $t1 12($t0) +sw $t1 -120($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -112($fp) +lw $t0 -120($fp) +lw $t1 -112($fp) +seq $t0 $t0 $t1 +sw $t0 -92($fp) +j label_91 +label_89: +lw $t0 -88($fp) +lw $t1 12($t0) +sw $t1 -120($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -112($fp) +lw $t0 -120($fp) +move $a0 $t0 +lw $t0 -112($fp) +move $a1 $t0 +jal equal_str +sw $v0 -92($fp) +j label_91 +label_90: +lw $t0 -88($fp) +lw $t1 12($t0) +sw $t1 -120($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -112($fp) +lw $t0 -120($fp) +lw $t1 -112($fp) +seq $t0 $t0 $t1 +sw $t0 -92($fp) +j label_91 +label_91: +lw $t0 -92($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -124($fp) +lw $t0 -124($fp) +lw $t1 12($t0) +sw $t1 -128($fp) +lw $t0 -128($fp) +bne $t0 $zero label_94 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -48($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 -36($fp) +lw $t1 12($t0) +sw $t1 -44($fp) +lw $t0 -48($fp) +lw $t1 -44($fp) +sub $t0 $t0 $t1 +sw $t0 -40($fp) +lw $t0 -40($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -52($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_92 +j label_93 +label_92: +li $v0 4 +la $a0 data_35 +syscall +li $v0 10 +syscall +label_93: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -52($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 36($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -28($fp) +lw $t0 -28($fp) +sw $t0 -132($fp) +j label_95 +label_94: +la $t0 data_36 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 -20($fp) +sw $t0 -132($fp) +label_95: +lw $t0 -132($fp) +sw $t0 -180($fp) +j label_97 +label_96: +la $t0 data_37 +sw $t0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -180($fp) +label_97: +lw $v0 -180($fp) +addi $sp $sp 172 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_northwest_at_CellularAutomaton: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -168 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -148($fp) +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -144($fp) +lw $t0 -148($fp) +lw $t1 -144($fp) +sub $t0 $t0 $t1 +sw $t0 -140($fp) +lw $t0 -140($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -152($fp) +lw $t0 -152($fp) +lw $t1 12($t0) +sw $t1 -164($fp) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -136($fp) +lw $t0 -136($fp) +lw $t1 12($t0) +sw $t1 -160($fp) +lw $t0 -164($fp) +lw $t1 -160($fp) +slt $t1 $t0 $t1 +sw $t1 -156($fp) +lw $t0 -156($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -168($fp) +lw $t0 -168($fp) +lw $t1 12($t0) +sw $t1 -172($fp) +lw $t0 -172($fp) +bne $t0 $zero label_108 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -68($fp) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -56($fp) +lw $t0 -56($fp) +lw $t1 12($t0) +sw $t1 -56($fp) +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -64($fp) +lw $t0 -56($fp) +lw $t1 -64($fp) +seq $t0 $t0 $t1 +sw $t0 -56($fp) +lw $t0 -56($fp) +bne $t0 $zero label_98 +j label_99 +label_98: +li $v0 4 +la $a0 data_38 +syscall +li $v0 10 +syscall +label_99: +lw $t0 -68($fp) +lw $t1 -64($fp) +div $t0 $t1 +mflo $t0 +sw $t0 -60($fp) +lw $t0 -60($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -72($fp) +lw $t0 -72($fp) +lw $t1 12($t0) +sw $t1 -84($fp) +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -80($fp) +lw $t0 -84($fp) +lw $t1 -80($fp) +mul $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -88($fp) +lw $t0 -88($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -116($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -108($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -100($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -104($fp) +lw $t0 -116($fp) +lw $t1 -108($fp) +seq $t0 $t0 $t1 +sw $t0 -96($fp) +lw $t0 -96($fp) +bne $t0 $zero label_100 +lw $t0 -116($fp) +lw $t1 -100($fp) +seq $t0 $t0 $t1 +sw $t0 -96($fp) +lw $t0 -96($fp) +bne $t0 $zero label_101 +lw $t0 -116($fp) +lw $t1 -104($fp) +seq $t0 $t0 $t1 +sw $t0 -96($fp) +lw $t0 -96($fp) +bne $t0 $zero label_102 +lw $t0 -88($fp) +lw $t1 0($fp) +seq $t0 $t0 $t1 +sw $t0 -92($fp) +j label_103 +label_100: +lw $t0 -88($fp) +lw $t1 12($t0) +sw $t1 -120($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -112($fp) +lw $t0 -120($fp) +lw $t1 -112($fp) +seq $t0 $t0 $t1 +sw $t0 -92($fp) +j label_103 +label_101: +lw $t0 -88($fp) +lw $t1 12($t0) +sw $t1 -120($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -112($fp) +lw $t0 -120($fp) +move $a0 $t0 +lw $t0 -112($fp) +move $a1 $t0 +jal equal_str +sw $v0 -92($fp) +j label_103 +label_102: +lw $t0 -88($fp) +lw $t1 12($t0) +sw $t1 -120($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -112($fp) +lw $t0 -120($fp) +lw $t1 -112($fp) +seq $t0 $t0 $t1 +sw $t0 -92($fp) +j label_103 +label_103: +lw $t0 -92($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -124($fp) +lw $t0 -124($fp) +lw $t1 12($t0) +sw $t1 -128($fp) +lw $t0 -128($fp) +bne $t0 $zero label_106 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -48($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 -36($fp) +lw $t1 12($t0) +sw $t1 -44($fp) +lw $t0 -48($fp) +lw $t1 -44($fp) +sub $t0 $t0 $t1 +sw $t0 -40($fp) +lw $t0 -40($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -52($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_104 +j label_105 +label_104: +li $v0 4 +la $a0 data_39 +syscall +li $v0 10 +syscall +label_105: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -52($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 60($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -28($fp) +lw $t0 -28($fp) +sw $t0 -132($fp) +j label_107 +label_106: +la $t0 data_40 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 -20($fp) +sw $t0 -132($fp) +label_107: +lw $t0 -132($fp) +sw $t0 -176($fp) +j label_109 +label_108: +la $t0 data_41 +sw $t0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -176($fp) +label_109: +lw $v0 -176($fp) +addi $sp $sp 168 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_northeast_at_CellularAutomaton: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -208 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -188($fp) +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -184($fp) +lw $t0 -188($fp) +lw $t1 -184($fp) +sub $t0 $t0 $t1 +sw $t0 -180($fp) +lw $t0 -180($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -192($fp) +lw $t0 -192($fp) +lw $t1 12($t0) +sw $t1 -204($fp) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -176($fp) +lw $t0 -176($fp) +lw $t1 12($t0) +sw $t1 -200($fp) +lw $t0 -204($fp) +lw $t1 -200($fp) +slt $t1 $t0 $t1 +sw $t1 -196($fp) +lw $t0 -196($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -208($fp) +lw $t0 -208($fp) +lw $t1 12($t0) +sw $t1 -212($fp) +lw $t0 -212($fp) +bne $t0 $zero label_120 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -88($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -76($fp) +lw $t0 -76($fp) +lw $t1 12($t0) +sw $t1 -84($fp) +lw $t0 -88($fp) +lw $t1 -84($fp) +add $t0 $t0 $t1 +sw $t0 -80($fp) +lw $t0 -80($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -92($fp) +lw $t0 -92($fp) +lw $t1 12($t0) +sw $t1 -108($fp) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -96($fp) +lw $t0 -96($fp) +lw $t1 12($t0) +sw $t1 -96($fp) +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -104($fp) +lw $t0 -96($fp) +lw $t1 -104($fp) +seq $t0 $t0 $t1 +sw $t0 -96($fp) +lw $t0 -96($fp) +bne $t0 $zero label_110 +j label_111 +label_110: +li $v0 4 +la $a0 data_42 +syscall +li $v0 10 +syscall +label_111: +lw $t0 -108($fp) +lw $t1 -104($fp) +div $t0 $t1 +mflo $t0 +sw $t0 -100($fp) +lw $t0 -100($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -112($fp) +lw $t0 -112($fp) +lw $t1 12($t0) +sw $t1 -124($fp) +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -120($fp) +lw $t0 -124($fp) +lw $t1 -120($fp) +mul $t0 $t0 $t1 +sw $t0 -116($fp) +lw $t0 -116($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -128($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -68($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -56($fp) +lw $t0 -56($fp) +lw $t1 12($t0) +sw $t1 -64($fp) +lw $t0 -68($fp) +lw $t1 -64($fp) +add $t0 $t0 $t1 +sw $t0 -60($fp) +lw $t0 -60($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -72($fp) +lw $t0 -128($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -156($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -148($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -140($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -144($fp) +lw $t0 -156($fp) +lw $t1 -148($fp) +seq $t0 $t0 $t1 +sw $t0 -136($fp) +lw $t0 -136($fp) +bne $t0 $zero label_112 +lw $t0 -156($fp) +lw $t1 -140($fp) +seq $t0 $t0 $t1 +sw $t0 -136($fp) +lw $t0 -136($fp) +bne $t0 $zero label_113 +lw $t0 -156($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -136($fp) +lw $t0 -136($fp) +bne $t0 $zero label_114 +lw $t0 -128($fp) +lw $t1 -72($fp) +seq $t0 $t0 $t1 +sw $t0 -132($fp) +j label_115 +label_112: +lw $t0 -128($fp) +lw $t1 12($t0) +sw $t1 -160($fp) +lw $t0 -72($fp) +lw $t1 12($t0) +sw $t1 -152($fp) +lw $t0 -160($fp) +lw $t1 -152($fp) +seq $t0 $t0 $t1 +sw $t0 -132($fp) +j label_115 +label_113: +lw $t0 -128($fp) +lw $t1 12($t0) +sw $t1 -160($fp) +lw $t0 -72($fp) +lw $t1 12($t0) +sw $t1 -152($fp) +lw $t0 -160($fp) +move $a0 $t0 +lw $t0 -152($fp) +move $a1 $t0 +jal equal_str +sw $v0 -132($fp) +j label_115 +label_114: +lw $t0 -128($fp) +lw $t1 12($t0) +sw $t1 -160($fp) +lw $t0 -72($fp) +lw $t1 12($t0) +sw $t1 -152($fp) +lw $t0 -160($fp) +lw $t1 -152($fp) +seq $t0 $t0 $t1 +sw $t0 -132($fp) +j label_115 +label_115: +lw $t0 -132($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -164($fp) +lw $t0 -164($fp) +lw $t1 12($t0) +sw $t1 -168($fp) +lw $t0 -168($fp) +bne $t0 $zero label_118 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -48($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 -36($fp) +lw $t1 12($t0) +sw $t1 -44($fp) +lw $t0 -48($fp) +lw $t1 -44($fp) +add $t0 $t0 $t1 +sw $t0 -40($fp) +lw $t0 -40($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -52($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_116 +j label_117 +label_116: +li $v0 4 +la $a0 data_43 +syscall +li $v0 10 +syscall +label_117: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -52($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 60($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -28($fp) +lw $t0 -28($fp) +sw $t0 -172($fp) +j label_119 +label_118: +la $t0 data_44 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 -20($fp) +sw $t0 -172($fp) +label_119: +lw $t0 -172($fp) +sw $t0 -216($fp) +j label_121 +label_120: +la $t0 data_45 +sw $t0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -216($fp) +label_121: +lw $v0 -216($fp) +addi $sp $sp 208 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_southeast_at_CellularAutomaton: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -204 +lw $t4 4($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -200($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -184($fp) +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -180($fp) +lw $t0 -184($fp) +lw $t1 -180($fp) +add $t0 $t0 $t1 +sw $t0 -176($fp) +lw $t0 -176($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -188($fp) +lw $t0 -188($fp) +lw $t1 12($t0) +sw $t1 -196($fp) +lw $t0 -200($fp) +lw $t1 -196($fp) +slt $t1 $t0 $t1 +sw $t1 -192($fp) +lw $t0 -192($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -204($fp) +lw $t0 -204($fp) +lw $t1 12($t0) +sw $t1 -208($fp) +lw $t0 -208($fp) +bne $t0 $zero label_132 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -88($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -76($fp) +lw $t0 -76($fp) +lw $t1 12($t0) +sw $t1 -84($fp) +lw $t0 -88($fp) +lw $t1 -84($fp) +add $t0 $t0 $t1 +sw $t0 -80($fp) +lw $t0 -80($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -92($fp) +lw $t0 -92($fp) +lw $t1 12($t0) +sw $t1 -108($fp) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -96($fp) +lw $t0 -96($fp) +lw $t1 12($t0) +sw $t1 -96($fp) +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -104($fp) +lw $t0 -96($fp) +lw $t1 -104($fp) +seq $t0 $t0 $t1 +sw $t0 -96($fp) +lw $t0 -96($fp) +bne $t0 $zero label_122 +j label_123 +label_122: +li $v0 4 +la $a0 data_46 +syscall +li $v0 10 +syscall +label_123: +lw $t0 -108($fp) +lw $t1 -104($fp) +div $t0 $t1 +mflo $t0 +sw $t0 -100($fp) +lw $t0 -100($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -112($fp) +lw $t0 -112($fp) +lw $t1 12($t0) +sw $t1 -124($fp) +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -120($fp) +lw $t0 -124($fp) +lw $t1 -120($fp) +mul $t0 $t0 $t1 +sw $t0 -116($fp) +lw $t0 -116($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -128($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -68($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -56($fp) +lw $t0 -56($fp) +lw $t1 12($t0) +sw $t1 -64($fp) +lw $t0 -68($fp) +lw $t1 -64($fp) +add $t0 $t0 $t1 +sw $t0 -60($fp) +lw $t0 -60($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -72($fp) +lw $t0 -128($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -156($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -148($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -140($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -144($fp) +lw $t0 -156($fp) +lw $t1 -148($fp) +seq $t0 $t0 $t1 +sw $t0 -136($fp) +lw $t0 -136($fp) +bne $t0 $zero label_124 +lw $t0 -156($fp) +lw $t1 -140($fp) +seq $t0 $t0 $t1 +sw $t0 -136($fp) +lw $t0 -136($fp) +bne $t0 $zero label_125 +lw $t0 -156($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -136($fp) +lw $t0 -136($fp) +bne $t0 $zero label_126 +lw $t0 -128($fp) +lw $t1 -72($fp) +seq $t0 $t0 $t1 +sw $t0 -132($fp) +j label_127 +label_124: +lw $t0 -128($fp) +lw $t1 12($t0) +sw $t1 -160($fp) +lw $t0 -72($fp) +lw $t1 12($t0) +sw $t1 -152($fp) +lw $t0 -160($fp) +lw $t1 -152($fp) +seq $t0 $t0 $t1 +sw $t0 -132($fp) +j label_127 +label_125: +lw $t0 -128($fp) +lw $t1 12($t0) +sw $t1 -160($fp) +lw $t0 -72($fp) +lw $t1 12($t0) +sw $t1 -152($fp) +lw $t0 -160($fp) +move $a0 $t0 +lw $t0 -152($fp) +move $a1 $t0 +jal equal_str +sw $v0 -132($fp) +j label_127 +label_126: +lw $t0 -128($fp) +lw $t1 12($t0) +sw $t1 -160($fp) +lw $t0 -72($fp) +lw $t1 12($t0) +sw $t1 -152($fp) +lw $t0 -160($fp) +lw $t1 -152($fp) +seq $t0 $t0 $t1 +sw $t0 -132($fp) +j label_127 +label_127: +lw $t0 -132($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -164($fp) +lw $t0 -164($fp) +lw $t1 12($t0) +sw $t1 -168($fp) +lw $t0 -168($fp) +bne $t0 $zero label_130 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -48($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 -36($fp) +lw $t1 12($t0) +sw $t1 -44($fp) +lw $t0 -48($fp) +lw $t1 -44($fp) +add $t0 $t0 $t1 +sw $t0 -40($fp) +lw $t0 -40($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -52($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_128 +j label_129 +label_128: +li $v0 4 +la $a0 data_47 +syscall +li $v0 10 +syscall +label_129: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -52($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 92($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -28($fp) +lw $t0 -28($fp) +sw $t0 -172($fp) +j label_131 +label_130: +la $t0 data_48 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 -20($fp) +sw $t0 -172($fp) +label_131: +lw $t0 -172($fp) +sw $t0 -212($fp) +j label_133 +label_132: +la $t0 data_49 +sw $t0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -212($fp) +label_133: +lw $v0 -212($fp) +addi $sp $sp 204 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_southwest_at_CellularAutomaton: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -164 +lw $t4 4($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -160($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -144($fp) +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -140($fp) +lw $t0 -144($fp) +lw $t1 -140($fp) +add $t0 $t0 $t1 +sw $t0 -136($fp) +lw $t0 -136($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -148($fp) +lw $t0 -148($fp) +lw $t1 12($t0) +sw $t1 -156($fp) +lw $t0 -160($fp) +lw $t1 -156($fp) +slt $t1 $t0 $t1 +sw $t1 -152($fp) +lw $t0 -152($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -164($fp) +lw $t0 -164($fp) +lw $t1 12($t0) +sw $t1 -168($fp) +lw $t0 -168($fp) +bne $t0 $zero label_144 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -68($fp) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -56($fp) +lw $t0 -56($fp) +lw $t1 12($t0) +sw $t1 -56($fp) +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -64($fp) +lw $t0 -56($fp) +lw $t1 -64($fp) +seq $t0 $t0 $t1 +sw $t0 -56($fp) +lw $t0 -56($fp) +bne $t0 $zero label_134 +j label_135 +label_134: +li $v0 4 +la $a0 data_50 +syscall +li $v0 10 +syscall +label_135: +lw $t0 -68($fp) +lw $t1 -64($fp) +div $t0 $t1 +mflo $t0 +sw $t0 -60($fp) +lw $t0 -60($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -72($fp) +lw $t0 -72($fp) +lw $t1 12($t0) +sw $t1 -84($fp) +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -80($fp) +lw $t0 -84($fp) +lw $t1 -80($fp) +mul $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -88($fp) +lw $t0 -88($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -116($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -108($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -100($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -104($fp) +lw $t0 -116($fp) +lw $t1 -108($fp) +seq $t0 $t0 $t1 +sw $t0 -96($fp) +lw $t0 -96($fp) +bne $t0 $zero label_136 +lw $t0 -116($fp) +lw $t1 -100($fp) +seq $t0 $t0 $t1 +sw $t0 -96($fp) +lw $t0 -96($fp) +bne $t0 $zero label_137 +lw $t0 -116($fp) +lw $t1 -104($fp) +seq $t0 $t0 $t1 +sw $t0 -96($fp) +lw $t0 -96($fp) +bne $t0 $zero label_138 +lw $t0 -88($fp) +lw $t1 0($fp) +seq $t0 $t0 $t1 +sw $t0 -92($fp) +j label_139 +label_136: +lw $t0 -88($fp) +lw $t1 12($t0) +sw $t1 -120($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -112($fp) +lw $t0 -120($fp) +lw $t1 -112($fp) +seq $t0 $t0 $t1 +sw $t0 -92($fp) +j label_139 +label_137: +lw $t0 -88($fp) +lw $t1 12($t0) +sw $t1 -120($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -112($fp) +lw $t0 -120($fp) +move $a0 $t0 +lw $t0 -112($fp) +move $a1 $t0 +jal equal_str +sw $v0 -92($fp) +j label_139 +label_138: +lw $t0 -88($fp) +lw $t1 12($t0) +sw $t1 -120($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -112($fp) +lw $t0 -120($fp) +lw $t1 -112($fp) +seq $t0 $t0 $t1 +sw $t0 -92($fp) +j label_139 +label_139: +lw $t0 -92($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -124($fp) +lw $t0 -124($fp) +lw $t1 12($t0) +sw $t1 -128($fp) +lw $t0 -128($fp) +bne $t0 $zero label_142 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -48($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 -36($fp) +lw $t1 12($t0) +sw $t1 -44($fp) +lw $t0 -48($fp) +lw $t1 -44($fp) +sub $t0 $t0 $t1 +sw $t0 -40($fp) +lw $t0 -40($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -52($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_140 +j label_141 +label_140: +li $v0 4 +la $a0 data_51 +syscall +li $v0 10 +syscall +label_141: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -52($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 92($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -28($fp) +lw $t0 -28($fp) +sw $t0 -132($fp) +j label_143 +label_142: +la $t0 data_52 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 -20($fp) +sw $t0 -132($fp) +label_143: +lw $t0 -132($fp) +sw $t0 -172($fp) +j label_145 +label_144: +la $t0 data_53 +sw $t0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -172($fp) +label_145: +lw $v0 -172($fp) +addi $sp $sp 164 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_neighbors_at_CellularAutomaton: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -656 +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -508($fp) +lw $t0 -508($fp) +bne $t0 $zero label_146 +j label_147 +label_146: +li $v0 4 +la $a0 data_54 +syscall +li $v0 10 +syscall +label_147: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 60($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -504($fp) +la $t0 data_55 +sw $t0 -500($fp) +lw $t0 -500($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -496($fp) +lw $t0 -504($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -536($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -528($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -520($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -524($fp) +lw $t0 -536($fp) +lw $t1 -528($fp) +seq $t0 $t0 $t1 +sw $t0 -516($fp) +lw $t0 -516($fp) +bne $t0 $zero label_148 +lw $t0 -536($fp) +lw $t1 -520($fp) +seq $t0 $t0 $t1 +sw $t0 -516($fp) +lw $t0 -516($fp) +bne $t0 $zero label_149 +lw $t0 -536($fp) +lw $t1 -524($fp) +seq $t0 $t0 $t1 +sw $t0 -516($fp) +lw $t0 -516($fp) +bne $t0 $zero label_150 +lw $t0 -504($fp) +lw $t1 -496($fp) +seq $t0 $t0 $t1 +sw $t0 -512($fp) +j label_151 +label_148: +lw $t0 -504($fp) +lw $t1 12($t0) +sw $t1 -540($fp) +lw $t0 -496($fp) +lw $t1 12($t0) +sw $t1 -532($fp) +lw $t0 -540($fp) +lw $t1 -532($fp) +seq $t0 $t0 $t1 +sw $t0 -512($fp) +j label_151 +label_149: +lw $t0 -504($fp) +lw $t1 12($t0) +sw $t1 -540($fp) +lw $t0 -496($fp) +lw $t1 12($t0) +sw $t1 -532($fp) +lw $t0 -540($fp) +move $a0 $t0 +lw $t0 -532($fp) +move $a1 $t0 +jal equal_str +sw $v0 -512($fp) +j label_151 +label_150: +lw $t0 -504($fp) +lw $t1 12($t0) +sw $t1 -540($fp) +lw $t0 -496($fp) +lw $t1 12($t0) +sw $t1 -532($fp) +lw $t0 -540($fp) +lw $t1 -532($fp) +seq $t0 $t0 $t1 +sw $t0 -512($fp) +j label_151 +label_151: +lw $t0 -512($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -544($fp) +lw $t0 -544($fp) +lw $t1 12($t0) +sw $t1 -548($fp) +lw $t0 -548($fp) +bne $t0 $zero label_152 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -492($fp) +lw $t0 -492($fp) +sw $t0 -552($fp) +j label_153 +label_152: +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -488($fp) +lw $t0 -488($fp) +sw $t0 -552($fp) +label_153: +lw $t0 -552($fp) +lw $t1 12($t0) +sw $t1 -564($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -440($fp) +lw $t0 -440($fp) +bne $t0 $zero label_154 +j label_155 +label_154: +li $v0 4 +la $a0 data_56 +syscall +li $v0 10 +syscall +label_155: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 92($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -436($fp) +la $t0 data_57 +sw $t0 -432($fp) +lw $t0 -432($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -428($fp) +lw $t0 -436($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -468($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -460($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -452($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -456($fp) +lw $t0 -468($fp) +lw $t1 -460($fp) +seq $t0 $t0 $t1 +sw $t0 -448($fp) +lw $t0 -448($fp) +bne $t0 $zero label_156 +lw $t0 -468($fp) +lw $t1 -452($fp) +seq $t0 $t0 $t1 +sw $t0 -448($fp) +lw $t0 -448($fp) +bne $t0 $zero label_157 +lw $t0 -468($fp) +lw $t1 -456($fp) +seq $t0 $t0 $t1 +sw $t0 -448($fp) +lw $t0 -448($fp) +bne $t0 $zero label_158 +lw $t0 -436($fp) +lw $t1 -428($fp) +seq $t0 $t0 $t1 +sw $t0 -444($fp) +j label_159 +label_156: +lw $t0 -436($fp) +lw $t1 12($t0) +sw $t1 -472($fp) +lw $t0 -428($fp) +lw $t1 12($t0) +sw $t1 -464($fp) +lw $t0 -472($fp) +lw $t1 -464($fp) +seq $t0 $t0 $t1 +sw $t0 -444($fp) +j label_159 +label_157: +lw $t0 -436($fp) +lw $t1 12($t0) +sw $t1 -472($fp) +lw $t0 -428($fp) +lw $t1 12($t0) +sw $t1 -464($fp) +lw $t0 -472($fp) +move $a0 $t0 +lw $t0 -464($fp) +move $a1 $t0 +jal equal_str +sw $v0 -444($fp) +j label_159 +label_158: +lw $t0 -436($fp) +lw $t1 12($t0) +sw $t1 -472($fp) +lw $t0 -428($fp) +lw $t1 12($t0) +sw $t1 -464($fp) +lw $t0 -472($fp) +lw $t1 -464($fp) +seq $t0 $t0 $t1 +sw $t0 -444($fp) +j label_159 +label_159: +lw $t0 -444($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -476($fp) +lw $t0 -476($fp) +lw $t1 12($t0) +sw $t1 -480($fp) +lw $t0 -480($fp) +bne $t0 $zero label_160 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -424($fp) +lw $t0 -424($fp) +sw $t0 -484($fp) +j label_161 +label_160: +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -420($fp) +lw $t0 -420($fp) +sw $t0 -484($fp) +label_161: +lw $t0 -484($fp) +lw $t1 12($t0) +sw $t1 -560($fp) +lw $t0 -564($fp) +lw $t1 -560($fp) +add $t0 $t0 $t1 +sw $t0 -556($fp) +lw $t0 -556($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -568($fp) +lw $t0 -568($fp) +lw $t1 12($t0) +sw $t1 -580($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -372($fp) +lw $t0 -372($fp) +bne $t0 $zero label_162 +j label_163 +label_162: +li $v0 4 +la $a0 data_58 +syscall +li $v0 10 +syscall +label_163: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 44($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -368($fp) +la $t0 data_59 +sw $t0 -364($fp) +lw $t0 -364($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -360($fp) +lw $t0 -368($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -400($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -392($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -384($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -388($fp) +lw $t0 -400($fp) +lw $t1 -392($fp) +seq $t0 $t0 $t1 +sw $t0 -380($fp) +lw $t0 -380($fp) +bne $t0 $zero label_164 +lw $t0 -400($fp) +lw $t1 -384($fp) +seq $t0 $t0 $t1 +sw $t0 -380($fp) +lw $t0 -380($fp) +bne $t0 $zero label_165 +lw $t0 -400($fp) +lw $t1 -388($fp) +seq $t0 $t0 $t1 +sw $t0 -380($fp) +lw $t0 -380($fp) +bne $t0 $zero label_166 +lw $t0 -368($fp) +lw $t1 -360($fp) +seq $t0 $t0 $t1 +sw $t0 -376($fp) +j label_167 +label_164: +lw $t0 -368($fp) +lw $t1 12($t0) +sw $t1 -404($fp) +lw $t0 -360($fp) +lw $t1 12($t0) +sw $t1 -396($fp) +lw $t0 -404($fp) +lw $t1 -396($fp) +seq $t0 $t0 $t1 +sw $t0 -376($fp) +j label_167 +label_165: +lw $t0 -368($fp) +lw $t1 12($t0) +sw $t1 -404($fp) +lw $t0 -360($fp) +lw $t1 12($t0) +sw $t1 -396($fp) +lw $t0 -404($fp) +move $a0 $t0 +lw $t0 -396($fp) +move $a1 $t0 +jal equal_str +sw $v0 -376($fp) +j label_167 +label_166: +lw $t0 -368($fp) +lw $t1 12($t0) +sw $t1 -404($fp) +lw $t0 -360($fp) +lw $t1 12($t0) +sw $t1 -396($fp) +lw $t0 -404($fp) +lw $t1 -396($fp) +seq $t0 $t0 $t1 +sw $t0 -376($fp) +j label_167 +label_167: +lw $t0 -376($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -408($fp) +lw $t0 -408($fp) +lw $t1 12($t0) +sw $t1 -412($fp) +lw $t0 -412($fp) +bne $t0 $zero label_168 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -356($fp) +lw $t0 -356($fp) +sw $t0 -416($fp) +j label_169 +label_168: +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -352($fp) +lw $t0 -352($fp) +sw $t0 -416($fp) +label_169: +lw $t0 -416($fp) +lw $t1 12($t0) +sw $t1 -576($fp) +lw $t0 -580($fp) +lw $t1 -576($fp) +add $t0 $t0 $t1 +sw $t0 -572($fp) +lw $t0 -572($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -584($fp) +lw $t0 -584($fp) +lw $t1 12($t0) +sw $t1 -596($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -304($fp) +lw $t0 -304($fp) +bne $t0 $zero label_170 +j label_171 +label_170: +li $v0 4 +la $a0 data_60 +syscall +li $v0 10 +syscall +label_171: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 104($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -300($fp) +la $t0 data_61 +sw $t0 -296($fp) +lw $t0 -296($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -292($fp) +lw $t0 -300($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -332($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -324($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -316($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -320($fp) +lw $t0 -332($fp) +lw $t1 -324($fp) +seq $t0 $t0 $t1 +sw $t0 -312($fp) +lw $t0 -312($fp) +bne $t0 $zero label_172 +lw $t0 -332($fp) +lw $t1 -316($fp) +seq $t0 $t0 $t1 +sw $t0 -312($fp) +lw $t0 -312($fp) +bne $t0 $zero label_173 +lw $t0 -332($fp) +lw $t1 -320($fp) +seq $t0 $t0 $t1 +sw $t0 -312($fp) +lw $t0 -312($fp) +bne $t0 $zero label_174 +lw $t0 -300($fp) +lw $t1 -292($fp) +seq $t0 $t0 $t1 +sw $t0 -308($fp) +j label_175 +label_172: +lw $t0 -300($fp) +lw $t1 12($t0) +sw $t1 -336($fp) +lw $t0 -292($fp) +lw $t1 12($t0) +sw $t1 -328($fp) +lw $t0 -336($fp) +lw $t1 -328($fp) +seq $t0 $t0 $t1 +sw $t0 -308($fp) +j label_175 +label_173: +lw $t0 -300($fp) +lw $t1 12($t0) +sw $t1 -336($fp) +lw $t0 -292($fp) +lw $t1 12($t0) +sw $t1 -328($fp) +lw $t0 -336($fp) +move $a0 $t0 +lw $t0 -328($fp) +move $a1 $t0 +jal equal_str +sw $v0 -308($fp) +j label_175 +label_174: +lw $t0 -300($fp) +lw $t1 12($t0) +sw $t1 -336($fp) +lw $t0 -292($fp) +lw $t1 12($t0) +sw $t1 -328($fp) +lw $t0 -336($fp) +lw $t1 -328($fp) +seq $t0 $t0 $t1 +sw $t0 -308($fp) +j label_175 +label_175: +lw $t0 -308($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -340($fp) +lw $t0 -340($fp) +lw $t1 12($t0) +sw $t1 -344($fp) +lw $t0 -344($fp) +bne $t0 $zero label_176 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -288($fp) +lw $t0 -288($fp) +sw $t0 -348($fp) +j label_177 +label_176: +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -284($fp) +lw $t0 -284($fp) +sw $t0 -348($fp) +label_177: +lw $t0 -348($fp) +lw $t1 12($t0) +sw $t1 -592($fp) +lw $t0 -596($fp) +lw $t1 -592($fp) +add $t0 $t0 $t1 +sw $t0 -588($fp) +lw $t0 -588($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -600($fp) +lw $t0 -600($fp) +lw $t1 12($t0) +sw $t1 -612($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -236($fp) +lw $t0 -236($fp) +bne $t0 $zero label_178 +j label_179 +label_178: +li $v0 4 +la $a0 data_62 +syscall +li $v0 10 +syscall +label_179: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 64($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -232($fp) +la $t0 data_63 +sw $t0 -228($fp) +lw $t0 -228($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -224($fp) +lw $t0 -232($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -264($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -256($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -248($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -252($fp) +lw $t0 -264($fp) +lw $t1 -256($fp) +seq $t0 $t0 $t1 +sw $t0 -244($fp) +lw $t0 -244($fp) +bne $t0 $zero label_180 +lw $t0 -264($fp) +lw $t1 -248($fp) +seq $t0 $t0 $t1 +sw $t0 -244($fp) +lw $t0 -244($fp) +bne $t0 $zero label_181 +lw $t0 -264($fp) +lw $t1 -252($fp) +seq $t0 $t0 $t1 +sw $t0 -244($fp) +lw $t0 -244($fp) +bne $t0 $zero label_182 +lw $t0 -232($fp) +lw $t1 -224($fp) +seq $t0 $t0 $t1 +sw $t0 -240($fp) +j label_183 +label_180: +lw $t0 -232($fp) +lw $t1 12($t0) +sw $t1 -268($fp) +lw $t0 -224($fp) +lw $t1 12($t0) +sw $t1 -260($fp) +lw $t0 -268($fp) +lw $t1 -260($fp) +seq $t0 $t0 $t1 +sw $t0 -240($fp) +j label_183 +label_181: +lw $t0 -232($fp) +lw $t1 12($t0) +sw $t1 -268($fp) +lw $t0 -224($fp) +lw $t1 12($t0) +sw $t1 -260($fp) +lw $t0 -268($fp) +move $a0 $t0 +lw $t0 -260($fp) +move $a1 $t0 +jal equal_str +sw $v0 -240($fp) +j label_183 +label_182: +lw $t0 -232($fp) +lw $t1 12($t0) +sw $t1 -268($fp) +lw $t0 -224($fp) +lw $t1 12($t0) +sw $t1 -260($fp) +lw $t0 -268($fp) +lw $t1 -260($fp) +seq $t0 $t0 $t1 +sw $t0 -240($fp) +j label_183 +label_183: +lw $t0 -240($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -272($fp) +lw $t0 -272($fp) +lw $t1 12($t0) +sw $t1 -276($fp) +lw $t0 -276($fp) +bne $t0 $zero label_184 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -220($fp) +lw $t0 -220($fp) +sw $t0 -280($fp) +j label_185 +label_184: +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -216($fp) +lw $t0 -216($fp) +sw $t0 -280($fp) +label_185: +lw $t0 -280($fp) +lw $t1 12($t0) +sw $t1 -608($fp) +lw $t0 -612($fp) +lw $t1 -608($fp) +add $t0 $t0 $t1 +sw $t0 -604($fp) +lw $t0 -604($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -616($fp) +lw $t0 -616($fp) +lw $t1 12($t0) +sw $t1 -628($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -168($fp) +lw $t0 -168($fp) +bne $t0 $zero label_186 +j label_187 +label_186: +li $v0 4 +la $a0 data_64 +syscall +li $v0 10 +syscall +label_187: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 68($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -164($fp) +la $t0 data_65 +sw $t0 -160($fp) +lw $t0 -160($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -156($fp) +lw $t0 -164($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -196($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -188($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -180($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -184($fp) +lw $t0 -196($fp) +lw $t1 -188($fp) +seq $t0 $t0 $t1 +sw $t0 -176($fp) +lw $t0 -176($fp) +bne $t0 $zero label_188 +lw $t0 -196($fp) +lw $t1 -180($fp) +seq $t0 $t0 $t1 +sw $t0 -176($fp) +lw $t0 -176($fp) +bne $t0 $zero label_189 +lw $t0 -196($fp) +lw $t1 -184($fp) +seq $t0 $t0 $t1 +sw $t0 -176($fp) +lw $t0 -176($fp) +bne $t0 $zero label_190 +lw $t0 -164($fp) +lw $t1 -156($fp) +seq $t0 $t0 $t1 +sw $t0 -172($fp) +j label_191 +label_188: +lw $t0 -164($fp) +lw $t1 12($t0) +sw $t1 -200($fp) +lw $t0 -156($fp) +lw $t1 12($t0) +sw $t1 -192($fp) +lw $t0 -200($fp) +lw $t1 -192($fp) +seq $t0 $t0 $t1 +sw $t0 -172($fp) +j label_191 +label_189: +lw $t0 -164($fp) +lw $t1 12($t0) +sw $t1 -200($fp) +lw $t0 -156($fp) +lw $t1 12($t0) +sw $t1 -192($fp) +lw $t0 -200($fp) +move $a0 $t0 +lw $t0 -192($fp) +move $a1 $t0 +jal equal_str +sw $v0 -172($fp) +j label_191 +label_190: +lw $t0 -164($fp) +lw $t1 12($t0) +sw $t1 -200($fp) +lw $t0 -156($fp) +lw $t1 12($t0) +sw $t1 -192($fp) +lw $t0 -200($fp) +lw $t1 -192($fp) +seq $t0 $t0 $t1 +sw $t0 -172($fp) +j label_191 +label_191: +lw $t0 -172($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -204($fp) +lw $t0 -204($fp) +lw $t1 12($t0) +sw $t1 -208($fp) +lw $t0 -208($fp) +bne $t0 $zero label_192 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -152($fp) +lw $t0 -152($fp) +sw $t0 -212($fp) +j label_193 +label_192: +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -148($fp) +lw $t0 -148($fp) +sw $t0 -212($fp) +label_193: +lw $t0 -212($fp) +lw $t1 12($t0) +sw $t1 -624($fp) +lw $t0 -628($fp) +lw $t1 -624($fp) +add $t0 $t0 $t1 +sw $t0 -620($fp) +lw $t0 -620($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -632($fp) +lw $t0 -632($fp) +lw $t1 12($t0) +sw $t1 -644($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -100($fp) +lw $t0 -100($fp) +bne $t0 $zero label_194 +j label_195 +label_194: +li $v0 4 +la $a0 data_66 +syscall +li $v0 10 +syscall +label_195: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 96($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -96($fp) +la $t0 data_67 +sw $t0 -92($fp) +lw $t0 -92($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -88($fp) +lw $t0 -96($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -128($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -120($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -112($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -116($fp) +lw $t0 -128($fp) +lw $t1 -120($fp) +seq $t0 $t0 $t1 +sw $t0 -108($fp) +lw $t0 -108($fp) +bne $t0 $zero label_196 +lw $t0 -128($fp) +lw $t1 -112($fp) +seq $t0 $t0 $t1 +sw $t0 -108($fp) +lw $t0 -108($fp) +bne $t0 $zero label_197 +lw $t0 -128($fp) +lw $t1 -116($fp) +seq $t0 $t0 $t1 +sw $t0 -108($fp) +lw $t0 -108($fp) +bne $t0 $zero label_198 +lw $t0 -96($fp) +lw $t1 -88($fp) +seq $t0 $t0 $t1 +sw $t0 -104($fp) +j label_199 +label_196: +lw $t0 -96($fp) +lw $t1 12($t0) +sw $t1 -132($fp) +lw $t0 -88($fp) +lw $t1 12($t0) +sw $t1 -124($fp) +lw $t0 -132($fp) +lw $t1 -124($fp) +seq $t0 $t0 $t1 +sw $t0 -104($fp) +j label_199 +label_197: +lw $t0 -96($fp) +lw $t1 12($t0) +sw $t1 -132($fp) +lw $t0 -88($fp) +lw $t1 12($t0) +sw $t1 -124($fp) +lw $t0 -132($fp) +move $a0 $t0 +lw $t0 -124($fp) +move $a1 $t0 +jal equal_str +sw $v0 -104($fp) +j label_199 +label_198: +lw $t0 -96($fp) +lw $t1 12($t0) +sw $t1 -132($fp) +lw $t0 -88($fp) +lw $t1 12($t0) +sw $t1 -124($fp) +lw $t0 -132($fp) +lw $t1 -124($fp) +seq $t0 $t0 $t1 +sw $t0 -104($fp) +j label_199 +label_199: +lw $t0 -104($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -136($fp) +lw $t0 -136($fp) +lw $t1 12($t0) +sw $t1 -140($fp) +lw $t0 -140($fp) +bne $t0 $zero label_200 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -84($fp) +lw $t0 -84($fp) +sw $t0 -144($fp) +j label_201 +label_200: +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -80($fp) +lw $t0 -80($fp) +sw $t0 -144($fp) +label_201: +lw $t0 -144($fp) +lw $t1 12($t0) +sw $t1 -640($fp) +lw $t0 -644($fp) +lw $t1 -640($fp) +add $t0 $t0 $t1 +sw $t0 -636($fp) +lw $t0 -636($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -648($fp) +lw $t0 -648($fp) +lw $t1 12($t0) +sw $t1 -660($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_202 +j label_203 +label_202: +li $v0 4 +la $a0 data_68 +syscall +li $v0 10 +syscall +label_203: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 100($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -28($fp) +la $t0 data_69 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 -28($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -60($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -52($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -44($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -48($fp) +lw $t0 -60($fp) +lw $t1 -52($fp) +seq $t0 $t0 $t1 +sw $t0 -40($fp) +lw $t0 -40($fp) +bne $t0 $zero label_204 +lw $t0 -60($fp) +lw $t1 -44($fp) +seq $t0 $t0 $t1 +sw $t0 -40($fp) +lw $t0 -40($fp) +bne $t0 $zero label_205 +lw $t0 -60($fp) +lw $t1 -48($fp) +seq $t0 $t0 $t1 +sw $t0 -40($fp) +lw $t0 -40($fp) +bne $t0 $zero label_206 +lw $t0 -28($fp) +lw $t1 -20($fp) +seq $t0 $t0 $t1 +sw $t0 -36($fp) +j label_207 +label_204: +lw $t0 -28($fp) +lw $t1 12($t0) +sw $t1 -64($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -56($fp) +lw $t0 -64($fp) +lw $t1 -56($fp) +seq $t0 $t0 $t1 +sw $t0 -36($fp) +j label_207 +label_205: +lw $t0 -28($fp) +lw $t1 12($t0) +sw $t1 -64($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -56($fp) +lw $t0 -64($fp) +move $a0 $t0 +lw $t0 -56($fp) +move $a1 $t0 +jal equal_str +sw $v0 -36($fp) +j label_207 +label_206: +lw $t0 -28($fp) +lw $t1 12($t0) +sw $t1 -64($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -56($fp) +lw $t0 -64($fp) +lw $t1 -56($fp) +seq $t0 $t0 $t1 +sw $t0 -36($fp) +j label_207 +label_207: +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -68($fp) +lw $t0 -68($fp) +lw $t1 12($t0) +sw $t1 -72($fp) +lw $t0 -72($fp) +bne $t0 $zero label_208 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -16($fp) +lw $t0 -16($fp) +sw $t0 -76($fp) +j label_209 +label_208: +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -76($fp) +label_209: +lw $t0 -76($fp) +lw $t1 12($t0) +sw $t1 -656($fp) +lw $t0 -660($fp) +lw $t1 -656($fp) +add $t0 $t0 $t1 +sw $t0 -652($fp) +lw $t0 -652($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -664($fp) +lw $v0 -664($fp) +addi $sp $sp 656 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_cell_at_next_evolution_at_CellularAutomaton: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -204 +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -168($fp) +lw $t0 -168($fp) +bne $t0 $zero label_210 +j label_211 +label_210: +li $v0 4 +la $a0 data_70 +syscall +li $v0 10 +syscall +label_211: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 56($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -164($fp) +li $t0 3 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -160($fp) +lw $t0 -164($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -196($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -188($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -180($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -184($fp) +lw $t0 -196($fp) +lw $t1 -188($fp) +seq $t0 $t0 $t1 +sw $t0 -176($fp) +lw $t0 -176($fp) +bne $t0 $zero label_212 +lw $t0 -196($fp) +lw $t1 -180($fp) +seq $t0 $t0 $t1 +sw $t0 -176($fp) +lw $t0 -176($fp) +bne $t0 $zero label_213 +lw $t0 -196($fp) +lw $t1 -184($fp) +seq $t0 $t0 $t1 +sw $t0 -176($fp) +lw $t0 -176($fp) +bne $t0 $zero label_214 +lw $t0 -164($fp) +lw $t1 -160($fp) +seq $t0 $t0 $t1 +sw $t0 -172($fp) +j label_215 +label_212: +lw $t0 -164($fp) +lw $t1 12($t0) +sw $t1 -200($fp) +lw $t0 -160($fp) +lw $t1 12($t0) +sw $t1 -192($fp) +lw $t0 -200($fp) +lw $t1 -192($fp) +seq $t0 $t0 $t1 +sw $t0 -172($fp) +j label_215 +label_213: +lw $t0 -164($fp) +lw $t1 12($t0) +sw $t1 -200($fp) +lw $t0 -160($fp) +lw $t1 12($t0) +sw $t1 -192($fp) +lw $t0 -200($fp) +move $a0 $t0 +lw $t0 -192($fp) +move $a1 $t0 +jal equal_str +sw $v0 -172($fp) +j label_215 +label_214: +lw $t0 -164($fp) +lw $t1 12($t0) +sw $t1 -200($fp) +lw $t0 -160($fp) +lw $t1 12($t0) +sw $t1 -192($fp) +lw $t0 -200($fp) +lw $t1 -192($fp) +seq $t0 $t0 $t1 +sw $t0 -172($fp) +j label_215 +label_215: +lw $t0 -172($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -204($fp) +lw $t0 -204($fp) +lw $t1 12($t0) +sw $t1 -208($fp) +lw $t0 -208($fp) +bne $t0 $zero label_232 +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -112($fp) +lw $t0 -112($fp) +bne $t0 $zero label_216 +j label_217 +label_216: +li $v0 4 +la $a0 data_71 +syscall +li $v0 10 +syscall +label_217: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 56($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -108($fp) +li $t0 2 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -104($fp) +lw $t0 -108($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -140($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -132($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -124($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -128($fp) +lw $t0 -140($fp) +lw $t1 -132($fp) +seq $t0 $t0 $t1 +sw $t0 -120($fp) +lw $t0 -120($fp) +bne $t0 $zero label_218 +lw $t0 -140($fp) +lw $t1 -124($fp) +seq $t0 $t0 $t1 +sw $t0 -120($fp) +lw $t0 -120($fp) +bne $t0 $zero label_219 +lw $t0 -140($fp) +lw $t1 -128($fp) +seq $t0 $t0 $t1 +sw $t0 -120($fp) +lw $t0 -120($fp) +bne $t0 $zero label_220 +lw $t0 -108($fp) +lw $t1 -104($fp) +seq $t0 $t0 $t1 +sw $t0 -116($fp) +j label_221 +label_218: +lw $t0 -108($fp) +lw $t1 12($t0) +sw $t1 -144($fp) +lw $t0 -104($fp) +lw $t1 12($t0) +sw $t1 -136($fp) +lw $t0 -144($fp) +lw $t1 -136($fp) +seq $t0 $t0 $t1 +sw $t0 -116($fp) +j label_221 +label_219: +lw $t0 -108($fp) +lw $t1 12($t0) +sw $t1 -144($fp) +lw $t0 -104($fp) +lw $t1 12($t0) +sw $t1 -136($fp) +lw $t0 -144($fp) +move $a0 $t0 +lw $t0 -136($fp) +move $a1 $t0 +jal equal_str +sw $v0 -116($fp) +j label_221 +label_220: +lw $t0 -108($fp) +lw $t1 12($t0) +sw $t1 -144($fp) +lw $t0 -104($fp) +lw $t1 12($t0) +sw $t1 -136($fp) +lw $t0 -144($fp) +lw $t1 -136($fp) +seq $t0 $t0 $t1 +sw $t0 -116($fp) +j label_221 +label_221: +lw $t0 -116($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -148($fp) +lw $t0 -148($fp) +lw $t1 12($t0) +sw $t1 -152($fp) +lw $t0 -152($fp) +bne $t0 $zero label_222 +la $t0 data_72 +sw $t0 -100($fp) +lw $t0 -100($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -96($fp) +lw $t0 -96($fp) +sw $t0 -156($fp) +j label_231 +label_222: +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -48($fp) +lw $t0 -48($fp) +bne $t0 $zero label_223 +j label_224 +label_223: +li $v0 4 +la $a0 data_73 +syscall +li $v0 10 +syscall +label_224: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 36($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -44($fp) +la $t0 data_74 +sw $t0 -40($fp) +lw $t0 -40($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 -44($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -76($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -68($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -60($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -64($fp) +lw $t0 -76($fp) +lw $t1 -68($fp) +seq $t0 $t0 $t1 +sw $t0 -56($fp) +lw $t0 -56($fp) +bne $t0 $zero label_225 +lw $t0 -76($fp) +lw $t1 -60($fp) +seq $t0 $t0 $t1 +sw $t0 -56($fp) +lw $t0 -56($fp) +bne $t0 $zero label_226 +lw $t0 -76($fp) +lw $t1 -64($fp) +seq $t0 $t0 $t1 +sw $t0 -56($fp) +lw $t0 -56($fp) +bne $t0 $zero label_227 +lw $t0 -44($fp) +lw $t1 -36($fp) +seq $t0 $t0 $t1 +sw $t0 -52($fp) +j label_228 +label_225: +lw $t0 -44($fp) +lw $t1 12($t0) +sw $t1 -80($fp) +lw $t0 -36($fp) +lw $t1 12($t0) +sw $t1 -72($fp) +lw $t0 -80($fp) +lw $t1 -72($fp) +seq $t0 $t0 $t1 +sw $t0 -52($fp) +j label_228 +label_226: +lw $t0 -44($fp) +lw $t1 12($t0) +sw $t1 -80($fp) +lw $t0 -36($fp) +lw $t1 12($t0) +sw $t1 -72($fp) +lw $t0 -80($fp) +move $a0 $t0 +lw $t0 -72($fp) +move $a1 $t0 +jal equal_str +sw $v0 -52($fp) +j label_228 +label_227: +lw $t0 -44($fp) +lw $t1 12($t0) +sw $t1 -80($fp) +lw $t0 -36($fp) +lw $t1 12($t0) +sw $t1 -72($fp) +lw $t0 -80($fp) +lw $t1 -72($fp) +seq $t0 $t0 $t1 +sw $t0 -52($fp) +j label_228 +label_228: +lw $t0 -52($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -84($fp) +lw $t0 -84($fp) +lw $t1 12($t0) +sw $t1 -88($fp) +lw $t0 -88($fp) +bne $t0 $zero label_229 +la $t0 data_75 +sw $t0 -32($fp) +lw $t0 -32($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t0 -28($fp) +sw $t0 -92($fp) +j label_230 +label_229: +la $t0 data_76 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 -20($fp) +sw $t0 -92($fp) +label_230: +lw $t0 -92($fp) +sw $t0 -156($fp) +label_231: +lw $t0 -156($fp) +sw $t0 -212($fp) +j label_233 +label_232: +la $t0 data_77 +sw $t0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -212($fp) +label_233: +lw $v0 -212($fp) +addi $sp $sp 204 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_evolve_at_CellularAutomaton: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -80 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -84($fp) +lw $t0 -84($fp) +sw $t0 -88($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_234 +j label_235 +label_234: +li $v0 4 +la $a0 data_78 +syscall +li $v0 10 +syscall +label_235: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 72($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -72($fp) +lw $t0 -72($fp) +sw $t0 -80($fp) +la $t0 data_10 +sw $t0 -68($fp) +lw $t0 -68($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -68($fp) +label_236: +lw $t0 -88($fp) +lw $t1 12($t0) +sw $t1 -56($fp) +lw $t0 -80($fp) +lw $t1 12($t0) +sw $t1 -52($fp) +lw $t0 -56($fp) +lw $t1 -52($fp) +slt $t1 $t0 $t1 +sw $t1 -48($fp) +lw $t0 -48($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -60($fp) +lw $t0 -60($fp) +lw $t1 12($t0) +sw $t1 -64($fp) +lw $t0 -64($fp) +bne $t0 $zero label_237 +j label_242 +label_237: +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -44($fp) +lw $t0 -44($fp) +bne $t0 $zero label_238 +j label_239 +label_238: +li $v0 4 +la $a0 data_79 +syscall +li $v0 10 +syscall +label_239: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -88($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 40($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -40($fp) +lw $t0 -68($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -36($fp) +lw $t0 -36($fp) +bne $t0 $zero label_240 +j label_241 +label_240: +li $v0 4 +la $a0 data_80 +syscall +li $v0 10 +syscall +label_241: +lw $t0 -68($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -40($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -68($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 16($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -32($fp) +lw $t0 -32($fp) +sw $t0 -68($fp) +lw $t0 -88($fp) +lw $t1 12($t0) +sw $t1 -24($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 12($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 -20($fp) +add $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t0 -28($fp) +sw $t0 -88($fp) +j label_236 +label_242: +lw $t0 -68($fp) +lw $t1 0($fp) +addi $t1 $t1 24 +sw $t0 0($t1) +lw $v0 0($fp) +addi $sp $sp 80 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_option_at_CellularAutomaton: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -1580 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -1588($fp) +la $t0 data_81 +sw $t0 -1584($fp) +lw $t0 -1584($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -1580($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -1576($fp) +lw $t0 -1576($fp) +bne $t0 $zero label_243 +j label_244 +label_243: +li $v0 4 +la $a0 data_82 +syscall +li $v0 10 +syscall +label_244: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -1580($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -1572($fp) +la $t0 data_83 +sw $t0 -1568($fp) +lw $t0 -1568($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -1564($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -1560($fp) +lw $t0 -1560($fp) +bne $t0 $zero label_245 +j label_246 +label_245: +li $v0 4 +la $a0 data_84 +syscall +li $v0 10 +syscall +label_246: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -1564($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -1556($fp) +la $t0 data_85 +sw $t0 -1552($fp) +lw $t0 -1552($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -1548($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -1544($fp) +lw $t0 -1544($fp) +bne $t0 $zero label_247 +j label_248 +label_247: +li $v0 4 +la $a0 data_86 +syscall +li $v0 10 +syscall +label_248: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -1548($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -1540($fp) +la $t0 data_87 +sw $t0 -1536($fp) +lw $t0 -1536($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -1532($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -1528($fp) +lw $t0 -1528($fp) +bne $t0 $zero label_249 +j label_250 +label_249: +li $v0 4 +la $a0 data_88 +syscall +li $v0 10 +syscall +label_250: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -1532($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -1524($fp) +la $t0 data_89 +sw $t0 -1520($fp) +lw $t0 -1520($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -1516($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -1512($fp) +lw $t0 -1512($fp) +bne $t0 $zero label_251 +j label_252 +label_251: +li $v0 4 +la $a0 data_90 +syscall +li $v0 10 +syscall +label_252: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -1516($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -1508($fp) +la $t0 data_91 +sw $t0 -1504($fp) +lw $t0 -1504($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -1500($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -1496($fp) +lw $t0 -1496($fp) +bne $t0 $zero label_253 +j label_254 +label_253: +li $v0 4 +la $a0 data_92 +syscall +li $v0 10 +syscall +label_254: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -1500($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -1492($fp) +la $t0 data_93 +sw $t0 -1488($fp) +lw $t0 -1488($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -1484($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -1480($fp) +lw $t0 -1480($fp) +bne $t0 $zero label_255 +j label_256 +label_255: +li $v0 4 +la $a0 data_94 +syscall +li $v0 10 +syscall +label_256: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -1484($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -1476($fp) +la $t0 data_95 +sw $t0 -1472($fp) +lw $t0 -1472($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -1468($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -1464($fp) +lw $t0 -1464($fp) +bne $t0 $zero label_257 +j label_258 +label_257: +li $v0 4 +la $a0 data_96 +syscall +li $v0 10 +syscall +label_258: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -1468($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -1460($fp) +la $t0 data_97 +sw $t0 -1456($fp) +lw $t0 -1456($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -1452($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -1448($fp) +lw $t0 -1448($fp) +bne $t0 $zero label_259 +j label_260 +label_259: +li $v0 4 +la $a0 data_98 +syscall +li $v0 10 +syscall +label_260: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -1452($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -1444($fp) +la $t0 data_99 +sw $t0 -1440($fp) +lw $t0 -1440($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -1436($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -1432($fp) +lw $t0 -1432($fp) +bne $t0 $zero label_261 +j label_262 +label_261: +li $v0 4 +la $a0 data_100 +syscall +li $v0 10 +syscall +label_262: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -1436($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -1428($fp) +la $t0 data_101 +sw $t0 -1424($fp) +lw $t0 -1424($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -1420($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -1416($fp) +lw $t0 -1416($fp) +bne $t0 $zero label_263 +j label_264 +label_263: +li $v0 4 +la $a0 data_102 +syscall +li $v0 10 +syscall +label_264: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -1420($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -1412($fp) +la $t0 data_103 +sw $t0 -1408($fp) +lw $t0 -1408($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -1404($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -1400($fp) +lw $t0 -1400($fp) +bne $t0 $zero label_265 +j label_266 +label_265: +li $v0 4 +la $a0 data_104 +syscall +li $v0 10 +syscall +label_266: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -1404($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -1396($fp) +la $t0 data_105 +sw $t0 -1392($fp) +lw $t0 -1392($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -1388($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -1384($fp) +lw $t0 -1384($fp) +bne $t0 $zero label_267 +j label_268 +label_267: +li $v0 4 +la $a0 data_106 +syscall +li $v0 10 +syscall +label_268: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -1388($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -1380($fp) +la $t0 data_107 +sw $t0 -1376($fp) +lw $t0 -1376($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -1372($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -1368($fp) +lw $t0 -1368($fp) +bne $t0 $zero label_269 +j label_270 +label_269: +li $v0 4 +la $a0 data_108 +syscall +li $v0 10 +syscall +label_270: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -1372($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -1364($fp) +la $t0 data_109 +sw $t0 -1360($fp) +lw $t0 -1360($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -1356($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -1352($fp) +lw $t0 -1352($fp) +bne $t0 $zero label_271 +j label_272 +label_271: +li $v0 4 +la $a0 data_110 +syscall +li $v0 10 +syscall +label_272: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -1356($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -1348($fp) +la $t0 data_111 +sw $t0 -1344($fp) +lw $t0 -1344($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -1340($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -1336($fp) +lw $t0 -1336($fp) +bne $t0 $zero label_273 +j label_274 +label_273: +li $v0 4 +la $a0 data_112 +syscall +li $v0 10 +syscall +label_274: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -1340($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -1332($fp) +la $t0 data_113 +sw $t0 -1328($fp) +lw $t0 -1328($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -1324($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -1320($fp) +lw $t0 -1320($fp) +bne $t0 $zero label_275 +j label_276 +label_275: +li $v0 4 +la $a0 data_114 +syscall +li $v0 10 +syscall +label_276: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -1324($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -1316($fp) +la $t0 data_115 +sw $t0 -1312($fp) +lw $t0 -1312($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -1308($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -1304($fp) +lw $t0 -1304($fp) +bne $t0 $zero label_277 +j label_278 +label_277: +li $v0 4 +la $a0 data_116 +syscall +li $v0 10 +syscall +label_278: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -1308($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -1300($fp) +la $t0 data_117 +sw $t0 -1296($fp) +lw $t0 -1296($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -1292($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -1288($fp) +lw $t0 -1288($fp) +bne $t0 $zero label_279 +j label_280 +label_279: +li $v0 4 +la $a0 data_118 +syscall +li $v0 10 +syscall +label_280: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -1292($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -1284($fp) +la $t0 data_119 +sw $t0 -1280($fp) +lw $t0 -1280($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -1276($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -1272($fp) +lw $t0 -1272($fp) +bne $t0 $zero label_281 +j label_282 +label_281: +li $v0 4 +la $a0 data_120 +syscall +li $v0 10 +syscall +label_282: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -1276($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -1268($fp) +la $t0 data_121 +sw $t0 -1264($fp) +lw $t0 -1264($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -1260($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -1256($fp) +lw $t0 -1256($fp) +bne $t0 $zero label_283 +j label_284 +label_283: +li $v0 4 +la $a0 data_122 +syscall +li $v0 10 +syscall +label_284: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -1260($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -1252($fp) +la $t0 data_123 +sw $t0 -1248($fp) +lw $t0 -1248($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -1244($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -1240($fp) +lw $t0 -1240($fp) +bne $t0 $zero label_285 +j label_286 +label_285: +li $v0 4 +la $a0 data_124 +syscall +li $v0 10 +syscall +label_286: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -1244($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -1236($fp) +la $t0 data_125 +sw $t0 -1232($fp) +lw $t0 -1232($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -1228($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -1224($fp) +lw $t0 -1224($fp) +bne $t0 $zero label_287 +j label_288 +label_287: +li $v0 4 +la $a0 data_126 +syscall +li $v0 10 +syscall +label_288: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -1228($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -1220($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -1216($fp) +lw $t0 -1216($fp) +bne $t0 $zero label_289 +j label_290 +label_289: +li $v0 4 +la $a0 data_127 +syscall +li $v0 10 +syscall +label_290: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -1212($fp) +lw $t0 -1212($fp) +sw $t0 -1588($fp) +la $t0 data_128 +sw $t0 -1208($fp) +lw $t0 -1208($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -1204($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -1200($fp) +lw $t0 -1200($fp) +bne $t0 $zero label_291 +j label_292 +label_291: +li $v0 4 +la $a0 data_129 +syscall +li $v0 10 +syscall +label_292: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -1204($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -1196($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -1148($fp) +lw $t0 -1588($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -1176($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -1168($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -1160($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -1164($fp) +lw $t0 -1176($fp) +lw $t1 -1168($fp) +seq $t0 $t0 $t1 +sw $t0 -1156($fp) +lw $t0 -1156($fp) +bne $t0 $zero label_293 +lw $t0 -1176($fp) +lw $t1 -1160($fp) +seq $t0 $t0 $t1 +sw $t0 -1156($fp) +lw $t0 -1156($fp) +bne $t0 $zero label_294 +lw $t0 -1176($fp) +lw $t1 -1164($fp) +seq $t0 $t0 $t1 +sw $t0 -1156($fp) +lw $t0 -1156($fp) +bne $t0 $zero label_295 +lw $t0 -1588($fp) +lw $t1 -1148($fp) +seq $t0 $t0 $t1 +sw $t0 -1152($fp) +j label_296 +label_293: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -1180($fp) +lw $t0 -1148($fp) +lw $t1 12($t0) +sw $t1 -1172($fp) +lw $t0 -1180($fp) +lw $t1 -1172($fp) +seq $t0 $t0 $t1 +sw $t0 -1152($fp) +j label_296 +label_294: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -1180($fp) +lw $t0 -1148($fp) +lw $t1 12($t0) +sw $t1 -1172($fp) +lw $t0 -1180($fp) +move $a0 $t0 +lw $t0 -1172($fp) +move $a1 $t0 +jal equal_str +sw $v0 -1152($fp) +j label_296 +label_295: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -1180($fp) +lw $t0 -1148($fp) +lw $t1 12($t0) +sw $t1 -1172($fp) +lw $t0 -1180($fp) +lw $t1 -1172($fp) +seq $t0 $t0 $t1 +sw $t0 -1152($fp) +j label_296 +label_296: +lw $t0 -1152($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -1184($fp) +lw $t0 -1184($fp) +lw $t1 12($t0) +sw $t1 -1188($fp) +lw $t0 -1188($fp) +bne $t0 $zero label_417 +li $t0 2 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -1100($fp) +lw $t0 -1588($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -1128($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -1120($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -1112($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -1116($fp) +lw $t0 -1128($fp) +lw $t1 -1120($fp) +seq $t0 $t0 $t1 +sw $t0 -1108($fp) +lw $t0 -1108($fp) +bne $t0 $zero label_297 +lw $t0 -1128($fp) +lw $t1 -1112($fp) +seq $t0 $t0 $t1 +sw $t0 -1108($fp) +lw $t0 -1108($fp) +bne $t0 $zero label_298 +lw $t0 -1128($fp) +lw $t1 -1116($fp) +seq $t0 $t0 $t1 +sw $t0 -1108($fp) +lw $t0 -1108($fp) +bne $t0 $zero label_299 +lw $t0 -1588($fp) +lw $t1 -1100($fp) +seq $t0 $t0 $t1 +sw $t0 -1104($fp) +j label_300 +label_297: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -1132($fp) +lw $t0 -1100($fp) +lw $t1 12($t0) +sw $t1 -1124($fp) +lw $t0 -1132($fp) +lw $t1 -1124($fp) +seq $t0 $t0 $t1 +sw $t0 -1104($fp) +j label_300 +label_298: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -1132($fp) +lw $t0 -1100($fp) +lw $t1 12($t0) +sw $t1 -1124($fp) +lw $t0 -1132($fp) +move $a0 $t0 +lw $t0 -1124($fp) +move $a1 $t0 +jal equal_str +sw $v0 -1104($fp) +j label_300 +label_299: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -1132($fp) +lw $t0 -1100($fp) +lw $t1 12($t0) +sw $t1 -1124($fp) +lw $t0 -1132($fp) +lw $t1 -1124($fp) +seq $t0 $t0 $t1 +sw $t0 -1104($fp) +j label_300 +label_300: +lw $t0 -1104($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -1136($fp) +lw $t0 -1136($fp) +lw $t1 12($t0) +sw $t1 -1140($fp) +lw $t0 -1140($fp) +bne $t0 $zero label_415 +li $t0 3 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -1052($fp) +lw $t0 -1588($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -1080($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -1072($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -1064($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -1068($fp) +lw $t0 -1080($fp) +lw $t1 -1072($fp) +seq $t0 $t0 $t1 +sw $t0 -1060($fp) +lw $t0 -1060($fp) +bne $t0 $zero label_301 +lw $t0 -1080($fp) +lw $t1 -1064($fp) +seq $t0 $t0 $t1 +sw $t0 -1060($fp) +lw $t0 -1060($fp) +bne $t0 $zero label_302 +lw $t0 -1080($fp) +lw $t1 -1068($fp) +seq $t0 $t0 $t1 +sw $t0 -1060($fp) +lw $t0 -1060($fp) +bne $t0 $zero label_303 +lw $t0 -1588($fp) +lw $t1 -1052($fp) +seq $t0 $t0 $t1 +sw $t0 -1056($fp) +j label_304 +label_301: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -1084($fp) +lw $t0 -1052($fp) +lw $t1 12($t0) +sw $t1 -1076($fp) +lw $t0 -1084($fp) +lw $t1 -1076($fp) +seq $t0 $t0 $t1 +sw $t0 -1056($fp) +j label_304 +label_302: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -1084($fp) +lw $t0 -1052($fp) +lw $t1 12($t0) +sw $t1 -1076($fp) +lw $t0 -1084($fp) +move $a0 $t0 +lw $t0 -1076($fp) +move $a1 $t0 +jal equal_str +sw $v0 -1056($fp) +j label_304 +label_303: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -1084($fp) +lw $t0 -1052($fp) +lw $t1 12($t0) +sw $t1 -1076($fp) +lw $t0 -1084($fp) +lw $t1 -1076($fp) +seq $t0 $t0 $t1 +sw $t0 -1056($fp) +j label_304 +label_304: +lw $t0 -1056($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -1088($fp) +lw $t0 -1088($fp) +lw $t1 12($t0) +sw $t1 -1092($fp) +lw $t0 -1092($fp) +bne $t0 $zero label_413 +li $t0 4 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -1004($fp) +lw $t0 -1588($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -1032($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -1024($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -1016($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -1020($fp) +lw $t0 -1032($fp) +lw $t1 -1024($fp) +seq $t0 $t0 $t1 +sw $t0 -1012($fp) +lw $t0 -1012($fp) +bne $t0 $zero label_305 +lw $t0 -1032($fp) +lw $t1 -1016($fp) +seq $t0 $t0 $t1 +sw $t0 -1012($fp) +lw $t0 -1012($fp) +bne $t0 $zero label_306 +lw $t0 -1032($fp) +lw $t1 -1020($fp) +seq $t0 $t0 $t1 +sw $t0 -1012($fp) +lw $t0 -1012($fp) +bne $t0 $zero label_307 +lw $t0 -1588($fp) +lw $t1 -1004($fp) +seq $t0 $t0 $t1 +sw $t0 -1008($fp) +j label_308 +label_305: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -1036($fp) +lw $t0 -1004($fp) +lw $t1 12($t0) +sw $t1 -1028($fp) +lw $t0 -1036($fp) +lw $t1 -1028($fp) +seq $t0 $t0 $t1 +sw $t0 -1008($fp) +j label_308 +label_306: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -1036($fp) +lw $t0 -1004($fp) +lw $t1 12($t0) +sw $t1 -1028($fp) +lw $t0 -1036($fp) +move $a0 $t0 +lw $t0 -1028($fp) +move $a1 $t0 +jal equal_str +sw $v0 -1008($fp) +j label_308 +label_307: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -1036($fp) +lw $t0 -1004($fp) +lw $t1 12($t0) +sw $t1 -1028($fp) +lw $t0 -1036($fp) +lw $t1 -1028($fp) +seq $t0 $t0 $t1 +sw $t0 -1008($fp) +j label_308 +label_308: +lw $t0 -1008($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -1040($fp) +lw $t0 -1040($fp) +lw $t1 12($t0) +sw $t1 -1044($fp) +lw $t0 -1044($fp) +bne $t0 $zero label_411 +li $t0 5 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -956($fp) +lw $t0 -1588($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -984($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -976($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -968($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -972($fp) +lw $t0 -984($fp) +lw $t1 -976($fp) +seq $t0 $t0 $t1 +sw $t0 -964($fp) +lw $t0 -964($fp) +bne $t0 $zero label_309 +lw $t0 -984($fp) +lw $t1 -968($fp) +seq $t0 $t0 $t1 +sw $t0 -964($fp) +lw $t0 -964($fp) +bne $t0 $zero label_310 +lw $t0 -984($fp) +lw $t1 -972($fp) +seq $t0 $t0 $t1 +sw $t0 -964($fp) +lw $t0 -964($fp) +bne $t0 $zero label_311 +lw $t0 -1588($fp) +lw $t1 -956($fp) +seq $t0 $t0 $t1 +sw $t0 -960($fp) +j label_312 +label_309: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -988($fp) +lw $t0 -956($fp) +lw $t1 12($t0) +sw $t1 -980($fp) +lw $t0 -988($fp) +lw $t1 -980($fp) +seq $t0 $t0 $t1 +sw $t0 -960($fp) +j label_312 +label_310: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -988($fp) +lw $t0 -956($fp) +lw $t1 12($t0) +sw $t1 -980($fp) +lw $t0 -988($fp) +move $a0 $t0 +lw $t0 -980($fp) +move $a1 $t0 +jal equal_str +sw $v0 -960($fp) +j label_312 +label_311: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -988($fp) +lw $t0 -956($fp) +lw $t1 12($t0) +sw $t1 -980($fp) +lw $t0 -988($fp) +lw $t1 -980($fp) +seq $t0 $t0 $t1 +sw $t0 -960($fp) +j label_312 +label_312: +lw $t0 -960($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -992($fp) +lw $t0 -992($fp) +lw $t1 12($t0) +sw $t1 -996($fp) +lw $t0 -996($fp) +bne $t0 $zero label_409 +li $t0 6 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -908($fp) +lw $t0 -1588($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -936($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -928($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -920($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -924($fp) +lw $t0 -936($fp) +lw $t1 -928($fp) +seq $t0 $t0 $t1 +sw $t0 -916($fp) +lw $t0 -916($fp) +bne $t0 $zero label_313 +lw $t0 -936($fp) +lw $t1 -920($fp) +seq $t0 $t0 $t1 +sw $t0 -916($fp) +lw $t0 -916($fp) +bne $t0 $zero label_314 +lw $t0 -936($fp) +lw $t1 -924($fp) +seq $t0 $t0 $t1 +sw $t0 -916($fp) +lw $t0 -916($fp) +bne $t0 $zero label_315 +lw $t0 -1588($fp) +lw $t1 -908($fp) +seq $t0 $t0 $t1 +sw $t0 -912($fp) +j label_316 +label_313: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -940($fp) +lw $t0 -908($fp) +lw $t1 12($t0) +sw $t1 -932($fp) +lw $t0 -940($fp) +lw $t1 -932($fp) +seq $t0 $t0 $t1 +sw $t0 -912($fp) +j label_316 +label_314: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -940($fp) +lw $t0 -908($fp) +lw $t1 12($t0) +sw $t1 -932($fp) +lw $t0 -940($fp) +move $a0 $t0 +lw $t0 -932($fp) +move $a1 $t0 +jal equal_str +sw $v0 -912($fp) +j label_316 +label_315: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -940($fp) +lw $t0 -908($fp) +lw $t1 12($t0) +sw $t1 -932($fp) +lw $t0 -940($fp) +lw $t1 -932($fp) +seq $t0 $t0 $t1 +sw $t0 -912($fp) +j label_316 +label_316: +lw $t0 -912($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -944($fp) +lw $t0 -944($fp) +lw $t1 12($t0) +sw $t1 -948($fp) +lw $t0 -948($fp) +bne $t0 $zero label_407 +li $t0 7 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -860($fp) +lw $t0 -1588($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -888($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -880($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -872($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -876($fp) +lw $t0 -888($fp) +lw $t1 -880($fp) +seq $t0 $t0 $t1 +sw $t0 -868($fp) +lw $t0 -868($fp) +bne $t0 $zero label_317 +lw $t0 -888($fp) +lw $t1 -872($fp) +seq $t0 $t0 $t1 +sw $t0 -868($fp) +lw $t0 -868($fp) +bne $t0 $zero label_318 +lw $t0 -888($fp) +lw $t1 -876($fp) +seq $t0 $t0 $t1 +sw $t0 -868($fp) +lw $t0 -868($fp) +bne $t0 $zero label_319 +lw $t0 -1588($fp) +lw $t1 -860($fp) +seq $t0 $t0 $t1 +sw $t0 -864($fp) +j label_320 +label_317: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -892($fp) +lw $t0 -860($fp) +lw $t1 12($t0) +sw $t1 -884($fp) +lw $t0 -892($fp) +lw $t1 -884($fp) +seq $t0 $t0 $t1 +sw $t0 -864($fp) +j label_320 +label_318: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -892($fp) +lw $t0 -860($fp) +lw $t1 12($t0) +sw $t1 -884($fp) +lw $t0 -892($fp) +move $a0 $t0 +lw $t0 -884($fp) +move $a1 $t0 +jal equal_str +sw $v0 -864($fp) +j label_320 +label_319: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -892($fp) +lw $t0 -860($fp) +lw $t1 12($t0) +sw $t1 -884($fp) +lw $t0 -892($fp) +lw $t1 -884($fp) +seq $t0 $t0 $t1 +sw $t0 -864($fp) +j label_320 +label_320: +lw $t0 -864($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -896($fp) +lw $t0 -896($fp) +lw $t1 12($t0) +sw $t1 -900($fp) +lw $t0 -900($fp) +bne $t0 $zero label_405 +li $t0 8 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -812($fp) +lw $t0 -1588($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -840($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -832($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -824($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -828($fp) +lw $t0 -840($fp) +lw $t1 -832($fp) +seq $t0 $t0 $t1 +sw $t0 -820($fp) +lw $t0 -820($fp) +bne $t0 $zero label_321 +lw $t0 -840($fp) +lw $t1 -824($fp) +seq $t0 $t0 $t1 +sw $t0 -820($fp) +lw $t0 -820($fp) +bne $t0 $zero label_322 +lw $t0 -840($fp) +lw $t1 -828($fp) +seq $t0 $t0 $t1 +sw $t0 -820($fp) +lw $t0 -820($fp) +bne $t0 $zero label_323 +lw $t0 -1588($fp) +lw $t1 -812($fp) +seq $t0 $t0 $t1 +sw $t0 -816($fp) +j label_324 +label_321: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -844($fp) +lw $t0 -812($fp) +lw $t1 12($t0) +sw $t1 -836($fp) +lw $t0 -844($fp) +lw $t1 -836($fp) +seq $t0 $t0 $t1 +sw $t0 -816($fp) +j label_324 +label_322: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -844($fp) +lw $t0 -812($fp) +lw $t1 12($t0) +sw $t1 -836($fp) +lw $t0 -844($fp) +move $a0 $t0 +lw $t0 -836($fp) +move $a1 $t0 +jal equal_str +sw $v0 -816($fp) +j label_324 +label_323: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -844($fp) +lw $t0 -812($fp) +lw $t1 12($t0) +sw $t1 -836($fp) +lw $t0 -844($fp) +lw $t1 -836($fp) +seq $t0 $t0 $t1 +sw $t0 -816($fp) +j label_324 +label_324: +lw $t0 -816($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -848($fp) +lw $t0 -848($fp) +lw $t1 12($t0) +sw $t1 -852($fp) +lw $t0 -852($fp) +bne $t0 $zero label_403 +li $t0 9 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -764($fp) +lw $t0 -1588($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -792($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -784($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -776($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -780($fp) +lw $t0 -792($fp) +lw $t1 -784($fp) +seq $t0 $t0 $t1 +sw $t0 -772($fp) +lw $t0 -772($fp) +bne $t0 $zero label_325 +lw $t0 -792($fp) +lw $t1 -776($fp) +seq $t0 $t0 $t1 +sw $t0 -772($fp) +lw $t0 -772($fp) +bne $t0 $zero label_326 +lw $t0 -792($fp) +lw $t1 -780($fp) +seq $t0 $t0 $t1 +sw $t0 -772($fp) +lw $t0 -772($fp) +bne $t0 $zero label_327 +lw $t0 -1588($fp) +lw $t1 -764($fp) +seq $t0 $t0 $t1 +sw $t0 -768($fp) +j label_328 +label_325: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -796($fp) +lw $t0 -764($fp) +lw $t1 12($t0) +sw $t1 -788($fp) +lw $t0 -796($fp) +lw $t1 -788($fp) +seq $t0 $t0 $t1 +sw $t0 -768($fp) +j label_328 +label_326: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -796($fp) +lw $t0 -764($fp) +lw $t1 12($t0) +sw $t1 -788($fp) +lw $t0 -796($fp) +move $a0 $t0 +lw $t0 -788($fp) +move $a1 $t0 +jal equal_str +sw $v0 -768($fp) +j label_328 +label_327: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -796($fp) +lw $t0 -764($fp) +lw $t1 12($t0) +sw $t1 -788($fp) +lw $t0 -796($fp) +lw $t1 -788($fp) +seq $t0 $t0 $t1 +sw $t0 -768($fp) +j label_328 +label_328: +lw $t0 -768($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -800($fp) +lw $t0 -800($fp) +lw $t1 12($t0) +sw $t1 -804($fp) +lw $t0 -804($fp) +bne $t0 $zero label_401 +li $t0 10 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -716($fp) +lw $t0 -1588($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -744($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -736($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -728($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -732($fp) +lw $t0 -744($fp) +lw $t1 -736($fp) +seq $t0 $t0 $t1 +sw $t0 -724($fp) +lw $t0 -724($fp) +bne $t0 $zero label_329 +lw $t0 -744($fp) +lw $t1 -728($fp) +seq $t0 $t0 $t1 +sw $t0 -724($fp) +lw $t0 -724($fp) +bne $t0 $zero label_330 +lw $t0 -744($fp) +lw $t1 -732($fp) +seq $t0 $t0 $t1 +sw $t0 -724($fp) +lw $t0 -724($fp) +bne $t0 $zero label_331 +lw $t0 -1588($fp) +lw $t1 -716($fp) +seq $t0 $t0 $t1 +sw $t0 -720($fp) +j label_332 +label_329: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -748($fp) +lw $t0 -716($fp) +lw $t1 12($t0) +sw $t1 -740($fp) +lw $t0 -748($fp) +lw $t1 -740($fp) +seq $t0 $t0 $t1 +sw $t0 -720($fp) +j label_332 +label_330: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -748($fp) +lw $t0 -716($fp) +lw $t1 12($t0) +sw $t1 -740($fp) +lw $t0 -748($fp) +move $a0 $t0 +lw $t0 -740($fp) +move $a1 $t0 +jal equal_str +sw $v0 -720($fp) +j label_332 +label_331: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -748($fp) +lw $t0 -716($fp) +lw $t1 12($t0) +sw $t1 -740($fp) +lw $t0 -748($fp) +lw $t1 -740($fp) +seq $t0 $t0 $t1 +sw $t0 -720($fp) +j label_332 +label_332: +lw $t0 -720($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -752($fp) +lw $t0 -752($fp) +lw $t1 12($t0) +sw $t1 -756($fp) +lw $t0 -756($fp) +bne $t0 $zero label_399 +li $t0 11 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -668($fp) +lw $t0 -1588($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -696($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -688($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -680($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -684($fp) +lw $t0 -696($fp) +lw $t1 -688($fp) +seq $t0 $t0 $t1 +sw $t0 -676($fp) +lw $t0 -676($fp) +bne $t0 $zero label_333 +lw $t0 -696($fp) +lw $t1 -680($fp) +seq $t0 $t0 $t1 +sw $t0 -676($fp) +lw $t0 -676($fp) +bne $t0 $zero label_334 +lw $t0 -696($fp) +lw $t1 -684($fp) +seq $t0 $t0 $t1 +sw $t0 -676($fp) +lw $t0 -676($fp) +bne $t0 $zero label_335 +lw $t0 -1588($fp) +lw $t1 -668($fp) +seq $t0 $t0 $t1 +sw $t0 -672($fp) +j label_336 +label_333: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -700($fp) +lw $t0 -668($fp) +lw $t1 12($t0) +sw $t1 -692($fp) +lw $t0 -700($fp) +lw $t1 -692($fp) +seq $t0 $t0 $t1 +sw $t0 -672($fp) +j label_336 +label_334: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -700($fp) +lw $t0 -668($fp) +lw $t1 12($t0) +sw $t1 -692($fp) +lw $t0 -700($fp) +move $a0 $t0 +lw $t0 -692($fp) +move $a1 $t0 +jal equal_str +sw $v0 -672($fp) +j label_336 +label_335: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -700($fp) +lw $t0 -668($fp) +lw $t1 12($t0) +sw $t1 -692($fp) +lw $t0 -700($fp) +lw $t1 -692($fp) +seq $t0 $t0 $t1 +sw $t0 -672($fp) +j label_336 +label_336: +lw $t0 -672($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -704($fp) +lw $t0 -704($fp) +lw $t1 12($t0) +sw $t1 -708($fp) +lw $t0 -708($fp) +bne $t0 $zero label_397 +li $t0 12 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -620($fp) +lw $t0 -1588($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -648($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -640($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -632($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -636($fp) +lw $t0 -648($fp) +lw $t1 -640($fp) +seq $t0 $t0 $t1 +sw $t0 -628($fp) +lw $t0 -628($fp) +bne $t0 $zero label_337 +lw $t0 -648($fp) +lw $t1 -632($fp) +seq $t0 $t0 $t1 +sw $t0 -628($fp) +lw $t0 -628($fp) +bne $t0 $zero label_338 +lw $t0 -648($fp) +lw $t1 -636($fp) +seq $t0 $t0 $t1 +sw $t0 -628($fp) +lw $t0 -628($fp) +bne $t0 $zero label_339 +lw $t0 -1588($fp) +lw $t1 -620($fp) +seq $t0 $t0 $t1 +sw $t0 -624($fp) +j label_340 +label_337: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -652($fp) +lw $t0 -620($fp) +lw $t1 12($t0) +sw $t1 -644($fp) +lw $t0 -652($fp) +lw $t1 -644($fp) +seq $t0 $t0 $t1 +sw $t0 -624($fp) +j label_340 +label_338: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -652($fp) +lw $t0 -620($fp) +lw $t1 12($t0) +sw $t1 -644($fp) +lw $t0 -652($fp) +move $a0 $t0 +lw $t0 -644($fp) +move $a1 $t0 +jal equal_str +sw $v0 -624($fp) +j label_340 +label_339: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -652($fp) +lw $t0 -620($fp) +lw $t1 12($t0) +sw $t1 -644($fp) +lw $t0 -652($fp) +lw $t1 -644($fp) +seq $t0 $t0 $t1 +sw $t0 -624($fp) +j label_340 +label_340: +lw $t0 -624($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -656($fp) +lw $t0 -656($fp) +lw $t1 12($t0) +sw $t1 -660($fp) +lw $t0 -660($fp) +bne $t0 $zero label_395 +li $t0 13 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -572($fp) +lw $t0 -1588($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -600($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -592($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -584($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -588($fp) +lw $t0 -600($fp) +lw $t1 -592($fp) +seq $t0 $t0 $t1 +sw $t0 -580($fp) +lw $t0 -580($fp) +bne $t0 $zero label_341 +lw $t0 -600($fp) +lw $t1 -584($fp) +seq $t0 $t0 $t1 +sw $t0 -580($fp) +lw $t0 -580($fp) +bne $t0 $zero label_342 +lw $t0 -600($fp) +lw $t1 -588($fp) +seq $t0 $t0 $t1 +sw $t0 -580($fp) +lw $t0 -580($fp) +bne $t0 $zero label_343 +lw $t0 -1588($fp) +lw $t1 -572($fp) +seq $t0 $t0 $t1 +sw $t0 -576($fp) +j label_344 +label_341: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -604($fp) +lw $t0 -572($fp) +lw $t1 12($t0) +sw $t1 -596($fp) +lw $t0 -604($fp) +lw $t1 -596($fp) +seq $t0 $t0 $t1 +sw $t0 -576($fp) +j label_344 +label_342: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -604($fp) +lw $t0 -572($fp) +lw $t1 12($t0) +sw $t1 -596($fp) +lw $t0 -604($fp) +move $a0 $t0 +lw $t0 -596($fp) +move $a1 $t0 +jal equal_str +sw $v0 -576($fp) +j label_344 +label_343: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -604($fp) +lw $t0 -572($fp) +lw $t1 12($t0) +sw $t1 -596($fp) +lw $t0 -604($fp) +lw $t1 -596($fp) +seq $t0 $t0 $t1 +sw $t0 -576($fp) +j label_344 +label_344: +lw $t0 -576($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -608($fp) +lw $t0 -608($fp) +lw $t1 12($t0) +sw $t1 -612($fp) +lw $t0 -612($fp) +bne $t0 $zero label_393 +li $t0 14 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -524($fp) +lw $t0 -1588($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -552($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -544($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -536($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -540($fp) +lw $t0 -552($fp) +lw $t1 -544($fp) +seq $t0 $t0 $t1 +sw $t0 -532($fp) +lw $t0 -532($fp) +bne $t0 $zero label_345 +lw $t0 -552($fp) +lw $t1 -536($fp) +seq $t0 $t0 $t1 +sw $t0 -532($fp) +lw $t0 -532($fp) +bne $t0 $zero label_346 +lw $t0 -552($fp) +lw $t1 -540($fp) +seq $t0 $t0 $t1 +sw $t0 -532($fp) +lw $t0 -532($fp) +bne $t0 $zero label_347 +lw $t0 -1588($fp) +lw $t1 -524($fp) +seq $t0 $t0 $t1 +sw $t0 -528($fp) +j label_348 +label_345: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -556($fp) +lw $t0 -524($fp) +lw $t1 12($t0) +sw $t1 -548($fp) +lw $t0 -556($fp) +lw $t1 -548($fp) +seq $t0 $t0 $t1 +sw $t0 -528($fp) +j label_348 +label_346: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -556($fp) +lw $t0 -524($fp) +lw $t1 12($t0) +sw $t1 -548($fp) +lw $t0 -556($fp) +move $a0 $t0 +lw $t0 -548($fp) +move $a1 $t0 +jal equal_str +sw $v0 -528($fp) +j label_348 +label_347: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -556($fp) +lw $t0 -524($fp) +lw $t1 12($t0) +sw $t1 -548($fp) +lw $t0 -556($fp) +lw $t1 -548($fp) +seq $t0 $t0 $t1 +sw $t0 -528($fp) +j label_348 +label_348: +lw $t0 -528($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -560($fp) +lw $t0 -560($fp) +lw $t1 12($t0) +sw $t1 -564($fp) +lw $t0 -564($fp) +bne $t0 $zero label_391 +li $t0 15 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -476($fp) +lw $t0 -1588($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -504($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -496($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -488($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -492($fp) +lw $t0 -504($fp) +lw $t1 -496($fp) +seq $t0 $t0 $t1 +sw $t0 -484($fp) +lw $t0 -484($fp) +bne $t0 $zero label_349 +lw $t0 -504($fp) +lw $t1 -488($fp) +seq $t0 $t0 $t1 +sw $t0 -484($fp) +lw $t0 -484($fp) +bne $t0 $zero label_350 +lw $t0 -504($fp) +lw $t1 -492($fp) +seq $t0 $t0 $t1 +sw $t0 -484($fp) +lw $t0 -484($fp) +bne $t0 $zero label_351 +lw $t0 -1588($fp) +lw $t1 -476($fp) +seq $t0 $t0 $t1 +sw $t0 -480($fp) +j label_352 +label_349: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -508($fp) +lw $t0 -476($fp) +lw $t1 12($t0) +sw $t1 -500($fp) +lw $t0 -508($fp) +lw $t1 -500($fp) +seq $t0 $t0 $t1 +sw $t0 -480($fp) +j label_352 +label_350: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -508($fp) +lw $t0 -476($fp) +lw $t1 12($t0) +sw $t1 -500($fp) +lw $t0 -508($fp) +move $a0 $t0 +lw $t0 -500($fp) +move $a1 $t0 +jal equal_str +sw $v0 -480($fp) +j label_352 +label_351: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -508($fp) +lw $t0 -476($fp) +lw $t1 12($t0) +sw $t1 -500($fp) +lw $t0 -508($fp) +lw $t1 -500($fp) +seq $t0 $t0 $t1 +sw $t0 -480($fp) +j label_352 +label_352: +lw $t0 -480($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -512($fp) +lw $t0 -512($fp) +lw $t1 12($t0) +sw $t1 -516($fp) +lw $t0 -516($fp) +bne $t0 $zero label_389 +li $t0 16 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -428($fp) +lw $t0 -1588($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -456($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -448($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -440($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -444($fp) +lw $t0 -456($fp) +lw $t1 -448($fp) +seq $t0 $t0 $t1 +sw $t0 -436($fp) +lw $t0 -436($fp) +bne $t0 $zero label_353 +lw $t0 -456($fp) +lw $t1 -440($fp) +seq $t0 $t0 $t1 +sw $t0 -436($fp) +lw $t0 -436($fp) +bne $t0 $zero label_354 +lw $t0 -456($fp) +lw $t1 -444($fp) +seq $t0 $t0 $t1 +sw $t0 -436($fp) +lw $t0 -436($fp) +bne $t0 $zero label_355 +lw $t0 -1588($fp) +lw $t1 -428($fp) +seq $t0 $t0 $t1 +sw $t0 -432($fp) +j label_356 +label_353: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -460($fp) +lw $t0 -428($fp) +lw $t1 12($t0) +sw $t1 -452($fp) +lw $t0 -460($fp) +lw $t1 -452($fp) +seq $t0 $t0 $t1 +sw $t0 -432($fp) +j label_356 +label_354: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -460($fp) +lw $t0 -428($fp) +lw $t1 12($t0) +sw $t1 -452($fp) +lw $t0 -460($fp) +move $a0 $t0 +lw $t0 -452($fp) +move $a1 $t0 +jal equal_str +sw $v0 -432($fp) +j label_356 +label_355: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -460($fp) +lw $t0 -428($fp) +lw $t1 12($t0) +sw $t1 -452($fp) +lw $t0 -460($fp) +lw $t1 -452($fp) +seq $t0 $t0 $t1 +sw $t0 -432($fp) +j label_356 +label_356: +lw $t0 -432($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -464($fp) +lw $t0 -464($fp) +lw $t1 12($t0) +sw $t1 -468($fp) +lw $t0 -468($fp) +bne $t0 $zero label_387 +li $t0 17 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -380($fp) +lw $t0 -1588($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -408($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -400($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -392($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -396($fp) +lw $t0 -408($fp) +lw $t1 -400($fp) +seq $t0 $t0 $t1 +sw $t0 -388($fp) +lw $t0 -388($fp) +bne $t0 $zero label_357 +lw $t0 -408($fp) +lw $t1 -392($fp) +seq $t0 $t0 $t1 +sw $t0 -388($fp) +lw $t0 -388($fp) +bne $t0 $zero label_358 +lw $t0 -408($fp) +lw $t1 -396($fp) +seq $t0 $t0 $t1 +sw $t0 -388($fp) +lw $t0 -388($fp) +bne $t0 $zero label_359 +lw $t0 -1588($fp) +lw $t1 -380($fp) +seq $t0 $t0 $t1 +sw $t0 -384($fp) +j label_360 +label_357: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -412($fp) +lw $t0 -380($fp) +lw $t1 12($t0) +sw $t1 -404($fp) +lw $t0 -412($fp) +lw $t1 -404($fp) +seq $t0 $t0 $t1 +sw $t0 -384($fp) +j label_360 +label_358: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -412($fp) +lw $t0 -380($fp) +lw $t1 12($t0) +sw $t1 -404($fp) +lw $t0 -412($fp) +move $a0 $t0 +lw $t0 -404($fp) +move $a1 $t0 +jal equal_str +sw $v0 -384($fp) +j label_360 +label_359: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -412($fp) +lw $t0 -380($fp) +lw $t1 12($t0) +sw $t1 -404($fp) +lw $t0 -412($fp) +lw $t1 -404($fp) +seq $t0 $t0 $t1 +sw $t0 -384($fp) +j label_360 +label_360: +lw $t0 -384($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -416($fp) +lw $t0 -416($fp) +lw $t1 12($t0) +sw $t1 -420($fp) +lw $t0 -420($fp) +bne $t0 $zero label_385 +li $t0 18 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -332($fp) +lw $t0 -1588($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -360($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -352($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -344($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -348($fp) +lw $t0 -360($fp) +lw $t1 -352($fp) +seq $t0 $t0 $t1 +sw $t0 -340($fp) +lw $t0 -340($fp) +bne $t0 $zero label_361 +lw $t0 -360($fp) +lw $t1 -344($fp) +seq $t0 $t0 $t1 +sw $t0 -340($fp) +lw $t0 -340($fp) +bne $t0 $zero label_362 +lw $t0 -360($fp) +lw $t1 -348($fp) +seq $t0 $t0 $t1 +sw $t0 -340($fp) +lw $t0 -340($fp) +bne $t0 $zero label_363 +lw $t0 -1588($fp) +lw $t1 -332($fp) +seq $t0 $t0 $t1 +sw $t0 -336($fp) +j label_364 +label_361: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -364($fp) +lw $t0 -332($fp) +lw $t1 12($t0) +sw $t1 -356($fp) +lw $t0 -364($fp) +lw $t1 -356($fp) +seq $t0 $t0 $t1 +sw $t0 -336($fp) +j label_364 +label_362: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -364($fp) +lw $t0 -332($fp) +lw $t1 12($t0) +sw $t1 -356($fp) +lw $t0 -364($fp) +move $a0 $t0 +lw $t0 -356($fp) +move $a1 $t0 +jal equal_str +sw $v0 -336($fp) +j label_364 +label_363: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -364($fp) +lw $t0 -332($fp) +lw $t1 12($t0) +sw $t1 -356($fp) +lw $t0 -364($fp) +lw $t1 -356($fp) +seq $t0 $t0 $t1 +sw $t0 -336($fp) +j label_364 +label_364: +lw $t0 -336($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -368($fp) +lw $t0 -368($fp) +lw $t1 12($t0) +sw $t1 -372($fp) +lw $t0 -372($fp) +bne $t0 $zero label_383 +li $t0 19 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -284($fp) +lw $t0 -1588($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -312($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -304($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -296($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -300($fp) +lw $t0 -312($fp) +lw $t1 -304($fp) +seq $t0 $t0 $t1 +sw $t0 -292($fp) +lw $t0 -292($fp) +bne $t0 $zero label_365 +lw $t0 -312($fp) +lw $t1 -296($fp) +seq $t0 $t0 $t1 +sw $t0 -292($fp) +lw $t0 -292($fp) +bne $t0 $zero label_366 +lw $t0 -312($fp) +lw $t1 -300($fp) +seq $t0 $t0 $t1 +sw $t0 -292($fp) +lw $t0 -292($fp) +bne $t0 $zero label_367 +lw $t0 -1588($fp) +lw $t1 -284($fp) +seq $t0 $t0 $t1 +sw $t0 -288($fp) +j label_368 +label_365: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -316($fp) +lw $t0 -284($fp) +lw $t1 12($t0) +sw $t1 -308($fp) +lw $t0 -316($fp) +lw $t1 -308($fp) +seq $t0 $t0 $t1 +sw $t0 -288($fp) +j label_368 +label_366: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -316($fp) +lw $t0 -284($fp) +lw $t1 12($t0) +sw $t1 -308($fp) +lw $t0 -316($fp) +move $a0 $t0 +lw $t0 -308($fp) +move $a1 $t0 +jal equal_str +sw $v0 -288($fp) +j label_368 +label_367: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -316($fp) +lw $t0 -284($fp) +lw $t1 12($t0) +sw $t1 -308($fp) +lw $t0 -316($fp) +lw $t1 -308($fp) +seq $t0 $t0 $t1 +sw $t0 -288($fp) +j label_368 +label_368: +lw $t0 -288($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -320($fp) +lw $t0 -320($fp) +lw $t1 12($t0) +sw $t1 -324($fp) +lw $t0 -324($fp) +bne $t0 $zero label_381 +li $t0 20 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -236($fp) +lw $t0 -1588($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -264($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -256($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -248($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -252($fp) +lw $t0 -264($fp) +lw $t1 -256($fp) +seq $t0 $t0 $t1 +sw $t0 -244($fp) +lw $t0 -244($fp) +bne $t0 $zero label_369 +lw $t0 -264($fp) +lw $t1 -248($fp) +seq $t0 $t0 $t1 +sw $t0 -244($fp) +lw $t0 -244($fp) +bne $t0 $zero label_370 +lw $t0 -264($fp) +lw $t1 -252($fp) +seq $t0 $t0 $t1 +sw $t0 -244($fp) +lw $t0 -244($fp) +bne $t0 $zero label_371 +lw $t0 -1588($fp) +lw $t1 -236($fp) +seq $t0 $t0 $t1 +sw $t0 -240($fp) +j label_372 +label_369: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -268($fp) +lw $t0 -236($fp) +lw $t1 12($t0) +sw $t1 -260($fp) +lw $t0 -268($fp) +lw $t1 -260($fp) +seq $t0 $t0 $t1 +sw $t0 -240($fp) +j label_372 +label_370: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -268($fp) +lw $t0 -236($fp) +lw $t1 12($t0) +sw $t1 -260($fp) +lw $t0 -268($fp) +move $a0 $t0 +lw $t0 -260($fp) +move $a1 $t0 +jal equal_str +sw $v0 -240($fp) +j label_372 +label_371: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -268($fp) +lw $t0 -236($fp) +lw $t1 12($t0) +sw $t1 -260($fp) +lw $t0 -268($fp) +lw $t1 -260($fp) +seq $t0 $t0 $t1 +sw $t0 -240($fp) +j label_372 +label_372: +lw $t0 -240($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -272($fp) +lw $t0 -272($fp) +lw $t1 12($t0) +sw $t1 -276($fp) +lw $t0 -276($fp) +bne $t0 $zero label_379 +li $t0 21 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -188($fp) +lw $t0 -1588($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -216($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -208($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -200($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -204($fp) +lw $t0 -216($fp) +lw $t1 -208($fp) +seq $t0 $t0 $t1 +sw $t0 -196($fp) +lw $t0 -196($fp) +bne $t0 $zero label_373 +lw $t0 -216($fp) +lw $t1 -200($fp) +seq $t0 $t0 $t1 +sw $t0 -196($fp) +lw $t0 -196($fp) +bne $t0 $zero label_374 +lw $t0 -216($fp) +lw $t1 -204($fp) +seq $t0 $t0 $t1 +sw $t0 -196($fp) +lw $t0 -196($fp) +bne $t0 $zero label_375 +lw $t0 -1588($fp) +lw $t1 -188($fp) +seq $t0 $t0 $t1 +sw $t0 -192($fp) +j label_376 +label_373: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -220($fp) +lw $t0 -188($fp) +lw $t1 12($t0) +sw $t1 -212($fp) +lw $t0 -220($fp) +lw $t1 -212($fp) +seq $t0 $t0 $t1 +sw $t0 -192($fp) +j label_376 +label_374: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -220($fp) +lw $t0 -188($fp) +lw $t1 12($t0) +sw $t1 -212($fp) +lw $t0 -220($fp) +move $a0 $t0 +lw $t0 -212($fp) +move $a1 $t0 +jal equal_str +sw $v0 -192($fp) +j label_376 +label_375: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -220($fp) +lw $t0 -188($fp) +lw $t1 12($t0) +sw $t1 -212($fp) +lw $t0 -220($fp) +lw $t1 -212($fp) +seq $t0 $t0 $t1 +sw $t0 -192($fp) +j label_376 +label_376: +lw $t0 -192($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -224($fp) +lw $t0 -224($fp) +lw $t1 12($t0) +sw $t1 -228($fp) +lw $t0 -228($fp) +bne $t0 $zero label_377 +la $t0 data_130 +sw $t0 -184($fp) +lw $t0 -184($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -180($fp) +lw $t0 -180($fp) +sw $t0 -232($fp) +j label_378 +label_377: +la $t0 data_131 +sw $t0 -176($fp) +lw $t0 -176($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -172($fp) +lw $t0 -172($fp) +sw $t0 -232($fp) +label_378: +lw $t0 -232($fp) +sw $t0 -280($fp) +j label_380 +label_379: +la $t0 data_132 +sw $t0 -168($fp) +lw $t0 -168($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -164($fp) +lw $t0 -164($fp) +sw $t0 -280($fp) +label_380: +lw $t0 -280($fp) +sw $t0 -328($fp) +j label_382 +label_381: +la $t0 data_133 +sw $t0 -160($fp) +lw $t0 -160($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -156($fp) +lw $t0 -156($fp) +sw $t0 -328($fp) +label_382: +lw $t0 -328($fp) +sw $t0 -376($fp) +j label_384 +label_383: +la $t0 data_134 +sw $t0 -152($fp) +lw $t0 -152($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -148($fp) +lw $t0 -148($fp) +sw $t0 -376($fp) +label_384: +lw $t0 -376($fp) +sw $t0 -424($fp) +j label_386 +label_385: +la $t0 data_135 +sw $t0 -144($fp) +lw $t0 -144($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -140($fp) +lw $t0 -140($fp) +sw $t0 -424($fp) +label_386: +lw $t0 -424($fp) +sw $t0 -472($fp) +j label_388 +label_387: +la $t0 data_136 +sw $t0 -136($fp) +lw $t0 -136($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -132($fp) +lw $t0 -132($fp) +sw $t0 -472($fp) +label_388: +lw $t0 -472($fp) +sw $t0 -520($fp) +j label_390 +label_389: +la $t0 data_137 +sw $t0 -128($fp) +lw $t0 -128($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -124($fp) +lw $t0 -124($fp) +sw $t0 -520($fp) +label_390: +lw $t0 -520($fp) +sw $t0 -568($fp) +j label_392 +label_391: +la $t0 data_138 +sw $t0 -120($fp) +lw $t0 -120($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -116($fp) +lw $t0 -116($fp) +sw $t0 -568($fp) +label_392: +lw $t0 -568($fp) +sw $t0 -616($fp) +j label_394 +label_393: +la $t0 data_139 +sw $t0 -112($fp) +lw $t0 -112($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -108($fp) +lw $t0 -108($fp) +sw $t0 -616($fp) +label_394: +lw $t0 -616($fp) +sw $t0 -664($fp) +j label_396 +label_395: +la $t0 data_140 +sw $t0 -104($fp) +lw $t0 -104($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -100($fp) +lw $t0 -100($fp) +sw $t0 -664($fp) +label_396: +lw $t0 -664($fp) +sw $t0 -712($fp) +j label_398 +label_397: +la $t0 data_141 +sw $t0 -96($fp) +lw $t0 -96($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -92($fp) +lw $t0 -92($fp) +sw $t0 -712($fp) +label_398: +lw $t0 -712($fp) +sw $t0 -760($fp) +j label_400 +label_399: +la $t0 data_142 +sw $t0 -88($fp) +lw $t0 -88($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -84($fp) +lw $t0 -84($fp) +sw $t0 -760($fp) +label_400: +lw $t0 -760($fp) +sw $t0 -808($fp) +j label_402 +label_401: +la $t0 data_143 +sw $t0 -80($fp) +lw $t0 -80($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -76($fp) +lw $t0 -76($fp) +sw $t0 -808($fp) +label_402: +lw $t0 -808($fp) +sw $t0 -856($fp) +j label_404 +label_403: +la $t0 data_144 +sw $t0 -72($fp) +lw $t0 -72($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -68($fp) +lw $t0 -68($fp) +sw $t0 -856($fp) +label_404: +lw $t0 -856($fp) +sw $t0 -904($fp) +j label_406 +label_405: +la $t0 data_145 +sw $t0 -64($fp) +lw $t0 -64($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -60($fp) +lw $t0 -60($fp) +sw $t0 -904($fp) +label_406: +lw $t0 -904($fp) +sw $t0 -952($fp) +j label_408 +label_407: +la $t0 data_146 +sw $t0 -56($fp) +lw $t0 -56($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -52($fp) +lw $t0 -52($fp) +sw $t0 -952($fp) +label_408: +lw $t0 -952($fp) +sw $t0 -1000($fp) +j label_410 +label_409: +la $t0 data_147 +sw $t0 -48($fp) +lw $t0 -48($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -44($fp) +lw $t0 -44($fp) +sw $t0 -1000($fp) +label_410: +lw $t0 -1000($fp) +sw $t0 -1048($fp) +j label_412 +label_411: +la $t0 data_148 +sw $t0 -40($fp) +lw $t0 -40($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 -36($fp) +sw $t0 -1048($fp) +label_412: +lw $t0 -1048($fp) +sw $t0 -1096($fp) +j label_414 +label_413: +la $t0 data_149 +sw $t0 -32($fp) +lw $t0 -32($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t0 -28($fp) +sw $t0 -1096($fp) +label_414: +lw $t0 -1096($fp) +sw $t0 -1144($fp) +j label_416 +label_415: +la $t0 data_150 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 -20($fp) +sw $t0 -1144($fp) +label_416: +lw $t0 -1144($fp) +sw $t0 -1192($fp) +j label_418 +label_417: +la $t0 data_151 +sw $t0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -1192($fp) +label_418: +lw $v0 -1192($fp) +addi $sp $sp 1580 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_prompt_at_CellularAutomaton: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -120 +la $t0 data_10 +sw $t0 -128($fp) +lw $t0 -128($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -128($fp) +la $t0 data_152 +sw $t0 -124($fp) +lw $t0 -124($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -120($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -116($fp) +lw $t0 -116($fp) +bne $t0 $zero label_419 +j label_420 +label_419: +li $v0 4 +la $a0 data_153 +syscall +li $v0 10 +syscall +label_420: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -120($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -112($fp) +la $t0 data_154 +sw $t0 -108($fp) +lw $t0 -108($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -104($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -100($fp) +lw $t0 -100($fp) +bne $t0 $zero label_421 +j label_422 +label_421: +li $v0 4 +la $a0 data_155 +syscall +li $v0 10 +syscall +label_422: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -104($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -96($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -92($fp) +lw $t0 -92($fp) +bne $t0 $zero label_423 +j label_424 +label_423: +li $v0 4 +la $a0 data_156 +syscall +li $v0 10 +syscall +label_424: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 16($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -88($fp) +lw $t0 -88($fp) +sw $t0 -128($fp) +la $t0 data_157 +sw $t0 -84($fp) +lw $t0 -84($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -80($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_425 +j label_426 +label_425: +li $v0 4 +la $a0 data_158 +syscall +li $v0 10 +syscall +label_426: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -80($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -72($fp) +la $t0 data_159 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 -128($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -52($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -44($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -36($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -40($fp) +lw $t0 -52($fp) +lw $t1 -44($fp) +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_427 +lw $t0 -52($fp) +lw $t1 -36($fp) +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_428 +lw $t0 -52($fp) +lw $t1 -40($fp) +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_429 +lw $t0 -128($fp) +lw $t1 -20($fp) +seq $t0 $t0 $t1 +sw $t0 -28($fp) +j label_430 +label_427: +lw $t0 -128($fp) +lw $t1 12($t0) +sw $t1 -56($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -48($fp) +lw $t0 -56($fp) +lw $t1 -48($fp) +seq $t0 $t0 $t1 +sw $t0 -28($fp) +j label_430 +label_428: +lw $t0 -128($fp) +lw $t1 12($t0) +sw $t1 -56($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -48($fp) +lw $t0 -56($fp) +move $a0 $t0 +lw $t0 -48($fp) +move $a1 $t0 +jal equal_str +sw $v0 -28($fp) +j label_430 +label_429: +lw $t0 -128($fp) +lw $t1 12($t0) +sw $t1 -56($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -48($fp) +lw $t0 -56($fp) +lw $t1 -48($fp) +seq $t0 $t0 $t1 +sw $t0 -28($fp) +j label_430 +label_430: +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -60($fp) +lw $t0 -60($fp) +lw $t1 12($t0) +sw $t1 -64($fp) +lw $t0 -64($fp) +bne $t0 $zero label_431 +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -16($fp) +lw $t0 -16($fp) +sw $t0 -68($fp) +j label_432 +label_431: +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -68($fp) +label_432: +lw $v0 -68($fp) +addi $sp $sp 120 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_prompt2_at_CellularAutomaton: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -120 +la $t0 data_10 +sw $t0 -128($fp) +lw $t0 -128($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -128($fp) +la $t0 data_160 +sw $t0 -124($fp) +lw $t0 -124($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -120($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -116($fp) +lw $t0 -116($fp) +bne $t0 $zero label_433 +j label_434 +label_433: +li $v0 4 +la $a0 data_161 +syscall +li $v0 10 +syscall +label_434: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -120($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -112($fp) +la $t0 data_162 +sw $t0 -108($fp) +lw $t0 -108($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -104($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -100($fp) +lw $t0 -100($fp) +bne $t0 $zero label_435 +j label_436 +label_435: +li $v0 4 +la $a0 data_163 +syscall +li $v0 10 +syscall +label_436: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -104($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -96($fp) +la $t0 data_164 +sw $t0 -92($fp) +lw $t0 -92($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -88($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -84($fp) +lw $t0 -84($fp) +bne $t0 $zero label_437 +j label_438 +label_437: +li $v0 4 +la $a0 data_165 +syscall +li $v0 10 +syscall +label_438: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -88($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -80($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_439 +j label_440 +label_439: +li $v0 4 +la $a0 data_166 +syscall +li $v0 10 +syscall +label_440: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 16($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -72($fp) +lw $t0 -72($fp) +sw $t0 -128($fp) +la $t0 data_167 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 -128($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -52($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -44($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -36($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -40($fp) +lw $t0 -52($fp) +lw $t1 -44($fp) +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_441 +lw $t0 -52($fp) +lw $t1 -36($fp) +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_442 +lw $t0 -52($fp) +lw $t1 -40($fp) +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_443 +lw $t0 -128($fp) +lw $t1 -20($fp) +seq $t0 $t0 $t1 +sw $t0 -28($fp) +j label_444 +label_441: +lw $t0 -128($fp) +lw $t1 12($t0) +sw $t1 -56($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -48($fp) +lw $t0 -56($fp) +lw $t1 -48($fp) +seq $t0 $t0 $t1 +sw $t0 -28($fp) +j label_444 +label_442: +lw $t0 -128($fp) +lw $t1 12($t0) +sw $t1 -56($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -48($fp) +lw $t0 -56($fp) +move $a0 $t0 +lw $t0 -48($fp) +move $a1 $t0 +jal equal_str +sw $v0 -28($fp) +j label_444 +label_443: +lw $t0 -128($fp) +lw $t1 12($t0) +sw $t1 -56($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -48($fp) +lw $t0 -56($fp) +lw $t1 -48($fp) +seq $t0 $t0 $t1 +sw $t0 -28($fp) +j label_444 +label_444: +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -60($fp) +lw $t0 -60($fp) +lw $t1 12($t0) +sw $t1 -64($fp) +lw $t0 -64($fp) +bne $t0 $zero label_445 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -16($fp) +lw $t0 -16($fp) +sw $t0 -68($fp) +j label_446 +label_445: +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -68($fp) +label_446: +lw $v0 -68($fp) +addi $sp $sp 120 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_CellularAutomaton: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 6 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_CellularAutomaton +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__attributes_ctor_Main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_CellularAutomaton +addi $sp $sp 4 +sw $v0 -16($fp) +lw $t0 0($fp) +lw $t1 -12($fp) +sw $t1 28($t0) +lw $v0 0($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_main_at_Main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -124 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -132($fp) +la $t0 data_10 +sw $t0 -128($fp) +lw $t0 -128($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -128($fp) +la $t0 data_168 +sw $t0 -124($fp) +lw $t0 -124($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -120($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -116($fp) +lw $t0 -116($fp) +bne $t0 $zero label_447 +j label_448 +label_447: +li $v0 4 +la $a0 data_169 +syscall +li $v0 10 +syscall +label_448: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -120($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -112($fp) +la $t0 data_170 +sw $t0 -108($fp) +lw $t0 -108($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -104($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -100($fp) +lw $t0 -100($fp) +bne $t0 $zero label_449 +j label_450 +label_449: +li $v0 4 +la $a0 data_171 +syscall +li $v0 10 +syscall +label_450: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -104($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -96($fp) +label_451: +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -88($fp) +lw $t0 -88($fp) +bne $t0 $zero label_452 +j label_453 +label_452: +li $v0 4 +la $a0 data_172 +syscall +li $v0 10 +syscall +label_453: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 88($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -84($fp) +lw $t0 -84($fp) +lw $t1 12($t0) +sw $t1 -92($fp) +lw $t0 -92($fp) +bne $t0 $zero label_454 +j label_472 +label_454: +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -80($fp) +lw $t0 -80($fp) +sw $t0 -132($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_455 +j label_456 +label_455: +li $v0 4 +la $a0 data_173 +syscall +li $v0 10 +syscall +label_456: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 76($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -72($fp) +lw $t0 -72($fp) +sw $t0 -128($fp) +jal __ctor_CellularAutomaton +sw $v0 -68($fp) +lw $t0 -68($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -64($fp) +lw $t0 -64($fp) +bne $t0 $zero label_457 +j label_458 +label_457: +li $v0 4 +la $a0 data_174 +syscall +li $v0 10 +syscall +label_458: +lw $t0 -68($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -128($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -68($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 52($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -60($fp) +lw $t0 -60($fp) +lw $t1 0($fp) +addi $t1 $t1 28 +sw $t0 0($t1) +lw $t4 0($fp) +lw $t4 28($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -56($fp) +lw $t0 -56($fp) +bne $t0 $zero label_459 +j label_460 +label_459: +li $v0 4 +la $a0 data_175 +syscall +li $v0 10 +syscall +label_460: +lw $t4 0($fp) +lw $t4 28($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 28($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 80($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -52($fp) +label_461: +lw $t0 -132($fp) +lw $t1 12($t0) +sw $t1 -48($fp) +lw $t0 -48($fp) +bne $t0 $zero label_462 +j label_471 +label_462: +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -36($fp) +lw $t0 -36($fp) +bne $t0 $zero label_463 +j label_464 +label_463: +li $v0 4 +la $a0 data_176 +syscall +li $v0 10 +syscall +label_464: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 84($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -32($fp) +lw $t0 -32($fp) +lw $t1 12($t0) +sw $t1 -40($fp) +lw $t0 -40($fp) +bne $t0 $zero label_465 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t0 -28($fp) +sw $t0 -132($fp) +lw $t0 -132($fp) +sw $t0 -44($fp) +j label_470 +label_465: +lw $t4 0($fp) +lw $t4 28($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_466 +j label_467 +label_466: +li $v0 4 +la $a0 data_177 +syscall +li $v0 10 +syscall +label_467: +lw $t4 0($fp) +lw $t4 28($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 28($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 48($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t4 0($fp) +lw $t4 28($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_468 +j label_469 +label_468: +li $v0 4 +la $a0 data_178 +syscall +li $v0 10 +syscall +label_469: +lw $t4 0($fp) +lw $t4 28($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 28($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 80($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -44($fp) +label_470: +j label_461 +label_471: +j label_451 +label_472: +lw $v0 0($fp) +addi $sp $sp 124 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_Main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 7 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_Main +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + + + +equal_str: +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $a0 8($sp) +sw $a1 12($sp) +sw $t2 16($sp) +sw $t3 20($sp) +move $t0 $a0 +move $t1 $a1 +while_equal_str: +lb $t2 0($t0) +lb $t3 0($t1) +bne $t2 $t3 equal_str_different_strings +beq $t2 $zero first_end_equal_str +beq $t3 $zero second_end_equal_str +addi $t1 $t1 1 +addi $t0 $t0 1 +j while_equal_str +equal_str_different_strings: +move $v0 $zero +j equal_str_end +first_end_equal_str: +beq $t3 $zero second_end_equal_str +move $v0 $zero +j equal_str_end +second_end_equal_str: +li $v0 1 +equal_str_end: +lw $t0 0($sp) +lw $t1 4($sp) +lw $a0 8($sp) +lw $a1 12($sp) +lw $t2 16($sp) +lw $t3 20($sp) +addiu $sp $sp 24 +jr $ra + +allocate: +addiu $sp $sp -12 +sw $a0 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +li $t0 4 +div $a0 $t0 +mfhi $t1 +sub $t0 $t0 $t1 +add $a0 $a0 $t0 +li $v0 9 +syscall +lw $a0 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +addiu $sp $sp 12 +jr $ra + +copy: +addiu $sp $sp -16 +sw $a0 0($sp) +sw $a1 4($sp) +sw $a2 8($sp) +sw $t0 12($sp) +while_copy: +beq $a2 $zero copy_end +lw $t0 0($a0) +sw $t0 0($a1) +addiu $a0 $a0 4 +addiu $a1 $a1 4 +addi $a2 $a2 -4 +j while_copy +copy_end: +lw $a0 0($sp) +lw $a1 4($sp) +lw $a2 8($sp) +lw $t0 12($sp) +addiu $sp $sp 16 +jr $ra + +read_string: +addiu $sp $sp -28 +sw $ra 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $a2 20($sp) +sw $t2 24($sp) +li $t0 8 +addi $a0 $t0 4 +jal allocate +move $t1 $v0 +move $t2 $zero +while_read_string: +addu $a0 $t1 $t2 +subu $a1 $t0 $t2 +addu $t2 $t2 $a1 +jal read_string_up_to +beq $v0 $zero read_string_not_finished +move $v0 $t1 +j end_read_string +read_string_not_finished: +sll $t0 $t0 1 +addi $a0 $t0 4 +jal allocate +move $a0 $t1 +move $t1 $v0 +move $a1 $v0 +move $a2 $t2 +jal copy +j while_read_string +end_read_string: +lw $ra 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $a2 20($sp) +lw $t2 24($sp) +addiu $sp $sp 28 +jr $ra +read_string_up_to: +addiu $sp $sp -28 +sw $ra 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +sw $t2 12($sp) +sw $t3 16($sp) +sw $t4 20($sp) +sw $t5 24($sp) +move $t0 $a0 +move $t1 $zero +li $t2 10 +addu $t3 $t0 $a1 +addiu $a1 $a1 1 +li $v0 8 +syscall +lw $a0 0($a0) +beq $a0 $zero eol_terminated +li $v0 0 +eol_check: +beq $t0 $t3 read_loop_continue +lb $t1 0($t0) +beq $t1 $t2 eol_terminated +addiu $t0 $t0 1 +j eol_check +eol_terminated: +sb $zero 0($t0) +li $v0 1 +read_loop_continue: +lw $ra 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +lw $t2 12($sp) +lw $t3 16($sp) +lw $t4 20($sp) +lw $t5 24($sp) +addiu $sp $sp 28 +jr $ra + +substr: +addiu $sp $sp -32 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $t3 12($sp) +sw $a0 16($sp) +sw $a1 20($sp) +sw $a2 24($sp) +sw $ra 28($sp) +move $t0 $a0 +add $t0 $t0 $a1 +li $t1 4 +div $a2 $t1 +mfhi $t2 +bne $t2 $zero substr_allign_size +move $t1 $a2 +j substr_new_chunk +substr_allign_size: +sub $t1 $t1 $t2 +add $t1 $t1 $a2 +substr_new_chunk: +move $a0 $t1 +jal allocate +move $t3 $v0 +move $t1 $zero +while_substr_copy: +beq $t1 $a2 substr_end +lb $t2 0($t0) +sb $t2 0($t3) +addiu $t0 $t0 1 +addiu $t3 $t3 1 +addiu $t1 $t1 1 +j while_substr_copy +substr_end: +sb $zero 0($t3) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $t3 12($sp) +lw $a0 16($sp) +lw $a1 20($sp) +lw $a2 24($sp) +lw $ra 28($sp) +addiu $sp $sp 32 +jr $ra + +concat: +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $ra 20($sp) +move $t0 $a0 +move $t1 $a1 +addiu $a0 $a2 1 +li $t2 4 +div $a0 $t2 +mfhi $a0 +bne $a0 $zero concat_allign_size +addiu $a0 $a2 1 +j concat_size_allignned +concat_allign_size: +sub $t2 $t2 $a0 +add $a0 $a2 $t2 +addiu $a0 $a0 1 +concat_size_allignned: +jal allocate +move $t2 $v0 +j first_while_concat_copy +first_while_concat_copy: +lb $a0 0($t0) +beq $a0 $zero second_while_concat_copy +sb $a0 0($t2) +addiu $t0 $t0 1 +addiu $t2 $t2 1 +j first_while_concat_copy +second_while_concat_copy: +lb $a0 0($t1) +beq $a0 $zero concat_end +sb $a0 0($t2) +addiu $t1 $t1 1 +addiu $t2 $t2 1 +j second_while_concat_copy +concat_end: +sb $zero 0($t2) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $ra 20($sp) +addiu $sp $sp 24 +jr $ra + +length: +addiu $sp $sp -8 +sw $t0 0($sp) +sw $t1 4($sp) +move $t0 $a0 +move $v0 $zero +while_len: +lb $t1 0($t0) +beq $t1 $zero len_end +addi $v0 $v0 1 +addiu $t0 $t0 1 +j while_len +len_end: +lw $t0 0($sp) +lw $t1 4($sp) +addiu $sp $sp 8 +jr $ra \ No newline at end of file diff --git a/tests/codegen/list.mips b/tests/codegen/list.mips new file mode 100644 index 000000000..77e2f98ec --- /dev/null +++ b/tests/codegen/list.mips @@ -0,0 +1,1992 @@ +.data +default_str: .asciiz "" +.word 0 +data_1: .asciiz "Object" +.word 0 +data_2: .asciiz "IO" +.word 0 +data_3: .asciiz "String" +.word 0 +data_4: .asciiz "Int" +.word 0 +data_5: .asciiz "Bool" +.word 0 +data_6: .asciiz "List" +.word 0 +data_7: .asciiz "Cons" +.word 0 +data_8: .asciiz "Main" +.word 0 +data_9: .asciiz " +" +.word 0 +data_10: .asciiz "" +.word 0 +data_11: .asciiz "Abort called from class " +.word 0 +data_12: .asciiz "Index out of range exception" +.word 0 +data_13: .asciiz "Function call in a void instance" +.word 0 +data_14: .asciiz "Function call in a void instance" +.word 0 +data_15: .asciiz "Function call in a void instance" +.word 0 +data_16: .asciiz "Function call in a void instance" +.word 0 +data_17: .asciiz "Function call in a void instance" +.word 0 +data_18: .asciiz "Function call in a void instance" +.word 0 +data_19: .asciiz " " +.word 0 +data_20: .asciiz "Function call in a void instance" +.word 0 +data_21: .asciiz "Function call in a void instance" +.word 0 +data_22: .asciiz "Function call in a void instance" +.word 0 +data_23: .asciiz "\n" +.word 0 +data_24: .asciiz "Function call in a void instance" +.word 0 +data_25: .asciiz "Function call in a void instance" +.word 0 +data_26: .asciiz "Function call in a void instance" +.word 0 +data_27: .asciiz "Function call in a void instance" +.word 0 +data_28: .asciiz "Function call in a void instance" +.word 0 +data_29: .asciiz "Function call in a void instance" +.word 0 +data_30: .asciiz "Function call in a void instance" +.word 0 +data_31: .asciiz "Function call in a void instance" +.word 0 +data_32: .asciiz "Function call in a void instance" + + +types_table: +.word data_1 +.word data_2 +.word data_3 +.word data_4 +.word data_5 +.word data_6 +.word data_7 +.word data_8 + +prototype_table: + .word type_1_prototype + .word type_2_prototype + .word type_3_prototype + .word type_4_prototype + .word type_5_prototype + .word type_6_prototype + .word type_7_prototype + .word type_8_prototype + +type_1_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __ctor_Object + +type_1_prototype: +.word 0 +.word 4 +.word type_1_dispatch +.word -1 + + +type_2_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word function_out_string_at_IO +.word function_out_int_at_IO +.word function_in_string_at_IO +.word function_in_int_at_IO +.word __ctor_IO + +type_2_prototype: +.word 1 +.word 4 +.word type_2_dispatch +.word -1 + + +type_3_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word function_length_at_String +.word function_concat_at_String +.word function_substr_at_String +.word __ctor_String + +type_3_prototype: +.word 2 +.word 6 +.word type_3_dispatch +.word 0 +.word 0 +.word -1 + + +type_4_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __ctor_Int + +type_4_prototype: +.word 3 +.word 5 +.word type_4_dispatch +.word 0 +.word -1 + + +type_5_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __ctor_Bool + +type_5_prototype: +.word 4 +.word 5 +.word type_5_dispatch +.word 0 +.word -1 + + +type_6_dispatch: +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_cons_at_List +.word function_head_at_List +.word function_isNil_at_List +.word function_tail_at_List +.word __attributes_ctor_List +.word __ctor_List + +type_6_prototype: +.word 5 +.word 4 +.word type_6_dispatch +.word -1 + + +type_7_dispatch: +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_cons_at_List +.word function_head_at_Cons +.word function_isNil_at_Cons +.word function_tail_at_Cons +.word function_init_at_Cons +.word __attributes_ctor_Cons +.word __ctor_Cons + +type_7_prototype: +.word 6 +.word 6 +.word type_7_dispatch +.word 0 +.word 0 +.word -1 + + +type_8_dispatch: +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_main_at_Main +.word function_print_list_at_Main +.word __attributes_ctor_Main +.word __ctor_Main + +type_8_prototype: +.word 7 +.word 5 +.word type_8_dispatch +.word 0 +.word -1 + + +.text +.globl main +__ctor_Object: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 0 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_abort_at_Object: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +la $t0 data_11 +sw $t0 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +la $t0 data_9 +sw $t0 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +li $v0 10 +syscall +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_type_name_at_Object: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_copy_at_Object: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $a0 4($t0) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t0 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 1 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_out_string_at_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +lw $v0 4($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_out_int_at_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -12($fp) +li $v0 1 +lw $a0 -12($fp) +syscall +lw $v0 4($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_in_string_at_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +jal read_string +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_in_int_at_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $v0 5 +syscall +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_String: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +li $t0 2 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -20($fp) +lw $t0 -20($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $a0 0($fp) +jal length +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -20($fp) +lw $t1 -12($fp) +sw $t1 16($t0) +lw $v0 -20($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_length_at_String: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 16($t0) +sw $t1 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_concat_at_String: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -24 +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -32($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 4($fp) +lw $t1 16($t0) +sw $t1 -24($fp) +lw $t0 0($fp) +lw $t1 16($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 12($t0) +sw $t1 -24($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 -20($fp) +add $t0 $t0 $t1 +sw $t0 -24($fp) +lw $a0 -32($fp) +lw $a1 -28($fp) +lw $a2 -24($fp) +jal concat +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 24 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_substr_at_String: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -36 +lw $t0 8($fp) +lw $t1 12($t0) +sw $t1 -16($fp) +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -40($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -36($fp) +lw $t0 8($fp) +lw $t1 16($t0) +sw $t1 -32($fp) +lw $t0 -32($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 -36($fp) +lw $t1 -40($fp) +add $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -28($fp) +lw $t1 -24($fp) +slt $t1 $t0 $t1 +sw $t1 -20($fp) +lw $t0 -20($fp) +bne $t0 $zero label_1 +j label_2 +label_1: +li $v0 4 +la $a0 data_12 +syscall +li $v0 10 +syscall +label_2: +lw $a0 -16($fp) +lw $a1 -40($fp) +lw $a2 -36($fp) +jal substr +sw $v0 -44($fp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 36 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_Int: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 3 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_Bool: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 4 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +jal __ctor_Main +sw $v0 -12($fp) +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal function_main_at_Main +addi $sp $sp 4 +sw $v0 -12($fp) +li $v0 0 +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +li $v0 10 +syscall + +__attributes_ctor_List: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp 0 +lw $v0 0($fp) +addi $sp $sp 0 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_isNil_at_List: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_head_at_List: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -20($fp) +lw $t0 -20($fp) +bne $t0 $zero label_3 +j label_4 +label_3: +li $v0 4 +la $a0 data_13 +syscall +li $v0 10 +syscall +label_4: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 0($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -16($fp) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_tail_at_List: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_5 +j label_6 +label_5: +li $v0 4 +la $a0 data_14 +syscall +li $v0 10 +syscall +label_6: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 0($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 0($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_cons_at_List: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +jal __ctor_Cons +sw $v0 -20($fp) +lw $t0 -20($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_7 +j label_8 +label_7: +li $v0 4 +la $a0 data_15 +syscall +li $v0 10 +syscall +label_8: +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_List: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 5 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_List +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__attributes_ctor_Cons: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_List +addi $sp $sp 4 +sw $v0 -20($fp) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -16($fp) +lw $t0 0($fp) +lw $t1 -16($fp) +sw $t1 12($t0) +lw $t0 0($fp) +lw $t1 -12($fp) +sw $t1 16($t0) +lw $v0 0($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_isNil_at_Cons: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_head_at_Cons: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp 0 +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $v0 0($sp) +addi $sp $sp 4 +addi $sp $sp 0 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_tail_at_Cons: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp 0 +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $v0 0($sp) +addi $sp $sp 4 +addi $sp $sp 0 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_init_at_Cons: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp 0 +lw $t0 4($fp) +lw $t1 8($fp) +addi $t1 $t1 12 +sw $t0 0($t1) +lw $t0 0($fp) +lw $t1 8($fp) +addi $t1 $t1 16 +sw $t0 0($t1) +lw $v0 8($fp) +addi $sp $sp 0 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_Cons: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 6 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_Cons +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__attributes_ctor_Main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 -12($fp) +sw $t1 12($t0) +lw $v0 0($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_print_list_at_Main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -80 +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -80($fp) +lw $t0 -80($fp) +bne $t0 $zero label_9 +j label_10 +label_9: +li $v0 4 +la $a0 data_16 +syscall +li $v0 10 +syscall +label_10: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -76($fp) +lw $t0 -76($fp) +lw $t1 12($t0) +sw $t1 -84($fp) +lw $t0 -84($fp) +bne $t0 $zero label_21 +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -72($fp) +lw $t0 -72($fp) +bne $t0 $zero label_11 +j label_12 +label_11: +li $v0 4 +la $a0 data_17 +syscall +li $v0 10 +syscall +label_12: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 16($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -68($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -64($fp) +lw $t0 -64($fp) +bne $t0 $zero label_13 +j label_14 +label_13: +li $v0 4 +la $a0 data_18 +syscall +li $v0 10 +syscall +label_14: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -68($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -60($fp) +la $t0 data_19 +sw $t0 -56($fp) +lw $t0 -56($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -52($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -48($fp) +lw $t0 -48($fp) +bne $t0 $zero label_15 +j label_16 +label_15: +li $v0 4 +la $a0 data_20 +syscall +li $v0 10 +syscall +label_16: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -52($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -44($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -40($fp) +lw $t0 -40($fp) +bne $t0 $zero label_17 +j label_18 +label_17: +li $v0 4 +la $a0 data_21 +syscall +li $v0 10 +syscall +label_18: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_19 +j label_20 +label_19: +li $v0 4 +la $a0 data_22 +syscall +li $v0 10 +syscall +label_20: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -28($fp) +lw $t0 -28($fp) +sw $t0 -88($fp) +j label_24 +label_21: +la $t0 data_23 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_22 +j label_23 +label_22: +li $v0 4 +la $a0 data_24 +syscall +li $v0 10 +syscall +label_23: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -88($fp) +label_24: +lw $v0 -88($fp) +addi $sp $sp 80 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_main_at_Main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -104 +li $t0 5 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -112($fp) +li $t0 4 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -108($fp) +li $t0 3 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -104($fp) +li $t0 2 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -100($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -96($fp) +jal __ctor_List +sw $v0 -92($fp) +lw $t0 -92($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -88($fp) +lw $t0 -88($fp) +bne $t0 $zero label_25 +j label_26 +label_25: +li $v0 4 +la $a0 data_25 +syscall +li $v0 10 +syscall +label_26: +lw $t0 -92($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -96($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -92($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -84($fp) +lw $t0 -84($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -80($fp) +lw $t0 -80($fp) +bne $t0 $zero label_27 +j label_28 +label_27: +li $v0 4 +la $a0 data_26 +syscall +li $v0 10 +syscall +label_28: +lw $t0 -84($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -100($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -84($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -76($fp) +lw $t0 -76($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -72($fp) +lw $t0 -72($fp) +bne $t0 $zero label_29 +j label_30 +label_29: +li $v0 4 +la $a0 data_27 +syscall +li $v0 10 +syscall +label_30: +lw $t0 -76($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -104($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -76($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -68($fp) +lw $t0 -68($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -64($fp) +lw $t0 -64($fp) +bne $t0 $zero label_31 +j label_32 +label_31: +li $v0 4 +la $a0 data_28 +syscall +li $v0 10 +syscall +label_32: +lw $t0 -68($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -108($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -68($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -60($fp) +lw $t0 -60($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -56($fp) +lw $t0 -56($fp) +bne $t0 $zero label_33 +j label_34 +label_33: +li $v0 4 +la $a0 data_29 +syscall +li $v0 10 +syscall +label_34: +lw $t0 -60($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -112($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -60($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -52($fp) +lw $t0 -52($fp) +lw $t1 0($fp) +addi $t1 $t1 12 +sw $t0 0($t1) +label_35: +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_36 +j label_37 +label_36: +li $v0 4 +la $a0 data_30 +syscall +li $v0 10 +syscall +label_37: +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t0 -28($fp) +lw $t1 12($t0) +sw $t1 -40($fp) +lw $t0 -40($fp) +xori $t0 $t0 1 +sw $t0 -36($fp) +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -44($fp) +lw $t0 -44($fp) +lw $t1 12($t0) +sw $t1 -48($fp) +lw $t0 -48($fp) +bne $t0 $zero label_38 +j label_43 +label_38: +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_39 +j label_40 +label_39: +li $v0 4 +la $a0 data_31 +syscall +li $v0 10 +syscall +label_40: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -20($fp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_41 +j label_42 +label_41: +li $v0 4 +la $a0 data_32 +syscall +li $v0 10 +syscall +label_42: +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 0($fp) +addi $t1 $t1 12 +sw $t0 0($t1) +j label_35 +label_43: +li $v0 0 +addi $sp $sp 104 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_Main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 7 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_Main +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + + + +equal_str: +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $a0 8($sp) +sw $a1 12($sp) +sw $t2 16($sp) +sw $t3 20($sp) +move $t0 $a0 +move $t1 $a1 +while_equal_str: +lb $t2 0($t0) +lb $t3 0($t1) +bne $t2 $t3 equal_str_different_strings +beq $t2 $zero first_end_equal_str +beq $t3 $zero second_end_equal_str +addi $t1 $t1 1 +addi $t0 $t0 1 +j while_equal_str +equal_str_different_strings: +move $v0 $zero +j equal_str_end +first_end_equal_str: +beq $t3 $zero second_end_equal_str +move $v0 $zero +j equal_str_end +second_end_equal_str: +li $v0 1 +equal_str_end: +lw $t0 0($sp) +lw $t1 4($sp) +lw $a0 8($sp) +lw $a1 12($sp) +lw $t2 16($sp) +lw $t3 20($sp) +addiu $sp $sp 24 +jr $ra + +allocate: +addiu $sp $sp -12 +sw $a0 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +li $t0 4 +div $a0 $t0 +mfhi $t1 +sub $t0 $t0 $t1 +add $a0 $a0 $t0 +li $v0 9 +syscall +lw $a0 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +addiu $sp $sp 12 +jr $ra + +copy: +addiu $sp $sp -16 +sw $a0 0($sp) +sw $a1 4($sp) +sw $a2 8($sp) +sw $t0 12($sp) +while_copy: +beq $a2 $zero copy_end +lw $t0 0($a0) +sw $t0 0($a1) +addiu $a0 $a0 4 +addiu $a1 $a1 4 +addi $a2 $a2 -4 +j while_copy +copy_end: +lw $a0 0($sp) +lw $a1 4($sp) +lw $a2 8($sp) +lw $t0 12($sp) +addiu $sp $sp 16 +jr $ra + +read_string: +addiu $sp $sp -28 +sw $ra 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $a2 20($sp) +sw $t2 24($sp) +li $t0 8 +addi $a0 $t0 4 +jal allocate +move $t1 $v0 +move $t2 $zero +while_read_string: +addu $a0 $t1 $t2 +subu $a1 $t0 $t2 +addu $t2 $t2 $a1 +jal read_string_up_to +beq $v0 $zero read_string_not_finished +move $v0 $t1 +j end_read_string +read_string_not_finished: +sll $t0 $t0 1 +addi $a0 $t0 4 +jal allocate +move $a0 $t1 +move $t1 $v0 +move $a1 $v0 +move $a2 $t2 +jal copy +j while_read_string +end_read_string: +lw $ra 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $a2 20($sp) +lw $t2 24($sp) +addiu $sp $sp 28 +jr $ra +read_string_up_to: +addiu $sp $sp -28 +sw $ra 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +sw $t2 12($sp) +sw $t3 16($sp) +sw $t4 20($sp) +sw $t5 24($sp) +move $t0 $a0 +move $t1 $zero +li $t2 10 +addu $t3 $t0 $a1 +addiu $a1 $a1 1 +li $v0 8 +syscall +lw $a0 0($a0) +beq $a0 $zero eol_terminated +li $v0 0 +eol_check: +beq $t0 $t3 read_loop_continue +lb $t1 0($t0) +beq $t1 $t2 eol_terminated +addiu $t0 $t0 1 +j eol_check +eol_terminated: +sb $zero 0($t0) +li $v0 1 +read_loop_continue: +lw $ra 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +lw $t2 12($sp) +lw $t3 16($sp) +lw $t4 20($sp) +lw $t5 24($sp) +addiu $sp $sp 28 +jr $ra + +substr: +addiu $sp $sp -32 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $t3 12($sp) +sw $a0 16($sp) +sw $a1 20($sp) +sw $a2 24($sp) +sw $ra 28($sp) +move $t0 $a0 +add $t0 $t0 $a1 +li $t1 4 +div $a2 $t1 +mfhi $t2 +bne $t2 $zero substr_allign_size +move $t1 $a2 +j substr_new_chunk +substr_allign_size: +sub $t1 $t1 $t2 +add $t1 $t1 $a2 +substr_new_chunk: +move $a0 $t1 +jal allocate +move $t3 $v0 +move $t1 $zero +while_substr_copy: +beq $t1 $a2 substr_end +lb $t2 0($t0) +sb $t2 0($t3) +addiu $t0 $t0 1 +addiu $t3 $t3 1 +addiu $t1 $t1 1 +j while_substr_copy +substr_end: +sb $zero 0($t3) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $t3 12($sp) +lw $a0 16($sp) +lw $a1 20($sp) +lw $a2 24($sp) +lw $ra 28($sp) +addiu $sp $sp 32 +jr $ra + +concat: +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $ra 20($sp) +move $t0 $a0 +move $t1 $a1 +addiu $a0 $a2 1 +li $t2 4 +div $a0 $t2 +mfhi $a0 +bne $a0 $zero concat_allign_size +addiu $a0 $a2 1 +j concat_size_allignned +concat_allign_size: +sub $t2 $t2 $a0 +add $a0 $a2 $t2 +addiu $a0 $a0 1 +concat_size_allignned: +jal allocate +move $t2 $v0 +j first_while_concat_copy +first_while_concat_copy: +lb $a0 0($t0) +beq $a0 $zero second_while_concat_copy +sb $a0 0($t2) +addiu $t0 $t0 1 +addiu $t2 $t2 1 +j first_while_concat_copy +second_while_concat_copy: +lb $a0 0($t1) +beq $a0 $zero concat_end +sb $a0 0($t2) +addiu $t1 $t1 1 +addiu $t2 $t2 1 +j second_while_concat_copy +concat_end: +sb $zero 0($t2) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $ra 20($sp) +addiu $sp $sp 24 +jr $ra + +length: +addiu $sp $sp -8 +sw $t0 0($sp) +sw $t1 4($sp) +move $t0 $a0 +move $v0 $zero +while_len: +lb $t1 0($t0) +beq $t1 $zero len_end +addi $v0 $v0 1 +addiu $t0 $t0 1 +j while_len +len_end: +lw $t0 0($sp) +lw $t1 4($sp) +addiu $sp $sp 8 +jr $ra \ No newline at end of file diff --git a/tests/codegen/new_complex.mips b/tests/codegen/new_complex.mips new file mode 100644 index 000000000..0c2a8fa5e --- /dev/null +++ b/tests/codegen/new_complex.mips @@ -0,0 +1,3093 @@ +.data +default_str: .asciiz "" +.word 0 +data_1: .asciiz "Object" +.word 0 +data_2: .asciiz "IO" +.word 0 +data_3: .asciiz "String" +.word 0 +data_4: .asciiz "Int" +.word 0 +data_5: .asciiz "Bool" +.word 0 +data_6: .asciiz "Main" +.word 0 +data_7: .asciiz "Complex" +.word 0 +data_8: .asciiz " +" +.word 0 +data_9: .asciiz "" +.word 0 +data_10: .asciiz "Abort called from class " +.word 0 +data_11: .asciiz "Index out of range exception" +.word 0 +data_12: .asciiz "Function call in a void instance" +.word 0 +data_13: .asciiz "Function call in a void instance" +.word 0 +data_14: .asciiz "Function call in a void instance" +.word 0 +data_15: .asciiz "=(\n" +.word 0 +data_16: .asciiz "Function call in a void instance" +.word 0 +data_17: .asciiz "=)\n" +.word 0 +data_18: .asciiz "Function call in a void instance" +.word 0 +data_19: .asciiz "Function call in a void instance" +.word 0 +data_20: .asciiz "Function call in a void instance" +.word 0 +data_21: .asciiz "Function call in a void instance" +.word 0 +data_22: .asciiz "Function call in a void instance" +.word 0 +data_23: .asciiz "=(\n" +.word 0 +data_24: .asciiz "Function call in a void instance" +.word 0 +data_25: .asciiz "=)\n" +.word 0 +data_26: .asciiz "Function call in a void instance" +.word 0 +data_27: .asciiz "I" +.word 0 +data_28: .asciiz "+" +.word 0 +data_29: .asciiz "Function call in a void instance" +.word 0 +data_30: .asciiz "Function call in a void instance" +.word 0 +data_31: .asciiz "Function call in a void instance" +.word 0 +data_32: .asciiz "Function call in a void instance" +.word 0 +data_33: .asciiz "Function call in a void instance" +.word 0 +data_34: .asciiz "Function call in a void instance" +.word 0 +data_35: .asciiz "Function call in a void instance" + + +types_table: +.word data_1 +.word data_2 +.word data_3 +.word data_4 +.word data_5 +.word data_6 +.word data_7 + +prototype_table: + .word type_1_prototype + .word type_2_prototype + .word type_3_prototype + .word type_4_prototype + .word type_5_prototype + .word type_6_prototype + .word type_7_prototype + +type_1_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __ctor_Object + +type_1_prototype: +.word 0 +.word 4 +.word type_1_dispatch +.word -1 + + +type_2_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word function_out_string_at_IO +.word function_out_int_at_IO +.word function_in_string_at_IO +.word function_in_int_at_IO +.word __ctor_IO + +type_2_prototype: +.word 1 +.word 4 +.word type_2_dispatch +.word -1 + + +type_3_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word function_length_at_String +.word function_concat_at_String +.word function_substr_at_String +.word __ctor_String + +type_3_prototype: +.word 2 +.word 6 +.word type_3_dispatch +.word 0 +.word 0 +.word -1 + + +type_4_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __ctor_Int + +type_4_prototype: +.word 3 +.word 5 +.word type_4_dispatch +.word 0 +.word -1 + + +type_5_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __ctor_Bool + +type_5_prototype: +.word 4 +.word 5 +.word type_5_dispatch +.word 0 +.word -1 + + +type_6_dispatch: +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_main_at_Main +.word __attributes_ctor_Main +.word __ctor_Main + +type_6_prototype: +.word 5 +.word 4 +.word type_6_dispatch +.word -1 + + +type_7_dispatch: +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_equal_at_Complex +.word function_init_at_Complex +.word function_print_at_Complex +.word function_reflect_0_at_Complex +.word function_reflect_X_at_Complex +.word function_reflect_Y_at_Complex +.word function_x_value_at_Complex +.word function_y_value_at_Complex +.word __attributes_ctor_Complex +.word __ctor_Complex + +type_7_prototype: +.word 6 +.word 6 +.word type_7_dispatch +.word 0 +.word 0 +.word -1 + + +.text +.globl main +__ctor_Object: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 0 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_abort_at_Object: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +la $t0 data_10 +sw $t0 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +la $t0 data_8 +sw $t0 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +li $v0 10 +syscall +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_type_name_at_Object: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_copy_at_Object: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $a0 4($t0) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t0 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 1 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_out_string_at_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +lw $v0 4($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_out_int_at_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -12($fp) +li $v0 1 +lw $a0 -12($fp) +syscall +lw $v0 4($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_in_string_at_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +jal read_string +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_in_int_at_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $v0 5 +syscall +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_String: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +li $t0 2 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -20($fp) +lw $t0 -20($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $a0 0($fp) +jal length +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -20($fp) +lw $t1 -12($fp) +sw $t1 16($t0) +lw $v0 -20($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_length_at_String: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 16($t0) +sw $t1 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_concat_at_String: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -24 +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -32($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 4($fp) +lw $t1 16($t0) +sw $t1 -24($fp) +lw $t0 0($fp) +lw $t1 16($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 12($t0) +sw $t1 -24($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 -20($fp) +add $t0 $t0 $t1 +sw $t0 -24($fp) +lw $a0 -32($fp) +lw $a1 -28($fp) +lw $a2 -24($fp) +jal concat +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 24 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_substr_at_String: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -36 +lw $t0 8($fp) +lw $t1 12($t0) +sw $t1 -16($fp) +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -40($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -36($fp) +lw $t0 8($fp) +lw $t1 16($t0) +sw $t1 -32($fp) +lw $t0 -32($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 -36($fp) +lw $t1 -40($fp) +add $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -28($fp) +lw $t1 -24($fp) +slt $t1 $t0 $t1 +sw $t1 -20($fp) +lw $t0 -20($fp) +bne $t0 $zero label_1 +j label_2 +label_1: +li $v0 4 +la $a0 data_11 +syscall +li $v0 10 +syscall +label_2: +lw $a0 -16($fp) +lw $a1 -40($fp) +lw $a2 -36($fp) +jal substr +sw $v0 -44($fp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 36 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_Int: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 3 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_Bool: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 4 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +jal __ctor_Main +sw $v0 -12($fp) +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal function_main_at_Main +addi $sp $sp 4 +sw $v0 -12($fp) +li $v0 0 +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +li $v0 10 +syscall + +__attributes_ctor_Main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp 0 +lw $v0 0($fp) +addi $sp $sp 0 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_main_at_Main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -188 +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -192($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -188($fp) +jal __ctor_Complex +sw $v0 -184($fp) +lw $t0 -184($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -180($fp) +lw $t0 -180($fp) +bne $t0 $zero label_3 +j label_4 +label_3: +li $v0 4 +la $a0 data_12 +syscall +li $v0 10 +syscall +label_4: +lw $t0 -184($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -192($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -188($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -184($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -176($fp) +lw $t0 -176($fp) +sw $t0 -196($fp) +lw $t0 -196($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -128($fp) +lw $t0 -128($fp) +bne $t0 $zero label_5 +j label_6 +label_5: +li $v0 4 +la $a0 data_13 +syscall +li $v0 10 +syscall +label_6: +lw $t0 -196($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -196($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 44($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -124($fp) +lw $t0 -196($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -120($fp) +lw $t0 -120($fp) +bne $t0 $zero label_7 +j label_8 +label_7: +li $v0 4 +la $a0 data_14 +syscall +li $v0 10 +syscall +label_8: +lw $t0 -196($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -196($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 40($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -116($fp) +lw $t0 -124($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -156($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -148($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -140($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -144($fp) +lw $t0 -156($fp) +lw $t1 -148($fp) +seq $t0 $t0 $t1 +sw $t0 -136($fp) +lw $t0 -136($fp) +bne $t0 $zero label_9 +lw $t0 -156($fp) +lw $t1 -140($fp) +seq $t0 $t0 $t1 +sw $t0 -136($fp) +lw $t0 -136($fp) +bne $t0 $zero label_10 +lw $t0 -156($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -136($fp) +lw $t0 -136($fp) +bne $t0 $zero label_11 +lw $t0 -124($fp) +lw $t1 -116($fp) +seq $t0 $t0 $t1 +sw $t0 -132($fp) +j label_12 +label_9: +lw $t0 -124($fp) +lw $t1 12($t0) +sw $t1 -160($fp) +lw $t0 -116($fp) +lw $t1 12($t0) +sw $t1 -152($fp) +lw $t0 -160($fp) +lw $t1 -152($fp) +seq $t0 $t0 $t1 +sw $t0 -132($fp) +j label_12 +label_10: +lw $t0 -124($fp) +lw $t1 12($t0) +sw $t1 -160($fp) +lw $t0 -116($fp) +lw $t1 12($t0) +sw $t1 -152($fp) +lw $t0 -160($fp) +move $a0 $t0 +lw $t0 -152($fp) +move $a1 $t0 +jal equal_str +sw $v0 -132($fp) +j label_12 +label_11: +lw $t0 -124($fp) +lw $t1 12($t0) +sw $t1 -160($fp) +lw $t0 -116($fp) +lw $t1 12($t0) +sw $t1 -152($fp) +lw $t0 -160($fp) +lw $t1 -152($fp) +seq $t0 $t0 $t1 +sw $t0 -132($fp) +j label_12 +label_12: +lw $t0 -132($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -164($fp) +lw $t0 -164($fp) +lw $t1 12($t0) +sw $t1 -168($fp) +lw $t0 -168($fp) +bne $t0 $zero label_15 +la $t0 data_15 +sw $t0 -112($fp) +lw $t0 -112($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -108($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -104($fp) +lw $t0 -104($fp) +bne $t0 $zero label_13 +j label_14 +label_13: +li $v0 4 +la $a0 data_16 +syscall +li $v0 10 +syscall +label_14: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -108($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -100($fp) +lw $t0 -100($fp) +sw $t0 -172($fp) +j label_18 +label_15: +la $t0 data_17 +sw $t0 -96($fp) +lw $t0 -96($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -92($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -88($fp) +lw $t0 -88($fp) +bne $t0 $zero label_16 +j label_17 +label_16: +li $v0 4 +la $a0 data_18 +syscall +li $v0 10 +syscall +label_17: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -92($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -84($fp) +lw $t0 -84($fp) +sw $t0 -172($fp) +label_18: +lw $t0 -196($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -72($fp) +lw $t0 -72($fp) +bne $t0 $zero label_19 +j label_20 +label_19: +li $v0 4 +la $a0 data_19 +syscall +li $v0 10 +syscall +label_20: +lw $t0 -196($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -196($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 40($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -68($fp) +lw $t0 -196($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -64($fp) +lw $t0 -64($fp) +bne $t0 $zero label_21 +j label_22 +label_21: +li $v0 4 +la $a0 data_20 +syscall +li $v0 10 +syscall +label_22: +lw $t0 -196($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -196($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 44($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -60($fp) +lw $t0 -60($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -56($fp) +lw $t0 -56($fp) +bne $t0 $zero label_23 +j label_24 +label_23: +li $v0 4 +la $a0 data_21 +syscall +li $v0 10 +syscall +label_24: +lw $t0 -60($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -60($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 48($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -52($fp) +lw $t0 -52($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -48($fp) +lw $t0 -48($fp) +bne $t0 $zero label_25 +j label_26 +label_25: +li $v0 4 +la $a0 data_22 +syscall +li $v0 10 +syscall +label_26: +lw $t0 -52($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -68($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -52($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -44($fp) +lw $t0 -44($fp) +lw $t1 12($t0) +sw $t1 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_29 +la $t0 data_23 +sw $t0 -40($fp) +lw $t0 -40($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_27 +j label_28 +label_27: +li $v0 4 +la $a0 data_24 +syscall +li $v0 10 +syscall +label_28: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -28($fp) +lw $t0 -28($fp) +sw $t0 -80($fp) +j label_32 +label_29: +la $t0 data_25 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_30 +j label_31 +label_30: +li $v0 4 +la $a0 data_26 +syscall +li $v0 10 +syscall +label_31: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -80($fp) +label_32: +lw $v0 -80($fp) +addi $sp $sp 188 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_Main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 5 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_Main +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__attributes_ctor_Complex: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -16($fp) +lw $t0 0($fp) +lw $t1 -16($fp) +sw $t1 12($t0) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 0($fp) +lw $t1 -12($fp) +sw $t1 16($t0) +lw $v0 0($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_init_at_Complex: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -72 +lw $t4 8($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -72($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -64($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -56($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -60($fp) +lw $t0 -72($fp) +lw $t1 -64($fp) +seq $t0 $t0 $t1 +sw $t0 -52($fp) +lw $t0 -52($fp) +bne $t0 $zero label_33 +lw $t0 -72($fp) +lw $t1 -56($fp) +seq $t0 $t0 $t1 +sw $t0 -52($fp) +lw $t0 -52($fp) +bne $t0 $zero label_34 +lw $t0 -72($fp) +lw $t1 -60($fp) +seq $t0 $t0 $t1 +sw $t0 -52($fp) +lw $t0 -52($fp) +bne $t0 $zero label_35 +lw $t4 8($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 4($fp) +seq $t0 $t0 $t1 +sw $t0 -48($fp) +j label_36 +label_33: +lw $t4 8($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -76($fp) +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -68($fp) +lw $t0 -76($fp) +lw $t1 -68($fp) +seq $t0 $t0 $t1 +sw $t0 -48($fp) +j label_36 +label_34: +lw $t4 8($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -76($fp) +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -68($fp) +lw $t0 -76($fp) +move $a0 $t0 +lw $t0 -68($fp) +move $a1 $t0 +jal equal_str +sw $v0 -48($fp) +j label_36 +label_35: +lw $t4 8($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -76($fp) +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -68($fp) +lw $t0 -76($fp) +lw $t1 -68($fp) +seq $t0 $t0 $t1 +sw $t0 -48($fp) +j label_36 +label_36: +lw $t0 -48($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -80($fp) +lw $t4 8($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -36($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -28($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -20($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -24($fp) +lw $t0 -36($fp) +lw $t1 -28($fp) +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_37 +lw $t0 -36($fp) +lw $t1 -20($fp) +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_38 +lw $t0 -36($fp) +lw $t1 -24($fp) +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_39 +lw $t4 8($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 0($fp) +seq $t0 $t0 $t1 +sw $t0 -12($fp) +j label_40 +label_37: +lw $t4 8($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -40($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -32($fp) +lw $t0 -40($fp) +lw $t1 -32($fp) +seq $t0 $t0 $t1 +sw $t0 -12($fp) +j label_40 +label_38: +lw $t4 8($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -40($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -32($fp) +lw $t0 -40($fp) +move $a0 $t0 +lw $t0 -32($fp) +move $a1 $t0 +jal equal_str +sw $v0 -12($fp) +j label_40 +label_39: +lw $t4 8($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -40($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -32($fp) +lw $t0 -40($fp) +lw $t1 -32($fp) +seq $t0 $t0 $t1 +sw $t0 -12($fp) +j label_40 +label_40: +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -44($fp) +lw $v0 8($fp) +addi $sp $sp 72 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_print_at_Complex: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -104 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -68($fp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -96($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -88($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -80($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -84($fp) +lw $t0 -96($fp) +lw $t1 -88($fp) +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_41 +lw $t0 -96($fp) +lw $t1 -80($fp) +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_42 +lw $t0 -96($fp) +lw $t1 -84($fp) +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_43 +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 -68($fp) +seq $t0 $t0 $t1 +sw $t0 -72($fp) +j label_44 +label_41: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -100($fp) +lw $t0 -68($fp) +lw $t1 12($t0) +sw $t1 -92($fp) +lw $t0 -100($fp) +lw $t1 -92($fp) +seq $t0 $t0 $t1 +sw $t0 -72($fp) +j label_44 +label_42: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -100($fp) +lw $t0 -68($fp) +lw $t1 12($t0) +sw $t1 -92($fp) +lw $t0 -100($fp) +move $a0 $t0 +lw $t0 -92($fp) +move $a1 $t0 +jal equal_str +sw $v0 -72($fp) +j label_44 +label_43: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -100($fp) +lw $t0 -68($fp) +lw $t1 12($t0) +sw $t1 -92($fp) +lw $t0 -100($fp) +lw $t1 -92($fp) +seq $t0 $t0 $t1 +sw $t0 -72($fp) +j label_44 +label_44: +lw $t0 -72($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -104($fp) +lw $t0 -104($fp) +lw $t1 12($t0) +sw $t1 -108($fp) +lw $t0 -108($fp) +bne $t0 $zero label_53 +la $t0 data_27 +sw $t0 -64($fp) +lw $t0 -64($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -60($fp) +la $t0 data_28 +sw $t0 -56($fp) +lw $t0 -56($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -52($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -48($fp) +lw $t0 -48($fp) +bne $t0 $zero label_45 +j label_46 +label_45: +li $v0 4 +la $a0 data_29 +syscall +li $v0 10 +syscall +label_46: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -44($fp) +lw $t0 -44($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -40($fp) +lw $t0 -40($fp) +bne $t0 $zero label_47 +j label_48 +label_47: +li $v0 4 +la $a0 data_30 +syscall +li $v0 10 +syscall +label_48: +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -52($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -36($fp) +lw $t0 -36($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_49 +j label_50 +label_49: +li $v0 4 +la $a0 data_31 +syscall +li $v0 10 +syscall +label_50: +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -28($fp) +lw $t0 -28($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_51 +j label_52 +label_51: +li $v0 4 +la $a0 data_32 +syscall +li $v0 10 +syscall +label_52: +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -60($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -20($fp) +lw $t0 -20($fp) +sw $t0 -112($fp) +j label_56 +label_53: +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_54 +j label_55 +label_54: +li $v0 4 +la $a0 data_33 +syscall +li $v0 10 +syscall +label_55: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -112($fp) +label_56: +lw $v0 -112($fp) +addi $sp $sp 104 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_reflect_0_at_Complex: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -96 +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -64($fp) +lw $t0 -64($fp) +not $t0 $t0 +addi $t0 $t0 1 +sw $t0 -60($fp) +lw $t0 -60($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -68($fp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -96($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -88($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -80($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -84($fp) +lw $t0 -96($fp) +lw $t1 -88($fp) +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_57 +lw $t0 -96($fp) +lw $t1 -80($fp) +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_58 +lw $t0 -96($fp) +lw $t1 -84($fp) +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_59 +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 -68($fp) +seq $t0 $t0 $t1 +sw $t0 -72($fp) +j label_60 +label_57: +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -100($fp) +lw $t0 -68($fp) +lw $t1 12($t0) +sw $t1 -92($fp) +lw $t0 -100($fp) +lw $t1 -92($fp) +seq $t0 $t0 $t1 +sw $t0 -72($fp) +j label_60 +label_58: +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -100($fp) +lw $t0 -68($fp) +lw $t1 12($t0) +sw $t1 -92($fp) +lw $t0 -100($fp) +move $a0 $t0 +lw $t0 -92($fp) +move $a1 $t0 +jal equal_str +sw $v0 -72($fp) +j label_60 +label_59: +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -100($fp) +lw $t0 -68($fp) +lw $t1 12($t0) +sw $t1 -92($fp) +lw $t0 -100($fp) +lw $t1 -92($fp) +seq $t0 $t0 $t1 +sw $t0 -72($fp) +j label_60 +label_60: +lw $t0 -72($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -104($fp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -16($fp) +lw $t0 -16($fp) +not $t0 $t0 +addi $t0 $t0 1 +sw $t0 -12($fp) +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -48($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -40($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -32($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -36($fp) +lw $t0 -48($fp) +lw $t1 -40($fp) +seq $t0 $t0 $t1 +sw $t0 -28($fp) +lw $t0 -28($fp) +bne $t0 $zero label_61 +lw $t0 -48($fp) +lw $t1 -32($fp) +seq $t0 $t0 $t1 +sw $t0 -28($fp) +lw $t0 -28($fp) +bne $t0 $zero label_62 +lw $t0 -48($fp) +lw $t1 -36($fp) +seq $t0 $t0 $t1 +sw $t0 -28($fp) +lw $t0 -28($fp) +bne $t0 $zero label_63 +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 -20($fp) +seq $t0 $t0 $t1 +sw $t0 -24($fp) +j label_64 +label_61: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -52($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -44($fp) +lw $t0 -52($fp) +lw $t1 -44($fp) +seq $t0 $t0 $t1 +sw $t0 -24($fp) +j label_64 +label_62: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -52($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -44($fp) +lw $t0 -52($fp) +move $a0 $t0 +lw $t0 -44($fp) +move $a1 $t0 +jal equal_str +sw $v0 -24($fp) +j label_64 +label_63: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -52($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -44($fp) +lw $t0 -52($fp) +lw $t1 -44($fp) +seq $t0 $t0 $t1 +sw $t0 -24($fp) +j label_64 +label_64: +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -56($fp) +lw $v0 0($fp) +addi $sp $sp 96 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_reflect_X_at_Complex: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -48 +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -16($fp) +lw $t0 -16($fp) +not $t0 $t0 +addi $t0 $t0 1 +sw $t0 -12($fp) +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -48($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -40($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -32($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -36($fp) +lw $t0 -48($fp) +lw $t1 -40($fp) +seq $t0 $t0 $t1 +sw $t0 -28($fp) +lw $t0 -28($fp) +bne $t0 $zero label_65 +lw $t0 -48($fp) +lw $t1 -32($fp) +seq $t0 $t0 $t1 +sw $t0 -28($fp) +lw $t0 -28($fp) +bne $t0 $zero label_66 +lw $t0 -48($fp) +lw $t1 -36($fp) +seq $t0 $t0 $t1 +sw $t0 -28($fp) +lw $t0 -28($fp) +bne $t0 $zero label_67 +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 -20($fp) +seq $t0 $t0 $t1 +sw $t0 -24($fp) +j label_68 +label_65: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -52($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -44($fp) +lw $t0 -52($fp) +lw $t1 -44($fp) +seq $t0 $t0 $t1 +sw $t0 -24($fp) +j label_68 +label_66: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -52($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -44($fp) +lw $t0 -52($fp) +move $a0 $t0 +lw $t0 -44($fp) +move $a1 $t0 +jal equal_str +sw $v0 -24($fp) +j label_68 +label_67: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -52($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -44($fp) +lw $t0 -52($fp) +lw $t1 -44($fp) +seq $t0 $t0 $t1 +sw $t0 -24($fp) +j label_68 +label_68: +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -56($fp) +lw $v0 0($fp) +addi $sp $sp 48 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_reflect_Y_at_Complex: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -48 +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -16($fp) +lw $t0 -16($fp) +not $t0 $t0 +addi $t0 $t0 1 +sw $t0 -12($fp) +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -48($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -40($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -32($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -36($fp) +lw $t0 -48($fp) +lw $t1 -40($fp) +seq $t0 $t0 $t1 +sw $t0 -28($fp) +lw $t0 -28($fp) +bne $t0 $zero label_69 +lw $t0 -48($fp) +lw $t1 -32($fp) +seq $t0 $t0 $t1 +sw $t0 -28($fp) +lw $t0 -28($fp) +bne $t0 $zero label_70 +lw $t0 -48($fp) +lw $t1 -36($fp) +seq $t0 $t0 $t1 +sw $t0 -28($fp) +lw $t0 -28($fp) +bne $t0 $zero label_71 +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 -20($fp) +seq $t0 $t0 $t1 +sw $t0 -24($fp) +j label_72 +label_69: +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -52($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -44($fp) +lw $t0 -52($fp) +lw $t1 -44($fp) +seq $t0 $t0 $t1 +sw $t0 -24($fp) +j label_72 +label_70: +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -52($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -44($fp) +lw $t0 -52($fp) +move $a0 $t0 +lw $t0 -44($fp) +move $a1 $t0 +jal equal_str +sw $v0 -24($fp) +j label_72 +label_71: +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -52($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -44($fp) +lw $t0 -52($fp) +lw $t1 -44($fp) +seq $t0 $t0 $t1 +sw $t0 -24($fp) +j label_72 +label_72: +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -56($fp) +lw $v0 0($fp) +addi $sp $sp 48 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_equal_at_Complex: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -116 +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -80($fp) +lw $t0 -80($fp) +bne $t0 $zero label_73 +j label_74 +label_73: +li $v0 4 +la $a0 data_34 +syscall +li $v0 10 +syscall +label_74: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 52($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -76($fp) +lw $t4 4($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -108($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -100($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -92($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -96($fp) +lw $t0 -108($fp) +lw $t1 -100($fp) +seq $t0 $t0 $t1 +sw $t0 -88($fp) +lw $t0 -88($fp) +bne $t0 $zero label_75 +lw $t0 -108($fp) +lw $t1 -92($fp) +seq $t0 $t0 $t1 +sw $t0 -88($fp) +lw $t0 -88($fp) +bne $t0 $zero label_76 +lw $t0 -108($fp) +lw $t1 -96($fp) +seq $t0 $t0 $t1 +sw $t0 -88($fp) +lw $t0 -88($fp) +bne $t0 $zero label_77 +lw $t4 4($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 -76($fp) +seq $t0 $t0 $t1 +sw $t0 -84($fp) +j label_78 +label_75: +lw $t4 4($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -112($fp) +lw $t0 -76($fp) +lw $t1 12($t0) +sw $t1 -104($fp) +lw $t0 -112($fp) +lw $t1 -104($fp) +seq $t0 $t0 $t1 +sw $t0 -84($fp) +j label_78 +label_76: +lw $t4 4($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -112($fp) +lw $t0 -76($fp) +lw $t1 12($t0) +sw $t1 -104($fp) +lw $t0 -112($fp) +move $a0 $t0 +lw $t0 -104($fp) +move $a1 $t0 +jal equal_str +sw $v0 -84($fp) +j label_78 +label_77: +lw $t4 4($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -112($fp) +lw $t0 -76($fp) +lw $t1 12($t0) +sw $t1 -104($fp) +lw $t0 -112($fp) +lw $t1 -104($fp) +seq $t0 $t0 $t1 +sw $t0 -84($fp) +j label_78 +label_78: +lw $t0 -84($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -116($fp) +lw $t0 -116($fp) +lw $t1 12($t0) +sw $t1 -120($fp) +lw $t0 -120($fp) +bne $t0 $zero label_79 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -72($fp) +lw $t0 -72($fp) +sw $t0 -124($fp) +j label_88 +label_79: +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_80 +j label_81 +label_80: +li $v0 4 +la $a0 data_35 +syscall +li $v0 10 +syscall +label_81: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 56($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -52($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -44($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -36($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -40($fp) +lw $t0 -52($fp) +lw $t1 -44($fp) +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_82 +lw $t0 -52($fp) +lw $t1 -36($fp) +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_83 +lw $t0 -52($fp) +lw $t1 -40($fp) +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_84 +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 -20($fp) +seq $t0 $t0 $t1 +sw $t0 -28($fp) +j label_85 +label_82: +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -56($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -48($fp) +lw $t0 -56($fp) +lw $t1 -48($fp) +seq $t0 $t0 $t1 +sw $t0 -28($fp) +j label_85 +label_83: +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -56($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -48($fp) +lw $t0 -56($fp) +move $a0 $t0 +lw $t0 -48($fp) +move $a1 $t0 +jal equal_str +sw $v0 -28($fp) +j label_85 +label_84: +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -56($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -48($fp) +lw $t0 -56($fp) +lw $t1 -48($fp) +seq $t0 $t0 $t1 +sw $t0 -28($fp) +j label_85 +label_85: +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -60($fp) +lw $t0 -60($fp) +lw $t1 12($t0) +sw $t1 -64($fp) +lw $t0 -64($fp) +bne $t0 $zero label_86 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -16($fp) +lw $t0 -16($fp) +sw $t0 -68($fp) +j label_87 +label_86: +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -68($fp) +label_87: +lw $t0 -68($fp) +sw $t0 -124($fp) +label_88: +lw $v0 -124($fp) +addi $sp $sp 116 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_x_value_at_Complex: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp 0 +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $v0 0($sp) +addi $sp $sp 4 +addi $sp $sp 0 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_y_value_at_Complex: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp 0 +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $v0 0($sp) +addi $sp $sp 4 +addi $sp $sp 0 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_Complex: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 6 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_Complex +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + + + +equal_str: +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $a0 8($sp) +sw $a1 12($sp) +sw $t2 16($sp) +sw $t3 20($sp) +move $t0 $a0 +move $t1 $a1 +while_equal_str: +lb $t2 0($t0) +lb $t3 0($t1) +bne $t2 $t3 equal_str_different_strings +beq $t2 $zero first_end_equal_str +beq $t3 $zero second_end_equal_str +addi $t1 $t1 1 +addi $t0 $t0 1 +j while_equal_str +equal_str_different_strings: +move $v0 $zero +j equal_str_end +first_end_equal_str: +beq $t3 $zero second_end_equal_str +move $v0 $zero +j equal_str_end +second_end_equal_str: +li $v0 1 +equal_str_end: +lw $t0 0($sp) +lw $t1 4($sp) +lw $a0 8($sp) +lw $a1 12($sp) +lw $t2 16($sp) +lw $t3 20($sp) +addiu $sp $sp 24 +jr $ra + +allocate: +addiu $sp $sp -12 +sw $a0 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +li $t0 4 +div $a0 $t0 +mfhi $t1 +sub $t0 $t0 $t1 +add $a0 $a0 $t0 +li $v0 9 +syscall +lw $a0 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +addiu $sp $sp 12 +jr $ra + +copy: +addiu $sp $sp -16 +sw $a0 0($sp) +sw $a1 4($sp) +sw $a2 8($sp) +sw $t0 12($sp) +while_copy: +beq $a2 $zero copy_end +lw $t0 0($a0) +sw $t0 0($a1) +addiu $a0 $a0 4 +addiu $a1 $a1 4 +addi $a2 $a2 -4 +j while_copy +copy_end: +lw $a0 0($sp) +lw $a1 4($sp) +lw $a2 8($sp) +lw $t0 12($sp) +addiu $sp $sp 16 +jr $ra + +read_string: +addiu $sp $sp -28 +sw $ra 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $a2 20($sp) +sw $t2 24($sp) +li $t0 8 +addi $a0 $t0 4 +jal allocate +move $t1 $v0 +move $t2 $zero +while_read_string: +addu $a0 $t1 $t2 +subu $a1 $t0 $t2 +addu $t2 $t2 $a1 +jal read_string_up_to +beq $v0 $zero read_string_not_finished +move $v0 $t1 +j end_read_string +read_string_not_finished: +sll $t0 $t0 1 +addi $a0 $t0 4 +jal allocate +move $a0 $t1 +move $t1 $v0 +move $a1 $v0 +move $a2 $t2 +jal copy +j while_read_string +end_read_string: +lw $ra 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $a2 20($sp) +lw $t2 24($sp) +addiu $sp $sp 28 +jr $ra +read_string_up_to: +addiu $sp $sp -28 +sw $ra 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +sw $t2 12($sp) +sw $t3 16($sp) +sw $t4 20($sp) +sw $t5 24($sp) +move $t0 $a0 +move $t1 $zero +li $t2 10 +addu $t3 $t0 $a1 +addiu $a1 $a1 1 +li $v0 8 +syscall +lw $a0 0($a0) +beq $a0 $zero eol_terminated +li $v0 0 +eol_check: +beq $t0 $t3 read_loop_continue +lb $t1 0($t0) +beq $t1 $t2 eol_terminated +addiu $t0 $t0 1 +j eol_check +eol_terminated: +sb $zero 0($t0) +li $v0 1 +read_loop_continue: +lw $ra 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +lw $t2 12($sp) +lw $t3 16($sp) +lw $t4 20($sp) +lw $t5 24($sp) +addiu $sp $sp 28 +jr $ra + +substr: +addiu $sp $sp -32 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $t3 12($sp) +sw $a0 16($sp) +sw $a1 20($sp) +sw $a2 24($sp) +sw $ra 28($sp) +move $t0 $a0 +add $t0 $t0 $a1 +li $t1 4 +div $a2 $t1 +mfhi $t2 +bne $t2 $zero substr_allign_size +move $t1 $a2 +j substr_new_chunk +substr_allign_size: +sub $t1 $t1 $t2 +add $t1 $t1 $a2 +substr_new_chunk: +move $a0 $t1 +jal allocate +move $t3 $v0 +move $t1 $zero +while_substr_copy: +beq $t1 $a2 substr_end +lb $t2 0($t0) +sb $t2 0($t3) +addiu $t0 $t0 1 +addiu $t3 $t3 1 +addiu $t1 $t1 1 +j while_substr_copy +substr_end: +sb $zero 0($t3) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $t3 12($sp) +lw $a0 16($sp) +lw $a1 20($sp) +lw $a2 24($sp) +lw $ra 28($sp) +addiu $sp $sp 32 +jr $ra + +concat: +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $ra 20($sp) +move $t0 $a0 +move $t1 $a1 +addiu $a0 $a2 1 +li $t2 4 +div $a0 $t2 +mfhi $a0 +bne $a0 $zero concat_allign_size +addiu $a0 $a2 1 +j concat_size_allignned +concat_allign_size: +sub $t2 $t2 $a0 +add $a0 $a2 $t2 +addiu $a0 $a0 1 +concat_size_allignned: +jal allocate +move $t2 $v0 +j first_while_concat_copy +first_while_concat_copy: +lb $a0 0($t0) +beq $a0 $zero second_while_concat_copy +sb $a0 0($t2) +addiu $t0 $t0 1 +addiu $t2 $t2 1 +j first_while_concat_copy +second_while_concat_copy: +lb $a0 0($t1) +beq $a0 $zero concat_end +sb $a0 0($t2) +addiu $t1 $t1 1 +addiu $t2 $t2 1 +j second_while_concat_copy +concat_end: +sb $zero 0($t2) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $ra 20($sp) +addiu $sp $sp 24 +jr $ra + +length: +addiu $sp $sp -8 +sw $t0 0($sp) +sw $t1 4($sp) +move $t0 $a0 +move $v0 $zero +while_len: +lb $t1 0($t0) +beq $t1 $zero len_end +addi $v0 $v0 1 +addiu $t0 $t0 1 +j while_len +len_end: +lw $t0 0($sp) +lw $t1 4($sp) +addiu $sp $sp 8 +jr $ra \ No newline at end of file diff --git a/tests/codegen/palindrome.mips b/tests/codegen/palindrome.mips new file mode 100644 index 000000000..e00722070 --- /dev/null +++ b/tests/codegen/palindrome.mips @@ -0,0 +1,1860 @@ +.data +default_str: .asciiz "" +.word 0 +data_1: .asciiz "Object" +.word 0 +data_2: .asciiz "IO" +.word 0 +data_3: .asciiz "String" +.word 0 +data_4: .asciiz "Int" +.word 0 +data_5: .asciiz "Bool" +.word 0 +data_6: .asciiz "Main" +.word 0 +data_7: .asciiz " +" +.word 0 +data_8: .asciiz "" +.word 0 +data_9: .asciiz "Abort called from class " +.word 0 +data_10: .asciiz "Index out of range exception" +.word 0 +data_11: .asciiz "Function call in a void instance" +.word 0 +data_12: .asciiz "Function call in a void instance" +.word 0 +data_13: .asciiz "Function call in a void instance" +.word 0 +data_14: .asciiz "Function call in a void instance" +.word 0 +data_15: .asciiz "Function call in a void instance" +.word 0 +data_16: .asciiz "Function call in a void instance" +.word 0 +data_17: .asciiz "Function call in a void instance" +.word 0 +data_18: .asciiz "Function call in a void instance" +.word 0 +data_19: .asciiz "enter a string\n" +.word 0 +data_20: .asciiz "Function call in a void instance" +.word 0 +data_21: .asciiz "Function call in a void instance" +.word 0 +data_22: .asciiz "Function call in a void instance" +.word 0 +data_23: .asciiz "that was not a palindrome\n" +.word 0 +data_24: .asciiz "Function call in a void instance" +.word 0 +data_25: .asciiz "that was a palindrome\n" +.word 0 +data_26: .asciiz "Function call in a void instance" + + +types_table: +.word data_1 +.word data_2 +.word data_3 +.word data_4 +.word data_5 +.word data_6 + +prototype_table: + .word type_1_prototype + .word type_2_prototype + .word type_3_prototype + .word type_4_prototype + .word type_5_prototype + .word type_6_prototype + +type_1_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __ctor_Object + +type_1_prototype: +.word 0 +.word 4 +.word type_1_dispatch +.word -1 + + +type_2_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word function_out_string_at_IO +.word function_out_int_at_IO +.word function_in_string_at_IO +.word function_in_int_at_IO +.word __ctor_IO + +type_2_prototype: +.word 1 +.word 4 +.word type_2_dispatch +.word -1 + + +type_3_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word function_length_at_String +.word function_concat_at_String +.word function_substr_at_String +.word __ctor_String + +type_3_prototype: +.word 2 +.word 6 +.word type_3_dispatch +.word 0 +.word 0 +.word -1 + + +type_4_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __ctor_Int + +type_4_prototype: +.word 3 +.word 5 +.word type_4_dispatch +.word 0 +.word -1 + + +type_5_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __ctor_Bool + +type_5_prototype: +.word 4 +.word 5 +.word type_5_dispatch +.word 0 +.word -1 + + +type_6_dispatch: +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_main_at_Main +.word function_pal_at_Main +.word __attributes_ctor_Main +.word __ctor_Main + +type_6_prototype: +.word 5 +.word 5 +.word type_6_dispatch +.word 0 +.word -1 + + +.text +.globl main +__ctor_Object: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 0 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_abort_at_Object: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +la $t0 data_9 +sw $t0 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +la $t0 data_7 +sw $t0 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +li $v0 10 +syscall +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_type_name_at_Object: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_copy_at_Object: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $a0 4($t0) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t0 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 1 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_out_string_at_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +lw $v0 4($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_out_int_at_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -12($fp) +li $v0 1 +lw $a0 -12($fp) +syscall +lw $v0 4($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_in_string_at_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +jal read_string +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_in_int_at_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $v0 5 +syscall +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_String: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +li $t0 2 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -20($fp) +lw $t0 -20($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $a0 0($fp) +jal length +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -20($fp) +lw $t1 -12($fp) +sw $t1 16($t0) +lw $v0 -20($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_length_at_String: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 16($t0) +sw $t1 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_concat_at_String: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -24 +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -32($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 4($fp) +lw $t1 16($t0) +sw $t1 -24($fp) +lw $t0 0($fp) +lw $t1 16($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 12($t0) +sw $t1 -24($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 -20($fp) +add $t0 $t0 $t1 +sw $t0 -24($fp) +lw $a0 -32($fp) +lw $a1 -28($fp) +lw $a2 -24($fp) +jal concat +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 24 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_substr_at_String: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -36 +lw $t0 8($fp) +lw $t1 12($t0) +sw $t1 -16($fp) +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -40($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -36($fp) +lw $t0 8($fp) +lw $t1 16($t0) +sw $t1 -32($fp) +lw $t0 -32($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 -36($fp) +lw $t1 -40($fp) +add $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -28($fp) +lw $t1 -24($fp) +slt $t1 $t0 $t1 +sw $t1 -20($fp) +lw $t0 -20($fp) +bne $t0 $zero label_1 +j label_2 +label_1: +li $v0 4 +la $a0 data_10 +syscall +li $v0 10 +syscall +label_2: +lw $a0 -16($fp) +lw $a1 -40($fp) +lw $a2 -36($fp) +jal substr +sw $v0 -44($fp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 36 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_Int: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 3 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_Bool: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 4 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +jal __ctor_Main +sw $v0 -12($fp) +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal function_main_at_Main +addi $sp $sp 4 +sw $v0 -12($fp) +li $v0 0 +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +li $v0 10 +syscall + +__attributes_ctor_Main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 0($fp) +lw $t1 -12($fp) +sw $t1 12($t0) +lw $v0 0($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_pal_at_Main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -272 +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -236($fp) +lw $t0 -236($fp) +bne $t0 $zero label_3 +j label_4 +label_3: +li $v0 4 +la $a0 data_11 +syscall +li $v0 10 +syscall +label_4: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -232($fp) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -228($fp) +lw $t0 -232($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -264($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -256($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -248($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -252($fp) +lw $t0 -264($fp) +lw $t1 -256($fp) +seq $t0 $t0 $t1 +sw $t0 -244($fp) +lw $t0 -244($fp) +bne $t0 $zero label_5 +lw $t0 -264($fp) +lw $t1 -248($fp) +seq $t0 $t0 $t1 +sw $t0 -244($fp) +lw $t0 -244($fp) +bne $t0 $zero label_6 +lw $t0 -264($fp) +lw $t1 -252($fp) +seq $t0 $t0 $t1 +sw $t0 -244($fp) +lw $t0 -244($fp) +bne $t0 $zero label_7 +lw $t0 -232($fp) +lw $t1 -228($fp) +seq $t0 $t0 $t1 +sw $t0 -240($fp) +j label_8 +label_5: +lw $t0 -232($fp) +lw $t1 12($t0) +sw $t1 -268($fp) +lw $t0 -228($fp) +lw $t1 12($t0) +sw $t1 -260($fp) +lw $t0 -268($fp) +lw $t1 -260($fp) +seq $t0 $t0 $t1 +sw $t0 -240($fp) +j label_8 +label_6: +lw $t0 -232($fp) +lw $t1 12($t0) +sw $t1 -268($fp) +lw $t0 -228($fp) +lw $t1 12($t0) +sw $t1 -260($fp) +lw $t0 -268($fp) +move $a0 $t0 +lw $t0 -260($fp) +move $a1 $t0 +jal equal_str +sw $v0 -240($fp) +j label_8 +label_7: +lw $t0 -232($fp) +lw $t1 12($t0) +sw $t1 -268($fp) +lw $t0 -228($fp) +lw $t1 12($t0) +sw $t1 -260($fp) +lw $t0 -268($fp) +lw $t1 -260($fp) +seq $t0 $t0 $t1 +sw $t0 -240($fp) +j label_8 +label_8: +lw $t0 -240($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -272($fp) +lw $t0 -272($fp) +lw $t1 12($t0) +sw $t1 -276($fp) +lw $t0 -276($fp) +bne $t0 $zero label_35 +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -180($fp) +lw $t0 -180($fp) +bne $t0 $zero label_9 +j label_10 +label_9: +li $v0 4 +la $a0 data_12 +syscall +li $v0 10 +syscall +label_10: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -176($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -172($fp) +lw $t0 -176($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -208($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -200($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -192($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -196($fp) +lw $t0 -208($fp) +lw $t1 -200($fp) +seq $t0 $t0 $t1 +sw $t0 -188($fp) +lw $t0 -188($fp) +bne $t0 $zero label_11 +lw $t0 -208($fp) +lw $t1 -192($fp) +seq $t0 $t0 $t1 +sw $t0 -188($fp) +lw $t0 -188($fp) +bne $t0 $zero label_12 +lw $t0 -208($fp) +lw $t1 -196($fp) +seq $t0 $t0 $t1 +sw $t0 -188($fp) +lw $t0 -188($fp) +bne $t0 $zero label_13 +lw $t0 -176($fp) +lw $t1 -172($fp) +seq $t0 $t0 $t1 +sw $t0 -184($fp) +j label_14 +label_11: +lw $t0 -176($fp) +lw $t1 12($t0) +sw $t1 -212($fp) +lw $t0 -172($fp) +lw $t1 12($t0) +sw $t1 -204($fp) +lw $t0 -212($fp) +lw $t1 -204($fp) +seq $t0 $t0 $t1 +sw $t0 -184($fp) +j label_14 +label_12: +lw $t0 -176($fp) +lw $t1 12($t0) +sw $t1 -212($fp) +lw $t0 -172($fp) +lw $t1 12($t0) +sw $t1 -204($fp) +lw $t0 -212($fp) +move $a0 $t0 +lw $t0 -204($fp) +move $a1 $t0 +jal equal_str +sw $v0 -184($fp) +j label_14 +label_13: +lw $t0 -176($fp) +lw $t1 12($t0) +sw $t1 -212($fp) +lw $t0 -172($fp) +lw $t1 12($t0) +sw $t1 -204($fp) +lw $t0 -212($fp) +lw $t1 -204($fp) +seq $t0 $t0 $t1 +sw $t0 -184($fp) +j label_14 +label_14: +lw $t0 -184($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -216($fp) +lw $t0 -216($fp) +lw $t1 12($t0) +sw $t1 -220($fp) +lw $t0 -220($fp) +bne $t0 $zero label_33 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -124($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -120($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -116($fp) +lw $t0 -116($fp) +bne $t0 $zero label_15 +j label_16 +label_15: +li $v0 4 +la $a0 data_13 +syscall +li $v0 10 +syscall +label_16: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -124($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -120($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -112($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -92($fp) +lw $t0 -92($fp) +bne $t0 $zero label_17 +j label_18 +label_17: +li $v0 4 +la $a0 data_14 +syscall +li $v0 10 +syscall +label_18: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -88($fp) +lw $t0 -88($fp) +lw $t1 12($t0) +sw $t1 -104($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -84($fp) +lw $t0 -84($fp) +lw $t1 12($t0) +sw $t1 -100($fp) +lw $t0 -104($fp) +lw $t1 -100($fp) +sub $t0 $t0 $t1 +sw $t0 -96($fp) +lw $t0 -96($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -108($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -80($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_19 +j label_20 +label_19: +li $v0 4 +la $a0 data_15 +syscall +li $v0 10 +syscall +label_20: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -108($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -80($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -72($fp) +lw $t0 -112($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -152($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -144($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -136($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -140($fp) +lw $t0 -152($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -132($fp) +lw $t0 -132($fp) +bne $t0 $zero label_21 +lw $t0 -152($fp) +lw $t1 -136($fp) +seq $t0 $t0 $t1 +sw $t0 -132($fp) +lw $t0 -132($fp) +bne $t0 $zero label_22 +lw $t0 -152($fp) +lw $t1 -140($fp) +seq $t0 $t0 $t1 +sw $t0 -132($fp) +lw $t0 -132($fp) +bne $t0 $zero label_23 +lw $t0 -112($fp) +lw $t1 -72($fp) +seq $t0 $t0 $t1 +sw $t0 -128($fp) +j label_24 +label_21: +lw $t0 -112($fp) +lw $t1 12($t0) +sw $t1 -156($fp) +lw $t0 -72($fp) +lw $t1 12($t0) +sw $t1 -148($fp) +lw $t0 -156($fp) +lw $t1 -148($fp) +seq $t0 $t0 $t1 +sw $t0 -128($fp) +j label_24 +label_22: +lw $t0 -112($fp) +lw $t1 12($t0) +sw $t1 -156($fp) +lw $t0 -72($fp) +lw $t1 12($t0) +sw $t1 -148($fp) +lw $t0 -156($fp) +move $a0 $t0 +lw $t0 -148($fp) +move $a1 $t0 +jal equal_str +sw $v0 -128($fp) +j label_24 +label_23: +lw $t0 -112($fp) +lw $t1 12($t0) +sw $t1 -156($fp) +lw $t0 -72($fp) +lw $t1 12($t0) +sw $t1 -148($fp) +lw $t0 -156($fp) +lw $t1 -148($fp) +seq $t0 $t0 $t1 +sw $t0 -128($fp) +j label_24 +label_24: +lw $t0 -128($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -160($fp) +lw $t0 -160($fp) +lw $t1 12($t0) +sw $t1 -164($fp) +lw $t0 -164($fp) +bne $t0 $zero label_25 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -68($fp) +lw $t0 -68($fp) +sw $t0 -168($fp) +j label_32 +label_25: +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -64($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -44($fp) +lw $t0 -44($fp) +bne $t0 $zero label_26 +j label_27 +label_26: +li $v0 4 +la $a0 data_16 +syscall +li $v0 10 +syscall +label_27: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -40($fp) +lw $t0 -40($fp) +lw $t1 12($t0) +sw $t1 -56($fp) +li $t0 2 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 -36($fp) +lw $t1 12($t0) +sw $t1 -52($fp) +lw $t0 -56($fp) +lw $t1 -52($fp) +sub $t0 $t0 $t1 +sw $t0 -48($fp) +lw $t0 -48($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -60($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_28 +j label_29 +label_28: +li $v0 4 +la $a0 data_17 +syscall +li $v0 10 +syscall +label_29: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -64($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -60($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -28($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_30 +j label_31 +label_30: +li $v0 4 +la $a0 data_18 +syscall +li $v0 10 +syscall +label_31: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -20($fp) +lw $t0 -20($fp) +sw $t0 -168($fp) +label_32: +lw $t0 -168($fp) +sw $t0 -224($fp) +j label_34 +label_33: +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -16($fp) +lw $t0 -16($fp) +sw $t0 -224($fp) +label_34: +lw $t0 -224($fp) +sw $t0 -280($fp) +j label_36 +label_35: +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -280($fp) +label_36: +lw $v0 -280($fp) +addi $sp $sp 272 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_main_at_Main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -88 +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -84($fp) +lw $t0 -84($fp) +lw $t1 12($t0) +sw $t1 -92($fp) +lw $t0 -92($fp) +not $t0 $t0 +addi $t0 $t0 1 +sw $t0 -88($fp) +lw $t0 -88($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -96($fp) +lw $t0 -96($fp) +lw $t1 0($fp) +addi $t1 $t1 12 +sw $t0 0($t1) +la $t0 data_19 +sw $t0 -80($fp) +lw $t0 -80($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -76($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -72($fp) +lw $t0 -72($fp) +bne $t0 $zero label_37 +j label_38 +label_37: +li $v0 4 +la $a0 data_20 +syscall +li $v0 10 +syscall +label_38: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -76($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -68($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -56($fp) +lw $t0 -56($fp) +bne $t0 $zero label_39 +j label_40 +label_39: +li $v0 4 +la $a0 data_21 +syscall +li $v0 10 +syscall +label_40: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 16($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -52($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -48($fp) +lw $t0 -48($fp) +bne $t0 $zero label_41 +j label_42 +label_41: +li $v0 4 +la $a0 data_22 +syscall +li $v0 10 +syscall +label_42: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -52($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -44($fp) +lw $t0 -44($fp) +lw $t1 12($t0) +sw $t1 -60($fp) +lw $t0 -60($fp) +bne $t0 $zero label_45 +la $t0 data_23 +sw $t0 -40($fp) +lw $t0 -40($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_43 +j label_44 +label_43: +li $v0 4 +la $a0 data_24 +syscall +li $v0 10 +syscall +label_44: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -28($fp) +lw $t0 -28($fp) +sw $t0 -64($fp) +j label_48 +label_45: +la $t0 data_25 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_46 +j label_47 +label_46: +li $v0 4 +la $a0 data_26 +syscall +li $v0 10 +syscall +label_47: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -64($fp) +label_48: +lw $v0 -64($fp) +addi $sp $sp 88 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_Main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 5 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_Main +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + + + +equal_str: +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $a0 8($sp) +sw $a1 12($sp) +sw $t2 16($sp) +sw $t3 20($sp) +move $t0 $a0 +move $t1 $a1 +while_equal_str: +lb $t2 0($t0) +lb $t3 0($t1) +bne $t2 $t3 equal_str_different_strings +beq $t2 $zero first_end_equal_str +beq $t3 $zero second_end_equal_str +addi $t1 $t1 1 +addi $t0 $t0 1 +j while_equal_str +equal_str_different_strings: +move $v0 $zero +j equal_str_end +first_end_equal_str: +beq $t3 $zero second_end_equal_str +move $v0 $zero +j equal_str_end +second_end_equal_str: +li $v0 1 +equal_str_end: +lw $t0 0($sp) +lw $t1 4($sp) +lw $a0 8($sp) +lw $a1 12($sp) +lw $t2 16($sp) +lw $t3 20($sp) +addiu $sp $sp 24 +jr $ra + +allocate: +addiu $sp $sp -12 +sw $a0 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +li $t0 4 +div $a0 $t0 +mfhi $t1 +sub $t0 $t0 $t1 +add $a0 $a0 $t0 +li $v0 9 +syscall +lw $a0 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +addiu $sp $sp 12 +jr $ra + +copy: +addiu $sp $sp -16 +sw $a0 0($sp) +sw $a1 4($sp) +sw $a2 8($sp) +sw $t0 12($sp) +while_copy: +beq $a2 $zero copy_end +lw $t0 0($a0) +sw $t0 0($a1) +addiu $a0 $a0 4 +addiu $a1 $a1 4 +addi $a2 $a2 -4 +j while_copy +copy_end: +lw $a0 0($sp) +lw $a1 4($sp) +lw $a2 8($sp) +lw $t0 12($sp) +addiu $sp $sp 16 +jr $ra + +read_string: +addiu $sp $sp -28 +sw $ra 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $a2 20($sp) +sw $t2 24($sp) +li $t0 8 +addi $a0 $t0 4 +jal allocate +move $t1 $v0 +move $t2 $zero +while_read_string: +addu $a0 $t1 $t2 +subu $a1 $t0 $t2 +addu $t2 $t2 $a1 +jal read_string_up_to +beq $v0 $zero read_string_not_finished +move $v0 $t1 +j end_read_string +read_string_not_finished: +sll $t0 $t0 1 +addi $a0 $t0 4 +jal allocate +move $a0 $t1 +move $t1 $v0 +move $a1 $v0 +move $a2 $t2 +jal copy +j while_read_string +end_read_string: +lw $ra 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $a2 20($sp) +lw $t2 24($sp) +addiu $sp $sp 28 +jr $ra +read_string_up_to: +addiu $sp $sp -28 +sw $ra 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +sw $t2 12($sp) +sw $t3 16($sp) +sw $t4 20($sp) +sw $t5 24($sp) +move $t0 $a0 +move $t1 $zero +li $t2 10 +addu $t3 $t0 $a1 +addiu $a1 $a1 1 +li $v0 8 +syscall +lw $a0 0($a0) +beq $a0 $zero eol_terminated +li $v0 0 +eol_check: +beq $t0 $t3 read_loop_continue +lb $t1 0($t0) +beq $t1 $t2 eol_terminated +addiu $t0 $t0 1 +j eol_check +eol_terminated: +sb $zero 0($t0) +li $v0 1 +read_loop_continue: +lw $ra 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +lw $t2 12($sp) +lw $t3 16($sp) +lw $t4 20($sp) +lw $t5 24($sp) +addiu $sp $sp 28 +jr $ra + +substr: +addiu $sp $sp -32 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $t3 12($sp) +sw $a0 16($sp) +sw $a1 20($sp) +sw $a2 24($sp) +sw $ra 28($sp) +move $t0 $a0 +add $t0 $t0 $a1 +li $t1 4 +div $a2 $t1 +mfhi $t2 +bne $t2 $zero substr_allign_size +move $t1 $a2 +j substr_new_chunk +substr_allign_size: +sub $t1 $t1 $t2 +add $t1 $t1 $a2 +substr_new_chunk: +move $a0 $t1 +jal allocate +move $t3 $v0 +move $t1 $zero +while_substr_copy: +beq $t1 $a2 substr_end +lb $t2 0($t0) +sb $t2 0($t3) +addiu $t0 $t0 1 +addiu $t3 $t3 1 +addiu $t1 $t1 1 +j while_substr_copy +substr_end: +sb $zero 0($t3) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $t3 12($sp) +lw $a0 16($sp) +lw $a1 20($sp) +lw $a2 24($sp) +lw $ra 28($sp) +addiu $sp $sp 32 +jr $ra + +concat: +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $ra 20($sp) +move $t0 $a0 +move $t1 $a1 +addiu $a0 $a2 1 +li $t2 4 +div $a0 $t2 +mfhi $a0 +bne $a0 $zero concat_allign_size +addiu $a0 $a2 1 +j concat_size_allignned +concat_allign_size: +sub $t2 $t2 $a0 +add $a0 $a2 $t2 +addiu $a0 $a0 1 +concat_size_allignned: +jal allocate +move $t2 $v0 +j first_while_concat_copy +first_while_concat_copy: +lb $a0 0($t0) +beq $a0 $zero second_while_concat_copy +sb $a0 0($t2) +addiu $t0 $t0 1 +addiu $t2 $t2 1 +j first_while_concat_copy +second_while_concat_copy: +lb $a0 0($t1) +beq $a0 $zero concat_end +sb $a0 0($t2) +addiu $t1 $t1 1 +addiu $t2 $t2 1 +j second_while_concat_copy +concat_end: +sb $zero 0($t2) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $ra 20($sp) +addiu $sp $sp 24 +jr $ra + +length: +addiu $sp $sp -8 +sw $t0 0($sp) +sw $t1 4($sp) +move $t0 $a0 +move $v0 $zero +while_len: +lb $t1 0($t0) +beq $t1 $zero len_end +addi $v0 $v0 1 +addiu $t0 $t0 1 +j while_len +len_end: +lw $t0 0($sp) +lw $t1 4($sp) +addiu $sp $sp 8 +jr $ra \ No newline at end of file diff --git a/tests/codegen/primes.mips b/tests/codegen/primes.mips new file mode 100644 index 000000000..b5f5c4b12 --- /dev/null +++ b/tests/codegen/primes.mips @@ -0,0 +1,1676 @@ +.data +default_str: .asciiz "" +.word 0 +data_1: .asciiz "Object" +.word 0 +data_2: .asciiz "IO" +.word 0 +data_3: .asciiz "String" +.word 0 +data_4: .asciiz "Int" +.word 0 +data_5: .asciiz "Bool" +.word 0 +data_6: .asciiz "Main" +.word 0 +data_7: .asciiz " +" +.word 0 +data_8: .asciiz "" +.word 0 +data_9: .asciiz "Abort called from class " +.word 0 +data_10: .asciiz "Index out of range exception" +.word 0 +data_11: .asciiz "2 is trivially prime.\n" +.word 0 +data_12: .asciiz "Function call in a void instance" +.word 0 +data_13: .asciiz "Division by zero exception" +.word 0 +data_14: .asciiz "Function call in a void instance" +.word 0 +data_15: .asciiz " is prime.\n" +.word 0 +data_16: .asciiz "Function call in a void instance" +.word 0 +data_17: .asciiz "continue" +.word 0 +data_18: .asciiz "halt" +.word 0 +data_19: .asciiz "Function call in a void instance" + + +types_table: +.word data_1 +.word data_2 +.word data_3 +.word data_4 +.word data_5 +.word data_6 + +prototype_table: + .word type_1_prototype + .word type_2_prototype + .word type_3_prototype + .word type_4_prototype + .word type_5_prototype + .word type_6_prototype + +type_1_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __ctor_Object + +type_1_prototype: +.word 0 +.word 4 +.word type_1_dispatch +.word -1 + + +type_2_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word function_out_string_at_IO +.word function_out_int_at_IO +.word function_in_string_at_IO +.word function_in_int_at_IO +.word __ctor_IO + +type_2_prototype: +.word 1 +.word 4 +.word type_2_dispatch +.word -1 + + +type_3_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word function_length_at_String +.word function_concat_at_String +.word function_substr_at_String +.word __ctor_String + +type_3_prototype: +.word 2 +.word 6 +.word type_3_dispatch +.word 0 +.word 0 +.word -1 + + +type_4_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __ctor_Int + +type_4_prototype: +.word 3 +.word 5 +.word type_4_dispatch +.word 0 +.word -1 + + +type_5_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __ctor_Bool + +type_5_prototype: +.word 4 +.word 5 +.word type_5_dispatch +.word 0 +.word -1 + + +type_6_dispatch: +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_main_at_Main +.word __attributes_ctor_Main +.word __ctor_Main + +type_6_prototype: +.word 5 +.word 9 +.word type_6_dispatch +.word 0 +.word 0 +.word 0 +.word 0 +.word 0 +.word -1 + + +.text +.globl main +__ctor_Object: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 0 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_abort_at_Object: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +la $t0 data_9 +sw $t0 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +la $t0 data_7 +sw $t0 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +li $v0 10 +syscall +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_type_name_at_Object: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_copy_at_Object: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $a0 4($t0) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t0 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 1 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_out_string_at_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +lw $v0 4($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_out_int_at_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -12($fp) +li $v0 1 +lw $a0 -12($fp) +syscall +lw $v0 4($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_in_string_at_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +jal read_string +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_in_int_at_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $v0 5 +syscall +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_String: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +li $t0 2 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -20($fp) +lw $t0 -20($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $a0 0($fp) +jal length +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -20($fp) +lw $t1 -12($fp) +sw $t1 16($t0) +lw $v0 -20($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_length_at_String: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 16($t0) +sw $t1 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_concat_at_String: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -24 +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -32($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 4($fp) +lw $t1 16($t0) +sw $t1 -24($fp) +lw $t0 0($fp) +lw $t1 16($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 12($t0) +sw $t1 -24($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 -20($fp) +add $t0 $t0 $t1 +sw $t0 -24($fp) +lw $a0 -32($fp) +lw $a1 -28($fp) +lw $a2 -24($fp) +jal concat +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 24 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_substr_at_String: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -36 +lw $t0 8($fp) +lw $t1 12($t0) +sw $t1 -16($fp) +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -40($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -36($fp) +lw $t0 8($fp) +lw $t1 16($t0) +sw $t1 -32($fp) +lw $t0 -32($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 -36($fp) +lw $t1 -40($fp) +add $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -28($fp) +lw $t1 -24($fp) +slt $t1 $t0 $t1 +sw $t1 -20($fp) +lw $t0 -20($fp) +bne $t0 $zero label_1 +j label_2 +label_1: +li $v0 4 +la $a0 data_10 +syscall +li $v0 10 +syscall +label_2: +lw $a0 -16($fp) +lw $a1 -40($fp) +lw $a2 -36($fp) +jal substr +sw $v0 -44($fp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 36 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_Int: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 3 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_Bool: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 4 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +jal __ctor_Main +sw $v0 -12($fp) +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal function_main_at_Main +addi $sp $sp 4 +sw $v0 -12($fp) +li $v0 0 +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +li $v0 10 +syscall + +__attributes_ctor_Main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -368 +la $t0 data_11 +sw $t0 -372($fp) +lw $t0 -372($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -368($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -364($fp) +lw $t0 -364($fp) +bne $t0 $zero label_3 +j label_4 +label_3: +li $v0 4 +la $a0 data_12 +syscall +li $v0 10 +syscall +label_4: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -368($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -360($fp) +li $t0 2 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -356($fp) +lw $t0 -356($fp) +sw $t0 -376($fp) +lw $t0 0($fp) +lw $t1 -376($fp) +sw $t1 20($t0) +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +sw $t0 -352($fp) +lw $t0 0($fp) +lw $t1 -352($fp) +sw $t1 28($t0) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -348($fp) +lw $t0 0($fp) +lw $t1 -348($fp) +sw $t1 12($t0) +li $t0 500 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -340($fp) +lw $t0 -340($fp) +sw $t0 -344($fp) +lw $t0 0($fp) +lw $t1 -344($fp) +sw $t1 24($t0) +label_5: +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -328($fp) +lw $t0 -328($fp) +lw $t1 12($t0) +sw $t1 -332($fp) +lw $t0 -332($fp) +bne $t0 $zero label_6 +j label_30 +label_6: +lw $t4 0($fp) +lw $t4 28($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -320($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -308($fp) +lw $t0 -308($fp) +lw $t1 12($t0) +sw $t1 -316($fp) +lw $t0 -320($fp) +lw $t1 -316($fp) +add $t0 $t0 $t1 +sw $t0 -312($fp) +lw $t0 -312($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -324($fp) +lw $t0 -324($fp) +lw $t1 0($fp) +addi $t1 $t1 28 +sw $t0 0($t1) +li $t0 2 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -304($fp) +lw $t0 -304($fp) +lw $t1 0($fp) +addi $t1 $t1 12 +sw $t0 0($t1) +label_7: +lw $t4 0($fp) +lw $t4 28($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -284($fp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -268($fp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -264($fp) +lw $t0 -268($fp) +lw $t1 -264($fp) +mul $t0 $t0 $t1 +sw $t0 -260($fp) +lw $t0 -260($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -272($fp) +lw $t0 -272($fp) +lw $t1 12($t0) +sw $t1 -280($fp) +lw $t0 -284($fp) +lw $t1 -280($fp) +slt $t1 $t0 $t1 +sw $t1 -276($fp) +lw $t0 -276($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -288($fp) +lw $t0 -288($fp) +lw $t1 12($t0) +sw $t1 -292($fp) +lw $t0 -292($fp) +bne $t0 $zero label_16 +lw $t4 0($fp) +lw $t4 28($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -208($fp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -192($fp) +lw $t4 0($fp) +lw $t4 28($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -176($fp) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -164($fp) +lw $t0 -164($fp) +lw $t1 12($t0) +sw $t1 -164($fp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -172($fp) +lw $t0 -164($fp) +lw $t1 -172($fp) +seq $t0 $t0 $t1 +sw $t0 -164($fp) +lw $t0 -164($fp) +bne $t0 $zero label_8 +j label_9 +label_8: +li $v0 4 +la $a0 data_13 +syscall +li $v0 10 +syscall +label_9: +lw $t0 -176($fp) +lw $t1 -172($fp) +div $t0 $t1 +mflo $t0 +sw $t0 -168($fp) +lw $t0 -168($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -180($fp) +lw $t0 -180($fp) +lw $t1 12($t0) +sw $t1 -188($fp) +lw $t0 -192($fp) +lw $t1 -188($fp) +mul $t0 $t0 $t1 +sw $t0 -184($fp) +lw $t0 -184($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -196($fp) +lw $t0 -196($fp) +lw $t1 12($t0) +sw $t1 -204($fp) +lw $t0 -208($fp) +lw $t1 -204($fp) +sub $t0 $t0 $t1 +sw $t0 -200($fp) +lw $t0 -200($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -212($fp) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -160($fp) +lw $t0 -212($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -240($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -232($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -224($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -228($fp) +lw $t0 -240($fp) +lw $t1 -232($fp) +seq $t0 $t0 $t1 +sw $t0 -220($fp) +lw $t0 -220($fp) +bne $t0 $zero label_10 +lw $t0 -240($fp) +lw $t1 -224($fp) +seq $t0 $t0 $t1 +sw $t0 -220($fp) +lw $t0 -220($fp) +bne $t0 $zero label_11 +lw $t0 -240($fp) +lw $t1 -228($fp) +seq $t0 $t0 $t1 +sw $t0 -220($fp) +lw $t0 -220($fp) +bne $t0 $zero label_12 +lw $t0 -212($fp) +lw $t1 -160($fp) +seq $t0 $t0 $t1 +sw $t0 -216($fp) +j label_13 +label_10: +lw $t0 -212($fp) +lw $t1 12($t0) +sw $t1 -244($fp) +lw $t0 -160($fp) +lw $t1 12($t0) +sw $t1 -236($fp) +lw $t0 -244($fp) +lw $t1 -236($fp) +seq $t0 $t0 $t1 +sw $t0 -216($fp) +j label_13 +label_11: +lw $t0 -212($fp) +lw $t1 12($t0) +sw $t1 -244($fp) +lw $t0 -160($fp) +lw $t1 12($t0) +sw $t1 -236($fp) +lw $t0 -244($fp) +move $a0 $t0 +lw $t0 -236($fp) +move $a1 $t0 +jal equal_str +sw $v0 -216($fp) +j label_13 +label_12: +lw $t0 -212($fp) +lw $t1 12($t0) +sw $t1 -244($fp) +lw $t0 -160($fp) +lw $t1 12($t0) +sw $t1 -236($fp) +lw $t0 -244($fp) +lw $t1 -236($fp) +seq $t0 $t0 $t1 +sw $t0 -216($fp) +j label_13 +label_13: +lw $t0 -216($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -248($fp) +lw $t0 -248($fp) +lw $t1 12($t0) +sw $t1 -252($fp) +lw $t0 -252($fp) +bne $t0 $zero label_14 +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -156($fp) +lw $t0 -156($fp) +sw $t0 -256($fp) +j label_15 +label_14: +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -152($fp) +lw $t0 -152($fp) +sw $t0 -256($fp) +label_15: +lw $t0 -256($fp) +sw $t0 -296($fp) +j label_17 +label_16: +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -148($fp) +lw $t0 -148($fp) +sw $t0 -296($fp) +label_17: +lw $t0 -296($fp) +lw $t1 12($t0) +sw $t1 -300($fp) +lw $t0 -300($fp) +bne $t0 $zero label_18 +j label_19 +label_18: +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -140($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -128($fp) +lw $t0 -128($fp) +lw $t1 12($t0) +sw $t1 -136($fp) +lw $t0 -140($fp) +lw $t1 -136($fp) +add $t0 $t0 $t1 +sw $t0 -132($fp) +lw $t0 -132($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -144($fp) +lw $t0 -144($fp) +lw $t1 0($fp) +addi $t1 $t1 12 +sw $t0 0($t1) +j label_7 +label_19: +lw $t4 0($fp) +lw $t4 28($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -112($fp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -96($fp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -92($fp) +lw $t0 -96($fp) +lw $t1 -92($fp) +mul $t0 $t0 $t1 +sw $t0 -88($fp) +lw $t0 -88($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -100($fp) +lw $t0 -100($fp) +lw $t1 12($t0) +sw $t1 -108($fp) +lw $t0 -112($fp) +lw $t1 -108($fp) +slt $t1 $t0 $t1 +sw $t1 -104($fp) +lw $t0 -104($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -116($fp) +lw $t0 -116($fp) +lw $t1 12($t0) +sw $t1 -120($fp) +lw $t0 -120($fp) +bne $t0 $zero label_20 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -84($fp) +lw $t0 -84($fp) +sw $t0 -124($fp) +j label_25 +label_20: +lw $t4 0($fp) +lw $t4 28($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 0($fp) +addi $t1 $t1 20 +sw $t0 0($t1) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -80($fp) +lw $t0 -80($fp) +bne $t0 $zero label_21 +j label_22 +label_21: +li $v0 4 +la $a0 data_14 +syscall +li $v0 10 +syscall +label_22: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -76($fp) +la $t0 data_15 +sw $t0 -72($fp) +lw $t0 -72($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -68($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -64($fp) +lw $t0 -64($fp) +bne $t0 $zero label_23 +j label_24 +label_23: +li $v0 4 +la $a0 data_16 +syscall +li $v0 10 +syscall +label_24: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -68($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -60($fp) +lw $t0 -60($fp) +sw $t0 -124($fp) +label_25: +lw $t4 0($fp) +lw $t4 24($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -44($fp) +lw $t4 0($fp) +lw $t4 28($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -40($fp) +lw $t0 -44($fp) +lw $t1 -40($fp) +sle $t0 $t0 $t1 +sw $t0 -36($fp) +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -48($fp) +lw $t0 -48($fp) +lw $t1 12($t0) +sw $t1 -52($fp) +lw $t0 -52($fp) +bne $t0 $zero label_26 +la $t0 data_17 +sw $t0 -32($fp) +lw $t0 -32($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t0 -28($fp) +sw $t0 -56($fp) +j label_29 +label_26: +la $t0 data_18 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 -20($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_27 +j label_28 +label_27: +li $v0 4 +la $a0 data_19 +syscall +li $v0 10 +syscall +label_28: +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 0($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -56($fp) +label_29: +j label_5 +label_30: +sw $zero -336($fp) +lw $t0 0($fp) +lw $t1 -336($fp) +sw $t1 16($t0) +lw $v0 0($fp) +addi $sp $sp 368 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_main_at_Main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_Main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 5 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_Main +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + + + +equal_str: +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $a0 8($sp) +sw $a1 12($sp) +sw $t2 16($sp) +sw $t3 20($sp) +move $t0 $a0 +move $t1 $a1 +while_equal_str: +lb $t2 0($t0) +lb $t3 0($t1) +bne $t2 $t3 equal_str_different_strings +beq $t2 $zero first_end_equal_str +beq $t3 $zero second_end_equal_str +addi $t1 $t1 1 +addi $t0 $t0 1 +j while_equal_str +equal_str_different_strings: +move $v0 $zero +j equal_str_end +first_end_equal_str: +beq $t3 $zero second_end_equal_str +move $v0 $zero +j equal_str_end +second_end_equal_str: +li $v0 1 +equal_str_end: +lw $t0 0($sp) +lw $t1 4($sp) +lw $a0 8($sp) +lw $a1 12($sp) +lw $t2 16($sp) +lw $t3 20($sp) +addiu $sp $sp 24 +jr $ra + +allocate: +addiu $sp $sp -12 +sw $a0 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +li $t0 4 +div $a0 $t0 +mfhi $t1 +sub $t0 $t0 $t1 +add $a0 $a0 $t0 +li $v0 9 +syscall +lw $a0 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +addiu $sp $sp 12 +jr $ra + +copy: +addiu $sp $sp -16 +sw $a0 0($sp) +sw $a1 4($sp) +sw $a2 8($sp) +sw $t0 12($sp) +while_copy: +beq $a2 $zero copy_end +lw $t0 0($a0) +sw $t0 0($a1) +addiu $a0 $a0 4 +addiu $a1 $a1 4 +addi $a2 $a2 -4 +j while_copy +copy_end: +lw $a0 0($sp) +lw $a1 4($sp) +lw $a2 8($sp) +lw $t0 12($sp) +addiu $sp $sp 16 +jr $ra + +read_string: +addiu $sp $sp -28 +sw $ra 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $a2 20($sp) +sw $t2 24($sp) +li $t0 8 +addi $a0 $t0 4 +jal allocate +move $t1 $v0 +move $t2 $zero +while_read_string: +addu $a0 $t1 $t2 +subu $a1 $t0 $t2 +addu $t2 $t2 $a1 +jal read_string_up_to +beq $v0 $zero read_string_not_finished +move $v0 $t1 +j end_read_string +read_string_not_finished: +sll $t0 $t0 1 +addi $a0 $t0 4 +jal allocate +move $a0 $t1 +move $t1 $v0 +move $a1 $v0 +move $a2 $t2 +jal copy +j while_read_string +end_read_string: +lw $ra 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $a2 20($sp) +lw $t2 24($sp) +addiu $sp $sp 28 +jr $ra +read_string_up_to: +addiu $sp $sp -28 +sw $ra 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +sw $t2 12($sp) +sw $t3 16($sp) +sw $t4 20($sp) +sw $t5 24($sp) +move $t0 $a0 +move $t1 $zero +li $t2 10 +addu $t3 $t0 $a1 +addiu $a1 $a1 1 +li $v0 8 +syscall +lw $a0 0($a0) +beq $a0 $zero eol_terminated +li $v0 0 +eol_check: +beq $t0 $t3 read_loop_continue +lb $t1 0($t0) +beq $t1 $t2 eol_terminated +addiu $t0 $t0 1 +j eol_check +eol_terminated: +sb $zero 0($t0) +li $v0 1 +read_loop_continue: +lw $ra 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +lw $t2 12($sp) +lw $t3 16($sp) +lw $t4 20($sp) +lw $t5 24($sp) +addiu $sp $sp 28 +jr $ra + +substr: +addiu $sp $sp -32 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $t3 12($sp) +sw $a0 16($sp) +sw $a1 20($sp) +sw $a2 24($sp) +sw $ra 28($sp) +move $t0 $a0 +add $t0 $t0 $a1 +li $t1 4 +div $a2 $t1 +mfhi $t2 +bne $t2 $zero substr_allign_size +move $t1 $a2 +j substr_new_chunk +substr_allign_size: +sub $t1 $t1 $t2 +add $t1 $t1 $a2 +substr_new_chunk: +move $a0 $t1 +jal allocate +move $t3 $v0 +move $t1 $zero +while_substr_copy: +beq $t1 $a2 substr_end +lb $t2 0($t0) +sb $t2 0($t3) +addiu $t0 $t0 1 +addiu $t3 $t3 1 +addiu $t1 $t1 1 +j while_substr_copy +substr_end: +sb $zero 0($t3) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $t3 12($sp) +lw $a0 16($sp) +lw $a1 20($sp) +lw $a2 24($sp) +lw $ra 28($sp) +addiu $sp $sp 32 +jr $ra + +concat: +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $ra 20($sp) +move $t0 $a0 +move $t1 $a1 +addiu $a0 $a2 1 +li $t2 4 +div $a0 $t2 +mfhi $a0 +bne $a0 $zero concat_allign_size +addiu $a0 $a2 1 +j concat_size_allignned +concat_allign_size: +sub $t2 $t2 $a0 +add $a0 $a2 $t2 +addiu $a0 $a0 1 +concat_size_allignned: +jal allocate +move $t2 $v0 +j first_while_concat_copy +first_while_concat_copy: +lb $a0 0($t0) +beq $a0 $zero second_while_concat_copy +sb $a0 0($t2) +addiu $t0 $t0 1 +addiu $t2 $t2 1 +j first_while_concat_copy +second_while_concat_copy: +lb $a0 0($t1) +beq $a0 $zero concat_end +sb $a0 0($t2) +addiu $t1 $t1 1 +addiu $t2 $t2 1 +j second_while_concat_copy +concat_end: +sb $zero 0($t2) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $ra 20($sp) +addiu $sp $sp 24 +jr $ra + +length: +addiu $sp $sp -8 +sw $t0 0($sp) +sw $t1 4($sp) +move $t0 $a0 +move $v0 $zero +while_len: +lb $t1 0($t0) +beq $t1 $zero len_end +addi $v0 $v0 1 +addiu $t0 $t0 1 +j while_len +len_end: +lw $t0 0($sp) +lw $t1 4($sp) +addiu $sp $sp 8 +jr $ra \ No newline at end of file diff --git a/tests/codegen/print-cool.mips b/tests/codegen/print-cool.mips new file mode 100644 index 000000000..6f9b542e8 --- /dev/null +++ b/tests/codegen/print-cool.mips @@ -0,0 +1,1234 @@ +.data +default_str: .asciiz "" +.word 0 +data_1: .asciiz "Object" +.word 0 +data_2: .asciiz "IO" +.word 0 +data_3: .asciiz "String" +.word 0 +data_4: .asciiz "Int" +.word 0 +data_5: .asciiz "Bool" +.word 0 +data_6: .asciiz "Main" +.word 0 +data_7: .asciiz " +" +.word 0 +data_8: .asciiz "" +.word 0 +data_9: .asciiz "Abort called from class " +.word 0 +data_10: .asciiz "Index out of range exception" +.word 0 +data_11: .asciiz "Function call in a void instance" +.word 0 +data_12: .asciiz "Function call in a void instance" +.word 0 +data_13: .asciiz "Function call in a void instance" +.word 0 +data_14: .asciiz "Function call in a void instance" +.word 0 +data_15: .asciiz "Function call in a void instance" +.word 0 +data_16: .asciiz "Function call in a void instance" +.word 0 +data_17: .asciiz "\n" +.word 0 +data_18: .asciiz "Function call in a void instance" + + +types_table: +.word data_1 +.word data_2 +.word data_3 +.word data_4 +.word data_5 +.word data_6 + +prototype_table: + .word type_1_prototype + .word type_2_prototype + .word type_3_prototype + .word type_4_prototype + .word type_5_prototype + .word type_6_prototype + +type_1_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __ctor_Object + +type_1_prototype: +.word 0 +.word 4 +.word type_1_dispatch +.word -1 + + +type_2_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word function_out_string_at_IO +.word function_out_int_at_IO +.word function_in_string_at_IO +.word function_in_int_at_IO +.word __ctor_IO + +type_2_prototype: +.word 1 +.word 4 +.word type_2_dispatch +.word -1 + + +type_3_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word function_length_at_String +.word function_concat_at_String +.word function_substr_at_String +.word __ctor_String + +type_3_prototype: +.word 2 +.word 6 +.word type_3_dispatch +.word 0 +.word 0 +.word -1 + + +type_4_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __ctor_Int + +type_4_prototype: +.word 3 +.word 5 +.word type_4_dispatch +.word 0 +.word -1 + + +type_5_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __ctor_Bool + +type_5_prototype: +.word 4 +.word 5 +.word type_5_dispatch +.word 0 +.word -1 + + +type_6_dispatch: +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_main_at_Main +.word __attributes_ctor_Main +.word __ctor_Main + +type_6_prototype: +.word 5 +.word 4 +.word type_6_dispatch +.word -1 + + +.text +.globl main +__ctor_Object: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 0 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_abort_at_Object: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +la $t0 data_9 +sw $t0 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +la $t0 data_7 +sw $t0 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +li $v0 10 +syscall +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_type_name_at_Object: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_copy_at_Object: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $a0 4($t0) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t0 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 1 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_out_string_at_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +lw $v0 4($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_out_int_at_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -12($fp) +li $v0 1 +lw $a0 -12($fp) +syscall +lw $v0 4($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_in_string_at_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +jal read_string +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_in_int_at_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $v0 5 +syscall +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_String: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +li $t0 2 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -20($fp) +lw $t0 -20($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $a0 0($fp) +jal length +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -20($fp) +lw $t1 -12($fp) +sw $t1 16($t0) +lw $v0 -20($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_length_at_String: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 16($t0) +sw $t1 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_concat_at_String: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -24 +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -32($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 4($fp) +lw $t1 16($t0) +sw $t1 -24($fp) +lw $t0 0($fp) +lw $t1 16($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 12($t0) +sw $t1 -24($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 -20($fp) +add $t0 $t0 $t1 +sw $t0 -24($fp) +lw $a0 -32($fp) +lw $a1 -28($fp) +lw $a2 -24($fp) +jal concat +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 24 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_substr_at_String: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -36 +lw $t0 8($fp) +lw $t1 12($t0) +sw $t1 -16($fp) +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -40($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -36($fp) +lw $t0 8($fp) +lw $t1 16($t0) +sw $t1 -32($fp) +lw $t0 -32($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 -36($fp) +lw $t1 -40($fp) +add $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -28($fp) +lw $t1 -24($fp) +slt $t1 $t0 $t1 +sw $t1 -20($fp) +lw $t0 -20($fp) +bne $t0 $zero label_1 +j label_2 +label_1: +li $v0 4 +la $a0 data_10 +syscall +li $v0 10 +syscall +label_2: +lw $a0 -16($fp) +lw $a1 -40($fp) +lw $a2 -36($fp) +jal substr +sw $v0 -44($fp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 36 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_Int: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 3 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_Bool: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 4 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +jal __ctor_Main +sw $v0 -12($fp) +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal function_main_at_Main +addi $sp $sp 4 +sw $v0 -12($fp) +li $v0 0 +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +li $v0 10 +syscall + +__attributes_ctor_Main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp 0 +lw $v0 0($fp) +addi $sp $sp 0 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_main_at_Main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -92 +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -100($fp) +li $t0 3 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -96($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -88($fp) +lw $t0 -88($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -92($fp) +lw $t0 -92($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -84($fp) +lw $t0 -84($fp) +bne $t0 $zero label_3 +j label_4 +label_3: +li $v0 4 +la $a0 data_11 +syscall +li $v0 10 +syscall +label_4: +lw $t0 -92($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -92($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 4($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -80($fp) +lw $t0 -80($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_5 +j label_6 +label_5: +li $v0 4 +la $a0 data_12 +syscall +li $v0 10 +syscall +label_6: +lw $t0 -80($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -100($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -96($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -80($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -72($fp) +li $t0 4 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -68($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -64($fp) +jal __ctor_Object +sw $v0 -60($fp) +lw $t0 -60($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -56($fp) +lw $t0 -56($fp) +bne $t0 $zero label_7 +j label_8 +label_7: +li $v0 4 +la $a0 data_13 +syscall +li $v0 10 +syscall +label_8: +lw $t0 -60($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -60($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 4($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -52($fp) +lw $t0 -52($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -48($fp) +lw $t0 -48($fp) +bne $t0 $zero label_9 +j label_10 +label_9: +li $v0 4 +la $a0 data_14 +syscall +li $v0 10 +syscall +label_10: +lw $t0 -52($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -68($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -64($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -52($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -44($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -40($fp) +lw $t0 -40($fp) +bne $t0 $zero label_11 +j label_12 +label_11: +li $v0 4 +la $a0 data_15 +syscall +li $v0 10 +syscall +label_12: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -36($fp) +lw $t0 -36($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_13 +j label_14 +label_13: +li $v0 4 +la $a0 data_16 +syscall +li $v0 10 +syscall +label_14: +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -72($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -28($fp) +la $t0 data_17 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_15 +j label_16 +label_15: +li $v0 4 +la $a0 data_18 +syscall +li $v0 10 +syscall +label_16: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 92 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_Main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 5 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_Main +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + + + +equal_str: +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $a0 8($sp) +sw $a1 12($sp) +sw $t2 16($sp) +sw $t3 20($sp) +move $t0 $a0 +move $t1 $a1 +while_equal_str: +lb $t2 0($t0) +lb $t3 0($t1) +bne $t2 $t3 equal_str_different_strings +beq $t2 $zero first_end_equal_str +beq $t3 $zero second_end_equal_str +addi $t1 $t1 1 +addi $t0 $t0 1 +j while_equal_str +equal_str_different_strings: +move $v0 $zero +j equal_str_end +first_end_equal_str: +beq $t3 $zero second_end_equal_str +move $v0 $zero +j equal_str_end +second_end_equal_str: +li $v0 1 +equal_str_end: +lw $t0 0($sp) +lw $t1 4($sp) +lw $a0 8($sp) +lw $a1 12($sp) +lw $t2 16($sp) +lw $t3 20($sp) +addiu $sp $sp 24 +jr $ra + +allocate: +addiu $sp $sp -12 +sw $a0 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +li $t0 4 +div $a0 $t0 +mfhi $t1 +sub $t0 $t0 $t1 +add $a0 $a0 $t0 +li $v0 9 +syscall +lw $a0 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +addiu $sp $sp 12 +jr $ra + +copy: +addiu $sp $sp -16 +sw $a0 0($sp) +sw $a1 4($sp) +sw $a2 8($sp) +sw $t0 12($sp) +while_copy: +beq $a2 $zero copy_end +lw $t0 0($a0) +sw $t0 0($a1) +addiu $a0 $a0 4 +addiu $a1 $a1 4 +addi $a2 $a2 -4 +j while_copy +copy_end: +lw $a0 0($sp) +lw $a1 4($sp) +lw $a2 8($sp) +lw $t0 12($sp) +addiu $sp $sp 16 +jr $ra + +read_string: +addiu $sp $sp -28 +sw $ra 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $a2 20($sp) +sw $t2 24($sp) +li $t0 8 +addi $a0 $t0 4 +jal allocate +move $t1 $v0 +move $t2 $zero +while_read_string: +addu $a0 $t1 $t2 +subu $a1 $t0 $t2 +addu $t2 $t2 $a1 +jal read_string_up_to +beq $v0 $zero read_string_not_finished +move $v0 $t1 +j end_read_string +read_string_not_finished: +sll $t0 $t0 1 +addi $a0 $t0 4 +jal allocate +move $a0 $t1 +move $t1 $v0 +move $a1 $v0 +move $a2 $t2 +jal copy +j while_read_string +end_read_string: +lw $ra 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $a2 20($sp) +lw $t2 24($sp) +addiu $sp $sp 28 +jr $ra +read_string_up_to: +addiu $sp $sp -28 +sw $ra 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +sw $t2 12($sp) +sw $t3 16($sp) +sw $t4 20($sp) +sw $t5 24($sp) +move $t0 $a0 +move $t1 $zero +li $t2 10 +addu $t3 $t0 $a1 +addiu $a1 $a1 1 +li $v0 8 +syscall +lw $a0 0($a0) +beq $a0 $zero eol_terminated +li $v0 0 +eol_check: +beq $t0 $t3 read_loop_continue +lb $t1 0($t0) +beq $t1 $t2 eol_terminated +addiu $t0 $t0 1 +j eol_check +eol_terminated: +sb $zero 0($t0) +li $v0 1 +read_loop_continue: +lw $ra 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +lw $t2 12($sp) +lw $t3 16($sp) +lw $t4 20($sp) +lw $t5 24($sp) +addiu $sp $sp 28 +jr $ra + +substr: +addiu $sp $sp -32 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $t3 12($sp) +sw $a0 16($sp) +sw $a1 20($sp) +sw $a2 24($sp) +sw $ra 28($sp) +move $t0 $a0 +add $t0 $t0 $a1 +li $t1 4 +div $a2 $t1 +mfhi $t2 +bne $t2 $zero substr_allign_size +move $t1 $a2 +j substr_new_chunk +substr_allign_size: +sub $t1 $t1 $t2 +add $t1 $t1 $a2 +substr_new_chunk: +move $a0 $t1 +jal allocate +move $t3 $v0 +move $t1 $zero +while_substr_copy: +beq $t1 $a2 substr_end +lb $t2 0($t0) +sb $t2 0($t3) +addiu $t0 $t0 1 +addiu $t3 $t3 1 +addiu $t1 $t1 1 +j while_substr_copy +substr_end: +sb $zero 0($t3) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $t3 12($sp) +lw $a0 16($sp) +lw $a1 20($sp) +lw $a2 24($sp) +lw $ra 28($sp) +addiu $sp $sp 32 +jr $ra + +concat: +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $ra 20($sp) +move $t0 $a0 +move $t1 $a1 +addiu $a0 $a2 1 +li $t2 4 +div $a0 $t2 +mfhi $a0 +bne $a0 $zero concat_allign_size +addiu $a0 $a2 1 +j concat_size_allignned +concat_allign_size: +sub $t2 $t2 $a0 +add $a0 $a2 $t2 +addiu $a0 $a0 1 +concat_size_allignned: +jal allocate +move $t2 $v0 +j first_while_concat_copy +first_while_concat_copy: +lb $a0 0($t0) +beq $a0 $zero second_while_concat_copy +sb $a0 0($t2) +addiu $t0 $t0 1 +addiu $t2 $t2 1 +j first_while_concat_copy +second_while_concat_copy: +lb $a0 0($t1) +beq $a0 $zero concat_end +sb $a0 0($t2) +addiu $t1 $t1 1 +addiu $t2 $t2 1 +j second_while_concat_copy +concat_end: +sb $zero 0($t2) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $ra 20($sp) +addiu $sp $sp 24 +jr $ra + +length: +addiu $sp $sp -8 +sw $t0 0($sp) +sw $t1 4($sp) +move $t0 $a0 +move $v0 $zero +while_len: +lb $t1 0($t0) +beq $t1 $zero len_end +addi $v0 $v0 1 +addiu $t0 $t0 1 +j while_len +len_end: +lw $t0 0($sp) +lw $t1 4($sp) +addiu $sp $sp 8 +jr $ra \ No newline at end of file diff --git a/tests/codegen/sort-list.mips b/tests/codegen/sort-list.mips new file mode 100644 index 000000000..2f4cf3aeb --- /dev/null +++ b/tests/codegen/sort-list.mips @@ -0,0 +1,2839 @@ +.data +default_str: .asciiz "" +.word 0 +data_1: .asciiz "Object" +.word 0 +data_2: .asciiz "IO" +.word 0 +data_3: .asciiz "String" +.word 0 +data_4: .asciiz "Int" +.word 0 +data_5: .asciiz "Bool" +.word 0 +data_6: .asciiz "List" +.word 0 +data_7: .asciiz "Cons" +.word 0 +data_8: .asciiz "Nil" +.word 0 +data_9: .asciiz "Main" +.word 0 +data_10: .asciiz " +" +.word 0 +data_11: .asciiz "" +.word 0 +data_12: .asciiz "Abort called from class " +.word 0 +data_13: .asciiz "Index out of range exception" +.word 0 +data_14: .asciiz "Function call in a void instance" +.word 0 +data_15: .asciiz "Function call in a void instance" +.word 0 +data_16: .asciiz "Function call in a void instance" +.word 0 +data_17: .asciiz "Function call in a void instance" +.word 0 +data_18: .asciiz "Function call in a void instance" +.word 0 +data_19: .asciiz "Function call in a void instance" +.word 0 +data_20: .asciiz "Function call in a void instance" +.word 0 +data_21: .asciiz "Function call in a void instance" +.word 0 +data_22: .asciiz "Function call in a void instance" +.word 0 +data_23: .asciiz "Function call in a void instance" +.word 0 +data_24: .asciiz "Function call in a void instance" +.word 0 +data_25: .asciiz "Function call in a void instance" +.word 0 +data_26: .asciiz "Function call in a void instance" +.word 0 +data_27: .asciiz "Function call in a void instance" +.word 0 +data_28: .asciiz "Function call in a void instance" +.word 0 +data_29: .asciiz "Function call in a void instance" +.word 0 +data_30: .asciiz "Function call in a void instance" +.word 0 +data_31: .asciiz "Function call in a void instance" +.word 0 +data_32: .asciiz "Function call in a void instance" +.word 0 +data_33: .asciiz "\n" +.word 0 +data_34: .asciiz "Function call in a void instance" +.word 0 +data_35: .asciiz "Function call in a void instance" +.word 0 +data_36: .asciiz "Function call in a void instance" +.word 0 +data_37: .asciiz "Function call in a void instance" +.word 0 +data_38: .asciiz "Function call in a void instance" +.word 0 +data_39: .asciiz "How many numbers to sort? " +.word 0 +data_40: .asciiz "Function call in a void instance" +.word 0 +data_41: .asciiz "Function call in a void instance" +.word 0 +data_42: .asciiz "Function call in a void instance" +.word 0 +data_43: .asciiz "Function call in a void instance" +.word 0 +data_44: .asciiz "Function call in a void instance" +.word 0 +data_45: .asciiz "Function call in a void instance" + + +types_table: +.word data_1 +.word data_2 +.word data_3 +.word data_4 +.word data_5 +.word data_6 +.word data_7 +.word data_8 +.word data_9 + +prototype_table: + .word type_1_prototype + .word type_2_prototype + .word type_3_prototype + .word type_4_prototype + .word type_5_prototype + .word type_6_prototype + .word type_7_prototype + .word type_8_prototype + .word type_9_prototype + +type_1_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __ctor_Object + +type_1_prototype: +.word 0 +.word 4 +.word type_1_dispatch +.word -1 + + +type_2_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word function_out_string_at_IO +.word function_out_int_at_IO +.word function_in_string_at_IO +.word function_in_int_at_IO +.word __ctor_IO + +type_2_prototype: +.word 1 +.word 4 +.word type_2_dispatch +.word -1 + + +type_3_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word function_length_at_String +.word function_concat_at_String +.word function_substr_at_String +.word __ctor_String + +type_3_prototype: +.word 2 +.word 6 +.word type_3_dispatch +.word 0 +.word 0 +.word -1 + + +type_4_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __ctor_Int + +type_4_prototype: +.word 3 +.word 5 +.word type_4_dispatch +.word 0 +.word -1 + + +type_5_dispatch: +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __ctor_Bool + +type_5_prototype: +.word 4 +.word 5 +.word type_5_dispatch +.word 0 +.word -1 + + +type_6_dispatch: +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_car_at_List +.word function_cdr_at_List +.word function_cons_at_List +.word function_insert_at_List +.word function_isNil_at_List +.word function_print_list_at_List +.word function_rcons_at_List +.word function_rev_at_List +.word function_sort_at_List +.word __attributes_ctor_List +.word __ctor_List + +type_6_prototype: +.word 5 +.word 4 +.word type_6_dispatch +.word -1 + + +type_7_dispatch: +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_car_at_Cons +.word function_cdr_at_Cons +.word function_cons_at_List +.word function_insert_at_Cons +.word function_isNil_at_Cons +.word function_print_list_at_Cons +.word function_rcons_at_Cons +.word function_rev_at_Cons +.word function_sort_at_Cons +.word function_init_at_Cons +.word __attributes_ctor_Cons +.word __ctor_Cons + +type_7_prototype: +.word 6 +.word 6 +.word type_7_dispatch +.word 0 +.word 0 +.word -1 + + +type_8_dispatch: +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_car_at_List +.word function_cdr_at_List +.word function_cons_at_List +.word function_insert_at_Nil +.word function_isNil_at_Nil +.word function_print_list_at_Nil +.word function_rcons_at_Nil +.word function_rev_at_Nil +.word function_sort_at_Nil +.word __attributes_ctor_Nil +.word __ctor_Nil + +type_8_prototype: +.word 7 +.word 4 +.word type_8_dispatch +.word -1 + + +type_9_dispatch: +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_iota_at_Main +.word function_main_at_Main +.word __attributes_ctor_Main +.word __ctor_Main + +type_9_prototype: +.word 8 +.word 5 +.word type_9_dispatch +.word 0 +.word -1 + + +.text +.globl main +__ctor_Object: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 0 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_abort_at_Object: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +la $t0 data_12 +sw $t0 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +la $t0 data_10 +sw $t0 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +li $v0 10 +syscall +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_type_name_at_Object: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_copy_at_Object: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $a0 4($t0) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t0 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 1 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_out_string_at_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +lw $v0 4($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_out_int_at_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -12($fp) +li $v0 1 +lw $a0 -12($fp) +syscall +lw $v0 4($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_in_string_at_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +jal read_string +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_in_int_at_IO: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $v0 5 +syscall +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_String: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +li $t0 2 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -20($fp) +lw $t0 -20($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $a0 0($fp) +jal length +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -20($fp) +lw $t1 -12($fp) +sw $t1 16($t0) +lw $v0 -20($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_length_at_String: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 16($t0) +sw $t1 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_concat_at_String: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -24 +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -32($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 4($fp) +lw $t1 16($t0) +sw $t1 -24($fp) +lw $t0 0($fp) +lw $t1 16($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 12($t0) +sw $t1 -24($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 -20($fp) +add $t0 $t0 $t1 +sw $t0 -24($fp) +lw $a0 -32($fp) +lw $a1 -28($fp) +lw $a2 -24($fp) +jal concat +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 24 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_substr_at_String: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -36 +lw $t0 8($fp) +lw $t1 12($t0) +sw $t1 -16($fp) +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -40($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -36($fp) +lw $t0 8($fp) +lw $t1 16($t0) +sw $t1 -32($fp) +lw $t0 -32($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 -36($fp) +lw $t1 -40($fp) +add $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -28($fp) +lw $t1 -24($fp) +slt $t1 $t0 $t1 +sw $t1 -20($fp) +lw $t0 -20($fp) +bne $t0 $zero label_1 +j label_2 +label_1: +li $v0 4 +la $a0 data_13 +syscall +li $v0 10 +syscall +label_2: +lw $a0 -16($fp) +lw $a1 -40($fp) +lw $a2 -36($fp) +jal substr +sw $v0 -44($fp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 36 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_Int: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 3 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_Bool: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 4 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +jal __ctor_Main +sw $v0 -12($fp) +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal function_main_at_Main +addi $sp $sp 4 +sw $v0 -12($fp) +li $v0 0 +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +li $v0 10 +syscall + +__attributes_ctor_List: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp 0 +lw $v0 0($fp) +addi $sp $sp 0 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_isNil_at_List: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -20($fp) +lw $t0 -20($fp) +bne $t0 $zero label_3 +j label_4 +label_3: +li $v0 4 +la $a0 data_14 +syscall +li $v0 10 +syscall +label_4: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 0($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -16($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_cons_at_List: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -16 +jal __ctor_Cons +sw $v0 -20($fp) +lw $t0 -20($fp) +sw $t0 -24($fp) +lw $t0 -24($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_5 +j label_6 +label_5: +li $v0 4 +la $a0 data_15 +syscall +li $v0 10 +syscall +label_6: +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 64($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 16 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_car_at_List: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -20($fp) +lw $t0 -20($fp) +bne $t0 $zero label_7 +j label_8 +label_7: +li $v0 4 +la $a0 data_16 +syscall +li $v0 10 +syscall +label_8: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 0($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -16($fp) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_cdr_at_List: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -20($fp) +lw $t0 -20($fp) +bne $t0 $zero label_9 +j label_10 +label_9: +li $v0 4 +la $a0 data_17 +syscall +li $v0 10 +syscall +label_10: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 0($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -16($fp) +jal __ctor_List +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_rev_at_List: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_11 +j label_12 +label_11: +li $v0 4 +la $a0 data_18 +syscall +li $v0 10 +syscall +label_12: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_sort_at_List: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_13 +j label_14 +label_13: +li $v0 4 +la $a0 data_19 +syscall +li $v0 10 +syscall +label_14: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_insert_at_List: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_15 +j label_16 +label_15: +li $v0 4 +la $a0 data_20 +syscall +li $v0 10 +syscall +label_16: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_rcons_at_List: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_17 +j label_18 +label_17: +li $v0 4 +la $a0 data_21 +syscall +li $v0 10 +syscall +label_18: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_print_list_at_List: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_19 +j label_20 +label_19: +li $v0 4 +la $a0 data_22 +syscall +li $v0 10 +syscall +label_20: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 0($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_List: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 5 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_List +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__attributes_ctor_Cons: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_List +addi $sp $sp 4 +sw $v0 -20($fp) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -16($fp) +lw $t0 0($fp) +lw $t1 -16($fp) +sw $t1 12($t0) +lw $t0 0($fp) +lw $t1 -12($fp) +sw $t1 16($t0) +lw $v0 0($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_isNil_at_Cons: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_init_at_Cons: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp 0 +lw $t0 4($fp) +lw $t1 8($fp) +addi $t1 $t1 12 +sw $t0 0($t1) +lw $t0 0($fp) +lw $t1 8($fp) +addi $t1 $t1 16 +sw $t0 0($t1) +lw $v0 8($fp) +addi $sp $sp 0 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_car_at_Cons: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp 0 +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $v0 0($sp) +addi $sp $sp 4 +addi $sp $sp 0 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_cdr_at_Cons: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp 0 +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $v0 0($sp) +addi $sp $sp 4 +addi $sp $sp 0 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_rev_at_Cons: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -16 +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_21 +j label_22 +label_21: +li $v0 4 +la $a0 data_23 +syscall +li $v0 10 +syscall +label_22: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 56($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 -20($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_23 +j label_24 +label_23: +li $v0 4 +la $a0 data_24 +syscall +li $v0 10 +syscall +label_24: +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 52($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 16 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_sort_at_Cons: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -16 +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_25 +j label_26 +label_25: +li $v0 4 +la $a0 data_25 +syscall +li $v0 10 +syscall +label_26: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 60($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 -20($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_27 +j label_28 +label_27: +li $v0 4 +la $a0 data_26 +syscall +li $v0 10 +syscall +label_28: +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 40($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 16 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_insert_at_Cons: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -56 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -52($fp) +lw $t4 4($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -48($fp) +lw $t0 -52($fp) +lw $t1 -48($fp) +slt $t1 $t0 $t1 +sw $t1 -44($fp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -56($fp) +lw $t0 -56($fp) +lw $t1 12($t0) +sw $t1 -60($fp) +lw $t0 -60($fp) +bne $t0 $zero label_33 +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -40($fp) +lw $t0 -40($fp) +bne $t0 $zero label_29 +j label_30 +label_29: +li $v0 4 +la $a0 data_27 +syscall +li $v0 10 +syscall +label_30: +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 40($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -36($fp) +jal __ctor_Cons +sw $v0 -32($fp) +lw $t0 -32($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -28($fp) +lw $t0 -28($fp) +bne $t0 $zero label_31 +j label_32 +label_31: +li $v0 4 +la $a0 data_28 +syscall +li $v0 10 +syscall +label_32: +lw $t0 -32($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 4($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -32($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 64($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -24($fp) +lw $t0 -24($fp) +sw $t0 -64($fp) +j label_36 +label_33: +jal __ctor_Cons +sw $v0 -20($fp) +lw $t0 -20($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_34 +j label_35 +label_34: +li $v0 4 +la $a0 data_29 +syscall +li $v0 10 +syscall +label_35: +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 64($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -64($fp) +label_36: +lw $v0 -64($fp) +addi $sp $sp 56 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_rcons_at_Cons: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -20 +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -28($fp) +lw $t0 -28($fp) +bne $t0 $zero label_37 +j label_38 +label_37: +li $v0 4 +la $a0 data_30 +syscall +li $v0 10 +syscall +label_38: +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 52($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -24($fp) +jal __ctor_Cons +sw $v0 -20($fp) +lw $t0 -20($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_39 +j label_40 +label_39: +li $v0 4 +la $a0 data_31 +syscall +li $v0 10 +syscall +label_40: +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 4($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 64($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 20 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_print_list_at_Cons: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -32 +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -40($fp) +lw $t0 -40($fp) +bne $t0 $zero label_41 +j label_42 +label_41: +li $v0 4 +la $a0 data_32 +syscall +li $v0 10 +syscall +label_42: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -36($fp) +la $t0 data_33 +sw $t0 -32($fp) +lw $t0 -32($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_43 +j label_44 +label_43: +li $v0 4 +la $a0 data_34 +syscall +li $v0 10 +syscall +label_44: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -20($fp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_45 +j label_46 +label_45: +li $v0 4 +la $a0 data_35 +syscall +li $v0 10 +syscall +label_46: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 48($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 32 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_Cons: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 6 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_Cons +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__attributes_ctor_Nil: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_List +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 0($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_isNil_at_Nil: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_rev_at_Nil: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp 0 +lw $v0 0($fp) +addi $sp $sp 0 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_sort_at_Nil: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp 0 +lw $v0 0($fp) +addi $sp $sp 0 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_insert_at_Nil: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_47 +j label_48 +label_47: +li $v0 4 +la $a0 data_36 +syscall +li $v0 10 +syscall +label_48: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 52($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_rcons_at_Nil: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +jal __ctor_Cons +sw $v0 -20($fp) +lw $t0 -20($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_49 +j label_50 +label_49: +li $v0 4 +la $a0 data_37 +syscall +li $v0 10 +syscall +label_50: +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 64($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_print_list_at_Nil: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_Nil: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 7 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_Nil +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__attributes_ctor_Main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 -12($fp) +sw $t1 12($t0) +lw $v0 0($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_iota_at_Main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -64 +jal __ctor_Nil +sw $v0 -72($fp) +lw $t0 -72($fp) +lw $t1 4($fp) +addi $t1 $t1 12 +sw $t0 0($t1) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -64($fp) +lw $t0 -64($fp) +sw $t0 -68($fp) +label_51: +lw $t0 -68($fp) +lw $t1 12($t0) +sw $t1 -52($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -48($fp) +lw $t0 -52($fp) +lw $t1 -48($fp) +slt $t1 $t0 $t1 +sw $t1 -44($fp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Bool +addi $sp $sp 4 +sw $v0 -56($fp) +lw $t0 -56($fp) +lw $t1 12($t0) +sw $t1 -60($fp) +lw $t0 -60($fp) +bne $t0 $zero label_52 +j label_55 +label_52: +jal __ctor_Cons +sw $v0 -40($fp) +lw $t0 -40($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -36($fp) +lw $t0 -36($fp) +bne $t0 $zero label_53 +j label_54 +label_53: +li $v0 4 +la $a0 data_38 +syscall +li $v0 10 +syscall +label_54: +lw $t0 -40($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -68($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 4($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -40($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 64($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -32($fp) +lw $t0 -32($fp) +lw $t1 4($fp) +addi $t1 $t1 12 +sw $t0 0($t1) +lw $t0 -68($fp) +lw $t1 12($t0) +sw $t1 -24($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 12($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 -20($fp) +add $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_Int +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t0 -28($fp) +sw $t0 -68($fp) +j label_51 +label_55: +lw $t4 4($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $v0 0($sp) +addi $sp $sp 4 +addi $sp $sp 64 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +function_main_at_Main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -56 +la $t0 data_39 +sw $t0 -64($fp) +lw $t0 -64($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __ctor_String +addi $sp $sp 4 +sw $v0 -60($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -56($fp) +lw $t0 -56($fp) +bne $t0 $zero label_56 +j label_57 +label_56: +li $v0 4 +la $a0 data_40 +syscall +li $v0 10 +syscall +label_57: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -60($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -52($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -48($fp) +lw $t0 -48($fp) +bne $t0 $zero label_58 +j label_59 +label_58: +li $v0 4 +la $a0 data_41 +syscall +li $v0 10 +syscall +label_59: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -44($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -40($fp) +lw $t0 -40($fp) +bne $t0 $zero label_60 +j label_61 +label_60: +li $v0 4 +la $a0 data_42 +syscall +li $v0 10 +syscall +label_61: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -36($fp) +lw $t0 -36($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_62 +j label_63 +label_62: +li $v0 4 +la $a0 data_43 +syscall +li $v0 10 +syscall +label_63: +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 56($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t0 -28($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_64 +j label_65 +label_64: +li $v0 4 +la $a0 data_44 +syscall +li $v0 10 +syscall +label_65: +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 60($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 -20($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_66 +j label_67 +label_66: +li $v0 4 +la $a0 data_45 +syscall +li $v0 10 +syscall +label_67: +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 48($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 56 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + +__ctor_Main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 8 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __attributes_ctor_Main +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + + + +equal_str: +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $a0 8($sp) +sw $a1 12($sp) +sw $t2 16($sp) +sw $t3 20($sp) +move $t0 $a0 +move $t1 $a1 +while_equal_str: +lb $t2 0($t0) +lb $t3 0($t1) +bne $t2 $t3 equal_str_different_strings +beq $t2 $zero first_end_equal_str +beq $t3 $zero second_end_equal_str +addi $t1 $t1 1 +addi $t0 $t0 1 +j while_equal_str +equal_str_different_strings: +move $v0 $zero +j equal_str_end +first_end_equal_str: +beq $t3 $zero second_end_equal_str +move $v0 $zero +j equal_str_end +second_end_equal_str: +li $v0 1 +equal_str_end: +lw $t0 0($sp) +lw $t1 4($sp) +lw $a0 8($sp) +lw $a1 12($sp) +lw $t2 16($sp) +lw $t3 20($sp) +addiu $sp $sp 24 +jr $ra + +allocate: +addiu $sp $sp -12 +sw $a0 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +li $t0 4 +div $a0 $t0 +mfhi $t1 +sub $t0 $t0 $t1 +add $a0 $a0 $t0 +li $v0 9 +syscall +lw $a0 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +addiu $sp $sp 12 +jr $ra + +copy: +addiu $sp $sp -16 +sw $a0 0($sp) +sw $a1 4($sp) +sw $a2 8($sp) +sw $t0 12($sp) +while_copy: +beq $a2 $zero copy_end +lw $t0 0($a0) +sw $t0 0($a1) +addiu $a0 $a0 4 +addiu $a1 $a1 4 +addi $a2 $a2 -4 +j while_copy +copy_end: +lw $a0 0($sp) +lw $a1 4($sp) +lw $a2 8($sp) +lw $t0 12($sp) +addiu $sp $sp 16 +jr $ra + +read_string: +addiu $sp $sp -28 +sw $ra 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $a2 20($sp) +sw $t2 24($sp) +li $t0 8 +addi $a0 $t0 4 +jal allocate +move $t1 $v0 +move $t2 $zero +while_read_string: +addu $a0 $t1 $t2 +subu $a1 $t0 $t2 +addu $t2 $t2 $a1 +jal read_string_up_to +beq $v0 $zero read_string_not_finished +move $v0 $t1 +j end_read_string +read_string_not_finished: +sll $t0 $t0 1 +addi $a0 $t0 4 +jal allocate +move $a0 $t1 +move $t1 $v0 +move $a1 $v0 +move $a2 $t2 +jal copy +j while_read_string +end_read_string: +lw $ra 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $a2 20($sp) +lw $t2 24($sp) +addiu $sp $sp 28 +jr $ra +read_string_up_to: +addiu $sp $sp -28 +sw $ra 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +sw $t2 12($sp) +sw $t3 16($sp) +sw $t4 20($sp) +sw $t5 24($sp) +move $t0 $a0 +move $t1 $zero +li $t2 10 +addu $t3 $t0 $a1 +addiu $a1 $a1 1 +li $v0 8 +syscall +lw $a0 0($a0) +beq $a0 $zero eol_terminated +li $v0 0 +eol_check: +beq $t0 $t3 read_loop_continue +lb $t1 0($t0) +beq $t1 $t2 eol_terminated +addiu $t0 $t0 1 +j eol_check +eol_terminated: +sb $zero 0($t0) +li $v0 1 +read_loop_continue: +lw $ra 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +lw $t2 12($sp) +lw $t3 16($sp) +lw $t4 20($sp) +lw $t5 24($sp) +addiu $sp $sp 28 +jr $ra + +substr: +addiu $sp $sp -32 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $t3 12($sp) +sw $a0 16($sp) +sw $a1 20($sp) +sw $a2 24($sp) +sw $ra 28($sp) +move $t0 $a0 +add $t0 $t0 $a1 +li $t1 4 +div $a2 $t1 +mfhi $t2 +bne $t2 $zero substr_allign_size +move $t1 $a2 +j substr_new_chunk +substr_allign_size: +sub $t1 $t1 $t2 +add $t1 $t1 $a2 +substr_new_chunk: +move $a0 $t1 +jal allocate +move $t3 $v0 +move $t1 $zero +while_substr_copy: +beq $t1 $a2 substr_end +lb $t2 0($t0) +sb $t2 0($t3) +addiu $t0 $t0 1 +addiu $t3 $t3 1 +addiu $t1 $t1 1 +j while_substr_copy +substr_end: +sb $zero 0($t3) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $t3 12($sp) +lw $a0 16($sp) +lw $a1 20($sp) +lw $a2 24($sp) +lw $ra 28($sp) +addiu $sp $sp 32 +jr $ra + +concat: +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $ra 20($sp) +move $t0 $a0 +move $t1 $a1 +addiu $a0 $a2 1 +li $t2 4 +div $a0 $t2 +mfhi $a0 +bne $a0 $zero concat_allign_size +addiu $a0 $a2 1 +j concat_size_allignned +concat_allign_size: +sub $t2 $t2 $a0 +add $a0 $a2 $t2 +addiu $a0 $a0 1 +concat_size_allignned: +jal allocate +move $t2 $v0 +j first_while_concat_copy +first_while_concat_copy: +lb $a0 0($t0) +beq $a0 $zero second_while_concat_copy +sb $a0 0($t2) +addiu $t0 $t0 1 +addiu $t2 $t2 1 +j first_while_concat_copy +second_while_concat_copy: +lb $a0 0($t1) +beq $a0 $zero concat_end +sb $a0 0($t2) +addiu $t1 $t1 1 +addiu $t2 $t2 1 +j second_while_concat_copy +concat_end: +sb $zero 0($t2) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $ra 20($sp) +addiu $sp $sp 24 +jr $ra + +length: +addiu $sp $sp -8 +sw $t0 0($sp) +sw $t1 4($sp) +move $t0 $a0 +move $v0 $zero +while_len: +lb $t1 0($t0) +beq $t1 $zero len_end +addi $v0 $v0 1 +addiu $t0 $t0 1 +j while_len +len_end: +lw $t0 0($sp) +lw $t1 4($sp) +addiu $sp $sp 8 +jr $ra \ No newline at end of file diff --git a/tests/lexer/iis1_error.txt b/tests/lexer/iis1_error.txt index 9e6d66cac..8a81a2472 100644 --- a/tests/lexer/iis1_error.txt +++ b/tests/lexer/iis1_error.txt @@ -1 +1 @@ -(4, 2) - LexicographicError: ERROR "!" +(4,2) - LexicographicError: ERROR "!" diff --git a/tests/lexer_test.py b/tests/lexer_test.py index 2a27223d3..7cc100b22 100644 --- a/tests/lexer_test.py +++ b/tests/lexer_test.py @@ -2,12 +2,15 @@ import os from utils import compare_errors -tests_dir = __file__.rpartition('/')[0] + '/lexer/' -tests = [(file) for file in os.listdir(tests_dir) if file.endswith('.cl')] - +tests_dir = __file__.rpartition("/")[0] + "/lexer/" +tests = [(file) for file in os.listdir(tests_dir) if file.endswith(".cl")] @pytest.mark.lexer @pytest.mark.error @pytest.mark.run(order=1) @pytest.mark.parametrize("cool_file", tests) def test_lexer_errors(compiler_path, cool_file): - compare_errors(compiler_path, tests_dir + cool_file, tests_dir + cool_file[:-3] + '_error.txt') \ No newline at end of file + print(compiler_path) + print(cool_file) + compare_errors( + compiler_path, tests_dir + cool_file, tests_dir + cool_file[:-3] + "_error.txt" + ) diff --git a/tests/parser_test.py b/tests/parser_test.py index 129c0f20a..5c98fd1b2 100644 --- a/tests/parser_test.py +++ b/tests/parser_test.py @@ -2,12 +2,13 @@ import os from utils import compare_errors -tests_dir = __file__.rpartition('/')[0] + '/parser/' -tests = [(file) for file in os.listdir(tests_dir) if file.endswith('.cl')] - +tests_dir = __file__.rpartition("/")[0] + "/parser/" +tests = [(file) for file in os.listdir(tests_dir) if file.endswith(".cl")] @pytest.mark.parser @pytest.mark.error @pytest.mark.run(order=2) @pytest.mark.parametrize("cool_file", tests) def test_parser_errors(compiler_path, cool_file): - compare_errors(compiler_path, tests_dir + cool_file, tests_dir + cool_file[:-3] + '_error.txt') \ No newline at end of file + compare_errors( + compiler_path, tests_dir + cool_file, tests_dir + cool_file[:-3] + "_error.txt" + ) diff --git a/tests/semantic_test.py b/tests/semantic_test.py index cac9cd78b..5e8fae4b7 100644 --- a/tests/semantic_test.py +++ b/tests/semantic_test.py @@ -2,8 +2,9 @@ import os from utils import compare_errors, first_error_only_line -tests_dir = __file__.rpartition('/')[0] + '/semantic/' -tests = [(file) for file in os.listdir(tests_dir) if file.endswith('.cl')] +tests_dir = __file__.rpartition("/")[0] + "/semantic/" +tests = [(file) for file in os.listdir(tests_dir) if file.endswith(".cl")] + @pytest.mark.semantic @pytest.mark.error @@ -11,4 +12,4 @@ @pytest.mark.parametrize("cool_file", tests) def test_semantic_errors(compiler_path, cool_file): compare_errors(compiler_path, tests_dir + cool_file, tests_dir + cool_file[:-3] + '_error.txt', \ - cmp=first_error_only_line) \ No newline at end of file + cmp=first_error_only_line) diff --git a/tests/utils/utils.py b/tests/utils/utils.py index 961cf7cbc..3b446e81b 100644 --- a/tests/utils/utils.py +++ b/tests/utils/utils.py @@ -15,6 +15,7 @@ def parse_error(error: str): merror = re.fullmatch(ERROR_FORMAT, error) + assert merror, BAD_ERROR_FORMAT % error return (t(x) for t, x in zip([int, int, str, str], merror.groups())) @@ -68,6 +69,7 @@ def compare_errors(compiler_path: str, cool_file_path: str, error_file_path: str def compare_outputs(compiler_path: str, cool_file_path: str, input_file_path: str, output_file_path: str, timeout=100): try: sp = subprocess.run(['bash', compiler_path, cool_file_path], capture_output=True, timeout=timeout) + print(sp) assert sp.returncode == 0, TEST_MUST_COMPILE % get_file_name(cool_file_path) except subprocess.TimeoutExpired: assert False, COMPILER_TIMEOUT