From 24db1a5112fb651efb83520b856ffb6d0e612ddb Mon Sep 17 00:00:00 2001 From: Iago Toral Quiroga Date: Thu, 11 Feb 2021 13:22:28 +0100 Subject: [PATCH] broadcom/compiler: add a helper to check if an instruction writes unifa MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reviewed-by: Alejandro PiƱeiro Part-of: --- src/broadcom/qpu/qpu_instr.c | 24 ++++++++++++++++++++++++ src/broadcom/qpu/qpu_instr.h | 2 ++ 2 files changed, 26 insertions(+) diff --git a/src/broadcom/qpu/qpu_instr.c b/src/broadcom/qpu/qpu_instr.c index 4cbf84ef00c..b771f270930 100644 --- a/src/broadcom/qpu/qpu_instr.c +++ b/src/broadcom/qpu/qpu_instr.c @@ -749,6 +749,30 @@ v3d_qpu_writes_vpm(const struct v3d_qpu_instr *inst) return false; } +bool +v3d_qpu_writes_unifa(const struct v3d_device_info *devinfo, + const struct v3d_qpu_instr *inst) +{ + if (devinfo->ver < 40) + return false; + + if (inst->type == V3D_QPU_INSTR_TYPE_ALU) { + if (inst->alu.add.op != V3D_QPU_A_NOP && + inst->alu.add.magic_write && + inst->alu.add.waddr == V3D_QPU_WADDR_UNIFA) { + return true; + } + + if (inst->alu.mul.op != V3D_QPU_M_NOP && + inst->alu.mul.magic_write && + inst->alu.mul.waddr == V3D_QPU_WADDR_UNIFA) { + return true; + } + } + + return false; +} + static bool v3d_qpu_waits_vpm(const struct v3d_qpu_instr *inst) { diff --git a/src/broadcom/qpu/qpu_instr.h b/src/broadcom/qpu/qpu_instr.h index 432312ca45d..4996e0134f7 100644 --- a/src/broadcom/qpu/qpu_instr.h +++ b/src/broadcom/qpu/qpu_instr.h @@ -470,6 +470,8 @@ bool v3d_qpu_writes_vpm(const struct v3d_qpu_instr *inst) ATTRIBUTE_CONST; bool v3d_qpu_reads_or_writes_vpm(const struct v3d_qpu_instr *inst) ATTRIBUTE_CONST; bool v3d_qpu_reads_flags(const struct v3d_qpu_instr *inst) ATTRIBUTE_CONST; bool v3d_qpu_writes_flags(const struct v3d_qpu_instr *inst) ATTRIBUTE_CONST; +bool v3d_qpu_writes_unifa(const struct v3d_device_info *devinfo, + const struct v3d_qpu_instr *inst) ATTRIBUTE_CONST; bool v3d_qpu_sig_writes_address(const struct v3d_device_info *devinfo, const struct v3d_qpu_sig *sig) ATTRIBUTE_CONST; bool v3d_qpu_unpacks_f32(const struct v3d_qpu_instr *inst) ATTRIBUTE_CONST;