ref: ee695eff4329234e20abb68ff3100d3b15929418
dir: /appl/cmd/limbo/disoptab.m/
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", };