From 081efcd68decea7e3f47b41d2e611aa4cea857d7 Mon Sep 17 00:00:00 2001 From: Christian Gmeiner Date: Tue, 3 Mar 2026 19:52:39 +0100 Subject: [PATCH] etnaviv: isa: Split texkill into concrete bitset variants Replace the #instruction-alu-no-dst-maybe-src0-src1 intermediate, which used override expressions and variable SRC USE fields, with two concrete intermediates following the branch/branch_unary/branch_binary pattern: - #instruction-alu-no-dst-no-src: no sources, COND bits forced to zero - #instruction-alu-no-dst-cond-src0-src1: SRC0+SRC1 with fixed USE=1 patterns and a COND field The texkill instruction is split into texkill (unconditional, no sources) and texkill_cond (conditional, with sources). This eliminates the "maybe" anti-pattern and enables full assembler round-trip for conditional texkill. Signed-off-by: Christian Gmeiner Part-of: --- src/etnaviv/isa/etnaviv.xml | 76 +++++++++++++++++++++----------- src/etnaviv/isa/tests/disasm.cpp | 2 +- 2 files changed, 51 insertions(+), 27 deletions(-) diff --git a/src/etnaviv/isa/etnaviv.xml b/src/etnaviv/isa/etnaviv.xml index 6f4fa0a79aa..ff74ff1bdd1 100644 --- a/src/etnaviv/isa/etnaviv.xml +++ b/src/etnaviv/isa/etnaviv.xml @@ -374,10 +374,6 @@ SPDX-License-Identifier: MIT 000 - - ({SRC0_USE} != 0) && ({SRC1_USE} != 0) - - ({SRC2_USE} != 0) @@ -386,33 +382,52 @@ SPDX-License-Identifier: MIT ({SRC0_USE} != 0) && ({SRC1_USE} != 0) && ({SRC2_USE} != 0) - - Needed for texkill + + 00000 + + + {INSTR_ALU} {DST:align=18}, void, void, void + + + + 0 + 000000000 + 00000000 + 0 + 0 + 000 + 000 + + + 0 + 000000000 + 00000000 + 0 + 0 + 000 + 000 + + + 0 + 000000000 + 00000000 + 0 + 0 + 000 + 000 + + + + - - src->cond - - - {NAME}{COND}{TYPE}{PMODE}{THREAD}{RMODE} {DST:align=18}{DST_FULL}, void, void, void + {INSTR_ALU_COND} {DST:align=18}, {SRC0}, {SRC1}, void - - - {NAME}{COND}{TYPE}{PMODE}{THREAD}{RMODE} {DST:align=18}, {SRC0}, {SRC1}, void - - - - - - {NAME}{COND}{TYPE}{PMODE}{THREAD}{RMODE} {DST:align=18}, {SRC0}, void, void - - - - + 1 @@ -423,7 +438,7 @@ SPDX-License-Identifier: MIT - + 1 @@ -441,6 +456,10 @@ SPDX-License-Identifier: MIT 0 000 000 + + + src->cond + @@ -1376,7 +1395,12 @@ SPDX-License-Identifier: MIT 0 - + + 010111 + 0 + + + 010111 0 diff --git a/src/etnaviv/isa/tests/disasm.cpp b/src/etnaviv/isa/tests/disasm.cpp index 9e8051348c7..d32e4fc20e2 100644 --- a/src/etnaviv/isa/tests/disasm.cpp +++ b/src/etnaviv/isa/tests/disasm.cpp @@ -141,7 +141,7 @@ INSTANTIATE_TEST_SUITE_P(Opcodes, DisasmTest, disasm_state{ {0x00000015, 0x00000000, 0x00000000, 0x00000000}, "ret void, void, void, void\n" }, disasm_state{ {0x00000016, 0x00000000, 0x00000000, 0x00001080}, "branch void, void, void, 33\n"}, disasm_state{ {0x00000017, 0x00000000, 0x00000000, 0x00000000}, "texkill.pack void, void, void, void\n" }, - disasm_state{ {0x00000057, 0x00002800, 0x00000040, 0x00000002}, "texkill.gt.pack void, t2.xxxx, u0.xxxx, void\n", FLAG_FAILING_PARSE | FLAG_FAILING_ASM }, + disasm_state{ {0x00000057, 0x00002800, 0x00000040, 0x00000002}, "texkill.gt.pack void, t2.xxxx, u0.xxxx, void\n" }, disasm_state{ {0x07811018, 0x15001f20, 0x00000000, 0x00000000}, "texld t1, tex0.xyzw, t1.xyyy, void, void\n" }, disasm_state{ {0x07811019, 0x39002f20, 0x00000000, 0x00000000}, "texldb t1, tex0.xyzw, t2.xyzw, void, void\n", FLAG_FAILING_PARSE | FLAG_FAILING_ASM }, disasm_state{ {0x0781101a, 0x15001f20, 0x00a80140, 0x003f8018}, "texldd t1, tex0.xyzw, t1.xyyy, t2.xyyy, t1.zwww\n" },