/* The instruction set. */

/* --- The instruction set has been extended for Moscow ML! --- */

/* One instruction per line only. */

enum instructions {
  CONSTBYTE,
  CONSTSHORT,
  SWITCH,
  BRANCH,
  BRANCHIF,
  BRANCHIFNOT,
  POPBRANCHIFNOT,
  BRANCHIFNEQTAG,
  BRANCHIFEQ,
  BRANCHIFNEQ,
  BRANCHIFLT,
  BRANCHIFGT,
  BRANCHIFLE,
  BRANCHIFGE,
  BRANCHINTERVAL,
  C_CALL1,
  C_CALL2,
  C_CALL3,
  C_CALL4,
  C_CALL5,
  C_CALLN,
  MAKEBLOCK,
  MAKEBLOCK1,
  MAKEBLOCK2,
  MAKEBLOCK3,
  MAKEBLOCK4,
  TAGOF,
  ACCESS,
  ACC0,
  ACC1,
  ACC2,
  ACC3,
  ACC4,
  ACC5,
  ACC6,
  ACC7,
  PUSHACC,
  PUSHACC0,
  PUSHACC1,
  PUSHACC2,
  PUSHACC3,
  PUSHACC4,
  PUSHACC5,
  PUSHACC6,
  PUSHACC7,
  ENVACC,
  ENV1,
  ENV2,
  ENV3,
  ENV4,
  ENV5,
  ENV6,
  ENV7,
  PUSHENVACC,
  PUSHENV1,
  PUSHENV2,
  PUSHENV3,
  PUSHENV4,
  PUSHENV5,
  PUSHENV6,
  PUSHENV7,
  PUSH_ENV1_APPLY1,
  PUSH_ENV1_APPLY2,
  PUSH_ENV1_APPLY3,
  PUSH_ENV1_APPLY4,
  PUSH_ENV1_APPTERM1,
  PUSH_ENV1_APPTERM2,
  PUSH_ENV1_APPTERM3,
  PUSH_ENV1_APPTERM4,
  PUSHATOM,
  ATOM,
  PUSHATOM0,
  ATOM0,
  ATOM1,
  ATOM2,
  ATOM3,
  ATOM4,
  ATOM5,
  ATOM6,
  ATOM7,
  ATOM8,
  ATOM9,
  CONSTINT,
  PUSHCONSTINT,
  CONST0,
  CONST1,
  CONST2,
  CONST3,
  PUSHCONST0,
  PUSHCONST1,
  PUSHCONST2,
  PUSHCONST3,
  GETFIELD,
  GETFIELD0,
  GETFIELD1,
  GETFIELD2,
  GETFIELD3,
  GETFIELD0_0,
  GETFIELD0_1,
  GETFIELD1_0,
  GETFIELD1_1,
  SETFIELD,
  SETFIELD0,
  SETFIELD1,
  SETFIELD2,
  SETFIELD3,
  GETGLOBAL,
  PUSH_GETGLOBAL,
  PUSH_GETGLOBAL_APPLY1,
  PUSH_GETGLOBAL_APPLY2,
  PUSH_GETGLOBAL_APPLY3,
  PUSH_GETGLOBAL_APPLY4,
  PUSH_GETGLOBAL_APPTERM1,
  PUSH_GETGLOBAL_APPTERM2,
  PUSH_GETGLOBAL_APPTERM3,
  PUSH_GETGLOBAL_APPTERM4,
  SETGLOBAL,
  PUSH_RETADDR,
  APPLY,
  APPLY1,
  APPLY2,
  APPLY3,
  APPLY4,
  APPTERM,
  APPTERM1,
  APPTERM2,
  APPTERM3,
  APPTERM4,
  RESTART,
  GRAB,
  RETURN1,
  RETURN2,
  RETURN,
  CLOSURE,
  CLOSREC,
  DUMMY,
  UPDATE,
  PUSHTRAP,
  RAISE,
  POPTRAP,
  SWAP,
  PUSH,
  POP,
  ASSIGN,
  BOOLNOT,
  ADDINT,
  SUBINT,
  MULINT,
  DIVINT,
  MODINT,
  ANDINT,
  ORINT,
  XORINT,
  SHIFTLEFTINT,
  SHIFTRIGHTINTSIGNED,
  SHIFTRIGHTINTUNSIGNED,
  EQ,
  NEQ,
  LTINT,
  GTINT,
  LEINT,
  GEINT,
  FLOATOFINT,
  SMLNEGFLOAT,
  SMLADDFLOAT,
  SMLSUBFLOAT,
  SMLMULFLOAT,
  SMLDIVFLOAT,
  INTOFFLOAT,
  EQFLOAT,
  NEQFLOAT,
  LTFLOAT,
  GTFLOAT,
  LEFLOAT,
  GEFLOAT,
  STRINGLENGTH,
  GETSTRINGCHAR,
  SETSTRINGCHAR,
  EQSTRING,
  NEQSTRING,
  LTSTRING,
  GTSTRING,
  LESTRING,
  GESTRING,
  MAKEVECTOR,
  VECTLENGTH,
  GETVECTITEM,
  SETVECTITEM,
  SMLNEGINT,
  SMLSUCCINT,
  SMLPREDINT,
  SMLADDINT,
  SMLSUBINT,
  SMLMULINT,
  SMLDIVINT,
  SMLMODINT,
  MAKEREFVECTOR,
  SMLQUOTINT,
  SMLREMINT,
  CHECK_SIGNALS,
  STOP,
  EQUNSIGN,
  NEQUNSIGN,
  LTUNSIGN,
  GTUNSIGN,
  LEUNSIGN,
  GEUNSIGN
};
