// ops: name           arity: min max      types   opcode
_OP_DEF("load",               1,  2,       "se",   OP_LOAD)
_OP_DEF(nil,                  0,  0,       nil,    OP_T0LVL)
_OP_DEF(nil,                  0,  0,       nil,    OP_T1LVL)
_OP_DEF(nil,                  0,  0,       nil,    OP_READ_INTERNAL)
_OP_DEF(nil,                  0,  0,       nil,    OP_VALUEPRINT)
_OP_DEF(nil,                  0,  0,       nil,    OP_VALUEPRINT1)
_OP_DEF(nil,                  0,  0,       nil,    OP_EVAL)
_OP_DEF(nil,                  0,  0,       nil,    OP_E0ARGS)
_OP_DEF(nil,                  0,  0,       nil,    OP_E1ARGS)
_OP_DEF(nil,                  0,  0,       nil,    OP_APPLY)
_OP_DEF(nil,                  0,  0,       nil,    OP_APPLYVAL)
_OP_DEF(nil,                  0,  0,       nil,    OP_DOMACRO)
_OP_DEF(nil,                  0,  0,       nil,    OP_WHILE0)
_OP_DEF(nil,                  0,  0,       nil,    OP_WHILE1)
_OP_DEF(nil,                  0,  0,       nil,    OP_LAMBDA)
_OP_DEF(nil,                  0,  0,       nil,    OP_LAMBDA1)
_OP_DEF(nil,                  0,  0,       nil,    OP_QUOTE)
_OP_DEF(nil,                  0,  0,       nil,    OP_DEF0)
_OP_DEF(nil,                  0,  0,       nil,    OP_DEF1)
_OP_DEF(nil,                  0,  0,       nil,    OP_BEGIN)
_OP_DEF(nil,                  0,  0,       nil,    OP_IF0)
_OP_DEF(nil,                  0,  0,       nil,    OP_IF1)
_OP_DEF(nil,                  0,  0,       nil,    OP_SET0)
_OP_DEF(nil,                  0,  0,       nil,    OP_SET1)
_OP_DEF(nil,                  0,  0,       nil,    OP_LET0)
_OP_DEF(nil,                  0,  0,       nil,    OP_LET1)
_OP_DEF(nil,                  0,  0,       nil,    OP_LET2)
_OP_DEF(nil,                  0,  0,       nil,    OP_LET0AST)
_OP_DEF(nil,                  0,  0,       nil,    OP_LET1AST)
_OP_DEF(nil,                  0,  0,       nil,    OP_LET2AST)
_OP_DEF(nil,                  0,  0,       nil,    OP_LET0REC)
_OP_DEF(nil,                  0,  0,       nil,    OP_LET1REC)
_OP_DEF(nil,                  0,  0,       nil,    OP_LET2REC)
_OP_DEF(nil,                  0,  0,       nil,    OP_COND0)
_OP_DEF(nil,                  0,  0,       nil,    OP_COND1)
_OP_DEF(nil,                  0,  0,       nil,    OP_DELAY)
_OP_DEF(nil,                  0,  0,       nil,    OP_AND0)
_OP_DEF(nil,                  0,  0,       nil,    OP_AND1)
_OP_DEF(nil,                  0,  0,       nil,    OP_OR0)
_OP_DEF(nil,                  0,  0,       nil,    OP_OR1)
_OP_DEF(nil,                  0,  0,       nil,    OP_MACRO0)
_OP_DEF(nil,                  0,  0,       nil,    OP_MACRO1)
_OP_DEF(nil,                  0,  0,       nil,    OP_CASE0)
_OP_DEF(nil,                  0,  0,       nil,    OP_CASE1)
_OP_DEF(nil,                  0,  0,       nil,    OP_SYNTAXERROR)
_OP_DEF("eval",               1,  2,       "*e",   OP_PEVAL)
_OP_DEF("apply",              1,  INF_ARG, "/*",   OP_PAPPLY)
_OP_DEF("call-with-current-continuation", 1, 1, "/", OP_CONTINUATION)
_OP_DEF("values",             0,  INF_ARG, "*",    OP_VALUES)
_OP_DEF("call-with-values",   2,  2,       "//",   OP_CALLWV0)
_OP_DEF(nil,                  0,  0,       nil,    OP_CALLWV1)
#if USE_MATH
_OP_DEF("exact",              1,  1,       "n",    OP_INEX2EX)
_OP_DEF("exp",                1,  1,       "n",    OP_EXP)
_OP_DEF("log",                1,  1,       "n",    OP_LOG)
_OP_DEF("sin",                1,  1,       "n",    OP_SIN)
_OP_DEF("cos",                1,  1,       "n",    OP_COS)
_OP_DEF("tan",                1,  1,       "n",    OP_TAN)
_OP_DEF("asin",               1,  1,       "n",    OP_ASIN)
_OP_DEF("acos",               1,  1,       "n",    OP_ACOS)
_OP_DEF("atan",               1,  2,       "n",    OP_ATAN)
_OP_DEF("sqrt",               1,  1,       "n",    OP_SQRT)
_OP_DEF("exact-integer-sqrt", 1,  1,       "+",    OP_EXACTSQRT)
_OP_DEF("expt",               2,  2,       "n",    OP_EXPT)
_OP_DEF("floor",              1,  1,       "n",    OP_FLOOR)
_OP_DEF("ceiling",            1,  1,       "n",    OP_CEILING)
_OP_DEF("round",              1,  1,       "n",    OP_ROUND)
#endif
_OP_DEF("+",                  0,  INF_ARG, "n",    OP_ADD)
_OP_DEF("-",                  1,  INF_ARG, "n",    OP_SUB)
_OP_DEF("*",                  0,  INF_ARG, "n",    OP_MUL)
_OP_DEF("/",                  1,  INF_ARG, "n",    OP_DIV)
_OP_DEF("quotient",           2,  2,       "i",    OP_QUOT)
_OP_DEF("remainder",          2,  2,       "i",    OP_REM)
_OP_DEF("modulo",             2,  2,       "i",    OP_MOD)
_OP_DEF("bit-and",            2,  2,       "ii",   OP_BITAND)
_OP_DEF("bit-ior",            2,  2,       "ii",   OP_BITIOR)
_OP_DEF("bit-xor",            2,  2,       "ii",   OP_BITXOR)
_OP_DEF("arithmetic-shift",   2,  2,       "ii",   OP_BITSHIFT)
_OP_DEF("bit-count",          1,  1,       "i",    OP_BITCOUNT)
_OP_DEF("integer-length",     1,  1,       "i",    OP_BITLENGTH)
_OP_DEF("bit-set?",           2,  2,       "ii",   OP_BITSETP)
_OP_DEF("car",                1,  1,       ".",    OP_CAR)
_OP_DEF("cdr",                1,  1,       ".",    OP_CDR)
_OP_DEF("cons",               2,  2,       "*",    OP_CONS)
_OP_DEF("set-car!",           2,  2,       ".*",   OP_SETCAR)
_OP_DEF("set-cdr!",           2,  2,       ".*",   OP_SETCDR)
_OP_DEF("length",             1,  1,       "l",    OP_LIST_LENGTH)
_OP_DEF("reverse",            1,  1,       "l",    OP_REVERSE)
_OP_DEF("reverse!",           1,  1,       "l",    OP_REVERSEX)
_OP_DEF("list*",              1,  INF_ARG, "*",    OP_LIST_STAR)
_OP_DEF("append",             0,  INF_ARG, "*",    OP_APPEND)
#if USE_PLIST
_OP_DEF("put",                3,  3,       "*",    OP_PUT)
_OP_DEF("get",                2,  2,       "*",    OP_GET)
#endif
_OP_DEF("char->integer",      1,  1,       "c",    OP_CHAR2INT)
_OP_DEF("integer->char",      1,  1,       "+",    OP_INT2CHAR)
_OP_DEF("char-upcase",        1,  1,       "c",    OP_CHARUPCASE)
_OP_DEF("char-downcase",      1,  1,       "c",    OP_CHARDNCASE)
_OP_DEF("symbol->string",     1,  1,       "y",    OP_SYM2STR)
_OP_DEF("atom->string",       1,  2,       "*+",   OP_ATOM2STR)
_OP_DEF("string->symbol",     1,  1,       "s",    OP_STR2SYM)
_OP_DEF("gensym",             0,  1,       "s",    OP_GENSYM)
_OP_DEF("string->atom",       1,  2,       "s+",   OP_STR2ATOM)
_OP_DEF("make-string",        1,  2,       "+c",   OP_MKSTRING)
_OP_DEF("string-length",      1,  1,       "s",    OP_STRLEN)
_OP_DEF("string-ref",         2,  2,       "s+",   OP_STRREF)
_OP_DEF("string-set!",        3,  3,       "s+c",  OP_STRSET)
_OP_DEF("string-append",      0,  INF_ARG, "s",    OP_STRAPPEND)
_OP_DEF("substring",          2,  3,       "s+",   OP_SUBSTR)
_OP_DEF("vector",             0,  INF_ARG, "*",    OP_VECTOR)
_OP_DEF("make-vector",        1,  2,       "+*",   OP_MKVECTOR)
_OP_DEF("vector-length",      1,  1,       "v",    OP_VECLEN)
_OP_DEF("vector-ref",         2,  2,       "v+",   OP_VECREF)
_OP_DEF("vector-set!",        3,  3,       "v+*",  OP_VECSET)
_OP_DEF("bytevector",         0,  INF_ARG, "*",    OP_BVECTOR)
_OP_DEF("make-bytevector",    1,  2,       "++",   OP_MKBVECTOR)
_OP_DEF("bytevector-u8-ref",  2,  2,       "8+",   OP_BVECREF)
_OP_DEF("bytevector-u8-set!", 3,  3,       "8++",  OP_BVECSET)
_OP_DEF("bytevector-length",  1,  1,       "8",    OP_BVECLEN)
#if USE_UNICODE
_OP_DEF("string->utf8",       1,  3,       "s++",  OP_STRTOUTF8)
_OP_DEF("utf8->string",       1,  3,       "8++",  OP_UTF8TOSTR)
#endif
_OP_DEF("struct",             1,  INF_ARG, "y",    OP_STRUCT)
_OP_DEF("make-struct",        2,  2,       "y+",   OP_MKSTRUCT)
_OP_DEF("struct-length",      1,  1,       "$",    OP_STRUCTLEN)
_OP_DEF("struct-name",        1,  1,       "$",    OP_STRUCTNAME)
_OP_DEF("struct-ref",         2,  2,       "$+",   OP_STRUCTREF)
_OP_DEF("struct-set!",        3,  3,       "$+*",  OP_STRUCTSET)
_OP_DEF("integer->pointer",   1,  1,       "+",    OP_INT2PTR)
_OP_DEF("datum->pointer",     1,  1,       "*",    OP_ANY2PTR)
_OP_DEF("bytevector->pointer",1,  1,       "8",    OP_BVEC2PTR)
_OP_DEF("pointer->integer",   1,  1,       "&",    OP_PTR2INT)
_OP_DEF("pointer-ref",        2,  2,       "&+",   OP_PTRREF)
_OP_DEF("pointer-set!",       2,  2,       "&++",  OP_PTRSET)
_OP_DEF("pointer+",           2,  2,       "&i",   OP_PTRADD)
_OP_DEF("not",                1,  1,       "*",    OP_NOT)
_OP_DEF("boolean?",           1,  1,       "*",    OP_BOOLP)
_OP_DEF("eof-object?",        1,  1,       "*",    OP_EOFOBJP)
_OP_DEF("null?",              1,  1,       "*",    OP_NULLP)
_OP_DEF("=",                  2,  INF_ARG, "n",    OP_NUMEQ)
_OP_DEF("<",                  2,  INF_ARG, "n",    OP_LESS)
_OP_DEF(">",                  2,  INF_ARG, "n",    OP_GRE)
_OP_DEF("<=",                 2,  INF_ARG, "n",    OP_LEQ)
_OP_DEF(">=",                 2,  INF_ARG, "n",    OP_GEQ)
_OP_DEF("symbol?",            1,  1,       "*",    OP_SYMBOLP)
_OP_DEF("number?",            1,  1,       "*",    OP_NUMBERP)
_OP_DEF("string?",            1,  1,       "*",    OP_STRINGP)
_OP_DEF("integer?",           1,  1,       "*",    OP_INTEGERP)
_OP_DEF("real?",              1,  1,       "*",    OP_REALP)
_OP_DEF("char?",              1,  1,       "*",    OP_CHARP)
#if USE_CHAR_CLASSIFIERS
_OP_DEF("char-alphabetic?",   1,  1,       "c",    OP_CHARAP)
_OP_DEF("char-numeric?",      1,  1,       "c",    OP_CHARNP)
_OP_DEF("char-whitespace?",   1,  1,       "c",    OP_CHARWP)
_OP_DEF("char-upper-case?",   1,  1,       "c",    OP_CHARUP)
_OP_DEF("char-lower-case?",   1,  1,       "c",    OP_CHARLP)
#endif
_OP_DEF("port?",              1,  1,       "*",    OP_PORTP)
_OP_DEF("input-port?",        1,  1,       "*",    OP_INPORTP)
_OP_DEF("output-port?",       1,  1,       "*",    OP_OUTPORTP)
_OP_DEF("procedure?",         1,  1,       "*",    OP_PROCP)
_OP_DEF("pair?",              1,  1,       "*",    OP_PAIRP)
_OP_DEF("list?",              1,  1,       "*",    OP_LISTP)
_OP_DEF("environment?",       1,  1,       "*",    OP_ENVP)
_OP_DEF("parameter?",         1,  1,       "*",    OP_PARAMP)
_OP_DEF("vector?",            1,  1,       "*",    OP_VECTORP)
_OP_DEF("bytevector?",        1,  1,       "*",    OP_BVECTORP)
_OP_DEF("struct?",            1,  1,       "*",    OP_STRUCTP)
_OP_DEF("closure?",           1,  1,       "*",    OP_CLOSUREP)
_OP_DEF("macro?",             1,  1,       "*",    OP_MACROP)
_OP_DEF("syntax?",            1,  1,       "*",    OP_SYNTAXP)
_OP_DEF("promise?",           1,  1,       "*",    OP_PROMISEP)
_OP_DEF("error-object?",      1,  1,       "*",    OP_ERROBJP)
_OP_DEF("pointer?",           1,  1,       "*",    OP_POINTERP)
_OP_DEF("opcode?",            1,  1,       "*",    OP_OPCODEP)
_OP_DEF("inexact?",           1,  1,       "n",    OP_INEXACTP)
_OP_DEF("eq?",                2,  2,       "*",    OP_EQ)
_OP_DEF("eqv?",               2,  2,       "*",    OP_EQV)
_OP_DEF("current-second",     0,  0,       nil,    OP_CURR_SEC)
_OP_DEF("current-millisecond",0,  0,       nil,    OP_CURR_MILLISEC)
_OP_DEF("current-jiffy",      0,  0,       nil,    OP_CURRJIFFY)
_OP_DEF("second->list",       1,  1,       "+",    OP_SEC2LIST)
_OP_DEF("eval-count",         0,  0,       nil,    OP_EVAL_CNT)
_OP_DEF("force",              1,  1,       "*",    OP_FORCE)
_OP_DEF(nil,                  0,  0,       nil,    OP_SAVE_FORCED)
_OP_DEF("write",              1,  2,       "*>",   OP_WRITE)
_OP_DEF("write-char",         1,  2,       "c>",   OP_WRITE_CHAR)
_OP_DEF("display",            1,  2,       "*>",   OP_DISPLAY)
_OP_DEF("write-u8",           1,  2,       "+>",   OP_WRITE_U8)
_OP_DEF("newline",            0,  1,       ">",    OP_NEWLINE)
_OP_DEF("flush-output-port",  0,  1,       ">",    OP_FLUSHPORT)
_OP_DEF("error",              1,  INF_ARG, "*",    OP_ERR0)
_OP_DEF(nil,                  0,  0,       nil,    OP_ERR1)
_OP_DEF("error-object-type",  1, 1,        "x",    OP_ERRTYPE)
_OP_DEF("error-object-message", 1, 1,      "x",    OP_ERRMSG)
_OP_DEF("error-object-irritants",1, 1,     "x",    OP_ERRIRRITANTS)
_OP_DEF("quit",               0,  1,       "n",    OP_QUIT)
_OP_DEF("gc",                 0,  0,       nil,    OP_GC)
_OP_DEF("gc-verbose",         0,  1,       "*",    OP_GCVERB)
_OP_DEF("new-segment",        0,  1,       "n",    OP_NEWSEGMENT)
_OP_DEF("oblist",             0,  0,       nil,    OP_OBLIST)
_OP_DEF("open-input-file",    1,  1,       "s",    OP_OPEN_INFILE)
_OP_DEF("open-output-file",   1,  1,       "s",    OP_OPEN_OUTFILE)
_OP_DEF("open-input-output-file", 1, 1,    "s",    OP_OPEN_INOUTFILE)
// These two don't typecheck their argument for being input / output
// ports because this info is erased when closing the port.
_OP_DEF("input-port-open?",   1,  1,       "p",    OP_INPORT_OPENP)
_OP_DEF("output-port-open?",  1,  1,       "p",    OP_OUTPORT_OPENP)
_OP_DEF("port-filename",      1,  1,       "p",    OP_PORT_FILE)
_OP_DEF("file-exists?",       1,  1,       "s",    OP_FILEEXISTS)
_OP_DEF("delete-file",        1,  1,       "s",    OP_DELETEFILE)
_OP_DEF("system",             1,  1,       "s",    OP_SYSTEM)
_OP_DEF("open-input-pipe",    1,  1,       "s",    OP_OPEN_INPIPE)
_OP_DEF("open-output-pipe",   1,  1,       "s",    OP_OPEN_OUTPIPE)
#if USE_STRING_PORTS
_OP_DEF("open-input-string",  1,  1,       "s",    OP_OPEN_INSTRING)
_OP_DEF("open-input-output-string", 1, 1,  "s",    OP_OPEN_INOUTSTRING)
_OP_DEF("open-output-string", 0,  1,       "s",    OP_OPEN_OUTSTRING)
_OP_DEF("get-output-string",  1,  1,       ">",    OP_GET_OUTSTRING)
#endif
_OP_DEF("dirname",            1,  1,       "s",    OP_DIRNAME)
_OP_DEF("close-input-port",   1,  1,       "<",    OP_CLOSE_INPORT)
_OP_DEF("close-output-port",  1,  1,       ">",    OP_CLOSE_OUTPORT)
_OP_DEF("interaction-environment", 0, 0,   nil,    OP_INT_ENV)
_OP_DEF("current-environment", 0, 0,       nil,    OP_CURR_ENV)
_OP_DEF("null-environment",   1,  1,       "+",    OP_NULLENV)
_OP_DEF("defined?",           1,  2,       "ye",   OP_DEFP)
_OP_DEF("set-in-env!",        3,  3,       "ey*",  OP_SETINENV)
_OP_DEF("read",               0,  1,       "<",    OP_READ)
_OP_DEF("read-char",          0,  1,       "<",    OP_READ_CHAR)
_OP_DEF("peek-char",          0,  1,       "<",    OP_PEEK_CHAR)
_OP_DEF("read-u8",            0,  1,       "<",    OP_READ_U8)
_OP_DEF("peek-u8",            0,  1,       "<",    OP_PEEK_U8)
_OP_DEF("char-ready?",        0,  1,       "<",    OP_CHAR_READY)
_OP_DEF("set-input-port!",    1,  1,       "<",    OP_SET_INPORT)
_OP_DEF("set-output-port!",   1,  1,       ">",    OP_SET_OUTPORT)
_OP_DEF("eof-object",         0,  0,       nil,    OP_EOFOBJ)
_OP_DEF(nil,                  0,  0,       nil,    OP_RDSEXPR)
_OP_DEF(nil,                  0,  0,       nil,    OP_RDLIST)
_OP_DEF(nil,                  0,  0,       nil,    OP_RDDOT)
_OP_DEF(nil,                  0,  0,       nil,    OP_RDQUOTE)
_OP_DEF(nil,                  0,  0,       nil,    OP_RDQQUOTE)
_OP_DEF(nil,                  0,  0,       nil,    OP_RDQQUOTEVEC)
_OP_DEF(nil,                  0,  0,       nil,    OP_RDUNQUOTE)
_OP_DEF(nil,                  0,  0,       nil,    OP_RDUQTSP)
_OP_DEF(nil,                  0,  0,       nil,    OP_RDVEC)
_OP_DEF(nil,                  0,  0,       nil,    OP_RDBVEC)
_OP_DEF(nil,                  0,  0,       nil,    OP_P0LIST)
_OP_DEF(nil,                  0,  0,       nil,    OP_P1LIST)
_OP_DEF(nil,                  0,  0,       nil,    OP_PVECFROM)
_OP_DEF(nil,                  0,  0,       nil,    OP_PBVECFROM)
_OP_DEF("assq",               2,  2,       "*",    OP_ASSQ)
_OP_DEF("procedure-code",     1,  1,       "*",    OP_PROC_CODE)
_OP_DEF("procedure-arity",    1,  1,       "/",    OP_ARITY)
_OP_DEF("procedure-name",     1,  1,       "/",    OP_PROC_NAME)
_OP_DEF("make-closure",       1,  2,       ".e",   OP_MKCLOSURE)
_OP_DEF("make-parameter",     1,  2,       "*/",   OP_MKPARAM0)
_OP_DEF(nil,                  0,  0,       nil,    OP_MKPARAM1)
_OP_DEF("set-parameter-unsafe!", 2,  2,    ":*",   OP_SETPARAMX)
_OP_DEF("parameter-converter",1,  1,       "*",    OP_PARAMCONV)
_OP_DEF("type-of",            1,  1,       "*",    OP_TYPEOF)
_OP_DEF("%cast!",             2,  2,       "*y",   OP_CAST)
_OP_DEF("load-path-name",     0,  0,       nil,    OP_LOADPATH)
_OP_DEF("make-immutable!",    1,  1,       "*",    OP_MKIMMUTABLE)
#undef _OP_DEF
