From 8ea7feed4ba494f2fc9ae836888f785da406ea62 Mon Sep 17 00:00:00 2001 From: Eduard Moser Date: Fri, 19 Apr 2024 20:55:45 +0200 Subject: [PATCH] support of nifs --- csrc/Makefile | 7 +- csrc/include/stdlib.h | 3 + csrc/test2.c | 2 + csrc/test5.c | 1 - docs/instruction_set_rv_i.pdf | Bin 0 -> 81207 bytes docs/links.md | 3 + nifs/rvsops.c | 287 ++++++++++++++++++++++++++++++++++ nifs/rvsops.h | 20 +++ src/rvsdis.erl | 29 ++++ src/rvsops.erl | 32 ++++ 10 files changed, 382 insertions(+), 2 deletions(-) create mode 100644 docs/instruction_set_rv_i.pdf create mode 100644 nifs/rvsops.c create mode 100644 nifs/rvsops.h create mode 100644 src/rvsdis.erl create mode 100644 src/rvsops.erl diff --git a/csrc/Makefile b/csrc/Makefile index 7e6fe53..3de7b7b 100644 --- a/csrc/Makefile +++ b/csrc/Makefile @@ -3,8 +3,10 @@ SRCS = $(wildcard *.c) INCS = $(wildcard include/*.h) ASDIR=../_build/obj ASFILES=$(patsubst %.c,$(ASDIR)/%.s,$(SRCS)) +OBJFILES=$(ASDIR)/test2.o +# $(patsubst %.c,$(ASDIR)/%.o,$(SRCS)) -all: $(ASFILES) +all: $(ASFILES) $(OBJFILES) INCLUDES= -Iinclude CCOPTIONS= -g -O2 -march=rv32imac -mabi=ilp32 @@ -12,6 +14,9 @@ CCOPTIONS= -g -O2 -march=rv32imac -mabi=ilp32 $(ASDIR)/%.s: %.c ${INCS} Makefile $(CC) -S ${CCOPTIONS} ${INCLUDES} -o $@ $< +$(ASDIR)/%.o: %.c ${INCS} Makefile + $(CC) -c ${CCOPTIONS} ${INCLUDES} -DWITHMAIN -o $@ $< + main: main.c test2.c gcc -o main -D'__NOTRISCV__' main.c test2.c diff --git a/csrc/include/stdlib.h b/csrc/include/stdlib.h index 76793a4..2f53c1f 100644 --- a/csrc/include/stdlib.h +++ b/csrc/include/stdlib.h @@ -7,6 +7,8 @@ #define __STDLIB__H float atof(char *); + +#ifndef WITHMAIN int32_t __attribute__ ((noinline)) rvs_strtol_extern(char *); int32_t __attribute__ ((noinline)) strtol(char *str) { int32_t ret; @@ -17,6 +19,7 @@ int32_t __attribute__ ((noinline)) strtol(char *str) { asm ( "\n\t" ); return ret; } +#endif static inline int32_t atoi(char * arg) { return strtol(arg); diff --git a/csrc/test2.c b/csrc/test2.c index e8ca88f..6e4f2d1 100644 --- a/csrc/test2.c +++ b/csrc/test2.c @@ -1,7 +1,9 @@ #include #include +#ifndef WITHMAIN #include "__startup__.h" +#endif extern int32_t buffer[]; diff --git a/csrc/test5.c b/csrc/test5.c index c7961d0..0d4340a 100644 --- a/csrc/test5.c +++ b/csrc/test5.c @@ -36,6 +36,5 @@ int32_t main(int32_t argc, char **argv) { int32_t start = rvs_itoa(strtol(argv[1]),&buffer[100],9); //rvsstrcpy(&buffer[len],&buffer[100+start]); rvs_sendmessage(&buffer[100+start],rvsstrlen(&buffer[100+start])); - rvs_sendmessage(argv[2],rvsstrlen(argv[2])); return len; } diff --git a/docs/instruction_set_rv_i.pdf b/docs/instruction_set_rv_i.pdf new file mode 100644 index 0000000000000000000000000000000000000000..1db51ec1f9121b528758c9fb843e75a82f3c17ba GIT binary patch literal 81207 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%0AI{mkTW` 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 vJFh`n@ckgvrT literal 0 HcmV?d00001 diff --git a/docs/links.md b/docs/links.md index 7015bd8..0c19286 100644 --- a/docs/links.md +++ b/docs/links.md @@ -44,4 +44,7 @@ Here the best thing is how he/she spawns a local function. [RISC-V Assembler Reference](https://michaeljclark.github.io/asm.html) +opcodes (bitgenau) +[RISC-V Reference](https://www.cs.sfu.ca/~ashriram/Courses/CS295/assets/notebooks/RISCV/RISCV_CARD.pdf) + diff --git a/nifs/rvsops.c b/nifs/rvsops.c new file mode 100644 index 0000000..9a29b39 --- /dev/null +++ b/nifs/rvsops.c @@ -0,0 +1,287 @@ +/* + * A minimal RISC-V RV32I dissassembler + * source: github.com:andportnoy/riscv-disassembler + * under: MIT License + */ + +#include +#include "rvsops.h" + +enum das_format {R, I, S, B, U, J}; + +struct { + u8 opcode; /* 7-bit */ + enum das_format fmt; +} opcodefmt[] = { + {0x37, U}, + {0x17, U}, + {0x6f, J}, + {0x67, I}, + {0x63, B}, + {0x03, I}, + {0x23, S}, + {0x13, I}, + {0x33, R}, + {0x0f, I}, + {0x73, I}, +}; + +union encoding { + u32 insn; + struct { /* generic */ + u32 opcode :7; + u32 rd :5; + u32 funct3 :3; + u32 rs1 :5; + u32 rs2 :5; + u32 funct7 :7; + }; + struct { + u32 opcode :7; + u32 rd :5; + u32 funct3 :3; + u32 rs1 :5; + u32 rs2 :5; + u32 funct7 :7; + } r; + struct { + u32 opcode :7; + u32 rd :5; + u32 funct3 :3; + u32 rs1 :5; + s32 i11_0 :12; /* sign extension */ + } i; + struct { + u32 opcode :7; + u32 i4_0 :5; + u32 funct3 :3; + u32 rs1 :5; + u32 rs2 :5; + s32 i11_5 :7; /* sign extension */ + } s; + struct { + u32 opcode :7; + u32 i11 :1; + u32 i4_1 :4; + u32 funct3 :3; + u32 rs1 :5; + u32 rs2 :5; + u32 i10_5 :6; + s32 i12 :1; /* sign extension */ + } b; + struct { + u32 opcode :7; + u32 rd :5; + u32 i31_12 :20; + } u; + struct { + u32 opcode :7; + u32 rd :5; + u32 i19_12 :8; + u32 i11 :1; + u32 i10_1 :10; + s32 i20 :1; /* sign extension */ + } j; +}; + +int das_format(u8 opcode) { +#ifdef DEBUG + printf("%d\r\n",__LINE__); +#endif + for (int i=0, n=sizeof opcodefmt/sizeof opcodefmt[0]; i +#include +#include +#include +#include + +typedef uint8_t u8; +typedef uint16_t u16; +typedef uint32_t u32; +typedef uint64_t u64; + +typedef int32_t s32; + +/* stream of 32 bit fixed length instructions */ +struct progbits { + u32 size; + u32 *data; +}; + +struct progbits loadbits(char *filename); diff --git a/src/rvsdis.erl b/src/rvsdis.erl new file mode 100644 index 0000000..cad465c --- /dev/null +++ b/src/rvsdis.erl @@ -0,0 +1,29 @@ +-module(rvsdis). +-compile(export_all). +%%-export([new/2,numtobin/2,bintonum/2,putdata/4,put/4,getdata/3,get/3]). + +h2i(arg) -> + list_to_integer(arg). + +opcode(instruction) -> + opcode band h2i("7f"). + +format(instruction) -> + case opcode(instruction) of + %% "37" -> fU; + %% h2i("17") -> fU; + %% h2i("6f") -> fJ; + %% h2i("67") -> fI; + %% h2i("63") -> fB; + %% h2i("03") -> fI; + %% h2i("23") -> fS; + %% h2i("13") -> fI; + %% h2i("33") -> fR; + %% h2i("0f") -> fI; + %% h2i("73") -> fI; + _ -> throw("unknown instruction format") + end. + +-ifdef(REBARTEST). +-include_lib("eunit/include/eunit.hrl"). +-endif. diff --git a/src/rvsops.erl b/src/rvsops.erl new file mode 100644 index 0000000..54d0ced --- /dev/null +++ b/src/rvsops.erl @@ -0,0 +1,32 @@ +- module(rvsops). + +-export([disassemble/1]). + +-nifs([disassemble/1]). + +-on_load(init/0). + +init() -> + erlang:load_nif("./_build/libs/rvsops", 0). + +disassemble(_X) -> + erlang:nif_error("NIF library not loaded"). + +-ifdef(REBARTEST). +-include_lib("eunit/include/eunit.hrl"). +addi_test() -> + ?assertEqual(["addi","x14","x0","8"], disassemble(list_to_integer("00800713",16))), + ok. +jal_test() -> + ?assertEqual(["jal","x1","4"],disassemble(list_to_integer("004000ef",16))), + ok. +error_test() -> + try + case disassemble(0) of + _ -> ?assert(false) + end + catch + error:Reason -> ?assertEqual(badarg,Reason) + end, + ok. +-endif.