mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-25 00:00:11 +01:00
etnaviv: isa: Add norm_mul instruction
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:
parent
79f4eca2f0
commit
cb6cb2697e
5 changed files with 15 additions and 2 deletions
|
|
@ -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 */
|
||||
|
|
|
|||
|
|
@ -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">&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 -->
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ Skphp = { ".skpHp" }
|
|||
Pmode = { ".pack" }
|
||||
Denorm = { ".denorm" }
|
||||
Local = { ".local" }
|
||||
Unk = { ".unk" }
|
||||
|
||||
Amount = { ASCII_DIGIT* }
|
||||
Left_shift = { ".ls" ~ Amount }
|
||||
|
|
|
|||
|
|
@ -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"},
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue