aboutsummaryrefslogtreecommitdiff
path: root/lib/gen_op
diff options
context:
space:
mode:
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