#ifndef INCLUDED_CONSTANTS_H #define INCLUDED_CONSTANTS_H #include typedef uint16_t LispInst; #define INST_NIL ((LispInst) 0) #define INST_T ((LispInst) 1) #define INST_STRING ((LispInst) 2) #define INST_INT ((LispInst) 3) #define INST_FLOAT ((LispInst) 4) #define INST_CONS ((LispInst) 5) #define INST_LIST ((LispInst) 6) #define INST_VECTOR ((LispInst) 7) #define INST_LENGTH ((LispInst) 8) #define INST_INTERN_LIT ((LispInst) 9) #define INST_INTERN_DYN ((LispInst) 10) #define INST_TYPE_OF ((LispInst) 11) #define INST_SYMBOL_NAME ((LispInst) 12) #define INST_MOV ((LispInst) 13) #define INST_FUNCALL ((LispInst) 14) #define INST_RETVAL_COUNT ((LispInst) 15) #define INST_GET_RETVAL_COUNT ((LispInst) 16) #define INST_ENTER_LEXENV ((LispInst) 17) #define INST_ENTER_BLOCK ((LispInst) 18) #define INST_LEAVE_BLOCK ((LispInst) 19) #define INST_SET_VALUE ((LispInst) 20) #define INST_SET_FUNCTION ((LispInst) 21) #define INST_GET_VALUE ((LispInst) 22) #define INST_GET_FUNCTION ((LispInst) 23) #define INST_BOUNDP ((LispInst) 24) #define INST_FUNCTIONP ((LispInst) 25) #define INST_NEWFUNCTION_LIT ((LispInst) 26) #define INST_NEWFUNCTION_DYN ((LispInst) 27) #define INST_PUT ((LispInst) 28) #define INST_GET ((LispInst) 29) #define INST_AND ((LispInst) 30) #define INST_ANDN ((LispInst) 31) #define INST_OR ((LispInst) 32) #define INST_ORN ((LispInst) 33) #define INST_XOR ((LispInst) 34) #define INST_XORN ((LispInst) 35) #define INST_NOT ((LispInst) 36) #define INST_JMP ((LispInst) 37) #define INST_CJMP ((LispInst) 38) #define INST_CAR ((LispInst) 39) #define INST_CDR ((LispInst) 40) #define INST_SETCAR ((LispInst) 41) #define INST_SETCDR ((LispInst) 42) #define INST_GETELT_LIT ((LispInst) 43) #define INST_GETELT_DYN ((LispInst) 44) #define INST_SETELT_LIT ((LispInst) 45) #define INST_SETELT_DYN ((LispInst) 46) #define INST_EQ ((LispInst) 47) #define INST_NUM_GT ((LispInst) 48) #define INST_NUM_GE ((LispInst) 49) #define INST_NUM_EQ ((LispInst) 50) #define INST_NUM_LE ((LispInst) 51) #define INST_NUM_LT ((LispInst) 52) #define INST_ADD ((LispInst) 53) #define INST_ADDN ((LispInst) 54) #define INST_SUB ((LispInst) 55) #define INST_SUBN ((LispInst) 56) #define INST_MUL ((LispInst) 57) #define INST_MULN ((LispInst) 58) #define INST_DIV ((LispInst) 59) #define INST_INT_DIV ((LispInst) 60) #define INST_RECIP ((LispInst) 61) #define INST_MOD ((LispInst) 62) #define INST_SQRT ((LispInst) 63) #define INST_POW ((LispInst) 64) #define INST_LN ((LispInst) 65) #define INST_EXP ((LispInst) 66) #define INST_SIN ((LispInst) 67) #define INST_COS ((LispInst) 68) #define INST_TAN ((LispInst) 69) #define INST_ASIN ((LispInst) 70) #define INST_ACOS ((LispInst) 71) #define INST_ATAN ((LispInst) 72) #define INST_BITAND ((LispInst) 73) #define INST_BITOR ((LispInst) 74) #define INST_BITXOR ((LispInst) 75) #define INST_BITNOR ((LispInst) 76) #define INST_BITNEG ((LispInst) 77) #define INST_LSH ((LispInst) 78) #define INST_ASH ((LispInst) 79) #define N_INSTRUCTIONS ((LispInst) 80) extern const char *INSTRUCTION_NAMES[]; typedef uint8_t LispRegType; typedef struct { LispRegType type; uint32_t which; } LispReg; #define REG_VAL ((LispRegType) 0) #define REG_SAVED ((LispRegType) 1) #define REG_ARG ((LispRegType) 2) #define REG_RET ((LispRegType) 3) #define N_REGISTTERS 4 extern const char *REGISTER_NAMES[]; #define SAME_REG(r1, r2) ((r1)->type == (r2)->type && (r1)->which == (r2)->which) #endif