diff options
Diffstat (limited to 'lib/gen_op')
| -rwxr-xr-x | lib/gen_op | 30 |
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 |
