if (inst->type != V3D_QPU_INSTR_TYPE_ALU)
return false;
- if (inst->alu.add.magic_write &&
+ if (inst->alu.add.op != V3D_QPU_A_NOP &&
+ inst->alu.add.magic_write &&
(inst->alu.add.waddr == V3D_QPU_WADDR_TLB ||
inst->alu.add.waddr == V3D_QPU_WADDR_TLBU))
return true;
- if (inst->alu.mul.magic_write &&
+ if (inst->alu.mul.op != V3D_QPU_M_NOP &&
+ inst->alu.mul.magic_write &&
(inst->alu.mul.waddr == V3D_QPU_WADDR_TLB ||
inst->alu.mul.waddr == V3D_QPU_WADDR_TLBU))
return true;
after_inst->type != V3D_QPU_INSTR_TYPE_ALU)
return latency;
- if (before_inst->alu.add.magic_write) {
+ if (before_inst->alu.add.op != V3D_QPU_A_NOP &&
+ before_inst->alu.add.magic_write) {
latency = MAX2(latency,
magic_waddr_latency(devinfo,
before_inst->alu.add.waddr,
after_inst));
}
- if (before_inst->alu.mul.magic_write) {
+ if (before_inst->alu.mul.op != V3D_QPU_M_NOP &&
+ before_inst->alu.mul.magic_write) {
latency = MAX2(latency,
magic_waddr_latency(devinfo,
before_inst->alu.mul.waddr,
return false;
/* No writing physical registers at the end. */
- if (!inst->alu.add.magic_write ||
- !inst->alu.mul.magic_write) {
+ bool add_is_nop = inst->alu.add.op == V3D_QPU_A_NOP;
+ bool mul_is_nop = inst->alu.mul.op == V3D_QPU_M_NOP;
+ if ((!add_is_nop && !inst->alu.add.magic_write) ||
+ (!mul_is_nop && !inst->alu.mul.magic_write)) {
return false;
}
/* RF0-2 might be overwritten during the delay slots by
* fragment shader setup.
*/
- if (inst->raddr_a < 3 &&
- (inst->alu.add.a == V3D_QPU_MUX_A ||
- inst->alu.add.b == V3D_QPU_MUX_A ||
- inst->alu.mul.a == V3D_QPU_MUX_A ||
- inst->alu.mul.b == V3D_QPU_MUX_A)) {
+ if (inst->raddr_a < 3 && v3d_qpu_uses_mux(inst, V3D_QPU_MUX_A))
return false;
- }
if (inst->raddr_b < 3 &&
!inst->sig.small_imm &&
- (inst->alu.add.a == V3D_QPU_MUX_B ||
- inst->alu.add.b == V3D_QPU_MUX_B ||
- inst->alu.mul.a == V3D_QPU_MUX_B ||
- inst->alu.mul.b == V3D_QPU_MUX_B)) {
+ v3d_qpu_uses_mux(inst, V3D_QPU_MUX_B)) {
return false;
}
}
return true;
if (inst->type == V3D_QPU_INSTR_TYPE_ALU) {
- if (inst->alu.add.magic_write &&
+ if (inst->alu.add.op != V3D_QPU_A_NOP &&
+ inst->alu.add.magic_write &&
v3d_qpu_magic_waddr_is_tlb(inst->alu.add.waddr)) {
return true;
}
- if (inst->alu.mul.magic_write &&
+ if (inst->alu.mul.op != V3D_QPU_M_NOP &&
+ inst->alu.mul.magic_write &&
v3d_qpu_magic_waddr_is_tlb(inst->alu.mul.waddr)) {
return true;
}
const struct v3d_qpu_instr *inst)
{
return (inst->type == V3D_QPU_INSTR_TYPE_ALU &&
- ((inst->alu.add.magic_write &&
+ ((inst->alu.add.op != V3D_QPU_A_NOP &&
+ inst->alu.add.magic_write &&
v3d_qpu_magic_waddr_is_tmu(devinfo, inst->alu.add.waddr)) ||
- (inst->alu.mul.magic_write &&
+ (inst->alu.mul.op != V3D_QPU_M_NOP &&
+ inst->alu.mul.magic_write &&
v3d_qpu_magic_waddr_is_tmu(devinfo, inst->alu.mul.waddr))));
}
if (v3d_qpu_add_op_writes_vpm(inst->alu.add.op))
return true;
- if (inst->alu.add.magic_write &&
+ if (inst->alu.add.op != V3D_QPU_A_NOP &&
+ inst->alu.add.magic_write &&
v3d_qpu_magic_waddr_is_vpm(inst->alu.add.waddr)) {
return true;
}
- if (inst->alu.mul.magic_write &&
+ if (inst->alu.mul.op != V3D_QPU_M_NOP &&
+ inst->alu.mul.magic_write &&
v3d_qpu_magic_waddr_is_vpm(inst->alu.mul.waddr)) {
return true;
}
uint32_t waddr)
{
if (inst->type == V3D_QPU_INSTR_TYPE_ALU) {
- if (inst->alu.add.magic_write && inst->alu.add.waddr == waddr)
+ if (inst->alu.add.op != V3D_QPU_A_NOP &&
+ inst->alu.add.magic_write && inst->alu.add.waddr == waddr)
return true;
- if (inst->alu.mul.magic_write && inst->alu.mul.waddr == waddr)
+ if (inst->alu.mul.op != V3D_QPU_M_NOP &&
+ inst->alu.mul.magic_write && inst->alu.mul.waddr == waddr)
return true;
}
const struct v3d_qpu_instr *inst)
{
if (inst->type == V3D_QPU_INSTR_TYPE_ALU) {
- if (inst->alu.add.magic_write &&
+ if (inst->alu.add.op != V3D_QPU_A_NOP &&
+ inst->alu.add.magic_write &&
(inst->alu.add.waddr == V3D_QPU_WADDR_R4 ||
v3d_qpu_magic_waddr_is_sfu(inst->alu.add.waddr))) {
return true;
}
- if (inst->alu.mul.magic_write &&
+ if (inst->alu.mul.op != V3D_QPU_M_NOP &&
+ inst->alu.mul.magic_write &&
(inst->alu.mul.waddr == V3D_QPU_WADDR_R4 ||
v3d_qpu_magic_waddr_is_sfu(inst->alu.mul.waddr))) {
return true;