diff options
| author | Kimplul <kimi.h.kuparinen@gmail.com> | 2023-10-28 11:48:28 +0300 |
|---|---|---|
| committer | Kimplul <kimi.h.kuparinen@gmail.com> | 2023-10-28 11:48:28 +0300 |
| commit | 8153447847aeaa0e1181cf62579cc3264ba44a8b (patch) | |
| tree | 08d2d9992748e04c94f201acdccc28504d236df6 /tasm/src/parser.y | |
| parent | d96b8c7d12fc61ec609d6138627b9d6d18139a9a (diff) | |
| download | tri-8153447847aeaa0e1181cf62579cc3264ba44a8b.tar.gz tri-8153447847aeaa0e1181cf62579cc3264ba44a8b.zip | |
add initial relocation stuff
Diffstat (limited to 'tasm/src/parser.y')
| -rw-r--r-- | tasm/src/parser.y | 26 |
1 files changed, 13 insertions, 13 deletions
diff --git a/tasm/src/parser.y b/tasm/src/parser.y index ef8d3df..559cbba 100644 --- a/tasm/src/parser.y +++ b/tasm/src/parser.y @@ -289,27 +289,28 @@ i {emit_u(ctx, OPCODE_AUIPC, $2, $4);} | jal gpr "," addr - {emit_u(ctx, OPCODE_JAL, $2, 0); - emit_reloc(ctx, RELOC_J, $4);} + {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);} | beq gpr "," gpr "," addr - {emit_s(ctx, OPCODE_BRANCH, BRANCH_BEQ, $2, $4, 0); - emit_reloc(ctx, RELOC_B, $6);} + {emit_reloc(ctx, RELOC_B, $6); + emit_s(ctx, OPCODE_BRANCH, BRANCH_BEQ, $2, $4, 0);} | bne gpr "," gpr "," addr - {emit_s(ctx, OPCODE_BRANCH, BRANCH_BNE, $2, $4, 0); - emit_reloc(ctx, RELOC_B, $6);} + {emit_reloc(ctx, RELOC_B, $6); + emit_s(ctx, OPCODE_BRANCH, BRANCH_BNE, $2, $4, 0);} | blt gpr "," gpr "," addr - {emit_s(ctx, OPCODE_BRANCH, BRANCH_BLT, $2, $4, 0); - emit_reloc(ctx, RELOC_B, $6);} + {emit_reloc(ctx, RELOC_B, $6); + emit_s(ctx, OPCODE_BRANCH, BRANCH_BLT, $2, $4, 0); + } | bge gpr "," gpr "," addr - {emit_s(ctx, OPCODE_BRANCH, BRANCH_BGE, $2, $4, 0); - emit_reloc(ctx, RELOC_B, $6);} + {emit_reloc(ctx, RELOC_B, $6); + emit_s(ctx, OPCODE_BRANCH, BRANCH_BGE, $2, $4, 0);} | ld width "," gpr "," imm "(" gpr ")" {emit_i(ctx, OPCODE_LOAD, check_width($2), $4, $8, $6);} @@ -340,9 +341,8 @@ i {emit_i(ctx, OPCODE_OP_IMM, X0_NUM, OP_IMM_ADDI, X0_NUM, 0);} | la gpr "," addr - {emit_u(ctx, OPCODE_LUI, $2, 0); - /* important that the reloc is in the middle here */ - emit_reloc(ctx, RELOC_LA, $4); + {emit_reloc(ctx, RELOC_LA, $4); + emit_u(ctx, OPCODE_LUI, $2, 0); emit_i(ctx, OPCODE_OP_IMM, $2, OP_IMM_ADDI, $2, 0);} | li gpr "," imm |
