diff options
Diffstat (limited to 'usr.bin/oasm/parse.c')
-rw-r--r-- | usr.bin/oasm/parse.c | 28 |
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) { |