#include "limbo.h" uchar movetab[Mend][Tend] = { /* Mas */ { /* Tnone */ 0, /* Tadt */ IMOVM, /* Tadtpick */ IMOVM, /* Tarray */ IMOVP, /* Tbig */ IMOVL, /* Tbyte */ IMOVB, /* Tchan */ IMOVP, /* Treal */ IMOVF, /* Tfn */ 0, /* Tint */ IMOVW, /* Tlist */ IMOVP, /* Tmodule */ IMOVP, /* Tref */ IMOVP, /* Tstring */ IMOVP, /* Ttuple */ IMOVM, /* Tainit */ 0, /* Talt */ 0, /* Tany */ IMOVP, /* Tarrow */ 0, /* Tcase */ 0, /* Tcasec */ 0, /* Tdot */ 0, /* Terror */ 0, /* Tgoto */ 0, /* Tid */ 0, }, /* Mcons */ { /* Tnone */ 0, /* Tadt */ ICONSM, /* Tadtpick */ 0, /* Tarray */ ICONSP, /* Tbig */ ICONSL, /* Tbyte */ ICONSB, /* Tchan */ ICONSP, /* Treal */ ICONSF, /* Tfn */ 0, /* Tint */ ICONSW, /* Tlist */ ICONSP, /* Tmodule */ ICONSP, /* Tref */ ICONSP, /* Tstring */ ICONSP, /* Ttuple */ ICONSM, /* Tainit */ 0, /* Talt */ 0, /* Tany */ ICONSP, /* Tarrow */ 0, /* Tcase */ 0, /* Tcasec */ 0, /* Tdot */ 0, /* Terror */ 0, /* Tgoto */ 0, /* Tid */ 0, }, /* Mhd */ { /* Tnone */ 0, /* Tadt */ IHEADM, /* Tadtpick */ 0, /* Tarray */ IHEADP, /* Tbig */ IHEADL, /* Tbyte */ IHEADB, /* Tchan */ IHEADP, /* Treal */ IHEADF, /* Tfn */ 0, /* Tint */ IHEADW, /* Tlist */ IHEADP, /* Tmodule */ IHEADP, /* Tref */ IHEADP, /* Tstring */ IHEADP, /* Ttuple */ IHEADM, /* Tainit */ 0, /* Talt */ 0, /* Tany */ IHEADP, /* Tarrow */ 0, /* Terror */ 0, /* Tcase */ 0, /* Tcasec */ 0, /* Tdot*/ 0, /* Tgoto */ 0, /* Tid */ 0, }, /* Mtl */ { /* Tnone */ 0, /* Tadt */ 0, /* Tadtpick */ 0, /* Tarray */ 0, /* Tbig */ 0, /* Tbyte */ 0, /* Tchan */ 0, /* Treal */ 0, /* Tfn */ 0, /* Tint */ 0, /* Tlist */ ITAIL, /* Tmodule */ 0, /* Tref */ 0, /* Tstring */ 0, /* Ttuple */ 0, /* Tainit */ 0, /* Talt */ 0, /* Tany */ 0, /* Tarrow */ 0, /* Tcase */ 0, /* Tcasec */ 0, /* Tdot */ 0, /* Terror */ 0, /* Tgoto */ 0, /* Tid */ 0, }, }; uchar chantab[Tend] = { /* Tnone */ 0, /* Tadt */ INEWCM, /* Tadtpick */ 0, /* Tarray */ INEWCP, /* Tbig */ INEWCL, /* Tbyte */ INEWCB, /* Tchan */ INEWCP, /* Treal */ INEWCF, /* Tfn */ 0, /* Tint */ INEWCW, /* Tlist */ INEWCP, /* Tmodule */ INEWCP, /* Tref */ INEWCP, /* Tstring */ INEWCP, /* Ttuple */ INEWCM, /* Tainit */ 0, /* Talt */ 0, /* Tany */ INEWCP, /* Tarrow */ 0, /* Tcase */ 0, /* Tcasec */ 0, /* Tdot */ 0, /* Terror */ 0, /* Tgoto */ 0, /* Tid */ 0, }; uchar disoptab[Oend+1][6] = { /* opcode default byte word big real string */ {0}, /* Oadd */ {0, IADDB, IADDW, IADDL, IADDF, IADDC,}, /* Oaddas */ {0, IADDB, IADDW, IADDL, IADDF, IADDC,}, /* Oadr */ {0}, /* Oadtdecl */ {0}, /* Oalt */ {0}, /* Oand */ {0, IANDB, IANDW, IANDL, 0, 0,}, /* Oandand */ {0}, /* Oandas */ {0, IANDB, IANDW, IANDL, 0, 0,}, /* Oarray */ {0}, /* Oas */ {0}, /* Obreak */ {0}, /* Ocall */ {0}, /* Ocase */ {0}, /* Ocast */ {0}, /* Ochan */ {0}, /* Ocomp */ {0}, /* Ocondecl */ {0}, /* Ocons */ {0}, /* Oconst */ {0}, /* Ocont */ {0}, /* Odas */ {0}, /* Odec */ {0, ISUBB, ISUBW, ISUBL, ISUBF, 0,}, /* Odiv */ {0, IDIVB, IDIVW, IDIVL, IDIVF, 0,}, /* Odivas */ {0, IDIVB, IDIVW, IDIVL, IDIVF, 0,}, /* Odo */ {0}, /* Odot */ {0}, /* Oelem */ {0}, /* Oeq */ {IBEQW, IBEQB, IBEQW, IBEQL, IBEQF, IBEQC,}, /* Oexit */ {0}, /* Ofielddecl */{0}, /* Ofor */ {0}, /* Ofunc */ {0}, /* Ogeq */ {0, IBGEB, IBGEW, IBGEL, IBGEF, IBGEC,}, /* Ogt */ {0, IBGTB, IBGTW, IBGTL, IBGTF, IBGTC,}, /* Ohd */ {0}, /* Oif */ {0}, /* Oimport */ {0}, /* Oinc */ {0, IADDB, IADDW, IADDL, IADDF, 0,}, /* Oind */ {0}, /* Oindex */ {0,}, /* Oinds */ {0, 0, IINDC, 0, 0, 0,}, /* Oindx */ {0, 0, IINDX, 0, 0, 0,}, /* Ojmp */ {0}, /* Olabel */ {0}, /* Olen */ {ILENA, 0, 0, 0, 0, ILENC,}, /* Oleq */ {0, IBLEB, IBLEW, IBLEL, IBLEF, IBLEC,}, /* Oload */ {0}, /* Olsh */ {0, ISHLB, ISHLW, ISHLL, 0, 0,}, /* Olshas */ {0, ISHLB, ISHLW, ISHLL, 0, 0,}, /* Olt */ {0, IBLTB, IBLTW, IBLTL, IBLTF, IBLTC,}, /* Omdot */ {0}, /* Omod */ {0, IMODB, IMODW, IMODL, 0, 0,}, /* Omodas */ {0, IMODB, IMODW, IMODL, 0, 0,}, /* Omoddecl */ {0}, /* Omul */ {0, IMULB, IMULW, IMULL, IMULF, 0,}, /* Omulas */ {0, IMULB, IMULW, IMULL, IMULF, 0,}, /* Oname */ {0}, /* Oneg */ {0, 0, 0, 0, INEGF, 0, }, /* Oneq */ {IBNEW, IBNEB, IBNEW, IBNEL, IBNEF, IBNEC,}, /* Onot */ {0}, /* Onothing */ {0}, /* Oor */ {0, IORB, IORW, IORL, 0, 0,}, /* Ooras */ {0, IORB, IORW, IORL, 0, 0,}, /* Ooror */ {0}, /* Opick */ {0}, /* Opickdecl */ {0}, /* Opredec */ {0}, /* Opreinc */ {0}, /* Orange */ {0}, /* Orcv */ {0}, /* Oref */ {0}, /* Oret */ {0}, /* Orsh */ {0, ISHRB, ISHRW, ISHRL, 0, 0,}, /* Orshas */ {0, ISHRB, ISHRW, ISHRL, 0, 0,}, /* Oscope */ {0}, /* Oseq */ {0}, /* Oslice */ {ISLICEA,0, 0, 0, 0, ISLICEC}, /* Osnd */ {0}, /* Ospawn */ {0}, /* Osub */ {0, ISUBB, ISUBW, ISUBL, ISUBF, 0,}, /* Osubas */ {0, ISUBB, ISUBW, ISUBL, ISUBF, 0,}, /* Otagof */ {0}, /* Otl */ {0}, /* Otuple */ {0}, /* Otypedecl */ {0}, /* Oused */ {0}, /* Ovardecl */ {0}, /* Ovardecli */ {0}, /* Owild */ {0}, /* Oxor */ {0, IXORB, IXORW, IXORL, 0, 0,}, /* Oxoras */ {0, IXORB, IXORW, IXORL, 0, 0,}, /* Oend */ {0} }; int setisused[] = { Oas, Odas, Oaddas, Osubas, Omulas, Odivas, Omodas, Oandas, Ooras, Oxoras, Olshas, Onothing, Orshas, Oinc, Odec, Opreinc, Opredec, Ocall, Ospawn, Osnd, Orcv, -1 }; int setsideeffect[] = { Oas, Odas, Oaddas, Osubas, Omulas, Odivas, Omodas, Oandas, Ooras, Oxoras, Olshas, Orshas, Oinc, Odec, Opreinc, Opredec, Ocall, Ospawn, Osnd, Orcv, Oadr, Oarray, Ocast, Ochan, Ocons, Odiv, Odot, Oind, Oindex, Oinds, Oindx, Olen, Oload, Omod, Oref, -1 }; char *opname[Oend+1] = { "unknown", /* Oadd */ "+", /* Oaddas */ "+=", /* Oadr */ "adr", /* Oadtdecl */ "adtdecl", /* Oalt */ "alt", /* Oand */ "&", /* Oandand */ "&&", /* Oandas */ "&=", /* Oarray */ "array", /* Oas */ "=", /* Obreak */ "break", /* Ocall */ "call", /* Ocase */ "case", /* Ocast */ "cast", /* Ochan */ "chan", /* Ocomp */ "~", /* Ocondecl */ "condecl", /* Ocons */ "::", /* Oconst */ "const", /* Ocont */ "continue", /* Odas */ ":=", /* Odec */ "--", /* Odiv */ "/", /* Odivas */ "/=", /* Odo */ "do", /* Odot */ ".", /* Oelem */ "elem", /* Oeq */ "==", /* Oexit */ "exit", /* Ofielddecl */"fielddecl", /* Ofor */ "for", /* Ofunc */ "fn(){}", /* Ogeq */ ">=", /* Ogt */ ">", /* Ohd */ "hd", /* Oif */ "if", /* Oimport */ "import", /* Oinc */ "++", /* Oind */ "*", /* Oindex */ "index", /* Oinds */ "inds", /* Oindx */ "indx", /* Ojmp */ "jmp", /* Olabel */ "label", /* Olen */ "len", /* Oleq */ "<=", /* Oload */ "load", /* Olsh */ "<<", /* Olshas */ "<<=", /* Olt */ "<", /* Omdot */ "->", /* Omod */ "%", /* Omodas */ "%=", /* Omoddecl */ "moddecl", /* Omul */ "*", /* Omulas */ "*=", /* Oname */ "name", /* Oneg */ "-", /* Oneq */ "!=", /* Onot */ "!", /* Onothing */ "nothing", /* Oor */ "|", /* Ooras */ "|=", /* Ooror */ "||", /* Opick */ "pick", /* Opickdecl */ "pickdecl", /* Opredec */ "--", /* Opreinc */ "++", /* Orange */ "range", /* Orcv */ "<-", /* Oref */ "ref", /* Oret */ "return", /* Orsh */ ">>", /* Orshas */ ">>=", /* Oscope */ "scope", /* Oseq */ "seq", /* Oslice */ "slice", /* Osnd */ "<-=", /* Ospawn */ "spawn", /* Osub */ "-", /* Osubas */ "-=", /* Otl */ "tagof", /* Otl */ "tl", /* Otuple */ "tuple", /* Otypedecl */ "typedecl", /* Oused */ "used", /* Ovardecl */ "vardecl", /* Ovardecli */ "vardecli", /* Owild */ "*", /* Oxor */ "^", /* Oxoras */ "^=", /* Oend */ "unknown" }; int setisbyteinst[] = { IMULB, ISUBB, IADDB, IDIVB, IORB, IXORB, ISHLB, ISHRB, IMODB, IANDB, IBEQB, IBNEB, IBLTB, IBLEB, IBGTB, IBGEB, -1 }; char *instname[256] = { "nop", "alt", "nbalt", "goto", "call", "frame", "spawn", "runt", "load", "mcall", "mspawn", "mframe", "ret", "jmp", "case", "exit", "new", "newa", "newcb", "newcw", "newcf", "newcp", "newcm", "newcmp", "send", "recv", "consb", "consw", "consp", "consf", "consm", "consmp", "headb", "headw", "headp", "headf", "headm", "headmp", "tail", "lea", "indx", "movp", "movm", "movmp", "movb", "movw", "movf", "cvtbw", "cvtwb", "cvtfw", "cvtwf", "cvtca", "cvtac", "cvtwc", "cvtcw", "cvtfc", "cvtcf", "addb", "addw", "addf", "subb", "subw", "subf", "mulb", "mulw", "mulf", "divb", "divw", "divf", "modw", "modb", "andb", "andw", "orb", "orw", "xorb", "xorw", "shlb", "shlw", "shrb", "shrw", "insc", "indc", "addc", "lenc", "lena", "lenl", "beqb", "bneb", "bltb", "bleb", "bgtb", "bgeb", "beqw", "bnew", "bltw", "blew", "bgtw", "bgew", "beqf", "bnef", "bltf", "blef", "bgtf", "bgef", "beqc", "bnec", "bltc", "blec", "bgtc", "bgec", "slicea", "slicela", "slicec", "indw", "indf", "indb", "negf", "movl", "addl", "subl", "divl", "modl", "mull", "andl", "orl", "xorl", "shll", "shrl", "bnel", "bltl", "blel", "bgtl", "bgel", "beql", "cvtlf", "cvtfl", "cvtlw", "cvtwl", "cvtlc", "cvtcl", "headl", "consl", "newcl", "casec", "indl", "movpc", "tcmp", };