aboutsummaryrefslogtreecommitdiff
path: root/tasm
diff options
context:
space:
mode:
authorKimplul <kimi.h.kuparinen@gmail.com>2023-10-29 13:16:25 +0200
committerKimplul <kimi.h.kuparinen@gmail.com>2023-10-29 13:16:25 +0200
commit80d78c5589d42f81b04e671b28c103a2112458d1 (patch)
tree81390d685648d25dd05dfa0092deb0587821cf5a /tasm
parentb7525c84619f7bc28bcd3c43aa119d1c6bc23b6d (diff)
downloadtri-80d78c5589d42f81b04e671b28c103a2112458d1.tar.gz
tri-80d78c5589d42f81b04e671b28c103a2112458d1.zip
move common stuff to core
+ Might have to come up with a better name, but works for now
Diffstat (limited to 'tasm')
-rw-r--r--tasm/Makefile2
-rw-r--r--tasm/gen/gen_parser.c4
-rw-r--r--tasm/include/tasm/assembler.h2
-rw-r--r--tasm/include/tasm/bits.h81
-rw-r--r--tasm/include/tasm/regs.h357
-rw-r--r--tasm/src/assembler.c2
-rw-r--r--tasm/src/bits.c75
-rw-r--r--tasm/src/parser.y4
8 files changed, 7 insertions, 520 deletions
diff --git a/tasm/Makefile b/tasm/Makefile
index e5c54c1..b9abd49 100644
--- a/tasm/Makefile
+++ b/tasm/Makefile
@@ -22,7 +22,7 @@ setup:
CLEANUP := build deps.mk tasm
CLEANUP_CMD :=
-TASM_SOURCES :=
+TASM_SOURCES := ../core/bits.c
include src/source.mk
diff --git a/tasm/gen/gen_parser.c b/tasm/gen/gen_parser.c
index 9e2a4cf..aadb8fb 100644
--- a/tasm/gen/gen_parser.c
+++ b/tasm/gen/gen_parser.c
@@ -80,8 +80,8 @@
#include <tasm/assembler.h>
#include <tasm/parser.h>
-#include <tasm/bits.h>
-#include <tasm/regs.h>
+#include <bits.h>
+#include <regs.h>
#include <tri.h>
diff --git a/tasm/include/tasm/assembler.h b/tasm/include/tasm/assembler.h
index 52ab867..6941186 100644
--- a/tasm/include/tasm/assembler.h
+++ b/tasm/include/tasm/assembler.h
@@ -1,7 +1,7 @@
#ifndef TASM_ASSEMBLER_H
#define TASM_ASSEMBLER_H
-#include <tasm/regs.h>
+#include <regs.h>
#include <tri.h>
struct asm_ctx;
diff --git a/tasm/include/tasm/bits.h b/tasm/include/tasm/bits.h
deleted file mode 100644
index 2070425..0000000
--- a/tasm/include/tasm/bits.h
+++ /dev/null
@@ -1,81 +0,0 @@
-#ifndef TASM_BITS_H
-#define TASM_BITS_H
-
-#include <tasm/regs.h>
-#include <tri.h>
-
-#define OPCODE_OP_IMM 0b0000000000
-#define OP_IMM_ADDI 0b0000000000
-#define OP_IMM_SUBI 0b0000000001
-#define OP_IMM_SLTI 0b0000000010
-#define OP_IMM_SGEI 0b0000000100
-#define OP_IMM_SEQI 0b0000000101
-#define OP_IMM_SNEI 0b0000000110
-#define OP_IMM_SLLI 0b0000001000
-#define OP_IMM_SRLI 0b0000001001
-#define OP_IMM_UNOP 0b0000001010
-
-#define OPCODE_OP 0b0000000001
-#define OP_ADD 0b0000000000
-#define OP_SUB 0b0000000001
-#define OP_SLT 0b0000000010
-#define OP_SGE 0b0000000100
-#define OP_SEQ 0b0000000101
-#define OP_SNE 0b0000000110
-#define OP_SLL 0b0000001000
-#define OP_SRL 0b0000001001
-#define OP_MUL 0b0000001010
-#define OP_DIV 0b0000010000
-#define OP_REM 0b0000010001
-
-#define OPCODE_LUI 0b0000000010
-#define OPCODE_AUIPC 0b0000000100
-#define OPCODE_JAL 0b0000000101
-#define OPCODE_JALR 0b0000000110
-
-#define OPCODE_BRANCH 0b0000001000
-#define BRANCH_BEQ 0b0000000000
-#define BRANCH_BNE 0b0000000001
-#define BRANCH_BLT 0b0000000010
-#define BRANCH_BGE 0b0000000100
-
-#define OPCODE_LOAD 0b0000001001
-#define OPCODE_STORE 0b0000001010
-#define STORE_CST 0b0000000001
-
-#define OPCODE_SYSTEM 0b0000010000
-#define SYSTEM_ECALL 0b0000000000
-#define SYSTEM_EBREAK 0b0000000001
-#define SYSTEM_PCALL 0b0000000010
-#define SYSTEM_CSRRW 0b0000000100
-#define SYSTEM_CSRRS 0b0000000101
-#define SYSTEM_CSRRC 0b0000000110
-
-#define OPCODE_MEM 0b0000010001
-#define MEM_FENCE 0b0000000000
-#define MEM_STT 0b0000000001
-#define MEM_ENT 0b0000000010
-#define MEM_CAT 0b0000000100
-
-#define OPCODE_DIOP 0b0000010010
-
-#define WIDTH_W 0b0100000000
-#define WIDTH_T 0b0000000000
-
-#define nonnull __attribute__((nonnull))
-
-tri_t parse_opcode(tri_t i);
-
-tri_t build_r(tri_t opcode, tri_t rd, tri_t fn0, tri_t rs1, tri_t rs2, tri_t fn5);
-void nonnull parse_r(tri_t i, tri_t *rd, tri_t *rs1, tri_t *rs2, tri_t *fn0, tri_t *fn5);
-
-tri_t build_i(tri_t opcode, tri_t rd, tri_t fn0, tri_t rs1, tri_t imm9);
-void nonnull parse_i(tri_t i, tri_t *rd, tri_t *fn0, tri_t *rs1, tri_t *imm9);
-
-tri_t build_s(tri_t opcode, tri_t imm4, tri_t fn0, tri_t rs1, tri_t rs2, tri_t imm5);
-void nonnull parse_s(tri_t i, tri_t *imm4, tri_t *fn0, tri_t *rs1, tri_t *rs2, tri_t *imm5);
-
-tri_t build_u(tri_t opcode, tri_t rd, tri_t imm18);
-void nonnull parse_u(tri_t i, tri_t *rd, tri_t *imm18);
-
-#endif
diff --git a/tasm/include/tasm/regs.h b/tasm/include/tasm/regs.h
deleted file mode 100644
index 3018ea4..0000000
--- a/tasm/include/tasm/regs.h
+++ /dev/null
@@ -1,357 +0,0 @@
-#ifndef TASM_REGS_H
-#define TASM_REGS_H
-
-#include <stdlib.h>
-#include <stdio.h>
-
-enum gpr_num {
- X0_NUM,
- X1_NUM,
- X2_NUM,
- X3_NUM,
- X4_NUM,
- X5_NUM,
- X6_NUM,
- X7_NUM,
- X8_NUM,
- X9_NUM,
- X10_NUM,
- X11_NUM,
- X12_NUM,
- X13_NUM,
- X14_NUM,
- X15_NUM,
- X16_NUM,
- X17_NUM,
- X18_NUM,
- X19_NUM,
- X20_NUM,
- X21_NUM,
- X22_NUM,
- X23_NUM,
- X24_NUM,
- X25_NUM,
- X26_NUM,
- X27_NUM,
- X28_NUM,
- X29_NUM,
- X30_NUM,
- X31_NUM,
- X32_NUM,
- X33_NUM,
- X34_NUM,
- X35_NUM,
- X36_NUM,
- X37_NUM,
- X38_NUM,
- X39_NUM,
- X40_NUM,
- X41_NUM,
- X42_NUM,
- X43_NUM,
- X44_NUM,
- X45_NUM,
- X46_NUM,
- X47_NUM,
- X48_NUM,
- X49_NUM,
- X50_NUM,
- X51_NUM,
- X52_NUM,
- X53_NUM,
- X54_NUM,
- X55_NUM,
- X56_NUM,
- X57_NUM,
- X58_NUM,
- X59_NUM,
- X60_NUM,
- X61_NUM,
- X62_NUM,
- X63_NUM,
- X64_NUM,
- X65_NUM,
- X66_NUM,
- X67_NUM,
- X68_NUM,
- X69_NUM,
- X70_NUM,
- X71_NUM,
- X72_NUM,
- X73_NUM,
- X74_NUM,
- X75_NUM,
- X76_NUM,
- X77_NUM,
- X78_NUM,
- X79_NUM,
- X80_NUM,
-};
-
-/* generated with a script */
-enum gpr_tri {
- X41 = 170,
- X42 = 168,
- X43 = 169,
- X44 = 162,
- X45 = 160,
- X46 = 161,
- X47 = 166,
- X48 = 164,
- X49 = 165,
- X50 = 138,
- X51 = 136,
- X52 = 137,
- X53 = 130,
- X54 = 128,
- X55 = 129,
- X56 = 134,
- X57 = 132,
- X58 = 133,
- X59 = 154,
- X60 = 152,
- X61 = 153,
- X62 = 146,
- X63 = 144,
- X64 = 145,
- X65 = 150,
- X66 = 148,
- X67 = 149,
- X68 = 42,
- X69 = 40,
- X70 = 41,
- X71 = 34,
- X72 = 32,
- X73 = 33,
- X74 = 38,
- X75 = 36,
- X76 = 37,
- X77 = 10,
- X78 = 8,
- X79 = 9,
- X80 = 2,
- X0 = 0,
- X1 = 1,
- X2 = 6,
- X3 = 4,
- X4 = 5,
- X5 = 26,
- X6 = 24,
- X7 = 25,
- X8 = 18,
- X9 = 16,
- X10 = 17,
- X11 = 22,
- X12 = 20,
- X13 = 21,
- X14 = 106,
- X15 = 104,
- X16 = 105,
- X17 = 98,
- X18 = 96,
- X19 = 97,
- X20 = 102,
- X21 = 100,
- X22 = 101,
- X23 = 74,
- X24 = 72,
- X25 = 73,
- X26 = 66,
- X27 = 64,
- X28 = 65,
- X29 = 70,
- X30 = 68,
- X31 = 69,
- X32 = 90,
- X33 = 88,
- X34 = 89,
- X35 = 82,
- X36 = 80,
- X37 = 81,
- X38 = 86,
- X39 = 84,
- X40 = 85,
-};
-
-static inline enum gpr_tri gpr_tri(enum gpr_num g)
-{
- switch (g) {
- case X0_NUM: return X0;
- case X1_NUM: return X1;
- case X2_NUM: return X2;
- case X3_NUM: return X3;
- case X4_NUM: return X4;
- case X5_NUM: return X5;
- case X6_NUM: return X6;
- case X7_NUM: return X7;
- case X8_NUM: return X8;
- case X9_NUM: return X9;
- case X10_NUM: return X10;
- case X11_NUM: return X11;
- case X12_NUM: return X12;
- case X13_NUM: return X13;
- case X14_NUM: return X14;
- case X15_NUM: return X15;
- case X16_NUM: return X16;
- case X17_NUM: return X17;
- case X18_NUM: return X18;
- case X19_NUM: return X19;
- case X20_NUM: return X20;
- case X21_NUM: return X21;
- case X22_NUM: return X22;
- case X23_NUM: return X23;
- case X24_NUM: return X24;
- case X25_NUM: return X25;
- case X26_NUM: return X26;
- case X27_NUM: return X27;
- case X28_NUM: return X28;
- case X29_NUM: return X29;
- case X30_NUM: return X30;
- case X31_NUM: return X31;
- case X32_NUM: return X32;
- case X33_NUM: return X33;
- case X34_NUM: return X34;
- case X35_NUM: return X35;
- case X36_NUM: return X36;
- case X37_NUM: return X37;
- case X38_NUM: return X38;
- case X39_NUM: return X39;
- case X40_NUM: return X40;
- case X41_NUM: return X41;
- case X42_NUM: return X42;
- case X43_NUM: return X43;
- case X44_NUM: return X44;
- case X45_NUM: return X45;
- case X46_NUM: return X46;
- case X47_NUM: return X47;
- case X48_NUM: return X48;
- case X49_NUM: return X49;
- case X50_NUM: return X50;
- case X51_NUM: return X51;
- case X52_NUM: return X52;
- case X53_NUM: return X53;
- case X54_NUM: return X54;
- case X55_NUM: return X55;
- case X56_NUM: return X56;
- case X57_NUM: return X57;
- case X58_NUM: return X58;
- case X59_NUM: return X59;
- case X60_NUM: return X60;
- case X61_NUM: return X61;
- case X62_NUM: return X62;
- case X63_NUM: return X63;
- case X64_NUM: return X64;
- case X65_NUM: return X65;
- case X66_NUM: return X66;
- case X67_NUM: return X67;
- case X68_NUM: return X68;
- case X69_NUM: return X69;
- case X70_NUM: return X70;
- case X71_NUM: return X71;
- case X72_NUM: return X72;
- case X73_NUM: return X73;
- case X74_NUM: return X74;
- case X75_NUM: return X75;
- case X76_NUM: return X76;
- case X77_NUM: return X77;
- case X78_NUM: return X78;
- case X79_NUM: return X79;
- case X80_NUM: return X80;
- }
-
- fprintf(stderr, "illegal gpr num: %d\n", g);
- abort();
- return -1;
-}
-
-static inline enum gpr_num gpr_num(enum gpr_tri t)
-{
- switch (t) {
- case X0: return X0_NUM;
- case X1: return X1_NUM;
- case X2: return X2_NUM;
- case X3: return X3_NUM;
- case X4: return X4_NUM;
- case X5: return X5_NUM;
- case X6: return X6_NUM;
- case X7: return X7_NUM;
- case X8: return X8_NUM;
- case X9: return X9_NUM;
- case X10: return X10_NUM;
- case X11: return X11_NUM;
- case X12: return X12_NUM;
- case X13: return X13_NUM;
- case X14: return X14_NUM;
- case X15: return X15_NUM;
- case X16: return X16_NUM;
- case X17: return X17_NUM;
- case X18: return X18_NUM;
- case X19: return X19_NUM;
- case X20: return X20_NUM;
- case X21: return X21_NUM;
- case X22: return X22_NUM;
- case X23: return X23_NUM;
- case X24: return X24_NUM;
- case X25: return X25_NUM;
- case X26: return X26_NUM;
- case X27: return X27_NUM;
- case X28: return X28_NUM;
- case X29: return X29_NUM;
- case X30: return X30_NUM;
- case X31: return X31_NUM;
- case X32: return X32_NUM;
- case X33: return X33_NUM;
- case X34: return X34_NUM;
- case X35: return X35_NUM;
- case X36: return X36_NUM;
- case X37: return X37_NUM;
- case X38: return X38_NUM;
- case X39: return X39_NUM;
- case X40: return X40_NUM;
- case X41: return X41_NUM;
- case X42: return X42_NUM;
- case X43: return X43_NUM;
- case X44: return X44_NUM;
- case X45: return X45_NUM;
- case X46: return X46_NUM;
- case X47: return X47_NUM;
- case X48: return X48_NUM;
- case X49: return X49_NUM;
- case X50: return X50_NUM;
- case X51: return X51_NUM;
- case X52: return X52_NUM;
- case X53: return X53_NUM;
- case X54: return X54_NUM;
- case X55: return X55_NUM;
- case X56: return X56_NUM;
- case X57: return X57_NUM;
- case X58: return X58_NUM;
- case X59: return X59_NUM;
- case X60: return X60_NUM;
- case X61: return X61_NUM;
- case X62: return X62_NUM;
- case X63: return X63_NUM;
- case X64: return X64_NUM;
- case X65: return X65_NUM;
- case X66: return X66_NUM;
- case X67: return X67_NUM;
- case X68: return X68_NUM;
- case X69: return X69_NUM;
- case X70: return X70_NUM;
- case X71: return X71_NUM;
- case X72: return X72_NUM;
- case X73: return X73_NUM;
- case X74: return X74_NUM;
- case X75: return X75_NUM;
- case X76: return X76_NUM;
- case X77: return X77_NUM;
- case X78: return X78_NUM;
- case X79: return X79_NUM;
- case X80: return X80_NUM;
- }
-
- fprintf(stderr, "illegal gpr: %d\n", t);
- abort();
- return -1;
-}
-#endif
diff --git a/tasm/src/assembler.c b/tasm/src/assembler.c
index 9f6dc95..3faf1fb 100644
--- a/tasm/src/assembler.c
+++ b/tasm/src/assembler.c
@@ -1,6 +1,6 @@
#include <tasm/assembler.h>
#include <tasm/parser.h>
-#include <tasm/bits.h>
+#include <bits.h>
#include <string.h>
#include <unistd.h>
diff --git a/tasm/src/bits.c b/tasm/src/bits.c
deleted file mode 100644
index 7a54632..0000000
--- a/tasm/src/bits.c
+++ /dev/null
@@ -1,75 +0,0 @@
-#include <tasm/bits.h>
-
-tri_t parse_opcode(tri_t i)
-{
- /* opcode is lowest five trits */
- return tri_mask(i, 5);
-}
-
-tri_t build_r(tri_t opcode, tri_t rd, tri_t fn0, tri_t rs1, tri_t rs2, tri_t fn5)
-{
- return opcode
- | tri_sl(rd , 5)
- | tri_sl(fn0, 9)
- | tri_sl(rs1, 14)
- | tri_sl(rs2, 18)
- | tri_sl(fn5, 22);
-}
-
-void parse_r(tri_t i, tri_t *rd, tri_t *fn0, tri_t *rs1, tri_t *rs2, tri_t *fn5)
-{
- *rd = tri_mask(tri_sr(i, 5), 4);
- *fn0 = tri_mask(tri_sr(i, 9), 5);
- *rs1 = tri_mask(tri_sr(i, 14), 4);
- *rs2 = tri_mask(tri_sr(i, 18), 4);
- *fn5 = tri_mask(tri_sr(i, 22), 5);
-}
-
-tri_t build_i(tri_t opcode, tri_t rd, tri_t fn0, tri_t rs1, tri_t imm9)
-{
- return opcode
- | tri_sl(rd , 5)
- | tri_sl(fn0 , 9)
- | tri_sl(rs1 , 14)
- | tri_sl(imm9, 18);
-}
-
-void parse_i(tri_t i, tri_t *rd, tri_t *fn0, tri_t *rs1, tri_t *imm9)
-{
- *rd = tri_mask(tri_sr(i, 5), 4);
- *fn0 = tri_mask(tri_sr(i, 9), 5);
- *rs1 = tri_mask(tri_sr(i, 14), 4);
- *imm9 = tri_mask(tri_sr(i, 18), 9);
-}
-
-tri_t build_s(tri_t opcode, tri_t imm4, tri_t fn0, tri_t rs1, tri_t rs2, tri_t imm5)
-{
- return opcode
- | tri_sl(imm4, 5)
- | tri_sl(fn0 , 9)
- | tri_sl(rs1 , 14)
- | tri_sl(rs2 , 18)
- | tri_sl(imm5, 22);
-}
-
-void parse_s(tri_t i, tri_t *imm4, tri_t *fn0, tri_t *rs1, tri_t *rs2, tri_t *imm5)
-{
- *imm4 = tri_mask(tri_sr(i, 5), 4);
- *fn0 = tri_mask(tri_sr(i, 9), 5);
- *rs1 = tri_mask(tri_sr(i, 14), 4);
- *rs2 = tri_mask(tri_sr(i, 18), 4);
- *imm5 = tri_mask(tri_sr(i, 22), 5);
-}
-
-tri_t build_u(tri_t opcode, tri_t rd, tri_t imm18)
-{
- return opcode
- | tri_sl(rd , 5)
- | tri_sl(imm18, 9);
-}
-
-void parse_u(tri_t i, tri_t *rd, tri_t *imm18)
-{
- *rd = tri_mask(tri_sr(i, 5), 4);
- *imm18 = tri_mask(tri_sr(i, 9), 18);
-}
diff --git a/tasm/src/parser.y b/tasm/src/parser.y
index 559cbba..64418d1 100644
--- a/tasm/src/parser.y
+++ b/tasm/src/parser.y
@@ -13,8 +13,8 @@
#include <tasm/assembler.h>
#include <tasm/parser.h>
-#include <tasm/bits.h>
-#include <tasm/regs.h>
+#include <bits.h>
+#include <regs.h>
#include <tri.h>
%}