#!/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
