37 lines
2.6 KiB
C
37 lines
2.6 KiB
C
#include <ivy/asm/instr.h>
|
|
|
|
#define INSTR(id, op, ...) \
|
|
[op] = { .i_id = (id), .i_opcode = (op), .i_operand = { __VA_ARGS__ }}
|
|
|
|
/* clang-format off */
|
|
static const struct ivy_instr_definition instructions[] = {
|
|
INSTR(IVY_INSTR_LDR, IVY_OP_LDR_SP_REG, IVY_INSTR_OPERAND_REGISTER, IVY_INSTR_OPERAND_SP_INDEX_REG),
|
|
INSTR(IVY_INSTR_LDR, IVY_OP_LDR_SP_CONST, IVY_INSTR_OPERAND_REGISTER, IVY_INSTR_OPERAND_SP_INDEX_CONST),
|
|
INSTR(IVY_INSTR_LDR, IVY_OP_LDR_BP_REG, IVY_INSTR_OPERAND_REGISTER, IVY_INSTR_OPERAND_BP_INDEX_REG),
|
|
INSTR(IVY_INSTR_LDR, IVY_OP_LDR_BP_CONST, IVY_INSTR_OPERAND_REGISTER, IVY_INSTR_OPERAND_BP_INDEX_CONST),
|
|
INSTR(IVY_INSTR_LDR, IVY_OP_LDR_SELF_REG, IVY_INSTR_OPERAND_REGISTER, IVY_INSTR_OPERAND_SELF_INDEX_REG),
|
|
INSTR(IVY_INSTR_LDR, IVY_OP_LDR_SELF_CONST, IVY_INSTR_OPERAND_REGISTER, IVY_INSTR_OPERAND_SELF_INDEX_CONST),
|
|
INSTR(IVY_INSTR_LDR, IVY_OP_LDR_POOL_REG, IVY_INSTR_OPERAND_REGISTER, IVY_INSTR_OPERAND_POOL_INDEX_REG),
|
|
INSTR(IVY_INSTR_LDR, IVY_OP_LDR_POOL_CONST, IVY_INSTR_OPERAND_REGISTER, IVY_INSTR_OPERAND_POOL_INDEX_CONST),
|
|
|
|
INSTR(IVY_INSTR_STR, IVY_OP_LDR_SP_REG, IVY_INSTR_OPERAND_REGISTER, IVY_INSTR_OPERAND_SP_INDEX_REG),
|
|
INSTR(IVY_INSTR_STR, IVY_OP_LDR_SP_CONST, IVY_INSTR_OPERAND_REGISTER, IVY_INSTR_OPERAND_SP_INDEX_CONST),
|
|
INSTR(IVY_INSTR_STR, IVY_OP_LDR_BP_REG, IVY_INSTR_OPERAND_REGISTER, IVY_INSTR_OPERAND_BP_INDEX_REG),
|
|
INSTR(IVY_INSTR_STR, IVY_OP_LDR_BP_CONST, IVY_INSTR_OPERAND_REGISTER, IVY_INSTR_OPERAND_BP_INDEX_CONST),
|
|
INSTR(IVY_INSTR_STR, IVY_OP_LDR_SELF_REG, IVY_INSTR_OPERAND_REGISTER, IVY_INSTR_OPERAND_SELF_INDEX_REG),
|
|
INSTR(IVY_INSTR_STR, IVY_OP_LDR_SELF_CONST, IVY_INSTR_OPERAND_REGISTER, IVY_INSTR_OPERAND_SELF_INDEX_CONST),
|
|
|
|
INSTR(IVY_INSTR_PUSH, IVY_OP_PUSH_REG, IVY_INSTR_OPERAND_REGISTER),
|
|
INSTR(IVY_INSTR_PUSH, IVY_OP_PUSH_CONST, IVY_INSTR_OPERAND_CONST),
|
|
INSTR(IVY_INSTR_POP, IVY_OP_POP, IVY_INSTR_OPERAND_REGISTER),
|
|
|
|
INSTR(IVY_INSTR_MSG, IVY_OP_MSG_REG, IVY_INSTR_OPERAND_REGISTER, IVY_INSTR_OPERAND_REGISTER, IVY_INSTR_OPERAND_REGISTER),
|
|
INSTR(IVY_INSTR_MSG, IVY_OP_MSG_CONST, IVY_INSTR_OPERAND_REGISTER, IVY_INSTR_OPERAND_REGISTER, IVY_INSTR_OPERAND_CONST),
|
|
|
|
INSTR(IVY_INSTR_ADD, IVY_OP_ADD, IVY_INSTR_OPERAND_REGISTER, IVY_INSTR_OPERAND_REGISTER, IVY_INSTR_OPERAND_REGISTER),
|
|
INSTR(IVY_INSTR_SUB, IVY_OP_SUB, IVY_INSTR_OPERAND_REGISTER, IVY_INSTR_OPERAND_REGISTER, IVY_INSTR_OPERAND_REGISTER),
|
|
INSTR(IVY_INSTR_MUL, IVY_OP_MUL, IVY_INSTR_OPERAND_REGISTER, IVY_INSTR_OPERAND_REGISTER, IVY_INSTR_OPERAND_REGISTER),
|
|
INSTR(IVY_INSTR_DIV, IVY_OP_DIV, IVY_INSTR_OPERAND_REGISTER, IVY_INSTR_OPERAND_REGISTER, IVY_INSTR_OPERAND_REGISTER),
|
|
|
|
};
|
|
/* clang-format on */ |