|
Reduct
v4.0.5-1-g4851deb
A functional and immutable language.
|
Bytecode opcodes and properties. More...
Go to the source code of this file.
Data Structures | |
| struct | reduct_opcode_info_t |
| Opcode information structure. More... | |
Macros | |
| #define | REDUCT_OPCODE_BASE(_op) ((_op) & ~REDUCT_OPCODE_MODE_CONST) |
| Get the base form of the opcode without the constant bit set. | |
| #define | REDUCT_OPCODE_GET_NAME(_op) (reductOpcodeTable[REDUCT_OPCODE_BASE(_op)].name) |
| Get the name of an opcode. | |
| #define | REDUCT_OPCODE_GET_LAYOUT(_op) (reductOpcodeTable[REDUCT_OPCODE_BASE(_op)].layout) |
| Get the layout of an opcode. | |
| #define | REDUCT_OPCODE_IS_COMPARE(_op) (REDUCT_OPCODE_BASE(_op) >= REDUCT_OPCODE_EQ && REDUCT_OPCODE_BASE(_op) <= REDUCT_OPCODE_GE) |
| Check if an opcode is a comparison instruction. | |
| #define | REDUCT_OPCODE_TO_SKIP(_op) |
| Get the skip version of a comparison opcode. | |
| #define | REDUCT_OPCODE_INVERT_SKIP(_op) |
| Invert a skip comparison opcode (e.g. JEQ <-> JNEQ). | |
| #define | REDUCT_OPCODE_TO_RECUR(_op) |
| Get the recursive version of a call opcode. | |
| #define | REDUCT_OPCODE_TO_TAIL(_op) |
| Get the tail version of a call or return opcode. | |
| #define | REDUCT_OPCODE_HAS_TARGET(_op) (reductOpcodeTable[REDUCT_OPCODE_BASE(_op)].flags & REDUCT_OPCODE_FLAG_HAS_TARGET) |
| Check if an opcode modifies its target register (A). | |
| #define | REDUCT_OPCODE_IS_RECUR(_op) (reductOpcodeTable[REDUCT_OPCODE_BASE(_op)].flags & REDUCT_OPCODE_FLAG_IS_RECUR) |
| Check if an opcode is a recursive call. | |
| #define | REDUCT_OPCODE_IS_JUMP(_op) (reductOpcodeTable[REDUCT_OPCODE_BASE(_op)].flags & REDUCT_OPCODE_FLAG_IS_JUMP) |
| Check if an opcode is a jump instruction. | |
| #define | REDUCT_OPCODE_HAS_CONST(_op) (reductOpcodeTable[REDUCT_OPCODE_BASE(_op)].flags & REDUCT_OPCODE_FLAG_HAS_CONST) |
| Check if an opcode uses the C operand and has both a constant and register version. | |
| #define | REDUCT_OPCODE_READS_A(_op) (reductOpcodeTable[REDUCT_OPCODE_BASE(_op)].flags & REDUCT_OPCODE_FLAG_READ_A) |
| Check if an opcode reads from register A. | |
| #define | REDUCT_OPCODE_READS_B(_op) (reductOpcodeTable[REDUCT_OPCODE_BASE(_op)].flags & REDUCT_OPCODE_FLAG_READ_B) |
| Check if an opcode reads from register B. | |
| #define | REDUCT_OPCODE_READS_C(_op) (reductOpcodeTable[REDUCT_OPCODE_BASE(_op)].flags & REDUCT_OPCODE_FLAG_READ_C) |
| Check if an opcode reads from register/constant C. | |
| #define | REDUCT_OPCODE_READS_RANGE(_op) (reductOpcodeTable[REDUCT_OPCODE_BASE(_op)].flags & REDUCT_OPCODE_FLAG_READ_RANGE) |
| Check if an opcode reads a range of registers starting at A. | |
| #define | REDUCT_OPCODE_IS_COMMUTATIVE(_op) (reductOpcodeTable[REDUCT_OPCODE_BASE(_op)].flags & REDUCT_OPCODE_FLAG_IS_COMMUTATIVE) |
| Check if an opcode is commutative. | |
| #define | REDUCT_OPCODE_IS_SKIP(_op) (reductOpcodeTable[REDUCT_OPCODE_BASE(_op)].flags & REDUCT_OPCODE_FLAG_IS_SKIP) |
| Check if an opcode is a skip instruction. | |
| #define | REDUCT_OPCODE_IS_BRANCH(_op) (reductOpcodeTable[REDUCT_OPCODE_BASE(_op)].flags & (REDUCT_OPCODE_FLAG_IS_SKIP | REDUCT_OPCODE_FLAG_IS_JUMP)) |
| Check if an opcode is a skip or jump instruction. | |
| #define | REDUCT_OPCODE_IS_CALL(_op) (reductOpcodeTable[REDUCT_OPCODE_BASE(_op)].flags & REDUCT_OPCODE_FLAG_IS_CALL) |
| Check if an opcode is a function call. | |
| #define | REDUCT_OPCODE_IS_TERMINATOR(_op) (reductOpcodeTable[REDUCT_OPCODE_BASE(_op)].flags & REDUCT_OPCODE_FLAG_IS_TERMINATOR) |
| Check if an opcode is a terminator. | |
| #define | REDUCT_OPCODE_IS_BINARY(_op) |
| Check if an opcode is a binary operation (reads B and C). | |
| #define | REDUCT_OPCODE_IS_TERNARY(_op) |
| Check if an opcode is a ternary operation (reads A, B and C). | |
| #define | REDUCT_OPCODE_IS_UNARY(_op) |
| Check if an opcode is a unary operation (reads C only). | |
| #define | REDUCT_OPCODE_IS_FORK(_op) (reductOpcodeTable[REDUCT_OPCODE_BASE(_op)].flags & REDUCT_OPCODE_FLAG_IS_FORK) |
| Check if an opcode is a fork instruction. | |
Enumerations | |
| enum | reduct_opcode_mode_t { REDUCT_OPCODE_MODE_REG = 0 , REDUCT_OPCODE_MODE_CONST = 1 << 7 } |
| Opcode mode enumeration. More... | |
| enum | reduct_opcode_layout_t { REDUCT_LAYOUT_ABC , REDUCT_LAYOUT_AB , REDUCT_LAYOUT_AC , REDUCT_LAYOUT_C , REDUCT_LAYOUT_SAX , REDUCT_LAYOUT_SAXC , REDUCT_LAYOUT_ABC_RANGE , REDUCT_LAYOUT_AB_RANGE , REDUCT_LAYOUT_NONE } |
| Opcode operand layouts. More... | |
| enum | reduct_opcode_t { REDUCT_OPCODE_NOP = 0x10 , REDUCT_OPCODE_MOV , REDUCT_OPCODE_LIST , REDUCT_OPCODE_CLOSURE , REDUCT_OPCODE_CAPTURE , REDUCT_OPCODE_JMP , REDUCT_OPCODE_JMPF , REDUCT_OPCODE_JMPT , REDUCT_OPCODE_CALL , REDUCT_OPCODE_RET , REDUCT_OPCODE_TAILCALL , REDUCT_OPCODE_RECUR , REDUCT_OPCODE_TAILRECUR , REDUCT_OPCODE_EQ , REDUCT_OPCODE_NEQ , REDUCT_OPCODE_LT , REDUCT_OPCODE_LE , REDUCT_OPCODE_GT , REDUCT_OPCODE_GE , REDUCT_OPCODE_ADD , REDUCT_OPCODE_SUB , REDUCT_OPCODE_MUL , REDUCT_OPCODE_DIV , REDUCT_OPCODE_MOD , REDUCT_OPCODE_BAND , REDUCT_OPCODE_BOR , REDUCT_OPCODE_BXOR , REDUCT_OPCODE_BNOT , REDUCT_OPCODE_SHL , REDUCT_OPCODE_SHR , REDUCT_OPCODE_JEQ , REDUCT_OPCODE_JNEQ , REDUCT_OPCODE_JLT , REDUCT_OPCODE_JLE , REDUCT_OPCODE_JGT , REDUCT_OPCODE_JGE , REDUCT_OPCODE_LEN , REDUCT_OPCODE_NTH2 , REDUCT_OPCODE_NTH3 , REDUCT_OPCODE_RANGE1 , REDUCT_OPCODE_RANGE2 , REDUCT_OPCODE_RANGE3 , REDUCT_OPCODE_REPEAT , REDUCT_OPCODE_FORK , REDUCT_OPCODE_JOIN , REDUCT_OPCODE_CONCAT , REDUCT_OPCODE_APPEND , REDUCT_OPCODE_PREPEND , REDUCT_OPCODE_FIRST , REDUCT_OPCODE_LAST , REDUCT_OPCODE_REST , REDUCT_OPCODE_INIT , REDUCT_OPCODE_MOV_CONST = REDUCT_OPCODE_MOV | REDUCT_OPCODE_MODE_CONST , REDUCT_OPCODE_CALL_CONST = REDUCT_OPCODE_CALL | REDUCT_OPCODE_MODE_CONST , REDUCT_OPCODE_RET_CONST = REDUCT_OPCODE_RET | REDUCT_OPCODE_MODE_CONST , REDUCT_OPCODE_CAPTURE_CONST = REDUCT_OPCODE_CAPTURE | REDUCT_OPCODE_MODE_CONST , REDUCT_OPCODE_TAILCALL_CONST = REDUCT_OPCODE_TAILCALL | REDUCT_OPCODE_MODE_CONST , REDUCT_OPCODE_EQ_CONST = REDUCT_OPCODE_EQ | REDUCT_OPCODE_MODE_CONST , REDUCT_OPCODE_NEQ_CONST = REDUCT_OPCODE_NEQ | REDUCT_OPCODE_MODE_CONST , REDUCT_OPCODE_LT_CONST = REDUCT_OPCODE_LT | REDUCT_OPCODE_MODE_CONST , REDUCT_OPCODE_LE_CONST = REDUCT_OPCODE_LE | REDUCT_OPCODE_MODE_CONST , REDUCT_OPCODE_GT_CONST = REDUCT_OPCODE_GT | REDUCT_OPCODE_MODE_CONST , REDUCT_OPCODE_GE_CONST = REDUCT_OPCODE_GE | REDUCT_OPCODE_MODE_CONST , REDUCT_OPCODE_ADD_CONST = REDUCT_OPCODE_ADD | REDUCT_OPCODE_MODE_CONST , REDUCT_OPCODE_SUB_CONST = REDUCT_OPCODE_SUB | REDUCT_OPCODE_MODE_CONST , REDUCT_OPCODE_MUL_CONST = REDUCT_OPCODE_MUL | REDUCT_OPCODE_MODE_CONST , REDUCT_OPCODE_DIV_CONST = REDUCT_OPCODE_DIV | REDUCT_OPCODE_MODE_CONST , REDUCT_OPCODE_MOD_CONST = REDUCT_OPCODE_MOD | REDUCT_OPCODE_MODE_CONST , REDUCT_OPCODE_BAND_CONST = REDUCT_OPCODE_BAND | REDUCT_OPCODE_MODE_CONST , REDUCT_OPCODE_BOR_CONST = REDUCT_OPCODE_BOR | REDUCT_OPCODE_MODE_CONST , REDUCT_OPCODE_BXOR_CONST = REDUCT_OPCODE_BXOR | REDUCT_OPCODE_MODE_CONST , REDUCT_OPCODE_BNOT_CONST = REDUCT_OPCODE_BNOT | REDUCT_OPCODE_MODE_CONST , REDUCT_OPCODE_SHL_CONST = REDUCT_OPCODE_SHL | REDUCT_OPCODE_MODE_CONST , REDUCT_OPCODE_SHR_CONST = REDUCT_OPCODE_SHR | REDUCT_OPCODE_MODE_CONST , REDUCT_OPCODE_JEQ_CONST = REDUCT_OPCODE_JEQ | REDUCT_OPCODE_MODE_CONST , REDUCT_OPCODE_JNEQ_CONST = REDUCT_OPCODE_JNEQ | REDUCT_OPCODE_MODE_CONST , REDUCT_OPCODE_JLT_CONST = REDUCT_OPCODE_JLT | REDUCT_OPCODE_MODE_CONST , REDUCT_OPCODE_JLE_CONST = REDUCT_OPCODE_JLE | REDUCT_OPCODE_MODE_CONST , REDUCT_OPCODE_JGT_CONST = REDUCT_OPCODE_JGT | REDUCT_OPCODE_MODE_CONST , REDUCT_OPCODE_JGE_CONST = REDUCT_OPCODE_JGE | REDUCT_OPCODE_MODE_CONST , REDUCT_OPCODE_LEN_CONST = REDUCT_OPCODE_LEN | REDUCT_OPCODE_MODE_CONST , REDUCT_OPCODE_NTH2_CONST = REDUCT_OPCODE_NTH2 | REDUCT_OPCODE_MODE_CONST , REDUCT_OPCODE_NTH3_CONST = REDUCT_OPCODE_NTH3 | REDUCT_OPCODE_MODE_CONST , REDUCT_OPCODE_RANGE1_CONST = REDUCT_OPCODE_RANGE1 | REDUCT_OPCODE_MODE_CONST , REDUCT_OPCODE_RANGE2_CONST = REDUCT_OPCODE_RANGE2 | REDUCT_OPCODE_MODE_CONST , REDUCT_OPCODE_RANGE3_CONST = REDUCT_OPCODE_RANGE3 | REDUCT_OPCODE_MODE_CONST , REDUCT_OPCODE_REPEAT_CONST = REDUCT_OPCODE_REPEAT | REDUCT_OPCODE_MODE_CONST , REDUCT_OPCODE_FORK_CONST = REDUCT_OPCODE_FORK | REDUCT_OPCODE_MODE_CONST , REDUCT_OPCODE_JOIN_CONST = REDUCT_OPCODE_JOIN | REDUCT_OPCODE_MODE_CONST , REDUCT_OPCODE_FIRST_CONST = REDUCT_OPCODE_FIRST | REDUCT_OPCODE_MODE_CONST , REDUCT_OPCODE_LAST_CONST = REDUCT_OPCODE_LAST | REDUCT_OPCODE_MODE_CONST , REDUCT_OPCODE_REST_CONST = REDUCT_OPCODE_REST | REDUCT_OPCODE_MODE_CONST , REDUCT_OPCODE_INIT_CONST = REDUCT_OPCODE_INIT | REDUCT_OPCODE_MODE_CONST } |
| Opcode enumeration. More... | |
| enum | reduct_opcode_flags_t { REDUCT_OPCODE_FLAG_HAS_TARGET = (1 << 0) , REDUCT_OPCODE_FLAG_IS_JUMP = (1 << 1) , REDUCT_OPCODE_FLAG_HAS_CONST = (1 << 2) , REDUCT_OPCODE_FLAG_READ_A = (1 << 3) , REDUCT_OPCODE_FLAG_READ_B = (1 << 4) , REDUCT_OPCODE_FLAG_READ_C = (1 << 5) , REDUCT_OPCODE_FLAG_READ_RANGE = (1 << 6) , REDUCT_OPCODE_FLAG_IS_COMMUTATIVE = (1 << 7) , REDUCT_OPCODE_FLAG_IS_SKIP = (1 << 8) , REDUCT_OPCODE_FLAG_IS_CALL = (1 << 9) , REDUCT_OPCODE_FLAG_IS_TERMINATOR = (1 << 10) , REDUCT_OPCODE_FLAG_IS_RECUR = (1 << 11) , REDUCT_OPCODE_FLAG_IS_FORK = (1 << 12) } |
| Opcode flags. More... | |
Variables | |
| REDUCT_API const reduct_opcode_info_t | reductOpcodeTable [128] |
| Opcode information and flags table. | |
Bytecode opcodes and properties.
Definition in file opcode.h.