Changes between Version 11 and Version 12 of GcnInstrsDs


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

--

Legend:

Unmodified
Added
Removed
Modified
  • GcnInstrsDs

    v11 v12  
    11591159LDS/GDS are stored in VDST. Operation is atomic.<br />
    11601160Operation:<br />
    1161 <code>UINT32* V = (UINT32*)(DS + (ADDR+OFFSET)&amp;~3)
     1161<code>UINT32* V = (UINT32*)(DS + ((ADDR+OFFSET)&amp;~3))
    11621162VDST = *V; *V = *V + VDATA0  // atomic operation</code></p>
    11631163<h4>DS_ADD_RTN_U64</h4>
     
    11681168LDS/GDS are stored in VDST. Operation is atomic.<br />
    11691169Operation:<br />
    1170 <code>UINT64* V = (UINT64*)(DS + (ADDR+OFFSET)&amp;~7)
     1170<code>UINT64* V = (UINT64*)(DS + ((ADDR+OFFSET)&amp;~7))
    11711171VDST = *V; *V = *V + VDATA0  // atomic operation</code></p>
    11721172<h4>DS_ADD_SRC2_U32</h4>
     
    12021202VDATA0, and store result back to LDS/GDS at this address. Operation is atomic.<br />
    12031203Operation:<br />
    1204 <code>UINT32* V = (UINT32*)(DS + (ADDR+OFFSET)&amp;~3)
     1204<code>UINT32* V = (UINT32*)(DS + ((ADDR+OFFSET)&amp;~3))
    12051205*V = *V + VDATA0  // atomic operation</code></p>
    12061206<h4>DS_ADD_U64</h4>
     
    12101210and VDATA0, and store result back to LDS/GDS at this address. Operation is atomic.<br />
    12111211Operation:<br />
    1212 <code>UINT64* V = (UINT64*)(DS + (ADDR+OFFSET)&amp;~7)
     1212<code>UINT64* V = (UINT64*)(DS + ((ADDR+OFFSET)&amp;~7))
    12131213*V = *V + VDATA0  // atomic operation</code></p>
    12141214<h4>DS_AND_B32</h4>
     
    12191219address. Operation is atomic.<br />
    12201220Operation:<br />
    1221 <code>UINT32* V = (UINT32*)(DS + (ADDR+OFFSET)&amp;~3)
     1221<code>UINT32* V = (UINT32*)(DS + ((ADDR+OFFSET)&amp;~3))
    12221222*V = *V &amp; VDATA0  // atomic operation</code></p>
    12231223<h4>DS_AND_B64</h4>
     
    12281228address. Operation is atomic.<br />
    12291229Operation:<br />
    1230 <code>UINT64* V = (UINT64*)(DS + (ADDR+OFFSET)&amp;~7)
     1230<code>UINT64* V = (UINT64*)(DS + ((ADDR+OFFSET)&amp;~7))
    12311231*V = *V &amp; VDATA0  // atomic operation</code></p>
    12321232<h4>DS_AND_RTN_B32</h4>
     
    12371237address. Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br />
    12381238Operation:<br />
    1239 <code>UINT32* V = (UINT32*)(DS + (ADDR+OFFSET)&amp;~3)
     1239<code>UINT32* V = (UINT32*)(DS + ((ADDR+OFFSET)&amp;~3))
    12401240VDST = *V; *V = *V &amp; VDATA0  // atomic operation</code></p>
    12411241<h4>DS_AND_RTN_B64</h4>
     
    12461246address. Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br />
    12471247Operation:<br />
    1248 <code>UINT64* V = (UINT64*)(DS + (ADDR+OFFSET)&amp;~7)
     1248<code>UINT64* V = (UINT64*)(DS + ((ADDR+OFFSET)&amp;~7))
    12491249VDST = *V; *V = *V &amp; VDATA0  // atomic operation</code></p>
    12501250<h4>DS_AND_SRC2_B32</h4>
     
    12791279Operation is atomic.<br />
    12801280Operation:<br />
    1281 <code>UINT32* V = (UINT32*)(DS + (ADDR+OFFSET)&amp;~3)
     1281<code>UINT32* V = (UINT32*)(DS + ((ADDR+OFFSET)&amp;~3))
    12821282*V = (*V==VDATA0) ? VDATA1 : *V  // atomic operation</code></p>
    12831283<h4>DS_CMPST_B64</h4>
     
    12881288otherwise do nothing. Operation is atomic.<br />
    12891289Operation:<br />
    1290 <code>UINT64* V = (UINT64*)(DS + (ADDR+OFFSET)&amp;~7)
     1290<code>UINT64* V = (UINT64*)(DS + ((ADDR+OFFSET)&amp;~7))
    12911291*V = (*V==VDATA0) ? VDATA1 : *V  // atomic operation</code></p>
    12921292<h4>DS_CMPST_F32</h4>
     
    12971297otherwise do nothing. Operation is atomic.<br />
    12981298Operation:<br />
    1299 <code>FLOAT* V = (FLOAT*)(DS + (ADDR+OFFSET)&amp;~3)
     1299<code>FLOAT* V = (FLOAT*)(DS + ((ADDR+OFFSET)&amp;~3))
    13001300*V = (*V==ASFLOATR(VDATA0)) ? ASFLOAT(VDATA1) : *V  // atomic operation</code></p>
    13011301<h4>DS_CMPST_F64</h4>
     
    13061306otherwise do nothing. Operation is atomic.<br />
    13071307Operation:<br />
    1308 <code>DOUBLE* V = (DOUBLE*)(DS + (ADDR+OFFSET)&amp;~7)
     1308<code>DOUBLE* V = (DOUBLE*)(DS + ((ADDR+OFFSET)&amp;~7))
    13091309*V = (*V==ASDOUBLE(VDATA0)) ? ASDOUBLE(VDATA1) : *V  // atomic operation</code></p>
    13101310<h4>DS_CMPST_RTN_B32</h4>
     
    13151315Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br />
    13161316Operation:<br />
    1317 <code>UINT32* V = (UINT32*)(DS + (ADDR+OFFSET)&amp;~3)
     1317<code>UINT32* V = (UINT32*)(DS + ((ADDR+OFFSET)&amp;~3))
    13181318*V = VDST; *V = (*V==VDATA0) ? VDATA1 : *V  // atomic operation</code></p>
    13191319<h4>DS_CMPST_RTN_B64</h4>
     
    13241324otherwise do nothing. Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br />
    13251325Operation:<br />
    1326 <code>UINT64* V = (UINT64*)(DS + (ADDR+OFFSET)&amp;~7)
     1326<code>UINT64* V = (UINT64*)(DS + ((ADDR+OFFSET)&amp;~7))
    13271327*V = VDST; *V = (*V==VDATA0) ? VDATA1 : *V  // atomic operation</code></p>
    13281328<h4>DS_CMPST_RTN_F32</h4>
     
    13331333otherwise do nothing. Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br />
    13341334Operation:<br />
    1335 <code>FLOAT* V = (FLOAT*)(DS + (ADDR+OFFSET)&amp;~3)
     1335<code>FLOAT* V = (FLOAT*)(DS + ((ADDR+OFFSET)&amp;~3))
    13361336VDST = *V; *V = (*V==ASFLOAT(VDATA0)) ? ASFLOAT(VDATA1) : *V  // atomic operation</code></p>
    1337 <h4>DS_CMPST_RTN_F32</h4>
     1337<h4>DS_CMPST_RTN_F64</h4>
    13381338<p>Opcode: 113 (0x71)<br />
    13391339Syntax: DS_CMPST_RTN_F64 VDST(2), ADDR, VDATA0(2), VDATA1(2) [OFFSET:OFFSET]<br />
     
    13421342otherwise do nothing. Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br />
    13431343Operation:<br />
    1344 <code>DOUBLE* V = (DOUBLE*)(DS + (ADDR+OFFSET)&amp;~7)
     1344<code>DOUBLE* V = (DOUBLE*)(DS + ((ADDR+OFFSET)&amp;~7))
    13451345VDST = *V; *V = (*V==ASDOUBLE(VDATA0)) ? ASDOUBLE(VDATA1) : *V  // atomic operation</code></p>
    13461346<h4>DS_DEC_RTN_U32</h4>
     
    13521352VDATA0 to LDS/GDS. Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br />
    13531353Operation:<br />
    1354 <code>UINT32* V = (UINT32*)(DS + (ADDR+OFFSET)&amp;~3)
     1354<code>UINT32* V = (UINT32*)(DS + ((ADDR+OFFSET)&amp;~3))
    13551355VDST = *V; *V = (VDATA0 &gt;= *V &amp;&amp; *V!=0) ? *V-1 : VDATA0  // atomic operation</code></p>
    13561356<h4>DS_DEC_RTN_U64</h4>
     
    13621362VDATA0 to LDS/GDS. Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br />
    13631363Operation:<br />
    1364 <code>UINT64* V = (UINT64*)(DS + (ADDR+OFFSET)&amp;~7)
     1364<code>UINT64* V = (UINT64*)(DS + ((ADDR+OFFSET)&amp;~7))
    13651365VDST = *V; *V = (VDATA0 &gt;= *V &amp;&amp; *V!=0) ? *V-1 : VDATA0  // atomic operation</code></p>
    13661366<h4>DS_DEC_SRC2_U32</h4>
     
    14031403VDATA0 to LDS/GDS. Operation is atomic.<br />
    14041404Operation:<br />
    1405 <code>UINT32* V = (UINT32*)(DS + (ADDR+OFFSET)&amp;~3)
     1405<code>UINT32* V = (UINT32*)(DS + ((ADDR+OFFSET)&amp;~3))
    14061406*V = (VDATA0 &gt;= *V &amp;&amp; *V!=0) ? *V-1 : VDATA0  // atomic operation</code></p>
    14071407<h4>DS_DEC_U64</h4>
     
    14131413VDATA0 to LDS/GDS. Operation is atomic.<br />
    14141414Operation:<br />
    1415 <code>UINT64* V = (UINT64*)(DS + (ADDR+OFFSET)&amp;~7)
     1415<code>UINT64* V = (UINT64*)(DS + ((ADDR+OFFSET)&amp;~7))
    14161416*V = (VDATA0 &gt;= *V &amp;&amp; *V!=0) ? *V-1 : VDATA0  // atomic operation</code></p>
    14171417<h4>DS_INC_RTN_U32</h4>
     
    14231423Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br />
    14241424Operation:<br />
    1425 <code>UINT32* V = (UINT32*)(DS + (ADDR+OFFSET)&amp;~3)
     1425<code>UINT32* V = (UINT32*)(DS + ((ADDR+OFFSET)&amp;~3))
    14261426VDST = *V; *V = (VDATA0 &gt; *V) ? *V+1 : 0  // atomic operation</code></p>
    14271427<h4>DS_INC_RTN_U64</h4>
     
    14331433Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br />
    14341434Operation:<br />
    1435 <code>UINT64* V = (UINT64*)(DS + (ADDR+OFFSET)&amp;~7)
     1435<code>UINT64* V = (UINT64*)(DS + ((ADDR+OFFSET)&amp;~7))
    14361436VDST = *V; *V = (VDATA0 &gt; *V) ? *V+1 : 0  // atomic operation</code></p>
    14371437<h4>DS_INC_SRC2_U32</h4>
     
    14701470from LDS/GDS, otherwise store 0 to LDS/GDS. Operation is atomic.<br />
    14711471Operation:<br />
    1472 <code>UINT32* V = (UINT32*)(DS + (ADDR+OFFSET)&amp;~3)
     1472<code>UINT32* V = (UINT32*)(DS + ((ADDR+OFFSET)&amp;~3))
    14731473*V = (VDATA0 &gt; *V) ? *V+1 : 0  // atomic operation</code></p>
    14741474<h4>DS_INC_U64</h4>
     
    14791479from LDS/GDS, otherwise store 0 to LDS/GDS. Operation is atomic.<br />
    14801480Operation:<br />
    1481 <code>UINT64* V = (UINT64*)(DS + (ADDR+OFFSET)&amp;~7)
     1481<code>UINT64* V = (UINT64*)(DS + ((ADDR+OFFSET)&amp;~7))
    14821482*V = (VDATA0 &gt; *V) ? *V+1 : 0  // atomic operation</code></p>
    14831483<h4>DS_MAX_F32</h4>
     
    14881488Operation is atomic.<br />
    14891489Operation:<br />
    1490 <code>FLOAT* V = (FLOAT*)(DS + (ADDR+OFFSET)&amp;~3)
     1490<code>FLOAT* V = (FLOAT*)(DS + ((ADDR+OFFSET)&amp;~3))
    14911491*V = MAX(*V, ASFLOAT(VDATA0)) // atomic operation</code></p>
    14921492<h4>DS_MAX_F64</h4>
     
    14971497Operation is atomic.<br />
    14981498Operation:<br />
    1499 <code>DOUBLE* V = (DOUBLE*)(DS + (ADDR+OFFSET)&amp;~7)
     1499<code>DOUBLE* V = (DOUBLE*)(DS + ((ADDR+OFFSET)&amp;~7))
    15001500*V = MAX(*V, ASDOUBLE(VDATA0)) // atomic operation</code></p>
    15011501<h4>DS_MAX_I32</h4>
     
    15061506Operation is atomic.<br />
    15071507Operation:<br />
    1508 <code>INT32* V = (INT32*)(DS + (ADDR+OFFSET)&amp;~3)
     1508<code>INT32* V = (INT32*)(DS + ((ADDR+OFFSET)&amp;~3))
    15091509*V = MAX(*V, (INT32)VDATA0) // atomic operation</code></p>
    15101510<h4>DS_MAX_I64</h4>
     
    15151515Operation is atomic.<br />
    15161516Operation:<br />
    1517 <code>INT64* V = (INT64*)(DS + (ADDR+OFFSET)&amp;~7)
     1517<code>INT64* V = (INT64*)(DS + ((ADDR+OFFSET)&amp;~7))
    15181518*V = MAX(*V, (INT64)VDATA0) // atomic operation</code></p>
    15191519<h4>DS_MAX_RTN_F32</h4>
     
    15241524Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br />
    15251525Operation:<br />
    1526 <code>FLOAT* V = (FLOAT*)(DS + (ADDR+OFFSET)&amp;~3)
     1526<code>FLOAT* V = (FLOAT*)(DS + ((ADDR+OFFSET)&amp;~3))
    15271527VDST = *V; *V = MAX(*V, ASFLOAT(VDATA0)) // atomic operation</code></p>
    15281528<h4>DS_MAX_RTN_F64</h4>
     
    15331533Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br />
    15341534Operation:<br />
    1535 <code>DOUBLE* V = (DOUBLE*)(DS + (ADDR+OFFSET)&amp;~7)
     1535<code>DOUBLE* V = (DOUBLE*)(DS + ((ADDR+OFFSET)&amp;~7))
    15361536VDST = *V; *V = MAX(*V, ASDOUBLE(VDATA0)) // atomic operation</code></p>
    15371537<h4>DS_MAX_RTN_I32</h4>
     
    15421542Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br />
    15431543Operation:<br />
    1544 <code>INT32* V = (INT32*)(DS + (ADDR+OFFSET)&amp;~3)
     1544<code>INT32* V = (INT32*)(DS + ((ADDR+OFFSET)&amp;~3))
    15451545VDST = *V; *V = MAX(*V, (INT32)VDATA0) // atomic operation</code></p>
    15461546<h4>DS_MAX_RTN_I64</h4>
     
    15511551Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br />
    15521552Operation:<br />
    1553 <code>INT64* V = (INT64*)(DS + (ADDR+OFFSET)&amp;~7)
     1553<code>INT64* V = (INT64*)(DS + ((ADDR+OFFSET)&amp;~7))
    15541554VDST = *V; *V = MAX(*V, (INT64)VDATA0) // atomic operation</code></p>
    15551555<h4>DS_MAX_RTN_U32</h4>
     
    15601560Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br />
    15611561Operation:<br />
    1562 <code>UINT32* V = (UINT32*)(DS + (ADDR+OFFSET)&amp;~3)
     1562<code>UINT32* V = (UINT32*)(DS + ((ADDR+OFFSET)&amp;~3))
    15631563VDST = *V; *V = MAX(*V, VDATA0) // atomic operation</code></p>
    15641564<h4>DS_MAX_RTN_U64</h4>
     
    15691569Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br />
    15701570Operation:<br />
    1571 <code>UINT64* V = (UINT64*)(DS + (ADDR+OFFSET)&amp;~7)
     1571<code>UINT64* V = (UINT64*)(DS + ((ADDR+OFFSET)&amp;~7))
    15721572VDST = *V; *V = MAX(*V, VDATA0) // atomic operation</code></p>
    15731573<h4>DS_MAX_SRC2_F32</h4>
     
    16561656Operation is atomic.<br />
    16571657Operation:<br />
    1658 <code>UINT32* V = (UINT32*)(DS + (ADDR+OFFSET)&amp;~3)
     1658<code>UINT32* V = (UINT32*)(DS + ((ADDR+OFFSET)&amp;~3))
    16591659*V = MAX(*V, VDATA0) // atomic operation</code></p>
    16601660<h4>DS_MAX_U64</h4>
     
    16651665Operation is atomic.<br />
    16661666Operation:<br />
    1667 <code>UINT64* V = (UINT64*)(DS + (ADDR+OFFSET)&amp;~7)
     1667<code>UINT64* V = (UINT64*)(DS + ((ADDR+OFFSET)&amp;~7))
    16681668*V = MAX(*V, VDATA0) // atomic operation</code></p>
    16691669<h4>DS_MIN_F32</h4>
     
    16741674Operation is atomic.<br />
    16751675Operation:<br />
    1676 <code>FLOAT* V = (FLOAT*)(DS + (ADDR+OFFSET)&amp;~3)
     1676<code>FLOAT* V = (FLOAT*)(DS + ((ADDR+OFFSET)&amp;~3))
    16771677*V = MIN(*V, ASFLOAT(VDATA0)) // atomic operation</code></p>
    16781678<h4>DS_MIN_F64</h4>
     
    16831683Operation is atomic.<br />
    16841684Operation:<br />
    1685 <code>DOUBLE* V = (DOUBLE*)(DS + (ADDR+OFFSET)&amp;~7)
     1685<code>DOUBLE* V = (DOUBLE*)(DS + ((ADDR+OFFSET)&amp;~7))
    16861686*V = MIN(*V, ASDOUBLE(VDATA0)) // atomic operation</code></p>
    16871687<h4>DS_MIN_I32</h4>
     
    16921692Operation is atomic.<br />
    16931693Operation:<br />
    1694 <code>INT32* V = (INT32*)(DS + (ADDR+OFFSET)&amp;~3)
     1694<code>INT32* V = (INT32*)(DS + ((ADDR+OFFSET)&amp;~3))
    16951695*V = MIN(*V, (INT32)VDATA0) // atomic operation</code></p>
    16961696<h4>DS_MIN_I64</h4>
    1697 <p>Opcode: 69 (0x65)<br />
     1697<p>Opcode: 69 (0x45)<br />
    16981698Syntax: DS_MIN_I64 ADDR, VDATA0(2) [OFFSET:OFFSET]<br />
    16991699Description: Choose smallest signed 64-bit integer value from LDS/GDS at address
     
    17011701Operation is atomic.<br />
    17021702Operation:<br />
    1703 <code>INT64* V = (INT64*)(DS + (ADDR+OFFSET)&amp;~7)
     1703<code>INT64* V = (INT64*)(DS + ((ADDR+OFFSET)&amp;~7))
    17041704*V = MIN(*V, (INT64)VDATA0) // atomic operation</code></p>
    17051705<h4>DS_MIN_RTN_F32</h4>
     
    17101710Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br />
    17111711Operation:<br />
    1712 <code>FLOAT* V = (FLOAT*)(DS + (ADDR+OFFSET)&amp;~3)
     1712<code>FLOAT* V = (FLOAT*)(DS + ((ADDR+OFFSET)&amp;~3))
    17131713VDST = *V; *V = MIN(*V, ASFLOAT(VDATA0)) // atomic operation</code></p>
    17141714<h4>DS_MIN_RTN_F64</h4>
     
    17191719Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br />
    17201720Operation:<br />
    1721 <code>DOUBLE* V = (FLOAT*)(DS + (ADDR+OFFSET)&amp;~7)
     1721<code>DOUBLE* V = (FLOAT*)(DS + ((ADDR+OFFSET)&amp;~7))
    17221722VDST = *V; *V = MIN(*V, ASDOUBLE(VDATA0)) // atomic operation</code></p>
    17231723<h4>DS_MIN_RTN_I32</h4>
     
    17281728Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br />
    17291729Operation:<br />
    1730 <code>INT32* V = (INT32*)(DS + (ADDR+OFFSET)&amp;~3)
     1730<code>INT32* V = (INT32*)(DS + ((ADDR+OFFSET)&amp;~3))
    17311731VDST = *V; *V = MIN(*V, (INT32)VDATA0) // atomic operation</code></p>
    17321732<h4>DS_MIN_RTN_I64</h4>
     
    17371737Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br />
    17381738Operation:<br />
    1739 <code>INT64 V = (INT64*)(DS + (ADDR+OFFSET)&amp;~7)
     1739<code>INT64 V = (INT64*)(DS + ((ADDR+OFFSET)&amp;~7))
    17401740VDST = *V; *V = MIN(*V, (INT64)VDATA0) // atomic operation</code></p>
    17411741<h4>DS_MIN_RTN_U32</h4>
     
    17461746Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br />
    17471747Operation:<br />
    1748 <code>UINT32* V = (UINT32*)(DS + (ADDR+OFFSET)&amp;~3)
     1748<code>UINT32* V = (UINT32*)(DS + ((ADDR+OFFSET)&amp;~3))
    17491749VDST = *V; *V = MIN(*V, VDATA0) // atomic operation</code></p>
    17501750<h4>DS_MIN_RTN_U64</h4>
     
    17551755Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br />
    17561756Operation:<br />
    1757 <code>UINT64* V = (UINT64*)(DS + (ADDR+OFFSET)&amp;~7)
     1757<code>UINT64* V = (UINT64*)(DS + ((ADDR+OFFSET)&amp;~7))
    17581758VDST = *V; *V = MIN(*V, VDATA0) // atomic operation</code></p>
    17591759<h4>DS_MIN_SRC2_F32</h4>
     
    18421842Operation is atomic.<br />
    18431843Operation:<br />
    1844 <code>UINT32* V = (UINT32*)(DS + (ADDR+OFFSET)&amp;~3)
     1844<code>UINT32* V = (UINT32*)(DS + ((ADDR+OFFSET)&amp;~3))
    18451845*V = MIN(*V, VDATA0) // atomic operation</code></p>
    18461846<h4>DS_MIN_U64</h4>
     
    18511851Operation is atomic.<br />
    18521852Operation:<br />
    1853 <code>UINT64* V = (UINT64*)(DS + (ADDR+OFFSET)&amp;~7)
     1853<code>UINT64* V = (UINT64*)(DS + ((ADDR+OFFSET)&amp;~7))
    18541854*V = MIN(*V, VDATA0) // atomic operation</code></p>
    18551855<h4>DS_MSKOR_B32</h4>
     
    18611861Result is stored in LDS/GDS at this same address. Operation is atomic.<br />
    18621862Operation:<br />
    1863 <code>UINT32* V = (UINT32*)(DS + (ADDR+OFFSET)&amp;~3)
     1863<code>UINT32* V = (UINT32*)(DS + ((ADDR+OFFSET)&amp;~3))
    18641864*V = (*V &amp; ~VDATA0) | VDATA1 // atomic operation</code></p>
    18651865<h4>DS_MSKOR_B64</h4>
     
    18711871third argument. Result is stored in LDS/GDS at this same address. Operation is atomic.<br />
    18721872Operation:<br />
    1873 <code>UINT64* V = (UINT64*)(DS + (ADDR+OFFSET)&amp;~7)
     1873<code>UINT64* V = (UINT64*)(DS + ((ADDR+OFFSET)&amp;~7))
    18741874*V = (*V &amp; ~VDATA0) | VDATA1 // atomic operation</code></p>
    18751875<h4>DS_MSKOR_RTN_B32</h4>
     
    18821882Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br />
    18831883Operation:<br />
    1884 <code>UINT32* V = (UINT32*)(DS + (ADDR+OFFSET)&amp;~3)
     1884<code>UINT32* V = (UINT32*)(DS + ((ADDR+OFFSET)&amp;~3))
    18851885VDST = *V; *V = (*V &amp; ~VDATA0) | VDATA1 // atomic operation</code></p>
    18861886<h4>DS_MSKOR_RTN_B64</h4>
     
    18931893Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br />
    18941894Operation:<br />
    1895 <code>UINT64* V = (UINT64*)(DS + (ADDR+OFFSET)&amp;~7)
     1895<code>UINT64* V = (UINT64*)(DS + ((ADDR+OFFSET)&amp;~7))
    18961896VDST = *V; *V = (*V &amp; ~VDATA0) | VDATA1 // atomic operation</code></p>
    18971897<h4>DS_OR_B32</h4>
     
    19021902address. Operation is atomic.<br />
    19031903Operation:<br />
    1904 <code>UINT32* V = (UINT32*)(DS + (ADDR+OFFSET)&amp;~3)
     1904<code>UINT32* V = (UINT32*)(DS + ((ADDR+OFFSET)&amp;~3))
    19051905*V = *V | VDATA0  // atomic operation</code></p>
    19061906<h4>DS_OR_B64</h4>
     
    19111911address. Operation is atomic.<br />
    19121912Operation:<br />
    1913 <code>UINT64* V = (UINT64*)(DS + (ADDR+OFFSET)&amp;~7)
     1913<code>UINT64* V = (UINT64*)(DS + ((ADDR+OFFSET)&amp;~7))
    19141914*V = *V | VDATA0  // atomic operation</code></p>
    19151915<h4>DS_OR_RTN_B32</h4>
     
    19201920address. Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br />
    19211921Operation:<br />
    1922 <code>UINT32* V = (UINT32*)(DS + (ADDR+OFFSET)&amp;~3)
     1922<code>UINT32* V = (UINT32*)(DS + ((ADDR+OFFSET)&amp;~3))
    19231923VDST = *V; *V = *V | VDATA0  // atomic operation</code></p>
    19241924<h4>DS_OR_RTN_B64</h4>
     
    19291929address. Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br />
    19301930Operation:<br />
    1931 <code>UINT64* V = (UINT64*)(DS + (ADDR+OFFSET)&amp;~7)
     1931<code>UINT64* V = (UINT64*)(DS + ((ADDR+OFFSET)&amp;~7))
    19321932VDST = *V; *V = *V | VDATA0  // atomic operation</code></p>
    19331933<h4>DS_OR_SRC2_B32</h4>
     
    19601960Description: Read dword from LDS/GDS at address (ADDR+OFFSET) &amp; ~3, store into VDST.<br />
    19611961Operation:<br />
    1962 <code>VDST = *(UINT32*)(DS + (ADDR+OFFSET)&amp;~3)</code></p>
     1962<code>VDST = *(UINT32*)(DS + ((ADDR+OFFSET)&amp;~3))</code></p>
    19631963<h4>DS_READ_I16</h4>
    19641964<p>Opcode: 59 (0x3b)<br />
     
    20312031Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br />
    20322032Operation:<br />
    2033 <code>UINT32* V = (UINT32*)(DS + (ADDR+OFFSET)&amp;~3)
     2033<code>UINT32* V = (UINT32*)(DS + ((ADDR+OFFSET)&amp;~3))
    20342034VDST= *V; *V = VDATA0 - *V  // atomic operation</code></p>
    20352035<h4>DS_RSUB_RTN_U64</h4>
     
    20402040same address. Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br />
    20412041Operation:<br />
    2042 <code>UINT64* V = (UINT64*)(DS + (ADDR+OFFSET)&amp;~7)
     2042<code>UINT64* V = (UINT64*)(DS + ((ADDR+OFFSET)&amp;~7))
    20432043VDST= *V; *V = VDATA0 - *V  // atomic operation</code></p>
    20442044<h4>DS_RSUB_SRC2_U32</h4>
     
    20752075Operation is atomic.<br />
    20762076Operation:<br />
    2077 <code>UINT32* V = (UINT32*)(DS + (ADDR+OFFSET)&amp;~3)
     2077<code>UINT32* V = (UINT32*)(DS + ((ADDR+OFFSET)&amp;~3))
    20782078*V = VDATA0 - *V  // atomic operation</code></p>
    20792079<h4>DS_RSUB_U64</h4>
     
    20842084same address. Operation is atomic.<br />
    20852085Operation:<br />
    2086 <code>UINT64* V = (UINT64*)(DS + (ADDR+OFFSET)&amp;~7)
     2086<code>UINT64* V = (UINT64*)(DS + ((ADDR+OFFSET)&amp;~7))
    20872087*V = VDATA0 - *V  // atomic operation</code></p>
    20882088<h4>DS_SUB_RTN_U32</h4>
     
    20932093Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br />
    20942094Operation:<br />
    2095 <code>UINT32* V = (UINT32*)(DS + (ADDR+OFFSET)&amp;~3)
     2095<code>UINT32* V = (UINT32*)(DS + ((ADDR+OFFSET)&amp;~3))
    20962096VDST = *V; *V = *V - VDATA0  // atomic operation</code></p>
    20972097<h4>DS_SUB_RTN_U64</h4>
     
    21022102Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br />
    21032103Operation:<br />
    2104 <code>UINT64* V = (UINT64*)(DS + (ADDR+OFFSET)&amp;~7)
     2104<code>UINT64* V = (UINT64*)(DS + ((ADDR+OFFSET)&amp;~7))
    21052105VDST = *V; *V = *V - VDATA0  // atomic operation</code></p>
    21062106<h4>DS_SUB_SRC2_U32</h4>
     
    21372137Operation is atomic.<br />
    21382138Operation:<br />
    2139 <code>UINT32* V = (UINT32*)(DS + (ADDR+OFFSET)&amp;~3)
     2139<code>UINT32* V = (UINT32*)(DS + ((ADDR+OFFSET)&amp;~3))
    21402140*V = *V - VDATA0  // atomic operation</code></p>
    21412141<h4>DS_SUB_U64</h4>
     
    21462146Operation is atomic.<br />
    21472147Operation:<br />
    2148 <code>UINT64* V = (UINT64*)(DS + (ADDR+OFFSET)&amp;~7)
     2148<code>UINT64* V = (UINT64*)(DS + ((ADDR+OFFSET)&amp;~7))
    21492149*V = *V - VDATA0  // atomic operation</code></p>
    21502150<h4>DS_SWIZZLE_B32</h4>
     
    21792179Description: Store value from VDATA0 into LDS/GDS at address (ADDR+OFFSET) &amp; ~3.<br />
    21802180Operation:<br />
    2181 <code>UINT32* V = (UINT32*)(DS + (ADDR+OFFSET)&amp;~3)
     2181<code>UINT32* V = (UINT32*)(DS + ((ADDR+OFFSET)&amp;~3))
    21822182*V = VDATA0</code></p>
    21832183<h4>DS_WRITE_B64</h4>
     
    21862186Description: Store 64-bit value from VDATA0 into LDS/GDS at address (ADDR+OFFSET) &amp; ~7.<br />
    21872187Operation:<br />
    2188 <code>UINT64* V = (UINT64*)(DS + (ADDR+OFFSET)&amp;~7)
     2188<code>UINT64* V = (UINT64*)(DS + ((ADDR+OFFSET)&amp;~7))
    21892189*V = VDATA0</code></p>
    21902190<h4>DS_WRITE_B8</h4>
     
    22612261Previous value from LDS/GDS are stored in VDST.<br />
    22622262Operation:<br />
    2263 <code>UINT32* V = (UINT32*)(DS + (ADDR+OFFSET)&amp;~3)
     2263<code>UINT32* V = (UINT32*)(DS + ((ADDR+OFFSET)&amp;~3))
    22642264VDST = *V; *V = VDATA0 // atomic operation</code></p>
    22652265<h4>DS_WRXCHG_RTN_B64</h4>
     
    22692269Previous value from LDS/GDS are stored in VDST.<br />
    22702270Operation:<br />
    2271 <code>UINT32* V = (UINT32*)(DS + (ADDR+OFFSET)&amp;~7)
     2271<code>UINT32* V = (UINT32*)(DS + ((ADDR+OFFSET)&amp;~7))
    22722272VDST = *V; *V = VDATA0 // atomic operation</code></p>
    22732273<h4>DS_WRXCHG2_RTN_B32</h4>
     
    23302330address. Operation is atomic.<br />
    23312331Operation:<br />
    2332 <code>UINT32* V = (UINT32*)(DS + (ADDR+OFFSET)&amp;~3)
     2332<code>UINT32* V = (UINT32*)(DS + ((ADDR+OFFSET)&amp;~3))
    23332333*V = *V ^ VDATA0  // atomic operation</code></p>
    23342334<h4>DS_XOR_B64</h4>
     
    23392339address. Operation is atomic.<br />
    23402340Operation:<br />
    2341 <code>UINT64* V = (UINT64*)(DS + (ADDR+OFFSET)&amp;~7)
     2341<code>UINT64* V = (UINT64*)(DS + ((ADDR+OFFSET)&amp;~7))
    23422342*V = *V ^ VDATA0  // atomic operation</code></p>
    23432343<h4>DS_XOR_RTN_B32</h4>
     
    23482348address. Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br />
    23492349Operation:<br />
    2350 <code>UINT32* V = (UINT32*)(DS + (ADDR+OFFSET)&amp;~3)
     2350<code>UINT32* V = (UINT32*)(DS + ((ADDR+OFFSET)&amp;~3))
    23512351VDST = *V; *V = *V ^ VDATA0  // atomic operation</code></p>
    23522352<h4>DS_XOR_RTN_B64</h4>
     
    23572357address. Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br />
    23582358Operation:<br />
    2359 <code>UINT64* V = (UINT64*)(DS + (ADDR+OFFSET)&amp;~7)
     2359<code>UINT64* V = (UINT64*)(DS + ((ADDR+OFFSET)&amp;~7))
    23602360VDST = *V; *V = *V ^ VDATA0  // atomic operation</code></p>
    23612361<h4>DS_XOR_SRC2_B32</h4>