etnaviv: isa: Add norm_mul instruction
Some checks are pending
macOS-CI / macOS-CI (dri) (push) Waiting to run
macOS-CI / macOS-CI (xlib) (push) Waiting to run

Blob generates such norm_mul for glmark2:shadow benchmark on STM32MP257.

Signed-off-by: Christian Gmeiner <cgmeiner@igalia.com>
Reviewed-by: Gert Wollny <gert.wollny@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/38172>
This commit is contained in:
Christian Gmeiner 2025-10-31 00:20:30 +01:00
parent 79f4eca2f0
commit cb6cb2697e
5 changed files with 15 additions and 2 deletions

View file

@ -88,6 +88,7 @@ struct etna_inst {
unsigned skphp : 1;
unsigned denorm : 1;
unsigned local : 1;
unsigned unk : 1;
unsigned left_shift : 3;
struct etna_inst_dst dst; /* destination operand */
struct etna_inst_tex tex; /* texture operand */

View file

@ -7,7 +7,7 @@ SPDX-License-Identifier: MIT
<isa>
<template name="INSTR_ALU">
{NAME}{DST_FULL}{SAT}{COND}{SKPHP}{TYPE}{PMODE}{THREAD}{RMODE}
{NAME}{DST_FULL}{SAT}{COND}{SKPHP}{UNK}{TYPE}{PMODE}{THREAD}{RMODE}
</template>
<template name="INSTR_TEX">
@ -153,6 +153,7 @@ SPDX-License-Identifier: MIT
<map name="SKPHP">src->skphp</map>
<map name="DENORM">src->denorm</map>
<map name="LOCAL">src->local</map>
<map name="UNK">src->unk</map>
<map name="LEFT_SHIFT">src->left_shift</map>
<map name="DST_USE">src->dst.use</map>
<map name="DST">&amp;src->dst</map>
@ -212,7 +213,8 @@ SPDX-License-Identifier: MIT
<param name="DST_USE"/>
<param name="COMPS"/>
</field>
<pattern low="27" high="31">00000</pattern> <!-- TEX_ID -->
<field name="UNK" pos="27" type="bool" display=".unk"/>
<pattern low="28" high="31">0000</pattern>
<field name="RMODE" low="32" high="33" type="#rounding"/>
<field name="PMODE" pos="34" type="bool_inv" display=".pack"/>
@ -1560,6 +1562,11 @@ SPDX-License-Identifier: MIT
<pattern pos="80">1</pattern> <!-- OPCODE_BIT6 -->
</bitset>
<bitset name="norm_mul" extends="#instruction-alu-src0-src1">
<pattern low="0" high="5">110111</pattern> <!-- OPC -->
<pattern pos="80">1</pattern> <!-- OPCODE_BIT6 -->
</bitset>
<bitset name="img_load" extends="#instruction-load">
<pattern low="0" high="5">111001</pattern> <!-- OPC -->
<pattern pos="80">1</pattern> <!-- OPCODE_BIT6 -->

View file

@ -211,6 +211,9 @@ fn process(input: Pair<Rule>, dual_16_mode: bool) -> Option<etna_inst> {
Rule::Local => {
instr.set_local(1);
}
Rule::Unk => {
instr.set_unk(1);
}
Rule::Left_shift => {
let item = p.into_inner().next().unwrap();
let amount = parse_pair(item);

View file

@ -12,6 +12,7 @@ Skphp = { ".skpHp" }
Pmode = { ".pack" }
Denorm = { ".denorm" }
Local = { ".local" }
Unk = { ".unk" }
Amount = { ASCII_DIGIT* }
Left_shift = { ".ls" ~ Amount }

View file

@ -198,6 +198,7 @@ INSTANTIATE_TEST_SUITE_P(Opcodes, DisasmTest,
disasm_state{ {0x00811034, 0x15c01804, 0x00010000, 0x00000000}, "norm_dp2 t1.x___, t1.wyyy, void, void\n"},
disasm_state{ {0x04011035, 0x14801804, 0x00010000, 0x00000000}, "norm_dp3 t1.___w, t1.zxyy, void, void\n"},
disasm_state{ {0x00821036, 0x0e401804, 0x00010000, 0x00000000}, "norm_dp4 t2.x___, t1.yzwx, void, void\n"},
disasm_state{ {0x0b801037, 0x29000804, 0x01ff0040, 0x00000000}, "norm_mul.unk t0.xyz_, t0.xyzz, t0.wwww, void\n"},
disasm_state{ {0x07801039, 0x39204c00, 0x80a90050, 0x00000000}, "img_load.denorm.u32.pack t0, u4.xyzw, t0.xyyy, void\n"},
disasm_state{ {0x0780083a, 0x39200c00, 0x80a90050, 0x00390018}, "img_store.sat.denorm.u32.pack mem, u0.xyzw, t0.xyyy, t1.xyzw\n"},
disasm_state{ {0x0781103d, 0x15001f20, 0x100101c0, 0x00000007}, "tg4 t1, tex0.xyzw, t1.xyyy, 3, void\n"},