summaryrefslogtreecommitdiff
path: root/usr.bin/oasm/parse.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr.bin/oasm/parse.c')
-rw-r--r--usr.bin/oasm/parse.c28
1 files changed, 22 insertions, 6 deletions
diff --git a/usr.bin/oasm/parse.c b/usr.bin/oasm/parse.c
index 6851935..9a4dd0e 100644
--- a/usr.bin/oasm/parse.c
+++ b/usr.bin/oasm/parse.c
@@ -109,6 +109,9 @@ parse_reg(struct oasm_state *state, struct oasm_token *tok)
case TT_DEC:
case TT_INC:
case TT_ADD:
+ case TT_SUB:
+ case TT_MUL:
+ case TT_DIV:
state->last = tok->type;
break;
default:
@@ -124,7 +127,7 @@ parse_reg(struct oasm_state *state, struct oasm_token *tok)
}
state->last = tok->type;
- emit_osxm64(&emit_state, tok);
+ emit_osmx64(&emit_state, tok);
return 0;
}
@@ -143,19 +146,32 @@ parse_tok(struct oasm_state *state, struct oasm_token *tok)
switch (tok->type) {
case TT_HLT:
state->last = tok->type;
- emit_osxm64(&emit_state, tok);
+ emit_osmx64(&emit_state, tok);
+ break;
+ case TT_MUL:
+ state->last = tok->type;
+ emit_osmx64(&emit_state, tok);
+ break;
+ case TT_DIV:
+ state->last = tok->type;
+ emit_osmx64(&emit_state, tok);
+ break;
case TT_MOV:
state->last = tok->type;
- emit_osxm64(&emit_state, tok);
+ emit_osmx64(&emit_state, tok);
break;
case TT_ADD:
state->last = tok->type;
- emit_osxm64(&emit_state, tok);
+ emit_osmx64(&emit_state, tok);
+ break;
+ case TT_SUB:
+ state->last = tok->type;
+ emit_osmx64(&emit_state, tok);
break;
case TT_DEC:
case TT_INC:
state->last = tok->type;
- emit_osxm64(&emit_state, tok);
+ emit_osmx64(&emit_state, tok);
break;
case TT_IMM:
p = tokstr[state->last];
@@ -163,7 +179,7 @@ parse_tok(struct oasm_state *state, struct oasm_token *tok)
printf("expected X<n> but got %s\n", p);
return -1;
}
- emit_osxm64(&emit_state, tok);
+ emit_osmx64(&emit_state, tok);
break;
default:
if (!tok->is_reg) {