aboutsummaryrefslogtreecommitdiff
path: root/lib/gen_op
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_op
parente80d3758a37848cda7990e8eff68ed9df344afa4 (diff)
downloadcopyjit-6aefc5167a64e05580dcf1afc70efa496ed145ac.tar.gz
copyjit-6aefc5167a64e05580dcf1afc70efa496ed145ac.zip
add immediate loading
Diffstat (limited to 'lib/gen_op')
-rwxr-xr-xlib/gen_op30
1 files changed, 30 insertions, 0 deletions
diff --git a/lib/gen_op b/lib/gen_op
new file mode 100755
index 0000000..77e776d
--- /dev/null
+++ b/lib/gen_op
@@ -0,0 +1,30 @@
+#!/bin/sh
+
+echo "#ifndef COPYJIT_OP_H" > ops.h
+echo "#define COPYJIT_OP_H" >> ops.h
+
+echo "#ifndef COPYJIT_OP_DECLS_H" > op_decls.h
+echo "#define COPYJIT_OP_DECLS_H" >> op_decls.h
+
+echo "#ifndef COPYJIT_OP_DEFNS_H" > op_defns.h
+echo "#define COPYJIT_OP_DEFNS_H" >> op_defns.h
+
+for bin in ${1}
+do
+ base=$(basename "${bin}")
+ op=${base%.*}
+ cp "../${bin}" "gen/${op}"
+ xxd -i "gen/${op}" >> ops.h
+ echo "void *compile_${op}(ctx_t *ctx);" >> op_decls.h
+ echo "void *compile_${op}(ctx_t *ctx)\n" \
+ "{\n" \
+ " void *pc = ctx->pc;\n" \
+ " memcpy(pc, gen_${op}, gen_${op}_len);\n" \
+ " ctx->pc += gen_${op}_len;\n" \
+ " return pc;\n" \
+ "}" >> op_defns.h
+done
+
+echo "#endif /* COPYJIT_OP_H */" >> ops.h
+echo "#endif /* COPYJIT_OP_DECLS_H */" >> op_decls.h
+echo "#endif /* COPYJIT_OP_DEFNS_H */" >> op_defns.h