Changes between Version 11 and Version 12 of GcnInstrsMubuf


Ignore:
Timestamp:
01/14/16 16:00:14 (8 years ago)
Author:
trac
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • GcnInstrsMubuf

    v11 v12  
    168168</tbody>
    169169</table>
    170 <p>Instruction syntax: INSTRUCTION VDATA, VADDR, SRSRC, SOFFSET [MODIFIERS]</p>
     170<p>Instruction syntax: INSTRUCTION VDATA, VADDR(1:2), SRSRC(4), SOFFSET [MODIFIERS]</p>
    171171<p>Modifiers can be supplied in any order. Modifiers list:
    172172OFFEN, IDXEN, SLC, GLC, TFE, ADDR64, LDS, OFFSET:OFFSET.
     
    792792<h4>BUFFER_ATOMIC_ADD</h4>
    793793<p>Opcode: 50 (0x32) for GCN 1.0/1.1; 66 (0x42) for GCN 1.2<br />
    794 Syntax: BUFFER_ATOMIC_ADD VDATA, VADDR, SRSRC, SOFFSET<br />
     794Syntax: BUFFER_ATOMIC_ADD VDATA, VADDR(1:2), SRSRC(4), SOFFSET<br />
    795795Description: Add VDATA to value of SRSRC resource, and store result to this resource.
    796796If GLC flag is set then return previous value from resource to VDATA,
    797797otherwise keep VDATA value. Operation is atomic.<br />
    798798Operation:<br />
    799 <code>UINT32* VM = (UINT32*)VMEM(SRSRC, VADDR, SOFFSET, OFFSET)
     799<code>UINT32* VM = (UINT32*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET)
    800800UINT32 P = *VM; *VM = *VM + VDATA; VDATA = (GLC) ? P : VDATA // atomic</code></p>
    801801<h4>BUFFER_ATOMIC_ADD_X2</h4>
    802802<p>Opcode: 82 (0x52) for GCN 1.0/1.1; 98 (0x62) for GCN 1.2<br />
    803 Syntax: BUFFER_ATOMIC_ADD_X2 VDATA(2), VADDR, SRSRC, SOFFSET<br />
     803Syntax: BUFFER_ATOMIC_ADD_X2 VDATA(2), VADDR(1:2), SRSRC(4), SOFFSET<br />
    804804Description: Add 64-bit VDATA to 64-bit value of SRSRC resource, and store result
    805805to this resource. If GLC flag is set then return previous value from resource to VDATA,
    806806otherwise keep VDATA value. Operation is atomic.<br />
    807807Operation:<br />
    808 <code>UINT64* VM = (UINT64*)VMEM(SRSRC, VADDR, SOFFSET, OFFSET)
     808<code>UINT64* VM = (UINT64*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET)
    809809UINT64 P = *VM; *VM = *VM + VDATA; VDATA = (GLC) ? P : VDATA // atomic</code></p>
    810810<h4>BUFFER_ATOMIC_AND</h4>
    811811<p>Opcode: 57 (0x39) for GCN 1.0/1.1; 72 (0x48) for GCN 1.2<br />
    812 Syntax: BUFFER_ATOMIC_AND VDATA, VADDR, SRSRC, SOFFSET<br />
     812Syntax: BUFFER_ATOMIC_AND VDATA, VADDR(1:2), SRSRC(4), SOFFSET<br />
    813813Description: Do bitwise AND on VDATA and value of SRSRC resource,
    814814and store result to this resource. If GLC flag is set then return previous value
    815815from resource to VDATA, otherwise keep VDATA value. Operation is atomic.<br />
    816816Operation:<br />
    817 <code>UINT32* VM = (UINT32*)VMEM(SRSRC, VADDR, SOFFSET, OFFSET)
     817<code>UINT32* VM = (UINT32*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET)
    818818UINT32 P = *VM; *VM = *VM &amp; VDATA; VDATA = (GLC) ? P : VDATA // atomic</code></p>
    819819<h4>BUFFER_ATOMIC_AND_X2</h4>
    820820<p>Opcode: 89 (0x59) for GCN 1.0/1.1; 104 (0x68) for GCN 1.2<br />
    821 Syntax: BUFFER_ATOMIC_AND_X2 VDATA(2), VADDR, SRSRC, SOFFSET<br />
     821Syntax: BUFFER_ATOMIC_AND_X2 VDATA(2), VADDR(1:2), SRSRC(4), SOFFSET<br />
    822822Description: Do 64-bit bitwise AND on VDATA and value of SRSRC resource,
    823823and store result to this resource. If GLC flag is set then return previous value
    824824from resource to VDATA, otherwise keep VDATA value. Operation is atomic.<br />
    825825Operation:<br />
    826 <code>UINT64* VM = (UINT64*)VMEM(SRSRC, VADDR, SOFFSET, OFFSET)
     826<code>UINT64* VM = (UINT64*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET)
    827827UINT64 P = *VM; *VM = *VM &amp; VDATA; VDATA = (GLC) ? P : VDATA // atomic</code></p>
    828828<h4>BUFFER_ATOMIC_CMPSWAP</h4>
    829829<p>Opcode: 49 (0x31) for GCN 1.0/1.1; 65 (0x41) for GCN 1.2<br />
    830 Syntax: BUFFER_ATOMIC_CMPSWAP VDATA(2), VADDR, SRSRC, SOFFSET<br />
     830Syntax: BUFFER_ATOMIC_CMPSWAP VDATA(2), VADDR(1:2), SRSRC(4), SOFFSET<br />
    831831Description: Store lower VDATA dword into SRSRC resource if previous value
    832832from resource is equal VDATA&gt;&gt;32, otherwise keep old value from resource.
     
    834834otherwise keep VDATA value. Operation is atomic.<br />
    835835Operation:<br />
    836 <code>UINT32* VM = (UINT32*)VMEM(SRSRC, VADDR, SOFFSET, OFFSET)
     836<code>UINT32* VM = (UINT32*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET)
    837837UINT32 P = *VM; *VM = *VM==(VDATA&gt;&gt;32) ? VDATA&amp;0xffffffff : *VM // part of atomic
    838838VDATA[0] = (GLC) ? P : VDATA[0] // last part of atomic</code></p>
    839839<h4>BUFFER_ATOMIC_CMPSWAP_X2</h4>
    840840<p>Opcode: 81 (0x51) for GCN 1.0/1.1; 97 (0x61) for GCN 1.2<br />
    841 Syntax: BUFFER_ATOMIC_CMPSWAP_X2 VDATA(4), VADDR, SRSRC, SOFFSET<br />
     841Syntax: BUFFER_ATOMIC_CMPSWAP_X2 VDATA(4), VADDR(1:2), SRSRC(4), SOFFSET<br />
    842842Description: Store lower VDATA 64-bit word into SRSRC resource if previous value
    843843from resource is equal VDATA&gt;&gt;64, otherwise keep old value from resource.
     
    845845otherwise keep VDATA value. Operation is atomic.<br />
    846846Operation:<br />
    847 <code>UINT64* VM = (UINT64*)VMEM(SRSRC, VADDR, SOFFSET, OFFSET)
     847<code>UINT64* VM = (UINT64*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET)
    848848UINT64 P = *VM; *VM = *VM==(VDATA[2:3]) ? VDATA[0:1] : *VM // part of atomic
    849849VDATA[0:1] = (GLC) ? P : VDATA[0:1] // last part of atomic</code></p>
    850850<h4>BUFFER_ATOMIC_DEC</h4>
    851851<p>Opcode: 61 (0x3d) for GCN 1.0/1.1; 76 (0x4c) for GCN 1.2<br />
    852 Syntax: BUFFER_ATOMIC_DEC VDATA, VADDR, SRSRC, SOFFSET<br />
     852Syntax: BUFFER_ATOMIC_DEC VDATA, VADDR(1:2), SRSRC(4), SOFFSET<br />
    853853Description: Compare value from SRSRC resource and if less or equal than VDATA
    854854and this value is not zero, then decrement value from resource,
     
    856856from resource to VDATA, otherwise keep VDATA value. Operation is atomic.<br />
    857857Operation:<br />
    858 <code>UINT32* VM = (UINT32*)VMEM(SRSRC, VADDR, SOFFSET, OFFSET)
     858<code>UINT32* VM = (UINT32*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET)
    859859UINT32 P = *VM; *VM = (*VM &lt;= VDATA &amp;&amp; *VM!=0) ? *VM-1 : VDATA // atomic
    860860VDATA = (GLC) ? P : VDATA // atomic</code></p>
    861861<h4>BUFFER_ATOMIC_DEC_X2</h4>
    862862<p>Opcode: 93 (0x5d) for GCN 1.0/1.1; 108 (0x6c) for GCN 1.2<br />
    863 Syntax: BUFFER_ATOMIC_DEC_X2 VDATA(2), VADDR, SRSRC, SOFFSET<br />
     863Syntax: BUFFER_ATOMIC_DEC_X2 VDATA(2), VADDR(1:2), SRSRC(4), SOFFSET<br />
    864864Description: Compare 64-bit value from SRSRC resource and if less or equal than VDATA
    865865and this value is not zero, then decrement value from resource,
     
    867867from resource to VDATA, otherwise keep VDATA value. Operation is atomic.<br />
    868868Operation:<br />
    869 <code>UINT64* VM = (UINT64*)VMEM(SRSRC, VADDR, SOFFSET, OFFSET)
     869<code>UINT64* VM = (UINT64*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET)
    870870UINT64 P = *VM; *VM = (*VM &lt;= VDATA &amp;&amp; *VM!=0) ? *VM-1 : VDATA // atomic
    871871VDATA = (GLC) ? P : VDATA // atomic</code></p>
    872872<h4>BUFFER_ATOMIC_FCMPSWAP</h4>
    873873<p>Opcode: 62 (0x3e) for GCN 1.0/1.1<br />
    874 Syntax: BUFFER_ATOMIC_FCMPSWAP VDATA(2), VADDR, SRSRC, SOFFSET<br />
     874Syntax: BUFFER_ATOMIC_FCMPSWAP VDATA(2), VADDR(1:2), SRSRC(4), SOFFSET<br />
    875875Description: Store lower VDATA dword into SRSRC resource if previous single floating point
    876876value from resource is equal singe floating point value VDATA&gt;&gt;32,
     
    879879otherwise keep VDATA value. Operation is atomic.<br />
    880880Operation:<br />
    881 <code>FLOAT* VM = (FLOAT*)VMEM(SRSRC, VADDR, SOFFSET, OFFSET)
     881<code>FLOAT* VM = (FLOAT*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET)
    882882FLOAT P = *VM; *VM = *VM==ASFLOAT(VDATA&gt;&gt;32) ? VDATA&amp;0xffffffff : *VM // part of atomic
    883883VDATA[0] = (GLC) ? P : VDATA[0] // last part of atomic</code></p>
    884884<h4>BUFFER_ATOMIC_FCMPSWAP_X2</h4>
    885885<p>Opcode: 94 (0x5e) for GCN 1.0/1.1<br />
    886 Syntax: BUFFER_ATOMIC_FCMPSWAP_X2 VDATA(4), VADDR, SRSRC, SOFFSET<br />
     886Syntax: BUFFER_ATOMIC_FCMPSWAP_X2 VDATA(4), VADDR(1:2), SRSRC(4), SOFFSET<br />
    887887Description: Store lower VDATA 64-bit word into SRSRC resource if previous double
    888888floating point value from resource is equal singe floating point value VDATA&gt;&gt;32,
     
    891891VDATA value. Operation is atomic.<br />
    892892Operation:<br />
    893 <code>DOUBLE* VM = (DOUBLE*)VMEM(SRSRC, VADDR, SOFFSET, OFFSET)
     893<code>DOUBLE* VM = (DOUBLE*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET)
    894894DOUBLE P = *VM; *VM = *VM==ASDOUBLE(VDATA[2:3]) ? VDATA[0:1] : *VM // part of atomic
    895895VDATA[0:1] = (GLC) ? P : VDATA[0:1] // last part of atomic</code></p>
    896896<h4>BUFFER_ATOMIC_FMAX</h4>
    897897<p>Opcode: 64 (0x40) for GCN 1.0/1.1<br />
    898 Syntax: BUFFER_ATOMIC_FMAX VDATA, VADDR, SRSRC, SOFFSET<br />
     898Syntax: BUFFER_ATOMIC_FMAX VDATA, VADDR(1:2), SRSRC(4), SOFFSET<br />
    899899Description: Choose greatest single floating point value from VDATA and from
    900900SRSRC resource, and store result to this resource.
     
    902902VDATA value. Operation is atomic.<br />
    903903Operation:<br />
    904 <code>FLOAT* VM = (FLOAT*)VMEM(SRSRC, VADDR, SOFFSET, OFFSET)
     904<code>FLOAT* VM = (FLOAT*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET)
    905905UINT32 P = *VM; *VM = MAX(*VM, ASFLOAT(VDATA)); VDATA = (GLC) ? P : VDATA // atomic</code></p>
    906906<h4>BUFFER_ATOMIC_FMAX_X2</h4>
    907907<p>Opcode: 96 (0x60) for GCN 1.0/1.1<br />
    908 Syntax: BUFFER_ATOMIC_FMAX_X2 VDATA(2), VADDR, SRSRC, SOFFSET<br />
     908Syntax: BUFFER_ATOMIC_FMAX_X2 VDATA(2), VADDR(1:2), SRSRC(4), SOFFSET<br />
    909909Description: Choose greatest double floating point value from VDATA and from
    910910SRSRC resource, and store result to this resource.
     
    912912otherwise keep VDATA value. Operation is atomic.<br />
    913913Operation:<br />
    914 <code>DOUBLE* VM = (DOUBLE*)VMEM(SRSRC, VADDR, SOFFSET, OFFSET)
     914<code>DOUBLE* VM = (DOUBLE*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET)
    915915UINT64 P = *VM; *VM = MAX(*VM, ASDOUBLE(VDATA)); VDATA = (GLC) ? P : VDATA // atomic</code></p>
    916916<h4>BUFFER_ATOMIC_FMIN</h4>
    917917<p>Opcode: 63 (0x3f) for GCN 1.0/1.1<br />
    918 Syntax: BUFFER_ATOMIC_FMIN VDATA, VADDR, SRSRC, SOFFSET<br />
     918Syntax: BUFFER_ATOMIC_FMIN VDATA, VADDR(1:2), SRSRC(4), SOFFSET<br />
    919919Description: Choose smallest single floating point value from VDATA and from
    920920SRSRC resource, and store result to this resource.
     
    922922VDATA value. Operation is atomic.<br />
    923923Operation:<br />
    924 <code>FLOAT* VM = (FLOAT*)VMEM(SRSRC, VADDR, SOFFSET, OFFSET)
     924<code>FLOAT* VM = (FLOAT*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET)
    925925UINT32 P = *VM; *VM = MIN(*VM, ASFLOAT(VDATA)); VDATA = (GLC) ? P : VDATA // atomic</code></p>
    926926<h4>BUFFER_ATOMIC_FMIN_X2</h4>
    927927<p>Opcode: 95 (0x5f) for GCN 1.0/1.1<br />
    928 Syntax: BUFFER_ATOMIC_FMIN_X2 VDATA(2), VADDR, SRSRC, SOFFSET<br />
     928Syntax: BUFFER_ATOMIC_FMIN_X2 VDATA(2), VADDR(1:2), SRSRC(4), SOFFSET<br />
    929929Description: Choose smallest double floating point value from VDATA and from
    930930SRSRC resource, and store result to this resource.
     
    932932VDATA value. Operation is atomic.<br />
    933933Operation:<br />
    934 <code>DOUBLE* VM = (DOUBLE*)VMEM(SRSRC, VADDR, SOFFSET, OFFSET)
     934<code>DOUBLE* VM = (DOUBLE*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET)
    935935UINT64 P = *VM; *VM = MIN(*VM, ASDOUBLE(VDATA)); VDATA = (GLC) ? P : VDATA // atomic</code></p>
    936936<h4>BUFFER_ATOMIC_INC</h4>
    937937<p>Opcode: 60 (0x3c) for GCN 1.0/1.1; 75 (0x4b) for GCN 1.2<br />
    938 Syntax: BUFFER_ATOMIC_INC VDATA, VADDR, SRSRC, SOFFSET<br />
     938Syntax: BUFFER_ATOMIC_INC VDATA, VADDR(1:2), SRSRC(4), SOFFSET<br />
    939939Description: Compare value from SRSRC resource and if less than VDATA,
    940940then increment value from resource, otherwise store zero to resource.
     
    942942otherwise keep VDATA value. Operation is atomic.<br />
    943943Operation:<br />
    944 <code>UINT32* VM = (UINT32*)VMEM(SRSRC, VADDR, SOFFSET, OFFSET)
     944<code>UINT32* VM = (UINT32*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET)
    945945UINT32 P = *VM; *VM = (*VM &lt; VDATA) ? *VM+1 : 0; VDATA = (GLC) ? P : VDATA // atomic</code></p>
    946946<h4>BUFFER_ATOMIC_INC_X2</h4>
    947947<p>Opcode: 92 (0x5c) for GCN 1.0/1.1; 107 (0x9b) for GCN 1.2<br />
    948 Syntax: BUFFER_ATOMIC_INC_X2 VDATA(2), VADDR, SRSRC, SOFFSET<br />
     948Syntax: BUFFER_ATOMIC_INC_X2 VDATA(2), VADDR(1:2), SRSRC(4), SOFFSET<br />
    949949Description: Compare 64-bit value from SRSRC resource and if less than VDATA,
    950950then increment value from resource, otherwise store zero to resource.
     
    952952otherwise keep VDATA value. Operation is atomic.<br />
    953953Operation:<br />
    954 <code>UINT64* VM = (UINT64*)VMEM(SRSRC, VADDR, SOFFSET, OFFSET)
     954<code>UINT64* VM = (UINT64*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET)
    955955UINT64 P = *VM; *VM = (*VM &lt; VDATA) ? *VM+1 : 0; VDATA = (GLC) ? P : VDATA // atomic</code></p>
    956956<h4>BUFFER_ATOMIC_OR</h4>
    957957<p>Opcode: 58 (0x3a) for GCN 1.0/1.1; 73 (0x49) for GCN 1.2<br />
    958 Syntax: BUFFER_ATOMIC_OR VDATA, VADDR, SRSRC, SOFFSET<br />
     958Syntax: BUFFER_ATOMIC_OR VDATA, VADDR(1:2), SRSRC(4), SOFFSET<br />
    959959Description: Do bitwise OR on VDATA and value of SRSRC resource,
    960960and store result to this resource. If GLC flag is set then return previous value
    961961from resource to VDATA, otherwise keep VDATA value. Operation is atomic.<br />
    962962Operation:<br />
    963 <code>UINT32* VM = (UINT32*)VMEM(SRSRC, VADDR, SOFFSET, OFFSET)
     963<code>UINT32* VM = (UINT32*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET)
    964964UINT32 P = *VM; *VM = *VM | VDATA; VDATA = (GLC) ? P : VDATA // atomic</code></p>
    965965<h4>BUFFER_ATOMIC_OR_X2</h4>
    966966<p>Opcode: 90 (0x5a) for GCN 1.0/1.1; 105 (0x69) for GCN 1.2<br />
    967 Syntax: BUFFER_ATOMIC_OR_X2 VDATA(2), VADDR, SRSRC, SOFFSET<br />
     967Syntax: BUFFER_ATOMIC_OR_X2 VDATA(2), VADDR(1:2), SRSRC(4), SOFFSET<br />
    968968Description: Do 64-bit bitwise OR on VDATA and value of SRSRC resource,
    969969and store result to this resource. If GLC flag is set then return previous value
    970970from resource to VDATA, otherwise keep VDATA value. Operation is atomic.<br />
    971971Operation:<br />
    972 <code>UINT64* VM = (UINT64*)VMEM(SRSRC, VADDR, SOFFSET, OFFSET)
     972<code>UINT64* VM = (UINT64*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET)
    973973UINT64 P = *VM; *VM = *VM | VDATA; VDATA = (GLC) ? P : VDATA // atomic</code></p>
    974974<h4>BUFFER_ATOMIC_RSUB</h4>
    975975<p>Opcode: 52 (0x34) for GCN 1.0<br />
    976 Syntax: BUFFER_ATOMIC_RSUB VDATA, VADDR, SRSRC, SOFFSET<br />
     976Syntax: BUFFER_ATOMIC_RSUB VDATA, VADDR(1:2), SRSRC(4), SOFFSET<br />
    977977Description: Subtract value of SRSRC resource from VDATA, and store result to
    978978this resource. If GLC flag is set then return previous value from resource to VDATA,
    979979otherwise keep VDATA value. Operation is atomic.<br />
    980980Operation:<br />
    981 <code>UINT32* VM = (UINT32*)VMEM(SRSRC, VADDR, SOFFSET, OFFSET)
     981<code>UINT32* VM = (UINT32*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET)
    982982UINT32 P = *VM; *VM = VDATA - *VM; VDATA = (GLC) ? P : VDATA // atomic</code></p>
    983983<h4>BUFFER_ATOMIC_RSUB_X2</h4>
    984984<p>Opcode: 84 (0x54) for GCN 1.0<br />
    985 Syntax: BUFFER_ATOMIC_RSUB_X2 VDATA(2), VADDR, SRSRC, SOFFSET<br />
     985Syntax: BUFFER_ATOMIC_RSUB_X2 VDATA(2), VADDR(1:2), SRSRC(4), SOFFSET<br />
    986986Description: Subtract 64-bit value of SRSRC resource from 64-bit VDATA, and store result
    987987to this resource. If GLC flag is set then return previous value from resource to VDATA,
    988988otherwise keep VDATA value. Operation is atomic.<br />
    989989Operation:<br />
    990 <code>UINT64* VM = (UINT64*)VMEM(SRSRC, VADDR, SOFFSET, OFFSET)
     990<code>UINT64* VM = (UINT64*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET)
    991991UINT64 P = *VM; *VM = VDATA - *VM; VDATA = (GLC) ? P : VDATA // atomic</code></p>
    992992<h4>BUFFER_ATOMIC_SMAX</h4>
    993993<p>Opcode: 55 (0x37) for GCN 1.0/1.1; 70 (0x46) for GCN 1.2<br />
    994 Syntax: BUFFER_ATOMIC_SMAX VDATA, VADDR, SRSRC, SOFFSET<br />
     994Syntax: BUFFER_ATOMIC_SMAX VDATA, VADDR(1:2), SRSRC(4), SOFFSET<br />
    995995Description: Choose greatest signed 32-bit value from VDATA and from SRSRC resource,
    996996and store result to this resource.
     
    998998VDATA value. Operation is atomic.<br />
    999999Operation:<br />
    1000 <code>INT32* VM = (INT32*)VMEM(SRSRC, VADDR, SOFFSET, OFFSET)
     1000<code>INT32* VM = (INT32*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET)
    10011001UINT32 P = *VM; *VM = MAX(*VM, (INT32)VDATA); VDATA = (GLC) ? P : VDATA // atomic</code></p>
    10021002<h4>BUFFER_ATOMIC_SMAX_X2</h4>
    10031003<p>Opcode: 87 (0x57) for GCN 1.0/1.1; 102 (0x66) for GCN 1.2<br />
    1004 Syntax: BUFFER_ATOMIC_SMAX_X2 VDATA(2), VADDR, SRSRC, SOFFSET<br />
     1004Syntax: BUFFER_ATOMIC_SMAX_X2 VDATA(2), VADDR(1:2), SRSRC(4), SOFFSET<br />
    10051005Description: Choose greatest signed 64-bit value from VDATA and from SRSRC resource,
    10061006and store result to this resource.
     
    10081008VDATA value. Operation is atomic.<br />
    10091009Operation:<br />
    1010 <code>INT64* VM = (INT64*)VMEM(SRSRC, VADDR, SOFFSET, OFFSET)
     1010<code>INT64* VM = (INT64*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET)
    10111011UINT64 P = *VM; *VM = MAX(*VM, (INT64)VDATA); VDATA = (GLC) ? P : VDATA // atomic</code></p>
    10121012<h4>BUFFER_ATOMIC_SMIN</h4>
    10131013<p>Opcode: 53 (0x35) for GCN 1.0/1.1; 68 (0x44) for GCN 1.2<br />
    1014 Syntax: BUFFER_ATOMIC_SMIN VDATA, VADDR, SRSRC, SOFFSET<br />
     1014Syntax: BUFFER_ATOMIC_SMIN VDATA, VADDR(1:2), SRSRC(4), SOFFSET<br />
    10151015Description: Choose smallest signed 32-bit value from VDATA and from SRSRC resource,
    10161016and store result to this resource.
     
    10181018VDATA value. Operation is atomic.<br />
    10191019Operation:<br />
    1020 <code>INT32* VM = (INT32*)VMEM(SRSRC, VADDR, SOFFSET, OFFSET)
     1020<code>INT32* VM = (INT32*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET)
    10211021UINT32 P = *VM; *VM = MIN(*VM, (INT32)VDATA); VDATA = (GLC) ? P : VDATA // atomic</code></p>
    10221022<h4>BUFFER_ATOMIC_SMIN_X2</h4>
    10231023<p>Opcode: 85 (0x55) for GCN 1.0/1.1; 100 (0x64) for GCN 1.2<br />
    1024 Syntax: BUFFER_ATOMIC_SMIN_X2 VDATA(2), VADDR, SRSRC, SOFFSET<br />
     1024Syntax: BUFFER_ATOMIC_SMIN_X2 VDATA(2), VADDR(1:2), SRSRC(4), SOFFSET<br />
    10251025Description: Choose smallest signed 64-bit value from VDATA and from SRSRC resource,
    10261026and store result to this resource.
     
    10281028VDATA value. Operation is atomic.<br />
    10291029Operation:<br />
    1030 <code>INT64* VM = (INT64*)VMEM(SRSRC, VADDR, SOFFSET, OFFSET)
     1030<code>INT64* VM = (INT64*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET)
    10311031UINT64 P = *VM; *VM = MIN(*VM, (INT64)VDATA); VDATA = (GLC) ? P : VDATA // atomic</code></p>
    10321032<h4>BUFFER_ATOMIC_SUB</h4>
    10331033<p>Opcode: 51 (0x33) for GCN 1.0/1.1; 67 (0x43) for GCN 1.2<br />
    1034 Syntax: BUFFER_ATOMIC_SUB VDATA, VADDR, SRSRC, SOFFSET<br />
     1034Syntax: BUFFER_ATOMIC_SUB VDATA, VADDR(1:2), SRSRC(4), SOFFSET<br />
    10351035Description: Subtract VDATA from value from SRSRC resource, and store result to
    10361036this resource. If GLC flag is set then return previous value from resource to VDATA,
    10371037otherwise keep VDATA value. Operation is atomic.<br />
    10381038Operation:<br />
    1039 <code>UINT32* VM = (UINT32*)VMEM(SRSRC, VADDR, SOFFSET, OFFSET)
     1039<code>UINT32* VM = (UINT32*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET)
    10401040UINT32 P = *VM; *VM = *VM - VDATA; VDATA = (GLC) ? P : VDATA // atomic</code></p>
    10411041<h4>BUFFER_ATOMIC_SUB_X2</h4>
    10421042<p>Opcode: 83 (0x53) for GCN 1.0/1.1; 99 (0x63) for GCN 1.2<br />
    1043 Syntax: BUFFER_ATOMIC_SUB_X2 VDATA(2), VADDR, SRSRC, SOFFSET<br />
     1043Syntax: BUFFER_ATOMIC_SUB_X2 VDATA(2), VADDR(1:2), SRSRC(4), SOFFSET<br />
    10441044Description: Subtract 64-bit VDATA from 64-bit value from SRSRC resource, and store
    10451045result to this resource. If GLC flag is set then return previous value from resource to
    10461046VDATA, otherwise keep VDATA value. Operation is atomic.<br />
    10471047Operation:<br />
    1048 <code>UINT64* VM = (UINT64*)VMEM(SRSRC, VADDR, SOFFSET, OFFSET)
     1048<code>UINT64* VM = (UINT64*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET)
    10491049UINT64 P = *VM; *VM = *VM - VDATA; VDATA = (GLC) ? P : VDATA // atomic</code></p>
    10501050<h4>BUFFER_ATOMIC_SWAP</h4>
    10511051<p>Opcode: 48 (0x30) for GCN 1.0/1.1; 64 (0x40) for GCN 1.2<br />
    1052 Syntax: BUFFER_ATOMIC_SWAP VDATA, VADDR, SRSRC, SOFFSET<br />
     1052Syntax: BUFFER_ATOMIC_SWAP VDATA, VADDR(1:2), SRSRC(4), SOFFSET<br />
    10531053Description: Store VDATA dword into SRSRC resource. If GLC flag is set then
    10541054return previous value from resource to VDATA, otherwise keep VDATA value.
    10551055Operation is atomic.<br />
    10561056Operation:<br />
    1057 <code>UINT32* VM = (UINT32*)VMEM(SRSRC, VADDR, SOFFSET, OFFSET)
     1057<code>UINT32* VM = (UINT32*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET)
    10581058UINT32 P = *VM; *VM = VDATA; VDATA = (GLC) ? P : VDATA // atomic</code></p>
    10591059<h4>BUFFER_ATOMIC_SWAP_X2</h4>
    10601060<p>Opcode: 80 (0x50) for GCN 1.0/1.1; 96 (0x60) for GCN 1.2<br />
    1061 Syntax: BUFFER_ATOMIC_SWAP_X2 VDATA(2), VADDR, SRSRC, SOFFSET<br />
     1061Syntax: BUFFER_ATOMIC_SWAP_X2 VDATA(2), VADDR(1:2), SRSRC(4), SOFFSET<br />
    10621062Description: Store VDATA 64-bit word into SRSRC resource. If GLC flag is set then
    10631063return previous value from resource to VDATA, otherwise keep VDATA value.
    10641064Operation is atomic.<br />
    10651065Operation:<br />
    1066 <code>UINT64* VM = (UINT64*)VMEM(SRSRC, VADDR, SOFFSET, OFFSET)
     1066<code>UINT64* VM = (UINT64*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET)
    10671067UINT64 P = *VM; *VM = VDATA; VDATA = (GLC) ? P : VDATA // atomic</code></p>
    10681068<h4>BUFFER_ATOMIC_UMAX</h4>
    10691069<p>Opcode: 56 (0x38) for GCN 1.0/1.1; 71 (0x47) for GCN 1.2<br />
    1070 Syntax: BUFFER_ATOMIC_UMAX VDATA, VADDR, SRSRC, SOFFSET<br />
     1070Syntax: BUFFER_ATOMIC_UMAX VDATA, VADDR(1:2), SRSRC(4), SOFFSET<br />
    10711071Description: Choose greatest unsigned 32-bit value from VDATA and from SRSRC resource,
    10721072and store result to this resource.
     
    10741074keep VDATA value. Operation is atomic.<br />
    10751075Operation:<br />
    1076 <code>UINT32* VM = (UINT32*)VMEM(SRSRC, VADDR, SOFFSET, OFFSET)
     1076<code>UINT32* VM = (UINT32*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET)
    10771077UINT32 P = *VM; *VM = MAX(*VM, VDATA); VDATA = (GLC) ? P : VDATA // atomic</code></p>
    10781078<h4>BUFFER_ATOMIC_UMAX_X2</h4>
    10791079<p>Opcode: 88 (0x58) for GCN 1.0/1.1; 103 (0x67) for GCN 1.2<br />
    1080 Syntax: BUFFER_ATOMIC_UMAX_X2 VDATA(2), VADDR, SRSRC, SOFFSET<br />
     1080Syntax: BUFFER_ATOMIC_UMAX_X2 VDATA(2), VADDR(1:2), SRSRC(4), SOFFSET<br />
    10811081Description: Choose greatest unsigned 64-bit value from VDATA and from SRSRC resource,
    10821082and store result to this resource.
     
    10841084VDATA value. Operation is atomic.<br />
    10851085Operation:<br />
    1086 <code>UINT64* VM = (UINT32*)VMEM(SRSRC, VADDR, SOFFSET, OFFSET)
     1086<code>UINT64* VM = (UINT32*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET)
    10871087UINT64 P = *VM; *VM = MAX(*VM, VDATA); VDATA = (GLC) ? P : VDATA // atomic</code></p>
    10881088<h4>BUFFER_ATOMIC_UMIN</h4>
    10891089<p>Opcode: 54 (0x36) for GCN 1.0/1.1; 69 (0x45) for GCN 1.2<br />
    1090 Syntax: BUFFER_ATOMIC_UMIN VDATA, VADDR, SRSRC, SOFFSET<br />
     1090Syntax: BUFFER_ATOMIC_UMIN VDATA, VADDR(1:2), SRSRC(4), SOFFSET<br />
    10911091Description: Choose smallest unsigned 32-bit value from VDATA and from SRSRC resource,
    10921092and store result to this resource.
     
    10941094VDATA value. Operation is atomic.<br />
    10951095Operation:<br />
    1096 <code>UINT32* VM = (UINT32*)VMEM(SRSRC, VADDR, SOFFSET, OFFSET)
     1096<code>UINT32* VM = (UINT32*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET)
    10971097UINT32 P = *VM; *VM = MIN(*VM, VDATA); VDATA = (GLC) ? P : VDATA // atomic</code></p>
    10981098<h4>BUFFER_ATOMIC_UMIN_X2</h4>
    10991099<p>Opcode: 86 (0x56) for GCN 1.0/1.1; 101 (0x65) for GCN 1.2<br />
    1100 Syntax: BUFFER_ATOMIC_UMIN_X2 VDATA(2), VADDR, SRSRC, SOFFSET<br />
     1100Syntax: BUFFER_ATOMIC_UMIN_X2 VDATA(2), VADDR(1:2), SRSRC(4), SOFFSET<br />
    11011101Description: Choose smallest unsigned 64-bit value from VDATA and from SRSRC resource,
    11021102and store result to this resource.
     
    11041104VDATA value. Operation is atomic.<br />
    11051105Operation:<br />
    1106 <code>UINT64* VM = (UINT64*)VMEM(SRSRC, VADDR, SOFFSET, OFFSET)
     1106<code>UINT64* VM = (UINT64*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET)
    11071107UINT64 P = *VM; *VM = MIN(*VM, VDATA); VDATA = (GLC) ? P : VDATA // atomic</code></p>
    11081108<h4>BUFFER_ATOMIC_XOR</h4>
    11091109<p>Opcode: 59 (0x3b) for GCN 1.0/1.1; 74 (0x4a) for GCN 1.2<br />
    1110 Syntax: BUFFER_ATOMIC_XOR VDATA, VADDR, SRSRC, SOFFSET<br />
     1110Syntax: BUFFER_ATOMIC_XOR VDATA, VADDR(1:2), SRSRC(4), SOFFSET<br />
    11111111Description: Do bitwise XOR on VDATA and value of SRSRC resource,
    11121112and store result to this resource. If GLC flag is set then return previous value
    11131113from resource to VDATA, otherwise keep VDATA value. Operation is atomic.<br />
    11141114Operation:<br />
    1115 <code>UINT32* VM = (UINT32*)VMEM(SRSRC, VADDR, SOFFSET, OFFSET)
     1115<code>UINT32* VM = (UINT32*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET)
    11161116UINT32 P = *VM; *VM = *VM ^ VDATA; VDATA = (GLC) ? P : VDATA // atomic</code></p>
    11171117<h4>BUFFER_ATOMIC_XOR_X2</h4>
    11181118<p>Opcode: 91 (0x5b) for GCN 1.0/1.1; 106 (0x6a) for GCN 1.2<br />
    1119 Syntax: BUFFER_ATOMIC_XOR_X2 VDATA(2), VADDR, SRSRC, SOFFSET<br />
     1119Syntax: BUFFER_ATOMIC_XOR_X2 VDATA(2), VADDR(1:2), SRSRC(4), SOFFSET<br />
    11201120Description: Do 64-bit bitwise XOR on VDATA and value of SRSRC resource,
    11211121and store result to this resource. If GLC flag is set then return previous value
    11221122from resource to VDATA, otherwise keep VDATA value. Operation is atomic.<br />
    11231123Operation:<br />
    1124 <code>UINT64* VM = (UINT64*)VMEM(SRSRC, VADDR, SOFFSET, OFFSET)
     1124<code>UINT64* VM = (UINT64*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET)
    11251125UINT64 P = *VM; *VM = *VM ^ VDATA; VDATA = (GLC) ? P : VDATA // atomic</code></p>
    11261126<h4>BUFFER_LOAD_DWORD</h4>
    11271127<p>Opcode: 12 (0xc) for GCN 1.0/1.1; 20 (0x14) for GCN 1.2<br />
    1128 Syntax: BUFFER_LOAD_DWORD VDATA, VADDR, SRSRC, SOFFSET<br />
     1128Syntax: BUFFER_LOAD_DWORD VDATA, VADDR(1:2), SRSRC(4), SOFFSET<br />
    11291129Description: Load dword to VDATA from SRSRC resource.<br />
    11301130Operation:<br />
    1131 <code>VDATA = *(UINT32*)VMEM(SRSRC, VADDR, SOFFSET, OFFSET)</code></p>
     1131<code>VDATA = *(UINT32*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET)</code></p>
    11321132<h4>BUFFER_LOAD_DWORDX2</h4>
    11331133<p>Opcode: 13 (0xd) for GCN 1.0/1.1; 21 (0x15) for GCN 1.2<br />
    1134 Syntax: BUFFER_LOAD_DWORDX2 VDATA(2), VADDR, SRSRC, SOFFSET<br />
     1134Syntax: BUFFER_LOAD_DWORDX2 VDATA(2), VADDR(1:2), SRSRC(4), SOFFSET<br />
    11351135Description: Load two dwords to VDATA from SRSRC resource.<br />
    11361136Operation:<br />
    1137 <code>UINT32* VM = *(UINT32*)VMEM(SRSRC, VADDR, SOFFSET, OFFSET)
     1137<code>UINT32* VM = *(UINT32*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET)
    11381138VDATA[0] = VM[0]
    11391139VDATA[1] = VM[1]</code></p>
    11401140<h4>BUFFER_LOAD_DWORDX3</h4>
    11411141<p>Opcode: 15 (0xf) for GCN 1.1; 22 (0x16) for GCN 1.2<br />
    1142 Syntax: BUFFER_LOAD_DWORDX3 VDATA(3), VADDR, SRSRC, SOFFSET<br />
     1142Syntax: BUFFER_LOAD_DWORDX3 VDATA(3), VADDR(1:2), SRSRC(4), SOFFSET<br />
    11431143Description: Load three dwords to VDATA from SRSRC resource.<br />
    11441144Operation:<br />
    1145 <code>UINT32* VM = *(UINT32*)VMEM(SRSRC, VADDR, SOFFSET, OFFSET)
     1145<code>UINT32* VM = *(UINT32*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET)
    11461146VDATA[0] = VM[0]
    11471147VDATA[1] = VM[1]
     
    11491149<h4>BUFFER_LOAD_DWORDX4</h4>
    11501150<p>Opcode: 14 (0xe) for GCN 1.0/1.1; 23 (0x17) for GCN 1.2<br />
    1151 Syntax: BUFFER_LOAD_DWORDX4 VDATA(4), VADDR, SRSRC, SOFFSET<br />
     1151Syntax: BUFFER_LOAD_DWORDX4 VDATA(4), VADDR(1:2), SRSRC(4), SOFFSET<br />
    11521152Description: Load four dwords to VDATA from SRSRC resource.<br />
    11531153Operation:<br />
    1154 <code>UINT32* VM = *(UINT32*)VMEM(SRSRC, VADDR, SOFFSET, OFFSET)
     1154<code>UINT32* VM = *(UINT32*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET)
    11551155VDATA[0] = VM[0]
    11561156VDATA[1] = VM[1]
     
    11591159<h4>BUFFER_LOAD_FORMAT_X</h4>
    11601160<p>Opcode: 0 (0x0)<br />
    1161 Syntax: BUFFER_LOAD_FORMAT_X VDATA, VADDR, SRSRC, SOFFSET<br />
     1161Syntax: BUFFER_LOAD_FORMAT_X VDATA, VADDR(1:2), SRSRC(4), SOFFSET<br />
    11621162Description: Load the first component of the element from SRSRC including format from
    11631163buffer resource.<br />
    11641164Operation:<br />
    1165 <code>VDATA = LOAD_FORMAT_X(SRSRC, VADDR, SOFFSET, OFFSET)</code></p>
     1165<code>VDATA = LOAD_FORMAT_X(SRSRC, VADDR(1:2), SOFFSET, OFFSET)</code></p>
    11661166<h4>BUFFER_LOAD_FORMAT_XY</h4>
    11671167<p>Opcode: 1 (0x1)<br />
    1168 Syntax: BUFFER_LOAD_FORMAT_XY VDATA(2), VADDR, SRSRC, SOFFSET<br />
     1168Syntax: BUFFER_LOAD_FORMAT_XY VDATA(2), VADDR(1:2), SRSRC(4), SOFFSET<br />
    11691169Description: Load the first two components of the element from SRSRC resource
    11701170including format from SRSRC.<br />
    11711171Operation:<br />
    1172 <code>VDATA[0] = LOAD_FORMAT_XY(SRSRC, VADDR, SOFFSET, OFFSET)</code></p>
     1172<code>VDATA[0] = LOAD_FORMAT_XY(SRSRC, VADDR(1:2), SOFFSET, OFFSET)</code></p>
    11731173<h4>BUFFER_LOAD_FORMAT_XYZ</h4>
    11741174<p>Opcode: 2 (0x2)<br />
    1175 Syntax: BUFFER_LOAD_FORMAT_XYZ VDATA(3), VADDR, SRSRC, SOFFSET<br />
     1175Syntax: BUFFER_LOAD_FORMAT_XYZ VDATA(3), VADDR(1:2), SRSRC(4), SOFFSET<br />
    11761176Description: Load the first three components of the element from SRSRC resource
    11771177including format from SRSRC.<br />
    11781178Operation:<br />
    1179 <code>VDATA[0] = LOAD_FORMAT_XYZ(SRSRC, VADDR, SOFFSET, OFFSET)</code></p>
     1179<code>VDATA[0] = LOAD_FORMAT_XYZ(SRSRC, VADDR(1:2), SOFFSET, OFFSET)</code></p>
    11801180<h4>BUFFER_LOAD_FORMAT_XYZW</h4>
    11811181<p>Opcode: 3 (0x3)<br />
    1182 Syntax: BUFFER_LOAD_FORMAT_XYZW VDATA(4), VADDR, SRSRC, SOFFSET<br />
     1182Syntax: BUFFER_LOAD_FORMAT_XYZW VDATA(4), VADDR(1:2), SRSRC(4), SOFFSET<br />
    11831183Description: Load the all four components of the element from SRSRC resource
    11841184including format from SRSRC.<br />
    11851185Operation:<br />
    1186 <code>VDATA[0] = LOAD_FORMAT_XYZW(SRSRC, VADDR, SOFFSET, OFFSET)</code></p>
     1186<code>VDATA[0] = LOAD_FORMAT_XYZW(SRSRC, VADDR(1:2), SOFFSET, OFFSET)</code></p>
    11871187<h4>BUFFER_LOAD_SBYTE</h4>
    11881188<p>Opcode: 9 (0x9) for GCN 1.0/1.1; 17 (0x11) for GCN 1.2<br />
    1189 Syntax: BUFFER_LOAD_SBYTE VDATA, VADDR, SRSRC, SOFFSET<br />
     1189Syntax: BUFFER_LOAD_SBYTE VDATA, VADDR(1:2), SRSRC(4), SOFFSET<br />
    11901190Description: Load byte to VDATA from SRSRC resource with sign extending.<br />
    11911191Operation:<br />
    1192 <code>VDATA = *(INT8*)VMEM(SRSRC, VADDR, SOFFSET, OFFSET)</code></p>
     1192<code>VDATA = *(INT8*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET)</code></p>
    11931193<h4>BUFFER_LOAD_SSHORT</h4>
    11941194<p>Opcode: 11 (0xb) for GCN 1.0/1.1; 19 (0x13) for GCN 1.2<br />
    1195 Syntax: BUFFER_LOAD_SSHORT VDATA, VADDR, SRSRC, SOFFSET<br />
     1195Syntax: BUFFER_LOAD_SSHORT VDATA, VADDR(1:2), SRSRC(4), SOFFSET<br />
    11961196Description: Load 16-bit word to VDATA from SRSRC resource with sign extending.<br />
    11971197Operation:<br />
    1198 <code>VDATA = *(INT16*)VMEM(SRSRC, VADDR, SOFFSET, OFFSET)</code></p>
     1198<code>VDATA = *(INT16*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET)</code></p>
    11991199<h4>BUFFER_LOAD_UBYTE</h4>
    12001200<p>Opcode: 8 (0x8) for GCN 1.0/1.1; 16 (0x10) for GCN 1.2<br />
    1201 Syntax: BUFFER_LOAD_UBYTE VDATA, VADDR, SRSRC, SOFFSET<br />
     1201Syntax: BUFFER_LOAD_UBYTE VDATA, VADDR(1:2), SRSRC(4), SOFFSET<br />
    12021202Description: Load byte to VDATA from SRSRC resource with zero extending.<br />
    12031203Operation:<br />
    1204 <code>VDATA = *(UINT8*)VMEM(SRSRC, VADDR, SOFFSET, OFFSET)</code></p>
     1204<code>VDATA = *(UINT8*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET)</code></p>
    12051205<h4>BUFFER_LOAD_USHORT</h4>
    12061206<p>Opcode: 10 (0xa) for GCN 1.0/1.1; 18 (0x12) for GCN 1.2<br />
    1207 Syntax: BUFFER_LOAD_USHORT VDATA, VADDR, SRSRC, SOFFSET<br />
     1207Syntax: BUFFER_LOAD_USHORT VDATA, VADDR(1:2), SRSRC(4), SOFFSET<br />
    12081208Description: Load 16-bit word to VDATA from SRSRC resource with zero extending.<br />
    12091209Operation:<br />
    1210 <code>VDATA = *(UINT16*)VMEM(SRSRC, VADDR, SOFFSET, OFFSET)</code></p>
     1210<code>VDATA = *(UINT16*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET)</code></p>
    12111211<h4>BUFFER_STORE_BYTE</h4>
    12121212<p>Opcode: 24 (0x18)<br />
    1213 Syntax: BUFFER_STORE_BYTE VDATA, VADDR, SRSRC, SOFFSET<br />
     1213Syntax: BUFFER_STORE_BYTE VDATA, VADDR(1:2), SRSRC(4), SOFFSET<br />
    12141214Description: Store byte from VDATA into SRSRC resource.<br />
    12151215Operation:<br />
    1216 <code>*(UINT8*)VMEM(SRSRC, VADDR, SOFFSET, OFFSET) = VDATA&amp;0xff</code></p>
     1216<code>*(UINT8*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET) = VDATA&amp;0xff</code></p>
    12171217<h4>BUFFER_STORE_DWORD</h4>
    12181218<p>Opcode: 28 (0x1c)<br />
    1219 Syntax: BUFFER_STORE_DWORD VDATA, VADDR, SRSRC, SOFFSET<br />
     1219Syntax: BUFFER_STORE_DWORD VDATA, VADDR(1:2), SRSRC(4), SOFFSET<br />
    12201220Description: Store dword from VDATA into SRSRC resource.<br />
    12211221Operation:<br />
    1222 <code>*(UINT32*)VMEM(SRSRC, VADDR, SOFFSET, OFFSET) = VDATA</code></p>
     1222<code>*(UINT32*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET) = VDATA</code></p>
    12231223<h4>BUFFER_STORE_DWORDX2</h4>
    12241224<p>Opcode: 29 (0x1d)<br />
    1225 Syntax: BUFFER_STORE_DWORDX2 VDATA(2), VADDR, SRSRC, SOFFSET<br />
     1225Syntax: BUFFER_STORE_DWORDX2 VDATA(2), VADDR(1:2), SRSRC(4), SOFFSET<br />
    12261226Description: Store two dwords from VDATA into SRSRC resource.<br />
    12271227Operation:<br />
    1228 <code>UINT32* VM = *(UINT32*)VMEM(SRSRC, VADDR, SOFFSET, OFFSET)
     1228<code>UINT32* VM = *(UINT32*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET)
    12291229VM[0] = VDATA[0]
    12301230VM[1] = VDATA[1]</code></p>
    12311231<h4>BUFFER_STORE_DWORDX3</h4>
    12321232<p>Opcode: 31 (0x1f) for GCN 1.1; 30 (0x1e) for GCN 1.2<br />
    1233 Syntax: BUFFER_STORE_DWORDX2 VDATA(3), VADDR, SRSRC, SOFFSET<br />
     1233Syntax: BUFFER_STORE_DWORDX2 VDATA(3), VADDR(1:2), SRSRC(4), SOFFSET<br />
    12341234Description: Store three dwords from VDATA into SRSRC resource.<br />
    12351235Operation:<br />
    1236 <code>UINT32* VM = *(UINT32*)VMEM(SRSRC, VADDR, SOFFSET, OFFSET)
     1236<code>UINT32* VM = *(UINT32*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET)
    12371237VM[0] = VDATA[0]
    12381238VM[1] = VDATA[1]
     
    12401240<h4>BUFFER_STORE_DWORDX4</h4>
    12411241<p>Opcode: 31 (0x1e) for GCN 1.1; 31 (0x1f) for GCN 1.2<br />
    1242 Syntax: BUFFER_STORE_DWORDX2 VDATA(4), VADDR, SRSRC, SOFFSET<br />
     1242Syntax: BUFFER_STORE_DWORDX2 VDATA(4), VADDR(1:2), SRSRC(4), SOFFSET<br />
    12431243Description: Store four dwords from VDATA into SRSRC resource.<br />
    12441244Operation:<br />
    1245 <code>UINT32* VM = *(UINT32*)VMEM(SRSRC, VADDR, SOFFSET, OFFSET)
     1245<code>UINT32* VM = *(UINT32*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET)
    12461246VM[0] = VDATA[0]
    12471247VM[1] = VDATA[1]
     
    12501250<h4>BUFFER_STORE_FORMAT_X</h4>
    12511251<p>Opcode: 4 (0x4)<br />
    1252 Syntax: BUFFER_STORE_FORMAT_X VDATA, VADDR, SRSRC, SOFFSET<br />
     1252Syntax: BUFFER_STORE_FORMAT_X VDATA, VADDR(1:2), SRSRC(4), SOFFSET<br />
    12531253Description: Store the first component of the element into SRSRC resource
    12541254including format from SRSRC.<br />
    12551255Operation:<br />
    1256 <code>STORE_FORMAT_X(SRSRC, VADDR, SOFFSET, OFFSET, VDATA)</code></p>
     1256<code>STORE_FORMAT_X(SRSRC, VADDR(1:2), SOFFSET, OFFSET, VDATA)</code></p>
    12571257<h4>BUFFER_STORE_FORMAT_XY</h4>
    12581258<p>Opcode: 5 (0x5)<br />
    1259 Syntax: BUFFER_STORE_FORMAT_XY VDATA(2), VADDR, SRSRC, SOFFSET<br />
     1259Syntax: BUFFER_STORE_FORMAT_XY VDATA(2), VADDR(1:2), SRSRC(4), SOFFSET<br />
    12601260Description: Store the first two components of the element into SRSRC resource
    12611261including format from SRSRC.<br />
    12621262Operation:<br />
    1263 <code>STORE_FORMAT_XY(SRSRC, VADDR, SOFFSET, OFFSET, VDATA)</code></p>
     1263<code>STORE_FORMAT_XY(SRSRC, VADDR(1:2), SOFFSET, OFFSET, VDATA)</code></p>
    12641264<h4>BUFFER_STORE_FORMAT_XYZ</h4>
    12651265<p>Opcode: 6 (0x6)<br />
    1266 Syntax: BUFFER_STORE_FORMAT_XYZ VDATA(3), VADDR, SRSRC, SOFFSET<br />
     1266Syntax: BUFFER_STORE_FORMAT_XYZ VDATA(3), VADDR(1:2), SRSRC(4), SOFFSET<br />
    12671267Description: Store the first three components of the element into SRSRC resource
    12681268including format from SRSRC.<br />
    12691269Operation:<br />
    1270 <code>STORE_FORMAT_XYZ(SRSRC, VADDR, SOFFSET, OFFSET, VDATA)</code></p>
     1270<code>STORE_FORMAT_XYZ(SRSRC, VADDR(1:2), SOFFSET, OFFSET, VDATA)</code></p>
    12711271<h4>BUFFER_STORE_FORMAT_XYZW</h4>
    12721272<p>Opcode: 7 (0x7)<br />
    1273 Syntax: BUFFER_STORE_FORMAT_XYZW VDATA(4), VADDR, SRSRC, SOFFSET<br />
     1273Syntax: BUFFER_STORE_FORMAT_XYZW VDATA(4), VADDR(1:2), SRSRC(4), SOFFSET<br />
    12741274Description: Store the all components of the element into SRSRC resource
    12751275including format from SRSRC.<br />
    12761276Operation:<br />
    1277 <code>STORE_FORMAT_XYZW(SRSRC, VADDR, SOFFSET, OFFSET, VDATA)</code></p>
     1277<code>STORE_FORMAT_XYZW(SRSRC, VADDR(1:2), SOFFSET, OFFSET, VDATA)</code></p>
    12781278<h4>BUFFER_STORE_SHORT</h4>
    12791279<p>Opcode: 26 (0x1a)<br />
    1280 Syntax: BUFFER_STORE_SHORT VDATA, VADDR, SRSRC, SOFFSET<br />
     1280Syntax: BUFFER_STORE_SHORT VDATA, VADDR(1:2), SRSRC(4), SOFFSET<br />
    12811281Description: Store 16-bit word from VDATA into SRSRC resource.<br />
    12821282Operation:<br />
    1283 <code>*(UINT16*)VMEM(SRSRC, VADDR, SOFFSET, OFFSET) = VDATA&amp;0xffff</code></p>
     1283<code>*(UINT16*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET) = VDATA&amp;0xffff</code></p>
    12841284}}}