aboutsummaryrefslogtreecommitdiff
path: root/lib/gen_imm
diff options
context:
space:
mode:
authorKimplul <kimi.h.kuparinen@gmail.com>2023-06-27 13:00:19 +0300
committerKimplul <kimi.h.kuparinen@gmail.com>2023-06-27 13:00:19 +0300
commit6aefc5167a64e05580dcf1afc70efa496ed145ac (patch)
tree57032839fd8f5f748b273c679f3766c6911bbca5 /lib/gen_imm
parente80d3758a37848cda7990e8eff68ed9df344afa4 (diff)
downloadcopyjit-6aefc5167a64e05580dcf1afc70efa496ed145ac.tar.gz
copyjit-6aefc5167a64e05580dcf1afc70efa496ed145ac.zip
add immediate loading
Diffstat (limited to 'lib/gen_imm')
-rwxr-xr-xlib/gen_imm31
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