summaryrefslogtreecommitdiff
path: root/src/arch
diff options
context:
space:
mode:
authorGabe Black <gblack@eecs.umich.edu>2007-05-31 20:45:06 +0000
committerGabe Black <gblack@eecs.umich.edu>2007-05-31 20:45:06 +0000
commitd24a9c7d21702a7eb16a06af6508bf922ca11d6a (patch)
treefd38cdabd48ee2fd2a4e9d33b45d611685ab171d /src/arch
parentace2890f9fd10fb8b19004b80befc1c9d0948246 (diff)
downloadgem5-d24a9c7d21702a7eb16a06af6508bf922ca11d6a.tar.xz
Make directives take parameters and use the directive function and not it's name
--HG-- extra : convert_revision : fbc93ba592b0cc009696e8d7edead841ec2ea01c
Diffstat (limited to 'src/arch')
-rw-r--r--src/arch/micro_asm.py13
-rwxr-xr-xsrc/arch/micro_asm_test.py6
2 files changed, 15 insertions, 4 deletions
diff --git a/src/arch/micro_asm.py b/src/arch/micro_asm.py
index 1fb04c185..e36daf862 100644
--- a/src/arch/micro_asm.py
+++ b/src/arch/micro_asm.py
@@ -91,6 +91,7 @@ class Statement(object):
def __init__(self):
self.is_microop = False
self.is_directive = False
+ self.params = ""
class Microop(Statement):
def __init__(self):
@@ -98,7 +99,6 @@ class Microop(Statement):
self.mnemonic = ""
self.labels = []
self.is_microop = True
- self.params = ""
class Directive(Statement):
def __init__(self):
@@ -136,7 +136,7 @@ def handle_statement(parser, container, statement):
raise
elif statement.is_directive:
try:
- eval('container.%s()' % statement.name)
+ eval('container.directives[statement.name](%s)' % statement.params)
except:
print_error("Error executing directive.")
print container.directives
@@ -415,12 +415,19 @@ def p_label_1(t):
label.text = t[2]
t[0] = label
-def p_directive(t):
+def p_directive_0(t):
'directive : DOT ID'
directive = Directive()
directive.name = t[2]
t[0] = directive
+def p_directive_1(t):
+ 'directive : DOT ID PARAMS'
+ directive = Directive()
+ directive.name = t[2]
+ directive.params = t[3]
+ t[0] = directive
+
# Parse error handler. Note that the argument here is the offending
# *token*, not a grammar symbol (hence the need to use t.value)
def p_error(t):
diff --git a/src/arch/micro_asm_test.py b/src/arch/micro_asm_test.py
index 816a74b71..858ac511e 100755
--- a/src/arch/micro_asm_test.py
+++ b/src/arch/micro_asm_test.py
@@ -57,12 +57,15 @@ class TestMacroop(Macroop):
microops["bah"] = Bah_Tweaked
def untweak(self):
microops["bah"] = Bah
+ def print_debug(self, message):
+ print message
def __init__(self, name):
super(TestMacroop, self).__init__(name)
self.directives = {
"tweak": self.tweak,
- "untweak": self.untweak
+ "untweak": self.untweak,
+ "print": self.print_debug
}
assembler = MicroAssembler(TestMacroop, microops, Rom('main ROM'))
@@ -82,6 +85,7 @@ def macroop squishy {
.tweak
bah
.untweak
+ .print "In the midst"
bah
dah # single line comment after something
.tweak