aboutsummaryrefslogtreecommitdiff
path: root/lib/gen_op
blob: 77e776dc7476ef821a75393f44c6296936164c3a (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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