ruby: Migrate all of ruby and slicc to SCons.
authorNathan Binkert <nate@binkert.org>
Mon, 11 May 2009 17:38:46 +0000 (10:38 -0700)
committerNathan Binkert <nate@binkert.org>
Mon, 11 May 2009 17:38:46 +0000 (10:38 -0700)
Add the PROTOCOL sticky option sets the coherence protocol that slicc
will parse and therefore ruby will use.  This whole process was made
difficult by the fact that the set of files that are output by slicc
are not easily known ahead of time.  The easiest thing wound up being
to write a parser for slicc that would tell me.  Incidentally this
means we now have a slicc grammar written in python.

26 files changed:
SConstruct
src/mem/gems_common/SConscript [new file with mode: 0644]
src/mem/gems_common/ioutil/SConscript [new file with mode: 0644]
src/mem/protocol/SConscript [new file with mode: 0644]
src/mem/protocol/SConsopts [new file with mode: 0644]
src/mem/ruby/SConscript [new file with mode: 0644]
src/mem/ruby/SConsopts [new file with mode: 0644]
src/mem/ruby/buffers/SConscript [new file with mode: 0644]
src/mem/ruby/common/Debug.hh
src/mem/ruby/common/SConscript [new file with mode: 0644]
src/mem/ruby/config/RubyConfig.cc
src/mem/ruby/config/SConscript [new file with mode: 0644]
src/mem/ruby/eventqueue/RubyEventQueue.hh
src/mem/ruby/eventqueue/SConscript [new file with mode: 0644]
src/mem/ruby/init.cc
src/mem/ruby/network/garnet-fixed-pipeline/SConscript [new file with mode: 0644]
src/mem/ruby/network/garnet-flexible-pipeline/SConscript [new file with mode: 0644]
src/mem/ruby/network/orion/SConscript [new file with mode: 0644]
src/mem/ruby/network/simple/SConscript [new file with mode: 0644]
src/mem/ruby/profiler/SConscript [new file with mode: 0644]
src/mem/ruby/recorder/SConscript [new file with mode: 0644]
src/mem/ruby/slicc_interface/SConscript [new file with mode: 0644]
src/mem/ruby/system/SConscript [new file with mode: 0644]
src/mem/ruby/tester/SConscript [new file with mode: 0644]
src/mem/slicc/SConscript [new file with mode: 0644]
src/mem/slicc/parser/parser.py [new file with mode: 0644]

index 7a0bf2794eac14bf68596a7c88a5d9585f31fddf..5cbb50dceebeb68f85ebe50f5d76327695c0c39e 100644 (file)
@@ -410,6 +410,10 @@ else:
     print '       Please fix SConstruct and src/SConscript and try again.'
     Exit(1)
 
+# Set up common yacc/bison flags (needed for Ruby)
+main['YACCFLAGS'] = '-d'
+main['YACCHXXFILESUFFIX'] = '.hh'
+
 # Do this after we save setting back, or else we'll tack on an
 # extra 'qdo' every time we run scons.
 if main['BATCH']:
diff --git a/src/mem/gems_common/SConscript b/src/mem/gems_common/SConscript
new file mode 100644 (file)
index 0000000..bd29a37
--- /dev/null
@@ -0,0 +1,42 @@
+# -*- mode:python -*-
+
+# Copyright (c) 2009 The Hewlett-Packard Development Company
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met: redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer;
+# redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution;
+# neither the name of the copyright holders nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# Authors: Nathan Binkert
+
+Import('*')
+
+#benv['LEXCOM'] = "$LEX $LEXFLAGS -o$TARGET $SOURCES"
+benv = env.Clone()
+benv.Append(YACCFLAGS=["-pat"])
+benv.Append(LEXFLAGS=["-Pat"])
+benv.CXXFile('ioutil/attrlex.ll')
+benv.CXXFile('ioutil/attrparse.yy')
+
+Source('ioutil/attrlex.cc', Werror=False)
+Source('ioutil/attrparse.cc', Werror=False)
+Source('util.cc')
diff --git a/src/mem/gems_common/ioutil/SConscript b/src/mem/gems_common/ioutil/SConscript
new file mode 100644 (file)
index 0000000..4c9357d
--- /dev/null
@@ -0,0 +1,34 @@
+# -*- mode:python -*-
+
+# Copyright (c) 2009 The Hewlett-Packard Development Company
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met: redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer;
+# redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution;
+# neither the name of the copyright holders nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# Authors: Nathan Binkert
+
+Import('*')
+
+Source('confio.cc')
+Source('initvar.cc')
diff --git a/src/mem/protocol/SConscript b/src/mem/protocol/SConscript
new file mode 100644 (file)
index 0000000..3a2e221
--- /dev/null
@@ -0,0 +1,94 @@
+# -*- mode:python -*-
+
+# Copyright (c) 2009 The Hewlett-Packard Development Company
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met: redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer;
+# redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution;
+# neither the name of the copyright holders nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# Authors: Nathan Binkert
+
+import os
+import re
+import string
+import sys
+
+from os.path import basename, dirname, exists, expanduser, isdir, isfile
+from os.path import join as joinpath
+
+import SCons
+
+Import('*')
+
+slicc_dir = Dir('../slicc')
+protocol_dir = Dir('.')
+html_dir = Dir('html')
+
+#
+# Use SLICC
+#
+def slicc_action(target, source, env):
+    slicc_bin = str(source[0])
+    protocol = source[1].get_contents()
+    pdir = str(protocol_dir)
+    hdir = str(html_dir)
+
+    if not isdir(pdir):
+        os.mkdir(pdir)
+    if not isdir(hdir):
+        os.mkdir(hdir)
+
+    do_html = "no_html"
+    cmdline = [ slicc_bin, pdir, hdir, protocol, do_html ]
+    cmdline += [ str(s) for s in source[2:] ]
+    cmdline = ' '.join(cmdline)
+    os.system(cmdline)
+
+protocol = env['PROTOCOL']
+sources = [ protocol_dir.File("RubySlicc_interfaces.slicc"),
+            protocol_dir.File("%s.slicc" % protocol) ]
+
+sm_files = []
+for s in sources:
+    for sm_file in file(File(s).srcnode().abspath, "r"):
+        sm_file = sm_file.strip()
+        if not sm_file:
+            continue
+        if sm_file.startswith("#"):
+            continue
+        sm_file = protocol_dir.File(sm_file)
+        sm_file.srcnode().abspath
+        sm_files.append(sm_file)
+
+sys.path[0:0] = [env['ENV']['M5_PLY']]
+execfile(slicc_dir.File('parser/parser.py').srcnode().abspath)
+
+hh, cc = scan([s.srcnode().abspath for s in sm_files])
+hh = [ protocol_dir.File(f) for f in hh ]
+cc = [ protocol_dir.File(f) for f in cc ]
+
+slicc_bin = slicc_dir.File("slicc")
+env.Command(hh + cc, [ slicc_bin, Value(protocol) ] + sm_files, slicc_action)
+
+for f in cc:
+    Source(f)
diff --git a/src/mem/protocol/SConsopts b/src/mem/protocol/SConsopts
new file mode 100644 (file)
index 0000000..6ca93ca
--- /dev/null
@@ -0,0 +1,55 @@
+# -*- mode:python -*-
+
+# Copyright (c) 2009 The Hewlett-Packard Development Company
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met: redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer;
+# redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution;
+# neither the name of the copyright holders nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# Authors: Nathan Binkert
+
+import os
+
+Import('*')
+
+all_protocols = [
+    'MESI_CMP_directory',
+    'MESI_SCMP_bankdirectory',
+    'MESI_SCMP_bankdirectory_m',
+    'MI_example',
+    'MOESI_CMP_directory',
+    'MOESI_CMP_directory_m',
+    'MOESI_CMP_token',
+    'MOESI_SMP_directory',
+    'MOESI_SMP_token',
+    'MOSI_SMP_bcast',
+    'MOSI_SMP_bcast_1level',
+    'MOSI_SMP_bcast_m',
+    'MOSI_SMP_directory_1level',
+    'MSI_MOSI_CMP_directory',
+    ]
+
+opt = EnumVariable('PROTOCOL', 'Coherence Protocol for Ruby', 'MOSI_SMP_bcast',
+                   all_protocols)
+
+sticky_vars.AddVariables(opt)
diff --git a/src/mem/ruby/SConscript b/src/mem/ruby/SConscript
new file mode 100644 (file)
index 0000000..6ac7dad
--- /dev/null
@@ -0,0 +1,116 @@
+# -*- mode:python -*-
+
+# Copyright (c) 2009 The Hewlett-Packard Development Company
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met: redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer;
+# redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution;
+# neither the name of the copyright holders nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# Authors: Nathan Binkert
+
+import os
+import sys
+
+from os.path import basename, isdir, join as joinpath
+
+import SCons
+
+Import('*')
+
+Source('init.cc')
+
+def do_embed_text(target, source, env):
+    """convert a text file into a file that can be embedded in C
+    using an #include statement, that defines a \"const char *\" pointing
+    to the same text.
+
+    This is useful to embed scripts and configuration files in object files.
+    """
+
+    escape = [ "\'", "\"", "\\", "\?" ]
+
+    # reads the text file in, line by line, converting it to a C string
+    fin = open(str(source[0]), 'r')
+    fout = open(str(target[0]), 'w' )
+    fout.write("static const char *%s =\n" % source[1].get_contents());
+    for l in fin:
+        # add escape sequences for the characters in escape
+        fout.write("\"")
+        for char in l:
+            if char == "\n":
+                break
+            if char in escape:
+                fout.write("\\")
+                fout.write(char)
+            else:
+                fout.write(char)
+        fout.write("\\n\"\n");
+    fout.write(";\n");
+    fin.close()
+    fout.close()
+
+def EmbedText(target, source, param):
+    env.Command(target, [source, Value(param)], do_embed_text)
+
+EmbedText('default_param.hh', 'config/rubyconfig.defaults',
+          'global_default_param')
+EmbedText('tester_param.hh', 'config/tester.defaults',
+          'global_default_tester_param')
+
+#
+# Link includes
+#
+generated_dir = Dir('../protocol')
+
+def MakeIncludeAction(target, source, env):
+    f = file(str(target[0]), 'w')
+    for s in source:
+        print >>f, '#include "%s"' % str(s.abspath)
+    f.close()
+
+def MakeInclude(source):
+    target = generated_dir.File(basename(source))
+    env.Command(target, source, MakeIncludeAction)
+
+MakeInclude('buffers/MessageBuffer.hh')
+MakeInclude('common/Address.hh')
+MakeInclude('common/DataBlock.hh')
+MakeInclude('common/NetDest.hh')
+MakeInclude('common/Set.hh')
+MakeInclude('slicc_interface/AbstractCacheEntry.hh')
+MakeInclude('slicc_interface/AbstractProtocol.hh')
+MakeInclude('slicc_interface/Message.hh')
+MakeInclude('slicc_interface/NetworkMessage.hh')
+MakeInclude('system/CacheMemory.hh')
+MakeInclude('system/DirectoryMemory.hh')
+MakeInclude('system/GenericBloomFilter.hh')
+MakeInclude('system/MachineID.hh')
+MakeInclude('system/MemoryControl.hh')
+MakeInclude('system/NodeID.hh')
+MakeInclude('system/NodePersistentTable.hh')
+MakeInclude('system/PerfectCacheMemory.hh')
+MakeInclude('system/PersistentTable.hh')
+MakeInclude('system/Sequencer.hh')
+MakeInclude('system/StoreBuffer.hh')
+MakeInclude('system/TBETable.hh')
+MakeInclude('system/TimerTable.hh')
diff --git a/src/mem/ruby/SConsopts b/src/mem/ruby/SConsopts
new file mode 100644 (file)
index 0000000..7278558
--- /dev/null
@@ -0,0 +1,38 @@
+# -*- mode:python -*-
+
+# Copyright (c) 2009 The Hewlett-Packard Development Company
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met: redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer;
+# redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution;
+# neither the name of the copyright holders nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# Authors: Nathan Binkert
+
+Import('*')
+
+sticky_vars.AddVariables(
+    BoolVariable('NO_VECTOR_BOUNDS_CHECKS', "Don't do bounds checks", True),
+    BoolVariable('RUBY_DEBUG', "Add debugging stuff to Ruby", False))
+
+export_vars += [ 'NO_VECTOR_BOUNDS_CHECKS', 'RUBY_DEBUG' ]
+
diff --git a/src/mem/ruby/buffers/SConscript b/src/mem/ruby/buffers/SConscript
new file mode 100644 (file)
index 0000000..3b4873c
--- /dev/null
@@ -0,0 +1,34 @@
+# -*- mode:python -*-
+
+# Copyright (c) 2009 The Hewlett-Packard Development Company
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met: redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer;
+# redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution;
+# neither the name of the copyright holders nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# Authors: Nathan Binkert
+
+Import('*')
+
+Source('MessageBuffer.cc')
+Source('MessageBufferNode.cc')
index 5ac171275dfe412600ed132b0930aeb5889b31bd..6dce98dd5a212595a0cc92482849b5dd725d5fc1 100644 (file)
@@ -37,6 +37,8 @@
 #include <unistd.h>
 #include <iostream>
 
+#include "config/ruby_debug.hh"
+
 extern std::ostream * debug_cout_ptr;
 
 // component enumeration
diff --git a/src/mem/ruby/common/SConscript b/src/mem/ruby/common/SConscript
new file mode 100644 (file)
index 0000000..8313aa7
--- /dev/null
@@ -0,0 +1,42 @@
+# -*- mode:python -*-
+
+# Copyright (c) 2009 The Hewlett-Packard Development Company
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met: redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer;
+# redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution;
+# neither the name of the copyright holders nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# Authors: Nathan Binkert
+
+Import('*')
+
+Source('Address.cc')
+Source('DataBlock.cc')
+Source('Debug.cc')
+Source('Driver.cc')
+Source('Global.cc')
+Source('Histogram.cc')
+Source('Message.cc')
+Source('NetDest.cc')
+Source('Set.cc', Werror=False)
+Source('SubBlock.cc')
index 2d129bc7ac7b911f73e5ea4860dba1f9f85103e7..cb30281cda68429e05832367c0cb678218452556 100644 (file)
@@ -36,6 +36,7 @@
  *
  */
 
+#include "config/ruby_debug.hh"
 #include "mem/ruby/config/RubyConfig.hh"
 #include "mem/protocol/protocol_name.hh"
 #include "mem/gems_common/util.hh"
diff --git a/src/mem/ruby/config/SConscript b/src/mem/ruby/config/SConscript
new file mode 100644 (file)
index 0000000..d01c923
--- /dev/null
@@ -0,0 +1,33 @@
+# -*- mode:python -*-
+
+# Copyright (c) 2009 The Hewlett-Packard Development Company
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met: redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer;
+# redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution;
+# neither the name of the copyright holders nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# Authors: Nathan Binkert
+
+Import('*')
+
+Source('RubyConfig.cc')
index 7b2006535a9938438383ee094cf3078ad44793c6..a2112c9229f43cb2deb6641a63761ebfb86502e1 100644 (file)
@@ -59,6 +59,7 @@
 #ifndef RUBYEVENTQUEUE_H
 #define RUBYEVENTQUEUE_H
 
+#include "config/no_vector_bounds_checks.hh"
 #include "mem/ruby/common/Global.hh"
 #include "mem/gems_common/Vector.hh"
 
diff --git a/src/mem/ruby/eventqueue/SConscript b/src/mem/ruby/eventqueue/SConscript
new file mode 100644 (file)
index 0000000..523d71c
--- /dev/null
@@ -0,0 +1,34 @@
+# -*- mode:python -*-
+
+# Copyright (c) 2009 The Hewlett-Packard Development Company
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met: redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer;
+# redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution;
+# neither the name of the copyright holders nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# Authors: Nathan Binkert
+
+Import('*')
+
+Source('RubyEventQueue.cc')
+Source('RubyEventQueueNode.cc')
index 22a048b5b13b19982415cf0eda8948769ead0498..ae81dfc5712f2ab770ffdb8ba63e88da5994e10a 100644 (file)
@@ -54,7 +54,7 @@ using namespace std;
 
 // A generated file containing the default parameters in string form
 // The defaults are stored in the variable global_default_param
-#include "mem/protocol/default_param.hh"
+#include "mem/ruby/default_param.hh"
 
 static initvar_t *ruby_initvar_obj = NULL;
 
diff --git a/src/mem/ruby/network/garnet-fixed-pipeline/SConscript b/src/mem/ruby/network/garnet-fixed-pipeline/SConscript
new file mode 100644 (file)
index 0000000..bcd1b09
--- /dev/null
@@ -0,0 +1,46 @@
+# -*- mode:python -*-
+
+# Copyright (c) 2009 The Hewlett-Packard Development Company
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met: redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer;
+# redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution;
+# neither the name of the copyright holders nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# Authors: Nathan Binkert
+
+Import('*')
+
+Source('GarnetNetwork_d.cc')
+Source('InputUnit_d.cc')
+Source('NetworkInterface_d.cc')
+Source('NetworkLink_d.cc')
+Source('OutVcState_d.cc')
+Source('OutputUnit_d.cc')
+Source('Router_d.cc')
+Source('RoutingUnit_d.cc')
+Source('SWallocator_d.cc')
+Source('Switch_d.cc')
+Source('VCallocator_d.cc')
+Source('VirtualChannel_d.cc')
+Source('flitBuffer_d.cc')
+Source('flit_d.cc')
diff --git a/src/mem/ruby/network/garnet-flexible-pipeline/SConscript b/src/mem/ruby/network/garnet-flexible-pipeline/SConscript
new file mode 100644 (file)
index 0000000..039ef41
--- /dev/null
@@ -0,0 +1,41 @@
+# -*- mode:python -*-
+
+# Copyright (c) 2009 The Hewlett-Packard Development Company
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met: redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer;
+# redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution;
+# neither the name of the copyright holders nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# Authors: Nathan Binkert
+
+Import('*')
+
+Source('GarnetNetwork.cc')
+Source('InVcState.cc')
+Source('NetworkInterface.cc')
+Source('NetworkLink.cc')
+Source('OutVcState.cc')
+Source('Router.cc')
+Source('VCarbiter.cc')
+Source('flit.cc')
+Source('flitBuffer.cc')
diff --git a/src/mem/ruby/network/orion/SConscript b/src/mem/ruby/network/orion/SConscript
new file mode 100644 (file)
index 0000000..efa9025
--- /dev/null
@@ -0,0 +1,41 @@
+# -*- mode:python -*-
+
+# Copyright (c) 2009 The Hewlett-Packard Development Company
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met: redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer;
+# redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution;
+# neither the name of the copyright holders nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# Authors: Nathan Binkert
+
+Import('*')
+
+Source('NetworkPower.cc', Werror=False)
+Source('power_arbiter.cc')
+Source('power_array.cc', Werror=False)
+Source('power_bus.cc', Werror=False)
+Source('power_crossbar.cc', Werror=False)
+Source('power_ll.cc', Werror=False)
+Source('power_router_init.cc')
+Source('power_static.cc')
+Source('power_utils.cc', Werror=False)
diff --git a/src/mem/ruby/network/simple/SConscript b/src/mem/ruby/network/simple/SConscript
new file mode 100644 (file)
index 0000000..b12bfc8
--- /dev/null
@@ -0,0 +1,37 @@
+# -*- mode:python -*-
+
+# Copyright (c) 2009 The Hewlett-Packard Development Company
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met: redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer;
+# redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution;
+# neither the name of the copyright holders nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# Authors: Nathan Binkert
+
+Import('*')
+
+Source('PerfectSwitch.cc')
+Source('SimpleNetwork.cc')
+Source('Switch.cc')
+Source('Throttle.cc')
+Source('Topology.cc')
diff --git a/src/mem/ruby/profiler/SConscript b/src/mem/ruby/profiler/SConscript
new file mode 100644 (file)
index 0000000..b27d1da
--- /dev/null
@@ -0,0 +1,37 @@
+# -*- mode:python -*-
+
+# Copyright (c) 2009 The Hewlett-Packard Development Company
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met: redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer;
+# redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution;
+# neither the name of the copyright holders nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# Authors: Nathan Binkert
+
+Import('*')
+
+Source('AccessTraceForAddress.cc')
+Source('AddressProfiler.cc')
+Source('CacheProfiler.cc')
+Source('Profiler.cc')
+Source('StoreTrace.cc')
diff --git a/src/mem/ruby/recorder/SConscript b/src/mem/ruby/recorder/SConscript
new file mode 100644 (file)
index 0000000..5b225ed
--- /dev/null
@@ -0,0 +1,33 @@
+# -*- mode:python -*-
+
+# Copyright (c) 2009 The Hewlett-Packard Development Company
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met: redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer;
+# redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution;
+# neither the name of the copyright holders nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# Authors: Nathan Binkert
+
+Import('*')
+
+Source('TraceRecord.cc', Werror=False)
diff --git a/src/mem/ruby/slicc_interface/SConscript b/src/mem/ruby/slicc_interface/SConscript
new file mode 100644 (file)
index 0000000..d54b2db
--- /dev/null
@@ -0,0 +1,35 @@
+# -*- mode:python -*-
+
+# Copyright (c) 2009 The Hewlett-Packard Development Company
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met: redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer;
+# redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution;
+# neither the name of the copyright holders nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# Authors: Nathan Binkert
+
+Import('*')
+
+Source('AbstractCacheEntry.cc')
+Source('AbstractChip.cc')
+Source('RubySlicc_Profiler_interface.cc')
diff --git a/src/mem/ruby/system/SConscript b/src/mem/ruby/system/SConscript
new file mode 100644 (file)
index 0000000..1840ff0
--- /dev/null
@@ -0,0 +1,50 @@
+# -*- mode:python -*-
+
+# Copyright (c) 2009 The Hewlett-Packard Development Company
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met: redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer;
+# redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution;
+# neither the name of the copyright holders nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# Authors: Nathan Binkert
+
+Import('*')
+
+Source('BlockBloomFilter.cc')
+Source('BulkBloomFilter.cc')
+Source('DirectoryMemory.cc')
+Source('GenericBloomFilter.cc')
+Source('H3BloomFilter.cc')
+Source('LSB_CountingBloomFilter.cc')
+Source('MemoryControl.cc')
+Source('MemoryNode.cc')
+Source('MultiBitSelBloomFilter.cc')
+Source('MultiGrainBloomFilter.cc')
+Source('NodePersistentTable.cc')
+Source('NonCountingBloomFilter.cc')
+Source('PersistentTable.cc')
+Source('Sequencer.cc', Werror=False)
+Source('StoreBuffer.cc')
+Source('StoreCache.cc')
+Source('System.cc')
+Source('TimerTable.cc')
diff --git a/src/mem/ruby/tester/SConscript b/src/mem/ruby/tester/SConscript
new file mode 100644 (file)
index 0000000..e1a4891
--- /dev/null
@@ -0,0 +1,43 @@
+# -*- mode:python -*-
+
+# Copyright (c) 2009 The Hewlett-Packard Development Company
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met: redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer;
+# redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution;
+# neither the name of the copyright holders nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# Authors: Nathan Binkert
+
+Import('*')
+
+Source('Check.cc')
+Source('CheckTable.cc')
+Source('DetermGETXGenerator.cc')
+Source('DetermInvGenerator.cc')
+Source('DetermSeriesGETSGenerator.cc')
+Source('DeterministicDriver.cc')
+Source('Instruction.cc')
+Source('RequestGenerator.cc')
+Source('SpecifiedGenerator.cc')
+Source('SyntheticDriver.cc')
+Source('Tester.cc')
diff --git a/src/mem/slicc/SConscript b/src/mem/slicc/SConscript
new file mode 100644 (file)
index 0000000..39a6ac3
--- /dev/null
@@ -0,0 +1,125 @@
+# -*- mode:python -*-
+
+# Copyright (c) 2009 The Hewlett-Packard Development Company
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met: redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer;
+# redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution;
+# neither the name of the copyright holders nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# Authors: Nathan Binkert
+
+import os
+import re
+import string
+import sys
+
+from os.path import basename, dirname, exists, expanduser, isdir, isfile
+from os.path import join as joinpath
+
+import SCons
+
+Import('*')
+
+common_dir = Dir('../gems_common')
+
+#
+# Build SLICC
+#
+slicc_env = env.Clone()
+slicc_env['CPPDEFINES'] = ''
+slicc_env['CPPPATH'] = Dir('../..')
+slicc_env['CCFLAGS'] = ''
+slicc_env['CXXFLAGS'] = '-Wall -W -Wwrite-strings -Woverloaded-virtual -Wno-unused -Wno-deprecated'
+slicc_env['LIBS'] = ''
+slicc_env['LIBPATH'] = ''
+all_slicc_sources = []
+def SliccSource(filename):
+    if filename.endswith('.ll') or filename.endswith('.yy'):
+        slicc_env.CXXFile(filename)
+        filename = filename[:-2] + "cc"
+    x = slicc_env.StaticObject(filename)
+    all_slicc_sources.append(x)
+    return x
+
+# BE CAREFUL WITH THE ORDER OF FILENAMES HERE.  SLICC IS VERY FRAGILE
+# BECAUSE IT VIOLATES ESTABLISHED RULES ABOUT HOW YOU'RE ALLOWED TO
+# CREATE STATIC OBJECTS.  (SLICC HAS DEPENDENCIES DURING STATIC OBJECT
+# CONSTRUCTION ACROSS FILES.  THAT'S A NO-NO.)  WITH THIS FILE ORDER,
+# WE GET LUCKY AND OBJECTS GET CONSTRUCTED IN THE RIGHT ORDER.
+SliccSource('parser/parser.yy')
+SliccSource('parser/lexer.ll')
+SliccSource('main.cc')
+SliccSource('symbols/Func.cc')
+SliccSource('symbols/StateMachine.cc')
+SliccSource('symbols/Symbol.cc')
+SliccSource('symbols/SymbolTable.cc')
+SliccSource('symbols/Transition.cc')
+SliccSource('symbols/Type.cc')
+SliccSource('symbols/Var.cc')
+SliccSource('generator/fileio.cc')
+SliccSource('generator/html_gen.cc')
+SliccSource('generator/mif_gen.cc')
+SliccSource('ast/AST.cc')
+SliccSource('ast/ActionDeclAST.cc')
+SliccSource('ast/AssignStatementAST.cc')
+SliccSource('ast/CheckAllocateStatementAST.cc')
+SliccSource('ast/CheckStopSlotsStatementAST.cc')
+SliccSource('ast/ChipComponentAccessAST.cc')
+SliccSource('ast/CopyHeadStatementAST.cc')
+SliccSource('ast/DeclAST.cc')
+SliccSource('ast/DeclListAST.cc')
+SliccSource('ast/EnqueueStatementAST.cc')
+SliccSource('ast/EnumDeclAST.cc')
+SliccSource('ast/EnumExprAST.cc')
+SliccSource('ast/ExprAST.cc')
+SliccSource('ast/ExprStatementAST.cc')
+SliccSource('ast/FormalParamAST.cc')
+SliccSource('ast/FuncCallExprAST.cc')
+SliccSource('ast/FuncDeclAST.cc')
+SliccSource('ast/IfStatementAST.cc')
+SliccSource('ast/InPortDeclAST.cc')
+SliccSource('ast/InfixOperatorExprAST.cc')
+SliccSource('ast/LiteralExprAST.cc')
+SliccSource('ast/Location.cc')
+SliccSource('ast/MachineAST.cc')
+SliccSource('ast/MemberExprAST.cc')
+SliccSource('ast/MethodCallExprAST.cc')
+SliccSource('ast/ObjDeclAST.cc')
+SliccSource('ast/OutPortDeclAST.cc')
+SliccSource('ast/PairAST.cc')
+SliccSource('ast/PairListAST.cc')
+SliccSource('ast/PeekStatementAST.cc')
+SliccSource('ast/ReturnStatementAST.cc')
+SliccSource('ast/StatementAST.cc')
+SliccSource('ast/StatementListAST.cc')
+SliccSource('ast/TransitionDeclAST.cc')
+SliccSource('ast/TypeAST.cc')
+SliccSource('ast/TypeDeclAST.cc')
+SliccSource('ast/TypeFieldAST.cc')
+SliccSource('ast/TypeFieldEnumAST.cc')
+SliccSource('ast/TypeFieldMemberAST.cc')
+SliccSource('ast/TypeFieldMethodAST.cc')
+SliccSource('ast/VarExprAST.cc')
+
+slicc_bin = File('slicc')
+slicc_env.Program(slicc_bin, all_slicc_sources + [ common_dir.File('util.o') ])
diff --git a/src/mem/slicc/parser/parser.py b/src/mem/slicc/parser/parser.py
new file mode 100644 (file)
index 0000000..ac2dd29
--- /dev/null
@@ -0,0 +1,572 @@
+# Copyright (c) 2009 The Hewlett-Packard Development Company
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met: redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer;
+# redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution;
+# neither the name of the copyright holders nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# Authors: Nathan Binkert
+
+from ply import lex, yacc
+import re
+
+t_ignore = '\t '
+
+# C or C++ comment (ignore)
+def t_c_comment(t):
+    r'/\*(.|\n)*?\*/'
+    t.lexer.lineno += t.value.count('\n')
+
+def t_cpp_comment(t):
+    r'//.*'
+    pass
+
+# Define a rule so we can track line numbers
+def t_newline(t):
+    r'\n+'
+    t.lexer.lineno += len(t.value)
+
+reserved = {
+    'global' : 'GLOBAL',
+    'machine' : 'MACHINE',
+    'in_port' : 'IN_PORT',
+    'out_port' : 'OUT_PORT',
+    'action' : 'ACTION',
+    'transition' : 'TRANS',
+    'structure' : 'STRUCT',
+    'external_type' : 'EXTERN_TYPE',
+    'enumeration' : 'ENUM',
+    'peek' : 'PEEK',
+    'enqueue' : 'ENQUEUE',
+    'copy_head' : 'COPY_HEAD',
+    'check_allocate' : 'CHECK_ALLOCATE',
+    'check_stop_slots' : 'CHECK_STOP_SLOTS',
+    'if' : 'IF',
+    'else' : 'ELSE',
+    'return' : 'RETURN',
+    'THIS' : 'THIS',
+    'CHIP' : 'CHIP',
+    'void' : 'VOID',
+}
+
+literals = ':[]{}(),='
+
+tokens = [ 'EQ', 'NE', 'LT', 'GT', 'LE', 'GE',
+           'LEFTSHIFT', 'RIGHTSHIFT',
+           'NOT', 'AND', 'OR',
+           'PLUS', 'DASH', 'STAR', 'SLASH',
+           'DOUBLE_COLON', 'SEMICOLON',
+           'ASSIGN', 'DOT',
+           'IDENT', 'LIT_BOOL', 'FLOATNUMBER', 'NUMBER', 'STRING' ]
+tokens += reserved.values()
+
+t_EQ = r'=='
+t_NE = r'!='
+t_LT = r'<'
+t_GT = r'>'
+t_LE = r'<='
+t_GE = r'>='
+t_LEFTSHIFT = r'<<'
+t_RIGHTSHIFT = r'>>'
+t_NOT = r'!'
+t_AND = r'&&'
+t_OR = r'\|\|'
+t_PLUS = r'\+'
+t_DASH = r'-'
+t_STAR = r'\*'
+t_SLASH = r'/'
+t_DOUBLE_COLON = r'::'
+t_SEMICOLON = r';'
+t_ASSIGN = r':='
+t_DOT = r'\.'
+
+class TokenError(Exception): pass
+class ParseError(Exception): pass
+
+def t_error(t):
+    raise TokenError("Illegal character", t)
+
+def t_IDENT(t):
+    r'[a-zA-Z_][a-zA-Z_0-9]*'
+    if t.value == 'true':
+        t.type = 'LIT_BOOL'
+        t.value = True
+        return t
+
+    if t.value == 'false':
+        t.type = 'LIT_BOOL'
+        t.value = False
+        return t
+
+    t.type = reserved.get(t.value, 'IDENT')    # Check for reserved words
+    return t
+
+def t_FLOATNUMBER(t):
+    '[0-9]+[.][0-9]+'
+    try:
+        t.value = float(t.value)
+    except ValueError:
+        raise TokenError("Illegal float", t)
+    return t
+
+def t_NUMBER(t):
+    r'[0-9]+'
+    try:
+        t.value = int(t.value)
+    except ValueError:
+        raise TokenError("Illegal number", t)
+    return t
+
+def t_STRING1(t):
+    r'\"[^"\n]*\"'
+    t.type = 'STRING'
+    return t
+
+def t_STRING2(t):
+    r"\'[^'\n]*\'"
+    t.type = 'STRING'
+    return t
+
+
+def p_file(p):
+    "file : decl_l"
+    p[0] = [ x for x in p[1] if x is not None ]
+
+def p_error(t):
+    raise ParseError(t)
+
+def p_empty(p):
+    "empty :"
+    pass
+
+def p_decl_l(p):
+    "decl_l : decls"
+    p[0] = p[1]
+
+def p_decls(p):
+    """decls : decl decls
+             | empty"""
+    if len(p) == 3:
+        p[0] = [ p[1] ] + p[2]
+    elif len(p) == 2:
+        p[0] = []
+
+def p_decl(p):
+    """decl : d_machine
+            | d_action
+            | d_in_port
+            | d_out_port
+            | t_trans
+            | d_extern
+            | d_global
+            | d_struct
+            | d_enum
+            | d_object
+            | d_func_decl
+            | d_func_def"""
+    p[0] = p[1]
+
+def p_d_machine(p):
+    "d_machine : MACHINE '(' ident pair_l ')' '{' decl_l '}'"
+    decls = [ x for x in p[7] if x is not None ]
+    p[0] = Machine(p[3], decls)
+
+def p_d_action(p):
+    "d_action : ACTION '(' ident pair_l ')' statement_l"
+    p[0] = Action(p[3])
+
+def p_d_in_port(p):
+    "d_in_port : IN_PORT '(' ident ',' type ',' var pair_l ')' statement_l"
+    p[0] = InPort(p[3])
+
+def p_d_out_port(p):
+    "d_out_port : OUT_PORT '(' ident ',' type ',' var pair_l ')' SEMICOLON"
+    p[0] = OutPort(p[3])
+
+def p_t_trans(p):
+    """t_trans : TRANS '(' ident_l ',' ident_l ',' ident pair_l ')' ident_l
+               | TRANS '(' ident_l ',' ident_l           pair_l ')' ident_l"""
+    p[0] = Transition("transition")
+
+def p_d_extern(p):
+    """d_extern : EXTERN_TYPE '(' type pair_l ')' SEMICOLON
+                | EXTERN_TYPE '(' type pair_l ')' '{' type_methods '}'"""
+    p[0] = Extern(p[3])
+
+def p_d_global(p):
+    "d_global : GLOBAL '(' type pair_l ')' '{' type_members '}'"
+    p[0] = Global(p[3])
+
+def p_d_struct(p):
+    "d_struct : STRUCT '(' type pair_l ')' '{' type_members '}'"
+    p[0] = Struct(p[3])
+
+def p_d_enum(p):
+    "d_enum : ENUM '(' type pair_l ')' '{' type_enums   '}'"
+    p[0] = Enum(p[3])
+
+def p_d_object(p):
+    "d_object : type ident pair_l SEMICOLON"
+    p[0] = Object(p[2])
+
+def p_d_func_decl(p):
+    """d_func_decl : void ident '(' param_l ')' pair_l SEMICOLON
+                   | type ident '(' param_l ')' pair_l SEMICOLON"""
+    pass
+
+def p_d_func_def(p):
+    """d_func_def : void ident '(' param_l ')' pair_l statement_l
+                  | type ident '(' param_l ')' pair_l statement_l"""
+    p[0] = Function(p[2])
+
+# Type fields
+def p_type_members(p):
+    """type_members : type_member type_members
+                    | empty"""
+    pass
+
+def p_type_member(p):
+    """type_member : type ident pair_l SEMICOLON
+                   | type ident ASSIGN expr SEMICOLON"""
+    pass
+
+# Methods
+def p_type_methods(p):
+    """type_methods : type_method type_methods
+                    | empty"""
+    pass
+
+def p_type_method(p):
+    "type_method : type_or_void ident '(' type_l ')' pair_l SEMICOLON"
+    pass
+
+# Enum fields
+def p_type_enums(p):
+    """type_enums : type_enum type_enums
+                  | empty"""
+    pass
+
+def p_type_enum(p):
+    "type_enum : ident pair_l SEMICOLON"
+    pass
+
+# Type
+def p_type_l(p):
+    """type_l : types
+                 | empty"""
+    pass
+
+def p_types(p):
+    """types : type ',' types
+             | type"""
+    pass
+
+def p_type(p):
+    "type : ident"
+    p[0] = p[1]
+
+def p_void(p):
+    "void : VOID"
+    p[0] = None
+
+def p_type_or_void(p):
+    """type_or_void : type
+                    | void"""
+    p[0] = p[1]
+
+# Formal Param
+def p_param_l(p):
+    """param_l : params
+               | empty"""
+    pass
+
+def p_params(p):
+    """params : param ',' params
+              | param"""
+    pass
+
+def p_param(p):
+    "param : type ident"
+    pass
+
+# Idents and lists
+def p_ident(p):
+    "ident : IDENT"
+    p[0] = p[1]
+
+def p_ident_l(p):
+    """ident_l : '{' idents '}'
+                  | ident"""
+    p[0] = p[1]
+
+def p_idents(p):
+    """idents : ident SEMICOLON idents
+              | ident ',' idents
+              | ident idents
+              | empty"""
+    pass
+
+# Pair and pair lists
+def p_pair_l(p):
+    """pair_l : ',' pairs
+                 | empty"""
+    if len(p) == 3:
+        p[0] = p[2]
+    elif len(p) == 2:
+        p[0] = None
+
+def p_pairs(p):
+    """pairs : pair ',' pairs
+             | pair"""
+    if len(p) == 4:
+        p[3].append(p[1])
+        p[0] = p[3]
+    elif len(p) == 2:
+        p[0] = [ p[1] ]
+
+def p_pair(p):
+    """pair : ident '=' STRING
+            | ident '=' ident
+            | STRING"""
+    if len(p) == 4:
+        p[0] = p[1], p[3]
+    elif len(p) == 2:
+        p[0] = "short", p[1]
+
+# Below are the rules for action descriptions
+def p_statement_l(p):
+    "statement_l : '{' statements '}'"
+    pass
+
+def p_statements(p):
+    """statements : statement statements
+                  | empty"""
+    pass
+
+def p_expr_l(p):
+    """expr_l : expr ',' expr_l
+                 | expr
+                 | empty"""
+    pass
+
+def p_statement(p):
+    """statement : expr SEMICOLON
+                 | expr ASSIGN expr SEMICOLON
+                 | ENQUEUE '(' var ',' type pair_l ')' statement_l
+                 | PEEK '(' var ',' type ')' statement_l
+                 | COPY_HEAD '(' var ',' var pair_l ')' SEMICOLON
+                 | CHECK_ALLOCATE '(' var ')' SEMICOLON
+                 | CHECK_STOP_SLOTS '(' var ',' STRING ',' STRING ')' SEMICOLON
+                 | if_statement
+                 | RETURN expr SEMICOLON"""
+    pass
+
+def p_if_statement(p):
+    """if_statement : IF '(' expr ')' statement_l ELSE statement_l
+                    | IF '(' expr ')' statement_l
+                    | IF '(' expr ')' statement_l ELSE if_statement"""
+    pass
+
+def p_expr(p):
+    """expr :  var
+            | literal
+            | enumeration
+            | ident '(' expr_l ')'
+            | THIS DOT var '[' expr ']' DOT var DOT ident '(' expr_l ')'
+            | THIS DOT var '[' expr ']' DOT var DOT ident
+            | CHIP '[' expr ']' DOT var '[' expr ']' DOT var DOT ident '(' expr_l ')'
+            | CHIP '[' expr ']' DOT var '[' expr ']' DOT var DOT ident
+            | expr DOT ident
+            | expr DOT ident '(' expr_l ')'
+            | type DOUBLE_COLON ident '(' expr_l ')'
+            | expr '[' expr_l ']'
+            | expr STAR  expr
+            | expr SLASH expr
+            | expr PLUS  expr
+            | expr DASH  expr
+            | expr LT    expr
+            | expr GT    expr
+            | expr LE    expr
+            | expr GE    expr
+            | expr EQ    expr
+            | expr NE    expr
+            | expr AND   expr
+            | expr OR    expr
+            | NOT expr
+            | expr RIGHTSHIFT expr
+            | expr LEFTSHIFT  expr
+            | '(' expr ')'"""
+    pass
+
+def p_literal(p):
+    """literal : STRING
+               | NUMBER
+               | FLOATNUMBER
+               | LIT_BOOL"""
+    pass
+
+def p_enumeration(p):
+    "enumeration : ident ':' ident"
+    pass
+
+def p_var(p):
+    "var : ident"
+    pass
+
+lex.lex()
+yacc.yacc(write_tables=0)
+
+slicc_generated_cc = set([
+    'AccessModeType.cc',
+    'AccessPermission.cc',
+    'AccessType.cc',
+    'AllocationStrategy.cc',
+    'CacheMsg.cc',
+    'CacheRequestType.cc',
+    'Chip.cc',
+    'CoherenceRequestType.cc',
+    'DetermGETXGeneratorStatus.cc',
+    'DetermInvGeneratorStatus.cc',
+    'DetermSeriesGETSGeneratorStatus.cc',
+    'GenericMachineType.cc',
+    'GenericRequestType.cc',
+    'LinkType.cc',
+    'LockStatus.cc',
+    'MachineType.cc',
+    'MaskPredictorIndex.cc',
+    'MaskPredictorTraining.cc',
+    'MaskPredictorType.cc',
+    'MemoryMsg.cc',
+    'MemoryRequestType.cc',
+    'MessageSizeType.cc',
+    'PrefetchBit.cc',
+    'Protocol.cc',
+    'RequestGeneratorStatus.cc',
+    'SearchMechanism.cc',
+    'SequencerStatus.cc',
+    'SpecifiedGeneratorType.cc',
+    'TesterStatus.cc',
+    'TopologyType.cc',
+    'TransientRequestType.cc',
+    'TransitionResult.cc'])
+
+slicc_generated_hh = set([
+    'AccessType.hh',
+    'AccessModeType.hh',
+    'AccessPermission.hh',
+    'AllocationStrategy.hh',
+    'CacheMsg.hh',
+    'CacheRequestType.hh',
+    'Chip.hh',
+    'CoherenceRequestType.hh',
+    'DetermGETXGeneratorStatus.hh',
+    'DetermInvGeneratorStatus.hh',
+    'DetermSeriesGETSGeneratorStatus.hh',
+    'GenericMachineType.hh',
+    'GenericRequestType.hh',
+    'LinkType.hh',
+    'LockStatus.hh',
+    'MachineType.hh',
+    'MaskPredictorIndex.hh',
+    'MaskPredictorTraining.hh',
+    'MaskPredictorType.hh',
+    'MemoryMsg.hh',
+    'MemoryRequestType.hh',
+    'MessageSizeType.hh',
+    'PrefetchBit.hh',
+    'Protocol.hh',
+    'RequestGeneratorStatus.hh',
+    'SearchMechanism.hh',
+    'SequencerStatus.hh',
+    'SpecifiedGeneratorType.hh',
+    'TesterStatus.hh',
+    'TopologyType.hh',
+    'TransientRequestType.hh',
+    'TransitionResult.hh',
+    'Types.hh',
+    'protocol_name.hh' ])
+
+class Machine(object):
+    def __init__(self, name, decls):
+        self.name = name
+        self.decls = decls
+
+    def add(self, hh, cc):
+        hh.add('%s_Controller.hh' % self.name)
+        hh.add('%s_Profiler.hh' % self.name)
+
+        cc.add('%s_Controller.cc' % self.name)
+        cc.add('%s_Profiler.cc' % self.name)
+        cc.add('%s_Transitions.cc' % self.name)
+        cc.add('%s_Wakeup.cc' % self.name)
+
+        for decl in self.decls:
+            decl.add(hh, cc, self.name)
+
+class Declaration(object):
+    hh = False
+    cc = False
+    def __init__(self, name):
+        self.name = name
+
+    def add(self, hh, cc, name=None):
+        #print '>>>', type(self).__name__, self.name
+        if name:
+            name += '_'
+        else:
+            name = ""
+        if self.hh:
+            hh.add('%s%s.hh' % (name, self.name))
+        if self.cc:
+            cc.add('%s%s.cc' % (name, self.name))
+
+class Action(Declaration): pass
+class InPort(Declaration): pass
+class OutPort(Declaration): pass
+class Transition(Declaration): pass
+class Extern(Declaration): pass
+class Global(Declaration): pass
+class Struct(Declaration):
+    hh = True
+    cc = True
+class Enum(Declaration):
+    hh = True
+    cc = True
+class Object(Declaration): pass
+class Function(Declaration):
+    cc = True
+
+def scan(filenames):
+    hh = slicc_generated_hh.copy()
+    cc = slicc_generated_cc.copy()
+
+    for filename in filenames:
+        lex.lexer.lineno = 1
+        try:
+            results = yacc.parse(file(filename, 'r').read())
+        except (TokenError, ParseError), e:
+            raise type(e), tuple([filename] + [ i for i in e ])
+
+        for result in results:
+            result.add(hh, cc)
+
+    return list(hh), list(cc)