xref: /aosp_15_r20/external/mesa3d/src/panfrost/compiler/valhall/ISA.xml (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1*61046927SAndroid Build Coastguard Worker<!--
2*61046927SAndroid Build Coastguard Worker  Copyright (C) 2021 Collabora Ltd.
3*61046927SAndroid Build Coastguard Worker
4*61046927SAndroid Build Coastguard Worker  Permission is hereby granted, free of charge, to any person obtaining a
5*61046927SAndroid Build Coastguard Worker  copy of this software and associated documentation files (the "Software"),
6*61046927SAndroid Build Coastguard Worker  to deal in the Software without restriction, including without limitation
7*61046927SAndroid Build Coastguard Worker  the rights to use, copy, modify, merge, publish, distribute, sublicense,
8*61046927SAndroid Build Coastguard Worker  and/or sell copies of the Software, and to permit persons to whom the
9*61046927SAndroid Build Coastguard Worker  Software is furnished to do so, subject to the following conditions:
10*61046927SAndroid Build Coastguard Worker
11*61046927SAndroid Build Coastguard Worker  The above copyright notice and this permission notice (including the next
12*61046927SAndroid Build Coastguard Worker  paragraph) shall be included in all copies or substantial portions of the
13*61046927SAndroid Build Coastguard Worker  Software.
14*61046927SAndroid Build Coastguard Worker
15*61046927SAndroid Build Coastguard Worker  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16*61046927SAndroid Build Coastguard Worker  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17*61046927SAndroid Build Coastguard Worker  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18*61046927SAndroid Build Coastguard Worker  THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19*61046927SAndroid Build Coastguard Worker  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20*61046927SAndroid Build Coastguard Worker  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21*61046927SAndroid Build Coastguard Worker  SOFTWARE.
22*61046927SAndroid Build Coastguard Worker-->
23*61046927SAndroid Build Coastguard Worker
24*61046927SAndroid Build Coastguard Worker<valhall>
25*61046927SAndroid Build Coastguard Worker  <lut name="Immediates">
26*61046927SAndroid Build Coastguard Worker    <desc>
27*61046927SAndroid Build Coastguard Worker      This immediates are accessible in (almost) any instruction, provided the
28*61046927SAndroid Build Coastguard Worker      immediate mode is kept to the default. They optimize for the most common
29*61046927SAndroid Build Coastguard Worker      immediate values; any immediate listed here may be used without taking up
30*61046927SAndroid Build Coastguard Worker      a uniform slot or a register. Most integer instructions can access
31*61046927SAndroid Build Coastguard Worker      separate half-words and individual bytes via swizzles on the source.
32*61046927SAndroid Build Coastguard Worker    </desc>
33*61046927SAndroid Build Coastguard Worker    <constant desc="Zero">0x00000000</constant>
34*61046927SAndroid Build Coastguard Worker    <constant desc="All ones; integer $-1$">0xFFFFFFFF</constant>
35*61046927SAndroid Build Coastguard Worker    <constant desc="Maximum integer; floating-point NaN">0x7FFFFFFF</constant>
36*61046927SAndroid Build Coastguard Worker    <constant desc="Integers $(-2, -3, -4, -6)$">0xFAFCFDFE</constant>
37*61046927SAndroid Build Coastguard Worker    <constant desc="16-bit integer $2^8$">0x01000000</constant>
38*61046927SAndroid Build Coastguard Worker    <constant desc="Multiples of 16 $(0, 32, 0, 128)$">0x80002000</constant>
39*61046927SAndroid Build Coastguard Worker    <constant desc="Multiples of 16 $(48, 80, 96, 112)$">0x70605030</constant>
40*61046927SAndroid Build Coastguard Worker    <constant desc="Multiples of 16 $(144, 160, 176, 192)$">0xC0B0A090</constant>
41*61046927SAndroid Build Coastguard Worker    <constant desc="Integers $(0, 1, 2, 3)$">0x03020100</constant>
42*61046927SAndroid Build Coastguard Worker    <constant desc="Integers $(4, 5, 6, 7)$">0x07060504</constant>
43*61046927SAndroid Build Coastguard Worker    <constant desc="Integers $(8, 9, 10, 11)$">0x0B0A0908</constant>
44*61046927SAndroid Build Coastguard Worker    <constant desc="Integers $(12, 13, 14, 15)$">0x0F0E0D0C</constant>
45*61046927SAndroid Build Coastguard Worker    <constant desc="Integers $(16, 17, 18, 19)$">0x13121110</constant>
46*61046927SAndroid Build Coastguard Worker    <constant desc="Integers $(20, 21, 22, 23)$">0x17161514</constant>
47*61046927SAndroid Build Coastguard Worker    <constant desc="Integers $(24, 25, 26, 27)$">0x1B1A1918</constant>
48*61046927SAndroid Build Coastguard Worker    <constant desc="Integers $(28, 29, 30, 31)$">0x1F1E1D1C</constant>
49*61046927SAndroid Build Coastguard Worker    <constant desc="Float $1.0$">0x3F800000</constant>
50*61046927SAndroid Build Coastguard Worker    <constant desc="Float $0.1$">0x3DCCCCCD</constant>
51*61046927SAndroid Build Coastguard Worker    <constant desc="Float $1 / \pi$">0x3EA2F983</constant>
52*61046927SAndroid Build Coastguard Worker    <constant desc="Float $\log(2)$">0x3F317218</constant>
53*61046927SAndroid Build Coastguard Worker    <constant desc="Float $\pi$">0x40490FDB</constant>
54*61046927SAndroid Build Coastguard Worker    <constant desc="Float $0.0$">0x00000000</constant>
55*61046927SAndroid Build Coastguard Worker    <constant desc="Float $65535.0 = 2^{16} - 1$">0x477FFF00</constant>
56*61046927SAndroid Build Coastguard Worker    <constant desc="Half-float $(255.0, 256.0) = (2^8 - 1, 2^8)$">0x5C005BF8</constant>
57*61046927SAndroid Build Coastguard Worker    <constant desc="Half-float $0.1 = 1 / 10$">0x2E660000</constant>
58*61046927SAndroid Build Coastguard Worker    <constant desc="Half-float $0.25 = 2^{-2}$">0x34000000</constant>
59*61046927SAndroid Build Coastguard Worker    <constant desc="Half-float $0.5 = 2^{-1}$">0x38000000</constant>
60*61046927SAndroid Build Coastguard Worker    <constant desc="Half-float $1.0 = 2^0$">0x3C000000</constant>
61*61046927SAndroid Build Coastguard Worker    <constant desc="Half-float $2.0 = 2^1$">0x40000000</constant>
62*61046927SAndroid Build Coastguard Worker    <constant desc="Half-float $4.0 = 2^2$">0x44000000</constant>
63*61046927SAndroid Build Coastguard Worker    <constant desc="Half-float $8.0 = 2^3$">0x48000000</constant>
64*61046927SAndroid Build Coastguard Worker    <constant desc="Half-float $\pi$">0x42480000</constant>
65*61046927SAndroid Build Coastguard Worker  </lut>
66*61046927SAndroid Build Coastguard Worker
67*61046927SAndroid Build Coastguard Worker  <enum name="Flow">
68*61046927SAndroid Build Coastguard Worker    <desc>
69*61046927SAndroid Build Coastguard Worker      Every Valhall instruction can wait on dependency
70*61046927SAndroid Build Coastguard Worker      slots. A few special flows are available, specified in the instruction
71*61046927SAndroid Build Coastguard Worker      metadata from this enum. The `wait0126` flow is required to wait on
72*61046927SAndroid Build Coastguard Worker      dependency slot #6 and should be set on the instruction immediately
73*61046927SAndroid Build Coastguard Worker      preceding `ATEST`. The `wait` flow should be set for barriers.
74*61046927SAndroid Build Coastguard Worker      The `discard` flow only applies to fragment shaders and is used to
75*61046927SAndroid Build Coastguard Worker      terminate helper invocations, it should be set as early as possible after
76*61046927SAndroid Build Coastguard Worker      helper invocations are no longer needed as determined by data flow
77*61046927SAndroid Build Coastguard Worker      analysis. The `end` flow is used to terminate the shader, although it
78*61046927SAndroid Build Coastguard Worker      may be overloaded by the `BLEND` instruction.
79*61046927SAndroid Build Coastguard Worker
80*61046927SAndroid Build Coastguard Worker      The `reconverge` flow is required on any instruction immediately
81*61046927SAndroid Build Coastguard Worker      preceding a possible change to the mask of active threads in a subgroup.
82*61046927SAndroid Build Coastguard Worker      This includes all divergent branches, but it also includes the final
83*61046927SAndroid Build Coastguard Worker      instruction at the end of any basic block where the immediate successor
84*61046927SAndroid Build Coastguard Worker      (fallthrough) is the target of a divergent branch.
85*61046927SAndroid Build Coastguard Worker    </desc>
86*61046927SAndroid Build Coastguard Worker    <value name="None" default="true">none</value>
87*61046927SAndroid Build Coastguard Worker    <value name="Wait on slot 0">wait0</value>
88*61046927SAndroid Build Coastguard Worker    <value name="Wait on slot 1">wait1</value>
89*61046927SAndroid Build Coastguard Worker    <value name="Wait on slots 0, 1">wait01</value>
90*61046927SAndroid Build Coastguard Worker    <value name="Wait on slot 2">wait2</value>
91*61046927SAndroid Build Coastguard Worker    <value name="Wait on slots 0, 2">wait02</value>
92*61046927SAndroid Build Coastguard Worker    <value name="Wait on slots 1, 2">wait12</value>
93*61046927SAndroid Build Coastguard Worker    <value name="Wait on slots 0, 1, 2">wait012</value>
94*61046927SAndroid Build Coastguard Worker    <value name="Wait on slots 0, 1, 2, 6">wait0126</value>
95*61046927SAndroid Build Coastguard Worker    <value name="Wait on slots 0, 1, 2, 6, 7">wait</value>
96*61046927SAndroid Build Coastguard Worker    <value name="Perform branch reconverge">reconverge</value>
97*61046927SAndroid Build Coastguard Worker    <reserved/>
98*61046927SAndroid Build Coastguard Worker    <reserved/>
99*61046927SAndroid Build Coastguard Worker    <value name="Terminate discarded threads">discard</value>
100*61046927SAndroid Build Coastguard Worker    <reserved/>
101*61046927SAndroid Build Coastguard Worker    <value name="Return from shader">end</value>
102*61046927SAndroid Build Coastguard Worker  </enum>
103*61046927SAndroid Build Coastguard Worker
104*61046927SAndroid Build Coastguard Worker  <enum name="FAU special page 0">
105*61046927SAndroid Build Coastguard Worker    <desc>
106*61046927SAndroid Build Coastguard Worker      Situated between the immediates hard-coded in the hardware and the
107*61046927SAndroid Build Coastguard Worker      uniforms defined purely in software, Valhall has a some special
108*61046927SAndroid Build Coastguard Worker      "constants" passing through data structures. These are encoded like the
109*61046927SAndroid Build Coastguard Worker      table of immediates, as if special constant $i$ were lookup table entry
110*61046927SAndroid Build Coastguard Worker      $32 + i$.
111*61046927SAndroid Build Coastguard Worker    </desc>
112*61046927SAndroid Build Coastguard Worker    <reserved/>
113*61046927SAndroid Build Coastguard Worker    <reserved/>
114*61046927SAndroid Build Coastguard Worker    <value desc="Warp ID and warps/core - 1">warp_id</value>
115*61046927SAndroid Build Coastguard Worker    <reserved/>
116*61046927SAndroid Build Coastguard Worker    <value desc="Bounding box maximum X/Y">framebuffer_size</value>
117*61046927SAndroid Build Coastguard Worker    <value desc="ATEST datum">atest_datum</value>
118*61046927SAndroid Build Coastguard Worker    <value desc="Sample positions">sample</value>
119*61046927SAndroid Build Coastguard Worker    <reserved/>
120*61046927SAndroid Build Coastguard Worker    <value desc="Blend descriptor 0">blend_descriptor_0</value>
121*61046927SAndroid Build Coastguard Worker    <value desc="Blend descriptor 1">blend_descriptor_1</value>
122*61046927SAndroid Build Coastguard Worker    <value desc="Blend descriptor 2">blend_descriptor_2</value>
123*61046927SAndroid Build Coastguard Worker    <value desc="Blend descriptor 3">blend_descriptor_3</value>
124*61046927SAndroid Build Coastguard Worker    <value desc="Blend descriptor 4">blend_descriptor_4</value>
125*61046927SAndroid Build Coastguard Worker    <value desc="Blend descriptor 5">blend_descriptor_5</value>
126*61046927SAndroid Build Coastguard Worker    <value desc="Blend descriptor 6">blend_descriptor_6</value>
127*61046927SAndroid Build Coastguard Worker    <value desc="Blend descriptor 7">blend_descriptor_7</value>
128*61046927SAndroid Build Coastguard Worker  </enum>
129*61046927SAndroid Build Coastguard Worker
130*61046927SAndroid Build Coastguard Worker  <enum name="FAU special page 1">
131*61046927SAndroid Build Coastguard Worker    <desc>
132*61046927SAndroid Build Coastguard Worker      Situated between the immediates hard-coded in the hardware and the
133*61046927SAndroid Build Coastguard Worker      uniforms defined purely in software, Valhall has a some special
134*61046927SAndroid Build Coastguard Worker      "constants" passing through data structures. These are encoded like the
135*61046927SAndroid Build Coastguard Worker      table of immediates, as if special constant $i$ were lookup table entry
136*61046927SAndroid Build Coastguard Worker      $32 + i$.
137*61046927SAndroid Build Coastguard Worker    </desc>
138*61046927SAndroid Build Coastguard Worker    <reserved/>
139*61046927SAndroid Build Coastguard Worker    <value desc="Thread local storage base pointer">thread_local_pointer</value>
140*61046927SAndroid Build Coastguard Worker    <reserved/>
141*61046927SAndroid Build Coastguard Worker    <value desc="Workgroup local storage base pointer">workgroup_local_pointer</value>
142*61046927SAndroid Build Coastguard Worker    <reserved/>
143*61046927SAndroid Build Coastguard Worker    <reserved/>
144*61046927SAndroid Build Coastguard Worker    <reserved/>
145*61046927SAndroid Build Coastguard Worker    <value desc="Shader resource table base pointer">resource_table_pointer</value>
146*61046927SAndroid Build Coastguard Worker    <reserved/>
147*61046927SAndroid Build Coastguard Worker    <reserved/>
148*61046927SAndroid Build Coastguard Worker    <reserved/>
149*61046927SAndroid Build Coastguard Worker    <reserved/>
150*61046927SAndroid Build Coastguard Worker    <reserved/>
151*61046927SAndroid Build Coastguard Worker    <reserved/>
152*61046927SAndroid Build Coastguard Worker    <reserved/>
153*61046927SAndroid Build Coastguard Worker    <reserved/>
154*61046927SAndroid Build Coastguard Worker  </enum>
155*61046927SAndroid Build Coastguard Worker
156*61046927SAndroid Build Coastguard Worker  <enum name="FAU special page 3">
157*61046927SAndroid Build Coastguard Worker    <desc>
158*61046927SAndroid Build Coastguard Worker      Situated between the immediates hard-coded in the hardware and the
159*61046927SAndroid Build Coastguard Worker      uniforms defined purely in software, Valhall has a some special
160*61046927SAndroid Build Coastguard Worker      "constants" passing through data structures. These are encoded like the
161*61046927SAndroid Build Coastguard Worker      table of immediates, as if special constant $i$ were lookup table entry
162*61046927SAndroid Build Coastguard Worker      $32 + i$.
163*61046927SAndroid Build Coastguard Worker    </desc>
164*61046927SAndroid Build Coastguard Worker    <reserved/>
165*61046927SAndroid Build Coastguard Worker    <value desc="Lane ID">lane_id</value>
166*61046927SAndroid Build Coastguard Worker    <reserved/>
167*61046927SAndroid Build Coastguard Worker    <value desc="Core ID">core_id</value>
168*61046927SAndroid Build Coastguard Worker    <reserved/>
169*61046927SAndroid Build Coastguard Worker    <reserved/>
170*61046927SAndroid Build Coastguard Worker    <reserved/>
171*61046927SAndroid Build Coastguard Worker    <reserved/>
172*61046927SAndroid Build Coastguard Worker    <reserved/>
173*61046927SAndroid Build Coastguard Worker    <reserved/>
174*61046927SAndroid Build Coastguard Worker    <reserved/>
175*61046927SAndroid Build Coastguard Worker    <reserved/>
176*61046927SAndroid Build Coastguard Worker    <reserved/>
177*61046927SAndroid Build Coastguard Worker    <reserved/>
178*61046927SAndroid Build Coastguard Worker    <reserved/>
179*61046927SAndroid Build Coastguard Worker    <value desc="Program counter">program_counter</value>
180*61046927SAndroid Build Coastguard Worker  </enum>
181*61046927SAndroid Build Coastguard Worker
182*61046927SAndroid Build Coastguard Worker  <enum name="Swizzles (8-bit)">
183*61046927SAndroid Build Coastguard Worker    <value default="true">b0123</value>
184*61046927SAndroid Build Coastguard Worker    <value>b3210</value>
185*61046927SAndroid Build Coastguard Worker    <value>b0101</value>
186*61046927SAndroid Build Coastguard Worker    <value>b2323</value>
187*61046927SAndroid Build Coastguard Worker    <value>b0000</value>
188*61046927SAndroid Build Coastguard Worker    <value>b1111</value>
189*61046927SAndroid Build Coastguard Worker    <value>b2222</value>
190*61046927SAndroid Build Coastguard Worker    <value>b3333</value>
191*61046927SAndroid Build Coastguard Worker    <value>b2301</value>
192*61046927SAndroid Build Coastguard Worker    <value>b1032</value>
193*61046927SAndroid Build Coastguard Worker    <value>b0011</value>
194*61046927SAndroid Build Coastguard Worker    <value>b2233</value>
195*61046927SAndroid Build Coastguard Worker    <reserved/>
196*61046927SAndroid Build Coastguard Worker    <reserved/>
197*61046927SAndroid Build Coastguard Worker    <reserved/>
198*61046927SAndroid Build Coastguard Worker    <reserved/>
199*61046927SAndroid Build Coastguard Worker  </enum>
200*61046927SAndroid Build Coastguard Worker
201*61046927SAndroid Build Coastguard Worker  <enum name="Lanes (8-bit)">
202*61046927SAndroid Build Coastguard Worker    <desc>Used to select the 2 bytes for shifts of 16-bit vectors</desc>
203*61046927SAndroid Build Coastguard Worker    <value>b02</value>
204*61046927SAndroid Build Coastguard Worker    <reserved/>
205*61046927SAndroid Build Coastguard Worker    <reserved/>
206*61046927SAndroid Build Coastguard Worker    <reserved/>
207*61046927SAndroid Build Coastguard Worker    <value>b00</value>
208*61046927SAndroid Build Coastguard Worker    <value>b11</value>
209*61046927SAndroid Build Coastguard Worker    <value>b22</value>
210*61046927SAndroid Build Coastguard Worker    <value>b33</value>
211*61046927SAndroid Build Coastguard Worker    <reserved/>
212*61046927SAndroid Build Coastguard Worker    <reserved/>
213*61046927SAndroid Build Coastguard Worker    <value>b01</value>
214*61046927SAndroid Build Coastguard Worker    <value>b23</value>
215*61046927SAndroid Build Coastguard Worker    <reserved/>
216*61046927SAndroid Build Coastguard Worker    <reserved/>
217*61046927SAndroid Build Coastguard Worker    <reserved/>
218*61046927SAndroid Build Coastguard Worker    <reserved/>
219*61046927SAndroid Build Coastguard Worker  </enum>
220*61046927SAndroid Build Coastguard Worker
221*61046927SAndroid Build Coastguard Worker  <enum name="Half-swizzles (8-bit)">
222*61046927SAndroid Build Coastguard Worker    <desc>
223*61046927SAndroid Build Coastguard Worker      Used to select the 2 bytes to convert for conversions from 8-bit vectors
224*61046927SAndroid Build Coastguard Worker      to 16-bit vectors
225*61046927SAndroid Build Coastguard Worker    </desc>
226*61046927SAndroid Build Coastguard Worker    <value>b00</value>
227*61046927SAndroid Build Coastguard Worker    <value>b10</value>
228*61046927SAndroid Build Coastguard Worker    <value>b20</value>
229*61046927SAndroid Build Coastguard Worker    <value>b30</value>
230*61046927SAndroid Build Coastguard Worker    <value>b01</value>
231*61046927SAndroid Build Coastguard Worker    <value>b11</value>
232*61046927SAndroid Build Coastguard Worker    <value>b21</value>
233*61046927SAndroid Build Coastguard Worker    <value>b31</value>
234*61046927SAndroid Build Coastguard Worker    <value>b02</value>
235*61046927SAndroid Build Coastguard Worker    <value>b12</value>
236*61046927SAndroid Build Coastguard Worker    <value>b22</value>
237*61046927SAndroid Build Coastguard Worker    <value>b32</value>
238*61046927SAndroid Build Coastguard Worker    <value>b03</value>
239*61046927SAndroid Build Coastguard Worker    <value>b13</value>
240*61046927SAndroid Build Coastguard Worker    <value>b23</value>
241*61046927SAndroid Build Coastguard Worker    <value>b33</value>
242*61046927SAndroid Build Coastguard Worker  </enum>
243*61046927SAndroid Build Coastguard Worker
244*61046927SAndroid Build Coastguard Worker  <enum name="Swizzles (16-bit)">
245*61046927SAndroid Build Coastguard Worker    <value>h00</value> <!-- 0,2 -->
246*61046927SAndroid Build Coastguard Worker    <value>h10</value>
247*61046927SAndroid Build Coastguard Worker    <value default="true">h01</value>
248*61046927SAndroid Build Coastguard Worker    <value>h11</value>
249*61046927SAndroid Build Coastguard Worker    <value>b00</value> <!-- 0,0 -->
250*61046927SAndroid Build Coastguard Worker    <value>b20</value> <!-- 1,1 -->
251*61046927SAndroid Build Coastguard Worker    <value>b02</value> <!-- 2,2 -->
252*61046927SAndroid Build Coastguard Worker    <value>b22</value> <!-- 3,3 -->
253*61046927SAndroid Build Coastguard Worker    <value>b11</value>
254*61046927SAndroid Build Coastguard Worker    <value>b31</value>
255*61046927SAndroid Build Coastguard Worker    <value>b13</value> <!-- 0,1 -->
256*61046927SAndroid Build Coastguard Worker    <value>b33</value> <!-- 2,3 -->
257*61046927SAndroid Build Coastguard Worker    <value>b01</value>
258*61046927SAndroid Build Coastguard Worker    <value>b23</value>
259*61046927SAndroid Build Coastguard Worker    <reserved/>
260*61046927SAndroid Build Coastguard Worker    <reserved/>
261*61046927SAndroid Build Coastguard Worker  </enum>
262*61046927SAndroid Build Coastguard Worker
263*61046927SAndroid Build Coastguard Worker  <enum name="Swizzles (32-bit)">
264*61046927SAndroid Build Coastguard Worker    <value default="true">none</value>
265*61046927SAndroid Build Coastguard Worker    <reserved/>
266*61046927SAndroid Build Coastguard Worker    <value>h0</value>
267*61046927SAndroid Build Coastguard Worker    <value>h1</value>
268*61046927SAndroid Build Coastguard Worker    <value>b0</value>
269*61046927SAndroid Build Coastguard Worker    <value>b1</value>
270*61046927SAndroid Build Coastguard Worker    <value>b2</value>
271*61046927SAndroid Build Coastguard Worker    <value>b3</value>
272*61046927SAndroid Build Coastguard Worker  </enum>
273*61046927SAndroid Build Coastguard Worker
274*61046927SAndroid Build Coastguard Worker  <enum name="Swizzles (64-bit)">
275*61046927SAndroid Build Coastguard Worker    <value default="true">none</value>
276*61046927SAndroid Build Coastguard Worker    <reserved/>
277*61046927SAndroid Build Coastguard Worker    <value>h0</value>
278*61046927SAndroid Build Coastguard Worker    <value>h1</value>
279*61046927SAndroid Build Coastguard Worker    <value>b0</value>
280*61046927SAndroid Build Coastguard Worker    <value>b1</value>
281*61046927SAndroid Build Coastguard Worker    <value>b2</value>
282*61046927SAndroid Build Coastguard Worker    <value>b3</value>
283*61046927SAndroid Build Coastguard Worker    <value>w0</value>
284*61046927SAndroid Build Coastguard Worker    <reserved/>
285*61046927SAndroid Build Coastguard Worker    <reserved/>
286*61046927SAndroid Build Coastguard Worker    <reserved/>
287*61046927SAndroid Build Coastguard Worker    <reserved/>
288*61046927SAndroid Build Coastguard Worker    <reserved/>
289*61046927SAndroid Build Coastguard Worker    <reserved/>
290*61046927SAndroid Build Coastguard Worker    <reserved/>
291*61046927SAndroid Build Coastguard Worker  </enum>
292*61046927SAndroid Build Coastguard Worker
293*61046927SAndroid Build Coastguard Worker  <enum name="Lane (8-bit)" implied="true">
294*61046927SAndroid Build Coastguard Worker    <value>b0</value>
295*61046927SAndroid Build Coastguard Worker    <value>b1</value>
296*61046927SAndroid Build Coastguard Worker    <value>b2</value>
297*61046927SAndroid Build Coastguard Worker    <value>b3</value>
298*61046927SAndroid Build Coastguard Worker  </enum>
299*61046927SAndroid Build Coastguard Worker
300*61046927SAndroid Build Coastguard Worker  <enum name="Combine">
301*61046927SAndroid Build Coastguard Worker    <desc>
302*61046927SAndroid Build Coastguard Worker      Used for the lane select of `BRANCHZ`. To use an 8-bit condition, a
303*61046927SAndroid Build Coastguard Worker      separate `ICMP` is required to cast to 16-bit.
304*61046927SAndroid Build Coastguard Worker    </desc>
305*61046927SAndroid Build Coastguard Worker    <value default="true">none</value>
306*61046927SAndroid Build Coastguard Worker    <value>h0</value>
307*61046927SAndroid Build Coastguard Worker    <value>h1</value>
308*61046927SAndroid Build Coastguard Worker    <value>and</value>
309*61046927SAndroid Build Coastguard Worker    <value>lowbits</value>
310*61046927SAndroid Build Coastguard Worker  </enum>
311*61046927SAndroid Build Coastguard Worker
312*61046927SAndroid Build Coastguard Worker  <enum name="Lane (16-bit)" implied="true">
313*61046927SAndroid Build Coastguard Worker    <value>h0</value>
314*61046927SAndroid Build Coastguard Worker    <value>h1</value>
315*61046927SAndroid Build Coastguard Worker  </enum>
316*61046927SAndroid Build Coastguard Worker
317*61046927SAndroid Build Coastguard Worker  <enum name="Load lane (8-bit)">
318*61046927SAndroid Build Coastguard Worker    <value default="true">b0</value>
319*61046927SAndroid Build Coastguard Worker    <value>b1</value>
320*61046927SAndroid Build Coastguard Worker    <value>b2</value>
321*61046927SAndroid Build Coastguard Worker    <value>b3</value>
322*61046927SAndroid Build Coastguard Worker    <value desc="Zero-extend to 16-bit, low-half">h0</value>
323*61046927SAndroid Build Coastguard Worker    <value desc="Zero-extend to 16-bit, high-half">h1</value>
324*61046927SAndroid Build Coastguard Worker    <value desc="Zero-extend to 32-bit">w0</value>
325*61046927SAndroid Build Coastguard Worker    <value desc="Zero-extend to 64-bit">d0</value>
326*61046927SAndroid Build Coastguard Worker  </enum>
327*61046927SAndroid Build Coastguard Worker
328*61046927SAndroid Build Coastguard Worker  <enum name="Load lane (16-bit)">
329*61046927SAndroid Build Coastguard Worker    <value desc="Low half" default="true">h0</value>
330*61046927SAndroid Build Coastguard Worker    <value desc="High half">h1</value>
331*61046927SAndroid Build Coastguard Worker    <value desc="Zero-extend to 32-bit">w0</value>
332*61046927SAndroid Build Coastguard Worker    <value desc="Zero-extend to 64-bit">d0</value>
333*61046927SAndroid Build Coastguard Worker    <reserved/>
334*61046927SAndroid Build Coastguard Worker    <reserved/>
335*61046927SAndroid Build Coastguard Worker    <reserved/>
336*61046927SAndroid Build Coastguard Worker    <reserved/>
337*61046927SAndroid Build Coastguard Worker  </enum>
338*61046927SAndroid Build Coastguard Worker
339*61046927SAndroid Build Coastguard Worker  <enum name="Load lane (24-bit)" implied="true">
340*61046927SAndroid Build Coastguard Worker    <value default="true">identity</value>
341*61046927SAndroid Build Coastguard Worker    <reserved/>
342*61046927SAndroid Build Coastguard Worker    <reserved/>
343*61046927SAndroid Build Coastguard Worker    <reserved/>
344*61046927SAndroid Build Coastguard Worker    <reserved/>
345*61046927SAndroid Build Coastguard Worker    <reserved/>
346*61046927SAndroid Build Coastguard Worker    <reserved/>
347*61046927SAndroid Build Coastguard Worker  </enum>
348*61046927SAndroid Build Coastguard Worker
349*61046927SAndroid Build Coastguard Worker  <enum name="Load lane (32-bit)">
350*61046927SAndroid Build Coastguard Worker    <value default="true">w0</value>
351*61046927SAndroid Build Coastguard Worker    <value desc="Zero-extend to 64-bit">d0</value>
352*61046927SAndroid Build Coastguard Worker    <reserved/>
353*61046927SAndroid Build Coastguard Worker    <reserved/>
354*61046927SAndroid Build Coastguard Worker    <reserved/>
355*61046927SAndroid Build Coastguard Worker    <reserved/>
356*61046927SAndroid Build Coastguard Worker    <reserved/>
357*61046927SAndroid Build Coastguard Worker    <reserved/>
358*61046927SAndroid Build Coastguard Worker  </enum>
359*61046927SAndroid Build Coastguard Worker
360*61046927SAndroid Build Coastguard Worker  <enum name="Load lane (48-bit)">
361*61046927SAndroid Build Coastguard Worker    <reserved/>
362*61046927SAndroid Build Coastguard Worker    <reserved/>
363*61046927SAndroid Build Coastguard Worker    <reserved/>
364*61046927SAndroid Build Coastguard Worker    <reserved/>
365*61046927SAndroid Build Coastguard Worker    <value default="true">identity</value>
366*61046927SAndroid Build Coastguard Worker    <reserved/>
367*61046927SAndroid Build Coastguard Worker    <reserved/>
368*61046927SAndroid Build Coastguard Worker    <reserved/>
369*61046927SAndroid Build Coastguard Worker  </enum>
370*61046927SAndroid Build Coastguard Worker
371*61046927SAndroid Build Coastguard Worker  <enum name="Load lane (64-bit)">
372*61046927SAndroid Build Coastguard Worker    <reserved/>
373*61046927SAndroid Build Coastguard Worker    <reserved/>
374*61046927SAndroid Build Coastguard Worker    <reserved/>
375*61046927SAndroid Build Coastguard Worker    <reserved/>
376*61046927SAndroid Build Coastguard Worker    <reserved/>
377*61046927SAndroid Build Coastguard Worker    <reserved/>
378*61046927SAndroid Build Coastguard Worker    <reserved/>
379*61046927SAndroid Build Coastguard Worker    <value default="true">identity</value>
380*61046927SAndroid Build Coastguard Worker  </enum>
381*61046927SAndroid Build Coastguard Worker
382*61046927SAndroid Build Coastguard Worker  <enum name="Load lane (96-bit)">
383*61046927SAndroid Build Coastguard Worker    <reserved/>
384*61046927SAndroid Build Coastguard Worker    <reserved/>
385*61046927SAndroid Build Coastguard Worker    <reserved/>
386*61046927SAndroid Build Coastguard Worker    <reserved/>
387*61046927SAndroid Build Coastguard Worker    <reserved/>
388*61046927SAndroid Build Coastguard Worker    <reserved/>
389*61046927SAndroid Build Coastguard Worker    <value default="true">identity</value>
390*61046927SAndroid Build Coastguard Worker    <reserved/>
391*61046927SAndroid Build Coastguard Worker  </enum>
392*61046927SAndroid Build Coastguard Worker
393*61046927SAndroid Build Coastguard Worker  <enum name="Load lane (128-bit)">
394*61046927SAndroid Build Coastguard Worker    <reserved/>
395*61046927SAndroid Build Coastguard Worker    <reserved/>
396*61046927SAndroid Build Coastguard Worker    <reserved/>
397*61046927SAndroid Build Coastguard Worker    <reserved/>
398*61046927SAndroid Build Coastguard Worker    <reserved/>
399*61046927SAndroid Build Coastguard Worker    <reserved/>
400*61046927SAndroid Build Coastguard Worker    <reserved/>
401*61046927SAndroid Build Coastguard Worker    <value default="true">identity</value>
402*61046927SAndroid Build Coastguard Worker  </enum>
403*61046927SAndroid Build Coastguard Worker
404*61046927SAndroid Build Coastguard Worker  <enum name="Round mode">
405*61046927SAndroid Build Coastguard Worker    <desc>Corresponds to IEEE 754 rounding modes</desc>
406*61046927SAndroid Build Coastguard Worker    <value desc="Round to nearest even" default="true">rte</value>
407*61046927SAndroid Build Coastguard Worker    <value desc="Round to positive infinity">rtp</value>
408*61046927SAndroid Build Coastguard Worker    <value desc="Round to negative infinity">rtn</value>
409*61046927SAndroid Build Coastguard Worker    <value desc="Round to zero">rtz</value>
410*61046927SAndroid Build Coastguard Worker  </enum>
411*61046927SAndroid Build Coastguard Worker
412*61046927SAndroid Build Coastguard Worker  <enum name="Result type">
413*61046927SAndroid Build Coastguard Worker    <desc>
414*61046927SAndroid Build Coastguard Worker      Comparison instructions like `FCMP` return a boolean but may encode this
415*61046927SAndroid Build Coastguard Worker      boolean in a variety of ways. `i1` gives a OpenGL style `0/1` boolean.
416*61046927SAndroid Build Coastguard Worker      `m1` gives a Direct3D style `0/~0` boolean. `f1` gives a floating-point
417*61046927SAndroid Build Coastguard Worker      `0.0f / 1.0f` boolean. Switching between these modes is useful to fold a
418*61046927SAndroid Build Coastguard Worker      boolean type convert into a comparison. `u1` is used internally to
419*61046927SAndroid Build Coastguard Worker      implement 64-bit comparisons.
420*61046927SAndroid Build Coastguard Worker    </desc>
421*61046927SAndroid Build Coastguard Worker    <value desc="Integer 1">i1</value>
422*61046927SAndroid Build Coastguard Worker    <value desc="Float 1">f1</value>
423*61046927SAndroid Build Coastguard Worker    <value desc="Minus 1">m1</value>
424*61046927SAndroid Build Coastguard Worker    <value desc="Low half of 64-bit compare">u1</value>
425*61046927SAndroid Build Coastguard Worker  </enum>
426*61046927SAndroid Build Coastguard Worker
427*61046927SAndroid Build Coastguard Worker  <enum name="Widen">
428*61046927SAndroid Build Coastguard Worker    <value default="true">none</value>
429*61046927SAndroid Build Coastguard Worker    <value>h0</value>
430*61046927SAndroid Build Coastguard Worker    <value>h1</value>
431*61046927SAndroid Build Coastguard Worker    <reserved/>
432*61046927SAndroid Build Coastguard Worker    <reserved/>
433*61046927SAndroid Build Coastguard Worker    <reserved/>
434*61046927SAndroid Build Coastguard Worker    <reserved/>
435*61046927SAndroid Build Coastguard Worker    <reserved/>
436*61046927SAndroid Build Coastguard Worker  </enum>
437*61046927SAndroid Build Coastguard Worker
438*61046927SAndroid Build Coastguard Worker  <enum name="Clamp">
439*61046927SAndroid Build Coastguard Worker    <desc>
440*61046927SAndroid Build Coastguard Worker      Clamp applied to the destination of a floating-point instruction. Note the
441*61046927SAndroid Build Coastguard Worker      clamps may be decomposed as two independent bits for `clamp_0_inf` and
442*61046927SAndroid Build Coastguard Worker      `clamp_m1_1`, with `clamp_0_1` arising as the composition of `clamp_0_inf`
443*61046927SAndroid Build Coastguard Worker      and `clamp_m1_1` in either order.
444*61046927SAndroid Build Coastguard Worker
445*61046927SAndroid Build Coastguard Worker      Clamps are implemented per the SPIR-V specification:
446*61046927SAndroid Build Coastguard Worker
447*61046927SAndroid Build Coastguard Worker      $$\text{clamp} \; (x, \ell, h) = \min( \max( x, \ell ), h)$$
448*61046927SAndroid Build Coastguard Worker
449*61046927SAndroid Build Coastguard Worker      The min/max functions return the other operand if one operand is NaN, and
450*61046927SAndroid Build Coastguard Worker      compare $-0 &lt; +0$. That means the following identities hold for Valhall
451*61046927SAndroid Build Coastguard Worker      clamps:
452*61046927SAndroid Build Coastguard Worker
453*61046927SAndroid Build Coastguard Worker      \begin{align*}
454*61046927SAndroid Build Coastguard Worker        \text{clamp}(-0.0, 0.0, 1.0) &amp; = +0.0 \\
455*61046927SAndroid Build Coastguard Worker        \text{clamp}(-\text{NaN}, 0.0, 1.0) &amp; = +0.0 \\
456*61046927SAndroid Build Coastguard Worker        \text{clamp}(\text{NaN}, 0.0, 1.0) &amp; = +0.0 \\
457*61046927SAndroid Build Coastguard Worker        &amp; \\
458*61046927SAndroid Build Coastguard Worker        \text{clamp}(-0.0, -1.0, 1.0) &amp; = -0.0 \\
459*61046927SAndroid Build Coastguard Worker        \text{clamp}(\text{NaN}, -1.0, 1.0) &amp; = -1.0 \\
460*61046927SAndroid Build Coastguard Worker        \text{clamp}(-\text{NaN}, -1.0, 1.0) &amp; = -1.0 \\
461*61046927SAndroid Build Coastguard Worker        &amp; \\
462*61046927SAndroid Build Coastguard Worker        \max(\text{NaN}, 0.0) &amp; = +0.0 \\
463*61046927SAndroid Build Coastguard Worker        \max(-\text{NaN}, 0.0) &amp; = +0.0 \\
464*61046927SAndroid Build Coastguard Worker        \max(-0.0, 0.0) &amp; = +0.0 \\
465*61046927SAndroid Build Coastguard Worker      \end{align*}
466*61046927SAndroid Build Coastguard Worker
467*61046927SAndroid Build Coastguard Worker      This behaviour is consistent with the FMin/FMax/FClamp and
468*61046927SAndroid Build Coastguard Worker      NMin/NMax/NClamp rules prescribed by SPIR-V and governed by IEEE-754. As
469*61046927SAndroid Build Coastguard Worker      a consequence, substituting these clamps for equivalent minimum/maximum
470*61046927SAndroid Build Coastguard Worker      exprssions is legal even with strict floating point rules.
471*61046927SAndroid Build Coastguard Worker    </desc>
472*61046927SAndroid Build Coastguard Worker    <value default="true" desc="Identity">none</value>
473*61046927SAndroid Build Coastguard Worker    <value desc="Clamp positive">clamp_0_inf</value>
474*61046927SAndroid Build Coastguard Worker    <value desc="Clamp to $[-1, 1]$">clamp_m1_1</value>
475*61046927SAndroid Build Coastguard Worker    <value desc="Clamp to $[0, 1]$">clamp_0_1</value>
476*61046927SAndroid Build Coastguard Worker  </enum>
477*61046927SAndroid Build Coastguard Worker
478*61046927SAndroid Build Coastguard Worker  <enum name="Condition">
479*61046927SAndroid Build Coastguard Worker    <desc>
480*61046927SAndroid Build Coastguard Worker      Condition code. Type must be inferred from the instruction. IEEE 754 total
481*61046927SAndroid Build Coastguard Worker      ordering only applies to floating point compares. "Not equal" and "greater
482*61046927SAndroid Build Coastguard Worker      than or less than" are distinguished by NaN behaviour conforming to
483*61046927SAndroid Build Coastguard Worker      the IEEE 754 specification.
484*61046927SAndroid Build Coastguard Worker    </desc>
485*61046927SAndroid Build Coastguard Worker    <value desc="Equal">eq</value>
486*61046927SAndroid Build Coastguard Worker    <value desc="Greater than">gt</value>
487*61046927SAndroid Build Coastguard Worker    <value desc="Greater than or equal">ge</value>
488*61046927SAndroid Build Coastguard Worker    <value desc="Not equal">ne</value>
489*61046927SAndroid Build Coastguard Worker    <value desc="Less than">lt</value>
490*61046927SAndroid Build Coastguard Worker    <value desc="Less than or equal">le</value>
491*61046927SAndroid Build Coastguard Worker    <value desc="Greater than or less than">gtlt</value>
492*61046927SAndroid Build Coastguard Worker    <value desc="Totally ordered">total</value>
493*61046927SAndroid Build Coastguard Worker  </enum>
494*61046927SAndroid Build Coastguard Worker
495*61046927SAndroid Build Coastguard Worker  <enum name="Dimension">
496*61046927SAndroid Build Coastguard Worker    <desc>Texture dimension.</desc>
497*61046927SAndroid Build Coastguard Worker    <value desc="1D or buffer">1d</value>
498*61046927SAndroid Build Coastguard Worker    <value desc="2D or 2D array">2d</value>
499*61046927SAndroid Build Coastguard Worker    <value desc="3D or 3D array">3d</value>
500*61046927SAndroid Build Coastguard Worker    <value desc="Cube map or cube map array">cube</value>
501*61046927SAndroid Build Coastguard Worker  </enum>
502*61046927SAndroid Build Coastguard Worker
503*61046927SAndroid Build Coastguard Worker  <enum name="LOD mode">
504*61046927SAndroid Build Coastguard Worker    <desc>Level-of-detail selection mode in a texture instruction.</desc>
505*61046927SAndroid Build Coastguard Worker    <value desc="Set to zero">zero</value>
506*61046927SAndroid Build Coastguard Worker    <value desc="Computed based on neighboring fragments">computed</value>
507*61046927SAndroid Build Coastguard Worker    <reserved/>
508*61046927SAndroid Build Coastguard Worker    <reserved/>
509*61046927SAndroid Build Coastguard Worker    <value desc="Explicitly specified in a register">explicit</value>
510*61046927SAndroid Build Coastguard Worker    <value desc="Computed based on neighboring fragments added with bias in a register">computed_bias</value>
511*61046927SAndroid Build Coastguard Worker    <value desc="Derived from a gradient descriptor in registers">grdesc</value>
512*61046927SAndroid Build Coastguard Worker    <reserved/>
513*61046927SAndroid Build Coastguard Worker  </enum>
514*61046927SAndroid Build Coastguard Worker
515*61046927SAndroid Build Coastguard Worker  <enum name="Register format">
516*61046927SAndroid Build Coastguard Worker    <desc>Format of data loaded to / stored from registers for general memory access.</desc>
517*61046927SAndroid Build Coastguard Worker    <value desc="32-bit type based on descriptor format">auto</value>
518*61046927SAndroid Build Coastguard Worker    <reserved/>
519*61046927SAndroid Build Coastguard Worker    <value desc="32-bit floats">f32</value>
520*61046927SAndroid Build Coastguard Worker    <value desc="16-bit floats">f16</value>
521*61046927SAndroid Build Coastguard Worker    <value desc="32-bit signed integers">s32</value>
522*61046927SAndroid Build Coastguard Worker    <value desc="16-bit signed integers">s16</value>
523*61046927SAndroid Build Coastguard Worker    <value desc="32-bit unsigned integers">u32</value>
524*61046927SAndroid Build Coastguard Worker    <value desc="16-bit unsigned integers">u16</value>
525*61046927SAndroid Build Coastguard Worker  </enum>
526*61046927SAndroid Build Coastguard Worker
527*61046927SAndroid Build Coastguard Worker  <enum name="Staging register count" implied="true">
528*61046927SAndroid Build Coastguard Worker    <value>sr0</value>
529*61046927SAndroid Build Coastguard Worker    <value>sr1</value>
530*61046927SAndroid Build Coastguard Worker    <value>sr2</value>
531*61046927SAndroid Build Coastguard Worker    <value>sr3</value>
532*61046927SAndroid Build Coastguard Worker    <value>sr4</value>
533*61046927SAndroid Build Coastguard Worker    <value>sr5</value>
534*61046927SAndroid Build Coastguard Worker    <value>sr6</value>
535*61046927SAndroid Build Coastguard Worker    <value>sr7</value>
536*61046927SAndroid Build Coastguard Worker  </enum>
537*61046927SAndroid Build Coastguard Worker
538*61046927SAndroid Build Coastguard Worker  <enum name="Staging register write count" implied="true">
539*61046927SAndroid Build Coastguard Worker    <value>write1</value>
540*61046927SAndroid Build Coastguard Worker    <value>write2</value>
541*61046927SAndroid Build Coastguard Worker    <value>write3</value>
542*61046927SAndroid Build Coastguard Worker    <value>write4</value>
543*61046927SAndroid Build Coastguard Worker    <value>write5</value>
544*61046927SAndroid Build Coastguard Worker    <value>write6</value>
545*61046927SAndroid Build Coastguard Worker    <value>write7</value>
546*61046927SAndroid Build Coastguard Worker    <value>write8</value>
547*61046927SAndroid Build Coastguard Worker  </enum>
548*61046927SAndroid Build Coastguard Worker
549*61046927SAndroid Build Coastguard Worker  <enum name="Write mask">
550*61046927SAndroid Build Coastguard Worker    <reserved/>
551*61046927SAndroid Build Coastguard Worker    <value>r</value>
552*61046927SAndroid Build Coastguard Worker    <value>g</value>
553*61046927SAndroid Build Coastguard Worker    <value>rg</value>
554*61046927SAndroid Build Coastguard Worker    <value>b</value>
555*61046927SAndroid Build Coastguard Worker    <value>rb</value>
556*61046927SAndroid Build Coastguard Worker    <value>gb</value>
557*61046927SAndroid Build Coastguard Worker    <value>rgb</value>
558*61046927SAndroid Build Coastguard Worker    <value>a</value>
559*61046927SAndroid Build Coastguard Worker    <value>ra</value>
560*61046927SAndroid Build Coastguard Worker    <value>ga</value>
561*61046927SAndroid Build Coastguard Worker    <value>rga</value>
562*61046927SAndroid Build Coastguard Worker    <value>ba</value>
563*61046927SAndroid Build Coastguard Worker    <value>rba</value>
564*61046927SAndroid Build Coastguard Worker    <value>gba</value>
565*61046927SAndroid Build Coastguard Worker    <value default="true">rgba</value>
566*61046927SAndroid Build Coastguard Worker  </enum>
567*61046927SAndroid Build Coastguard Worker
568*61046927SAndroid Build Coastguard Worker  <enum name="Fetch component">
569*61046927SAndroid Build Coastguard Worker    <value desc="Red">gather4_r</value>
570*61046927SAndroid Build Coastguard Worker    <value desc="Green">gather4_g</value>
571*61046927SAndroid Build Coastguard Worker    <value desc="Blue">gather4_b</value>
572*61046927SAndroid Build Coastguard Worker    <value desc="Alpha">gather4_a</value>
573*61046927SAndroid Build Coastguard Worker  </enum>
574*61046927SAndroid Build Coastguard Worker
575*61046927SAndroid Build Coastguard Worker  <enum name="Register type">
576*61046927SAndroid Build Coastguard Worker    <desc>Unsized type, part of a register format.</desc>
577*61046927SAndroid Build Coastguard Worker    <reserved/>
578*61046927SAndroid Build Coastguard Worker    <value name="Float">f</value>
579*61046927SAndroid Build Coastguard Worker    <value name="Unsigned">u</value>
580*61046927SAndroid Build Coastguard Worker    <value name="Signed">s</value>
581*61046927SAndroid Build Coastguard Worker  </enum>
582*61046927SAndroid Build Coastguard Worker
583*61046927SAndroid Build Coastguard Worker  <enum name="Register width">
584*61046927SAndroid Build Coastguard Worker    <desc>Untyped size, part of a register format.</desc>
585*61046927SAndroid Build Coastguard Worker    <value>16</value>
586*61046927SAndroid Build Coastguard Worker    <value>32</value>
587*61046927SAndroid Build Coastguard Worker  </enum>
588*61046927SAndroid Build Coastguard Worker
589*61046927SAndroid Build Coastguard Worker  <enum name="Varying texture register width">
590*61046927SAndroid Build Coastguard Worker    <desc>
591*61046927SAndroid Build Coastguard Worker      Size of results for varying texture instructions. For dual 16-bit results
592*61046927SAndroid Build Coastguard Worker      use "16-bit".
593*61046927SAndroid Build Coastguard Worker    </desc>
594*61046927SAndroid Build Coastguard Worker    <value desc="16-bit">16</value>
595*61046927SAndroid Build Coastguard Worker    <value desc="32-bit">32</value>
596*61046927SAndroid Build Coastguard Worker    <value desc="16-bit, 32-bit">16.32</value>
597*61046927SAndroid Build Coastguard Worker    <value desc="32-bit, 32-bit">32.32</value>
598*61046927SAndroid Build Coastguard Worker  </enum>
599*61046927SAndroid Build Coastguard Worker
600*61046927SAndroid Build Coastguard Worker  <enum name="Vector size">
601*61046927SAndroid Build Coastguard Worker    <desc>Number of channels loaded/stored for general memory access.</desc>
602*61046927SAndroid Build Coastguard Worker    <value default="true" desc="Scalar">none</value>
603*61046927SAndroid Build Coastguard Worker    <value desc="2 channels">v2</value>
604*61046927SAndroid Build Coastguard Worker    <value desc="3 channels">v3</value>
605*61046927SAndroid Build Coastguard Worker    <value desc="4 channels">v4</value>
606*61046927SAndroid Build Coastguard Worker  </enum>
607*61046927SAndroid Build Coastguard Worker
608*61046927SAndroid Build Coastguard Worker  <enum name="Slot">
609*61046927SAndroid Build Coastguard Worker    <desc>
610*61046927SAndroid Build Coastguard Worker      Dependency slot set on a message-passing instruction that writes to
611*61046927SAndroid Build Coastguard Worker      registers. Before reading the destination, a future instruction must wait
612*61046927SAndroid Build Coastguard Worker      on the specified slot. Slot #7 is for `BARRIER` instructions only.
613*61046927SAndroid Build Coastguard Worker    </desc>
614*61046927SAndroid Build Coastguard Worker    <value desc="Slot #0">slot0</value>
615*61046927SAndroid Build Coastguard Worker    <value desc="Slot #1">slot1</value>
616*61046927SAndroid Build Coastguard Worker    <value desc="Slot #2">slot2</value>
617*61046927SAndroid Build Coastguard Worker    <reserved/>
618*61046927SAndroid Build Coastguard Worker    <reserved/>
619*61046927SAndroid Build Coastguard Worker    <reserved/>
620*61046927SAndroid Build Coastguard Worker    <reserved/>
621*61046927SAndroid Build Coastguard Worker    <value desc="Slot #7">slot7</value>
622*61046927SAndroid Build Coastguard Worker  </enum>
623*61046927SAndroid Build Coastguard Worker
624*61046927SAndroid Build Coastguard Worker  <enum name="Memory access">
625*61046927SAndroid Build Coastguard Worker    <desc>Memory access hint for a `LOAD` or `STORE` instruction.</desc>
626*61046927SAndroid Build Coastguard Worker    <value desc="No hint (global)" default="true">none</value>
627*61046927SAndroid Build Coastguard Worker    <value desc="Internally streaming (position output)">istream</value>
628*61046927SAndroid Build Coastguard Worker    <value desc="Externally streaming (varying output)">estream</value>
629*61046927SAndroid Build Coastguard Worker    <value desc="Force access in discarded threads (thread local storage)">force</value>
630*61046927SAndroid Build Coastguard Worker  </enum>
631*61046927SAndroid Build Coastguard Worker
632*61046927SAndroid Build Coastguard Worker  <enum name="Subgroup size">
633*61046927SAndroid Build Coastguard Worker    <desc>
634*61046927SAndroid Build Coastguard Worker      Selects the effective subgroup size from subgroup operations. The hardware
635*61046927SAndroid Build Coastguard Worker      warps are sixteen threads on Valhall, but subdividing a warp may be useful
636*61046927SAndroid Build Coastguard Worker      for API requirements. In particular, derivatives may be calculated with
637*61046927SAndroid Build Coastguard Worker      quads (four threads).
638*61046927SAndroid Build Coastguard Worker    </desc>
639*61046927SAndroid Build Coastguard Worker    <value desc="Two threads">subgroup2</value>
640*61046927SAndroid Build Coastguard Worker    <value desc="Four threads">subgroup4</value>
641*61046927SAndroid Build Coastguard Worker    <value desc="Eight threads">subgroup8</value>
642*61046927SAndroid Build Coastguard Worker    <value desc="Sixteen threads" default="true">subgroup16</value>
643*61046927SAndroid Build Coastguard Worker  </enum>
644*61046927SAndroid Build Coastguard Worker
645*61046927SAndroid Build Coastguard Worker  <enum name="Lane operation">
646*61046927SAndroid Build Coastguard Worker    <desc>
647*61046927SAndroid Build Coastguard Worker      Acts as a modifier on the lane specificier for a `CLPER` instruction. The
648*61046927SAndroid Build Coastguard Worker      `accumulate` mode is required for efficient subgroup reductions.
649*61046927SAndroid Build Coastguard Worker    </desc>
650*61046927SAndroid Build Coastguard Worker    <value name="No operation" default="true">none</value>
651*61046927SAndroid Build Coastguard Worker    <value name="Exclusive-or">xor</value>
652*61046927SAndroid Build Coastguard Worker    <value name="Accumulate">accumulate</value>
653*61046927SAndroid Build Coastguard Worker    <value name="Shift">shift</value>
654*61046927SAndroid Build Coastguard Worker  </enum>
655*61046927SAndroid Build Coastguard Worker
656*61046927SAndroid Build Coastguard Worker  <enum name="Inactive result">
657*61046927SAndroid Build Coastguard Worker    <desc>
658*61046927SAndroid Build Coastguard Worker      Accesses to inactive lanes (due to divergence) in a subgroup is generally
659*61046927SAndroid Build Coastguard Worker      undefined in APIs. However, the results of permuting with an inactive lane
660*61046927SAndroid Build Coastguard Worker      with `CLPER.i32` are well-defined in Valhall: they return one of the
661*61046927SAndroid Build Coastguard Worker      following values, as specified in the `CLPER.i32` instructions. Sometimes
662*61046927SAndroid Build Coastguard Worker      certain values enable small optimizations.
663*61046927SAndroid Build Coastguard Worker    </desc>
664*61046927SAndroid Build Coastguard Worker    <value name="0x00000000" default="true">zero</value>
665*61046927SAndroid Build Coastguard Worker    <value name="0xFFFFFFFF">umax</value>
666*61046927SAndroid Build Coastguard Worker    <value name="0x00000001">i1</value>
667*61046927SAndroid Build Coastguard Worker    <value name="0x00010001">v2i1</value>
668*61046927SAndroid Build Coastguard Worker    <value name="0x80000000">smin</value>
669*61046927SAndroid Build Coastguard Worker    <value name="0x7FFFFFFF">smax</value>
670*61046927SAndroid Build Coastguard Worker    <value name="0x80008000">v2smin</value>
671*61046927SAndroid Build Coastguard Worker    <value name="0x7FFF7FFF">v2smax</value>
672*61046927SAndroid Build Coastguard Worker    <value name="0x80808080">v4smin</value>
673*61046927SAndroid Build Coastguard Worker    <value name="0x7F7F7F7F">v4smax</value>
674*61046927SAndroid Build Coastguard Worker    <value name="0x3F800000">f1</value>
675*61046927SAndroid Build Coastguard Worker    <value name="0x3C003C00">v2f1</value>
676*61046927SAndroid Build Coastguard Worker    <value name="0xFF800000">infn</value>
677*61046927SAndroid Build Coastguard Worker    <value name="0x7F800000">inf</value>
678*61046927SAndroid Build Coastguard Worker    <value name="0xFC00FC00">v2infn</value>
679*61046927SAndroid Build Coastguard Worker    <value name="0x7C007C00">v2inf</value>
680*61046927SAndroid Build Coastguard Worker  </enum>
681*61046927SAndroid Build Coastguard Worker
682*61046927SAndroid Build Coastguard Worker  <enum name="Mux">
683*61046927SAndroid Build Coastguard Worker    <desc>
684*61046927SAndroid Build Coastguard Worker      Condition to use for a `MUX` instruction. `neg` checks the sign bit,
685*61046927SAndroid Build Coastguard Worker      `int_zero` compares to `0x00000000`, `fp_zero` compares to $\pm 0.0$ as
686*61046927SAndroid Build Coastguard Worker      an IEEE 754 float, and `bit` checks each bit separately. The `bit` mode
687*61046927SAndroid Build Coastguard Worker      acts like an imaginary `CSEL.v32u1` instruction, and implements
688*61046927SAndroid Build Coastguard Worker      `bitselect()` in OpenCL.
689*61046927SAndroid Build Coastguard Worker    </desc>
690*61046927SAndroid Build Coastguard Worker    <value desc="Negative">neg</value>
691*61046927SAndroid Build Coastguard Worker    <value desc="Integer zero" default="true">int_zero</value>
692*61046927SAndroid Build Coastguard Worker    <value desc="Floating point zero">fp_zero</value>
693*61046927SAndroid Build Coastguard Worker    <value desc="Bitwise">bit</value>
694*61046927SAndroid Build Coastguard Worker  </enum>
695*61046927SAndroid Build Coastguard Worker
696*61046927SAndroid Build Coastguard Worker  <enum name="Sample mode">
697*61046927SAndroid Build Coastguard Worker    <desc>
698*61046927SAndroid Build Coastguard Worker      Varying interpolation mode, for choosing the correct sample to
699*61046927SAndroid Build Coastguard Worker      interpolate at, allowing the `sample` and `centroid` qualifiers to be
700*61046927SAndroid Build Coastguard Worker      implemented, as well as the `interpolateAt*` functions.
701*61046927SAndroid Build Coastguard Worker    </desc>
702*61046927SAndroid Build Coastguard Worker    <value desc="Center">center</value>
703*61046927SAndroid Build Coastguard Worker    <value desc="Centroid">centroid</value>
704*61046927SAndroid Build Coastguard Worker    <value desc="Sample">sample</value>
705*61046927SAndroid Build Coastguard Worker    <value desc="Explicit">explicit</value>
706*61046927SAndroid Build Coastguard Worker  </enum>
707*61046927SAndroid Build Coastguard Worker
708*61046927SAndroid Build Coastguard Worker  <enum name="Update mode">
709*61046927SAndroid Build Coastguard Worker    <desc>
710*61046927SAndroid Build Coastguard Worker      The Valhall GPU maintains hidden state when interpolating varyings, to
711*61046927SAndroid Build Coastguard Worker      allow reusing sample location calculations. The update mode of a varying
712*61046927SAndroid Build Coastguard Worker      load controls this hidden state.
713*61046927SAndroid Build Coastguard Worker    </desc>
714*61046927SAndroid Build Coastguard Worker    <value desc="Store interpolation position">store</value>
715*61046927SAndroid Build Coastguard Worker    <value desc="Retrieve interpolation position">retrieve</value>
716*61046927SAndroid Build Coastguard Worker    <reserved/>
717*61046927SAndroid Build Coastguard Worker    <value desc="Clobber saved position">clobber</value>
718*61046927SAndroid Build Coastguard Worker  </enum>
719*61046927SAndroid Build Coastguard Worker
720*61046927SAndroid Build Coastguard Worker  <enum name="Sample and update mode">
721*61046927SAndroid Build Coastguard Worker    <desc>
722*61046927SAndroid Build Coastguard Worker      For fused varying/texture instructions, only the following specific
723*61046927SAndroid Build Coastguard Worker      combinations of sample and update modes are permitted.
724*61046927SAndroid Build Coastguard Worker    </desc>
725*61046927SAndroid Build Coastguard Worker    <value desc="Center, store">center_store</value>
726*61046927SAndroid Build Coastguard Worker    <value desc="Centroid, store">centroid_store</value>
727*61046927SAndroid Build Coastguard Worker    <value desc="Sample, store">sample_store</value>
728*61046927SAndroid Build Coastguard Worker    <value desc="Explicit, store">explicit_store</value>
729*61046927SAndroid Build Coastguard Worker    <value desc="Center, clobber">center_clobber</value>
730*61046927SAndroid Build Coastguard Worker    <reserved/>
731*61046927SAndroid Build Coastguard Worker    <value desc="Sample, clobber">sample_clobber</value>
732*61046927SAndroid Build Coastguard Worker    <value desc="Retrieve previous state">retrieve</value>
733*61046927SAndroid Build Coastguard Worker  </enum>
734*61046927SAndroid Build Coastguard Worker
735*61046927SAndroid Build Coastguard Worker  <enum name="Source format">
736*61046927SAndroid Build Coastguard Worker    <desc>
737*61046927SAndroid Build Coastguard Worker      In-memory format of varyings.
738*61046927SAndroid Build Coastguard Worker
739*61046927SAndroid Build Coastguard Worker      Note: src_flat32 is only valid with 32-bit varying instructions and
740*61046927SAndroid Build Coastguard Worker      src_flat16 is only valid with 16-bit varying instructions.
741*61046927SAndroid Build Coastguard Worker    </desc>
742*61046927SAndroid Build Coastguard Worker    <value desc="Uninterpreted 32-bit values">src_flat32</value>
743*61046927SAndroid Build Coastguard Worker    <value desc="Uninterpreted 16-bit values">src_flat16</value>
744*61046927SAndroid Build Coastguard Worker    <value desc="Interpolated 32-bit floats">src_f32</value>
745*61046927SAndroid Build Coastguard Worker    <value desc="Interpolated 16-bit floats">src_f16</value>
746*61046927SAndroid Build Coastguard Worker  </enum>
747*61046927SAndroid Build Coastguard Worker
748*61046927SAndroid Build Coastguard Worker  <enum name="Atomic operation">
749*61046927SAndroid Build Coastguard Worker    <desc>
750*61046927SAndroid Build Coastguard Worker      Operation performed in a general computational atomic instruction.
751*61046927SAndroid Build Coastguard Worker    </desc>
752*61046927SAndroid Build Coastguard Worker    <reserved/>
753*61046927SAndroid Build Coastguard Worker    <reserved/>
754*61046927SAndroid Build Coastguard Worker    <value desc="Add">aadd</value>
755*61046927SAndroid Build Coastguard Worker    <reserved/>
756*61046927SAndroid Build Coastguard Worker    <reserved/>
757*61046927SAndroid Build Coastguard Worker    <reserved/>
758*61046927SAndroid Build Coastguard Worker    <reserved/>
759*61046927SAndroid Build Coastguard Worker    <reserved/>
760*61046927SAndroid Build Coastguard Worker    <value desc="Signed minimum">asmin</value>
761*61046927SAndroid Build Coastguard Worker    <value desc="Signed maximum">asmax</value>
762*61046927SAndroid Build Coastguard Worker    <value desc="Unsigned minimum">aumin</value>
763*61046927SAndroid Build Coastguard Worker    <value desc="Unsigned maximum">aumax</value>
764*61046927SAndroid Build Coastguard Worker    <value desc="Bitwise and">aand</value>
765*61046927SAndroid Build Coastguard Worker    <value desc="Bitwise or">aor</value>
766*61046927SAndroid Build Coastguard Worker    <value desc="Bitwise exclusive-or">axor</value>
767*61046927SAndroid Build Coastguard Worker    <value desc="Exchange (must return the value)">axchg</value>
768*61046927SAndroid Build Coastguard Worker  </enum>
769*61046927SAndroid Build Coastguard Worker
770*61046927SAndroid Build Coastguard Worker  <enum name="Atomic operation with 1">
771*61046927SAndroid Build Coastguard Worker    <desc>
772*61046927SAndroid Build Coastguard Worker      Operation performed in a computational atomic-with-1 instruction.
773*61046927SAndroid Build Coastguard Worker    </desc>
774*61046927SAndroid Build Coastguard Worker    <value desc="Increment">ainc</value>
775*61046927SAndroid Build Coastguard Worker    <value desc="Decrement">adec</value>
776*61046927SAndroid Build Coastguard Worker    <value desc="Unsigned maximum with 1">aumax1</value>
777*61046927SAndroid Build Coastguard Worker    <value desc="Signed maximum with 1">asmax1</value>
778*61046927SAndroid Build Coastguard Worker    <value desc="Set bottom bit">aor1</value>
779*61046927SAndroid Build Coastguard Worker  </enum>
780*61046927SAndroid Build Coastguard Worker
781*61046927SAndroid Build Coastguard Worker  <!-- note that the `unused="true"` annotation here just means that this
782*61046927SAndroid Build Coastguard Worker       particular entry is unused by the compiler. This may be because the
783*61046927SAndroid Build Coastguard Worker       instruction isn't generated yet, but it may also be because there
784*61046927SAndroid Build Coastguard Worker       is a duplicate instruction in the Bifrost or pseudo XML files
785*61046927SAndroid Build Coastguard Worker  -->
786*61046927SAndroid Build Coastguard Worker  <ins name="NOP" title="No operation" dests="0" opcode="0x00" unused="true" unit="CVT">
787*61046927SAndroid Build Coastguard Worker    <desc>
788*61046927SAndroid Build Coastguard Worker      Do nothing. Useful at the start of a block for waiting on slots required
789*61046927SAndroid Build Coastguard Worker      by the first actual instruction of the block, to reconcile dependencies
790*61046927SAndroid Build Coastguard Worker      after a branch. Also useful as the sole instruction of an empty shader.
791*61046927SAndroid Build Coastguard Worker    </desc>
792*61046927SAndroid Build Coastguard Worker  </ins>
793*61046927SAndroid Build Coastguard Worker
794*61046927SAndroid Build Coastguard Worker  <ins name="BRANCHZ" title="Compare to zero and branch" dests="0" opcode="0x1F" unused="true" unit="CVT">
795*61046927SAndroid Build Coastguard Worker    <desc>
796*61046927SAndroid Build Coastguard Worker      Branches to a specified relative offset if its source is nonzero (default)
797*61046927SAndroid Build Coastguard Worker      or if its source is zero (if `.eq` is set). The offset is 27-bits and
798*61046927SAndroid Build Coastguard Worker      sign-extended, giving an effective range of ±26-bits. The offset is
799*61046927SAndroid Build Coastguard Worker      specified in units of instructions, relative to the *next* instruction.
800*61046927SAndroid Build Coastguard Worker      Positive offsets may be interpreted as "number of instructions to skip".
801*61046927SAndroid Build Coastguard Worker      Since Valhall instructions are 8 bytes, this operates as:
802*61046927SAndroid Build Coastguard Worker
803*61046927SAndroid Build Coastguard Worker      $$PC := \begin{cases} PC + 8 \cdot (\text{offset} \; + 1) &amp; \text{if} \;
804*61046927SAndroid Build Coastguard Worker      \text{src} \stackrel{?}{=} 0 \\ PC + 8 &amp; \text{otherwise} \end{cases}$$
805*61046927SAndroid Build Coastguard Worker
806*61046927SAndroid Build Coastguard Worker      Used with comparison instructions to implement control flow. Tie the
807*61046927SAndroid Build Coastguard Worker      source to a nonzero constant to implement a jump. May introduce
808*61046927SAndroid Build Coastguard Worker      divergence, so generally requires `.reconverge` flow control.
809*61046927SAndroid Build Coastguard Worker    </desc>
810*61046927SAndroid Build Coastguard Worker    <src combine="true">Value to compare against zero</src>
811*61046927SAndroid Build Coastguard Worker    <imm name="offset" start="8" size="27" signed="true"/>
812*61046927SAndroid Build Coastguard Worker    <conservative/>
813*61046927SAndroid Build Coastguard Worker    <va_mod name="eq" start="36" size="1"/>
814*61046927SAndroid Build Coastguard Worker  </ins>
815*61046927SAndroid Build Coastguard Worker
816*61046927SAndroid Build Coastguard Worker  <ins name="DISCARD.f32" title="Discard fragment" dests="0" opcode="0x20" unused="true" unit="CVT">
817*61046927SAndroid Build Coastguard Worker    <desc>
818*61046927SAndroid Build Coastguard Worker      Evaluates the given condition, and if it passes, discards the current
819*61046927SAndroid Build Coastguard Worker      fragment and terminates the thread. Only valid in a **fragment** shader.
820*61046927SAndroid Build Coastguard Worker    </desc>
821*61046927SAndroid Build Coastguard Worker    <cmp/>
822*61046927SAndroid Build Coastguard Worker    <src absneg="true" swizzle="true">Left value to compare</src>
823*61046927SAndroid Build Coastguard Worker    <src absneg="true" swizzle="true">Right value to compare</src>
824*61046927SAndroid Build Coastguard Worker  </ins>
825*61046927SAndroid Build Coastguard Worker
826*61046927SAndroid Build Coastguard Worker  <ins name="BRANCHZI" title="Compare to zero and branch indirect" opcode="0x2F" dests="0" last="true" unit="CVT">
827*61046927SAndroid Build Coastguard Worker    <desc>
828*61046927SAndroid Build Coastguard Worker      Jump to an indirectly specified (absolute or relative) address. Used to
829*61046927SAndroid Build Coastguard Worker      jump to blend shaders at the end of a fragment shader.
830*61046927SAndroid Build Coastguard Worker    </desc>
831*61046927SAndroid Build Coastguard Worker    <src combine="true">Value to compare against zero</src>
832*61046927SAndroid Build Coastguard Worker    <src>Branch target</src>
833*61046927SAndroid Build Coastguard Worker    <conservative/>
834*61046927SAndroid Build Coastguard Worker    <va_mod name="eq" start="36" size="1"/>
835*61046927SAndroid Build Coastguard Worker    <va_mod name="absolute" start="40" size="1"/>
836*61046927SAndroid Build Coastguard Worker  </ins>
837*61046927SAndroid Build Coastguard Worker
838*61046927SAndroid Build Coastguard Worker  <ins name="BARRIER" title="Execution and memory barrier" opcode="0x45" unused="true" unit="NONE">
839*61046927SAndroid Build Coastguard Worker    <desc>
840*61046927SAndroid Build Coastguard Worker      General-purpose barrier. Must use slot #7. Must be paired with a
841*61046927SAndroid Build Coastguard Worker      `.wait` flow on the instruction.
842*61046927SAndroid Build Coastguard Worker    </desc>
843*61046927SAndroid Build Coastguard Worker    <slot/>
844*61046927SAndroid Build Coastguard Worker  </ins>
845*61046927SAndroid Build Coastguard Worker
846*61046927SAndroid Build Coastguard Worker  <group name="CSEL" title="Floating-point conditional select" dests="1" unused="true" unit="CVT">
847*61046927SAndroid Build Coastguard Worker    <ins name="CSEL.f32" opcode="0x154"/>
848*61046927SAndroid Build Coastguard Worker    <ins name="CSEL.v2f16" opcode="0x155"/>
849*61046927SAndroid Build Coastguard Worker    <desc>
850*61046927SAndroid Build Coastguard Worker      Evaluates the given condition and outputs either the true source or the
851*61046927SAndroid Build Coastguard Worker      false source.
852*61046927SAndroid Build Coastguard Worker    </desc>
853*61046927SAndroid Build Coastguard Worker    <cmp/>
854*61046927SAndroid Build Coastguard Worker    <src float="true">Left value to compare</src>
855*61046927SAndroid Build Coastguard Worker    <src float="true">Right value to compare</src>
856*61046927SAndroid Build Coastguard Worker    <src float="true">Return value if true</src>
857*61046927SAndroid Build Coastguard Worker    <src float="true">Return value if false</src>
858*61046927SAndroid Build Coastguard Worker  </group>
859*61046927SAndroid Build Coastguard Worker
860*61046927SAndroid Build Coastguard Worker  <group name="CSEL" title="Integer conditional select" dests="1" unused="true" unit="CVT">
861*61046927SAndroid Build Coastguard Worker    <ins name="CSEL.u32" opcode="0x150"/>
862*61046927SAndroid Build Coastguard Worker    <ins name="CSEL.v2u16" opcode="0x151"/>
863*61046927SAndroid Build Coastguard Worker    <ins name="CSEL.s32" opcode="0x158"/>
864*61046927SAndroid Build Coastguard Worker    <ins name="CSEL.v2s16" opcode="0x159"/>
865*61046927SAndroid Build Coastguard Worker    <desc>
866*61046927SAndroid Build Coastguard Worker      Evaluates the given condition and outputs either the true source or the
867*61046927SAndroid Build Coastguard Worker      false source.
868*61046927SAndroid Build Coastguard Worker
869*61046927SAndroid Build Coastguard Worker      Valhall lacks integer minimum/maximum instructions. `CSEL` instructions
870*61046927SAndroid Build Coastguard Worker      with tied operands form the canonical implementations of these
871*61046927SAndroid Build Coastguard Worker      instructions. Similarly, the integer $\text{sign}$ function is canonically
872*61046927SAndroid Build Coastguard Worker      implemented with a pair of `CSEL` instructions.
873*61046927SAndroid Build Coastguard Worker    </desc>
874*61046927SAndroid Build Coastguard Worker    <cmp/>
875*61046927SAndroid Build Coastguard Worker    <src>Left value to compare</src>
876*61046927SAndroid Build Coastguard Worker    <src>Right value to compare</src>
877*61046927SAndroid Build Coastguard Worker    <src>Return value if true</src>
878*61046927SAndroid Build Coastguard Worker    <src>Return value if false</src>
879*61046927SAndroid Build Coastguard Worker  </group>
880*61046927SAndroid Build Coastguard Worker
881*61046927SAndroid Build Coastguard Worker  <ins name="LD_VAR_SPECIAL" title="Load special varying" opcode="0x56" unused="true" unit="V">
882*61046927SAndroid Build Coastguard Worker    <sr write="true"/>
883*61046927SAndroid Build Coastguard Worker    <sr_count/>
884*61046927SAndroid Build Coastguard Worker    <vecsize/>
885*61046927SAndroid Build Coastguard Worker    <regfmt/>
886*61046927SAndroid Build Coastguard Worker    <sample/>
887*61046927SAndroid Build Coastguard Worker    <update/>
888*61046927SAndroid Build Coastguard Worker    <slot/>
889*61046927SAndroid Build Coastguard Worker    <src/>
890*61046927SAndroid Build Coastguard Worker    <imm name="index" start="12" size="4"/> <!-- 0 for pointx, 1 for pointy, 2 for fragw, 3 for fragz -->
891*61046927SAndroid Build Coastguard Worker  </ins>
892*61046927SAndroid Build Coastguard Worker
893*61046927SAndroid Build Coastguard Worker  <group name="LD_VAR_BUF_IMM" title="Load immediate varying" message="varying" unit="V">
894*61046927SAndroid Build Coastguard Worker    <desc>Interpolates a given varying from hardware buffer</desc>
895*61046927SAndroid Build Coastguard Worker    <ins name="LD_VAR_BUF_IMM.f32" opcode="0x5C"/>
896*61046927SAndroid Build Coastguard Worker    <ins name="LD_VAR_BUF_IMM.f16" opcode="0x5D"/>
897*61046927SAndroid Build Coastguard Worker    <slot/>
898*61046927SAndroid Build Coastguard Worker    <vecsize/>
899*61046927SAndroid Build Coastguard Worker    <source_format/>
900*61046927SAndroid Build Coastguard Worker    <regfmt pseudo="true"/>
901*61046927SAndroid Build Coastguard Worker    <sample/>
902*61046927SAndroid Build Coastguard Worker    <update/>
903*61046927SAndroid Build Coastguard Worker    <sr write="true"/>
904*61046927SAndroid Build Coastguard Worker    <sr_count count="format"/>
905*61046927SAndroid Build Coastguard Worker    <src/>
906*61046927SAndroid Build Coastguard Worker    <imm name="index" start="16" size="8"/>
907*61046927SAndroid Build Coastguard Worker  </group>
908*61046927SAndroid Build Coastguard Worker
909*61046927SAndroid Build Coastguard Worker  <group name="LD_VAR_BUF" title="Load indirect varying" message="varying" unit="V">
910*61046927SAndroid Build Coastguard Worker    <desc>Interpolates a given varying from hardware buffer</desc>
911*61046927SAndroid Build Coastguard Worker    <ins name="LD_VAR_BUF.f32" opcode="0x6C"/>
912*61046927SAndroid Build Coastguard Worker    <ins name="LD_VAR_BUF.f16" opcode="0x6D"/>
913*61046927SAndroid Build Coastguard Worker    <slot/>
914*61046927SAndroid Build Coastguard Worker    <vecsize/>
915*61046927SAndroid Build Coastguard Worker    <source_format/>
916*61046927SAndroid Build Coastguard Worker    <regfmt pseudo="true"/>
917*61046927SAndroid Build Coastguard Worker    <sample/>
918*61046927SAndroid Build Coastguard Worker    <update/>
919*61046927SAndroid Build Coastguard Worker    <sr write="true"/>
920*61046927SAndroid Build Coastguard Worker    <sr_count count="format"/>
921*61046927SAndroid Build Coastguard Worker    <src/>
922*61046927SAndroid Build Coastguard Worker    <src/>
923*61046927SAndroid Build Coastguard Worker  </group>
924*61046927SAndroid Build Coastguard Worker
925*61046927SAndroid Build Coastguard Worker  <ins name="LD_VAR" title="Load indirect varying" unused="true" unit="V" opcode="0x64">
926*61046927SAndroid Build Coastguard Worker    <desc>Interpolates a given varying from a software buffer</desc>
927*61046927SAndroid Build Coastguard Worker    <slot/>
928*61046927SAndroid Build Coastguard Worker    <vecsize/>
929*61046927SAndroid Build Coastguard Worker    <regfmt/>
930*61046927SAndroid Build Coastguard Worker    <sample/>
931*61046927SAndroid Build Coastguard Worker    <update/>
932*61046927SAndroid Build Coastguard Worker    <sr write="true"/>
933*61046927SAndroid Build Coastguard Worker    <sr_count/>
934*61046927SAndroid Build Coastguard Worker    <src/>
935*61046927SAndroid Build Coastguard Worker    <src>Varying index and table</src>
936*61046927SAndroid Build Coastguard Worker  </ins>
937*61046927SAndroid Build Coastguard Worker
938*61046927SAndroid Build Coastguard Worker  <ins name="LD_VAR_IMM" title="Load immediate varying" unused="true" unit="V" opcode="0x54">
939*61046927SAndroid Build Coastguard Worker    <desc>Interpolates a given varying from a software buffer</desc>
940*61046927SAndroid Build Coastguard Worker    <slot/>
941*61046927SAndroid Build Coastguard Worker    <vecsize/>
942*61046927SAndroid Build Coastguard Worker    <regfmt/>
943*61046927SAndroid Build Coastguard Worker    <sample/>
944*61046927SAndroid Build Coastguard Worker    <update/>
945*61046927SAndroid Build Coastguard Worker    <sr write="true"/>
946*61046927SAndroid Build Coastguard Worker    <sr_count/>
947*61046927SAndroid Build Coastguard Worker    <src/>
948*61046927SAndroid Build Coastguard Worker    <imm name="table" start="8" size="4"/>
949*61046927SAndroid Build Coastguard Worker    <imm name="index" start="12" size="8"/>
950*61046927SAndroid Build Coastguard Worker  </ins>
951*61046927SAndroid Build Coastguard Worker
952*61046927SAndroid Build Coastguard Worker  <ins name="LD_VAR_FLAT" title="Load indirect varying" unused="true" unit="V" opcode="0x55">
953*61046927SAndroid Build Coastguard Worker    <desc>Fetches a given varying from a software buffer</desc>
954*61046927SAndroid Build Coastguard Worker    <slot/>
955*61046927SAndroid Build Coastguard Worker    <vecsize/>
956*61046927SAndroid Build Coastguard Worker    <regfmt/>
957*61046927SAndroid Build Coastguard Worker    <sr write="true"/>
958*61046927SAndroid Build Coastguard Worker    <sr_count/>
959*61046927SAndroid Build Coastguard Worker    <src>Varying index and table</src>
960*61046927SAndroid Build Coastguard Worker  </ins>
961*61046927SAndroid Build Coastguard Worker
962*61046927SAndroid Build Coastguard Worker  <ins name="LD_VAR_FLAT_IMM" title="Load immediate varying" unused="true" unit="V" opcode="0x41">
963*61046927SAndroid Build Coastguard Worker    <desc>Fetches a given varying from a software buffer</desc>
964*61046927SAndroid Build Coastguard Worker    <slot/>
965*61046927SAndroid Build Coastguard Worker    <vecsize/>
966*61046927SAndroid Build Coastguard Worker    <regfmt/>
967*61046927SAndroid Build Coastguard Worker    <sr write="true"/>
968*61046927SAndroid Build Coastguard Worker    <sr_count/>
969*61046927SAndroid Build Coastguard Worker    <imm name="table" start="8" size="4"/>
970*61046927SAndroid Build Coastguard Worker    <imm name="index" start="12" size="8"/>
971*61046927SAndroid Build Coastguard Worker  </ins>
972*61046927SAndroid Build Coastguard Worker
973*61046927SAndroid Build Coastguard Worker  <ins name="LD_ATTR_IMM" title="Load immediate attribute" opcode="0x66" opcode2="0" unused="true" unit="LS">
974*61046927SAndroid Build Coastguard Worker    <desc>
975*61046927SAndroid Build Coastguard Worker      Load `vecsize` components from the attribute descriptor at entry `index`
976*61046927SAndroid Build Coastguard Worker      of resource table `table` at index (vertex ID, instance ID), converting
977*61046927SAndroid Build Coastguard Worker      to the specified register format.
978*61046927SAndroid Build Coastguard Worker    </desc>
979*61046927SAndroid Build Coastguard Worker    <sr_count/>
980*61046927SAndroid Build Coastguard Worker    <vecsize/>
981*61046927SAndroid Build Coastguard Worker    <regfmt/>
982*61046927SAndroid Build Coastguard Worker    <slot/>
983*61046927SAndroid Build Coastguard Worker    <va_mod name="descriptor_type" start="128" size="1" implied="true"/>
984*61046927SAndroid Build Coastguard Worker    <sr write="true"/>
985*61046927SAndroid Build Coastguard Worker    <src>Vertex ID</src>
986*61046927SAndroid Build Coastguard Worker    <src>Instance ID</src>
987*61046927SAndroid Build Coastguard Worker    <imm name="index" start="20" size="4"/>
988*61046927SAndroid Build Coastguard Worker    <imm name="table" start="16" size="4"/>
989*61046927SAndroid Build Coastguard Worker  </ins>
990*61046927SAndroid Build Coastguard Worker
991*61046927SAndroid Build Coastguard Worker  <ins name="LD_ATTR" title="Load indirect attribute" opcode="0x76" opcode2="0" unused="true" unit="LS">
992*61046927SAndroid Build Coastguard Worker    <desc>
993*61046927SAndroid Build Coastguard Worker      Load `vecsize` components from the attribute descriptor at the specified
994*61046927SAndroid Build Coastguard Worker      location at index (vertex ID, instance ID), converting
995*61046927SAndroid Build Coastguard Worker      to the specified register format.
996*61046927SAndroid Build Coastguard Worker
997*61046927SAndroid Build Coastguard Worker      The index must not diverge within a warp.
998*61046927SAndroid Build Coastguard Worker    </desc>
999*61046927SAndroid Build Coastguard Worker    <sr_count/>
1000*61046927SAndroid Build Coastguard Worker    <vecsize/>
1001*61046927SAndroid Build Coastguard Worker    <regfmt/>
1002*61046927SAndroid Build Coastguard Worker    <slot/>
1003*61046927SAndroid Build Coastguard Worker    <va_mod name="descriptor_type" start="128" size="1" implied="true"/>
1004*61046927SAndroid Build Coastguard Worker    <sr write="true"/>
1005*61046927SAndroid Build Coastguard Worker    <src>Vertex ID</src>
1006*61046927SAndroid Build Coastguard Worker    <src>Instance ID</src>
1007*61046927SAndroid Build Coastguard Worker    <src>Index and table</src>
1008*61046927SAndroid Build Coastguard Worker  </ins>
1009*61046927SAndroid Build Coastguard Worker
1010*61046927SAndroid Build Coastguard Worker  <ins name="LD_TEX_IMM" title="Load immediate texture" opcode="0x66" opcode2="1" message="attribute" unit="LS">
1011*61046927SAndroid Build Coastguard Worker    <desc>
1012*61046927SAndroid Build Coastguard Worker      Load `vecsize` components from the texture descriptor at entry `index`
1013*61046927SAndroid Build Coastguard Worker      of resource table `table`, converting
1014*61046927SAndroid Build Coastguard Worker      to the specified register format.
1015*61046927SAndroid Build Coastguard Worker    </desc>
1016*61046927SAndroid Build Coastguard Worker    <sr_count count="format"/>
1017*61046927SAndroid Build Coastguard Worker    <vecsize/>
1018*61046927SAndroid Build Coastguard Worker    <regfmt/>
1019*61046927SAndroid Build Coastguard Worker    <slot/>
1020*61046927SAndroid Build Coastguard Worker    <va_mod name="descriptor_type" start="128" size="1" implied="true"/>
1021*61046927SAndroid Build Coastguard Worker    <sr write="true"/>
1022*61046927SAndroid Build Coastguard Worker    <src>X/Y coordinates (16:16)</src>
1023*61046927SAndroid Build Coastguard Worker    <src>Z/W coordinates (16:16)</src>
1024*61046927SAndroid Build Coastguard Worker    <imm name="index" ir_name="texture_index" start="20" size="4"/>
1025*61046927SAndroid Build Coastguard Worker    <imm name="table" ir_name="" start="16" size="4"/>
1026*61046927SAndroid Build Coastguard Worker  </ins>
1027*61046927SAndroid Build Coastguard Worker
1028*61046927SAndroid Build Coastguard Worker  <ins name="LD_TEX" title="Load indirect texture" message="attribute" opcode="0x76" opcode2="1" unit="LS">
1029*61046927SAndroid Build Coastguard Worker    <desc>
1030*61046927SAndroid Build Coastguard Worker      Load `vecsize` components from the texture descriptor at the specified
1031*61046927SAndroid Build Coastguard Worker      location at index, converting
1032*61046927SAndroid Build Coastguard Worker      to the specified register format.
1033*61046927SAndroid Build Coastguard Worker    </desc>
1034*61046927SAndroid Build Coastguard Worker    <sr_count count="format"/>
1035*61046927SAndroid Build Coastguard Worker    <vecsize/>
1036*61046927SAndroid Build Coastguard Worker    <regfmt/>
1037*61046927SAndroid Build Coastguard Worker    <slot/>
1038*61046927SAndroid Build Coastguard Worker    <va_mod name="descriptor_type" start="128" size="1" implied="true"/>
1039*61046927SAndroid Build Coastguard Worker    <sr write="true"/>
1040*61046927SAndroid Build Coastguard Worker    <src>X/Y coordinates (16:16)</src>
1041*61046927SAndroid Build Coastguard Worker    <src>Z/W coordinates (16:16)</src>
1042*61046927SAndroid Build Coastguard Worker    <src>Index and table</src>
1043*61046927SAndroid Build Coastguard Worker  </ins>
1044*61046927SAndroid Build Coastguard Worker
1045*61046927SAndroid Build Coastguard Worker  <ins name="LEA_ATTR_IMM" title="Load effective address of image texel" opcode="0x67" opcode2="0" unused="true" unit="LS">
1046*61046927SAndroid Build Coastguard Worker    <desc>
1047*61046927SAndroid Build Coastguard Worker      Load the effective address of an attribute specified with the
1048*61046927SAndroid Build Coastguard Worker      given immediate index. Returns three staging register: the low/high
1049*61046927SAndroid Build Coastguard Worker      32-bits of the address and the internal conversion descriptor.
1050*61046927SAndroid Build Coastguard Worker    </desc>
1051*61046927SAndroid Build Coastguard Worker    <slot/>
1052*61046927SAndroid Build Coastguard Worker    <sr_count/>
1053*61046927SAndroid Build Coastguard Worker    <va_mod name="descriptor_type" start="128" size="1" implied="true"/>
1054*61046927SAndroid Build Coastguard Worker    <sr write="true"/>
1055*61046927SAndroid Build Coastguard Worker    <src>Vertex index</src>
1056*61046927SAndroid Build Coastguard Worker    <src>Instance index</src>
1057*61046927SAndroid Build Coastguard Worker    <imm name="table" start="16" size="4"/>
1058*61046927SAndroid Build Coastguard Worker    <imm name="index" start="20" size="4"/>
1059*61046927SAndroid Build Coastguard Worker  </ins>
1060*61046927SAndroid Build Coastguard Worker
1061*61046927SAndroid Build Coastguard Worker  <ins name="LEA_ATTR" title="Load effective address of image texel" opcode="0x77" opcode2="0" unused="true" unit="LS">
1062*61046927SAndroid Build Coastguard Worker    <desc>
1063*61046927SAndroid Build Coastguard Worker      Load the effective address of an attribute specified with the
1064*61046927SAndroid Build Coastguard Worker      given index. Returns three staging register: the low/high
1065*61046927SAndroid Build Coastguard Worker      32-bits of the address and the internal conversion descriptor.
1066*61046927SAndroid Build Coastguard Worker    </desc>
1067*61046927SAndroid Build Coastguard Worker    <vecsize/>
1068*61046927SAndroid Build Coastguard Worker    <slot/>
1069*61046927SAndroid Build Coastguard Worker    <sr_count/>
1070*61046927SAndroid Build Coastguard Worker    <va_mod name="descriptor_type" start="128" size="1" implied="true"/>
1071*61046927SAndroid Build Coastguard Worker    <sr write="true"/>
1072*61046927SAndroid Build Coastguard Worker    <src>Vertex index</src>
1073*61046927SAndroid Build Coastguard Worker    <src>Instance index</src>
1074*61046927SAndroid Build Coastguard Worker    <src>Attribute index and table</src>
1075*61046927SAndroid Build Coastguard Worker  </ins>
1076*61046927SAndroid Build Coastguard Worker
1077*61046927SAndroid Build Coastguard Worker  <ins name="LEA_TEX_IMM" title="Load effective address of image texel" opcode="0x67" opcode2="1" unused="true" unit="LS">
1078*61046927SAndroid Build Coastguard Worker    <desc>
1079*61046927SAndroid Build Coastguard Worker      Load the effective address of a texel from the image specified with the
1080*61046927SAndroid Build Coastguard Worker      given immediate index. Returns three staging registers: the low/high
1081*61046927SAndroid Build Coastguard Worker      32-bits of the address and the internal conversion descriptor. The format
1082*61046927SAndroid Build Coastguard Worker      of the internal conversion descriptor is compatible with Bifrost but
1083*61046927SAndroid Build Coastguard Worker      omits the register format, as this is specified with the ST_CVT
1084*61046927SAndroid Build Coastguard Worker      instruction on Valhall.
1085*61046927SAndroid Build Coastguard Worker
1086*61046927SAndroid Build Coastguard Worker      Coordinates are specified as 16-bit integers, packed into 32-bit sources.
1087*61046927SAndroid Build Coastguard Worker    </desc>
1088*61046927SAndroid Build Coastguard Worker    <slot/>
1089*61046927SAndroid Build Coastguard Worker    <sr_count/>
1090*61046927SAndroid Build Coastguard Worker    <va_mod name="descriptor_type" start="128" size="1" implied="true"/>
1091*61046927SAndroid Build Coastguard Worker    <sr write="true"/>
1092*61046927SAndroid Build Coastguard Worker    <src>X/Y coordinates (16:16)</src>
1093*61046927SAndroid Build Coastguard Worker    <src>Z/W coordinates (16:16)</src>
1094*61046927SAndroid Build Coastguard Worker    <imm name="table" start="16" size="4"/>
1095*61046927SAndroid Build Coastguard Worker    <imm name="index" start="20" size="4"/>
1096*61046927SAndroid Build Coastguard Worker  </ins>
1097*61046927SAndroid Build Coastguard Worker
1098*61046927SAndroid Build Coastguard Worker  <ins name="LEA_TEX" title="Load effective address of image texel" opcode="0x77" opcode2="1" unused="true" unit="LS">
1099*61046927SAndroid Build Coastguard Worker    <desc>
1100*61046927SAndroid Build Coastguard Worker      Load the effective address of a texel from the image specified with the
1101*61046927SAndroid Build Coastguard Worker      given index. Returns three staging register: the low/high
1102*61046927SAndroid Build Coastguard Worker      32-bits of the address and the internal conversion descriptor. The format
1103*61046927SAndroid Build Coastguard Worker      of the internal conversion descriptor is compatible with Bifrost but
1104*61046927SAndroid Build Coastguard Worker      omits the register format, as this is specified with the ST_CVT
1105*61046927SAndroid Build Coastguard Worker      instruction on Valhall.
1106*61046927SAndroid Build Coastguard Worker
1107*61046927SAndroid Build Coastguard Worker      Coordinates are specified as 16-bit integers, packed into 32-bit sources.
1108*61046927SAndroid Build Coastguard Worker    </desc>
1109*61046927SAndroid Build Coastguard Worker    <vecsize/>
1110*61046927SAndroid Build Coastguard Worker    <slot/>
1111*61046927SAndroid Build Coastguard Worker    <sr_count/>
1112*61046927SAndroid Build Coastguard Worker    <va_mod name="descriptor_type" start="128" size="1" implied="true"/>
1113*61046927SAndroid Build Coastguard Worker    <sr write="true"/>
1114*61046927SAndroid Build Coastguard Worker    <src size="16">X/Y coordinates (16:16)</src>
1115*61046927SAndroid Build Coastguard Worker    <src>Z/W coordinates (16:16)</src>
1116*61046927SAndroid Build Coastguard Worker    <src>Index and table</src>
1117*61046927SAndroid Build Coastguard Worker  </ins>
1118*61046927SAndroid Build Coastguard Worker
1119*61046927SAndroid Build Coastguard Worker  <ins name="LD_BUFFER.i8" title="Global memory load" message="load" opcode="0x6a" opcode2="0" unit="LS">
1120*61046927SAndroid Build Coastguard Worker    <desc>
1121*61046927SAndroid Build Coastguard Worker      Loads a buffer descriptor. If bits 25...31 of the mode descriptor are
1122*61046927SAndroid Build Coastguard Worker      all-ones, load from the buffer descriptors in the table indexed by the
1123*61046927SAndroid Build Coastguard Worker      bottom byte of the mode descriptor. If they are all zeroes, load the
1124*61046927SAndroid Build Coastguard Worker      contents of the buffer in the first table indexed by the bottom byte of
1125*61046927SAndroid Build Coastguard Worker      the mode descriptor.
1126*61046927SAndroid Build Coastguard Worker    </desc>
1127*61046927SAndroid Build Coastguard Worker    <sr write="true"/>
1128*61046927SAndroid Build Coastguard Worker    <sr_count count="1"/>
1129*61046927SAndroid Build Coastguard Worker    <va_mod name="load_lane_8_bit" start="36" size="3"/>
1130*61046927SAndroid Build Coastguard Worker    <va_mod name="unsigned" start="39" size="1"/>
1131*61046927SAndroid Build Coastguard Worker    <slot/>
1132*61046927SAndroid Build Coastguard Worker    <src size="32">Address to load from after adding offset</src>
1133*61046927SAndroid Build Coastguard Worker    <src size="32">Mode descriptor</src>
1134*61046927SAndroid Build Coastguard Worker  </ins>
1135*61046927SAndroid Build Coastguard Worker
1136*61046927SAndroid Build Coastguard Worker  <ins name="LD_BUFFER.i16" title="Global memory load" message="load" opcode="0x6a" opcode2="1" unit="LS">
1137*61046927SAndroid Build Coastguard Worker    <desc>
1138*61046927SAndroid Build Coastguard Worker      Loads a buffer descriptor. If bits 25...31 of the mode descriptor are
1139*61046927SAndroid Build Coastguard Worker      all-ones, load from the buffer descriptors in the table indexed by the
1140*61046927SAndroid Build Coastguard Worker      bottom byte of the mode descriptor. If they are all zeroes, load the
1141*61046927SAndroid Build Coastguard Worker      contents of the buffer in the first table indexed by the bottom byte of
1142*61046927SAndroid Build Coastguard Worker      the mode descriptor.
1143*61046927SAndroid Build Coastguard Worker    </desc>
1144*61046927SAndroid Build Coastguard Worker    <sr write="true"/>
1145*61046927SAndroid Build Coastguard Worker    <sr_count count="1"/>
1146*61046927SAndroid Build Coastguard Worker    <va_mod name="load_lane_16_bit" start="36" size="3"/>
1147*61046927SAndroid Build Coastguard Worker    <va_mod name="unsigned" start="39" size="1"/>
1148*61046927SAndroid Build Coastguard Worker    <slot/>
1149*61046927SAndroid Build Coastguard Worker    <src size="32">Byte offset</src>
1150*61046927SAndroid Build Coastguard Worker    <src size="32">Mode descriptor</src>
1151*61046927SAndroid Build Coastguard Worker  </ins>
1152*61046927SAndroid Build Coastguard Worker
1153*61046927SAndroid Build Coastguard Worker  <ins name="LD_BUFFER.i24" title="Global memory load" message="load" opcode="0x6a" opcode2="2" unit="LS">
1154*61046927SAndroid Build Coastguard Worker    <desc>
1155*61046927SAndroid Build Coastguard Worker      Loads a buffer descriptor. If bits 25...31 of the mode descriptor are
1156*61046927SAndroid Build Coastguard Worker      all-ones, load from the buffer descriptors in the table indexed by the
1157*61046927SAndroid Build Coastguard Worker      bottom byte of the mode descriptor. If they are all zeroes, load the
1158*61046927SAndroid Build Coastguard Worker      contents of the buffer in the first table indexed by the bottom byte of
1159*61046927SAndroid Build Coastguard Worker      the mode descriptor.
1160*61046927SAndroid Build Coastguard Worker    </desc>
1161*61046927SAndroid Build Coastguard Worker    <sr write="true"/>
1162*61046927SAndroid Build Coastguard Worker    <sr_count count="1"/>
1163*61046927SAndroid Build Coastguard Worker    <va_mod name="load_lane_24_bit" start="36" size="3"/>
1164*61046927SAndroid Build Coastguard Worker    <va_mod name="unsigned" start="39" size="1"/>
1165*61046927SAndroid Build Coastguard Worker    <slot/>
1166*61046927SAndroid Build Coastguard Worker    <src size="32">Byte offset</src>
1167*61046927SAndroid Build Coastguard Worker    <src size="32">Mode descriptor</src>
1168*61046927SAndroid Build Coastguard Worker  </ins>
1169*61046927SAndroid Build Coastguard Worker
1170*61046927SAndroid Build Coastguard Worker  <ins name="LD_BUFFER.i32" title="Global memory load" message="load" opcode="0x6a" opcode2="3" unit="LS">
1171*61046927SAndroid Build Coastguard Worker    <desc>
1172*61046927SAndroid Build Coastguard Worker      Loads a buffer descriptor. If bits 25...31 of the mode descriptor are
1173*61046927SAndroid Build Coastguard Worker      all-ones, load from the buffer descriptors in the table indexed by the
1174*61046927SAndroid Build Coastguard Worker      bottom byte of the mode descriptor. If they are all zeroes, load the
1175*61046927SAndroid Build Coastguard Worker      contents of the buffer in the first table indexed by the bottom byte of
1176*61046927SAndroid Build Coastguard Worker      the mode descriptor.
1177*61046927SAndroid Build Coastguard Worker    </desc>
1178*61046927SAndroid Build Coastguard Worker    <sr write="true"/>
1179*61046927SAndroid Build Coastguard Worker    <sr_count count="1"/>
1180*61046927SAndroid Build Coastguard Worker    <va_mod name="load_lane_32_bit" start="36" size="3"/>
1181*61046927SAndroid Build Coastguard Worker    <va_mod name="unsigned" start="39" size="1"/>
1182*61046927SAndroid Build Coastguard Worker    <slot/>
1183*61046927SAndroid Build Coastguard Worker    <src size="32">Byte offset</src>
1184*61046927SAndroid Build Coastguard Worker    <src size="32">Mode descriptor</src>
1185*61046927SAndroid Build Coastguard Worker  </ins>
1186*61046927SAndroid Build Coastguard Worker
1187*61046927SAndroid Build Coastguard Worker  <ins name="LD_BUFFER.i48" title="Global memory load" message="load" opcode="0x6a" opcode2="4" unit="LS">
1188*61046927SAndroid Build Coastguard Worker    <desc>
1189*61046927SAndroid Build Coastguard Worker      Loads a buffer descriptor. If bits 25...31 of the mode descriptor are
1190*61046927SAndroid Build Coastguard Worker      all-ones, load from the buffer descriptors in the table indexed by the
1191*61046927SAndroid Build Coastguard Worker      bottom byte of the mode descriptor. If they are all zeroes, load the
1192*61046927SAndroid Build Coastguard Worker      contents of the buffer in the first table indexed by the bottom byte of
1193*61046927SAndroid Build Coastguard Worker      the mode descriptor.
1194*61046927SAndroid Build Coastguard Worker    </desc>
1195*61046927SAndroid Build Coastguard Worker    <sr write="true"/>
1196*61046927SAndroid Build Coastguard Worker    <sr_count count="2"/>
1197*61046927SAndroid Build Coastguard Worker    <va_mod name="load_lane_48_bit" start="36" size="3"/>
1198*61046927SAndroid Build Coastguard Worker    <va_mod name="unsigned" start="39" size="1"/>
1199*61046927SAndroid Build Coastguard Worker    <slot/>
1200*61046927SAndroid Build Coastguard Worker    <src size="32">Byte offset</src>
1201*61046927SAndroid Build Coastguard Worker    <src size="32">Mode descriptor</src>
1202*61046927SAndroid Build Coastguard Worker  </ins>
1203*61046927SAndroid Build Coastguard Worker
1204*61046927SAndroid Build Coastguard Worker  <ins name="LD_BUFFER.i64" title="Global memory load" message="load" opcode="0x6a" opcode2="5" unit="LS">
1205*61046927SAndroid Build Coastguard Worker    <desc>
1206*61046927SAndroid Build Coastguard Worker      Loads a buffer descriptor. If bits 25...31 of the mode descriptor are
1207*61046927SAndroid Build Coastguard Worker      all-ones, load from the buffer descriptors in the table indexed by the
1208*61046927SAndroid Build Coastguard Worker      bottom byte of the mode descriptor. If they are all zeroes, load the
1209*61046927SAndroid Build Coastguard Worker      contents of the buffer in the first table indexed by the bottom byte of
1210*61046927SAndroid Build Coastguard Worker      the mode descriptor.
1211*61046927SAndroid Build Coastguard Worker    </desc>
1212*61046927SAndroid Build Coastguard Worker    <sr write="true"/>
1213*61046927SAndroid Build Coastguard Worker    <sr_count count="2"/>
1214*61046927SAndroid Build Coastguard Worker    <va_mod name="load_lane_64_bit" start="36" size="3"/>
1215*61046927SAndroid Build Coastguard Worker    <va_mod name="unsigned" start="39" size="1"/>
1216*61046927SAndroid Build Coastguard Worker    <slot/>
1217*61046927SAndroid Build Coastguard Worker    <src size="32">Byte offset</src>
1218*61046927SAndroid Build Coastguard Worker    <src size="32">Mode descriptor</src>
1219*61046927SAndroid Build Coastguard Worker  </ins>
1220*61046927SAndroid Build Coastguard Worker
1221*61046927SAndroid Build Coastguard Worker  <ins name="LD_BUFFER.i96" title="Global memory load" message="load" opcode="0x6a" opcode2="6" unit="LS">
1222*61046927SAndroid Build Coastguard Worker    <desc>
1223*61046927SAndroid Build Coastguard Worker      Loads a buffer descriptor. If bits 25...31 of the mode descriptor are
1224*61046927SAndroid Build Coastguard Worker      all-ones, load from the buffer descriptors in the table indexed by the
1225*61046927SAndroid Build Coastguard Worker      bottom byte of the mode descriptor. If they are all zeroes, load the
1226*61046927SAndroid Build Coastguard Worker      contents of the buffer in the first table indexed by the bottom byte of
1227*61046927SAndroid Build Coastguard Worker      the mode descriptor.
1228*61046927SAndroid Build Coastguard Worker    </desc>
1229*61046927SAndroid Build Coastguard Worker    <sr write="true"/>
1230*61046927SAndroid Build Coastguard Worker    <sr_count count="3"/>
1231*61046927SAndroid Build Coastguard Worker    <va_mod name="load_lane_96_bit" start="36" size="3"/>
1232*61046927SAndroid Build Coastguard Worker    <va_mod name="unsigned" start="39" size="1"/>
1233*61046927SAndroid Build Coastguard Worker    <slot/>
1234*61046927SAndroid Build Coastguard Worker    <src size="32">Byte offset</src>
1235*61046927SAndroid Build Coastguard Worker    <src size="32">Mode descriptor</src>
1236*61046927SAndroid Build Coastguard Worker  </ins>
1237*61046927SAndroid Build Coastguard Worker
1238*61046927SAndroid Build Coastguard Worker  <ins name="LD_BUFFER.i128" title="Global memory load" message="load" opcode="0x6a" opcode2="7" unit="LS">
1239*61046927SAndroid Build Coastguard Worker    <desc>
1240*61046927SAndroid Build Coastguard Worker      Loads a buffer descriptor. If bits 25...31 of the mode descriptor are
1241*61046927SAndroid Build Coastguard Worker      all-ones, load from the buffer descriptors in the table indexed by the
1242*61046927SAndroid Build Coastguard Worker      bottom byte of the mode descriptor. If they are all zeroes, load the
1243*61046927SAndroid Build Coastguard Worker      contents of the buffer in the first table indexed by the bottom byte of
1244*61046927SAndroid Build Coastguard Worker      the mode descriptor.
1245*61046927SAndroid Build Coastguard Worker    </desc>
1246*61046927SAndroid Build Coastguard Worker    <sr write="true"/>
1247*61046927SAndroid Build Coastguard Worker    <sr_count count="4"/>
1248*61046927SAndroid Build Coastguard Worker    <va_mod name="load_lane_128_bit" start="36" size="3"/>
1249*61046927SAndroid Build Coastguard Worker    <va_mod name="unsigned" start="39" size="1"/>
1250*61046927SAndroid Build Coastguard Worker    <slot/>
1251*61046927SAndroid Build Coastguard Worker    <src size="32">Byte offset</src>
1252*61046927SAndroid Build Coastguard Worker    <src size="32">Mode descriptor</src>
1253*61046927SAndroid Build Coastguard Worker  </ins>
1254*61046927SAndroid Build Coastguard Worker
1255*61046927SAndroid Build Coastguard Worker  <ins name="LEA_BUF_IMM" title="Load buffer effective address" message="attribute" opcode="0x5E" unit="LS">
1256*61046927SAndroid Build Coastguard Worker    <desc>
1257*61046927SAndroid Build Coastguard Worker      Load effective address of a buffer with an immediate offset added.
1258*61046927SAndroid Build Coastguard Worker    </desc>
1259*61046927SAndroid Build Coastguard Worker    <sr write="true"/>
1260*61046927SAndroid Build Coastguard Worker    <sr_count count="2"/>
1261*61046927SAndroid Build Coastguard Worker    <slot/>
1262*61046927SAndroid Build Coastguard Worker    <imm name="table" ir_name="" start="8" size="4"/>
1263*61046927SAndroid Build Coastguard Worker    <imm name="index" ir_name="" start="12" size="8"/>
1264*61046927SAndroid Build Coastguard Worker    <src>Linear ID</src>
1265*61046927SAndroid Build Coastguard Worker  </ins>
1266*61046927SAndroid Build Coastguard Worker
1267*61046927SAndroid Build Coastguard Worker  <ins name="LOAD.i8" title="Global memory load" opcode="0x60" opcode2="0" unused="true" unit="LS">
1268*61046927SAndroid Build Coastguard Worker    <desc>Loads from main memory</desc>
1269*61046927SAndroid Build Coastguard Worker    <sr write="true"/>
1270*61046927SAndroid Build Coastguard Worker    <memory_access/>
1271*61046927SAndroid Build Coastguard Worker    <sr_count/>
1272*61046927SAndroid Build Coastguard Worker    <va_mod name="load_lane_8_bit" start="36" size="3"/>
1273*61046927SAndroid Build Coastguard Worker    <va_mod name="unsigned" start="39" size="1"/>
1274*61046927SAndroid Build Coastguard Worker    <slot/>
1275*61046927SAndroid Build Coastguard Worker    <src size="64">Address to load from after adding offset</src>
1276*61046927SAndroid Build Coastguard Worker    <imm name="offset" start="8" size="16" signed="true"/>
1277*61046927SAndroid Build Coastguard Worker  </ins>
1278*61046927SAndroid Build Coastguard Worker
1279*61046927SAndroid Build Coastguard Worker  <ins name="LOAD.i16" title="Global memory load" opcode="0x60" opcode2="1" unused="true" unit="LS">
1280*61046927SAndroid Build Coastguard Worker    <desc>Loads from main memory</desc>
1281*61046927SAndroid Build Coastguard Worker    <sr write="true"/>
1282*61046927SAndroid Build Coastguard Worker    <memory_access/>
1283*61046927SAndroid Build Coastguard Worker    <sr_count/>
1284*61046927SAndroid Build Coastguard Worker    <va_mod name="load_lane_16_bit" start="36" size="3"/>
1285*61046927SAndroid Build Coastguard Worker    <va_mod name="unsigned" start="39" size="1"/>
1286*61046927SAndroid Build Coastguard Worker    <slot/>
1287*61046927SAndroid Build Coastguard Worker    <src size="64">Address to load from after adding offset</src>
1288*61046927SAndroid Build Coastguard Worker    <imm name="offset" start="8" size="16" signed="true"/>
1289*61046927SAndroid Build Coastguard Worker  </ins>
1290*61046927SAndroid Build Coastguard Worker
1291*61046927SAndroid Build Coastguard Worker  <ins name="LOAD.i24" title="Global memory load" opcode="0x60" opcode2="2" unused="true" unit="LS">
1292*61046927SAndroid Build Coastguard Worker    <desc>Loads from main memory</desc>
1293*61046927SAndroid Build Coastguard Worker    <sr write="true"/>
1294*61046927SAndroid Build Coastguard Worker    <memory_access/>
1295*61046927SAndroid Build Coastguard Worker    <sr_count/>
1296*61046927SAndroid Build Coastguard Worker    <va_mod name="load_lane_24_bit" start="36" size="3"/>
1297*61046927SAndroid Build Coastguard Worker    <va_mod name="unsigned" start="39" size="1"/>
1298*61046927SAndroid Build Coastguard Worker    <slot/>
1299*61046927SAndroid Build Coastguard Worker    <src size="64">Address to load from after adding offset</src>
1300*61046927SAndroid Build Coastguard Worker    <imm name="offset" start="8" size="16" signed="true"/>
1301*61046927SAndroid Build Coastguard Worker  </ins>
1302*61046927SAndroid Build Coastguard Worker
1303*61046927SAndroid Build Coastguard Worker  <ins name="LOAD.i32" title="Global memory load" opcode="0x60" opcode2="3" unused="true" unit="LS">
1304*61046927SAndroid Build Coastguard Worker    <desc>Loads from main memory</desc>
1305*61046927SAndroid Build Coastguard Worker    <sr write="true"/>
1306*61046927SAndroid Build Coastguard Worker    <memory_access/>
1307*61046927SAndroid Build Coastguard Worker    <sr_count/>
1308*61046927SAndroid Build Coastguard Worker    <va_mod name="load_lane_32_bit" start="36" size="3"/>
1309*61046927SAndroid Build Coastguard Worker    <va_mod name="unsigned" start="39" size="1"/>
1310*61046927SAndroid Build Coastguard Worker    <slot/>
1311*61046927SAndroid Build Coastguard Worker    <src size="64">Address to load from after adding offset</src>
1312*61046927SAndroid Build Coastguard Worker    <imm name="offset" start="8" size="16" signed="true"/>
1313*61046927SAndroid Build Coastguard Worker  </ins>
1314*61046927SAndroid Build Coastguard Worker
1315*61046927SAndroid Build Coastguard Worker  <ins name="LOAD.i48" title="Global memory load" opcode="0x60" opcode2="4" unused="true" unit="LS">
1316*61046927SAndroid Build Coastguard Worker    <desc>Loads from main memory</desc>
1317*61046927SAndroid Build Coastguard Worker    <sr write="true"/>
1318*61046927SAndroid Build Coastguard Worker    <memory_access/>
1319*61046927SAndroid Build Coastguard Worker    <sr_count/>
1320*61046927SAndroid Build Coastguard Worker    <va_mod name="load_lane_48_bit" start="36" size="3"/>
1321*61046927SAndroid Build Coastguard Worker    <va_mod name="unsigned" start="39" size="1"/>
1322*61046927SAndroid Build Coastguard Worker    <slot/>
1323*61046927SAndroid Build Coastguard Worker    <src size="64">Address to load from after adding offset</src>
1324*61046927SAndroid Build Coastguard Worker    <imm name="offset" start="8" size="16" signed="true"/>
1325*61046927SAndroid Build Coastguard Worker  </ins>
1326*61046927SAndroid Build Coastguard Worker
1327*61046927SAndroid Build Coastguard Worker  <ins name="LOAD.i64" title="Global memory load" opcode="0x60" opcode2="5" unused="true" unit="LS">
1328*61046927SAndroid Build Coastguard Worker    <desc>Loads from main memory</desc>
1329*61046927SAndroid Build Coastguard Worker    <sr write="true"/>
1330*61046927SAndroid Build Coastguard Worker    <memory_access/>
1331*61046927SAndroid Build Coastguard Worker    <sr_count/>
1332*61046927SAndroid Build Coastguard Worker    <va_mod name="load_lane_64_bit" start="36" size="3"/>
1333*61046927SAndroid Build Coastguard Worker    <va_mod name="unsigned" start="39" size="1"/>
1334*61046927SAndroid Build Coastguard Worker    <slot/>
1335*61046927SAndroid Build Coastguard Worker    <src size="64">Address to load from after adding offset</src>
1336*61046927SAndroid Build Coastguard Worker    <imm name="offset" start="8" size="16" signed="true"/>
1337*61046927SAndroid Build Coastguard Worker  </ins>
1338*61046927SAndroid Build Coastguard Worker
1339*61046927SAndroid Build Coastguard Worker  <ins name="LOAD.i96" title="Global memory load" opcode="0x60" opcode2="6" unused="true" unit="LS">
1340*61046927SAndroid Build Coastguard Worker    <desc>Loads from main memory</desc>
1341*61046927SAndroid Build Coastguard Worker    <sr write="true"/>
1342*61046927SAndroid Build Coastguard Worker    <memory_access/>
1343*61046927SAndroid Build Coastguard Worker    <sr_count/>
1344*61046927SAndroid Build Coastguard Worker    <va_mod name="load_lane_96_bit" start="36" size="3"/>
1345*61046927SAndroid Build Coastguard Worker    <va_mod name="unsigned" start="39" size="1"/>
1346*61046927SAndroid Build Coastguard Worker    <slot/>
1347*61046927SAndroid Build Coastguard Worker    <src size="64">Address to load from after adding offset</src>
1348*61046927SAndroid Build Coastguard Worker    <imm name="offset" start="8" size="16" signed="true"/>
1349*61046927SAndroid Build Coastguard Worker  </ins>
1350*61046927SAndroid Build Coastguard Worker
1351*61046927SAndroid Build Coastguard Worker  <ins name="LOAD.i128" title="Global memory load" opcode="0x60" opcode2="7" unused="true" unit="LS">
1352*61046927SAndroid Build Coastguard Worker    <desc>Loads from main memory</desc>
1353*61046927SAndroid Build Coastguard Worker    <sr write="true"/>
1354*61046927SAndroid Build Coastguard Worker    <memory_access/>
1355*61046927SAndroid Build Coastguard Worker    <sr_count/>
1356*61046927SAndroid Build Coastguard Worker    <va_mod name="load_lane_128_bit" start="36" size="3"/>
1357*61046927SAndroid Build Coastguard Worker    <va_mod name="unsigned" start="39" size="1"/>
1358*61046927SAndroid Build Coastguard Worker    <slot/>
1359*61046927SAndroid Build Coastguard Worker    <src size="64">Address to load from after adding offset</src>
1360*61046927SAndroid Build Coastguard Worker    <imm name="offset" start="8" size="16" signed="true"/>
1361*61046927SAndroid Build Coastguard Worker  </ins>
1362*61046927SAndroid Build Coastguard Worker
1363*61046927SAndroid Build Coastguard Worker  <group name="STORE" title="Global memory store" opcode="0x61" unused="true" unit="LS">
1364*61046927SAndroid Build Coastguard Worker    <desc>Stores to main memory</desc>
1365*61046927SAndroid Build Coastguard Worker    <sr read="true"/>
1366*61046927SAndroid Build Coastguard Worker    <ins name="STORE.i8" opcode2="0x0"/>
1367*61046927SAndroid Build Coastguard Worker    <ins name="STORE.i16" opcode2="0x1"/>
1368*61046927SAndroid Build Coastguard Worker    <ins name="STORE.i24" opcode2="0x2"/>
1369*61046927SAndroid Build Coastguard Worker    <ins name="STORE.i32" opcode2="0x3"/>
1370*61046927SAndroid Build Coastguard Worker    <ins name="STORE.i48" opcode2="0x4"/>
1371*61046927SAndroid Build Coastguard Worker    <ins name="STORE.i64" opcode2="0x5"/>
1372*61046927SAndroid Build Coastguard Worker    <ins name="STORE.i96" opcode2="0x6"/>
1373*61046927SAndroid Build Coastguard Worker    <ins name="STORE.i128" opcode2="0x7"/>
1374*61046927SAndroid Build Coastguard Worker    <sr_count/>
1375*61046927SAndroid Build Coastguard Worker    <memory_access/>
1376*61046927SAndroid Build Coastguard Worker    <slot/>
1377*61046927SAndroid Build Coastguard Worker    <src size="64">Address to store to after adding offset</src>
1378*61046927SAndroid Build Coastguard Worker    <imm name="offset" start="8" size="16" signed="true"/>
1379*61046927SAndroid Build Coastguard Worker  </group>
1380*61046927SAndroid Build Coastguard Worker
1381*61046927SAndroid Build Coastguard Worker  <ins name="LEA_BUFFER" title="Load buffer effective address" message="attribute" opcode="0x6B" unit="LS">
1382*61046927SAndroid Build Coastguard Worker    <desc>
1383*61046927SAndroid Build Coastguard Worker      Load effective address of a simple buffer with an offset added.
1384*61046927SAndroid Build Coastguard Worker    </desc>
1385*61046927SAndroid Build Coastguard Worker    <sr write="true"/>
1386*61046927SAndroid Build Coastguard Worker    <sr_count count="2"/>
1387*61046927SAndroid Build Coastguard Worker    <slot/>
1388*61046927SAndroid Build Coastguard Worker    <src>Offset</src>
1389*61046927SAndroid Build Coastguard Worker    <src>Index</src>
1390*61046927SAndroid Build Coastguard Worker  </ins>
1391*61046927SAndroid Build Coastguard Worker
1392*61046927SAndroid Build Coastguard Worker  <ins name="ST_CVT" title="Store with conversion" opcode="0x71" unused="true" unit="LS">
1393*61046927SAndroid Build Coastguard Worker    <desc>
1394*61046927SAndroid Build Coastguard Worker      Store to memory with data conversion. The address to store to is given in
1395*61046927SAndroid Build Coastguard Worker      the first source, which must be a 64-bit register (a pair of 32-bit
1396*61046927SAndroid Build Coastguard Worker      registers). The other source is the conversion descriptor used for the store.
1397*61046927SAndroid Build Coastguard Worker
1398*61046927SAndroid Build Coastguard Worker      Used with LEA_TEX_IMM to implement image stores.
1399*61046927SAndroid Build Coastguard Worker    </desc>
1400*61046927SAndroid Build Coastguard Worker    <slot/>
1401*61046927SAndroid Build Coastguard Worker    <va_mod name="memory_access" start="37" size="3"/>
1402*61046927SAndroid Build Coastguard Worker    <vecsize/>
1403*61046927SAndroid Build Coastguard Worker    <regfmt/>
1404*61046927SAndroid Build Coastguard Worker    <sr read="true"/>
1405*61046927SAndroid Build Coastguard Worker    <sr_count/>
1406*61046927SAndroid Build Coastguard Worker    <src size="64">64-bit address to store to</src>
1407*61046927SAndroid Build Coastguard Worker    <imm name="offset" start="8" size="8"/>
1408*61046927SAndroid Build Coastguard Worker    <src>Internal conversion descriptor</src>
1409*61046927SAndroid Build Coastguard Worker  </ins>
1410*61046927SAndroid Build Coastguard Worker
1411*61046927SAndroid Build Coastguard Worker  <ins name="LD_TILE" title="Load from tilebuffer" opcode="0x78" unused="true" unit="NONE">
1412*61046927SAndroid Build Coastguard Worker    <desc>
1413*61046927SAndroid Build Coastguard Worker      Loads a given render target, specified in the pixel indices descriptor, at
1414*61046927SAndroid Build Coastguard Worker      a given location and sample, and convert to the format specified in the
1415*61046927SAndroid Build Coastguard Worker      internal conversion descriptor. Used to implement EXT_framebuffer_fetch
1416*61046927SAndroid Build Coastguard Worker      and internally in blend shaders.
1417*61046927SAndroid Build Coastguard Worker    </desc>
1418*61046927SAndroid Build Coastguard Worker    <sr write="true"/>
1419*61046927SAndroid Build Coastguard Worker    <sr_count/>
1420*61046927SAndroid Build Coastguard Worker    <vecsize/>
1421*61046927SAndroid Build Coastguard Worker    <regfmt/>
1422*61046927SAndroid Build Coastguard Worker    <slot/>
1423*61046927SAndroid Build Coastguard Worker    <src>Pixel indices descriptor</src>
1424*61046927SAndroid Build Coastguard Worker    <src>Coverage mask</src>
1425*61046927SAndroid Build Coastguard Worker    <src>Conversion descriptor</src>
1426*61046927SAndroid Build Coastguard Worker  </ins>
1427*61046927SAndroid Build Coastguard Worker
1428*61046927SAndroid Build Coastguard Worker  <ins name="ST_TILE" title="Store to tilebuffer" opcode="0x79" unused="true" unit="NONE">
1429*61046927SAndroid Build Coastguard Worker    <desc>
1430*61046927SAndroid Build Coastguard Worker      Store to given render target, specified in the pixel indices descriptor, at
1431*61046927SAndroid Build Coastguard Worker      a given location and sample, and convert to the format specified in the
1432*61046927SAndroid Build Coastguard Worker      internal conversion descriptor. Used internally in blend shaders.
1433*61046927SAndroid Build Coastguard Worker    </desc>
1434*61046927SAndroid Build Coastguard Worker    <sr read="true"/>
1435*61046927SAndroid Build Coastguard Worker    <sr_count/>
1436*61046927SAndroid Build Coastguard Worker    <vecsize/>
1437*61046927SAndroid Build Coastguard Worker    <regfmt/>
1438*61046927SAndroid Build Coastguard Worker    <slot/>
1439*61046927SAndroid Build Coastguard Worker    <src>Pixel indices descriptor</src>
1440*61046927SAndroid Build Coastguard Worker    <src>Coverage mask</src>
1441*61046927SAndroid Build Coastguard Worker    <src>Conversion descriptor</src>
1442*61046927SAndroid Build Coastguard Worker  </ins>
1443*61046927SAndroid Build Coastguard Worker
1444*61046927SAndroid Build Coastguard Worker  <ins name="BLEND" title="Blend render target" opcode="0x7F" unused="true" unit="NONE">
1445*61046927SAndroid Build Coastguard Worker    <desc>
1446*61046927SAndroid Build Coastguard Worker      Blends a given render target. This loads the API-specified blend state for
1447*61046927SAndroid Build Coastguard Worker      the render target from the first source. Blend descriptors are available
1448*61046927SAndroid Build Coastguard Worker      as special immediates. It then reads the colour to be blended from the
1449*61046927SAndroid Build Coastguard Worker      first staging register, with the specified vector size and register format
1450*61046927SAndroid Build Coastguard Worker      as desired. The resulting coverage mask is stored to the second set of
1451*61046927SAndroid Build Coastguard Worker      staging registers.
1452*61046927SAndroid Build Coastguard Worker
1453*61046927SAndroid Build Coastguard Worker      In the fixed-function path, `BLEND` sends the colour to the blender to be
1454*61046927SAndroid Build Coastguard Worker      written to the tilebuffer. Then, if the instruction's flow control
1455*61046927SAndroid Build Coastguard Worker      specifies termination, the fragment program is ended. If it does not
1456*61046927SAndroid Build Coastguard Worker      specify termination, `BLEND` acts as a relative branch, branching with the
1457*61046927SAndroid Build Coastguard Worker      offset specified as `target`. This allows the subsequent instructions to
1458*61046927SAndroid Build Coastguard Worker      be skipped when fixed-function blending is used. Note this implicit branch
1459*61046927SAndroid Build Coastguard Worker      can never introduce divergence, so `.reconverge` is not required.
1460*61046927SAndroid Build Coastguard Worker
1461*61046927SAndroid Build Coastguard Worker      In the blend shader path, `BLEND` ignores the specified flow control and
1462*61046927SAndroid Build Coastguard Worker      does not branch to the specified offset. Instead, execution continues
1463*61046927SAndroid Build Coastguard Worker      normally with the next instruction. The compiler should insert code for
1464*61046927SAndroid Build Coastguard Worker      calling a blend shader after the `BLEND` instruction unless it is known
1465*61046927SAndroid Build Coastguard Worker      that a blend shader will never be required.
1466*61046927SAndroid Build Coastguard Worker
1467*61046927SAndroid Build Coastguard Worker      The indirection is required to support both fixed-function and blend
1468*61046927SAndroid Build Coastguard Worker      shaders efficiently and without shader variants.
1469*61046927SAndroid Build Coastguard Worker    </desc>
1470*61046927SAndroid Build Coastguard Worker    <sr read="true"/>
1471*61046927SAndroid Build Coastguard Worker    <src size="64">Blend descriptor</src>
1472*61046927SAndroid Build Coastguard Worker    <src>Sample coverage</src>
1473*61046927SAndroid Build Coastguard Worker    <imm name="target" start="8" size="8"/>
1474*61046927SAndroid Build Coastguard Worker    <slot/>
1475*61046927SAndroid Build Coastguard Worker    <sr_count/>
1476*61046927SAndroid Build Coastguard Worker    <vecsize/>
1477*61046927SAndroid Build Coastguard Worker    <regfmt/>
1478*61046927SAndroid Build Coastguard Worker  </ins>
1479*61046927SAndroid Build Coastguard Worker
1480*61046927SAndroid Build Coastguard Worker  <ins name="ATEST" title="Alpha test" opcode="0x7D" unused="true" unit="NONE">
1481*61046927SAndroid Build Coastguard Worker    <desc>
1482*61046927SAndroid Build Coastguard Worker      Does alpha-to-coverage testing, updating the sample coverage mask. ATEST
1483*61046927SAndroid Build Coastguard Worker      does not do an implicit discard. It should be executed before the first
1484*61046927SAndroid Build Coastguard Worker      ZS_EMIT or BLEND instruction.
1485*61046927SAndroid Build Coastguard Worker    </desc>
1486*61046927SAndroid Build Coastguard Worker    <sr write="true">Updated coverage mask</sr>
1487*61046927SAndroid Build Coastguard Worker    <src>Input coverage mask</src>
1488*61046927SAndroid Build Coastguard Worker    <src swizzle="true">Alpha value (render target 0)</src>
1489*61046927SAndroid Build Coastguard Worker    <src/>
1490*61046927SAndroid Build Coastguard Worker    <sr_count/>
1491*61046927SAndroid Build Coastguard Worker  </ins>
1492*61046927SAndroid Build Coastguard Worker
1493*61046927SAndroid Build Coastguard Worker  <ins name="ZS_EMIT" title="Depth/stencil write" opcode="0x7E" unused="true" unit="NONE">
1494*61046927SAndroid Build Coastguard Worker    <desc>
1495*61046927SAndroid Build Coastguard Worker      Programatically writes out depth, stencil, or both, depending on which
1496*61046927SAndroid Build Coastguard Worker      modifiers are set. Used to implement gl_FragDepth and gl_FragStencil.
1497*61046927SAndroid Build Coastguard Worker    </desc>
1498*61046927SAndroid Build Coastguard Worker    <va_mod name="z" start="25" size="1"/>
1499*61046927SAndroid Build Coastguard Worker    <va_mod name="stencil" start="24" size="1"/>
1500*61046927SAndroid Build Coastguard Worker    <sr write="true">Updated coverage mask</sr>
1501*61046927SAndroid Build Coastguard Worker    <src>Depth value</src>
1502*61046927SAndroid Build Coastguard Worker    <src>Stencil value</src>
1503*61046927SAndroid Build Coastguard Worker    <src>Input coverage mask</src>
1504*61046927SAndroid Build Coastguard Worker    <sr_count/>
1505*61046927SAndroid Build Coastguard Worker    <slot/>
1506*61046927SAndroid Build Coastguard Worker  </ins>
1507*61046927SAndroid Build Coastguard Worker
1508*61046927SAndroid Build Coastguard Worker  <group name="CONVERT" title="Data conversions" dests="1" opcode="0x90" unused="true" unit="CVT">
1509*61046927SAndroid Build Coastguard Worker    <desc>
1510*61046927SAndroid Build Coastguard Worker      Performs the given data conversion. Note that floating-point rounding is
1511*61046927SAndroid Build Coastguard Worker      handled via the same hardware and therefore shares an encoding. Round mode
1512*61046927SAndroid Build Coastguard Worker      is specified where it makes sense.
1513*61046927SAndroid Build Coastguard Worker    </desc>
1514*61046927SAndroid Build Coastguard Worker
1515*61046927SAndroid Build Coastguard Worker    <ins name="V2S16_TO_V2F16" opcode2="0x7"/>
1516*61046927SAndroid Build Coastguard Worker
1517*61046927SAndroid Build Coastguard Worker    <ins name="S32_TO_F32" opcode2="0x9"/>
1518*61046927SAndroid Build Coastguard Worker
1519*61046927SAndroid Build Coastguard Worker    <ins name="V2U16_TO_V2F16" opcode2="0x17"/>
1520*61046927SAndroid Build Coastguard Worker
1521*61046927SAndroid Build Coastguard Worker    <ins name="U32_TO_F32" opcode2="0x19"/>
1522*61046927SAndroid Build Coastguard Worker
1523*61046927SAndroid Build Coastguard Worker    <roundmode/>
1524*61046927SAndroid Build Coastguard Worker    <src widen="true">Value to convert</src>
1525*61046927SAndroid Build Coastguard Worker  </group>
1526*61046927SAndroid Build Coastguard Worker
1527*61046927SAndroid Build Coastguard Worker  <group name="CONVERT" title="16->32 integer data conversions" dests="1" opcode="0x90" unused="true" unit="CVT">
1528*61046927SAndroid Build Coastguard Worker    <desc>
1529*61046927SAndroid Build Coastguard Worker      Performs the given data conversion.
1530*61046927SAndroid Build Coastguard Worker    </desc>
1531*61046927SAndroid Build Coastguard Worker
1532*61046927SAndroid Build Coastguard Worker    <ins name="S16_TO_S32" opcode2="0x4"/>
1533*61046927SAndroid Build Coastguard Worker    <ins name="S16_TO_F32" opcode2="0x5"/>
1534*61046927SAndroid Build Coastguard Worker    <ins name="U16_TO_U32" opcode2="0x14"/>
1535*61046927SAndroid Build Coastguard Worker    <ins name="U16_TO_F32" opcode2="0x15"/>
1536*61046927SAndroid Build Coastguard Worker
1537*61046927SAndroid Build Coastguard Worker    <src swizzle="true" size="16">Value to convert</src>
1538*61046927SAndroid Build Coastguard Worker  </group>
1539*61046927SAndroid Build Coastguard Worker
1540*61046927SAndroid Build Coastguard Worker  <group name="CONVERT" title="Float-to-int data conversions" dests="1" opcode="0x90" unused="true" unit="CVT">
1541*61046927SAndroid Build Coastguard Worker    <desc>Performs the given data conversion.</desc>
1542*61046927SAndroid Build Coastguard Worker    <ins name="F32_TO_S32" opcode2="0xC"/>
1543*61046927SAndroid Build Coastguard Worker    <ins name="F32_TO_U32" opcode2="0x1C"/>
1544*61046927SAndroid Build Coastguard Worker    <roundmode/>
1545*61046927SAndroid Build Coastguard Worker    <src absneg="true">Value to convert</src>
1546*61046927SAndroid Build Coastguard Worker  </group>
1547*61046927SAndroid Build Coastguard Worker
1548*61046927SAndroid Build Coastguard Worker  <group name="CONVERT" title="Float-to-int data conversions" dests="1" opcode="0x90" unused="true" unit="CVT">
1549*61046927SAndroid Build Coastguard Worker    <desc>Performs the given data conversion.</desc>
1550*61046927SAndroid Build Coastguard Worker    <ins name="V2F16_TO_V2S16" opcode2="0xE"/>
1551*61046927SAndroid Build Coastguard Worker    <ins name="V2F16_TO_V2U16" opcode2="0x1E"/>
1552*61046927SAndroid Build Coastguard Worker    <ins name="F16_TO_S32" opcode2="0xA"/>
1553*61046927SAndroid Build Coastguard Worker    <ins name="F16_TO_U32" opcode2="0x1A"/>
1554*61046927SAndroid Build Coastguard Worker    <roundmode/>
1555*61046927SAndroid Build Coastguard Worker    <src swizzle="true" absneg="true" size="16">Value to convert</src>
1556*61046927SAndroid Build Coastguard Worker  </group>
1557*61046927SAndroid Build Coastguard Worker
1558*61046927SAndroid Build Coastguard Worker  <ins name="F16_TO_F32" title="16-bit float to 32-bit float conversion" dests="1" opcode="0x90" opcode2="0xB" unused="true" unit="CVT">
1559*61046927SAndroid Build Coastguard Worker    <desc>Converts up with the specified round mode.</desc>
1560*61046927SAndroid Build Coastguard Worker    <roundmode/>
1561*61046927SAndroid Build Coastguard Worker    <src lane="28" size="16" absneg="true">Value to convert</src>
1562*61046927SAndroid Build Coastguard Worker  </ins>
1563*61046927SAndroid Build Coastguard Worker
1564*61046927SAndroid Build Coastguard Worker  <group name="CONVERT" title="8-bit to 32-bit data conversions" dests="1" opcode="0x90" unused="true" unit="CVT">
1565*61046927SAndroid Build Coastguard Worker    <desc>
1566*61046927SAndroid Build Coastguard Worker      Performs the given data conversion.
1567*61046927SAndroid Build Coastguard Worker    </desc>
1568*61046927SAndroid Build Coastguard Worker
1569*61046927SAndroid Build Coastguard Worker    <ins name="S8_TO_S32" opcode2="0x0"/>
1570*61046927SAndroid Build Coastguard Worker    <ins name="S8_TO_F32" opcode2="0x1"/>
1571*61046927SAndroid Build Coastguard Worker
1572*61046927SAndroid Build Coastguard Worker    <ins name="U8_TO_U32" opcode2="0x10"/>
1573*61046927SAndroid Build Coastguard Worker    <ins name="U8_TO_F32" opcode2="0x11"/>
1574*61046927SAndroid Build Coastguard Worker
1575*61046927SAndroid Build Coastguard Worker    <src lane="28" size="8">Value to convert</src>
1576*61046927SAndroid Build Coastguard Worker  </group>
1577*61046927SAndroid Build Coastguard Worker
1578*61046927SAndroid Build Coastguard Worker  <group name="CONVERT" title="8-bit to 16-bit data conversions" dests="1" opcode="0x90" unused="true" unit="CVT">
1579*61046927SAndroid Build Coastguard Worker    <desc>
1580*61046927SAndroid Build Coastguard Worker      Performs the given data conversion.
1581*61046927SAndroid Build Coastguard Worker    </desc>
1582*61046927SAndroid Build Coastguard Worker
1583*61046927SAndroid Build Coastguard Worker    <ins name="V2S8_TO_V2S16" opcode2="0x2"/>
1584*61046927SAndroid Build Coastguard Worker    <ins name="V2S8_TO_V2F16" opcode2="0x3"/>
1585*61046927SAndroid Build Coastguard Worker
1586*61046927SAndroid Build Coastguard Worker    <ins name="V2U8_TO_V2U16" opcode2="0x12"/>
1587*61046927SAndroid Build Coastguard Worker    <ins name="V2U8_TO_V2F16" opcode2="0x13"/>
1588*61046927SAndroid Build Coastguard Worker
1589*61046927SAndroid Build Coastguard Worker    <src halfswizzle="true" size="8">Value to convert</src>
1590*61046927SAndroid Build Coastguard Worker  </group>
1591*61046927SAndroid Build Coastguard Worker
1592*61046927SAndroid Build Coastguard Worker  <group name="FROUND" title="Floating-point rounding" dests="1" opcode="0x90" unused="true" unit="CVT">
1593*61046927SAndroid Build Coastguard Worker    <desc>
1594*61046927SAndroid Build Coastguard Worker      Performs the given rounding, using the convert unit.
1595*61046927SAndroid Build Coastguard Worker    </desc>
1596*61046927SAndroid Build Coastguard Worker
1597*61046927SAndroid Build Coastguard Worker    <ins name="FROUND.f32" opcode2="0xD"/>
1598*61046927SAndroid Build Coastguard Worker    <ins name="FROUND.v2f16" opcode2="0xF"/>
1599*61046927SAndroid Build Coastguard Worker
1600*61046927SAndroid Build Coastguard Worker    <roundmode/>
1601*61046927SAndroid Build Coastguard Worker    <src swizzle="true" absneg="true">Value to convert</src>
1602*61046927SAndroid Build Coastguard Worker  </group>
1603*61046927SAndroid Build Coastguard Worker
1604*61046927SAndroid Build Coastguard Worker  <ins name="MOV.i32" title="Register move" dests="1" opcode="0x91" opcode2="0x0" unused="true" unit="CVT">
1605*61046927SAndroid Build Coastguard Worker    <desc>Canonical register-to-register move.</desc>
1606*61046927SAndroid Build Coastguard Worker    <src/>
1607*61046927SAndroid Build Coastguard Worker  </ins>
1608*61046927SAndroid Build Coastguard Worker
1609*61046927SAndroid Build Coastguard Worker  <ins name="CLZ.u32" title="Count leading zeroes" dests="1" opcode="0x91" opcode2="0x4" unused="true" unit="CVT">
1610*61046927SAndroid Build Coastguard Worker    <desc>
1611*61046927SAndroid Build Coastguard Worker      Used as a primitive for various bitwise operations.
1612*61046927SAndroid Build Coastguard Worker    </desc>
1613*61046927SAndroid Build Coastguard Worker    <src/>
1614*61046927SAndroid Build Coastguard Worker  </ins>
1615*61046927SAndroid Build Coastguard Worker
1616*61046927SAndroid Build Coastguard Worker  <ins name="CLZ.v2u16" title="Count leading zeroes" dests="1" opcode="0x91" opcode2="0x5" unused="true" unit="CVT">
1617*61046927SAndroid Build Coastguard Worker    <desc>
1618*61046927SAndroid Build Coastguard Worker      Used as a primitive for various bitwise operations.
1619*61046927SAndroid Build Coastguard Worker    </desc>
1620*61046927SAndroid Build Coastguard Worker    <src swizzle="true"/>
1621*61046927SAndroid Build Coastguard Worker  </ins>
1622*61046927SAndroid Build Coastguard Worker
1623*61046927SAndroid Build Coastguard Worker  <ins name="CLZ.v4u8" title="Count leading zeroes" dests="1" opcode="0x91" opcode2="0x6" unused="true" unit="CVT">
1624*61046927SAndroid Build Coastguard Worker    <desc>
1625*61046927SAndroid Build Coastguard Worker      Used as a primitive for various bitwise operations.
1626*61046927SAndroid Build Coastguard Worker    </desc>
1627*61046927SAndroid Build Coastguard Worker    <src/>
1628*61046927SAndroid Build Coastguard Worker  </ins>
1629*61046927SAndroid Build Coastguard Worker
1630*61046927SAndroid Build Coastguard Worker  <ins name="IABS.s32" title="Absolute value" dests="1" opcode="0x91" opcode2="0x8" unused="true" unit="CVT">
1631*61046927SAndroid Build Coastguard Worker    <desc>
1632*61046927SAndroid Build Coastguard Worker      64-bit abs may be constructed in 4 instructions (5 clocks) by checking the
1633*61046927SAndroid Build Coastguard Worker      sign with `ICMP.s32.lt.m1 hi, 0` and negating based on the result with
1634*61046927SAndroid Build Coastguard Worker      `IADD.s64` and `LSHIFT_XOR.i32` on each half.
1635*61046927SAndroid Build Coastguard Worker    </desc>
1636*61046927SAndroid Build Coastguard Worker    <src widen="true"/>
1637*61046927SAndroid Build Coastguard Worker  </ins>
1638*61046927SAndroid Build Coastguard Worker
1639*61046927SAndroid Build Coastguard Worker  <ins name="IABS.v2s16" title="Absolute value" dests="1" opcode="0x91" opcode2="0x9" unused="true" unit="CVT">
1640*61046927SAndroid Build Coastguard Worker    <src widen="true"/>
1641*61046927SAndroid Build Coastguard Worker  </ins>
1642*61046927SAndroid Build Coastguard Worker
1643*61046927SAndroid Build Coastguard Worker  <ins name="IABS.v4s8" title="Absolute value" dests="1" opcode="0x91" opcode2="0xa" unused="true" unit="CVT">
1644*61046927SAndroid Build Coastguard Worker    <src/>
1645*61046927SAndroid Build Coastguard Worker  </ins>
1646*61046927SAndroid Build Coastguard Worker
1647*61046927SAndroid Build Coastguard Worker  <ins name="POPCOUNT.i32" title="Population count" dests="1" opcode="0x91" opcode2="0xC" unused="true" unit="SFU">
1648*61046927SAndroid Build Coastguard Worker    <desc>
1649*61046927SAndroid Build Coastguard Worker      Only available as 32-bit. Smaller bitsizes require explicit conversions.
1650*61046927SAndroid Build Coastguard Worker      64-bit popcount may be constructed in 3 clocks by separate 32-bit
1651*61046927SAndroid Build Coastguard Worker      popcounts of each half and a 32-bit add, which is guaranteed not to
1652*61046927SAndroid Build Coastguard Worker      overflow.
1653*61046927SAndroid Build Coastguard Worker    </desc>
1654*61046927SAndroid Build Coastguard Worker    <src/>
1655*61046927SAndroid Build Coastguard Worker  </ins>
1656*61046927SAndroid Build Coastguard Worker
1657*61046927SAndroid Build Coastguard Worker  <ins name="BITREV.i32" title="Bitwise reverse" dests="1" opcode="0x91" opcode2="0xD" unused="true" unit="SFU">
1658*61046927SAndroid Build Coastguard Worker    <desc>
1659*61046927SAndroid Build Coastguard Worker      Only available as 32-bit. Other bitsizes may be derived with swizzles.
1660*61046927SAndroid Build Coastguard Worker    </desc>
1661*61046927SAndroid Build Coastguard Worker    <src/>
1662*61046927SAndroid Build Coastguard Worker  </ins>
1663*61046927SAndroid Build Coastguard Worker
1664*61046927SAndroid Build Coastguard Worker  <ins name="NOT_OLD.i32" title="Bitwise complement" dests="1" opcode="0x91" opcode2="0xE" unused="true" unit="SFU">
1665*61046927SAndroid Build Coastguard Worker    <desc>
1666*61046927SAndroid Build Coastguard Worker      For fully featured bitwise operation, see the shift opcodes.
1667*61046927SAndroid Build Coastguard Worker    </desc>
1668*61046927SAndroid Build Coastguard Worker    <src/>
1669*61046927SAndroid Build Coastguard Worker  </ins>
1670*61046927SAndroid Build Coastguard Worker
1671*61046927SAndroid Build Coastguard Worker  <ins name="NOT_OLD.i64" title="Bitwise complement" dests="1" opcode="0x191" opcode2="0xE" unused="true" unit="SFU">
1672*61046927SAndroid Build Coastguard Worker    <desc>
1673*61046927SAndroid Build Coastguard Worker      For fully featured bitwise operation, see the shift opcodes.
1674*61046927SAndroid Build Coastguard Worker    </desc>
1675*61046927SAndroid Build Coastguard Worker    <src/>
1676*61046927SAndroid Build Coastguard Worker  </ins>
1677*61046927SAndroid Build Coastguard Worker
1678*61046927SAndroid Build Coastguard Worker  <ins name="WMASK" title="Warp mask" dests="1" opcode="0x95" unused="true" unit="CVT">
1679*61046927SAndroid Build Coastguard Worker    <desc>
1680*61046927SAndroid Build Coastguard Worker      Returns the mask of lanes ever active within the warp (subgroup), such
1681*61046927SAndroid Build Coastguard Worker      that the source is nonzero. The number of work-items in a subgroup is
1682*61046927SAndroid Build Coastguard Worker      given as the popcount of this value with a nonzero input.
1683*61046927SAndroid Build Coastguard Worker
1684*61046927SAndroid Build Coastguard Worker      An `all()` subgroup operation may be constructed as `WMASK` of the input
1685*61046927SAndroid Build Coastguard Worker      compared for equality with `WMASK` of an nonzero value.
1686*61046927SAndroid Build Coastguard Worker
1687*61046927SAndroid Build Coastguard Worker      An `any()` subgroup operation may be constructed as `WMASK` of the input
1688*61046927SAndroid Build Coastguard Worker      compared against zero.
1689*61046927SAndroid Build Coastguard Worker    </desc>
1690*61046927SAndroid Build Coastguard Worker    <src/>
1691*61046927SAndroid Build Coastguard Worker    <subgroup/>
1692*61046927SAndroid Build Coastguard Worker  </ins>
1693*61046927SAndroid Build Coastguard Worker
1694*61046927SAndroid Build Coastguard Worker  <group name="FREXP" title="Fraction/exponent extract" dests="1" opcode="0x99" unused="true" unit="CVT">
1695*61046927SAndroid Build Coastguard Worker    <ins name="FREXPM.f32" opcode2="0"/>
1696*61046927SAndroid Build Coastguard Worker    <ins name="FREXPM.v2f16" opcode2="1"/>
1697*61046927SAndroid Build Coastguard Worker    <ins name="FREXPE.f32" opcode2="2"/>
1698*61046927SAndroid Build Coastguard Worker    <ins name="FREXPE.v2f16" opcode2="3"/>
1699*61046927SAndroid Build Coastguard Worker    <desc>
1700*61046927SAndroid Build Coastguard Worker      Breaks up the floating-point input into its fractional (mantissa) and
1701*61046927SAndroid Build Coastguard Worker      exponent parts. By default, this is compatible with the `frexp()` function
1702*61046927SAndroid Build Coastguard Worker      in APIs. With the log/sqrt modifiers, the floating point format is
1703*61046927SAndroid Build Coastguard Worker      adjusted to be compatible with Valhall's argument reduction for logarithm
1704*61046927SAndroid Build Coastguard Worker      and square root computation respectively.
1705*61046927SAndroid Build Coastguard Worker    </desc>
1706*61046927SAndroid Build Coastguard Worker    <va_mod name="sqrt" start="24" size="1"/>
1707*61046927SAndroid Build Coastguard Worker    <va_mod name="log" start="25" size="1"/>
1708*61046927SAndroid Build Coastguard Worker    <src float="true" swizzle="true"/>
1709*61046927SAndroid Build Coastguard Worker  </group>
1710*61046927SAndroid Build Coastguard Worker
1711*61046927SAndroid Build Coastguard Worker  <group name="SFU" title="Special function unit" dests="1" opcode="0x9C" unused="true" unit="SFU">
1712*61046927SAndroid Build Coastguard Worker    <ins name="FRCP.f32" opcode2="0"/>
1713*61046927SAndroid Build Coastguard Worker    <ins name="FRCP.f16" opcode2="1"/>
1714*61046927SAndroid Build Coastguard Worker    <ins name="FRSQ.f32" opcode2="2"/>
1715*61046927SAndroid Build Coastguard Worker    <ins name="FRSQ.f16" opcode2="3"/>
1716*61046927SAndroid Build Coastguard Worker    <ins name="FLOGD.f32" opcode2="8"/>
1717*61046927SAndroid Build Coastguard Worker    <ins name="FPCLASS.f32" opcode2="10"/>
1718*61046927SAndroid Build Coastguard Worker    <ins name="FPCLASS.f16" opcode2="11"/>
1719*61046927SAndroid Build Coastguard Worker    <ins name="FLOG_TABLE.f32" opcode2="12"/>
1720*61046927SAndroid Build Coastguard Worker    <ins name="FRCP_APPROX.f32" opcode2="14"/>
1721*61046927SAndroid Build Coastguard Worker    <ins name="FRSQ_APPROX.f32" opcode2="15"/>
1722*61046927SAndroid Build Coastguard Worker    <desc>
1723*61046927SAndroid Build Coastguard Worker      Performs a given special function. The floating-point reciprocal (`FRCP`)
1724*61046927SAndroid Build Coastguard Worker      and reciprocal square root (`FRSQ`) instructions may be freely used as-is.
1725*61046927SAndroid Build Coastguard Worker      The logarithm instruction (`FLOGD.f32`) requires an argument
1726*61046927SAndroid Build Coastguard Worker      reduction. See the transcendentals section for more information. Like the
1727*61046927SAndroid Build Coastguard Worker      Bifrost op, `FRSQ_APPROX.f32` does an implicit `FREXPM.f32.sqrt` on the
1728*61046927SAndroid Build Coastguard Worker      source.
1729*61046927SAndroid Build Coastguard Worker    </desc>
1730*61046927SAndroid Build Coastguard Worker    <src float="true" swizzle="true" absneg="true"/>
1731*61046927SAndroid Build Coastguard Worker  </group>
1732*61046927SAndroid Build Coastguard Worker
1733*61046927SAndroid Build Coastguard Worker  <group name="SFU" title="Special function unit" dests="1" opcode="0x9C" unused="true" unit="SFU">
1734*61046927SAndroid Build Coastguard Worker    <ins name="FSIN_TABLE.u6" opcode2="4"/>
1735*61046927SAndroid Build Coastguard Worker    <ins name="FCOS_TABLE.u6" opcode2="5"/>
1736*61046927SAndroid Build Coastguard Worker    <ins name="FSINCOS_OFFSET.u6" opcode2="6"/>
1737*61046927SAndroid Build Coastguard Worker    <ins name="FEXP_TABLE.u4" opcode2="13"/>
1738*61046927SAndroid Build Coastguard Worker    <desc>
1739*61046927SAndroid Build Coastguard Worker      Performs a given special function. The trigonometric tables
1740*61046927SAndroid Build Coastguard Worker      (`FSIN_TABLE.u6` and `FCOS_TABLE.u6`) are crude, requiring both an
1741*61046927SAndroid Build Coastguard Worker      argument reduction and postprocessing.
1742*61046927SAndroid Build Coastguard Worker    </desc>
1743*61046927SAndroid Build Coastguard Worker    <src/>
1744*61046927SAndroid Build Coastguard Worker  </group>
1745*61046927SAndroid Build Coastguard Worker
1746*61046927SAndroid Build Coastguard Worker  <group name="FADD" title="Floating-point add" dests="1" opcode2="0" unused="true" unit="FMA">
1747*61046927SAndroid Build Coastguard Worker    <ins name="FADD.f32" opcode="0xA4"/>
1748*61046927SAndroid Build Coastguard Worker    <ins name="FADD.v2f16" opcode="0xA5"/>
1749*61046927SAndroid Build Coastguard Worker    <desc>$A + B$</desc>
1750*61046927SAndroid Build Coastguard Worker    <clamp/>
1751*61046927SAndroid Build Coastguard Worker    <src absneg="true" swizzle="true">A</src>
1752*61046927SAndroid Build Coastguard Worker    <src absneg="true" swizzle="true">B</src>
1753*61046927SAndroid Build Coastguard Worker  </group>
1754*61046927SAndroid Build Coastguard Worker
1755*61046927SAndroid Build Coastguard Worker  <group name="FMIN" title="Floating-point minimum" dests="1" opcode2="2" unused="true" unit="CVT">
1756*61046927SAndroid Build Coastguard Worker    <ins name="FMIN.f32" opcode="0xA4"/>
1757*61046927SAndroid Build Coastguard Worker    <ins name="FMIN.v2f16" opcode="0xA5"/>
1758*61046927SAndroid Build Coastguard Worker    <desc>$\min \{ A, B \}$</desc>
1759*61046927SAndroid Build Coastguard Worker    <clamp/>
1760*61046927SAndroid Build Coastguard Worker    <src absneg="true" swizzle="true">A</src>
1761*61046927SAndroid Build Coastguard Worker    <src absneg="true" swizzle="true">B</src>
1762*61046927SAndroid Build Coastguard Worker  </group>
1763*61046927SAndroid Build Coastguard Worker
1764*61046927SAndroid Build Coastguard Worker  <group name="FMAX" title="Floating-point maximum" dests="1" opcode2="3" unused="true" unit="CVT">
1765*61046927SAndroid Build Coastguard Worker    <ins name="FMAX.f32" opcode="0xA4"/>
1766*61046927SAndroid Build Coastguard Worker    <ins name="FMAX.v2f16" opcode="0xA5"/>
1767*61046927SAndroid Build Coastguard Worker    <desc>$\max \{ A, B \}$</desc>
1768*61046927SAndroid Build Coastguard Worker    <clamp/>
1769*61046927SAndroid Build Coastguard Worker    <src absneg="true" swizzle="true">A</src>
1770*61046927SAndroid Build Coastguard Worker    <src absneg="true" swizzle="true">B</src>
1771*61046927SAndroid Build Coastguard Worker  </group>
1772*61046927SAndroid Build Coastguard Worker
1773*61046927SAndroid Build Coastguard Worker  <group name="V2F32_TO_V2F16" title="Vectorized floating-point conversion" dests="1" opcode2="4" unused="true" unit="CVT">
1774*61046927SAndroid Build Coastguard Worker    <ins name="V2F32_TO_V2F16" opcode="0xA5"/>
1775*61046927SAndroid Build Coastguard Worker    <desc>
1776*61046927SAndroid Build Coastguard Worker      Given a pair of 32-bit floats, output a pair of 16-bit floats packed into
1777*61046927SAndroid Build Coastguard Worker      a 32-bit destination.
1778*61046927SAndroid Build Coastguard Worker    </desc>
1779*61046927SAndroid Build Coastguard Worker    <clamp/>
1780*61046927SAndroid Build Coastguard Worker    <roundmode/>
1781*61046927SAndroid Build Coastguard Worker    <src absneg="true">A</src>
1782*61046927SAndroid Build Coastguard Worker    <src absneg="true">B</src>
1783*61046927SAndroid Build Coastguard Worker  </group>
1784*61046927SAndroid Build Coastguard Worker
1785*61046927SAndroid Build Coastguard Worker  <group name="LDEXP" title="Floating-point rescaling" dests="1" opcode2="6" unused="true" unit="FMA">
1786*61046927SAndroid Build Coastguard Worker    <ins name="LDEXP.f32" opcode="0xA4"/>
1787*61046927SAndroid Build Coastguard Worker    <ins name="LDEXP.v2f16" opcode="0xA5"/>
1788*61046927SAndroid Build Coastguard Worker    <desc>
1789*61046927SAndroid Build Coastguard Worker      Computes $A \cdot 2^B$ by adding B to the exponent of A. Used to calculate
1790*61046927SAndroid Build Coastguard Worker      various special functions, particularly base-2 exponents. Special case
1791*61046927SAndroid Build Coastguard Worker      handling differs from an actual floating-point multiply, so this should
1792*61046927SAndroid Build Coastguard Worker      not be used outside fixed instruction sequences.
1793*61046927SAndroid Build Coastguard Worker    </desc>
1794*61046927SAndroid Build Coastguard Worker    <src absneg="true" swizzle="true">A</src>
1795*61046927SAndroid Build Coastguard Worker    <src/>
1796*61046927SAndroid Build Coastguard Worker    <roundmode/> <!-- Also has rtna -->
1797*61046927SAndroid Build Coastguard Worker    <!-- Also has infinity handling for arctan -->
1798*61046927SAndroid Build Coastguard Worker  </group>
1799*61046927SAndroid Build Coastguard Worker
1800*61046927SAndroid Build Coastguard Worker  <ins name="FEXP.f32" title="Floating-point exponent" dests="1" opcode="0xA4" opcode2="8" unused="true" unit="SFU">
1801*61046927SAndroid Build Coastguard Worker    <desc>
1802*61046927SAndroid Build Coastguard Worker      Calculates the base-2 exponent of an argument specified as a 8:24
1803*61046927SAndroid Build Coastguard Worker      fixed-point. The original argument is passed as well for correct handling
1804*61046927SAndroid Build Coastguard Worker      of special cases.
1805*61046927SAndroid Build Coastguard Worker    </desc>
1806*61046927SAndroid Build Coastguard Worker    <clamp/>
1807*61046927SAndroid Build Coastguard Worker    <src>Input as 8:24 fixed-point</src>
1808*61046927SAndroid Build Coastguard Worker    <src absneg="true">Input as 32-bit float</src>
1809*61046927SAndroid Build Coastguard Worker  </ins>
1810*61046927SAndroid Build Coastguard Worker
1811*61046927SAndroid Build Coastguard Worker  <ins name="FADD_LSCALE.f32" title="Floating-point add with logarithm scale" dests="1" opcode="0xA4" opcode2="9" unused="true" unit="FMA">
1812*61046927SAndroid Build Coastguard Worker    <desc>
1813*61046927SAndroid Build Coastguard Worker      Performs a floating-point addition specialized for logarithm computation.
1814*61046927SAndroid Build Coastguard Worker    </desc>
1815*61046927SAndroid Build Coastguard Worker    <clamp/>
1816*61046927SAndroid Build Coastguard Worker    <src absneg="true">A</src>
1817*61046927SAndroid Build Coastguard Worker    <src absneg="true">B</src>
1818*61046927SAndroid Build Coastguard Worker  </ins>
1819*61046927SAndroid Build Coastguard Worker
1820*61046927SAndroid Build Coastguard Worker  <ins name="FATAN_ASSIST.f32" title="ATAN calculation helper" dests="1" opcode="0xA4" opcode2="14" unused="true" unit="SFU">
1821*61046927SAndroid Build Coastguard Worker    <desc>
1822*61046927SAndroid Build Coastguard Worker      Used for `atan2()` implementation. Destination is two 16-bit
1823*61046927SAndroid Build Coastguard Worker      values (int and float) for the first form, and a single 32-bit float when
1824*61046927SAndroid Build Coastguard Worker      `.second` is set (indicating the FATAN_TABLE.f32 instruction).
1825*61046927SAndroid Build Coastguard Worker    </desc>
1826*61046927SAndroid Build Coastguard Worker    <va_mod name="second" start="24" size="1"/>
1827*61046927SAndroid Build Coastguard Worker    <src>A</src>
1828*61046927SAndroid Build Coastguard Worker    <src>B</src>
1829*61046927SAndroid Build Coastguard Worker  </ins>
1830*61046927SAndroid Build Coastguard Worker
1831*61046927SAndroid Build Coastguard Worker  <group name="IADD" title="Integer addition" dests="1" opcode2="0" unused="true" unit="CVT">
1832*61046927SAndroid Build Coastguard Worker    <desc>
1833*61046927SAndroid Build Coastguard Worker      $A + B$ with optional saturation.
1834*61046927SAndroid Build Coastguard Worker
1835*61046927SAndroid Build Coastguard Worker      As Valhall lacks swizzle instructions, `IADD.v2i16` with zero is the
1836*61046927SAndroid Build Coastguard Worker      canonical lowering for swizzles.
1837*61046927SAndroid Build Coastguard Worker    </desc>
1838*61046927SAndroid Build Coastguard Worker    <ins name="IADD.u32" opcode="0xA0"/>
1839*61046927SAndroid Build Coastguard Worker    <ins name="IADD.v2u16" opcode="0xA1"/>
1840*61046927SAndroid Build Coastguard Worker    <ins name="IADD.v4u8" opcode="0xA2"/>
1841*61046927SAndroid Build Coastguard Worker    <ins name="IADD.s32" opcode="0xA8"/>
1842*61046927SAndroid Build Coastguard Worker    <ins name="IADD.v2s16" opcode="0xA9"/>
1843*61046927SAndroid Build Coastguard Worker    <ins name="IADD.v4s8" opcode="0xAA"/>
1844*61046927SAndroid Build Coastguard Worker    <ins name="IADD.u64" opcode="0x1A3"/>
1845*61046927SAndroid Build Coastguard Worker    <ins name="IADD.s64" opcode="0x1AB"/>
1846*61046927SAndroid Build Coastguard Worker    <!-- <ins name="IADD.s32" opcode="0x1A0"/> -->
1847*61046927SAndroid Build Coastguard Worker    <src widen="true">A</src>
1848*61046927SAndroid Build Coastguard Worker    <src widen="true">B</src>
1849*61046927SAndroid Build Coastguard Worker    <saturate/>
1850*61046927SAndroid Build Coastguard Worker  </group>
1851*61046927SAndroid Build Coastguard Worker
1852*61046927SAndroid Build Coastguard Worker  <ins name="MKVEC.v2i16" title="Make 16-bit vector" dests="1" opcode="0xA1" opcode2="0x5" unused="true" unit="CVT">
1853*61046927SAndroid Build Coastguard Worker    <desc>Calculates $A | (B \ll 16)$. Used to implement `(ushort2)(A, B)`</desc>
1854*61046927SAndroid Build Coastguard Worker    <src swizzle="true">A</src>
1855*61046927SAndroid Build Coastguard Worker    <src swizzle="true">B</src>
1856*61046927SAndroid Build Coastguard Worker  </ins>
1857*61046927SAndroid Build Coastguard Worker
1858*61046927SAndroid Build Coastguard Worker  <group name="ISUB" title="Integer subtract" dests="1" opcode2="1" unused="true" unit="CVT">
1859*61046927SAndroid Build Coastguard Worker    <ins name="ISUB.u32" opcode="0xA0"/>
1860*61046927SAndroid Build Coastguard Worker    <ins name="ISUB.v2u16" opcode="0xA1"/>
1861*61046927SAndroid Build Coastguard Worker    <ins name="ISUB.v4u8" opcode="0xA2"/>
1862*61046927SAndroid Build Coastguard Worker    <ins name="ISUB.s32" opcode="0xA8"/>
1863*61046927SAndroid Build Coastguard Worker    <ins name="ISUB.v2s16" opcode="0xA9"/>
1864*61046927SAndroid Build Coastguard Worker    <ins name="ISUB.v4s8" opcode="0xAA"/>
1865*61046927SAndroid Build Coastguard Worker    <ins name="ISUB.u64" opcode="0x1A3"/>
1866*61046927SAndroid Build Coastguard Worker    <ins name="ISUB.s64" opcode="0x1AB"/>
1867*61046927SAndroid Build Coastguard Worker    <desc>$A - B$ with optional saturation</desc>
1868*61046927SAndroid Build Coastguard Worker    <src widen="true">A</src>
1869*61046927SAndroid Build Coastguard Worker    <src widen="true">B</src>
1870*61046927SAndroid Build Coastguard Worker    <saturate/>
1871*61046927SAndroid Build Coastguard Worker  </group>
1872*61046927SAndroid Build Coastguard Worker
1873*61046927SAndroid Build Coastguard Worker  <group name="SEG_ADD" title="Segment addition" dests="1" opcode2="6" unused="true" unit="CVT">
1874*61046927SAndroid Build Coastguard Worker    <desc>
1875*61046927SAndroid Build Coastguard Worker      Similar to SHADDX, but especially used for loading offsets into
1876*61046927SAndroid Build Coastguard Worker      WLS. Usually this is only required for atomic operations, which cannot
1877*61046927SAndroid Build Coastguard Worker      directly use wls_pointer as an address.
1878*61046927SAndroid Build Coastguard Worker
1879*61046927SAndroid Build Coastguard Worker      .neg indicates SEG_SUB instead.
1880*61046927SAndroid Build Coastguard Worker    </desc>
1881*61046927SAndroid Build Coastguard Worker    <ins name="SEG_ADD.u64" opcode="0x1A3"/>
1882*61046927SAndroid Build Coastguard Worker    <va_mod name="neg" start="38" size="1"/>
1883*61046927SAndroid Build Coastguard Worker    <va_mod name="preserve_null" start="39" size="1"/>
1884*61046927SAndroid Build Coastguard Worker    <src>A</src>
1885*61046927SAndroid Build Coastguard Worker    <src widen="true">B</src>
1886*61046927SAndroid Build Coastguard Worker  </group>
1887*61046927SAndroid Build Coastguard Worker
1888*61046927SAndroid Build Coastguard Worker  <group name="SHADDX" title="Shift, extend, and 64-bit add" dests="1" opcode2="7" unused="true" unit="CVT">
1889*61046927SAndroid Build Coastguard Worker    <desc>
1890*61046927SAndroid Build Coastguard Worker      Sign or zero extend B to 64-bits, left-shift by `shift`, and add the
1891*61046927SAndroid Build Coastguard Worker      64-bit value A. These instructions accelerate address arithmetic, but may
1892*61046927SAndroid Build Coastguard Worker      be used in full generality for 64-bit integer arithmetic.
1893*61046927SAndroid Build Coastguard Worker    </desc>
1894*61046927SAndroid Build Coastguard Worker    <ins name="SHADDX.u64" opcode="0x1A3"/>
1895*61046927SAndroid Build Coastguard Worker    <ins name="SHADDX.s64" opcode="0x1AB"/>
1896*61046927SAndroid Build Coastguard Worker    <imm name="shift" start="20" size="3"/>
1897*61046927SAndroid Build Coastguard Worker    <src>A</src>
1898*61046927SAndroid Build Coastguard Worker    <src widen="true">B</src>
1899*61046927SAndroid Build Coastguard Worker  </group>
1900*61046927SAndroid Build Coastguard Worker
1901*61046927SAndroid Build Coastguard Worker  <group name="IMUL" title="Integer multiply" dests="1" opcode2="0x0A" unused="true" unit="SFU">
1902*61046927SAndroid Build Coastguard Worker    <ins name="IMUL.i32" opcode="0xA0"/>
1903*61046927SAndroid Build Coastguard Worker    <ins name="IMUL.v2i16" opcode="0xA1"/>
1904*61046927SAndroid Build Coastguard Worker    <ins name="IMUL.v4i8" opcode="0xA2"/>
1905*61046927SAndroid Build Coastguard Worker    <ins name="IMUL.s32" opcode="0xA8"/>
1906*61046927SAndroid Build Coastguard Worker    <ins name="IMUL.v2s16" opcode="0xA9"/>
1907*61046927SAndroid Build Coastguard Worker    <ins name="IMUL.v4s8" opcode="0xAA"/>
1908*61046927SAndroid Build Coastguard Worker    <ins name="IMULD.u64" opcode="0x1A3"/>
1909*61046927SAndroid Build Coastguard Worker    <!-- <ins name="IMUL.s32" opcode="0x1A0"/> -->
1910*61046927SAndroid Build Coastguard Worker    <desc>
1911*61046927SAndroid Build Coastguard Worker      $A \cdot B$ with optional saturation. Note the multipliers can only handle up to
1912*61046927SAndroid Build Coastguard Worker      32-bit by 32-bit multiplies. The 64-bit "multiply" acts like IMUL.u32 but
1913*61046927SAndroid Build Coastguard Worker      additionally writes the high half of the product to the high half of the
1914*61046927SAndroid Build Coastguard Worker      64-bit destination. Along with IADD.u32 and IADD.u64, this allows the
1915*61046927SAndroid Build Coastguard Worker      construction of a 64-bit multiply in 5 instructions (6 clocks).
1916*61046927SAndroid Build Coastguard Worker    </desc>
1917*61046927SAndroid Build Coastguard Worker    <src widen="true">A</src>
1918*61046927SAndroid Build Coastguard Worker    <src widen="true">B</src>
1919*61046927SAndroid Build Coastguard Worker    <saturate/>
1920*61046927SAndroid Build Coastguard Worker  </group>
1921*61046927SAndroid Build Coastguard Worker
1922*61046927SAndroid Build Coastguard Worker  <group name="HADD" title="Integer half-add" dests="1" opcode2="0x0B" unused="true" unit="CVT">
1923*61046927SAndroid Build Coastguard Worker    <ins name="HADD.u32" opcode="0xA0"/>
1924*61046927SAndroid Build Coastguard Worker    <ins name="HADD.v2u16" opcode="0xA1"/>
1925*61046927SAndroid Build Coastguard Worker    <ins name="HADD.v4u8" opcode="0xA2"/>
1926*61046927SAndroid Build Coastguard Worker    <ins name="HADD.s32" opcode="0xA8"/>
1927*61046927SAndroid Build Coastguard Worker    <ins name="HADD.v2s16" opcode="0xA9"/>
1928*61046927SAndroid Build Coastguard Worker    <ins name="HADD.v4s8" opcode="0xAA"/>
1929*61046927SAndroid Build Coastguard Worker    <va_mod name="rhadd" start="30" size="1"/>
1930*61046927SAndroid Build Coastguard Worker    <src widen="true">A</src>
1931*61046927SAndroid Build Coastguard Worker    <src widen="true">B</src>
1932*61046927SAndroid Build Coastguard Worker    <desc>
1933*61046927SAndroid Build Coastguard Worker      $(A + B) \gg 1$ without intermediate overflow, corresponding to `hadd()` in
1934*61046927SAndroid Build Coastguard Worker      OpenCL. With the `.rhadd` modifier set, it instead calculates
1935*61046927SAndroid Build Coastguard Worker      $(A + B + 1) \gg 1$ corresponding to `rhadd()` in OpenCL.
1936*61046927SAndroid Build Coastguard Worker    </desc>
1937*61046927SAndroid Build Coastguard Worker  </group>
1938*61046927SAndroid Build Coastguard Worker
1939*61046927SAndroid Build Coastguard Worker  <group name="CLPER" title="Cross-lane permute" dests="1" opcode2="0xF" unused="true" unit="SFU">
1940*61046927SAndroid Build Coastguard Worker    <ins name="CLPER.i32" opcode="0xA0"/>
1941*61046927SAndroid Build Coastguard Worker    <ins name="CLPER.v2u16" opcode="0xA1"/>
1942*61046927SAndroid Build Coastguard Worker    <ins name="CLPER.v4u8" opcode="0xA2"/>
1943*61046927SAndroid Build Coastguard Worker    <ins name="CLPER.s32" opcode="0xA8"/>
1944*61046927SAndroid Build Coastguard Worker    <ins name="CLPER.v2s16" opcode="0xA9"/>
1945*61046927SAndroid Build Coastguard Worker    <ins name="CLPER.v4s8" opcode="0xAA"/>
1946*61046927SAndroid Build Coastguard Worker    <ins name="CLPER.u64" opcode="0x1A3"/>
1947*61046927SAndroid Build Coastguard Worker    <ins name="CLPER.s64" opcode="0x1AB"/>
1948*61046927SAndroid Build Coastguard Worker    <!-- <ins name="CLPER.s32" opcode="0x1A0"/> -->
1949*61046927SAndroid Build Coastguard Worker    <desc>
1950*61046927SAndroid Build Coastguard Worker      Selects the value of A in the subgroup lane given by B. This implements
1951*61046927SAndroid Build Coastguard Worker      subgroup broadcasts. It may be used as a primitive for screen space
1952*61046927SAndroid Build Coastguard Worker      derivatives in fragment shaders.
1953*61046927SAndroid Build Coastguard Worker    </desc>
1954*61046927SAndroid Build Coastguard Worker    <src>A</src>
1955*61046927SAndroid Build Coastguard Worker    <src widen="true">B</src>
1956*61046927SAndroid Build Coastguard Worker    <subgroup/>
1957*61046927SAndroid Build Coastguard Worker    <lane_op/>
1958*61046927SAndroid Build Coastguard Worker    <inactive_result/>
1959*61046927SAndroid Build Coastguard Worker  </group>
1960*61046927SAndroid Build Coastguard Worker
1961*61046927SAndroid Build Coastguard Worker  <group name="FMA" title="Fused floating-point multiply add" dests="1" unused="true" unit="FMA">
1962*61046927SAndroid Build Coastguard Worker    <ins name="FMA.f32" opcode="0xB2"/>
1963*61046927SAndroid Build Coastguard Worker    <ins name="FMA.v2f16" opcode="0xB3"/>
1964*61046927SAndroid Build Coastguard Worker    <desc>$A \cdot B + C$</desc>
1965*61046927SAndroid Build Coastguard Worker    <clamp/>
1966*61046927SAndroid Build Coastguard Worker    <src absneg="true" swizzle="true">A</src>
1967*61046927SAndroid Build Coastguard Worker    <src absneg="true" swizzle="true">B</src>
1968*61046927SAndroid Build Coastguard Worker    <src absneg="true" swizzle="true">C</src>
1969*61046927SAndroid Build Coastguard Worker  </group>
1970*61046927SAndroid Build Coastguard Worker
1971*61046927SAndroid Build Coastguard Worker  <group name="LSHIFT_AND" title="Left shift and bitwise AND" dests="1" opcode2="0x100" unused="true" unit="SFU">
1972*61046927SAndroid Build Coastguard Worker    <ins name="LSHIFT_AND.i32" opcode="0xB4"/>
1973*61046927SAndroid Build Coastguard Worker    <ins name="LSHIFT_AND.v2i16" opcode="0xB5"/>
1974*61046927SAndroid Build Coastguard Worker    <ins name="LSHIFT_AND.v4i8" opcode="0xB6"/>
1975*61046927SAndroid Build Coastguard Worker    <ins name="LSHIFT_AND.i64" opcode="0x1B7"/>
1976*61046927SAndroid Build Coastguard Worker    <va_mod name="left" start="128" size="1" implied="true"/>
1977*61046927SAndroid Build Coastguard Worker    <desc>
1978*61046927SAndroid Build Coastguard Worker      Left shifts its first source by a specified amount and bitwise ANDs it with the
1979*61046927SAndroid Build Coastguard Worker      second source, optionally inverting the second source or the result.
1980*61046927SAndroid Build Coastguard Worker    </desc>
1981*61046927SAndroid Build Coastguard Worker    <not_result/>
1982*61046927SAndroid Build Coastguard Worker    <src widen="true">A</src>
1983*61046927SAndroid Build Coastguard Worker    <src lanes="true" size="8">shift</src>
1984*61046927SAndroid Build Coastguard Worker    <src not="true">B</src>
1985*61046927SAndroid Build Coastguard Worker  </group>
1986*61046927SAndroid Build Coastguard Worker
1987*61046927SAndroid Build Coastguard Worker  <group name="RSHIFT_AND" title="Right shift and bitwise AND" dests="1" opcode2="0x000" unused="true" unit="SFU">
1988*61046927SAndroid Build Coastguard Worker    <ins name="RSHIFT_AND.i32" opcode="0xB4"/>
1989*61046927SAndroid Build Coastguard Worker    <ins name="RSHIFT_AND.v2i16" opcode="0xB5"/>
1990*61046927SAndroid Build Coastguard Worker    <ins name="RSHIFT_AND.v4i8" opcode="0xB6"/>
1991*61046927SAndroid Build Coastguard Worker    <ins name="RSHIFT_AND.i64" opcode="0x1B7"/>
1992*61046927SAndroid Build Coastguard Worker    <va_mod name="left" start="128" size="1" implied="true"/>
1993*61046927SAndroid Build Coastguard Worker    <desc>
1994*61046927SAndroid Build Coastguard Worker      Right shifts its first source by a specified amount and bitwise ANDs it with the
1995*61046927SAndroid Build Coastguard Worker      second source, optionally inverting the second source or the result. If
1996*61046927SAndroid Build Coastguard Worker      `signed` is set, the hardware performs an arithmetic right shift; otherwise,
1997*61046927SAndroid Build Coastguard Worker      it performs an unsigned right shift.
1998*61046927SAndroid Build Coastguard Worker    </desc>
1999*61046927SAndroid Build Coastguard Worker    <va_mod name="signed" start="34" size="1"/>
2000*61046927SAndroid Build Coastguard Worker    <not_result/>
2001*61046927SAndroid Build Coastguard Worker    <src widen="true">A</src>
2002*61046927SAndroid Build Coastguard Worker    <src lanes="true" size="8">shift</src>
2003*61046927SAndroid Build Coastguard Worker    <src not="true">B</src>
2004*61046927SAndroid Build Coastguard Worker  </group>
2005*61046927SAndroid Build Coastguard Worker
2006*61046927SAndroid Build Coastguard Worker  <group name="LSHIFT_OR" title="Left shift and bitwise OR" dests="1" opcode2="0x101" unused="true" unit="SFU">
2007*61046927SAndroid Build Coastguard Worker    <ins name="LSHIFT_OR.i32" opcode="0xB4"/>
2008*61046927SAndroid Build Coastguard Worker    <ins name="LSHIFT_OR.v2i16" opcode="0xB5"/>
2009*61046927SAndroid Build Coastguard Worker    <ins name="LSHIFT_OR.v4i8" opcode="0xB6"/>
2010*61046927SAndroid Build Coastguard Worker    <ins name="LSHIFT_OR.i64" opcode="0x1B7"/>
2011*61046927SAndroid Build Coastguard Worker    <va_mod name="left" start="128" size="1" implied="true"/>
2012*61046927SAndroid Build Coastguard Worker    <desc>
2013*61046927SAndroid Build Coastguard Worker      Left shifts its first source by a specified amount and bitwise ORs it with the
2014*61046927SAndroid Build Coastguard Worker      second source, optionally inverting the second source or the result.
2015*61046927SAndroid Build Coastguard Worker    </desc>
2016*61046927SAndroid Build Coastguard Worker    <not_result/>
2017*61046927SAndroid Build Coastguard Worker    <src widen="true">A</src>
2018*61046927SAndroid Build Coastguard Worker    <src lanes="true" size="8">shift</src>
2019*61046927SAndroid Build Coastguard Worker    <src not="true">B</src>
2020*61046927SAndroid Build Coastguard Worker  </group>
2021*61046927SAndroid Build Coastguard Worker
2022*61046927SAndroid Build Coastguard Worker  <group name="RSHIFT_OR" title="Right shift and bitwise OR" dests="1" opcode2="0x001" unused="true" unit="SFU">
2023*61046927SAndroid Build Coastguard Worker    <ins name="RSHIFT_OR.i32" opcode="0xB4"/>
2024*61046927SAndroid Build Coastguard Worker    <ins name="RSHIFT_OR.v2i16" opcode="0xB5"/>
2025*61046927SAndroid Build Coastguard Worker    <ins name="RSHIFT_OR.v4i8" opcode="0xB6"/>
2026*61046927SAndroid Build Coastguard Worker    <ins name="RSHIFT_OR.i64" opcode="0x1B7"/>
2027*61046927SAndroid Build Coastguard Worker    <va_mod name="left" start="128" size="1" implied="true"/>
2028*61046927SAndroid Build Coastguard Worker    <desc>
2029*61046927SAndroid Build Coastguard Worker      Right shifts its first source by a specified amount and bitwise ORs it with the
2030*61046927SAndroid Build Coastguard Worker      second source, optionally inverting the second source or the result. If
2031*61046927SAndroid Build Coastguard Worker      `signed` is set, the hardware performs an arithmetic right shift; otherwise,
2032*61046927SAndroid Build Coastguard Worker      it performs an unsigned right shift.
2033*61046927SAndroid Build Coastguard Worker   </desc>
2034*61046927SAndroid Build Coastguard Worker    <va_mod name="signed" start="34" size="1"/>
2035*61046927SAndroid Build Coastguard Worker    <not_result/>
2036*61046927SAndroid Build Coastguard Worker    <src widen="true">A</src>
2037*61046927SAndroid Build Coastguard Worker    <src lanes="true" size="8">shift</src>
2038*61046927SAndroid Build Coastguard Worker    <src not="true">B</src>
2039*61046927SAndroid Build Coastguard Worker  </group>
2040*61046927SAndroid Build Coastguard Worker
2041*61046927SAndroid Build Coastguard Worker  <group name="LSHIFT_XOR" title="Left shift and bitwise XOR" dests="1" opcode2="0x102" unused="true" unit="SFU">
2042*61046927SAndroid Build Coastguard Worker    <ins name="LSHIFT_XOR.i32" opcode="0xB4"/>
2043*61046927SAndroid Build Coastguard Worker    <ins name="LSHIFT_XOR.v2i16" opcode="0xB5"/>
2044*61046927SAndroid Build Coastguard Worker    <ins name="LSHIFT_XOR.v4i8" opcode="0xB6"/>
2045*61046927SAndroid Build Coastguard Worker    <ins name="LSHIFT_XOR.i64" opcode="0x1B7"/>
2046*61046927SAndroid Build Coastguard Worker    <va_mod name="left" start="128" size="1" implied="true"/>
2047*61046927SAndroid Build Coastguard Worker    <desc>
2048*61046927SAndroid Build Coastguard Worker      Left shifts its first source by a specified amount and bitwise XORs it with the
2049*61046927SAndroid Build Coastguard Worker      second source, optionally inverting the second source or the result.
2050*61046927SAndroid Build Coastguard Worker    </desc>
2051*61046927SAndroid Build Coastguard Worker    <not_result/>
2052*61046927SAndroid Build Coastguard Worker    <src widen="true">A</src>
2053*61046927SAndroid Build Coastguard Worker    <src lanes="true" size="8">shift</src>
2054*61046927SAndroid Build Coastguard Worker    <src not="true">B</src>
2055*61046927SAndroid Build Coastguard Worker  </group>
2056*61046927SAndroid Build Coastguard Worker
2057*61046927SAndroid Build Coastguard Worker  <group name="RSHIFT_XOR" title="Right shift and bitwise XOR" dests="1" opcode2="0x002" unused="true" unit="SFU">
2058*61046927SAndroid Build Coastguard Worker    <ins name="RSHIFT_XOR.i32" opcode="0xB4"/>
2059*61046927SAndroid Build Coastguard Worker    <ins name="RSHIFT_XOR.v2i16" opcode="0xB5"/>
2060*61046927SAndroid Build Coastguard Worker    <ins name="RSHIFT_XOR.v4i8" opcode="0xB6"/>
2061*61046927SAndroid Build Coastguard Worker    <ins name="RSHIFT_XOR.i64" opcode="0x1B7"/>
2062*61046927SAndroid Build Coastguard Worker    <va_mod name="left" start="128" size="1" implied="true"/>
2063*61046927SAndroid Build Coastguard Worker    <desc>
2064*61046927SAndroid Build Coastguard Worker      Right shifts its first source by a specified amount and bitwise XORs it with the
2065*61046927SAndroid Build Coastguard Worker      second source, optionally inverting the second source or the result. If
2066*61046927SAndroid Build Coastguard Worker      `signed` is set, the hardware performs an arithmetic right shift; otherwise,
2067*61046927SAndroid Build Coastguard Worker      it performs an unsigned right shift.
2068*61046927SAndroid Build Coastguard Worker    </desc>
2069*61046927SAndroid Build Coastguard Worker    <va_mod name="signed" start="34" size="1"/>
2070*61046927SAndroid Build Coastguard Worker    <not_result/>
2071*61046927SAndroid Build Coastguard Worker    <src widen="true">A</src>
2072*61046927SAndroid Build Coastguard Worker    <src lanes="true" size="8">shift</src>
2073*61046927SAndroid Build Coastguard Worker    <src not="true">B</src>
2074*61046927SAndroid Build Coastguard Worker  </group>
2075*61046927SAndroid Build Coastguard Worker
2076*61046927SAndroid Build Coastguard Worker  <ins name="MUX.i32" title="Mux" dests="1" opcode="0xB8" unused="true" unit="SFU">
2077*61046927SAndroid Build Coastguard Worker    <desc>
2078*61046927SAndroid Build Coastguard Worker      Mux between A and B based on the provided mask. The condition specified
2079*61046927SAndroid Build Coastguard Worker      as the `mux` modifier is evaluated on the mask. If true, `A` is chosen,
2080*61046927SAndroid Build Coastguard Worker      else `B` is chosen. The `bit` modifier acts bitwise, equivalent to
2081*61046927SAndroid Build Coastguard Worker      `bitselect()` in OpenCL, so `MUX.i32.bit A, B, mask` calculates
2082*61046927SAndroid Build Coastguard Worker      `(A &amp; mask) | (B &amp; ~mask)`.
2083*61046927SAndroid Build Coastguard Worker    </desc>
2084*61046927SAndroid Build Coastguard Worker    <va_mod name="mux" start="32" size="2"/>
2085*61046927SAndroid Build Coastguard Worker    <src>A</src>
2086*61046927SAndroid Build Coastguard Worker    <src>B</src>
2087*61046927SAndroid Build Coastguard Worker    <src>Mask</src>
2088*61046927SAndroid Build Coastguard Worker  </ins>
2089*61046927SAndroid Build Coastguard Worker
2090*61046927SAndroid Build Coastguard Worker  <ins name="MUX.v2i16" title="Mux" dests="1" opcode="0xB9" unused="true" unit="SFU">
2091*61046927SAndroid Build Coastguard Worker    <desc>
2092*61046927SAndroid Build Coastguard Worker      Mux between A and B based on the provided mask. The condition specified
2093*61046927SAndroid Build Coastguard Worker      as the `mux` modifier is evaluated on the mask. If true, `A` is chosen,
2094*61046927SAndroid Build Coastguard Worker      else `B` is chosen. The `bit` modifier acts bitwise, equivalent to
2095*61046927SAndroid Build Coastguard Worker      `bitselect()` in OpenCL, so `MUX.v2i16.bit A, B, mask` calculates
2096*61046927SAndroid Build Coastguard Worker      `(A &amp; mask) | (B &amp; ~mask)`.
2097*61046927SAndroid Build Coastguard Worker    </desc>
2098*61046927SAndroid Build Coastguard Worker    <va_mod name="mux" start="32" size="2"/>
2099*61046927SAndroid Build Coastguard Worker    <src swizzle="true">A</src>
2100*61046927SAndroid Build Coastguard Worker    <src swizzle="true">B</src>
2101*61046927SAndroid Build Coastguard Worker    <src swizzle="true">Mask</src>
2102*61046927SAndroid Build Coastguard Worker  </ins>
2103*61046927SAndroid Build Coastguard Worker
2104*61046927SAndroid Build Coastguard Worker  <ins name="MUX.v4i8" title="Mux" dests="1" opcode="0xBA" unused="true" unit="SFU">
2105*61046927SAndroid Build Coastguard Worker    <desc>
2106*61046927SAndroid Build Coastguard Worker      Mux between A and B based on the provided mask. The condition specified
2107*61046927SAndroid Build Coastguard Worker      as the `mux` modifier is evaluated on the mask. If true, `A` is chosen,
2108*61046927SAndroid Build Coastguard Worker      else `B` is chosen. The `bit` modifier acts bitwise, equivalent to
2109*61046927SAndroid Build Coastguard Worker      `bitselect()` in OpenCL, so `MUX.v4i8.bit A, B, mask` calculates
2110*61046927SAndroid Build Coastguard Worker      `(A &amp; mask) | (B &amp; ~mask)`.
2111*61046927SAndroid Build Coastguard Worker    </desc>
2112*61046927SAndroid Build Coastguard Worker    <va_mod name="mux" start="32" size="2"/>
2113*61046927SAndroid Build Coastguard Worker    <src>A</src>
2114*61046927SAndroid Build Coastguard Worker    <src>B</src>
2115*61046927SAndroid Build Coastguard Worker    <src>Mask</src>
2116*61046927SAndroid Build Coastguard Worker  </ins>
2117*61046927SAndroid Build Coastguard Worker
2118*61046927SAndroid Build Coastguard Worker  <ins name="CUBE_SSEL" title="Cube S-coordinate select" dests="1" opcode="0xBC" opcode2="0" unused="true" unit="SFU">
2119*61046927SAndroid Build Coastguard Worker    <desc>During a cube map transform, select the S coordinate given a selected face.</desc>
2120*61046927SAndroid Build Coastguard Worker    <src absneg="true">Z coordinate as 32-bit floating point</src>
2121*61046927SAndroid Build Coastguard Worker    <src absneg="true">X coordinate as 32-bit floating point</src>
2122*61046927SAndroid Build Coastguard Worker    <src>Cube face index</src>
2123*61046927SAndroid Build Coastguard Worker  </ins>
2124*61046927SAndroid Build Coastguard Worker
2125*61046927SAndroid Build Coastguard Worker  <ins name="CUBE_TSEL" title="Cube T-coordinate select" dests="1" opcode="0xBC" opcode2="1" unused="true" unit="SFU">
2126*61046927SAndroid Build Coastguard Worker    <desc>During a cube map transform, select the T coordinate given a selected face.</desc>
2127*61046927SAndroid Build Coastguard Worker    <src absneg="true">Y coordinate as 32-bit floating point</src>
2128*61046927SAndroid Build Coastguard Worker    <src absneg="true">Z coordinate as 32-bit floating point</src>
2129*61046927SAndroid Build Coastguard Worker    <src>Cube face index</src>
2130*61046927SAndroid Build Coastguard Worker  </ins>
2131*61046927SAndroid Build Coastguard Worker
2132*61046927SAndroid Build Coastguard Worker  <ins name="MKVEC.v2i8" title="Make 8-bit vector" dests="1" opcode="0xBD" unit="CVT">
2133*61046927SAndroid Build Coastguard Worker    <desc>
2134*61046927SAndroid Build Coastguard Worker      Calculates $A | (B \ll 8) | (CD \ll 16)$ for 8-bit A and B and 16-bit CD.
2135*61046927SAndroid Build Coastguard Worker
2136*61046927SAndroid Build Coastguard Worker      To implement `(uchar4) (A, B, C, D)` in full generality, use the sequence
2137*61046927SAndroid Build Coastguard Worker      `MKVEC.v2i8 CD, C, D, #0; MKVEC.v2i8 out, A, B, CD`
2138*61046927SAndroid Build Coastguard Worker
2139*61046927SAndroid Build Coastguard Worker      `MKVEC.v2i8` also allows zero extending arbitrary 8-bit lanes. For
2140*61046927SAndroid Build Coastguard Worker      example, to extend `r0.b3` to `r1`, use `MKVEC.v2i8 r1, r0.b3, 0x0.b0, 0x0`.
2141*61046927SAndroid Build Coastguard Worker    </desc>
2142*61046927SAndroid Build Coastguard Worker    <src lane="true">A</src>
2143*61046927SAndroid Build Coastguard Worker    <src lane="true">B</src>
2144*61046927SAndroid Build Coastguard Worker    <src>CD</src>
2145*61046927SAndroid Build Coastguard Worker  </ins>
2146*61046927SAndroid Build Coastguard Worker
2147*61046927SAndroid Build Coastguard Worker  <ins name="CUBEFACE1" title="Cube map transform step 1" dests="1" opcode="0xC0" unused="true" unit="SFU">
2148*61046927SAndroid Build Coastguard Worker    <desc>Select the maximum absolute value of its arguments.</desc>
2149*61046927SAndroid Build Coastguard Worker    <src absneg="true">X coordinate as 32-bit floating point</src>
2150*61046927SAndroid Build Coastguard Worker    <src absneg="true">Y coordinate as 32-bit floating point</src>
2151*61046927SAndroid Build Coastguard Worker    <src absneg="true">Z coordinate as 32-bit floating point</src>
2152*61046927SAndroid Build Coastguard Worker  </ins>
2153*61046927SAndroid Build Coastguard Worker
2154*61046927SAndroid Build Coastguard Worker  <ins name="CUBEFACE2_V9" title="Cube map transform step 2" dests="1" opcode="0xC1" unit="SFU">
2155*61046927SAndroid Build Coastguard Worker    <desc>Select the cube face index corresponding to the arguments.</desc>
2156*61046927SAndroid Build Coastguard Worker    <src absneg="true">X coordinate as 32-bit floating point</src>
2157*61046927SAndroid Build Coastguard Worker    <src absneg="true">Y coordinate as 32-bit floating point</src>
2158*61046927SAndroid Build Coastguard Worker    <src absneg="true">Z coordinate as 32-bit floating point</src>
2159*61046927SAndroid Build Coastguard Worker  </ins>
2160*61046927SAndroid Build Coastguard Worker
2161*61046927SAndroid Build Coastguard Worker  <group name="IDP" title="8-bit dot product" dests="1" opcode="0xC2" unused="true" unit="FMA">
2162*61046927SAndroid Build Coastguard Worker    <desc>
2163*61046927SAndroid Build Coastguard Worker      8-bit integer dot product between 4 channel vectors, intended for machine
2164*61046927SAndroid Build Coastguard Worker      learning. Available in both unsigned and signed variants, controlling
2165*61046927SAndroid Build Coastguard Worker      sign-extension/zero-extension behaviour to the final 32-bit destination.
2166*61046927SAndroid Build Coastguard Worker      Saturation is available. Corresponds to the `cl_arm_integer_dot_product_*`
2167*61046927SAndroid Build Coastguard Worker      family of OpenCL extensions. Not for actual use, just for completeness.
2168*61046927SAndroid Build Coastguard Worker      Instead, use your platform's neural accelerator.
2169*61046927SAndroid Build Coastguard Worker
2170*61046927SAndroid Build Coastguard Worker      For $A, B \in \{ 0, \ldots, 255 \}^4$ and $\text{Accumulator} \in
2171*61046927SAndroid Build Coastguard Worker      \mathbb{Z}$, calculates $(A \cdot B) + \text{Accumulator}$ and optionally
2172*61046927SAndroid Build Coastguard Worker      saturates.
2173*61046927SAndroid Build Coastguard Worker    </desc>
2174*61046927SAndroid Build Coastguard Worker    <ins name="IDP.v4s8" opcode2="0"/>
2175*61046927SAndroid Build Coastguard Worker    <ins name="IDP.v4u8" opcode2="1"/>
2176*61046927SAndroid Build Coastguard Worker    <src>A</src>
2177*61046927SAndroid Build Coastguard Worker    <src>B</src>
2178*61046927SAndroid Build Coastguard Worker    <src>Accumulator</src>
2179*61046927SAndroid Build Coastguard Worker    <saturate/>
2180*61046927SAndroid Build Coastguard Worker  </group>
2181*61046927SAndroid Build Coastguard Worker
2182*61046927SAndroid Build Coastguard Worker  <group name="ICMP_OR" title="Unsigned integer compare" dests="1" unit="CVT" opcode2="0">
2183*61046927SAndroid Build Coastguard Worker    <desc>
2184*61046927SAndroid Build Coastguard Worker      Evaluates the given condition, do a logical or with the condition in
2185*61046927SAndroid Build Coastguard Worker      the result source, and return in the given result type (integer
2186*61046927SAndroid Build Coastguard Worker      one, integer minus one, or floating-point one). The third source is useful
2187*61046927SAndroid Build Coastguard Worker      for chaining together conditions without intermediate bitwise arithmetic;
2188*61046927SAndroid Build Coastguard Worker      when this is not desired, tie it to zero.
2189*61046927SAndroid Build Coastguard Worker    </desc>
2190*61046927SAndroid Build Coastguard Worker    <ins name="ICMP_OR.u32" opcode="0xF0"/>
2191*61046927SAndroid Build Coastguard Worker    <ins name="ICMP_OR.v2u16" opcode="0xF1"/>
2192*61046927SAndroid Build Coastguard Worker    <ins name="ICMP_OR.v4u8" opcode="0xF2"/>
2193*61046927SAndroid Build Coastguard Worker    <cmp int_only="true"/>
2194*61046927SAndroid Build Coastguard Worker    <result_type/>
2195*61046927SAndroid Build Coastguard Worker    <src widen="true">A</src>
2196*61046927SAndroid Build Coastguard Worker    <src widen="true">B</src>
2197*61046927SAndroid Build Coastguard Worker    <src>C</src>
2198*61046927SAndroid Build Coastguard Worker  </group>
2199*61046927SAndroid Build Coastguard Worker
2200*61046927SAndroid Build Coastguard Worker  <group name="ICMP_AND" title="Unsigned integer compare" dests="1" unit="CVT" opcode2="1">
2201*61046927SAndroid Build Coastguard Worker    <desc>
2202*61046927SAndroid Build Coastguard Worker      Evaluates the given condition, do a logical and with the condition in
2203*61046927SAndroid Build Coastguard Worker      the result source, and return in the given result type (integer
2204*61046927SAndroid Build Coastguard Worker      one, integer minus one, or floating-point one). The third source is useful
2205*61046927SAndroid Build Coastguard Worker      for chaining together conditions without intermediate bitwise arithmetic.
2206*61046927SAndroid Build Coastguard Worker    </desc>
2207*61046927SAndroid Build Coastguard Worker    <ins name="ICMP_AND.u32" opcode="0xF0"/>
2208*61046927SAndroid Build Coastguard Worker    <ins name="ICMP_AND.v2u16" opcode="0xF1"/>
2209*61046927SAndroid Build Coastguard Worker    <ins name="ICMP_AND.v4u8" opcode="0xF2"/>
2210*61046927SAndroid Build Coastguard Worker    <cmp int_only="true"/>
2211*61046927SAndroid Build Coastguard Worker    <result_type/>
2212*61046927SAndroid Build Coastguard Worker    <src widen="true">A</src>
2213*61046927SAndroid Build Coastguard Worker    <src widen="true">B</src>
2214*61046927SAndroid Build Coastguard Worker    <src>C</src>
2215*61046927SAndroid Build Coastguard Worker  </group>
2216*61046927SAndroid Build Coastguard Worker
2217*61046927SAndroid Build Coastguard Worker  <group name="FCMP_OR" title="Floating-point compare" dests="1" unit="CVT" opcode2="0">
2218*61046927SAndroid Build Coastguard Worker    <desc>
2219*61046927SAndroid Build Coastguard Worker      Evaluates the given condition, do a logical or with the condition in
2220*61046927SAndroid Build Coastguard Worker      the result source, and return in the given result type (integer
2221*61046927SAndroid Build Coastguard Worker      one, integer minus one, or floating-point one). The third source is useful
2222*61046927SAndroid Build Coastguard Worker      for chaining together conditions without intermediate bitwise arithmetic;
2223*61046927SAndroid Build Coastguard Worker      when this is not desired, tie it to zero.
2224*61046927SAndroid Build Coastguard Worker    </desc>
2225*61046927SAndroid Build Coastguard Worker    <ins name="FCMP_OR.f32" opcode="0xF4"/>
2226*61046927SAndroid Build Coastguard Worker    <ins name="FCMP_OR.v2f16" opcode="0xF5"/>
2227*61046927SAndroid Build Coastguard Worker    <cmp/>
2228*61046927SAndroid Build Coastguard Worker    <result_type/>
2229*61046927SAndroid Build Coastguard Worker    <src absneg="true" swizzle="true">A</src>
2230*61046927SAndroid Build Coastguard Worker    <src absneg="true" swizzle="true">B</src>
2231*61046927SAndroid Build Coastguard Worker    <src>C</src>
2232*61046927SAndroid Build Coastguard Worker  </group>
2233*61046927SAndroid Build Coastguard Worker
2234*61046927SAndroid Build Coastguard Worker  <group name="FCMP_AND" title="Floating-point compare" dests="1" unit="CVT" opcode2="1">
2235*61046927SAndroid Build Coastguard Worker    <desc>
2236*61046927SAndroid Build Coastguard Worker      Evaluates the given condition, do a logical and/or with the condition in
2237*61046927SAndroid Build Coastguard Worker      the result source, and return in the given result type (integer
2238*61046927SAndroid Build Coastguard Worker      one, integer minus one, or floating-point one). The third source is useful
2239*61046927SAndroid Build Coastguard Worker      for chaining together conditions without intermediate bitwise arithmetic.
2240*61046927SAndroid Build Coastguard Worker    </desc>
2241*61046927SAndroid Build Coastguard Worker    <ins name="FCMP_AND.f32" opcode="0xF4"/>
2242*61046927SAndroid Build Coastguard Worker    <ins name="FCMP_AND.v2f16" opcode="0xF5"/>
2243*61046927SAndroid Build Coastguard Worker    <cmp/>
2244*61046927SAndroid Build Coastguard Worker    <result_type/>
2245*61046927SAndroid Build Coastguard Worker    <src absneg="true" swizzle="true">A</src>
2246*61046927SAndroid Build Coastguard Worker    <src absneg="true" swizzle="true">B</src>
2247*61046927SAndroid Build Coastguard Worker    <src>C</src>
2248*61046927SAndroid Build Coastguard Worker  </group>
2249*61046927SAndroid Build Coastguard Worker
2250*61046927SAndroid Build Coastguard Worker  <group name="ICMP_OR" title="Signed integer compare" dests="1" unit="CVT" opcode2="0">
2251*61046927SAndroid Build Coastguard Worker    <desc>
2252*61046927SAndroid Build Coastguard Worker      Evaluates the given condition, do a logical or with the condition in
2253*61046927SAndroid Build Coastguard Worker      the result source, and return in the given result type (integer
2254*61046927SAndroid Build Coastguard Worker      one, integer minus one, or floating-point one). The third source is useful
2255*61046927SAndroid Build Coastguard Worker      for chaining together conditions without intermediate bitwise arithmetic.
2256*61046927SAndroid Build Coastguard Worker    </desc>
2257*61046927SAndroid Build Coastguard Worker    <ins name="ICMP_OR.s32" opcode="0xF8"/>
2258*61046927SAndroid Build Coastguard Worker    <ins name="ICMP_OR.v2s16" opcode="0xF9"/>
2259*61046927SAndroid Build Coastguard Worker    <ins name="ICMP_OR.v4s8" opcode="0xFA"/>
2260*61046927SAndroid Build Coastguard Worker    <cmp int_only="true"/>
2261*61046927SAndroid Build Coastguard Worker    <result_type/>
2262*61046927SAndroid Build Coastguard Worker    <src widen="true">A</src>
2263*61046927SAndroid Build Coastguard Worker    <src widen="true">B</src>
2264*61046927SAndroid Build Coastguard Worker    <src>C</src>
2265*61046927SAndroid Build Coastguard Worker  </group>
2266*61046927SAndroid Build Coastguard Worker
2267*61046927SAndroid Build Coastguard Worker  <group name="ICMP_AND" title="Signed integer compare" dests="1" unit="CVT" opcode2="1">
2268*61046927SAndroid Build Coastguard Worker    <desc>
2269*61046927SAndroid Build Coastguard Worker      Evaluates the given condition, do a logical and with the condition in
2270*61046927SAndroid Build Coastguard Worker      the result source, and return in the given result type (integer
2271*61046927SAndroid Build Coastguard Worker      one, integer minus one, or floating-point one). The third source is useful
2272*61046927SAndroid Build Coastguard Worker      for chaining together conditions without intermediate bitwise arithmetic.
2273*61046927SAndroid Build Coastguard Worker    </desc>
2274*61046927SAndroid Build Coastguard Worker    <ins name="ICMP_AND.s32" opcode="0xF8"/>
2275*61046927SAndroid Build Coastguard Worker    <ins name="ICMP_AND.v2s16" opcode="0xF9"/>
2276*61046927SAndroid Build Coastguard Worker    <ins name="ICMP_AND.v4s8" opcode="0xFA"/>
2277*61046927SAndroid Build Coastguard Worker    <cmp int_only="true"/>
2278*61046927SAndroid Build Coastguard Worker    <result_type/>
2279*61046927SAndroid Build Coastguard Worker    <src widen="true">A</src>
2280*61046927SAndroid Build Coastguard Worker    <src widen="true">B</src>
2281*61046927SAndroid Build Coastguard Worker    <src>C</src>
2282*61046927SAndroid Build Coastguard Worker  </group>
2283*61046927SAndroid Build Coastguard Worker
2284*61046927SAndroid Build Coastguard Worker  <group name="ICMP_MULTI" title="Integer compare" dests="1" unit="CVT" opcode2="2">
2285*61046927SAndroid Build Coastguard Worker    <desc>
2286*61046927SAndroid Build Coastguard Worker      Evaluates the given condition, do a logical and/or with the condition in
2287*61046927SAndroid Build Coastguard Worker      the result source, and return in the given result type (integer
2288*61046927SAndroid Build Coastguard Worker      one, integer minus one, or floating-point one). The third source is useful
2289*61046927SAndroid Build Coastguard Worker      for chaining together conditions without intermediate bitwise arithmetic;
2290*61046927SAndroid Build Coastguard Worker      when this is not desired, tie it to zero and use the OR combine mode (do
2291*61046927SAndroid Build Coastguard Worker      not set the `.and` modifier).
2292*61046927SAndroid Build Coastguard Worker
2293*61046927SAndroid Build Coastguard Worker      Used to construct signed 64-bit compares
2294*61046927SAndroid Build Coastguard Worker      in 1 `ICMP.u32` and 1 `ICMP.s32` instruction, in conjunction with the `u1`
2295*61046927SAndroid Build Coastguard Worker      result type on the low half, the `m1` result type on the high half, and
2296*61046927SAndroid Build Coastguard Worker      the result of the low half comparison passed as the third source.
2297*61046927SAndroid Build Coastguard Worker    </desc>
2298*61046927SAndroid Build Coastguard Worker    <ins name="ICMP_MULTI.u32" opcode="0xF0"/>
2299*61046927SAndroid Build Coastguard Worker    <ins name="ICMP_MULTI.s32" opcode="0xF8"/>
2300*61046927SAndroid Build Coastguard Worker    <cmp int_only="true"/>
2301*61046927SAndroid Build Coastguard Worker    <result_type/>
2302*61046927SAndroid Build Coastguard Worker    <src widen="true">A</src>
2303*61046927SAndroid Build Coastguard Worker    <src widen="true">B</src>
2304*61046927SAndroid Build Coastguard Worker    <src>C</src>
2305*61046927SAndroid Build Coastguard Worker  </group>
2306*61046927SAndroid Build Coastguard Worker
2307*61046927SAndroid Build Coastguard Worker  <ins name="IADD_IMM.i32" title="Integer addition with immediate" dests="1" opcode="0x110" unit="CVT">
2308*61046927SAndroid Build Coastguard Worker    <desc>
2309*61046927SAndroid Build Coastguard Worker      Adds an arbitrary 32-bit immediate embedded within the instruction stream.
2310*61046927SAndroid Build Coastguard Worker      If no modifiers are required, this is preferred to `IADD.i32` with a
2311*61046927SAndroid Build Coastguard Worker      constant accessed as a uniform. However, if the constant is available
2312*61046927SAndroid Build Coastguard Worker      inline, `IADD.i32` is preferred.
2313*61046927SAndroid Build Coastguard Worker
2314*61046927SAndroid Build Coastguard Worker      `IADD_IMM.i32` with the source tied to zero is the canonical immediate move.
2315*61046927SAndroid Build Coastguard Worker    </desc>
2316*61046927SAndroid Build Coastguard Worker    <src>A</src>
2317*61046927SAndroid Build Coastguard Worker    <imm name="constant" ir_name="index" start="8" size="32"/>
2318*61046927SAndroid Build Coastguard Worker  </ins>
2319*61046927SAndroid Build Coastguard Worker
2320*61046927SAndroid Build Coastguard Worker  <ins name="IADD_IMM.v2i16" title="Integer addition with immediate" dests="1" opcode="0x111" unit="CVT">
2321*61046927SAndroid Build Coastguard Worker    <desc>
2322*61046927SAndroid Build Coastguard Worker      Adds an arbitrary pair of 16-bit immediates embedded within the
2323*61046927SAndroid Build Coastguard Worker      instruction stream. If no modifiers are required, this is preferred to
2324*61046927SAndroid Build Coastguard Worker      `IADD.v2i16` with a constant accessed as a uniform. However, if the
2325*61046927SAndroid Build Coastguard Worker      constant is available inline, `IADD.v2i16` is preferred. Adding only a
2326*61046927SAndroid Build Coastguard Worker      single 16-bit constant requires replication of the constant.
2327*61046927SAndroid Build Coastguard Worker    </desc>
2328*61046927SAndroid Build Coastguard Worker    <src>A</src>
2329*61046927SAndroid Build Coastguard Worker    <imm name="constant" ir_name="index" start="8" size="32"/>
2330*61046927SAndroid Build Coastguard Worker  </ins>
2331*61046927SAndroid Build Coastguard Worker
2332*61046927SAndroid Build Coastguard Worker  <ins name="IADD_IMM.v4i8" title="Integer addition with immediate" dests="1" opcode="0x112" unit="CVT">
2333*61046927SAndroid Build Coastguard Worker    <desc>
2334*61046927SAndroid Build Coastguard Worker      Adds an arbitrary quad of 8-bit immediates embedded within the
2335*61046927SAndroid Build Coastguard Worker      instruction stream. If no modifiers are required, this is preferred to
2336*61046927SAndroid Build Coastguard Worker      `IADD.v4i8` with a constant accessed as a uniform. However, if the
2337*61046927SAndroid Build Coastguard Worker      constant is available inline, `IADD.v4i8` is preferred. Adding only a
2338*61046927SAndroid Build Coastguard Worker      single 8-bit constant requires replication of the constant.
2339*61046927SAndroid Build Coastguard Worker    </desc>
2340*61046927SAndroid Build Coastguard Worker    <src>A</src>
2341*61046927SAndroid Build Coastguard Worker    <imm name="constant" ir_name="index" start="8" size="32"/>
2342*61046927SAndroid Build Coastguard Worker  </ins>
2343*61046927SAndroid Build Coastguard Worker
2344*61046927SAndroid Build Coastguard Worker  <ins name="FADD_IMM.f32" title="Floating-point addition with immediate" dests="1" opcode="0x114" unit="FMA">
2345*61046927SAndroid Build Coastguard Worker    <desc>
2346*61046927SAndroid Build Coastguard Worker      Adds an arbitrary 32-bit immediate embedded within the instruction stream.
2347*61046927SAndroid Build Coastguard Worker      If no modifiers are required, this is preferred to `FADD.f32` with a
2348*61046927SAndroid Build Coastguard Worker      constant accessed as a uniform. However, if the constant is available
2349*61046927SAndroid Build Coastguard Worker      inline, `FADD.f32` is preferred.
2350*61046927SAndroid Build Coastguard Worker    </desc>
2351*61046927SAndroid Build Coastguard Worker    <src>A</src>
2352*61046927SAndroid Build Coastguard Worker    <imm name="constant" ir_name="index" start="8" size="32"/>
2353*61046927SAndroid Build Coastguard Worker  </ins>
2354*61046927SAndroid Build Coastguard Worker
2355*61046927SAndroid Build Coastguard Worker  <ins name="FADD_IMM.v2f16" title="Floating-point addition with immediate" dests="1" opcode="0x115" unit="FMA">
2356*61046927SAndroid Build Coastguard Worker    <desc>
2357*61046927SAndroid Build Coastguard Worker      Adds an arbitrary pair of 16-bit immediates embedded within the
2358*61046927SAndroid Build Coastguard Worker      instruction stream. If no modifiers are required, this is preferred to
2359*61046927SAndroid Build Coastguard Worker      `FADD.v2f16` with a constant accessed as a uniform. However, if the
2360*61046927SAndroid Build Coastguard Worker      constant is available inline, `FADD.v2f16` is preferred. Adding only a
2361*61046927SAndroid Build Coastguard Worker      single 16-bit constant requires replication of the constant.
2362*61046927SAndroid Build Coastguard Worker    </desc>
2363*61046927SAndroid Build Coastguard Worker    <src float="true">A</src>
2364*61046927SAndroid Build Coastguard Worker    <imm name="constant" ir_name="index" start="8" size="32"/>
2365*61046927SAndroid Build Coastguard Worker  </ins>
2366*61046927SAndroid Build Coastguard Worker
2367*61046927SAndroid Build Coastguard Worker  <ins name="ATOM1_RETURN.i32" title="Atomic operations on memory with 1" opcode="0x69" opcode2="3" unused="true" unit="LS">
2368*61046927SAndroid Build Coastguard Worker    <slot/>
2369*61046927SAndroid Build Coastguard Worker    <sr_count/>
2370*61046927SAndroid Build Coastguard Worker    <atom_opc_1/>
2371*61046927SAndroid Build Coastguard Worker    <va_mod name="memory_width" start="128" size="1" implied="true"/>
2372*61046927SAndroid Build Coastguard Worker
2373*61046927SAndroid Build Coastguard Worker    <!-- Optional for ATOM1.i32, in which sr_count must be 0 -->
2374*61046927SAndroid Build Coastguard Worker    <sr write="true"/>
2375*61046927SAndroid Build Coastguard Worker    <src size="64">64-bit address to operate on</src>
2376*61046927SAndroid Build Coastguard Worker    <imm name="offset" start="8" size="8"/>
2377*61046927SAndroid Build Coastguard Worker  </ins>
2378*61046927SAndroid Build Coastguard Worker
2379*61046927SAndroid Build Coastguard Worker  <ins name="ATOM1_RETURN.i64" title="Atomic operations on memory with 1" opcode="0x69" opcode2="5" unused="true" unit="LS">
2380*61046927SAndroid Build Coastguard Worker    <slot/>
2381*61046927SAndroid Build Coastguard Worker    <sr_count/>
2382*61046927SAndroid Build Coastguard Worker    <atom_opc_1/>
2383*61046927SAndroid Build Coastguard Worker    <va_mod name="memory_width" start="128" size="1" implied="true"/>
2384*61046927SAndroid Build Coastguard Worker
2385*61046927SAndroid Build Coastguard Worker    <!-- Optional for ATOM1.i64, in which sr_count must be 0 -->
2386*61046927SAndroid Build Coastguard Worker    <sr write="true"/>
2387*61046927SAndroid Build Coastguard Worker    <src size="64">64-bit address to operate on</src>
2388*61046927SAndroid Build Coastguard Worker    <imm name="offset" start="8" size="8"/>
2389*61046927SAndroid Build Coastguard Worker  </ins>
2390*61046927SAndroid Build Coastguard Worker
2391*61046927SAndroid Build Coastguard Worker  <ins name="ATOM.i32" title="Atomic operations on memory" opcode="0x68" opcode2="3" unused="true" unit="LS">
2392*61046927SAndroid Build Coastguard Worker    <slot/>
2393*61046927SAndroid Build Coastguard Worker    <sr_count/>
2394*61046927SAndroid Build Coastguard Worker    <atom_opc/>
2395*61046927SAndroid Build Coastguard Worker    <va_mod name="memory_width" start="128" size="1" implied="true"/>
2396*61046927SAndroid Build Coastguard Worker
2397*61046927SAndroid Build Coastguard Worker    <sr read="true"/>
2398*61046927SAndroid Build Coastguard Worker    <src size="64">64-bit address to operate on</src>
2399*61046927SAndroid Build Coastguard Worker    <imm name="offset" start="8" size="8"/>
2400*61046927SAndroid Build Coastguard Worker  </ins>
2401*61046927SAndroid Build Coastguard Worker
2402*61046927SAndroid Build Coastguard Worker  <ins name="ATOM.i64" title="Atomic operations on memory" opcode="0x68" opcode2="5" unused="true" unit="LS">
2403*61046927SAndroid Build Coastguard Worker    <slot/>
2404*61046927SAndroid Build Coastguard Worker    <sr_count/>
2405*61046927SAndroid Build Coastguard Worker    <atom_opc/>
2406*61046927SAndroid Build Coastguard Worker    <va_mod name="memory_width" start="128" size="1" implied="true"/>
2407*61046927SAndroid Build Coastguard Worker
2408*61046927SAndroid Build Coastguard Worker    <sr read="true"/>
2409*61046927SAndroid Build Coastguard Worker    <src size="64">64-bit address to operate on</src>
2410*61046927SAndroid Build Coastguard Worker    <imm name="offset" start="8" size="8"/>
2411*61046927SAndroid Build Coastguard Worker  </ins>
2412*61046927SAndroid Build Coastguard Worker
2413*61046927SAndroid Build Coastguard Worker  <ins name="ATOM_RETURN.i32" title="Atomic operations on memory" opcode="0x120" opcode2="3" unused="true" unit="LS">
2414*61046927SAndroid Build Coastguard Worker    <slot/>
2415*61046927SAndroid Build Coastguard Worker    <sr_count/>
2416*61046927SAndroid Build Coastguard Worker    <sr_write_count/>
2417*61046927SAndroid Build Coastguard Worker
2418*61046927SAndroid Build Coastguard Worker    <!-- Only valid with .xchg to implement ACMPXCHG -->
2419*61046927SAndroid Build Coastguard Worker    <va_mod name="compare" start="26" size="1"/>
2420*61046927SAndroid Build Coastguard Worker
2421*61046927SAndroid Build Coastguard Worker    <atom_opc/>
2422*61046927SAndroid Build Coastguard Worker    <va_mod name="memory_width" start="128" size="1" implied="true"/>
2423*61046927SAndroid Build Coastguard Worker
2424*61046927SAndroid Build Coastguard Worker    <sr write="true" flags="false"/>
2425*61046927SAndroid Build Coastguard Worker    <sr read="true" flags="rw"/>
2426*61046927SAndroid Build Coastguard Worker    <src size="64">64-bit address to operate on</src>
2427*61046927SAndroid Build Coastguard Worker    <imm name="offset" start="8" size="8"/>
2428*61046927SAndroid Build Coastguard Worker  </ins>
2429*61046927SAndroid Build Coastguard Worker
2430*61046927SAndroid Build Coastguard Worker  <ins name="ATOM_RETURN.i64" title="Atomic operations on memory" opcode="0x120" opcode2="5" unused="true" unit="LS">
2431*61046927SAndroid Build Coastguard Worker    <slot/>
2432*61046927SAndroid Build Coastguard Worker    <sr_count/>
2433*61046927SAndroid Build Coastguard Worker    <sr_write_count/>
2434*61046927SAndroid Build Coastguard Worker    <va_mod name="compare" start="26" size="1"/>
2435*61046927SAndroid Build Coastguard Worker    <atom_opc/>
2436*61046927SAndroid Build Coastguard Worker    <va_mod name="memory_width" start="128" size="1" implied="true"/>
2437*61046927SAndroid Build Coastguard Worker
2438*61046927SAndroid Build Coastguard Worker    <sr write="true" flags="false"/>
2439*61046927SAndroid Build Coastguard Worker    <sr read="true" flags="rw"/>
2440*61046927SAndroid Build Coastguard Worker    <src size="64">64-bit address to operate on</src>
2441*61046927SAndroid Build Coastguard Worker    <imm name="offset" start="8" size="8"/>
2442*61046927SAndroid Build Coastguard Worker  </ins>
2443*61046927SAndroid Build Coastguard Worker
2444*61046927SAndroid Build Coastguard Worker  <ins name="TEX_FETCH" title="Texel fetch" opcode="0x125" message="tex" unit="T">
2445*61046927SAndroid Build Coastguard Worker    <desc>Unfiltered textured instruction.</desc>
2446*61046927SAndroid Build Coastguard Worker    <slot/>
2447*61046927SAndroid Build Coastguard Worker    <skip/>
2448*61046927SAndroid Build Coastguard Worker    <register_type/>
2449*61046927SAndroid Build Coastguard Worker    <register_width/>
2450*61046927SAndroid Build Coastguard Worker    <write_mask/>
2451*61046927SAndroid Build Coastguard Worker    <dimension/>
2452*61046927SAndroid Build Coastguard Worker    <wide_indices/>
2453*61046927SAndroid Build Coastguard Worker    <array_enable/>
2454*61046927SAndroid Build Coastguard Worker    <texel_offset/>
2455*61046927SAndroid Build Coastguard Worker    <regfmt pseudo="true"/>
2456*61046927SAndroid Build Coastguard Worker
2457*61046927SAndroid Build Coastguard Worker    <!-- Leave secondary_register_width as 0 -->
2458*61046927SAndroid Build Coastguard Worker    <sr_count/>
2459*61046927SAndroid Build Coastguard Worker    <sr_write_count/>
2460*61046927SAndroid Build Coastguard Worker
2461*61046927SAndroid Build Coastguard Worker    <sr write="true" flags="false"/>
2462*61046927SAndroid Build Coastguard Worker    <sr read="true" flags="false"/>
2463*61046927SAndroid Build Coastguard Worker    <src size="64">Image to read from</src>
2464*61046927SAndroid Build Coastguard Worker    <src pseudo="true">Dummy for IR</src>
2465*61046927SAndroid Build Coastguard Worker    <immediate name="sr_count" size="4" pseudo="true"/>
2466*61046927SAndroid Build Coastguard Worker  </ins>
2467*61046927SAndroid Build Coastguard Worker
2468*61046927SAndroid Build Coastguard Worker  <ins name="TEX_SINGLE" title="Texture load" opcode="0x128" message="tex" unit="T">
2469*61046927SAndroid Build Coastguard Worker    <desc>Ordinary texturing instruction using a sampler.</desc>
2470*61046927SAndroid Build Coastguard Worker    <slot/>
2471*61046927SAndroid Build Coastguard Worker    <skip/>
2472*61046927SAndroid Build Coastguard Worker    <register_type/>
2473*61046927SAndroid Build Coastguard Worker    <register_width/>
2474*61046927SAndroid Build Coastguard Worker    <write_mask/>
2475*61046927SAndroid Build Coastguard Worker    <dimension/>
2476*61046927SAndroid Build Coastguard Worker    <wide_indices/>
2477*61046927SAndroid Build Coastguard Worker    <array_enable/>
2478*61046927SAndroid Build Coastguard Worker    <texel_offset/>
2479*61046927SAndroid Build Coastguard Worker    <regfmt pseudo="true"/>
2480*61046927SAndroid Build Coastguard Worker    <shadow/>
2481*61046927SAndroid Build Coastguard Worker    <lod_mode/>
2482*61046927SAndroid Build Coastguard Worker
2483*61046927SAndroid Build Coastguard Worker    <!-- Leave secondary_register_width as 0 -->
2484*61046927SAndroid Build Coastguard Worker    <sr_count/>
2485*61046927SAndroid Build Coastguard Worker    <sr_write_count/>
2486*61046927SAndroid Build Coastguard Worker
2487*61046927SAndroid Build Coastguard Worker    <sr write="true" flags="false"/>
2488*61046927SAndroid Build Coastguard Worker    <sr read="true" flags="false"/>
2489*61046927SAndroid Build Coastguard Worker    <src size="64">Image to read from</src>
2490*61046927SAndroid Build Coastguard Worker    <src pseudo="true">Dummy for IR</src>
2491*61046927SAndroid Build Coastguard Worker    <immediate name="sr_count" size="4" pseudo="true"/>
2492*61046927SAndroid Build Coastguard Worker  </ins>
2493*61046927SAndroid Build Coastguard Worker
2494*61046927SAndroid Build Coastguard Worker  <ins name="TEX_GATHER" title="Texel gather" opcode="0x129" message="tex" unit="T">
2495*61046927SAndroid Build Coastguard Worker    <desc>Texture gather instruction.</desc>
2496*61046927SAndroid Build Coastguard Worker    <slot/>
2497*61046927SAndroid Build Coastguard Worker    <skip/>
2498*61046927SAndroid Build Coastguard Worker    <register_type/>
2499*61046927SAndroid Build Coastguard Worker    <register_width/>
2500*61046927SAndroid Build Coastguard Worker    <write_mask/>
2501*61046927SAndroid Build Coastguard Worker    <dimension/>
2502*61046927SAndroid Build Coastguard Worker    <wide_indices/>
2503*61046927SAndroid Build Coastguard Worker    <array_enable/>
2504*61046927SAndroid Build Coastguard Worker    <texel_offset/>
2505*61046927SAndroid Build Coastguard Worker    <integer_coordinates/>
2506*61046927SAndroid Build Coastguard Worker    <fetch_component/>
2507*61046927SAndroid Build Coastguard Worker    <regfmt pseudo="true"/>
2508*61046927SAndroid Build Coastguard Worker    <shadow/>
2509*61046927SAndroid Build Coastguard Worker
2510*61046927SAndroid Build Coastguard Worker    <!-- Leave secondary_register_width as 0 -->
2511*61046927SAndroid Build Coastguard Worker    <sr_count count="sr_count"/>
2512*61046927SAndroid Build Coastguard Worker    <sr_write_count/>
2513*61046927SAndroid Build Coastguard Worker
2514*61046927SAndroid Build Coastguard Worker    <sr write="true" flags="false"/>
2515*61046927SAndroid Build Coastguard Worker    <sr read="true" flags="false"/>
2516*61046927SAndroid Build Coastguard Worker    <src size="64">Image to read from</src>
2517*61046927SAndroid Build Coastguard Worker    <src pseudo="true">Dummy source for IR</src>
2518*61046927SAndroid Build Coastguard Worker    <immediate name="sr_count" size="4" pseudo="true"/>
2519*61046927SAndroid Build Coastguard Worker  </ins>
2520*61046927SAndroid Build Coastguard Worker
2521*61046927SAndroid Build Coastguard Worker  <ins name="TEX_DUAL" title="Dual texture" opcode="0x12F" unused="true" unit="T">
2522*61046927SAndroid Build Coastguard Worker    <desc>Pair of texture instructions.</desc>
2523*61046927SAndroid Build Coastguard Worker    <slot/>
2524*61046927SAndroid Build Coastguard Worker    <skip/>
2525*61046927SAndroid Build Coastguard Worker    <register_type/>
2526*61046927SAndroid Build Coastguard Worker    <register_width/>
2527*61046927SAndroid Build Coastguard Worker    <secondary_register_width/>
2528*61046927SAndroid Build Coastguard Worker    <write_mask/>
2529*61046927SAndroid Build Coastguard Worker    <dimension/>
2530*61046927SAndroid Build Coastguard Worker    <wide_indices/>
2531*61046927SAndroid Build Coastguard Worker    <array_enable/>
2532*61046927SAndroid Build Coastguard Worker    <texel_offset/>
2533*61046927SAndroid Build Coastguard Worker    <shadow/>
2534*61046927SAndroid Build Coastguard Worker    <lod_mode/>
2535*61046927SAndroid Build Coastguard Worker
2536*61046927SAndroid Build Coastguard Worker    <sr_count/>
2537*61046927SAndroid Build Coastguard Worker    <sr_write_count/>
2538*61046927SAndroid Build Coastguard Worker
2539*61046927SAndroid Build Coastguard Worker    <sr write="true" flags="false"/>
2540*61046927SAndroid Build Coastguard Worker    <sr read="true" flags="false"/>
2541*61046927SAndroid Build Coastguard Worker    <src size="64">Image to read from</src>
2542*61046927SAndroid Build Coastguard Worker  </ins>
2543*61046927SAndroid Build Coastguard Worker
2544*61046927SAndroid Build Coastguard Worker  <ins name="VAR_TEX_BUF_SINGLE" title="Fused varying-texturing" opcode="0x130" unused="true" unit="VT">
2545*61046927SAndroid Build Coastguard Worker    <desc>
2546*61046927SAndroid Build Coastguard Worker      Only works for FP32 varyings. Performance characteristics are similar
2547*61046927SAndroid Build Coastguard Worker      to LD_VAR_BUF_IMM_F32.v2.f32 followed by TEX, using both V and T units.
2548*61046927SAndroid Build Coastguard Worker    </desc>
2549*61046927SAndroid Build Coastguard Worker    <slot/>
2550*61046927SAndroid Build Coastguard Worker    <skip/>
2551*61046927SAndroid Build Coastguard Worker    <sample_and_update/>
2552*61046927SAndroid Build Coastguard Worker    <register_type/>
2553*61046927SAndroid Build Coastguard Worker    <vartex_register_width/>
2554*61046927SAndroid Build Coastguard Worker    <dimension/>
2555*61046927SAndroid Build Coastguard Worker    <array_enable/>
2556*61046927SAndroid Build Coastguard Worker    <shadow/>
2557*61046927SAndroid Build Coastguard Worker    <lod_mode/>
2558*61046927SAndroid Build Coastguard Worker
2559*61046927SAndroid Build Coastguard Worker    <sr_write_count/>
2560*61046927SAndroid Build Coastguard Worker
2561*61046927SAndroid Build Coastguard Worker    <sr write="true"/>
2562*61046927SAndroid Build Coastguard Worker    <src size="64">Image to read from</src>
2563*61046927SAndroid Build Coastguard Worker    <src>Varying offset</src>
2564*61046927SAndroid Build Coastguard Worker  </ins>
2565*61046927SAndroid Build Coastguard Worker
2566*61046927SAndroid Build Coastguard Worker  <ins name="VAR_TEX_BUF_GATHER" title="Fused varying-texturing" opcode="0x131" unused="true" unit="VT">
2567*61046927SAndroid Build Coastguard Worker    <desc>
2568*61046927SAndroid Build Coastguard Worker      Only works for FP32 varyings. Performance characteristics are similar
2569*61046927SAndroid Build Coastguard Worker      to LD_VAR_BUF_IMM_F32.v2.f32 followed by TEX, using both V and T units.
2570*61046927SAndroid Build Coastguard Worker    </desc>
2571*61046927SAndroid Build Coastguard Worker    <slot/>
2572*61046927SAndroid Build Coastguard Worker    <skip/>
2573*61046927SAndroid Build Coastguard Worker    <sample_and_update/>
2574*61046927SAndroid Build Coastguard Worker    <register_type/>
2575*61046927SAndroid Build Coastguard Worker    <vartex_register_width/>
2576*61046927SAndroid Build Coastguard Worker    <dimension/>
2577*61046927SAndroid Build Coastguard Worker    <array_enable/>
2578*61046927SAndroid Build Coastguard Worker    <integer_coordinates/>
2579*61046927SAndroid Build Coastguard Worker    <fetch_component/>
2580*61046927SAndroid Build Coastguard Worker    <shadow/>
2581*61046927SAndroid Build Coastguard Worker
2582*61046927SAndroid Build Coastguard Worker    <sr_write_count/>
2583*61046927SAndroid Build Coastguard Worker
2584*61046927SAndroid Build Coastguard Worker    <sr write="true"/>
2585*61046927SAndroid Build Coastguard Worker    <src size="64">Image to read from</src>
2586*61046927SAndroid Build Coastguard Worker    <src>Varying offset</src>
2587*61046927SAndroid Build Coastguard Worker  </ins>
2588*61046927SAndroid Build Coastguard Worker
2589*61046927SAndroid Build Coastguard Worker  <ins name="VAR_TEX_BUF_GRADIENT" title="Fused varying-texturing" opcode="0x132" unused="true" unit="VT">
2590*61046927SAndroid Build Coastguard Worker    <desc>
2591*61046927SAndroid Build Coastguard Worker      Only works for FP32 varyings. Performance characteristics are similar
2592*61046927SAndroid Build Coastguard Worker      to LD_VAR_BUF_IMM_F32.v2.f32 followed by TEX, using both V and T units.
2593*61046927SAndroid Build Coastguard Worker    </desc>
2594*61046927SAndroid Build Coastguard Worker    <slot/>
2595*61046927SAndroid Build Coastguard Worker    <skip/>
2596*61046927SAndroid Build Coastguard Worker    <sample_and_update/>
2597*61046927SAndroid Build Coastguard Worker    <register_type/>
2598*61046927SAndroid Build Coastguard Worker    <vartex_register_width/>
2599*61046927SAndroid Build Coastguard Worker    <dimension/>
2600*61046927SAndroid Build Coastguard Worker    <array_enable/>
2601*61046927SAndroid Build Coastguard Worker    <shadow/>
2602*61046927SAndroid Build Coastguard Worker    <lod_bias_disable/>
2603*61046927SAndroid Build Coastguard Worker    <lod_clamp_disable/>
2604*61046927SAndroid Build Coastguard Worker
2605*61046927SAndroid Build Coastguard Worker    <sr_write_count/>
2606*61046927SAndroid Build Coastguard Worker
2607*61046927SAndroid Build Coastguard Worker    <sr write="true"/>
2608*61046927SAndroid Build Coastguard Worker    <src size="64">Image to read from</src>
2609*61046927SAndroid Build Coastguard Worker    <src>Varying offset</src>
2610*61046927SAndroid Build Coastguard Worker  </ins>
2611*61046927SAndroid Build Coastguard Worker
2612*61046927SAndroid Build Coastguard Worker  <ins name="VAR_TEX_BUF_DUAL" title="Fused varying-texturing" opcode="0x137" unused="true" unit="VT">
2613*61046927SAndroid Build Coastguard Worker    <desc>
2614*61046927SAndroid Build Coastguard Worker      Only works for FP32 varyings. Performance characteristics are similar
2615*61046927SAndroid Build Coastguard Worker      to LD_VAR_BUF_IMM_F32.v2.f32 followed by TEX_DUAL, using both V and T units.
2616*61046927SAndroid Build Coastguard Worker    </desc>
2617*61046927SAndroid Build Coastguard Worker    <slot/>
2618*61046927SAndroid Build Coastguard Worker    <skip/>
2619*61046927SAndroid Build Coastguard Worker    <sample_and_update/>
2620*61046927SAndroid Build Coastguard Worker    <register_type/>
2621*61046927SAndroid Build Coastguard Worker    <vartex_register_width/>
2622*61046927SAndroid Build Coastguard Worker    <dimension/>
2623*61046927SAndroid Build Coastguard Worker    <array_enable/>
2624*61046927SAndroid Build Coastguard Worker    <shadow/>
2625*61046927SAndroid Build Coastguard Worker    <lod_mode/>
2626*61046927SAndroid Build Coastguard Worker
2627*61046927SAndroid Build Coastguard Worker    <sr_write_count/>
2628*61046927SAndroid Build Coastguard Worker
2629*61046927SAndroid Build Coastguard Worker    <sr write="true"/>
2630*61046927SAndroid Build Coastguard Worker    <src size="64">Image to read from</src>
2631*61046927SAndroid Build Coastguard Worker    <src>Varying offset</src>
2632*61046927SAndroid Build Coastguard Worker  </ins>
2633*61046927SAndroid Build Coastguard Worker
2634*61046927SAndroid Build Coastguard Worker  <ins name="VAR_TEX_SINGLE" title="Fused varying-texturing" opcode="0x138" unused="true" unit="VT">
2635*61046927SAndroid Build Coastguard Worker    <desc>
2636*61046927SAndroid Build Coastguard Worker      Only works for FP32 varyings. Performance characteristics are similar
2637*61046927SAndroid Build Coastguard Worker      to LD_VAR_IMM_F32.v2.f32 followed by TEX, using both V and T units.
2638*61046927SAndroid Build Coastguard Worker    </desc>
2639*61046927SAndroid Build Coastguard Worker    <slot/>
2640*61046927SAndroid Build Coastguard Worker    <skip/>
2641*61046927SAndroid Build Coastguard Worker    <sample_and_update/>
2642*61046927SAndroid Build Coastguard Worker    <register_type/>
2643*61046927SAndroid Build Coastguard Worker    <vartex_register_width/>
2644*61046927SAndroid Build Coastguard Worker    <dimension/>
2645*61046927SAndroid Build Coastguard Worker    <array_enable/>
2646*61046927SAndroid Build Coastguard Worker    <shadow/>
2647*61046927SAndroid Build Coastguard Worker    <lod_mode/>
2648*61046927SAndroid Build Coastguard Worker
2649*61046927SAndroid Build Coastguard Worker    <sr_write_count/>
2650*61046927SAndroid Build Coastguard Worker
2651*61046927SAndroid Build Coastguard Worker    <sr write="true"/>
2652*61046927SAndroid Build Coastguard Worker    <src size="64">Image to read from</src>
2653*61046927SAndroid Build Coastguard Worker    <src>Varying offset</src>
2654*61046927SAndroid Build Coastguard Worker  </ins>
2655*61046927SAndroid Build Coastguard Worker
2656*61046927SAndroid Build Coastguard Worker  <ins name="VAR_TEX_GATHER" title="Fused varying-texturing" opcode="0x139" unused="true" unit="VT">
2657*61046927SAndroid Build Coastguard Worker    <desc>
2658*61046927SAndroid Build Coastguard Worker      Only works for FP32 varyings. Performance characteristics are similar
2659*61046927SAndroid Build Coastguard Worker      to LD_VAR_IMM_F32.v2.f32 followed by TEX, using both V and T units.
2660*61046927SAndroid Build Coastguard Worker    </desc>
2661*61046927SAndroid Build Coastguard Worker    <slot/>
2662*61046927SAndroid Build Coastguard Worker    <skip/>
2663*61046927SAndroid Build Coastguard Worker    <sample_and_update/>
2664*61046927SAndroid Build Coastguard Worker    <register_type/>
2665*61046927SAndroid Build Coastguard Worker    <vartex_register_width/>
2666*61046927SAndroid Build Coastguard Worker    <dimension/>
2667*61046927SAndroid Build Coastguard Worker    <array_enable/>
2668*61046927SAndroid Build Coastguard Worker    <integer_coordinates/>
2669*61046927SAndroid Build Coastguard Worker    <fetch_component/>
2670*61046927SAndroid Build Coastguard Worker    <shadow/>
2671*61046927SAndroid Build Coastguard Worker
2672*61046927SAndroid Build Coastguard Worker    <sr_write_count/>
2673*61046927SAndroid Build Coastguard Worker
2674*61046927SAndroid Build Coastguard Worker    <sr write="true"/>
2675*61046927SAndroid Build Coastguard Worker    <src size="64">Image to read from</src>
2676*61046927SAndroid Build Coastguard Worker    <src>Varying offset</src>
2677*61046927SAndroid Build Coastguard Worker  </ins>
2678*61046927SAndroid Build Coastguard Worker
2679*61046927SAndroid Build Coastguard Worker  <ins name="VAR_TEX_GRADIENT" title="Fused varying-texturing" opcode="0x13A" unused="true" unit="VT">
2680*61046927SAndroid Build Coastguard Worker    <desc>
2681*61046927SAndroid Build Coastguard Worker      Only works for FP32 varyings. Performance characteristics are similar
2682*61046927SAndroid Build Coastguard Worker      to LD_VAR_IMM_F32.v2.f32 followed by TEX, using both V and T units.
2683*61046927SAndroid Build Coastguard Worker    </desc>
2684*61046927SAndroid Build Coastguard Worker    <slot/>
2685*61046927SAndroid Build Coastguard Worker    <skip/>
2686*61046927SAndroid Build Coastguard Worker    <sample_and_update/>
2687*61046927SAndroid Build Coastguard Worker    <register_type/>
2688*61046927SAndroid Build Coastguard Worker    <vartex_register_width/>
2689*61046927SAndroid Build Coastguard Worker    <dimension/>
2690*61046927SAndroid Build Coastguard Worker    <array_enable/>
2691*61046927SAndroid Build Coastguard Worker    <shadow/>
2692*61046927SAndroid Build Coastguard Worker    <lod_bias_disable/>
2693*61046927SAndroid Build Coastguard Worker    <lod_clamp_disable/>
2694*61046927SAndroid Build Coastguard Worker
2695*61046927SAndroid Build Coastguard Worker    <sr_write_count/>
2696*61046927SAndroid Build Coastguard Worker
2697*61046927SAndroid Build Coastguard Worker    <sr write="true"/>
2698*61046927SAndroid Build Coastguard Worker    <src size="64">Image to read from</src>
2699*61046927SAndroid Build Coastguard Worker    <src>Varying offset</src>
2700*61046927SAndroid Build Coastguard Worker  </ins>
2701*61046927SAndroid Build Coastguard Worker
2702*61046927SAndroid Build Coastguard Worker  <ins name="VAR_TEX_DUAL" title="Fused varying-texturing" opcode="0x13F" unused="true" unit="VT">
2703*61046927SAndroid Build Coastguard Worker    <desc>
2704*61046927SAndroid Build Coastguard Worker      Only works for FP32 varyings. Performance characteristics are similar
2705*61046927SAndroid Build Coastguard Worker      to LD_VAR_IMM_F32.v2.f32 followed by TEX_DUAL, using both V and T units.
2706*61046927SAndroid Build Coastguard Worker    </desc>
2707*61046927SAndroid Build Coastguard Worker    <slot/>
2708*61046927SAndroid Build Coastguard Worker    <skip/>
2709*61046927SAndroid Build Coastguard Worker    <sample_and_update/>
2710*61046927SAndroid Build Coastguard Worker    <register_type/>
2711*61046927SAndroid Build Coastguard Worker    <vartex_register_width/>
2712*61046927SAndroid Build Coastguard Worker    <dimension/>
2713*61046927SAndroid Build Coastguard Worker    <array_enable/>
2714*61046927SAndroid Build Coastguard Worker    <shadow/>
2715*61046927SAndroid Build Coastguard Worker    <lod_mode/>
2716*61046927SAndroid Build Coastguard Worker
2717*61046927SAndroid Build Coastguard Worker    <sr_write_count/>
2718*61046927SAndroid Build Coastguard Worker
2719*61046927SAndroid Build Coastguard Worker    <sr write="true"/>
2720*61046927SAndroid Build Coastguard Worker    <src size="64">Image to read from</src>
2721*61046927SAndroid Build Coastguard Worker    <src>Varying offset</src>
2722*61046927SAndroid Build Coastguard Worker  </ins>
2723*61046927SAndroid Build Coastguard Worker
2724*61046927SAndroid Build Coastguard Worker  <ins name="FMA_RSCALE.f32" title="Fused floating-point multiply add with exponent bias" dests="1" opcode="0x160" unused="true" unit="FMA">
2725*61046927SAndroid Build Coastguard Worker    <desc>
2726*61046927SAndroid Build Coastguard Worker      First calculates $A \cdot B + C$ and then biases the exponent by D. Used in
2727*61046927SAndroid Build Coastguard Worker      special transcendental function sequences. It should not be used for
2728*61046927SAndroid Build Coastguard Worker      general code as its special case handling differs from two back-to-back
2729*61046927SAndroid Build Coastguard Worker      `FMA.f32` operations. Equivalent to `FMA.f32` back-to-back with
2730*61046927SAndroid Build Coastguard Worker      `LDEXP.f32`
2731*61046927SAndroid Build Coastguard Worker    </desc>
2732*61046927SAndroid Build Coastguard Worker    <clamp/>
2733*61046927SAndroid Build Coastguard Worker    <src absneg="true">A</src>
2734*61046927SAndroid Build Coastguard Worker    <src absneg="true">B</src>
2735*61046927SAndroid Build Coastguard Worker    <src absneg="true">C</src>
2736*61046927SAndroid Build Coastguard Worker    <src>D</src>
2737*61046927SAndroid Build Coastguard Worker  </ins>
2738*61046927SAndroid Build Coastguard Worker
2739*61046927SAndroid Build Coastguard Worker  <ins name="FMA_RSCALE_N.f32" title="Fused floating-point multiply add with exponent bias and zero override" dests="1" opcode="0x161" unused="true" unit="FMA">
2740*61046927SAndroid Build Coastguard Worker    <desc>
2741*61046927SAndroid Build Coastguard Worker      First calculates $A \cdot B + C$ and then biases the exponent by D. If $A
2742*61046927SAndroid Build Coastguard Worker      = 0$ or $B = 0$, the multiply $A \cdot B$ is treated as zero even if an
2743*61046927SAndroid Build Coastguard Worker      ordinary multiply would return NaN. Used in special transcendental
2744*61046927SAndroid Build Coastguard Worker      function sequences. It should not be used for general code as its special
2745*61046927SAndroid Build Coastguard Worker      case handling differs from two back-to-back `FMA.f32` operations.
2746*61046927SAndroid Build Coastguard Worker      Equivalent to `FMA.f32` back-to-back with `LDEXP.f32`
2747*61046927SAndroid Build Coastguard Worker    </desc>
2748*61046927SAndroid Build Coastguard Worker    <clamp/>
2749*61046927SAndroid Build Coastguard Worker    <src absneg="true">A</src>
2750*61046927SAndroid Build Coastguard Worker    <src absneg="true">B</src>
2751*61046927SAndroid Build Coastguard Worker    <src absneg="true">C</src>
2752*61046927SAndroid Build Coastguard Worker    <src>D</src>
2753*61046927SAndroid Build Coastguard Worker  </ins>
2754*61046927SAndroid Build Coastguard Worker
2755*61046927SAndroid Build Coastguard Worker  <ins name="FMA_RSCALE_LEFT.f32" title="Fused floating-point multiply add with exponent bias and asymmetric zero handling" dests="1" opcode="0x162" unused="true" unit="FMA">
2756*61046927SAndroid Build Coastguard Worker    <desc>
2757*61046927SAndroid Build Coastguard Worker      First calculates $A \cdot B + C$ and then biases the exponent by D. If $A
2758*61046927SAndroid Build Coastguard Worker      = 0$ or $B = 0$, the multiply is treated as $A$ even if an
2759*61046927SAndroid Build Coastguard Worker      ordinary multiply would return NaN. Used in special transcendental
2760*61046927SAndroid Build Coastguard Worker      function sequences. It should not be used for general code as its special
2761*61046927SAndroid Build Coastguard Worker      case handling differs from two back-to-back `FMA.f32` operations.
2762*61046927SAndroid Build Coastguard Worker      Equivalent to `FMA.f32` back-to-back with `LDEXP.f32`
2763*61046927SAndroid Build Coastguard Worker    </desc>
2764*61046927SAndroid Build Coastguard Worker    <clamp/>
2765*61046927SAndroid Build Coastguard Worker    <src absneg="true">A</src>
2766*61046927SAndroid Build Coastguard Worker    <src absneg="true">B</src>
2767*61046927SAndroid Build Coastguard Worker    <src absneg="true">C</src>
2768*61046927SAndroid Build Coastguard Worker    <src>D</src>
2769*61046927SAndroid Build Coastguard Worker  </ins>
2770*61046927SAndroid Build Coastguard Worker
2771*61046927SAndroid Build Coastguard Worker  <ins name="FMA_RSCALE_SCALE16.f32" title="Fused floating-point multiply add with 16-bit exponent bias" dests="1" opcode="0x163" unused="true" unit="FMA">
2772*61046927SAndroid Build Coastguard Worker    <desc>
2773*61046927SAndroid Build Coastguard Worker      First calculates $A \cdot B + C$ and then biases the exponent by D,
2774*61046927SAndroid Build Coastguard Worker      interpreted as a 16-bit value. Used in special transcendental function
2775*61046927SAndroid Build Coastguard Worker      sequences. It should not be used for general code as its special case
2776*61046927SAndroid Build Coastguard Worker      handling differs from two back-to-back `FMA.f32` operations.  Equivalent
2777*61046927SAndroid Build Coastguard Worker      to `FMA.f32` back-to-back with `LDEXP.f32`
2778*61046927SAndroid Build Coastguard Worker    </desc>
2779*61046927SAndroid Build Coastguard Worker    <clamp/>
2780*61046927SAndroid Build Coastguard Worker    <src absneg="true">A</src>
2781*61046927SAndroid Build Coastguard Worker    <src absneg="true">B</src>
2782*61046927SAndroid Build Coastguard Worker    <src absneg="true">C</src>
2783*61046927SAndroid Build Coastguard Worker    <src>D</src>
2784*61046927SAndroid Build Coastguard Worker  </ins>
2785*61046927SAndroid Build Coastguard Worker
2786*61046927SAndroid Build Coastguard Worker</valhall>
2787