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 < +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) & = +0.0 \\ 455*61046927SAndroid Build Coastguard Worker \text{clamp}(-\text{NaN}, 0.0, 1.0) & = +0.0 \\ 456*61046927SAndroid Build Coastguard Worker \text{clamp}(\text{NaN}, 0.0, 1.0) & = +0.0 \\ 457*61046927SAndroid Build Coastguard Worker & \\ 458*61046927SAndroid Build Coastguard Worker \text{clamp}(-0.0, -1.0, 1.0) & = -0.0 \\ 459*61046927SAndroid Build Coastguard Worker \text{clamp}(\text{NaN}, -1.0, 1.0) & = -1.0 \\ 460*61046927SAndroid Build Coastguard Worker \text{clamp}(-\text{NaN}, -1.0, 1.0) & = -1.0 \\ 461*61046927SAndroid Build Coastguard Worker & \\ 462*61046927SAndroid Build Coastguard Worker \max(\text{NaN}, 0.0) & = +0.0 \\ 463*61046927SAndroid Build Coastguard Worker \max(-\text{NaN}, 0.0) & = +0.0 \\ 464*61046927SAndroid Build Coastguard Worker \max(-0.0, 0.0) & = +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) & \text{if} \; 804*61046927SAndroid Build Coastguard Worker \text{src} \stackrel{?}{=} 0 \\ PC + 8 & \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 & mask) | (B & ~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 & mask) | (B & ~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 & mask) | (B & ~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