Changes between Version 13 and Version 14 of GcnInstrsDs


Ignore:
Timestamp:
12/23/15 15:00:15 (8 years ago)
Author:
trac
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • GcnInstrsDs

    v13 v14  
    11771177Operation is atomic.<br />
    11781178Operation:<br />
    1179 <code>UINT16 A = (OFFSET&amp;0x8000) ? ADDR&amp;0x1fffc : ADDR&amp;~3
    1180 UINT16 B = A + ((OFFSET&amp;0x8000) ? \
     1179<code>UINT32 A = (OFFSET&amp;0x8000) ? ADDR&amp;0x1fffc : ADDR&amp;~3
     1180UINT32 B = A + ((OFFSET&amp;0x8000) ? \
    11811181            ((ADDR&gt;&gt;17) | ((ADDR&gt;&gt;16)&amp;0x8000)) : \
    11821182            ((OFFSET&amp;07fff) | (OFFSET&lt;&lt;1)&amp;0x8000)) * 4
     
    11901190Operation is atomic.<br />
    11911191Operation:<br />
    1192 <code>UINT16 A = (OFFSET&amp;0x8000) ? ADDR&amp;0x1fff8 : ADDR&amp;~7
    1193 UINT16 B = (A + ((OFFSET&amp;0x8000) ? \
     1192<code>UINT32 A = (OFFSET&amp;0x8000) ? ADDR&amp;0x1fff8 : ADDR&amp;~7
     1193UINT32 B = (A + ((OFFSET&amp;0x8000) ? \
    11941194            ((ADDR&gt;&gt;17) | ((ADDR&gt;&gt;16)&amp;0x8000)) : \
    11951195            ((OFFSET&amp;07fff) | (OFFSET&lt;&lt;1)&amp;0x8000)) * 4)&amp;~7
     
    12541254A, and at address B; and store result to LDS/GDS at address A. Operation is atomic.<br />
    12551255Operation:<br />
    1256 <code>UINT16 A = (OFFSET&amp;0x8000) ? ADDR&amp;0x1fffc : ADDR&amp;~3
    1257 UINT16 B = A + ((OFFSET&amp;0x8000) ? \
     1256<code>UINT32 A = (OFFSET&amp;0x8000) ? ADDR&amp;0x1fffc : ADDR&amp;~3
     1257UINT32 B = A + ((OFFSET&amp;0x8000) ? \
    12581258            ((ADDR&gt;&gt;17) | ((ADDR&gt;&gt;16)&amp;0x8000)) : \
    12591259            ((OFFSET&amp;07fff) | (OFFSET&lt;&lt;1)&amp;0x8000)) * 4
     
    12661266A, and at address B; and store result to LDS/GDS at address A. Operation is atomic.<br />
    12671267Operation:<br />
    1268 <code>UINT16 A = (OFFSET&amp;0x8000) ? ADDR&amp;0x1fff8 : ADDR&amp;~7
    1269 UINT16 B = (A + ((OFFSET&amp;0x8000) ? \
     1268<code>UINT32 A = (OFFSET&amp;0x8000) ? ADDR&amp;0x1fff8 : ADDR&amp;~7
     1269UINT32 B = (A + ((OFFSET&amp;0x8000) ? \
    12701270            ((ADDR&gt;&gt;17) | ((ADDR&gt;&gt;16)&amp;0x8000)) : \
    12711271            ((OFFSET&amp;07fff) | (OFFSET&lt;&lt;1)&amp;0x8000)) * 4)&amp;~7
     
    13491349Description: Load unsigned value from LDS/GDS at  address (ADDR+OFFSET) &amp; ~3, and
    13501350compare with unsigned value from VDATA0. If VDATA0 is greater or equal and loaded
    1351 unsigned value is zero, then increment value from LDS/GDS, otherwise store
     1351unsigned value is not zero, then increment value from LDS/GDS, otherwise store
    13521352VDATA0 to LDS/GDS. Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br />
    13531353Operation:<br />
     
    13721372LDS/GDS at address A. Refer to listing to learn about addressing. Operation is atomic.<br />
    13731373Operation:<br />
    1374 <code>UINT16 A = (OFFSET&amp;0x8000) ? ADDR&amp;0x1fffc : ADDR&amp;~3
    1375 UINT16 B = A + ((OFFSET&amp;0x8000) ? \
     1374<code>UINT32 A = (OFFSET&amp;0x8000) ? ADDR&amp;0x1fffc : ADDR&amp;~3
     1375UINT32 B = A + ((OFFSET&amp;0x8000) ? \
    13761376            ((ADDR&gt;&gt;17) | ((ADDR&gt;&gt;16)&amp;0x8000)) : \
    13771377            ((OFFSET&amp;07fff) | (OFFSET&lt;&lt;1)&amp;0x8000)) * 4
     
    13881388Operation is atomic.<br />
    13891389Operation:<br />
    1390 <code>UINT16 A = (OFFSET&amp;0x8000) ? ADDR&amp;0x1fff8 : ADDR&amp;~7
    1391 UINT16 B = (A + ((OFFSET&amp;0x8000) ? \
     1390<code>UINT32 A = (OFFSET&amp;0x8000) ? ADDR&amp;0x1fff8 : ADDR&amp;~7
     1391UINT32 B = (A + ((OFFSET&amp;0x8000) ? \
    13921392            ((ADDR&gt;&gt;17) | ((ADDR&gt;&gt;16)&amp;0x8000)) : \
    13931393            ((OFFSET&amp;07fff) | (OFFSET&lt;&lt;1)&amp;0x8000)) * 4)&amp;~7
     
    14431443Refer to listing to learn about addressing. Operation is atomic.<br />
    14441444Operation:<br />
    1445 <code>UINT16 A = (OFFSET&amp;0x8000) ? ADDR&amp;0x1fffc : ADDR&amp;~3
    1446 UINT16 B = A + ((OFFSET&amp;0x8000) ? \
     1445<code>UINT32 A = (OFFSET&amp;0x8000) ? ADDR&amp;0x1fffc : ADDR&amp;~3
     1446UINT32 B = A + ((OFFSET&amp;0x8000) ? \
    14471447            ((ADDR&gt;&gt;17) | ((ADDR&gt;&gt;16)&amp;0x8000)) : \
    14481448            ((OFFSET&amp;07fff) | (OFFSET&lt;&lt;1)&amp;0x8000)) * 4
     
    14571457Refer to listing to learn about addressing. Operation is atomic.<br />
    14581458Operation:<br />
    1459 <code>UINT16 A = (OFFSET&amp;0x8000) ? ADDR&amp;0x1fff8 : ADDR&amp;~7
    1460 UINT16 B = (A + ((OFFSET&amp;0x8000) ? \
     1459<code>UINT32 A = (OFFSET&amp;0x8000) ? ADDR&amp;0x1fff8 : ADDR&amp;~7
     1460UINT32 B = (A + ((OFFSET&amp;0x8000) ? \
    14611461            ((ADDR&gt;&gt;17) | ((ADDR&gt;&gt;16)&amp;0x8000)) : \
    14621462            ((OFFSET&amp;07fff) | (OFFSET&lt;&lt;1)&amp;0x8000)) * 4)&amp;~7
     
    15781578Refer to listing to learn about addressing. Operation is atomic.<br />
    15791579Operation:<br />
    1580 <code>UINT16 A = (OFFSET&amp;0x8000) ? ADDR&amp;0x1fffc : ADDR&amp;~3
    1581 UINT16 B = A + ((OFFSET&amp;0x8000) ? \
     1580<code>UINT32 A = (OFFSET&amp;0x8000) ? ADDR&amp;0x1fffc : ADDR&amp;~3
     1581UINT32 B = A + ((OFFSET&amp;0x8000) ? \
    15821582            ((ADDR&gt;&gt;17) | ((ADDR&gt;&gt;16)&amp;0x8000)) : \
    15831583            ((OFFSET&amp;07fff) | (OFFSET&lt;&lt;1)&amp;0x8000)) * 4
     
    15911591Refer to listing to learn about addressing. Operation is atomic.<br />
    15921592Operation:<br />
    1593 <code>UINT16 A = (OFFSET&amp;0x8000) ? ADDR&amp;0x1fff8 : ADDR&amp;~7
    1594 UINT16 B = (A + ((OFFSET&amp;0x8000) ? \
     1593<code>UINT32 A = (OFFSET&amp;0x8000) ? ADDR&amp;0x1fff8 : ADDR&amp;~7
     1594UINT32 B = (A + ((OFFSET&amp;0x8000) ? \
    15951595            ((ADDR&gt;&gt;17) | ((ADDR&gt;&gt;16)&amp;0x8000)) : \
    15961596            ((OFFSET&amp;07fff) | (OFFSET&lt;&lt;1)&amp;0x8000)) * 4)&amp;~7
     
    16041604Refer to listing to learn about addressing. Operation is atomic.<br />
    16051605Operation:<br />
    1606 <code>UINT16 A = (OFFSET&amp;0x8000) ? ADDR&amp;0x1fffc : ADDR&amp;~3
    1607 UINT16 B = A + ((OFFSET&amp;0x8000) ? \
     1606<code>UINT32 A = (OFFSET&amp;0x8000) ? ADDR&amp;0x1fffc : ADDR&amp;~3
     1607UINT32 B = A + ((OFFSET&amp;0x8000) ? \
    16081608            ((ADDR&gt;&gt;17) | ((ADDR&gt;&gt;16)&amp;0x8000)) : \
    16091609            ((OFFSET&amp;07fff) | (OFFSET&lt;&lt;1)&amp;0x8000)) * 4
     
    16171617Refer to listing to learn about addressing. Operation is atomic.<br />
    16181618Operation:<br />
    1619 <code>UINT16 A = (OFFSET&amp;0x8000) ? ADDR&amp;0x1fff8 : ADDR&amp;~7
    1620 UINT16 B = (A + ((OFFSET&amp;0x8000) ? \
     1619<code>UINT32 A = (OFFSET&amp;0x8000) ? ADDR&amp;0x1fff8 : ADDR&amp;~7
     1620UINT32 B = (A + ((OFFSET&amp;0x8000) ? \
    16211621            ((ADDR&gt;&gt;17) | ((ADDR&gt;&gt;16)&amp;0x8000)) : \
    16221622            ((OFFSET&amp;07fff) | (OFFSET&lt;&lt;1)&amp;0x8000)) * 4)&amp;~7
     
    16301630Refer to listing to learn about addressing. Operation is atomic.<br />
    16311631Operation:<br />
    1632 <code>UINT16 A = (OFFSET&amp;0x8000) ? ADDR&amp;0x1fffc : ADDR&amp;~3
    1633 UINT16 B = A + ((OFFSET&amp;0x8000) ? \
     1632<code>UINT32 A = (OFFSET&amp;0x8000) ? ADDR&amp;0x1fffc : ADDR&amp;~3
     1633UINT32 B = A + ((OFFSET&amp;0x8000) ? \
    16341634            ((ADDR&gt;&gt;17) | ((ADDR&gt;&gt;16)&amp;0x8000)) : \
    16351635            ((OFFSET&amp;07fff) | (OFFSET&lt;&lt;1)&amp;0x8000)) * 4
     
    16431643Refer to listing to learn about addressing. Operation is atomic.<br />
    16441644Operation:<br />
    1645 <code>UINT16 A = (OFFSET&amp;0x8000) ? ADDR&amp;0x1fff8 : ADDR&amp;~7
    1646 UINT16 B = (A + ((OFFSET&amp;0x8000) ? \
     1645<code>UINT32 A = (OFFSET&amp;0x8000) ? ADDR&amp;0x1fff8 : ADDR&amp;~7
     1646UINT32 B = (A + ((OFFSET&amp;0x8000) ? \
    16471647            ((ADDR&gt;&gt;17) | ((ADDR&gt;&gt;16)&amp;0x8000)) : \
    16481648            ((OFFSET&amp;07fff) | (OFFSET&lt;&lt;1)&amp;0x8000)) * 4)&amp;~7
     
    17641764Refer to listing to learn about addressing. Operation is atomic.<br />
    17651765Operation:<br />
    1766 <code>UINT16 A = (OFFSET&amp;0x8000) ? ADDR&amp;0x1fffc : ADDR&amp;~3
    1767 UINT16 B = A + ((OFFSET&amp;0x8000) ? \
     1766<code>UINT32 A = (OFFSET&amp;0x8000) ? ADDR&amp;0x1fffc : ADDR&amp;~3
     1767UINT32 B = A + ((OFFSET&amp;0x8000) ? \
    17681768            ((ADDR&gt;&gt;17) | ((ADDR&gt;&gt;16)&amp;0x8000)) : \
    17691769            ((OFFSET&amp;07fff) | (OFFSET&lt;&lt;1)&amp;0x8000)) * 4
     
    17771777Refer to listing to learn about addressing. Operation is atomic.<br />
    17781778Operation:<br />
    1779 <code>UINT16 A = (OFFSET&amp;0x8000) ? ADDR&amp;0x1fff8 : ADDR&amp;~7
    1780 UINT16 B = (A + ((OFFSET&amp;0x8000) ? \
     1779<code>UINT32 A = (OFFSET&amp;0x8000) ? ADDR&amp;0x1fff8 : ADDR&amp;~7
     1780UINT32 B = (A + ((OFFSET&amp;0x8000) ? \
    17811781            ((ADDR&gt;&gt;17) | ((ADDR&gt;&gt;16)&amp;0x8000)) : \
    17821782            ((OFFSET&amp;07fff) | (OFFSET&lt;&lt;1)&amp;0x8000)) * 4)&amp;~7
     
    17901790Refer to listing to learn about addressing. Operation is atomic.<br />
    17911791Operation:<br />
    1792 <code>UINT16 A = (OFFSET&amp;0x8000) ? ADDR&amp;0x1fffc : ADDR&amp;~3
    1793 UINT16 B = A + ((OFFSET&amp;0x8000) ? \
     1792<code>UINT32 A = (OFFSET&amp;0x8000) ? ADDR&amp;0x1fffc : ADDR&amp;~3
     1793UINT32 B = A + ((OFFSET&amp;0x8000) ? \
    17941794            ((ADDR&gt;&gt;17) | ((ADDR&gt;&gt;16)&amp;0x8000)) : \
    17951795            ((OFFSET&amp;07fff) | (OFFSET&lt;&lt;1)&amp;0x8000)) * 4
     
    18031803Refer to listing to learn about addressing. Operation is atomic.<br />
    18041804Operation:<br />
    1805 <code>UINT16 A = (OFFSET&amp;0x8000) ? ADDR&amp;0x1fff8 : ADDR&amp;~7
    1806 UINT16 B = A + (((OFFSET&amp;0x8000) ? \
     1805<code>UINT32 A = (OFFSET&amp;0x8000) ? ADDR&amp;0x1fff8 : ADDR&amp;~7
     1806UINT32 B = A + (((OFFSET&amp;0x8000) ? \
    18071807            ((ADDR&gt;&gt;17) | ((ADDR&gt;&gt;16)&amp;0x8000)) : \
    18081808            ((OFFSET&amp;07fff) | (OFFSET&lt;&lt;1)&amp;0x8000)) * 4)&amp;~7
     
    18161816Refer to listing to learn about addressing. Operation is atomic.<br />
    18171817Operation:<br />
    1818 <code>UINT16 A = (OFFSET&amp;0x8000) ? ADDR&amp;0x1fffc : ADDR&amp;~3
    1819 UINT16 B = A + ((OFFSET&amp;0x8000) ? \
     1818<code>UINT32 A = (OFFSET&amp;0x8000) ? ADDR&amp;0x1fffc : ADDR&amp;~3
     1819UINT32 B = A + ((OFFSET&amp;0x8000) ? \
    18201820            ((ADDR&gt;&gt;17) | ((ADDR&gt;&gt;16)&amp;0x8000)) : \
    18211821            ((OFFSET&amp;07fff) | (OFFSET&lt;&lt;1)&amp;0x8000)) * 4
     
    18291829Refer to listing to learn about addressing. Operation is atomic.<br />
    18301830Operation:<br />
    1831 <code>UINT16 A = (OFFSET&amp;0x8000) ? ADDR&amp;0x1fff8 : ADDR&amp;~7
    1832 UINT16 B = (A + ((OFFSET&amp;0x8000) ? \
     1831<code>UINT32 A = (OFFSET&amp;0x8000) ? ADDR&amp;0x1fff8 : ADDR&amp;~7
     1832UINT32 B = (A + ((OFFSET&amp;0x8000) ? \
    18331833            ((ADDR&gt;&gt;17) | ((ADDR&gt;&gt;16)&amp;0x8000)) : \
    18341834            ((OFFSET&amp;07fff) | (OFFSET&lt;&lt;1)&amp;0x8000)) * 4)&amp;~7
     
    19371937A, and at address B; and store result to LDS/GDS at address A. Operation is atomic.<br />
    19381938Operation:<br />
    1939 <code>UINT16 A = (OFFSET&amp;0x8000) ? ADDR&amp;0x1fffc : ADDR&amp;~3
    1940 UINT16 B = A + ((OFFSET&amp;0x8000) ? \
     1939<code>UINT32 A = (OFFSET&amp;0x8000) ? ADDR&amp;0x1fffc : ADDR&amp;~3
     1940UINT32 B = A + ((OFFSET&amp;0x8000) ? \
    19411941            ((ADDR&gt;&gt;17) | ((ADDR&gt;&gt;16)&amp;0x8000)) : \
    19421942            ((OFFSET&amp;07fff) | (OFFSET&lt;&lt;1)&amp;0x8000)) * 4
     
    19491949A, and at address B; and store result to LDS/GDS at address A. Operation is atomic.<br />
    19501950Operation:<br />
    1951 <code>UINT16 A = (OFFSET&amp;0x8000) ? ADDR&amp;0x1fff8 : ADDR&amp;~7
    1952 UINT16 B = (A + ((OFFSET&amp;0x8000) ? \
     1951<code>UINT32 A = (OFFSET&amp;0x8000) ? ADDR&amp;0x1fff8 : ADDR&amp;~7
     1952UINT32 B = (A + ((OFFSET&amp;0x8000) ? \
    19531953            ((ADDR&gt;&gt;17) | ((ADDR&gt;&gt;16)&amp;0x8000)) : \
    19541954            ((OFFSET&amp;07fff) | (OFFSET&lt;&lt;1)&amp;0x8000)) * 4)&amp;~7
     
    19671967store into VDST. The value's sign will be extended to higher bits.<br />
    19681968Operation:<br />
    1969 <code>VDST = (INT32)*(INT16*)(DS + (ADDR+OFFSET)&amp;~1)</code></p>
     1969<code>VDST = (INT32)*(INT16*)(DS + ((ADDR+OFFSET)&amp;~1))</code></p>
    19701970<h4>DS_READ_I8</h4>
    19711971<p>Opcode: 57 (0x39)<br />
     
    19811981store into VDST.<br />
    19821982Operation:<br />
    1983 <code>VDST = *(UINT16*)(DS + (ADDR+OFFSET)&amp;~1)</code></p>
     1983<code>VDST = *(UINT16*)(DS + ((ADDR+OFFSET)&amp;~1))</code></p>
    19841984<h4>DS_READ_U8</h4>
    19851985<p>Opcode: 58 (0x3a)<br />
     
    20492049Refer to listing to learn about addressing. Operation is atomic.<br />
    20502050Operation:<br />
    2051 <code>UINT16 A = (OFFSET&amp;0x8000) ? ADDR&amp;0x1fffc : ADDR&amp;~3
    2052 UINT16 B = A + ((OFFSET&amp;0x8000) ? \
     2051<code>UINT32 A = (OFFSET&amp;0x8000) ? ADDR&amp;0x1fffc : ADDR&amp;~3
     2052UINT32 B = A + ((OFFSET&amp;0x8000) ? \
    20532053            ((ADDR&gt;&gt;17) | ((ADDR&gt;&gt;16)&amp;0x8000)) : \
    20542054            ((OFFSET&amp;07fff) | (OFFSET&lt;&lt;1)&amp;0x8000)) * 4
     
    20622062Refer to listing to learn about addressing. Operation is atomic.<br />
    20632063Operation:<br />
    2064 <code>UINT16 A = (OFFSET&amp;0x8000) ? ADDR&amp;0x1fff8 : ADDR&amp;~7
    2065 UINT16 B = (A + ((OFFSET&amp;0x8000) ? \
     2064<code>UINT32 A = (OFFSET&amp;0x8000) ? ADDR&amp;0x1fff8 : ADDR&amp;~7
     2065UINT32 B = (A + ((OFFSET&amp;0x8000) ? \
    20662066            ((ADDR&gt;&gt;17) | ((ADDR&gt;&gt;16)&amp;0x8000)) : \
    20672067            ((OFFSET&amp;07fff) | (OFFSET&lt;&lt;1)&amp;0x8000)) * 4)&amp;~7
     
    21112111Refer to listing to learn about addressing. Operation is atomic.<br />
    21122112Operation:<br />
    2113 <code>UINT16 A = (OFFSET&amp;0x8000) ? ADDR&amp;0x1fffc : ADDR&amp;~3
    2114 UINT16 B = A + ((OFFSET&amp;0x8000) ? \
     2113<code>UINT32 A = (OFFSET&amp;0x8000) ? ADDR&amp;0x1fffc : ADDR&amp;~3
     2114UINT32 B = A + ((OFFSET&amp;0x8000) ? \
    21152115            ((ADDR&gt;&gt;17) | ((ADDR&gt;&gt;16)&amp;0x8000)) : \
    21162116            ((OFFSET&amp;07fff) | (OFFSET&lt;&lt;1)&amp;0x8000)) * 4
     
    21242124Refer to listing to learn about addressing. Operation is atomic.<br />
    21252125Operation:<br />
    2126 <code>UINT16 A = (OFFSET&amp;0x8000) ? ADDR&amp;0x1fff8 : ADDR&amp;~7
    2127 UINT16 B = (A + ((OFFSET&amp;0x8000) ? \
     2126<code>UINT32 A = (OFFSET&amp;0x8000) ? ADDR&amp;0x1fff8 : ADDR&amp;~7
     2127UINT32 B = (A + ((OFFSET&amp;0x8000) ? \
    21282128            ((ADDR&gt;&gt;17) | ((ADDR&gt;&gt;16)&amp;0x8000)) : \
    21292129            ((OFFSET&amp;07fff) | (OFFSET&lt;&lt;1)&amp;0x8000)) * 4)&amp;~7
     
    21582158<code>BYTE INLANEID = 0
    21592159if (OFFSET&amp;0x8000)
    2160     INLANEID = (LANEID&amp;0x3c) + (OFFSET&gt;&gt;(2*(LANEID&amp;3))&amp;3
     2160    INLANEID = (LANEID&amp;0x3c) + ((OFFSET &gt;&gt; (2*(LANEID&amp;3)) &amp; 3)
    21612161else
    21622162{
     
    22002200Description: Store value from LDS/GDS at address B into LDS/GDS at address A.<br />
    22012201Operation:<br />
    2202 <code>UINT16 A = (OFFSET&amp;0x8000) ? ADDR&amp;0x1fffc : ADDR&amp;~3
    2203 UINT16 B = A + ((OFFSET&amp;0x8000) ? \
     2202<code>UINT32 A = (OFFSET&amp;0x8000) ? ADDR&amp;0x1fffc : ADDR&amp;~3
     2203UINT32 B = A + ((OFFSET&amp;0x8000) ? \
    22042204            ((ADDR&gt;&gt;17) | ((ADDR&gt;&gt;16)&amp;0x8000)) : \
    22052205            ((OFFSET&amp;07fff) | (OFFSET&lt;&lt;1)&amp;0x8000)) * 4
     
    22102210Description: Store 64-bit value from LDS/GDS at address B into LDS/GDS at address A.<br />
    22112211Operation:<br />
    2212 <code>UINT16 A = (OFFSET&amp;0x8000) ? ADDR&amp;0x1fff8 : ADDR&amp;~7
    2213 UINT16 B = (A + ((OFFSET&amp;0x8000) ? \
     2212<code>UINT32 A = (OFFSET&amp;0x8000) ? ADDR&amp;0x1fff8 : ADDR&amp;~7
     2213UINT32 B = (A + ((OFFSET&amp;0x8000) ? \
    22142214            ((ADDR&gt;&gt;17) | ((ADDR&gt;&gt;16)&amp;0x8000)) : \
    22152215            ((OFFSET&amp;07fff) | (OFFSET&lt;&lt;1)&amp;0x8000)) * 4)&amp;~7
     
    23062306Operation:<br />
    23072307<code>UINT32* V0 = (UINT32*)(DS + ((ADDR + OFFSET0*256)&amp;~3))
    2308 UINT32* V1 = (UINT32*)(DS + (((ADDR + OFFSET1*256)&amp;~3)))
     2308UINT32* V1 = (UINT32*)(DS + ((ADDR + OFFSET1*256)&amp;~3))
    23092309VDST = (*V0) | (UINT64(*V1)&lt;&lt;32)
    23102310*V0 = VDATA0
     
    23192319Operation:<br />
    23202320<code>UINT64* V0 = (UINT64*)(DS + ((ADDR + OFFSET0*512)&amp;~7))
    2321 UINT64* V1 = (UINT64*)(DS + (((ADDR + OFFSET1*512)&amp;~7)))
     2321UINT64* V1 = (UINT64*)(DS + ((ADDR + OFFSET1*512)&amp;~7))
    23222322VDST = (*V0) | (UINT128(*V1)&lt;&lt;64)
    23232323*V0 = VDATA0
     
    23652365A, and at address B; and store result to LDS/GDS at address A. Operation is atomic.<br />
    23662366Operation:<br />
    2367 <code>UINT16 A = (OFFSET&amp;0x8000) ? ADDR&amp;0x1fffc : ADDR&amp;~3
    2368 UINT16 B = A + ((OFFSET&amp;0x8000) ? \
     2367<code>UINT32 A = (OFFSET&amp;0x8000) ? ADDR&amp;0x1fffc : ADDR&amp;~3
     2368UINT32 B = A + ((OFFSET&amp;0x8000) ? \
    23692369            ((ADDR&gt;&gt;17) | ((ADDR&gt;&gt;16)&amp;0x8000)) : \
    23702370            ((OFFSET&amp;07fff) | (OFFSET&lt;&lt;1)&amp;0x8000)) * 4
    23712371UINT32* V = (UINT32*)(DS + A)
    2372 *V = *V | *(UINT32*)(DS + B) // atomic operation</code></p>
     2372*V = *V ^ *(UINT32*)(DS + B) // atomic operation</code></p>
    23732373<h4>DS_XOR_SRC2_B64</h4>
    23742374<p>Opcode: 203 (0xcb)<br />
     
    23772377A, and at address B; and store result to LDS/GDS at address A. Operation is atomic.<br />
    23782378Operation:<br />
    2379 <code>UINT16 A = (OFFSET&amp;0x8000) ? ADDR&amp;0x1fff8 : ADDR&amp;~7
    2380 UINT16 B = (A + ((OFFSET&amp;0x8000) ? \
     2379<code>UINT32 A = (OFFSET&amp;0x8000) ? ADDR&amp;0x1fff8 : ADDR&amp;~7
     2380UINT32 B = (A + ((OFFSET&amp;0x8000) ? \
    23812381            ((ADDR&gt;&gt;17) | ((ADDR&gt;&gt;16)&amp;0x8000)) : \
    23822382            ((OFFSET&amp;07fff) | (OFFSET&lt;&lt;1)&amp;0x8000)) * 4)&amp;~7
    23832383UINT64* V = (UINT64*)(DS + A)
    2384 *V = *V | *(UINT64*)(DS + B) // atomic operation</code></p>
     2384*V = *V ^ *(UINT64*)(DS + B) // atomic operation</code></p>
    23852385}}}