diff options
Diffstat (limited to 'appl/cmd/limbo/disoptab.m')
| -rw-r--r-- | appl/cmd/limbo/disoptab.m | 355 |
1 files changed, 355 insertions, 0 deletions
diff --git a/appl/cmd/limbo/disoptab.m b/appl/cmd/limbo/disoptab.m new file mode 100644 index 00000000..a2e51a8b --- /dev/null +++ b/appl/cmd/limbo/disoptab.m @@ -0,0 +1,355 @@ +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", +}; |
