changeset ef5fae93a3b2 in /z/repo/m5 details: http://repo.m5sim.org/m5?cmd=changeset;node=ef5fae93a3b2 description: slicc: Pure python implementation of slicc. This is simply a translation of the C++ slicc into python with very minimal reorganization of the code. The output can be verified as nearly identical by doing a "diff -wBur".
Slicc can easily be run manually by using util/slicc diffstat: 177 files changed, 6517 insertions(+), 15233 deletions(-) src/mem/protocol/SConscript | 86 - src/mem/slicc/SConscript | 129 - src/mem/slicc/__init__.py | 25 src/mem/slicc/ast/AST.cc | 39 src/mem/slicc/ast/AST.hh | 94 - src/mem/slicc/ast/AST.py | 63 src/mem/slicc/ast/ASTs.hh | 91 - src/mem/slicc/ast/ActionDeclAST.cc | 98 - src/mem/slicc/ast/ActionDeclAST.hh | 86 - src/mem/slicc/ast/ActionDeclAST.py | 72 src/mem/slicc/ast/AssignStatementAST.cc | 76 - src/mem/slicc/ast/AssignStatementAST.hh | 85 - src/mem/slicc/ast/AssignStatementAST.py | 59 src/mem/slicc/ast/CheckAllocateStatementAST.cc | 72 src/mem/slicc/ast/CheckAllocateStatementAST.hh | 82 - src/mem/slicc/ast/CheckAllocateStatementAST.py | 47 src/mem/slicc/ast/CheckStopSlotsStatementAST.cc | 115 - src/mem/slicc/ast/CheckStopSlotsStatementAST.hh | 85 - src/mem/slicc/ast/CheckStopSlotsStatementAST.py | 74 src/mem/slicc/ast/ChipComponentAccessAST.cc | 244 --- src/mem/slicc/ast/ChipComponentAccessAST.hh | 101 - src/mem/slicc/ast/ChipComponentAccessAST.py | 161 ++ src/mem/slicc/ast/CopyHeadStatementAST.cc | 85 - src/mem/slicc/ast/CopyHeadStatementAST.hh | 87 - src/mem/slicc/ast/CopyHeadStatementAST.py | 52 src/mem/slicc/ast/DeclAST.cc | 39 src/mem/slicc/ast/DeclAST.hh | 85 - src/mem/slicc/ast/DeclAST.py | 38 src/mem/slicc/ast/DeclListAST.cc | 86 - src/mem/slicc/ast/DeclListAST.hh | 84 - src/mem/slicc/ast/DeclListAST.py | 51 src/mem/slicc/ast/EnqueueStatementAST.cc | 111 - src/mem/slicc/ast/EnqueueStatementAST.hh | 93 - src/mem/slicc/ast/EnqueueStatementAST.py | 86 + src/mem/slicc/ast/EnumDeclAST.cc | 98 - src/mem/slicc/ast/EnumDeclAST.hh | 86 - src/mem/slicc/ast/EnumDeclAST.py | 71 src/mem/slicc/ast/EnumExprAST.cc | 76 - src/mem/slicc/ast/EnumExprAST.hh | 85 - src/mem/slicc/ast/EnumExprAST.py | 53 src/mem/slicc/ast/ExprAST.cc | 39 src/mem/slicc/ast/ExprAST.hh | 84 - src/mem/slicc/ast/ExprAST.py | 45 src/mem/slicc/ast/ExprStatementAST.cc | 73 src/mem/slicc/ast/ExprStatementAST.hh | 83 - src/mem/slicc/ast/ExprStatementAST.py | 52 src/mem/slicc/ast/FormalParamAST.cc | 72 src/mem/slicc/ast/FormalParamAST.hh | 88 - src/mem/slicc/ast/FormalParamAST.py | 52 src/mem/slicc/ast/FuncCallExprAST.cc | 224 -- src/mem/slicc/ast/FuncCallExprAST.hh | 89 - src/mem/slicc/ast/FuncCallExprAST.py | 168 ++ src/mem/slicc/ast/FuncDeclAST.cc | 112 - src/mem/slicc/ast/FuncDeclAST.hh | 91 - src/mem/slicc/ast/FuncDeclAST.py | 88 + src/mem/slicc/ast/IfStatementAST.cc | 98 - src/mem/slicc/ast/IfStatementAST.hh | 89 - src/mem/slicc/ast/IfStatementAST.py | 74 src/mem/slicc/ast/InPortDeclAST.cc | 149 - src/mem/slicc/ast/InPortDeclAST.hh | 91 - src/mem/slicc/ast/InPortDeclAST.py | 130 + src/mem/slicc/ast/InfixOperatorExprAST.cc | 121 - src/mem/slicc/ast/InfixOperatorExprAST.hh | 85 - src/mem/slicc/ast/InfixOperatorExprAST.py | 89 + src/mem/slicc/ast/LiteralExprAST.cc | 55 src/mem/slicc/ast/LiteralExprAST.hh | 83 - src/mem/slicc/ast/LiteralExprAST.py | 55 src/mem/slicc/ast/Location.cc | 87 - src/mem/slicc/ast/Location.hh | 93 - src/mem/slicc/ast/MachineAST.cc | 99 - src/mem/slicc/ast/MachineAST.hh | 93 - src/mem/slicc/ast/MachineAST.py | 81 + src/mem/slicc/ast/MemberExprAST.cc | 72 src/mem/slicc/ast/MemberExprAST.hh | 83 - src/mem/slicc/ast/MemberExprAST.py | 55 src/mem/slicc/ast/MethodCallExprAST.cc | 160 -- src/mem/slicc/ast/MethodCallExprAST.hh | 93 - src/mem/slicc/ast/MethodCallExprAST.py | 127 + src/mem/slicc/ast/NewExprAST.cc | 9 src/mem/slicc/ast/NewExprAST.hh | 20 src/mem/slicc/ast/NewExprAST.py | 47 src/mem/slicc/ast/ObjDeclAST.cc | 137 - src/mem/slicc/ast/ObjDeclAST.hh | 86 - src/mem/slicc/ast/ObjDeclAST.py | 94 + src/mem/slicc/ast/OutPortDeclAST.cc | 79 - src/mem/slicc/ast/OutPortDeclAST.hh | 89 - src/mem/slicc/ast/OutPortDeclAST.py | 57 src/mem/slicc/ast/PairAST.cc | 72 src/mem/slicc/ast/PairAST.hh | 86 - src/mem/slicc/ast/PairAST.py | 36 src/mem/slicc/ast/PairListAST.cc | 49 src/mem/slicc/ast/PairListAST.hh | 82 - src/mem/slicc/ast/PairListAST.py | 37 src/mem/slicc/ast/PeekStatementAST.cc | 115 - src/mem/slicc/ast/PeekStatementAST.hh | 91 - src/mem/slicc/ast/PeekStatementAST.py | 73 src/mem/slicc/ast/ReturnStatementAST.cc | 79 - src/mem/slicc/ast/ReturnStatementAST.hh | 83 - src/mem/slicc/ast/ReturnStatementAST.py | 54 src/mem/slicc/ast/StatementAST.cc | 60 src/mem/slicc/ast/StatementAST.hh | 88 - src/mem/slicc/ast/StatementAST.py | 34 src/mem/slicc/ast/StatementListAST.cc | 86 - src/mem/slicc/ast/StatementListAST.hh | 85 - src/mem/slicc/ast/StatementListAST.py | 46 src/mem/slicc/ast/TransitionDeclAST.cc | 89 - src/mem/slicc/ast/TransitionDeclAST.hh | 89 - src/mem/slicc/ast/TransitionDeclAST.py | 54 src/mem/slicc/ast/TypeAST.cc | 67 src/mem/slicc/ast/TypeAST.hh | 83 - src/mem/slicc/ast/TypeAST.py | 53 src/mem/slicc/ast/TypeDeclAST.cc | 86 - src/mem/slicc/ast/TypeDeclAST.hh | 86 - src/mem/slicc/ast/TypeDeclAST.py | 62 src/mem/slicc/ast/TypeFieldAST.cc | 44 src/mem/slicc/ast/TypeFieldAST.hh | 83 - src/mem/slicc/ast/TypeFieldAST.py | 32 src/mem/slicc/ast/TypeFieldEnumAST.cc | 82 - src/mem/slicc/ast/TypeFieldEnumAST.hh | 86 - src/mem/slicc/ast/TypeFieldEnumAST.py | 59 src/mem/slicc/ast/TypeFieldMemberAST.cc | 84 - src/mem/slicc/ast/TypeFieldMemberAST.hh | 91 - src/mem/slicc/ast/TypeFieldMemberAST.py | 57 src/mem/slicc/ast/TypeFieldMethodAST.cc | 81 - src/mem/slicc/ast/TypeFieldMethodAST.hh | 87 - src/mem/slicc/ast/TypeFieldMethodAST.py | 50 src/mem/slicc/ast/VarExprAST.cc | 76 - src/mem/slicc/ast/VarExprAST.hh | 86 - src/mem/slicc/ast/VarExprAST.py | 66 src/mem/slicc/ast/__init__.py | 69 src/mem/slicc/generate/dot.py | 42 src/mem/slicc/generate/html.py | 80 + src/mem/slicc/generate/tex.py | 71 src/mem/slicc/generator/fileio.cc | 66 src/mem/slicc/generator/fileio.hh | 46 src/mem/slicc/generator/html_gen.cc | 125 - src/mem/slicc/generator/html_gen.hh | 49 src/mem/slicc/generator/mif_gen.cc | 1718 ----------------------- src/mem/slicc/generator/mif_gen.hh | 45 src/mem/slicc/main.cc | 246 --- src/mem/slicc/main.hh | 48 src/mem/slicc/main.py | 108 + src/mem/slicc/parser.py | 669 ++++++++ src/mem/slicc/parser/lexer.ll | 125 - src/mem/slicc/parser/parser.py | 563 ------- src/mem/slicc/parser/parser.yy | 360 ---- src/mem/slicc/slicc_global.hh | 125 - src/mem/slicc/symbols/Action.hh | 52 src/mem/slicc/symbols/Action.py | 38 src/mem/slicc/symbols/Event.hh | 45 src/mem/slicc/symbols/Event.py | 34 src/mem/slicc/symbols/Func.cc | 143 - src/mem/slicc/symbols/Func.hh | 96 - src/mem/slicc/symbols/Func.py | 107 + src/mem/slicc/symbols/State.hh | 45 src/mem/slicc/symbols/State.py | 34 src/mem/slicc/symbols/StateMachine.cc | 1534 -------------------- src/mem/slicc/symbols/StateMachine.hh | 156 -- src/mem/slicc/symbols/StateMachine.py | 1222 ++++++++++++++++ src/mem/slicc/symbols/Symbol.cc | 72 src/mem/slicc/symbols/Symbol.hh | 100 - src/mem/slicc/symbols/Symbol.py | 78 + src/mem/slicc/symbols/SymbolTable.cc | 327 ---- src/mem/slicc/symbols/SymbolTable.hh | 121 - src/mem/slicc/symbols/SymbolTable.py | 218 ++ src/mem/slicc/symbols/Transition.cc | 173 -- src/mem/slicc/symbols/Transition.hh | 120 - src/mem/slicc/symbols/Transition.py | 61 src/mem/slicc/symbols/Type.cc | 779 ---------- src/mem/slicc/symbols/Type.hh | 155 -- src/mem/slicc/symbols/Type.py | 650 ++++++++ src/mem/slicc/symbols/Var.cc | 57 src/mem/slicc/symbols/Var.hh | 98 - src/mem/slicc/symbols/Var.py | 50 src/mem/slicc/symbols/__init__.py | 38 src/mem/slicc/util.py | 75 + util/slicc | 38 diffs (truncated from 22490 to 300 lines): diff -r 69714e675ee2 -r ef5fae93a3b2 src/mem/protocol/SConscript --- a/src/mem/protocol/SConscript Tue Sep 22 15:24:16 2009 -0700 +++ b/src/mem/protocol/SConscript Tue Sep 22 18:12:39 2009 -0700 @@ -29,30 +29,56 @@ # 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 +from os.path import isdir, isfile, join as joinpath Import('*') if not env['RUBY']: Return() -slicc_dir = Dir('../slicc') protocol_dir = Dir('.') html_dir = Dir('html') +slicc_dir = Dir('../slicc') + +sys.path[1:1] = [ Dir('..').srcnode().abspath ] +from slicc.parser import SLICC + +slicc_depends = [] +for root,dirs,files in os.walk(slicc_dir.srcnode().abspath): + for f in files: + if f.endswith('.py'): + slicc_depends.append(File(joinpath(root, f))) # # Use SLICC # -def slicc_generator(target, source, env, for_signature): - slicc_bin = str(source[0]) - protocol = source[1].get_contents() + +def slicc_scanner(node, env, path): + contents = node.get_contents() + files = [ line.strip() for line in contents.splitlines() ] + return files + +env.Append(SCANNERS=Scanner(function=slicc_scanner,skeys=['.slicc'])) + +def slicc_emitter(target, source, env): + files = [s.srcnode().abspath for s in source[1:]] + slicc = SLICC(debug=True) + print "SLICC parsing..." + for name in slicc.load(files, verbose=True): + print " %s" % name + + hh,cc = slicc.files() + target.extend(sorted(hh)) + target.extend(sorted(cc)) + f = file('/tmp/asdf', 'w') + for t in target: + print >>f, t + return target, source + +def slicc_action(target, source, env): + protocol = source[0].get_contents() pdir = str(protocol_dir) hdir = str(html_dir) @@ -61,31 +87,31 @@ if not isdir(hdir): os.mkdir(hdir) - do_html = "html" - cmdline = [ slicc_bin, pdir, hdir, protocol, do_html ] - cmdline += [ str(s) for s in source[2:] ] - cmdline = ' '.join(cmdline) - return cmdline + slicc = SLICC(debug=True) + files = [str(s) for s in source[1:]] + slicc.load(files, verbose=False) -slicc_builder = Builder(generator=slicc_generator) + print "SLICC Generator pass 1..." + slicc.findMachines() + + print "SLICC Generator pass 2..." + slicc.generate() + + print "SLICC writing C++ files..." + slicc.writeCodeFiles(pdir) + + print "SLICC writing HTML files..." + slicc.writeHTMLFiles(hdir) + +slicc_builder = Builder(action=slicc_action, emitter=slicc_emitter) protocol = env['PROTOCOL'] sources = [ protocol_dir.File("RubySlicc_interfaces.slicc"), protocol_dir.File("%s.slicc" % protocol) ] -execfile(slicc_dir.File('parser/parser.py').srcnode().abspath) +env.Append(BUILDERS={'SLICC' : slicc_builder}) +nodes = env.SLICC([], [ Value(protocol) ] + sources) +env.Depends(nodes, slicc_depends) -sm_files = read_slicc([s.srcnode().abspath for s in sources]) -sm_files = [ protocol_dir.File(f) for f in sm_files ] - -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.Append(BUILDERS={'SLICC' : slicc_builder}) -env.SLICC(hh + cc, [ slicc_bin, Value(protocol) ] + sm_files) - -for f in cc: +for f in sorted(s for s in nodes if str(s).endswith('.cc')): Source(f) diff -r 69714e675ee2 -r ef5fae93a3b2 src/mem/slicc/SConscript --- a/src/mem/slicc/SConscript Tue Sep 22 15:24:16 2009 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,129 +0,0 @@ -# -*- 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('*') - -if not env['RUBY']: - Return() - -common_dir = Dir('../gems_common') - -# -# Build SLICC -# -slicc_env = env.Clone() -slicc_env['CPPDEFINES'] = '' -slicc_env['CPPPATH'] = Dir('../..') -slicc_env.Append(CCFLAGS=['-g', '-O0']) -slicc_env.Append(CPPDEFINES=['DEBUG', 'TRACING_ON=1']) -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/NewExprAST.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 -r 69714e675ee2 -r ef5fae93a3b2 src/mem/slicc/__init__.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/mem/slicc/__init__.py Tue Sep 22 18:12:39 2009 -0700 @@ -0,0 +1,25 @@ +# 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. diff -r 69714e675ee2 -r ef5fae93a3b2 src/mem/slicc/ast/AST.cc --- a/src/mem/slicc/ast/AST.cc Tue Sep 22 15:24:16 2009 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,39 +0,0 @@ - -/* - * Copyright (c) 1999-2008 Mark D. Hill and David A. Wood - * 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; _______________________________________________ m5-dev mailing list m5-dev@m5sim.org http://m5sim.org/mailman/listinfo/m5-dev