diff options
-rw-r--r-- | mnemonics.c | 2 | ||||
-rw-r--r-- | parser.y | 5 |
2 files changed, 5 insertions, 2 deletions
diff --git a/mnemonics.c b/mnemonics.c index 4a21992..38a35f8 100644 --- a/mnemonics.c +++ b/mnemonics.c @@ -34,7 +34,7 @@ const struct mnemonic mnemonics[] = { { "ble", 0x6a00, { {PCOFF, 0}, } }, /* branch if less than or equal */ { "bra", 0x6e00, { {PCOFF, 0}, } }, /* branch always */ { "jmp", 0x7000, { {REGPTR, 5}, } }, /* branch always */ - { "addpc", 0x8000, { {REG, 9}, {IMM, 0} } }, /* add program counter and immediate */ + { "addpc", 0x8000, { {REG, 9}, {PCOFF, 0} } }, /* add program counter and immediate */ { "nop", 0xffff, { } }, /* no operation */ }; @@ -88,6 +88,7 @@ void yyerror(const char *msg) %type <args> a_regp_reg %type <args> a_reg_regp %type <args> a_reg_imm +%type <args> a_reg_pcoff %type <args> a_pcoff %type <lval> intlit @@ -136,7 +137,7 @@ inst: | T_BLE a_pcoff { $$ = INSTRUCTION_ARGS(BLE, $2); } | T_BRA a_pcoff { $$ = INSTRUCTION_ARGS(BRA, $2); } | T_JMP a_regp { $$ = INSTRUCTION_ARGS(JMP, $2); } - | T_ADDPC a_reg_imm { $$ = INSTRUCTION_ARGS(ADDPC, $2); } + | T_ADDPC a_reg_pcoff { $$ = INSTRUCTION_ARGS(ADDPC, $2); } | T_NOP { $$ = INSTRUCTION(NOP); } ; @@ -152,6 +153,8 @@ a_reg_regp: T_SPACE T_REG "," T_REGPTR { $$ = MKARGS($2, $4); } a_reg_imm: T_SPACE T_REG "," imm { $$ = MKARGS($2, $4); } +a_reg_pcoff: + T_SPACE T_REG "," pcoff { $$ = MKARGS($2, $4); } a_pcoff: T_SPACE pcoff { $$ = MKARGS($2); } |