mie: select: implement comparison operation processing
This commit is contained in:
@@ -20,6 +20,12 @@ enum mie_select_opcode {
|
|||||||
MIE_SELECT_OP_MUL,
|
MIE_SELECT_OP_MUL,
|
||||||
MIE_SELECT_OP_DIV,
|
MIE_SELECT_OP_DIV,
|
||||||
MIE_SELECT_OP_XOR,
|
MIE_SELECT_OP_XOR,
|
||||||
|
MIE_SELECT_OP_CMP_EQ,
|
||||||
|
MIE_SELECT_OP_CMP_NEQ,
|
||||||
|
MIE_SELECT_OP_CMP_LT,
|
||||||
|
MIE_SELECT_OP_CMP_GT,
|
||||||
|
MIE_SELECT_OP_CMP_LEQ,
|
||||||
|
MIE_SELECT_OP_CMP_GEQ,
|
||||||
MIE_SELECT_OP_BR,
|
MIE_SELECT_OP_BR,
|
||||||
MIE_SELECT_OP_BR_COND,
|
MIE_SELECT_OP_BR_COND,
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -50,8 +50,20 @@ DEFINE_PUSH_FUNCTION(add, MIE_SELECT_OP_ADD);
|
|||||||
DEFINE_PUSH_FUNCTION(sub, MIE_SELECT_OP_SUB);
|
DEFINE_PUSH_FUNCTION(sub, MIE_SELECT_OP_SUB);
|
||||||
DEFINE_PUSH_FUNCTION(mul, MIE_SELECT_OP_MUL);
|
DEFINE_PUSH_FUNCTION(mul, MIE_SELECT_OP_MUL);
|
||||||
DEFINE_PUSH_FUNCTION(div, MIE_SELECT_OP_DIV);
|
DEFINE_PUSH_FUNCTION(div, MIE_SELECT_OP_DIV);
|
||||||
|
DEFINE_PUSH_FUNCTION(cmp_eq, MIE_SELECT_OP_CMP_EQ);
|
||||||
|
DEFINE_PUSH_FUNCTION(cmp_neq, MIE_SELECT_OP_CMP_NEQ);
|
||||||
|
DEFINE_PUSH_FUNCTION(cmp_lt, MIE_SELECT_OP_CMP_LT);
|
||||||
|
DEFINE_PUSH_FUNCTION(cmp_gt, MIE_SELECT_OP_CMP_GT);
|
||||||
|
DEFINE_PUSH_FUNCTION(cmp_leq, MIE_SELECT_OP_CMP_LEQ);
|
||||||
|
DEFINE_PUSH_FUNCTION(cmp_geq, MIE_SELECT_OP_CMP_GEQ);
|
||||||
|
|
||||||
DEFINE_OP(add);
|
DEFINE_OP(add);
|
||||||
DEFINE_OP(sub);
|
DEFINE_OP(sub);
|
||||||
DEFINE_OP(mul);
|
DEFINE_OP(mul);
|
||||||
DEFINE_OP(div);
|
DEFINE_OP(div);
|
||||||
|
DEFINE_OP(cmp_eq);
|
||||||
|
DEFINE_OP(cmp_neq);
|
||||||
|
DEFINE_OP(cmp_lt);
|
||||||
|
DEFINE_OP(cmp_gt);
|
||||||
|
DEFINE_OP(cmp_leq);
|
||||||
|
DEFINE_OP(cmp_geq);
|
||||||
|
|||||||
@@ -11,15 +11,24 @@ DECLARE_INSTR_TYPE(add);
|
|||||||
DECLARE_INSTR_TYPE(sub);
|
DECLARE_INSTR_TYPE(sub);
|
||||||
DECLARE_INSTR_TYPE(mul);
|
DECLARE_INSTR_TYPE(mul);
|
||||||
DECLARE_INSTR_TYPE(div);
|
DECLARE_INSTR_TYPE(div);
|
||||||
|
DECLARE_INSTR_TYPE(cmp_eq);
|
||||||
|
DECLARE_INSTR_TYPE(cmp_neq);
|
||||||
|
DECLARE_INSTR_TYPE(cmp_lt);
|
||||||
|
DECLARE_INSTR_TYPE(cmp_gt);
|
||||||
|
DECLARE_INSTR_TYPE(cmp_leq);
|
||||||
|
DECLARE_INSTR_TYPE(cmp_geq);
|
||||||
DECLARE_INSTR_TYPE(load);
|
DECLARE_INSTR_TYPE(load);
|
||||||
DECLARE_INSTR_TYPE(store);
|
DECLARE_INSTR_TYPE(store);
|
||||||
DECLARE_INSTR_TYPE(msg);
|
DECLARE_INSTR_TYPE(msg);
|
||||||
|
|
||||||
static const struct select_instr_type *instr_types[] = {
|
static const struct select_instr_type *instr_types[] = {
|
||||||
INSTR_TYPE_ENTRY(ALLOCA, alloca), INSTR_TYPE_ENTRY(ADD, add),
|
INSTR_TYPE_ENTRY(ALLOCA, alloca), INSTR_TYPE_ENTRY(LOAD, load),
|
||||||
INSTR_TYPE_ENTRY(SUB, sub), INSTR_TYPE_ENTRY(MUL, mul),
|
INSTR_TYPE_ENTRY(STORE, store), INSTR_TYPE_ENTRY(MSG, msg),
|
||||||
INSTR_TYPE_ENTRY(DIV, div), INSTR_TYPE_ENTRY(LOAD, load),
|
INSTR_TYPE_ENTRY(ADD, add), INSTR_TYPE_ENTRY(SUB, sub),
|
||||||
INSTR_TYPE_ENTRY(STORE, store), INSTR_TYPE_ENTRY(MSG, msg),
|
INSTR_TYPE_ENTRY(MUL, mul), INSTR_TYPE_ENTRY(DIV, div),
|
||||||
|
INSTR_TYPE_ENTRY(CMP_EQ, cmp_eq), INSTR_TYPE_ENTRY(CMP_NEQ, cmp_neq),
|
||||||
|
INSTR_TYPE_ENTRY(CMP_LT, cmp_lt), INSTR_TYPE_ENTRY(CMP_GT, cmp_gt),
|
||||||
|
INSTR_TYPE_ENTRY(CMP_LEQ, cmp_leq), INSTR_TYPE_ENTRY(CMP_GEQ, cmp_geq),
|
||||||
};
|
};
|
||||||
static const size_t nr_instr_types = sizeof instr_types / sizeof instr_types[0];
|
static const size_t nr_instr_types = sizeof instr_types / sizeof instr_types[0];
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ static size_t node_name(
|
|||||||
switch (opcode) {
|
switch (opcode) {
|
||||||
NODE_NAME(ENTRY, "Entry");
|
NODE_NAME(ENTRY, "Entry");
|
||||||
NODE_NAME(ROOT, "Root");
|
NODE_NAME(ROOT, "Root");
|
||||||
NODE_NAME(BLOCK, "Root");
|
NODE_NAME(BLOCK, "Block");
|
||||||
NODE_NAME(CONSTANT, "Constant");
|
NODE_NAME(CONSTANT, "Constant");
|
||||||
NODE_NAME(FRAME_INDEX, "FrameIndex");
|
NODE_NAME(FRAME_INDEX, "FrameIndex");
|
||||||
NODE_NAME(REGISTER, "Register");
|
NODE_NAME(REGISTER, "Register");
|
||||||
@@ -27,6 +27,12 @@ static size_t node_name(
|
|||||||
NODE_NAME(SUB, "Sub");
|
NODE_NAME(SUB, "Sub");
|
||||||
NODE_NAME(MUL, "Mul");
|
NODE_NAME(MUL, "Mul");
|
||||||
NODE_NAME(DIV, "Div");
|
NODE_NAME(DIV, "Div");
|
||||||
|
NODE_NAME(CMP_EQ, "Cmp.Eq");
|
||||||
|
NODE_NAME(CMP_NEQ, "Cmp.Neq");
|
||||||
|
NODE_NAME(CMP_LT, "Cmp.Lt");
|
||||||
|
NODE_NAME(CMP_GT, "Cmp.Gt");
|
||||||
|
NODE_NAME(CMP_LEQ, "Cmp.Leq");
|
||||||
|
NODE_NAME(CMP_GEQ, "Cmp.Geq");
|
||||||
NODE_NAME(XOR, "Xor");
|
NODE_NAME(XOR, "Xor");
|
||||||
NODE_NAME(BR, "Branch");
|
NODE_NAME(BR, "Branch");
|
||||||
NODE_NAME(BR_COND, "CondBranch");
|
NODE_NAME(BR_COND, "CondBranch");
|
||||||
|
|||||||
Reference in New Issue
Block a user