diff options
| author | Kimplul <kimi.h.kuparinen@gmail.com> | 2023-06-27 13:00:19 +0300 |
|---|---|---|
| committer | Kimplul <kimi.h.kuparinen@gmail.com> | 2023-06-27 13:00:19 +0300 |
| commit | 6aefc5167a64e05580dcf1afc70efa496ed145ac (patch) | |
| tree | 57032839fd8f5f748b273c679f3766c6911bbca5 /lib/gen_imm | |
| parent | e80d3758a37848cda7990e8eff68ed9df344afa4 (diff) | |
| download | copyjit-6aefc5167a64e05580dcf1afc70efa496ed145ac.tar.gz copyjit-6aefc5167a64e05580dcf1afc70efa496ed145ac.zip | |
add immediate loading
Diffstat (limited to 'lib/gen_imm')
| -rwxr-xr-x | lib/gen_imm | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/lib/gen_imm b/lib/gen_imm new file mode 100755 index 0000000..560c372 --- /dev/null +++ b/lib/gen_imm @@ -0,0 +1,31 @@ +#!/bin/sh + +echo "#ifndef COPYJIT_IMM_H" > imm.h +echo "#define COPYJIT_IMM_H" >> imm.h + +echo "#ifndef COPYJIT_IMM_DECLS_H" > imm_decls.h +echo "#define COPYJIT_IMM_DECLS_H" >> imm_decls.h + +echo "#ifndef COPYJIT_IMM_DEFNS_H" > imm_defns.h +echo "#define COPYJIT_IMM_DEFNS_H" >> imm_defns.h + +for bin in ${1} +do + base=$(basename "${bin}") + op=${base%.*} + cp "../${bin}" "gen/${op}" + xxd -i "gen/${op}" >> imm.h + echo "void *compile_${op}(ctx_t *ctx, unsigned long i);" >> imm_decls.h + echo "void *compile_${op}(ctx_t *ctx, unsigned long i)\n" \ + "{\n" \ + " void *pc = ctx->pc;\n" \ + " memcpy(ctx->pc, gen_${op}, gen_${op}_len);\n" \ + " *(unsigned long *)(ctx->pc + gen_${op}_len - 8) = i;\n" \ + " ctx->pc += gen_${op}_len;\n" \ + " return pc;\n" \ + "}" >> imm_defns.h +done + +echo "#endif /* COPYJIT_OPS_H */" >> imm.h +echo "#endif /* COPYJIT_DECLS_H */" >> imm_decls.h +echo "#endif /* COPYJIT_DEFNS_H */" >> imm_defns.h |
