movetab:= array [Mend]of{ Mas => array[Tend] of { Tadt => IMOVM, Tadtpick => IMOVM, Tarray => IMOVP, Tbig => IMOVL, Tbyte => IMOVB, Tchan => IMOVP, Treal => IMOVF, Tint => IMOVW, Tlist => IMOVP, Tmodule => IMOVP, Tref => IMOVP, Tstring => IMOVP, Ttuple => IMOVM, Texception => IMOVM, Tfix => IMOVW, Tpoly => IMOVP, Tany => IMOVP, * => 0 }, Mcons => array[Tend] of { Tadt => ICONSM, Tadtpick => 0, Tarray => ICONSP, Tbig => ICONSL, Tbyte => ICONSB, Tchan => ICONSP, Treal => ICONSF, Tint => ICONSW, Tlist => ICONSP, Tmodule => ICONSP, Tref => ICONSP, Tstring => ICONSP, Ttuple => ICONSM, Texception => ICONSM, Tfix => ICONSW, Tpoly => ICONSP, Tany => ICONSP, * => 0 }, Mhd => array[Tend] of { Tadt => IHEADM, Tadtpick => 0, Tarray => IHEADP, Tbig => IHEADL, Tbyte => IHEADB, Tchan => IHEADP, Treal => IHEADF, Tint => IHEADW, Tlist => IHEADP, Tmodule => IHEADP, Tref => IHEADP, Tstring => IHEADP, Ttuple => IHEADM, Texception => IHEADM, Tfix => IHEADW, Tpoly => IHEADP, Tany => IHEADP, * => 0 }, Mtl => array[Tend] of { Tlist => ITAIL, * => 0 },}; chantab := array[Tend] of{ Tadt => INEWCM, Tadtpick => 0, Tarray => INEWCP, Tbig => INEWCL, Tbyte => INEWCB, Tchan => INEWCP, Treal => INEWCF, Tint => INEWCW, Tlist => INEWCP, Tmodule => INEWCP, Tref => INEWCP, Tstring => INEWCP, Ttuple => INEWCM, Texception => INEWCM, Tfix => INEWCW, Tpoly => INEWCP, Tany => INEWCP, * => 0}; opind := array[Tend] of{ Tbyte => 1, Tint => 2, Tbig => 3, Treal => 4, Tstring => 5, Tfix => 6, * => 0}; disoptab := array[Oend+1] of{ # opcode default byte word big real string fixed Oadd => array[7] of {0, IADDB, IADDW, IADDL, IADDF, IADDC, IADDW,}, Oaddas => array[7] of {0, IADDB, IADDW, IADDL, IADDF, IADDC, IADDW,}, Oand => array[7] of {0, IANDB, IANDW, IANDL, 0, 0, 0,}, Oandas => array[7] of {0, IANDB, IANDW, IANDL, 0, 0, 0,}, Odec => array[7] of {0, ISUBB, ISUBW, ISUBL, ISUBF, 0, ISUBW,}, Odiv => array[7] of {0, IDIVB, IDIVW, IDIVL, IDIVF, 0, IDIVX,}, Odivas => array[7] of {0, IDIVB, IDIVW, IDIVL, IDIVF, 0, IDIVX,}, Oeq => array[7] of {IBEQW, IBEQB, IBEQW, IBEQL, IBEQF, IBEQC, IBEQW,}, Oexp => array[7] of {0, 0, IEXPW, IEXPL, IEXPF, 0, 0,}, Oexpas => array[7] of {0, 0, IEXPW, IEXPL, IEXPF, 0, 0,}, Ogeq => array[7] of {0, IBGEB, IBGEW, IBGEL, IBGEF, IBGEC, IBGEW,}, Ogt => array[7] of {0, IBGTB, IBGTW, IBGTL, IBGTF, IBGTC, IBGTW,}, Oinc => array[7] of {0, IADDB, IADDW, IADDL, IADDF, 0, IADDW,}, Oinds => array[7] of {0, 0, IINDC, 0, 0, 0, 0,}, Oindx => array[7] of {0, 0, IINDX, 0, 0, 0, 0,}, Olen => array[7] of {ILENA, 0, 0, 0, 0, ILENC, 0,}, Oleq => array[7] of {0, IBLEB, IBLEW, IBLEL, IBLEF, IBLEC, IBLEW,}, Olsh => array[7] of {0, ISHLB, ISHLW, ISHLL, 0, 0, 0,}, Olshas => array[7] of {0, ISHLB, ISHLW, ISHLL, 0, 0, 0,}, Olt => array[7] of {0, IBLTB, IBLTW, IBLTL, IBLTF, IBLTC, IBLTW,}, Omod => array[7] of {0, IMODB, IMODW, IMODL, 0, 0, 0,}, Omodas => array[7] of {0, IMODB, IMODW, IMODL, 0, 0, 0,}, Omul => array[7] of {0, IMULB, IMULW, IMULL, IMULF, 0, IMULX,}, Omulas => array[7] of {0, IMULB, IMULW, IMULL, IMULF, 0, IMULX,}, Oneg => array[7] of {0, 0, 0, 0, INEGF, 0, 0, }, Oneq => array[7] of {IBNEW, IBNEB, IBNEW, IBNEL, IBNEF, IBNEC, IBNEW,}, Oor => array[7] of {0, IORB, IORW, IORL, 0, 0, 0,}, Ooras => array[7] of {0, IORB, IORW, IORL, 0, 0, 0,}, Orsh => array[7] of {0, ISHRB, ISHRW, ISHRL, 0, 0, 0,}, Orshas => array[7] of {0, ISHRB, ISHRW, ISHRL, 0, 0, 0,}, Oslice => array[7] of {ISLICEA,0, 0, 0, 0, ISLICEC, 0,}, Osub => array[7] of {0, ISUBB, ISUBW, ISUBL, ISUBF, 0, ISUBW,}, Osubas => array[7] of {0, ISUBB, ISUBW, ISUBL, ISUBF, 0, ISUBW,}, Oxor => array[7] of {0, IXORB, IXORW, IXORL, 0, 0, 0,}, Oxoras => array[7] of {0, IXORB, IXORW, IXORL, 0, 0, 0,},}; isbyteinst := array [256] of{ IMULB => 1, ISUBB => 1, IADDB => 1, IDIVB => 1, IORB => 1, IXORB => 1, ISHLB => 1, ISHRB => 1, IMODB => 1, IANDB => 1, IBEQB => 1, IBNEB => 1, IBLTB => 1, IBLEB => 1, IBGTB => 1, IBGEB => 1, * => 0,}; instname := array[256] of{ "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", "mnewz", "cvtrf", "cvtfr", "cvtws", "cvtsw", "lsrw", "lsrl", "eclr", "newz", "newaz", "raise", "casel", "mulx", "divx", "cvtxx", "mulx0", "divx0", "cvtxx0", "mulx1", "divx1", "cvtxx1", "cvtfx", "cvtxf", "expw", "expl", "expf", "self",};
movetab:= array [Mend]of
{
Mas => array[Tend] of
{
Tadt => IMOVM,
Tadtpick => IMOVM,
Tarray => IMOVP,
Tbig => IMOVL,
Tbyte => IMOVB,
Tchan => IMOVP,
Treal => IMOVF,
Tint => IMOVW,
Tlist => IMOVP,
Tmodule => IMOVP,
Tref => IMOVP,
Tstring => IMOVP,
Ttuple => IMOVM,
Texception => IMOVM,
Tfix => IMOVW,
Tpoly => IMOVP,
Tany => IMOVP,
* => 0
},
Mcons => array[Tend] of
{
Tadt => ICONSM,
Tadtpick => 0,
Tarray => ICONSP,
Tbig => ICONSL,
Tbyte => ICONSB,
Tchan => ICONSP,
Treal => ICONSF,
Tint => ICONSW,
Tlist => ICONSP,
Tmodule => ICONSP,
Tref => ICONSP,
Tstring => ICONSP,
Ttuple => ICONSM,
Texception => ICONSM,
Tfix => ICONSW,
Tpoly => ICONSP,
Tany => ICONSP,
* => 0
},
Mhd => array[Tend] of
{
Tadt => IHEADM,
Tadtpick => 0,
Tarray => IHEADP,
Tbig => IHEADL,
Tbyte => IHEADB,
Tchan => IHEADP,
Treal => IHEADF,
Tint => IHEADW,
Tlist => IHEADP,
Tmodule => IHEADP,
Tref => IHEADP,
Tstring => IHEADP,
Ttuple => IHEADM,
Texception => IHEADM,
Tfix => IHEADW,
Tpoly => IHEADP,
Tany => IHEADP,
* => 0
},
Mtl => array[Tend] of
{
Tlist => ITAIL,
* => 0
},
};
chantab := array[Tend] of
{
Tadt => INEWCM,
Tadtpick => 0,
Tarray => INEWCP,
Tbig => INEWCL,
Tbyte => INEWCB,
Tchan => INEWCP,
Treal => INEWCF,
Tint => INEWCW,
Tlist => INEWCP,
Tmodule => INEWCP,
Tref => INEWCP,
Tstring => INEWCP,
Ttuple => INEWCM,
Texception => INEWCM,
Tfix => INEWCW,
Tpoly => INEWCP,
Tany => INEWCP,
* => 0
};
opind := array[Tend] of
{
Tbyte => 1,
Tint => 2,
Tbig => 3,
Treal => 4,
Tstring => 5,
Tfix => 6,
* => 0
};
disoptab := array[Oend+1] of
{
# opcode default byte word big real string fixed
Oadd => array[7] of {0, IADDB, IADDW, IADDL, IADDF, IADDC, IADDW,},
Oaddas => array[7] of {0, IADDB, IADDW, IADDL, IADDF, IADDC, IADDW,},
Oand => array[7] of {0, IANDB, IANDW, IANDL, 0, 0, 0,},
Oandas => array[7] of {0, IANDB, IANDW, IANDL, 0, 0, 0,},
Odec => array[7] of {0, ISUBB, ISUBW, ISUBL, ISUBF, 0, ISUBW,},
Odiv => array[7] of {0, IDIVB, IDIVW, IDIVL, IDIVF, 0, IDIVX,},
Odivas => array[7] of {0, IDIVB, IDIVW, IDIVL, IDIVF, 0, IDIVX,},
Oeq => array[7] of {IBEQW, IBEQB, IBEQW, IBEQL, IBEQF, IBEQC, IBEQW,},
Oexp => array[7] of {0, 0, IEXPW, IEXPL, IEXPF, 0, 0,},
Oexpas => array[7] of {0, 0, IEXPW, IEXPL, IEXPF, 0, 0,},
Ogeq => array[7] of {0, IBGEB, IBGEW, IBGEL, IBGEF, IBGEC, IBGEW,},
Ogt => array[7] of {0, IBGTB, IBGTW, IBGTL, IBGTF, IBGTC, IBGTW,},
Oinc => array[7] of {0, IADDB, IADDW, IADDL, IADDF, 0, IADDW,},
Oinds => array[7] of {0, 0, IINDC, 0, 0, 0, 0,},
Oindx => array[7] of {0, 0, IINDX, 0, 0, 0, 0,},
Olen => array[7] of {ILENA, 0, 0, 0, 0, ILENC, 0,},
Oleq => array[7] of {0, IBLEB, IBLEW, IBLEL, IBLEF, IBLEC, IBLEW,},
Olsh => array[7] of {0, ISHLB, ISHLW, ISHLL, 0, 0, 0,},
Olshas => array[7] of {0, ISHLB, ISHLW, ISHLL, 0, 0, 0,},
Olt => array[7] of {0, IBLTB, IBLTW, IBLTL, IBLTF, IBLTC, IBLTW,},
Omod => array[7] of {0, IMODB, IMODW, IMODL, 0, 0, 0,},
Omodas => array[7] of {0, IMODB, IMODW, IMODL, 0, 0, 0,},
Omul => array[7] of {0, IMULB, IMULW, IMULL, IMULF, 0, IMULX,},
Omulas => array[7] of {0, IMULB, IMULW, IMULL, IMULF, 0, IMULX,},
Oneg => array[7] of {0, 0, 0, 0, INEGF, 0, 0, },
Oneq => array[7] of {IBNEW, IBNEB, IBNEW, IBNEL, IBNEF, IBNEC, IBNEW,},
Oor => array[7] of {0, IORB, IORW, IORL, 0, 0, 0,},
Ooras => array[7] of {0, IORB, IORW, IORL, 0, 0, 0,},
Orsh => array[7] of {0, ISHRB, ISHRW, ISHRL, 0, 0, 0,},
Orshas => array[7] of {0, ISHRB, ISHRW, ISHRL, 0, 0, 0,},
Oslice => array[7] of {ISLICEA,0, 0, 0, 0, ISLICEC, 0,},
Osub => array[7] of {0, ISUBB, ISUBW, ISUBL, ISUBF, 0, ISUBW,},
Osubas => array[7] of {0, ISUBB, ISUBW, ISUBL, ISUBF, 0, ISUBW,},
Oxor => array[7] of {0, IXORB, IXORW, IXORL, 0, 0, 0,},
Oxoras => array[7] of {0, IXORB, IXORW, IXORL, 0, 0, 0,},
};
isbyteinst := array [256] of
{
IMULB => 1,
ISUBB => 1,
IADDB => 1,
IDIVB => 1,
IORB => 1,
IXORB => 1,
ISHLB => 1,
ISHRB => 1,
IMODB => 1,
IANDB => 1,
IBEQB => 1,
IBNEB => 1,
IBLTB => 1,
IBLEB => 1,
IBGTB => 1,
IBGEB => 1,
* => 0,
};
instname := array[256] of
{
"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",
"mnewz",
"cvtrf",
"cvtfr",
"cvtws",
"cvtsw",
"lsrw",
"lsrl",
"eclr",
"newz",
"newaz",
"raise",
"casel",
"mulx",
"divx",
"cvtxx",
"mulx0",
"divx0",
"cvtxx0",
"mulx1",
"divx1",
"cvtxx1",
"cvtfx",
"cvtxf",
"expw",
"expl",
"expf",
"self",
};