#!/usr/bin/env python3 import sys, os import collections sys.path.append('.') from Compiler.program import * from Compiler.instructions_base import * if len(sys.argv) <= 1: print('Usage: %s ' % sys.argv[0]) res = collections.defaultdict(lambda: 0) regs = collections.defaultdict(lambda: 0) thread_regs = collections.defaultdict(lambda: 0) def process(tapename, res, regs): for inst in Tape.read_instructions(tapename): t = inst.type if issubclass(t, DirectMemoryInstruction): res[t.arg_format[0]] = max(inst.args[1].i + inst.size, res[t.arg_format[0]]) for arg in inst.args: if isinstance(arg, RegisterArgFormat): regs[type(arg)] = max(regs[type(arg)], arg.i + inst.size) tapes = Program.read_tapes(sys.argv[1]) process(next(tapes), res, regs) for tapename in tapes: process(tapename, res, thread_regs) reverse_formats = dict((v, k) for k, v in ArgFormats.items()) regout = lambda regs: dict((reverse_formats[t], n) for t, n in regs.items()) print ('Memory:', dict(res)) print ('Registers in main thread:', regout(regs)) print ('Registers in other threads:', regout(thread_regs))