EnqueueStatementAST.py (9466:23e13ad7091f) EnqueueStatementAST.py (9499:b03b556a8fbb)
1# Copyright (c) 1999-2008 Mark D. Hill and David A. Wood
2# Copyright (c) 2009 The Hewlett-Packard Development Company
3# All rights reserved.
4#
5# Redistribution and use in source and binary forms, with or without
6# modification, are permitted provided that the following conditions are
7# met: redistributions of source code must retain the above copyright
8# notice, this list of conditions and the following disclaimer;

--- 39 unchanged lines hidden (view full) ---

48 msg_type = self.type_ast.type
49
50 # Add new local var to symbol table
51 v = Var(self.symtab, "out_msg", self.location, msg_type, "*out_msg",
52 self.pairs)
53 self.symtab.newSymbol(v)
54
55 # Declare message
1# Copyright (c) 1999-2008 Mark D. Hill and David A. Wood
2# Copyright (c) 2009 The Hewlett-Packard Development Company
3# All rights reserved.
4#
5# Redistribution and use in source and binary forms, with or without
6# modification, are permitted provided that the following conditions are
7# met: redistributions of source code must retain the above copyright
8# notice, this list of conditions and the following disclaimer;

--- 39 unchanged lines hidden (view full) ---

48 msg_type = self.type_ast.type
49
50 # Add new local var to symbol table
51 v = Var(self.symtab, "out_msg", self.location, msg_type, "*out_msg",
52 self.pairs)
53 self.symtab.newSymbol(v)
54
55 # Declare message
56 code("${{msg_type.ident}} *out_msg = \
57 new ${{msg_type.ident}}(curCycle());")
56 code("${{msg_type.ident}} *out_msg = "\
57 "new ${{msg_type.ident}}(curCycle());")
58
59 # The other statements
60 t = self.statements.generate(code, None)
61
62 self.queue_name.assertType("OutPort")
63
64 args = [ "out_msg" ]
65 if "latency" in self:
66 latency = self["latency"]
67 try:
68 # see if this is an integer
69 latency = int(latency)
58
59 # The other statements
60 t = self.statements.generate(code, None)
61
62 self.queue_name.assertType("OutPort")
63
64 args = [ "out_msg" ]
65 if "latency" in self:
66 latency = self["latency"]
67 try:
68 # see if this is an integer
69 latency = int(latency)
70 args.append("%s" % latency)
70 args.append("Cycles(%s)" % latency)
71 except ValueError:
72 # if not, it should be a member
73 args.append("m_%s" % latency)
74
75 args = ", ".join(args)
76 code('(${{self.queue_name.var.code}}).enqueue($args);')
77
78
79 # End scope
80 self.symtab.popFrame()
81 code.dedent()
82 code("}")
83
84 def findResources(self, resources):
85 var = self.queue_name.var
86 res_count = int(resources.get(var, 0))
87 resources[var] = str(res_count + 1)
71 except ValueError:
72 # if not, it should be a member
73 args.append("m_%s" % latency)
74
75 args = ", ".join(args)
76 code('(${{self.queue_name.var.code}}).enqueue($args);')
77
78
79 # End scope
80 self.symtab.popFrame()
81 code.dedent()
82 code("}")
83
84 def findResources(self, resources):
85 var = self.queue_name.var
86 res_count = int(resources.get(var, 0))
87 resources[var] = str(res_count + 1)