def compile_string(s):
    ast = compiler.parse(s)
    east = explicate(ast)
    print east
    fast = flatten(east)
    print fast
    assembly = instr_select(fast)
    print assembly
    assembly = regalloc.regalloc(assembly)
    assembly = destructure(assembly)
    assembly = '.globl main\nmain:\n\t' + '\n\t'.join(map(str,assembly)) + '\n'

    print assembly
def compile_file(file_name, output_name):
    ast = compiler.parseFile(file_name)
    east = explicate(ast)
    fast = flatten(east)

    assembly = instr_select(fast)
    assembly = regalloc.regalloc(assembly)
    assembly = destructure(assembly)
    assembly = '.globl main\nmain:\n\t' + '\n\t'.join(map(str,assembly)) + '\n'
    
    output_file = open(output_name, 'w+')
    output_file.write(assembly)
    output_file.close()
Exemple #3
0
def main():
    regs = callee_save_regs
    nregs = len(regs)

    if len(sys.argv) > 1:
        nregs = min(nregs, int(sys.argv[1]))
    if len(sys.argv) > 2:
        sys.stdin = open(sys.argv[2], 'r')
    if len(sys.argv) > 3:
        sys.stdout = open(sys.argv[3], 'w')

    bril = json.load(sys.stdin)
    regs = regs[:nregs]

    for func in bril['functions']:
        regmap, colored, spilled = regalloc(func['instrs'], regs)
        codegen_func(func['name'], func['instrs'], regmap)

    printfooter()
Exemple #4
0
from regalloc import regalloc
from codegen import codegen
import json
import argparse
import sys

REG_PREFIX = "r_"

if __name__ == '__main__':
    parser = argparse.ArgumentParser(
        description='register allocation for bril json format')
    parser.add_argument(
        "--stats",
        action="store_true",
        help="print var to reg mapping instead of code generation")
    parser.add_argument("--num",
                        type=int,
                        default=3,
                        help="number of registers")
    args = parser.parse_args()

    bril = json.load(sys.stdin)

    regs = [REG_PREFIX + '%02d' % (i + 1) for i in range(args.num)]

    for func in bril['functions']:
        regmap, colored, spilled = regalloc(func['instrs'], regs)
        print('%s {' % func['name'])
        codegen(func['instrs'], regmap)
        print('}')