diff options
Diffstat (limited to 'usr.bin/oasm/lex.c')
-rw-r--r-- | usr.bin/oasm/lex.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/usr.bin/oasm/lex.c b/usr.bin/oasm/lex.c index 7b78d54..3ca9e8d 100644 --- a/usr.bin/oasm/lex.c +++ b/usr.bin/oasm/lex.c @@ -47,6 +47,7 @@ static char putback = '\0'; #define S_IMN_INC "inc" #define S_IMN_DEC "dec" #define S_IMN_HLT "hlt" +#define S_IMN_BR "br" /* * Returns 0 if a char is counted as a @@ -190,6 +191,19 @@ token_arith(char *p) return TT_UNKNOWN; } +/* + * Control flow instructions + */ +static tt_t +token_cfi(char *p) +{ + if (strcmp(p, S_IMN_BR) == 0) { + return TT_BR; + } + + return TT_UNKNOWN; +} + static tt_t token_xreg(char *p) { @@ -293,6 +307,13 @@ lex_tok(struct oasm_state *state, struct oasm_token *ttp) return 0; } + /* Control flow instruction? */ + if ((tok = token_cfi(p)) != TT_UNKNOWN) { + ttp->type = tok; + ttp->raw = p; + return 0; + } + /* Register? */ if ((tok = token_reg(p)) != TT_UNKNOWN) { ttp->is_reg = 1; |