diff options
author | Gabe Black <gblack@eecs.umich.edu> | 2007-05-31 20:45:06 +0000 |
---|---|---|
committer | Gabe Black <gblack@eecs.umich.edu> | 2007-05-31 20:45:06 +0000 |
commit | d24a9c7d21702a7eb16a06af6508bf922ca11d6a (patch) | |
tree | fd38cdabd48ee2fd2a4e9d33b45d611685ab171d /src/arch | |
parent | ace2890f9fd10fb8b19004b80befc1c9d0948246 (diff) | |
download | gem5-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.py | 13 | ||||
-rwxr-xr-x | src/arch/micro_asm_test.py | 6 |
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 |