moo/lib/genbct.awk

42 lines
954 B
Awk
Raw Normal View History

# generate instruction dispatch table for VM.
# qseawk -f genbct.awk moo-prv.h
#
# TODO: rewrite this script in moo itself.
#
BEGIN {
on = 0;
for (i = 0; i < 255; i++) code_label[i] = "&&case_DEFAULT";
}
/^enum moo_bcode_t$/ { on = 1; }
/^enum moo_bcode_t {$/ { on = 2; }
/^{$/ { if (on == 1) on = 2; else on = 0; }
/^};$/ { on = 0; }
on == 2 && match($0, /^[[:space:]]*BCODE_([[:alnum:]_]+)[[:space:]]*=[[:space:]]*(0x[[:xdigit:]]+)/, 1, sm) >= 1 {
count = length(sm) \ 2;
if (count == 2)
{
name = substr ($0, sm[1,"start"], sm[1,"length"]);
code = substr ($0, sm[2,"start"], sm[2,"length"]);
code_label[int(code)] = "&&case_BCODE_" name;
}
}
END {
printf ("/* generated by genbct.awk */\n\n");
##printf ("\tstatic void* inst_jump_labels[] =\n");
##printf ("\t{\n");
for (i = 0; i < 255; i++)
{
printf ("\t\t/* %3d */ %s,\n", i, code_label[i]);
}
printf ("\t\t/* %3d */ %s\n", i, code_label[i]);
##printf ("\t};\n");
}