OpenCores
URL https://opencores.org/ocsvn/tcp_socket/tcp_socket/trunk

Subversion Repositories tcp_socket

[/] [tcp_socket/] [trunk/] [chips2/] [chips/] [compiler/] [allocator.py] - Blame information for rev 2

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 jondawson
__author__ = "Jon Dawson"
2
__copyright__ = "Copyright (C) 2012, Jonathan P Dawson"
3
__version__ = "0.1"
4
 
5
class Allocator:
6
 
7
  """Maintain a pool of registers, variables and arrays. Keep track of what they are used for."""
8
 
9
  def __init__(self, reuse):
10
    self.registers = []
11
    self.all_registers = {}
12
    self.memory_size_2 = 0
13
    self.memory_size_4 = 0
14
    self.reuse = reuse
15
    self.memory_content_2 = {}
16
    self.memory_content_4 = {}
17
 
18
  def new_array(self, size, contents, element_size):
19
    if element_size == 2:
20
        reg = self.memory_size_2
21
        self.memory_size_2 += int(size)
22
        if contents is not None:
23
            for location, value in enumerate(contents, reg):
24
                self.memory_content_2[location] = value
25
        return reg
26
    elif element_size == 4:
27
        reg = self.memory_size_4
28
        self.memory_size_4 += int(size)
29
        if contents is not None:
30
            for location, value in enumerate(contents, reg):
31
                self.memory_content_4[location] = value
32
        return reg
33
 
34
 
35
 
36
  def new(self, size, name="temporary_register"):
37
    assert type(size) == int
38
    reg = 0
39
    while reg in self.registers:
40
      reg += 1
41
    self.registers.append(reg)
42
    self.all_registers[reg] = (name, size)
43
    return reg
44
 
45
  def free(self, register):
46
    if register in self.registers and self.reuse:
47
      self.registers.remove(register)

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.