From cd4c328408bce60f59310267ecf712f5ce381e2e Mon Sep 17 00:00:00 2001 From: Sviatoslav Peleshko Date: Sat, 19 Oct 2024 16:36:18 +0300 Subject: [PATCH] intel/elk: List all instructions that have BranchCtrl bit Previously this bit was not clearly documented in PRMs, but gfx12 PRMs finally list all the instructions where it is present. Although it's unclear if it's functional for anything other than "if", "else", and "goto", we probably still should acknowledge its existence in other instructions. Signed-off-by: Sviatoslav Peleshko Reviewed-by: Caio Oliveira Part-of: --- src/intel/compiler/elk/elk_disasm.c | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/intel/compiler/elk/elk_disasm.c b/src/intel/compiler/elk/elk_disasm.c index d4a790540dd..33635f0d3ab 100644 --- a/src/intel/compiler/elk/elk_disasm.c +++ b/src/intel/compiler/elk/elk_disasm.c @@ -70,9 +70,26 @@ has_branch_ctrl(const struct intel_device_info *devinfo, enum elk_opcode opcode) if (devinfo->ver < 8) return false; - return opcode == ELK_OPCODE_IF || - opcode == ELK_OPCODE_ELSE; - /* opcode == ELK_OPCODE_GOTO; */ + switch (opcode) { + case ELK_OPCODE_IF: + case ELK_OPCODE_ELSE: + case ELK_OPCODE_GOTO: + case ELK_OPCODE_BREAK: + case ELK_OPCODE_CALL: + case ELK_OPCODE_CALLA: + case ELK_OPCODE_CONTINUE: + case ELK_OPCODE_ENDIF: + case ELK_OPCODE_HALT: + case ELK_OPCODE_JMPI: + case ELK_OPCODE_RET: + case ELK_OPCODE_WHILE: + case ELK_OPCODE_BRC: + case ELK_OPCODE_BRD: + /* TODO: "join" should also be here if added */ + return true; + default: + return false; + } } static bool