Mercurial > lcfOS
view python/irmach.py @ 275:6f2423df0675
Fixed serve arm-as
author | Windel Bouwman |
---|---|
date | Sat, 14 Sep 2013 17:29:10 +0200 |
parents | ea93e0a7a31e |
children | 046017431c6a |
line wrap: on
line source
""" Abstract assembly language instructions. This is the second intermediate representation. Instructions are selected and scheduled at this stage. """ class Frame: """ Activation record abstraction. This class contains a flattened function. Instructions are selected and scheduled at this stage. Frames differ per machine. """ def __init__(self, name): self.name = name self.instructions = [] self.stacksize = 0 def __repr__(self): return 'Frame {}'.format(self.name) def makeIns(*args, **kwargs): return AbstractInstruction(*args, **kwargs) class AbstractInstruction: """ Abstract machine instruction class. This is a very simple abstraction of machine instructions. """ def __init__(self, assem, src=(), dst=(), jumps=()): self.assem = assem self.src = tuple(src) self.dst = tuple(dst) self.jumps = tuple(jumps) def __repr__(self): s = str(self.src) if self.src else '' d = str(self.dst) if self.dst else '' l = str(self.jumps) if self.jumps else '' #return self.assem + s + d + l return self.render() def render(self): """ Substitutes source, dst and labels in the string """ x = self.assem for i, s in enumerate(self.src): p = '%s{}'.format(i) x = x.replace(p, str(s)) for i, d in enumerate(self.dst): p = '%d{}'.format(i) x = x.replace(p, str(d)) for i, j in enumerate(self.jumps): p = '%l{}'.format(i) x = x.replace(p, str(j)) return x