43 lines
1.7 KiB
C
43 lines
1.7 KiB
C
#ifndef FZL_OPCODES_H
|
|
#define FZL_OPCODES_H
|
|
|
|
// Available opcodes
|
|
typedef enum
|
|
{
|
|
FZL_OPCODE_LOADCONST = 0xF00001, // Load const into T (temp) reg
|
|
FZL_OPCODE_CALL_BUILTIN = 0xF00002, // Call builtin function
|
|
FZL_OPCODE_PUSHNUM = 0xF00003, // Push number into stack
|
|
FZL_OPCODE_PUSHBOOL = 0xF00004, // Push boolean into stack
|
|
|
|
FZL_OPCODE_MK_ENVTABLE = 0xF10001, // Allocate new environment table
|
|
FZL_OPCODE_RM_ENVTABLE = 0xF10002, // Free environment table
|
|
FZL_OPCODE_STORE = 0xF10003, // Push variable to environment table
|
|
FZL_OPCODE_LOOKUP_ENV = 0xF10004, // Lookup name in environment table
|
|
FZL_OPCODE_WRITE = 0xF10005, // Wirte into variable
|
|
|
|
FZL_OPCODE_JMP = 0xF20001, // Jump to specified IP address
|
|
FZL_OPCODE_JZ = 0xF20002, // Jump if top value in dstack is zero
|
|
|
|
FZL_OPCODE_ADD = 0xA00001, // Sum two numbers in dstack
|
|
FZL_OPCODE_SUB = 0xA00002, // Subract two numbers in dstack
|
|
FZL_OPCODE_MUL = 0xA00003, // Multiply two numbers in dstack
|
|
FZL_OPCODE_DIV = 0xA00004, // Divide two numbers in dstack
|
|
FZL_OPCODE_POW = 0xA00005, // Power first number in dstack by second
|
|
FZL_OPCODE_MOD = 0xA00006, // Get module of two numbers in dstack
|
|
FZL_OPCODE_NEG = 0xA00007, // Negotiate number in dstack
|
|
|
|
FZL_OPCODE_CMP_EQ = 0xB00001, // Equal
|
|
FZL_OPCODE_CMP_NEQ = 0xB00002, // Not equal
|
|
FZL_OPCODE_CMP_LT = 0xB00003, // Less than
|
|
FZL_OPCODE_CMP_LTEQ = 0xB00004, // Less than or equal
|
|
FZL_OPCODE_CMP_GT = 0xB00005, // Greater than
|
|
FZL_OPCODE_CMP_GTEQ = 0xB00006, // Greater than or equal
|
|
|
|
FZL_OPCODE_AND = 0xC00001, // A && B
|
|
FZL_OPCODE_OR = 0xC00002, // A || B
|
|
|
|
FZL_OPCODE_NOT = 0xD00001, // !A
|
|
} fzl_opcode_t;
|
|
|
|
#endif // FZL_OPCODES_H
|