Esempio n. 1
0
    def filled(self, params, ctx):
        reads = set()
        writes = set()
        values = dict()
        loads = []

        for x in self.reads:
            if x.startswith("#"):
                assert(len(x) == 2)
                value = params[x[1]]
                operand = placeholders.get(x[1], value)
                # XXX: solution here: just add operand.getDependencies()
                if hasattr(operand, 'target'):
                    reads.add('mem')
                    reads |= splitRegister('HL')  # TODO: XXX: bad
                else:
                    reads |= splitRegister(operand.name)
            else:
                reads |= splitRegister(x)

        for x in self.writes:
            if x.startswith("#"):
                assert(len(x) == 2)
                value = params[x[1]]
                operand = placeholders.get(x[1], value)
                if hasattr(operand, 'target'):
                    name = '['+operand.target.name+']'
                    writes.add('mem')
                    reads |= splitRegister('HL')  # TODO: XXX: bad
                else:
                    name = operand.name
                    writes |= splitRegister(name)
                if x in self.values:
                    e = parse(self.values[x])
                    values[name] = e.optimizedWithContext(ctx)
                    loads.append((name, values[name]))
            else:
                writes |= splitRegister(x)
                if x in self.values:
                    e = parse(self.values[x])
                    values[x] = e.optimizedWithContext(ctx)
                    loads.append((x, values[x]))

        #values = dict() # TODO: XXX:
        #loads = []

        return reads, writes, values, loads
Esempio n. 2
0
    def filled(self, params, ctx):
        reads = set()
        writes = set()
        values = dict()
        loads = []

        for x in self.reads:
            if x.startswith("#"):
                assert (len(x) == 2)
                value = params[x[1]]
                operand = placeholders.get(x[1], value)
                # XXX: solution here: just add operand.getDependencies()
                if hasattr(operand, 'target'):
                    reads.add('mem')
                    reads |= splitRegister('HL')  # TODO: XXX: bad
                else:
                    reads |= splitRegister(operand.name)
            else:
                reads |= splitRegister(x)

        for x in self.writes:
            if x.startswith("#"):
                assert (len(x) == 2)
                value = params[x[1]]
                operand = placeholders.get(x[1], value)
                if hasattr(operand, 'target'):
                    name = '[' + operand.target.name + ']'
                    writes.add('mem')
                    reads |= splitRegister('HL')  # TODO: XXX: bad
                else:
                    name = operand.name
                    writes |= splitRegister(name)
                if x in self.values:
                    e = parse(self.values[x])
                    values[name] = e.optimizedWithContext(ctx)
                    loads.append((name, values[name]))
            else:
                writes |= splitRegister(x)
                if x in self.values:
                    e = parse(self.values[x])
                    values[x] = e.optimizedWithContext(ctx)
                    loads.append((x, values[x]))

        #values = dict() # TODO: XXX:
        #loads = []

        return reads, writes, values, loads
Esempio n. 3
0
 def getDependencies(self):
     return splitRegister(self.name)
Esempio n. 4
0
 def getDependencySet(self):
     reads = set(self.target_depset.reads)
     for r in joinRegisters(reads):
         if r in self.constant_params:
             reads -= splitRegister(r)
     return DependencySet(reads, self.target_depset.writes)