mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-25 15:10:10 +01:00
pan/bi: Model [IF]CMP_{OR,AND,MULTI} ops
Valhall-style comparisons are 3-source, allowing multiple comparisons to be combined without bitwise arithmetic. For example, the sequence FCMP.f32.eq t, z, w FCMP_AND.f32.eq dest, x, y, t calculates (z == w) && (y == t) in 2 instructions (would be 3 on Bifrost). Signed-off-by: Alyssa Rosenzweig <alyssa@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17794>
This commit is contained in:
parent
d0aaf52602
commit
40bf6da4a4
1 changed files with 452 additions and 0 deletions
|
|
@ -8841,4 +8841,456 @@
|
|||
<src start="0"/>
|
||||
</ins>
|
||||
|
||||
<ins name="*FCMP_OR.f32" pseudo="true">
|
||||
<src start="0" mask="0xfb"/>
|
||||
<src start="3" mask="0xfb"/>
|
||||
<src start="6" mask="0xfb"/>
|
||||
<mod name="widen0" size="2">
|
||||
<opt>none</opt>
|
||||
<opt>h0</opt>
|
||||
<opt>h1</opt>
|
||||
</mod>
|
||||
<mod name="widen1" size="2">
|
||||
<opt>none</opt>
|
||||
<opt>h0</opt>
|
||||
<opt>h1</opt>
|
||||
</mod>
|
||||
<mod name="abs1" start="6" size="1" opt="abs"/>
|
||||
<mod name="neg0" start="7" size="1" opt="neg"/>
|
||||
<mod name="neg1" start="8" size="1" opt="neg"/>
|
||||
<mod name="abs0" start="12" size="1" opt="abs"/>
|
||||
<mod name="cmpf" start="13" size="3">
|
||||
<opt>eq</opt>
|
||||
<opt>gt</opt>
|
||||
<opt>ge</opt>
|
||||
<opt>ne</opt>
|
||||
<opt>lt</opt>
|
||||
<opt>le</opt>
|
||||
<opt>gtlt</opt>
|
||||
<opt>total</opt>
|
||||
</mod>
|
||||
<mod name="result_type" start="16" size="2" default="i1">
|
||||
<opt>i1</opt>
|
||||
<opt>f1</opt>
|
||||
<opt>m1</opt>
|
||||
</mod>
|
||||
</ins>
|
||||
|
||||
<ins name="*FCMP_OR.v2f16" pseudo="true">
|
||||
<src start="0" mask="0xfb"/>
|
||||
<src start="3" mask="0xfb"/>
|
||||
<src start="6" mask="0xfb"/>
|
||||
<mod name="abs0" size="1" opt="abs"/>
|
||||
<mod name="abs1" size="1" opt="abs"/>
|
||||
<mod name="cmpf" size="3">
|
||||
<opt>eq</opt>
|
||||
<opt>gt</opt>
|
||||
<opt>ge</opt>
|
||||
<opt>ne</opt>
|
||||
<opt>lt</opt>
|
||||
<opt>le</opt>
|
||||
<opt>gtlt</opt>
|
||||
<opt>total</opt>
|
||||
</mod>
|
||||
<mod name="neg0" start="7" size="1" opt="neg"/>
|
||||
<mod name="neg1" start="8" size="1" opt="neg"/>
|
||||
<mod name="swz0" start="9" size="2" default="h01">
|
||||
<opt>h00</opt>
|
||||
<opt>h10</opt>
|
||||
<opt>h01</opt>
|
||||
<opt>h11</opt>
|
||||
</mod>
|
||||
<mod name="swz1" start="11" size="2" default="h01">
|
||||
<opt>h00</opt>
|
||||
<opt>h10</opt>
|
||||
<opt>h01</opt>
|
||||
<opt>h11</opt>
|
||||
</mod>
|
||||
<mod name="result_type" start="16" size="2" default="i1">
|
||||
<opt>i1</opt>
|
||||
<opt>f1</opt>
|
||||
<opt>m1</opt>
|
||||
</mod>
|
||||
</ins>
|
||||
|
||||
<ins name="*FCMP_AND.f32" pseudo="true">
|
||||
<src start="0" mask="0xfb"/>
|
||||
<src start="3" mask="0xfb"/>
|
||||
<src start="6" mask="0xfb"/>
|
||||
<mod name="widen0" size="2">
|
||||
<opt>none</opt>
|
||||
<opt>h0</opt>
|
||||
<opt>h1</opt>
|
||||
</mod>
|
||||
<mod name="widen1" size="2">
|
||||
<opt>none</opt>
|
||||
<opt>h0</opt>
|
||||
<opt>h1</opt>
|
||||
</mod>
|
||||
<mod name="abs1" start="6" size="1" opt="abs"/>
|
||||
<mod name="neg0" start="7" size="1" opt="neg"/>
|
||||
<mod name="neg1" start="8" size="1" opt="neg"/>
|
||||
<mod name="abs0" start="12" size="1" opt="abs"/>
|
||||
<mod name="cmpf" start="13" size="3">
|
||||
<opt>eq</opt>
|
||||
<opt>gt</opt>
|
||||
<opt>ge</opt>
|
||||
<opt>ne</opt>
|
||||
<opt>lt</opt>
|
||||
<opt>le</opt>
|
||||
<opt>gtlt</opt>
|
||||
<opt>total</opt>
|
||||
</mod>
|
||||
<mod name="result_type" start="16" size="2" default="i1">
|
||||
<opt>i1</opt>
|
||||
<opt>f1</opt>
|
||||
<opt>m1</opt>
|
||||
</mod>
|
||||
</ins>
|
||||
|
||||
<ins name="*FCMP_AND.v2f16" pseudo="true">
|
||||
<src start="0" mask="0xfb"/>
|
||||
<src start="3" mask="0xfb"/>
|
||||
<src start="6" mask="0xfb"/>
|
||||
<mod name="abs0" size="1" opt="abs"/>
|
||||
<mod name="abs1" size="1" opt="abs"/>
|
||||
<mod name="cmpf" size="3">
|
||||
<opt>eq</opt>
|
||||
<opt>gt</opt>
|
||||
<opt>ge</opt>
|
||||
<opt>ne</opt>
|
||||
<opt>lt</opt>
|
||||
<opt>le</opt>
|
||||
<opt>gtlt</opt>
|
||||
<opt>total</opt>
|
||||
</mod>
|
||||
<mod name="neg0" start="7" size="1" opt="neg"/>
|
||||
<mod name="neg1" start="8" size="1" opt="neg"/>
|
||||
<mod name="swz0" start="9" size="2" default="h01">
|
||||
<opt>h00</opt>
|
||||
<opt>h10</opt>
|
||||
<opt>h01</opt>
|
||||
<opt>h11</opt>
|
||||
</mod>
|
||||
<mod name="swz1" start="11" size="2" default="h01">
|
||||
<opt>h00</opt>
|
||||
<opt>h10</opt>
|
||||
<opt>h01</opt>
|
||||
<opt>h11</opt>
|
||||
</mod>
|
||||
<mod name="result_type" start="16" size="2" default="i1">
|
||||
<opt>i1</opt>
|
||||
<opt>f1</opt>
|
||||
<opt>m1</opt>
|
||||
</mod>
|
||||
</ins>
|
||||
|
||||
<ins name="+ICMP_MULTI.s32" pseudo="true">
|
||||
<src start="0"/>
|
||||
<src start="3"/>
|
||||
<src start="6"/>
|
||||
<mod name="result_type" start="10" size="1" default="i1">
|
||||
<opt>i1</opt>
|
||||
<opt>m1</opt>
|
||||
</mod>
|
||||
<mod name="cmpf" size="2">
|
||||
<opt>eq</opt>
|
||||
<opt>ne</opt>
|
||||
<opt>gt</opt>
|
||||
<opt>ge</opt>
|
||||
<opt>lt</opt>
|
||||
<opt>le</opt>
|
||||
</mod>
|
||||
</ins>
|
||||
|
||||
<ins name="+ICMP_MULTI.u32" pseudo="true">
|
||||
<src start="0"/>
|
||||
<src start="3"/>
|
||||
<src start="6"/>
|
||||
<mod name="result_type" start="10" size="1" default="i1">
|
||||
<opt>i1</opt>
|
||||
<opt>m1</opt>
|
||||
</mod>
|
||||
<mod name="cmpf" size="2">
|
||||
<opt>eq</opt>
|
||||
<opt>ne</opt>
|
||||
<opt>gt</opt>
|
||||
<opt>ge</opt>
|
||||
<opt>lt</opt>
|
||||
<opt>le</opt>
|
||||
</mod>
|
||||
</ins>
|
||||
|
||||
<ins name="+ICMP_OR.s32" pseudo="true">
|
||||
<src start="0"/>
|
||||
<src start="3"/>
|
||||
<src start="6"/>
|
||||
<mod name="result_type" start="10" size="1" default="i1">
|
||||
<opt>i1</opt>
|
||||
<opt>m1</opt>
|
||||
</mod>
|
||||
<mod name="cmpf" size="2">
|
||||
<opt>eq</opt>
|
||||
<opt>ne</opt>
|
||||
<opt>gt</opt>
|
||||
<opt>ge</opt>
|
||||
<opt>lt</opt>
|
||||
<opt>le</opt>
|
||||
</mod>
|
||||
</ins>
|
||||
|
||||
<ins name="+ICMP_OR.u32" pseudo="true">
|
||||
<src start="0"/>
|
||||
<src start="3"/>
|
||||
<src start="6"/>
|
||||
<mod name="result_type" start="10" size="1" default="i1">
|
||||
<opt>i1</opt>
|
||||
<opt>m1</opt>
|
||||
</mod>
|
||||
<mod name="cmpf" size="2">
|
||||
<opt>eq</opt>
|
||||
<opt>ne</opt>
|
||||
<opt>gt</opt>
|
||||
<opt>ge</opt>
|
||||
<opt>lt</opt>
|
||||
<opt>le</opt>
|
||||
</mod>
|
||||
</ins>
|
||||
|
||||
<ins name="+ICMP_OR.v2s16" pseudo="true">
|
||||
<src start="0"/>
|
||||
<src start="3"/>
|
||||
<src start="6"/>
|
||||
<mod name="swz0" start="6" size="2" default="h01">
|
||||
<opt>h00</opt>
|
||||
<opt>h10</opt>
|
||||
<opt>h01</opt>
|
||||
<opt>h11</opt>
|
||||
</mod>
|
||||
<mod name="swz1" start="8" size="2" default="h01">
|
||||
<opt>h00</opt>
|
||||
<opt>h10</opt>
|
||||
<opt>h01</opt>
|
||||
<opt>h11</opt>
|
||||
</mod>
|
||||
<mod name="result_type" start="10" size="1" default="i1">
|
||||
<opt>i1</opt>
|
||||
<opt>m1</opt>
|
||||
</mod>
|
||||
<mod name="cmpf" size="2">
|
||||
<opt>eq</opt>
|
||||
<opt>ne</opt>
|
||||
<opt>gt</opt>
|
||||
<opt>ge</opt>
|
||||
<opt>lt</opt>
|
||||
<opt>le</opt>
|
||||
</mod>
|
||||
</ins>
|
||||
|
||||
<ins name="+ICMP_OR.v2u16" pseudo="true">
|
||||
<src start="0"/>
|
||||
<src start="3"/>
|
||||
<src start="6"/>
|
||||
<mod name="swz0" start="6" size="2" default="h01">
|
||||
<opt>h00</opt>
|
||||
<opt>h10</opt>
|
||||
<opt>h01</opt>
|
||||
<opt>h11</opt>
|
||||
</mod>
|
||||
<mod name="swz1" start="8" size="2" default="h01">
|
||||
<opt>h00</opt>
|
||||
<opt>h10</opt>
|
||||
<opt>h01</opt>
|
||||
<opt>h11</opt>
|
||||
</mod>
|
||||
<mod name="result_type" start="10" size="1" default="i1">
|
||||
<opt>i1</opt>
|
||||
<opt>m1</opt>
|
||||
</mod>
|
||||
<mod name="cmpf" size="2">
|
||||
<opt>eq</opt>
|
||||
<opt>ne</opt>
|
||||
<opt>gt</opt>
|
||||
<opt>ge</opt>
|
||||
<opt>lt</opt>
|
||||
<opt>le</opt>
|
||||
</mod>
|
||||
</ins>
|
||||
|
||||
<ins name="+ICMP_OR.v4s8" pseudo="true">
|
||||
<src start="0"/>
|
||||
<src start="3"/>
|
||||
<src start="6"/>
|
||||
<mod name="result_type" start="10" size="1" default="i1">
|
||||
<opt>i1</opt>
|
||||
<opt>m1</opt>
|
||||
</mod>
|
||||
<mod name="cmpf" size="2">
|
||||
<opt>eq</opt>
|
||||
<opt>ne</opt>
|
||||
<opt>gt</opt>
|
||||
<opt>ge</opt>
|
||||
<opt>lt</opt>
|
||||
<opt>le</opt>
|
||||
</mod>
|
||||
<derived start="6" size="1">
|
||||
<eq left="cmpf" right="#gt"/>
|
||||
<eq left="cmpf" right="#ge"/>
|
||||
</derived>
|
||||
</ins>
|
||||
|
||||
<ins name="+ICMP_OR.v4u8" pseudo="true">
|
||||
<src start="0"/>
|
||||
<src start="3"/>
|
||||
<src start="6"/>
|
||||
<mod name="result_type" start="10" size="1" default="i1">
|
||||
<opt>i1</opt>
|
||||
<opt>m1</opt>
|
||||
</mod>
|
||||
<mod name="cmpf" size="2">
|
||||
<opt>eq</opt>
|
||||
<opt>ne</opt>
|
||||
<opt>gt</opt>
|
||||
<opt>ge</opt>
|
||||
<opt>lt</opt>
|
||||
<opt>le</opt>
|
||||
</mod>
|
||||
</ins>
|
||||
|
||||
<ins name="+ICMP_AND.s32" pseudo="true">
|
||||
<src start="0"/>
|
||||
<src start="3"/>
|
||||
<src start="6"/>
|
||||
<mod name="result_type" start="10" size="1" default="i1">
|
||||
<opt>i1</opt>
|
||||
<opt>m1</opt>
|
||||
</mod>
|
||||
<mod name="cmpf" size="2">
|
||||
<opt>eq</opt>
|
||||
<opt>ne</opt>
|
||||
<opt>gt</opt>
|
||||
<opt>ge</opt>
|
||||
<opt>lt</opt>
|
||||
<opt>le</opt>
|
||||
</mod>
|
||||
</ins>
|
||||
|
||||
<ins name="+ICMP_AND.u32" pseudo="true">
|
||||
<src start="0"/>
|
||||
<src start="3"/>
|
||||
<src start="6"/>
|
||||
<mod name="result_type" start="10" size="1" default="i1">
|
||||
<opt>i1</opt>
|
||||
<opt>m1</opt>
|
||||
</mod>
|
||||
<mod name="cmpf" size="2">
|
||||
<opt>eq</opt>
|
||||
<opt>ne</opt>
|
||||
<opt>gt</opt>
|
||||
<opt>ge</opt>
|
||||
<opt>lt</opt>
|
||||
<opt>le</opt>
|
||||
</mod>
|
||||
</ins>
|
||||
|
||||
<ins name="+ICMP_AND.v2s16" pseudo="true">
|
||||
<src start="0"/>
|
||||
<src start="3"/>
|
||||
<src start="6"/>
|
||||
<mod name="swz0" start="6" size="2" default="h01">
|
||||
<opt>h00</opt>
|
||||
<opt>h10</opt>
|
||||
<opt>h01</opt>
|
||||
<opt>h11</opt>
|
||||
</mod>
|
||||
<mod name="swz1" start="8" size="2" default="h01">
|
||||
<opt>h00</opt>
|
||||
<opt>h10</opt>
|
||||
<opt>h01</opt>
|
||||
<opt>h11</opt>
|
||||
</mod>
|
||||
<mod name="result_type" start="10" size="1" default="i1">
|
||||
<opt>i1</opt>
|
||||
<opt>m1</opt>
|
||||
</mod>
|
||||
<mod name="cmpf" size="2">
|
||||
<opt>eq</opt>
|
||||
<opt>ne</opt>
|
||||
<opt>gt</opt>
|
||||
<opt>ge</opt>
|
||||
<opt>lt</opt>
|
||||
<opt>le</opt>
|
||||
</mod>
|
||||
</ins>
|
||||
|
||||
<ins name="+ICMP_AND.v2u16" pseudo="true">
|
||||
<src start="0"/>
|
||||
<src start="3"/>
|
||||
<src start="6"/>
|
||||
<mod name="swz0" start="6" size="2" default="h01">
|
||||
<opt>h00</opt>
|
||||
<opt>h10</opt>
|
||||
<opt>h01</opt>
|
||||
<opt>h11</opt>
|
||||
</mod>
|
||||
<mod name="swz1" start="8" size="2" default="h01">
|
||||
<opt>h00</opt>
|
||||
<opt>h10</opt>
|
||||
<opt>h01</opt>
|
||||
<opt>h11</opt>
|
||||
</mod>
|
||||
<mod name="result_type" start="10" size="1" default="i1">
|
||||
<opt>i1</opt>
|
||||
<opt>m1</opt>
|
||||
</mod>
|
||||
<mod name="cmpf" size="2">
|
||||
<opt>eq</opt>
|
||||
<opt>ne</opt>
|
||||
<opt>gt</opt>
|
||||
<opt>ge</opt>
|
||||
<opt>lt</opt>
|
||||
<opt>le</opt>
|
||||
</mod>
|
||||
</ins>
|
||||
|
||||
<ins name="+ICMP_AND.v4s8" pseudo="true">
|
||||
<src start="0"/>
|
||||
<src start="3"/>
|
||||
<src start="6"/>
|
||||
<mod name="result_type" start="10" size="1" default="i1">
|
||||
<opt>i1</opt>
|
||||
<opt>m1</opt>
|
||||
</mod>
|
||||
<mod name="cmpf" size="2">
|
||||
<opt>eq</opt>
|
||||
<opt>ne</opt>
|
||||
<opt>gt</opt>
|
||||
<opt>ge</opt>
|
||||
<opt>lt</opt>
|
||||
<opt>le</opt>
|
||||
</mod>
|
||||
<derived start="6" size="1">
|
||||
<eq left="cmpf" right="#gt"/>
|
||||
<eq left="cmpf" right="#ge"/>
|
||||
</derived>
|
||||
</ins>
|
||||
|
||||
<ins name="+ICMP_AND.v4u8" pseudo="true">
|
||||
<src start="0"/>
|
||||
<src start="3"/>
|
||||
<src start="6"/>
|
||||
<mod name="result_type" start="10" size="1" default="i1">
|
||||
<opt>i1</opt>
|
||||
<opt>m1</opt>
|
||||
</mod>
|
||||
<mod name="cmpf" size="2">
|
||||
<opt>eq</opt>
|
||||
<opt>ne</opt>
|
||||
<opt>gt</opt>
|
||||
<opt>ge</opt>
|
||||
<opt>lt</opt>
|
||||
<opt>le</opt>
|
||||
</mod>
|
||||
</ins>
|
||||
|
||||
</bifrost>
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue