Add structure based bitfield syntax to the isa_parser. This is primarily useful for...
authorGabe Black <gblack@eecs.umich.edu>
Thu, 22 Mar 2007 04:10:57 +0000 (04:10 +0000)
committerGabe Black <gblack@eecs.umich.edu>
Thu, 22 Mar 2007 04:10:57 +0000 (04:10 +0000)
--HG--
extra : convert_revision : dfe6df160d00adec1830d9b88520ba20834d1209

src/arch/isa_parser.py

index da17f5a9ddc57ed8fdba12dd5d0d2d54c118bea2..f3981a6eb192b0f972a76766513d81713efc8741 100755 (executable)
@@ -81,12 +81,12 @@ tokens = reserved + (
     # code literal
     'CODELIT',
 
-    # ( ) [ ] { } < > , ; : :: *
+    # ( ) [ ] { } < > , ; : :: *
     'LPAREN', 'RPAREN',
     'LBRACKET', 'RBRACKET',
     'LBRACE', 'RBRACE',
     'LESS', 'GREATER', 'EQUALS',
-    'COMMA', 'SEMI', 'COLON', 'DBLCOLON',
+    'COMMA', 'SEMI', 'DOT', 'COLON', 'DBLCOLON',
     'ASTERISK',
 
     # C preprocessor directives
@@ -113,6 +113,7 @@ t_GREATER          = r'\>'
 t_EQUALS           = r'='
 t_COMMA            = r','
 t_SEMI             = r';'
+t_DOT              = r'\.'
 t_COLON            = r':'
 t_DBLCOLON         = r'::'
 t_ASTERISK        = r'\*'
@@ -261,6 +262,7 @@ def p_defs_and_outputs_1(t):
 def p_def_or_output(t):
     '''def_or_output : def_format
                      | def_bitfield
+                     | def_bitfield_struct
                      | def_template
                      | def_operand_types
                      | def_operands
@@ -364,15 +366,21 @@ def p_def_bitfield_1(t):
     t[0] = GenCode(header_output = hash_define)
 
 # alternate form for structure member: 'def bitfield <ID> <ID>'
-def p_def_bitfield_2(t):
-    'def_bitfield : DEF nothing BITFIELD ID ID SEMI'
+def p_def_bitfield_struct(t):
+    'def_bitfield_struct : DEF opt_signed BITFIELD ID id_with_dot SEMI'
+    if (t[2] != ''):
+        error(t.lineno(1), 'error: structure bitfields are always unsigned.')
     expr = 'machInst.%s' % t[5]
     hash_define = '#undef %s\n#define %s\t%s\n' % (t[4], t[4], expr)
     t[0] = GenCode(header_output = hash_define)
 
-def p_nothing(t):
-    'nothing : empty'
-    t[0] = ''
+def p_id_with_dot_0(t):
+    'id_with_dot : ID'
+    t[0] = t[1]
+
+def p_id_with_dot_1(t):
+    'id_with_dot : ID DOT id_with_dot'
+    t[0] = t[1] + t[2] + t[3]
 
 def p_opt_signed_0(t):
     'opt_signed : SIGNED'