1 line
14 KiB
JavaScript
1 line
14 KiB
JavaScript
Search.setIndex({"docnames": ["api/Lib", "api/Lib.Allocator", "api/Lib.CFG", "api/Lib.Errors", "api/Lib.FunctionData", "api/Lib.LinearCode", "api/Lib.Operands", "api/Lib.RiscV", "api/Lib.Statement", "api/Lib.Terminator", "api/modules", "index"], "filenames": ["api/Lib.rst", "api/Lib.Allocator.rst", "api/Lib.CFG.rst", "api/Lib.Errors.rst", "api/Lib.FunctionData.rst", "api/Lib.LinearCode.rst", "api/Lib.Operands.rst", "api/Lib.RiscV.rst", "api/Lib.Statement.rst", "api/Lib.Terminator.rst", "api/modules.rst", "index.rst"], "titles": ["Lib package", "Lib.Allocator module", "Lib.CFG module", "Lib.Errors module", "Lib.FunctionData module", "Lib.LinearCode module", "Lib.Operands module", "Lib.RiscV module", "Lib.Statement module", "Lib.Terminator module", "MiniC", "Welcome to MiniC\u2019s documentation!"], "terms": {"alloc": [0, 5, 6, 10], "cfg": [0, 9, 10, 11], "error": [0, 10, 11], "functiondata": [0, 1, 2, 5, 10], "linearcod": [0, 1, 4, 9, 10, 11], "operand": [0, 1, 4, 7, 8, 9, 10, 11], "riscv": [0, 2, 4, 5, 6, 8, 10, 11], "statement": [0, 2, 5, 9, 10, 11], "termin": [0, 2, 10, 11], "thi": [1, 2, 4, 5, 6, 7, 8], "file": [1, 4, 5, 6], "defin": [1, 4, 6, 7, 8, 11], "base": [1, 2, 3, 4, 5, 6, 8, 9], "class": [1, 2, 4, 5, 6, 8, 9, 11], "na\u00efv": 1, "implement": [1, 11], "naivealloc": 1, "fdata": [1, 2, 4, 5], "sourc": [1, 2, 3, 4, 5, 6, 7, 8, 9, 11], "object": [1, 2, 4, 5, 6, 8, 11], "gener": [1, 5, 6], "naiv": [1, 2, 11], "allinmem": 1, "smart": 1, "replac": [1, 2, 5, 6], "all": [1, 2, 6, 11], "temporari": [1, 4, 5, 6], "code": [1, 2, 5, 7, 11], "actual": [1, 6], "data": [1, 6, 11], "locat": [1, 6, 8], "i": [1, 2, 4, 5, 6, 7, 8, 9], "done": 1, "two": [1, 9], "step": 1, "first": [1, 8, 9], "prepar": 1, "respons": 1, "call": [1, 5, 6, 7, 8, 9], "temporarypool": [1, 4, 6], "set_temp_alloc": [1, 6], "map": [1, 6], "from": [1, 6, 8], "where": 1, "thei": 1, "should": [1, 8, 9, 11], "store": [1, 4], "regist": [1, 6], "memori": [1, 4, 6, 11], "Then": 1, "each": [1, 2, 5, 9, 11], "instruct": [1, 2, 5, 7, 8, 9, 11], "order": 1, "previous": 1, "assign": 1, "possibli": 1, "add": [1, 2, 5, 6, 7], "some": [1, 4, 5], "befor": [1, 11], "after": 1, "concret": 1, "return": [1, 2, 4, 5, 6, 9], "list": [1, 2, 5, 6, 8, 9, 11], "origin": 1, "The": [1, 5, 6, 8, 9, 11], "iter": [1, 2, 5], "over": [1, 2, 5], "handl": 1, "transpar": 1, "iter_stat": [1, 2, 5], "none": [1, 2, 5, 6, 8, 9], "instr": [1, 2], "transform": 1, "an": [1, 2, 5, 8], "rewritecod": 1, "listcod": 1, "modifi": 1, "try": 1, "fail": 1, "ar": [1, 4, 6, 8, 9, 11], "more": 1, "than": [1, 6], "old_instr": 1, "correspond": 1, "too": 1, "mani": 1, "itself": [2, 6], "block": [2, 9, 11], "its": [2, 6, 8, 11], "basic": [2, 11], "label": [2, 4, 5, 7, 8, 9, 11], "inst": 2, "instru3a": [2, 5, 7, 8], "comment": [2, 5, 8], "absolutejump": [2, 5, 7, 8, 9], "branchingtermin": [2, 9], "A": [2, 6, 8, 9], "made": 2, "three": [2, 9], "main": 2, "part": 2, "start": 2, "uniqu": [2, 4], "identifi": 2, "bodi": 2, "exclud": 2, "jump": [2, 7, 8, 9], "branch": [2, 6, 8, 9], "repres": [2, 11], "final": 2, "point": 2, "successor": [2, 9], "see": [2, 5], "document": 2, "further": 2, "explan": 2, "to_dot": 2, "str": [2, 4, 5, 6, 8], "output": [2, 5, 8, 9], "string": [2, 4, 6], "get_bodi": 2, "phi": 2, "node": 2, "nor": 2, "get_all_stat": 2, "includ": 2, "get_label": 2, "get_in": 2, "edg": 2, "consid": [2, 8], "get_termin": 2, "set_termin": 2, "term": 2, "set": [2, 8], "f": [2, 5], "For": [2, 5], "real": [2, 5], "given": [2, 4, 5, 8, 9], "assum": 2, "add_instruct": [2, 5], "complet": [2, 5], "control": 2, "flow": 2, "graph": [2, 5], "function": [2, 4, 5, 6, 7, 8, 9, 11], "mainli": 2, "indic": 2, "entri": 2, "exit": 2, "As": 2, "linear": [2, 5], "metadata": [2, 4], "about": 2, "can": 2, "found": 2, "member": [2, 5], "variabl": [2, 4, 5], "get_start": 2, "set_start": 2, "get_end": 2, "add_block": 2, "blk": 2, "new": [2, 4, 5, 6], "get_block": 2, "name": [2, 4, 5, 6, 8], "get_entri": 2, "predecessor": 2, "add_edg": 2, "src": 2, "dest": 2, "remove_edg": 2, "remov": 2, "out_block": 2, "target": [2, 8, 9], "gather_def": 2, "dict": [2, 6, 8, 9], "ani": 2, "dictionari": 2, "associ": [2, 9], "contain": [2, 4, 5], "one": [2, 6], "definit": 2, "appli": 2, "linearize_na": 2, "procedur": 2, "everywher": 2, "print_cod": [2, 5], "lambda": 2, "print": [2, 5, 8, 9], "print_dot": [2, 5], "filenam": [2, 5], "df": [2, 5], "view": [2, 5], "fals": [2, 5, 9], "except": 3, "minicruntimeerror": 3, "minicinternalerror": 3, "minicunsupportederror": 3, "minictypeerror": 3, "allocationerror": 3, "well": 4, "util": [4, 5, 8], "common": 4, "differ": [4, 6], "intermedi": 4, "represent": [4, 5], "us": [4, 8, 9], "div_by_zero": 4, "usual": 4, "indirectli": 4, "through": 4, "we": [4, 6, 11], "work": [4, 11], "get_nam": 4, "fresh_tmp": [4, 6], "fresh": [4, 6], "which": [4, 5, 6, 8], "ad": 4, "pool": [4, 6], "fresh_offset": 4, "offset": [4, 6], "stack": 4, "decreas": 4, "rel": 4, "fp": [4, 6], "get_offset": [4, 6], "int": [4, 6], "current": 4, "fresh_label": 4, "get_label_div_by_zero": 4, "cap": [5, 7, 9], "codegener": [5, 7], "api": [5, 7], "program": 5, "repeatedli": 5, "codegen": 5, "visitor": 5, "build": [5, 6, 9], "meta": 5, "inform": 5, "instanc": 5, "debug": 5, "purpos": [5, 6], "allow": [5, 6, 11], "conditionaljump": [5, 8, 9], "also": [5, 6], "relev": 5, "must": [5, 6], "either": [5, 6], "If": 5, "noth": 5, "happen": 5, "get_instruct": 5, "add_label": 5, "": [5, 6], "add_com": 5, "add_instruction_println_int": 5, "reg": 5, "dataloc": [5, 6], "integ": [5, 6], "valu": [5, 6], "newlin": 5, "expand": 5, "text": 5, "path": 5, "subclass": 6, "condit": [6, 7, 8, 9], "ha": 6, "address": [6, 8, 11], "immedi": [6, 7], "constant": 6, "yet": 6, "shortcut": 6, "optyp": 6, "e": 6, "comparison": 6, "condjump": 6, "exampl": 6, "usag": 6, "beq": [6, 7], "equal": 6, "minicpars": [6, 7], "lt": 6, "lower": 6, "constructor": 6, "argument": [6, 11], "shall": 6, "all_op": 6, "oper": 6, "gt": 6, "kei": 6, "opdict": 6, "negat": 6, "method": 6, "get": 6, "opposit": 6, "place": 6, "number": 6, "physic": 6, "zero": 6, "ra": 6, "sp": 6, "gp": 6, "tp": 6, "a0": 6, "a1": 6, "a2": 6, "a3": 6, "a4": 6, "a5": 6, "a6": 6, "a7": 6, "s1": 6, "s2": 6, "s3": 6, "s4": 6, "s5": 6, "s6": 6, "s7": 6, "s8": 6, "s9": 6, "s10": 6, "s11": 6, "t": [6, 11], "t0": 6, "t1": 6, "t2": 6, "t3": 6, "t4": 6, "t5": 6, "t6": 6, "gp_reg": 6, "usabl": 6, "basereg": 6, "comput": 6, "val": 6, "been": 6, "It": [6, 8], "later": 6, "get_alloced_loc": 6, "manag": 6, "get_all_temp": 6, "add_tmp": 6, "give": [6, 11], "other": [6, 8], "typic": 6, "type": 6, "enforc": 6, "check": 6, "inde": 6, "renam": [6, 8, 9], "bool": 6, "true": [6, 8, 9], "copi": 6, "mif08": [7, 9], "uncondit": 7, "conditional_jump": 7, "op1": [7, 8, 9], "cond": [7, 8, 9], "op2": [7, 8, 9], "wrapper": 7, "around": 7, "bge": 7, "bgt": 7, "c": 7, "like": 7, "eq": 7, "dr": 7, "sr1": 7, "sr2orimm7": 7, "mul": 7, "div": 7, "rem": 7, "sub": 7, "land": 7, "lor": 7, "xor": 7, "li": 7, "imm7": 7, "mv": 7, "sr": 7, "ld": 7, "mem": 7, "sd": 7, "asm": 8, "inherit": 8, "In": 8, "turn": 8, "regular": 8, "non": [8, 9], "3": [8, 11], "regset_to_str": 8, "registerset": 8, "pretti": 8, "written": 8, "read": 8, "substitut": [8, 9], "subst": [8, 9], "tstatement": 8, "printin": [8, 9], "stream": [8, 9], "never": [8, 9], "both": [8, 9], "ins": 8, "is_read_onli": 8, "onli": 8, "otherwis": 8, "destin": [8, 9], "arg": [8, 9], "take": [8, 9, 11], "absolut": 8, "specif": 8, "kind": [8, 9, 11], "j": [8, 9], "librari": 9, "end": [9, 11], "There": 9, "anoth": 9, "unlik": 9, "wa": 9, "have": [9, 11], "specifi": 9, "mark": 9, "dure": 9, "construct": 9, "jump2termin": 9, "extract": 9, "chunk": 9, "label_then": 9, "label_els": 9, "second": 9, "next_label": 9, "potenti": 9, "lib": [10, 11], "packag": 10, "submodul": 10, "modul": [10, 11], "content": 10, "risc": 11, "v": 11, "These": 11, "page": 11, "variou": 11, "python": 11, "folder": 11, "you": 11, "edit": 11, "them": 11, "assembli": 11, "won": 11, "creat": 11, "directli": 11, "veri": 11, "often": 11, "instead": 11, "easili": 11, "standard": 11, "pseudo": 11, "model": 11, "lab": 11, "4a": 11, "understand": 11, "index": 11, "search": 11}, "objects": {"": [[0, 0, 0, "-", "Lib"]], "Lib": [[1, 0, 0, "-", "Allocator"], [2, 0, 0, "-", "CFG"], [3, 0, 0, "-", "Errors"], [4, 0, 0, "-", "FunctionData"], [5, 0, 0, "-", "LinearCode"], [6, 0, 0, "-", "Operands"], [7, 0, 0, "-", "RiscV"], [8, 0, 0, "-", "Statement"], [9, 0, 0, "-", "Terminator"]], "Lib.Allocator": [[1, 1, 1, "", "Allocator"], [1, 1, 1, "", "NaiveAllocator"]], "Lib.Allocator.Allocator": [[1, 2, 1, "", "prepare"], [1, 2, 1, "", "replace"], [1, 2, 1, "", "rewriteCode"]], "Lib.Allocator.NaiveAllocator": [[1, 2, 1, "", "prepare"], [1, 2, 1, "", "replace"]], "Lib.CFG": [[2, 1, 1, "", "Block"], [2, 1, 1, "", "CFG"]], "Lib.CFG.Block": [[2, 2, 1, "", "add_instruction"], [2, 2, 1, "", "get_all_statements"], [2, 2, 1, "", "get_body"], [2, 2, 1, "", "get_in"], [2, 2, 1, "", "get_label"], [2, 2, 1, "", "get_terminator"], [2, 2, 1, "", "iter_statements"], [2, 2, 1, "", "set_terminator"], [2, 2, 1, "", "to_dot"]], "Lib.CFG.CFG": [[2, 2, 1, "", "add_block"], [2, 2, 1, "", "add_edge"], [2, 3, 1, "", "fdata"], [2, 2, 1, "", "gather_defs"], [2, 2, 1, "", "get_block"], [2, 2, 1, "", "get_blocks"], [2, 2, 1, "", "get_end"], [2, 2, 1, "", "get_entries"], [2, 2, 1, "", "get_start"], [2, 2, 1, "", "iter_statements"], [2, 2, 1, "", "linearize_naive"], [2, 2, 1, "", "out_blocks"], [2, 2, 1, "", "print_code"], [2, 2, 1, "", "print_dot"], [2, 2, 1, "", "remove_edge"], [2, 2, 1, "", "set_start"]], "Lib.Errors": [[3, 4, 1, "", "AllocationError"], [3, 4, 1, "", "MiniCInternalError"], [3, 4, 1, "", "MiniCRuntimeError"], [3, 4, 1, "", "MiniCTypeError"], [3, 4, 1, "", "MiniCUnsupportedError"]], "Lib.FunctionData": [[4, 1, 1, "", "FunctionData"]], "Lib.FunctionData.FunctionData": [[4, 2, 1, "", "fresh_label"], [4, 2, 1, "", "fresh_offset"], [4, 2, 1, "", "fresh_tmp"], [4, 2, 1, "", "get_label_div_by_zero"], [4, 2, 1, "", "get_name"], [4, 2, 1, "", "get_offset"]], "Lib.LinearCode": [[5, 1, 1, "", "LinearCode"]], "Lib.LinearCode.LinearCode": [[5, 2, 1, "", "add_comment"], [5, 2, 1, "", "add_instruction"], [5, 2, 1, "", "add_instruction_PRINTLN_INT"], [5, 2, 1, "", "add_label"], [5, 3, 1, "", "fdata"], [5, 2, 1, "", "get_instructions"], [5, 2, 1, "", "iter_statements"], [5, 2, 1, "", "print_code"], [5, 2, 1, "", "print_dot"]], "Lib.Operands": [[6, 5, 1, "", "A"], [6, 5, 1, "", "A0"], [6, 5, 1, "", "A1"], [6, 1, 1, "", "Condition"], [6, 1, 1, "", "DataLocation"], [6, 5, 1, "", "FP"], [6, 1, 1, "", "Function"], [6, 5, 1, "", "GP"], [6, 5, 1, "", "GP_REGS"], [6, 1, 1, "", "Immediate"], [6, 1, 1, "", "Offset"], [6, 1, 1, "", "Operand"], [6, 5, 1, "", "RA"], [6, 1, 1, "", "Register"], [6, 1, 1, "", "Renamer"], [6, 5, 1, "", "S"], [6, 5, 1, "", "SP"], [6, 5, 1, "", "T"], [6, 5, 1, "", "TP"], [6, 1, 1, "", "Temporary"], [6, 1, 1, "", "TemporaryPool"], [6, 5, 1, "", "ZERO"]], "Lib.Operands.Condition": [[6, 2, 1, "", "negate"]], "Lib.Operands.Offset": [[6, 2, 1, "", "get_offset"]], "Lib.Operands.Renamer": [[6, 2, 1, "", "copy"], [6, 2, 1, "", "defined"], [6, 2, 1, "", "fresh"], [6, 2, 1, "", "replace"]], "Lib.Operands.Temporary": [[6, 2, 1, "", "get_alloced_loc"]], "Lib.Operands.TemporaryPool": [[6, 2, 1, "", "add_tmp"], [6, 2, 1, "", "fresh_tmp"], [6, 2, 1, "", "get_all_temps"], [6, 2, 1, "", "get_alloced_loc"], [6, 2, 1, "", "set_temp_allocation"]], "Lib.RiscV": [[7, 6, 1, "", "add"], [7, 6, 1, "", "call"], [7, 6, 1, "", "conditional_jump"], [7, 6, 1, "", "div"], [7, 6, 1, "", "jump"], [7, 6, 1, "", "land"], [7, 6, 1, "", "ld"], [7, 6, 1, "", "li"], [7, 6, 1, "", "lor"], [7, 6, 1, "", "mul"], [7, 6, 1, "", "mv"], [7, 6, 1, "", "rem"], [7, 6, 1, "", "sd"], [7, 6, 1, "", "sub"], [7, 6, 1, "", "xor"]], "Lib.Statement": [[8, 1, 1, "", "AbsoluteJump"], [8, 1, 1, "", "Comment"], [8, 1, 1, "", "ConditionalJump"], [8, 1, 1, "", "Instru3A"], [8, 1, 1, "", "Instruction"], [8, 1, 1, "", "Label"], [8, 1, 1, "", "Statement"], [8, 6, 1, "", "regset_to_string"]], "Lib.Statement.AbsoluteJump": [[8, 2, 1, "", "args"], [8, 3, 1, "", "ins"], [8, 3, 1, "", "label"], [8, 2, 1, "", "rename"], [8, 2, 1, "", "substitute"], [8, 2, 1, "", "targets"]], "Lib.Statement.Comment": [[8, 3, 1, "", "comment"], [8, 2, 1, "", "printIns"]], "Lib.Statement.ConditionalJump": [[8, 2, 1, "", "args"], [8, 3, 1, "", "cond"], [8, 3, 1, "", "label"], [8, 3, 1, "", "op1"], [8, 3, 1, "", "op2"], [8, 2, 1, "", "rename"], [8, 2, 1, "", "substitute"]], "Lib.Statement.Instru3A": [[8, 2, 1, "", "args"], [8, 2, 1, "", "rename"], [8, 2, 1, "", "substitute"]], "Lib.Statement.Instruction": [[8, 2, 1, "", "args"], [8, 2, 1, "", "defined"], [8, 3, 1, "", "ins"], [8, 2, 1, "", "is_read_only"], [8, 2, 1, "", "printIns"], [8, 2, 1, "", "rename"], [8, 2, 1, "", "used"]], "Lib.Statement.Label": [[8, 3, 1, "", "name"], [8, 2, 1, "", "printIns"]], "Lib.Statement.Statement": [[8, 2, 1, "", "defined"], [8, 2, 1, "", "printIns"], [8, 2, 1, "", "substitute"], [8, 2, 1, "", "used"]], "Lib.Terminator": [[9, 1, 1, "", "BranchingTerminator"], [9, 1, 1, "", "Return"], [9, 6, 1, "", "jump2terminator"]], "Lib.Terminator.BranchingTerminator": [[9, 2, 1, "", "args"], [9, 3, 1, "", "cond"], [9, 3, 1, "", "label_else"], [9, 3, 1, "", "label_then"], [9, 3, 1, "", "op1"], [9, 3, 1, "", "op2"], [9, 2, 1, "", "rename"], [9, 2, 1, "", "substitute"], [9, 2, 1, "", "targets"]], "Lib.Terminator.Return": [[9, 2, 1, "", "args"], [9, 2, 1, "", "printIns"], [9, 2, 1, "", "rename"], [9, 2, 1, "", "substitute"], [9, 2, 1, "", "targets"]]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:method", "3": "py:attribute", "4": "py:exception", "5": "py:data", "6": "py:function"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "method", "Python method"], "3": ["py", "attribute", "Python attribute"], "4": ["py", "exception", "Python exception"], "5": ["py", "data", "Python data"], "6": ["py", "function", "Python function"]}, "titleterms": {"lib": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "packag": 0, "submodul": 0, "modul": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "content": [0, 11], "alloc": [1, 11], "cfg": 2, "error": 3, "functiondata": 4, "linearcod": 5, "operand": 6, "riscv": 7, "statement": 8, "termin": 9, "minic": [10, 11], "welcom": 11, "": 11, "document": 11, "base": 11, "librari": 11, "linear": 11, "intermedi": 11, "represent": 11, "temporari": 11, "control": 11, "flow": 11, "graph": 11, "indic": 11, "tabl": 11}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 6, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.viewcode": 1, "sphinx": 56}}) |