42 lines
954 B
Awk
42 lines
954 B
Awk
|
# 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");
|
||
|
}
|