aboutsummaryrefslogtreecommitdiff
path: root/tasm/src/parser.y
diff options
context:
space:
mode:
authorKimplul <kimi.h.kuparinen@gmail.com>2023-11-19 20:25:29 +0200
committerKimplul <kimi.h.kuparinen@gmail.com>2023-11-19 20:25:29 +0200
commit910ad02d86672cc3020cc5df0fa451ef4dd69bfd (patch)
treed5711894ee14c62caee8f8b744cac2d28f92c87b /tasm/src/parser.y
parent51789d2ed69515ab81bee6633bac3d94c519dc03 (diff)
downloadtri-910ad02d86672cc3020cc5df0fa451ef4dd69bfd.tar.gz
tri-910ad02d86672cc3020cc5df0fa451ef4dd69bfd.zip
implement jalr
Diffstat (limited to 'tasm/src/parser.y')
-rw-r--r--tasm/src/parser.y9
1 files changed, 6 insertions, 3 deletions
diff --git a/tasm/src/parser.y b/tasm/src/parser.y
index a39c9c1..204fe0a 100644
--- a/tasm/src/parser.y
+++ b/tasm/src/parser.y
@@ -73,7 +73,7 @@
%token ecall ebreak pcall
%token fence
/* meta */
-%token li la nop
+%token mv li la nop
/* m (avoid name clash with stdlib div) */
%token mul diV rem
@@ -292,8 +292,8 @@ i
{emit_reloc(ctx, RELOC_J, $4);
emit_u(ctx, OPCODE_JAL, $2, 0);}
- | jalr gpr "," gpr "," imm
- {emit_i(ctx, OPCODE_JALR, $2, 0, $4, $6);}
+ | jalr gpr "," imm "(" gpr ")"
+ {emit_i(ctx, OPCODE_JALR, $2, 0, $6, $4);}
| beq gpr "," gpr "," addr
{emit_reloc(ctx, RELOC_B, $6);
@@ -337,6 +337,9 @@ i
{emit_d(ctx, OPCODE_DIOP, $2, $4, $6, check_nop3($8));}
/* meta */
+ | mv gpr "," gpr
+ {emit_i(ctx, OPCODE_OP_IMM, $2, OP_IMM_ADDI, $4, 0);}
+
| nop
{emit_i(ctx, OPCODE_OP_IMM, X0_NUM, OP_IMM_ADDI, X0_NUM, 0);}