/* The instruction set. */

/* One instruction per line only. */

enum instructions {
  CONSTBYTE,
  CONSTSHORT,
  GETGLOBAL,
  SETGLOBAL,
  CUR,
  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,
  ATOM,
  ATOM0,
  ATOM1,
  ATOM2,
  ATOM3,
  ATOM4,
  ATOM5,
  ATOM6,
  ATOM7,
  ATOM8,
  ATOM9,
  GETFIELD,
  GETFIELD0,
  GETFIELD1,
  GETFIELD2,
  GETFIELD3,
  SETFIELD,
  SETFIELD0,
  SETFIELD1,
  SETFIELD2,
  SETFIELD3,
  STOP,
  CHECK_SIGNALS,
  APPLY,
  RETURN,
  APPTERM,
  GRAB,
  LET,
  LETREC1,
  DUMMY,
  UPDATE,
  ENDLET,
  ENDLET1,
  PUSHTRAP,
  RAISE,
  POPTRAP,
  PUSH,
  POP,
  PUSHMARK,
  PUSH_GETGLOBAL_APPLY,
  PUSH_GETGLOBAL_APPTERM,
  BOOLNOT,
  NEGINT,
  SUCCINT,
  PREDINT,
  ADDINT,
  SUBINT,
  MULINT,
  DIVINT,
  MODINT,
  ANDINT,
  ORINT,
  XORINT,
  SHIFTLEFTINT,
  SHIFTRIGHTINTSIGNED,
  SHIFTRIGHTINTUNSIGNED,
  EQ,
  NEQ,
  LTINT,
  GTINT,
  LEINT,
  GEINT,
  INCR,
  DECR,
  FLOATOP,
  INTOFFLOAT,
  EQFLOAT,
  NEQFLOAT,
  LTFLOAT,
  GTFLOAT,
  LEFLOAT,
  GEFLOAT,
  STRINGLENGTH,
  GETSTRINGCHAR,
  SETSTRINGCHAR,
  EQSTRING,
  NEQSTRING,
  LTSTRING,
  GTSTRING,
  LESTRING,
  GESTRING,
  MAKEVECTOR,
  VECTLENGTH,
  GETVECTITEM,
  SETVECTITEM,
  BREAK
};

enum float_instructions {
  FLOATOFINT,
  NEGFLOAT,
  ADDFLOAT,
  SUBFLOAT,
  MULFLOAT,
  DIVFLOAT
};
