define(reg "_" field "_WIDTH", msb - lsb + 1)
 }
 
+# Print a field _SIGNED definition for a field
+function define_field_sign(reg, field, sign) {
+       define(reg "_" field "_SIGNED", sign)
+}
+
 # Parse a "<msb>[:<lsb>]" string into the global variables @msb and @lsb
 function parse_bitdef(reg, field, bitdef, _bits)
 {
        next
 }
 
+/^SignedEnum/ {
+       change_block("Enum<", "Sysreg", "Enum")
+       expect_fields(3)
+       field = $3
+       parse_bitdef(reg, field, $2)
+
+       define_field(reg, field, msb, lsb)
+       define_field_sign(reg, field, "true")
+
+       next
+}
+
+/^UnsignedEnum/ {
+       change_block("Enum<", "Sysreg", "Enum")
+       expect_fields(3)
+       field = $3
+       parse_bitdef(reg, field, $2)
+
+       define_field(reg, field, msb, lsb)
+       define_field_sign(reg, field, "false")
+
+       next
+}
+
 /^Enum/ {
        change_block("Enum", "Sysreg", "Enum")
        expect_fields(3)