switch (cat0->opc) {
case OPC_KILL:
+ case OPC_CONDEND:
fprintf(ctx->out, " %sp0.%c", cat0->inv ? "!" : "",
component[cat0->comp]);
break;
OPC(0, OPC_CHMASK, chmask),
OPC(0, OPC_CHSH, chsh),
OPC(0, OPC_FLOW_REV, flow_rev),
+ OPC(0, OPC_CONDEND, condend),
+ OPC(0, OPC_ENDPATCH, endpatch),
/* category 1: */
OPC(1, OPC_MOV, ),
OPC_CHSH = _OPC(0, 10),
OPC_FLOW_REV = _OPC(0, 11),
+ OPC_CONDEND = _OPC(0, 13),
+ OPC_ENDPATCH = _OPC(0, 15),
+
/* category 1: */
OPC_MOV = _OPC(1, 0),
cat0->sync = !!(instr->flags & IR3_INSTR_SY);
cat0->opc_cat = 0;
+ if (instr->opc == OPC_CONDEND || instr->opc == OPC_ENDPATCH)
+ cat0->dummy4 = 16;
+
return 0;
}
static inline bool is_kill(struct ir3_instruction *instr)
{
- return instr->opc == OPC_KILL;
+ return instr->opc == OPC_KILL || instr->opc == OPC_CONDEND;
}
static inline bool is_nop(struct ir3_instruction *instr)
INSTR0(END)
INSTR0(CHSH)
INSTR0(CHMASK)
+INSTR1(CONDEND)
+INSTR0(ENDPATCH)
/* cat2 instructions, most 2 src but some 1 src: */
INSTR2(ADD_F)
last_input_needs_ss = false;
}
+ if (last_n && opc_cat(last_n->opc) == 0 && opc_op(last_n->opc) == 13)
+ n->flags |= IR3_INSTR_SS;
+
/* NOTE: consider dst register too.. it could happen that
* texture sample instruction (for example) writes some
* components which are unused. A subsequent instruction