Changes between Version 9 and Version 10 of GcnInstrsDs
- Timestamp:
- 12/22/15 22:00:17 (8 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
GcnInstrsDs
v9 v10 1088 1088 </tr> 1089 1089 <tr> 1090 <td>20 4 (0xcc)</td>1090 <td>205 (0xcd)</td> 1091 1091 <td>✓</td> 1092 1092 <td>✓</td> 1093 1093 <td>DS_WRITE_SRC2_B64</td> 1094 <td>--</td>1095 </tr>1096 <tr>1097 <td>205 (0xcd)</td>1098 <td></td>1099 <td></td>1100 <td>--</td>1101 1094 <td>DS_WRITE_SRC2_B64</td> 1102 1095 </tr> … … 1217 1210 <p>Opcode: 9 (0x9)<br /> 1218 1211 Syntax: DS_AND_B32 ADDR, VDATA0 [OFFSET:OFFSET]<br /> 1219 Description: Do bitwise AND operati n on 32-bit value from LDS/GDS at address1212 Description: Do bitwise AND operation on 32-bit value from LDS/GDS at address 1220 1213 (ADDR+OFFSET) & ~3, and value from VDATA0; and store result to LDS/GDS at this same 1221 1214 address. Operation is atomic.<br /> … … 1226 1219 <p>Opcode: 73 (0x49)<br /> 1227 1220 Syntax: DS_AND_B64 ADDR, VDATA0(2) [OFFSET:OFFSET]<br /> 1228 Description: Do bitwise AND operati n on 64-bit value from LDS/GDS at address1221 Description: Do bitwise AND operation on 64-bit value from LDS/GDS at address 1229 1222 (ADDR+OFFSET) & ~7, and value from VDATA0; and store result to LDS/GDS at this same 1230 1223 address. Operation is atomic.<br /> … … 1235 1228 <p>Opcode: 41 (0x29)<br /> 1236 1229 Syntax: DS_AND_RTN_B32 VDST, ADDR, VDATA0 [OFFSET:OFFSET]<br /> 1237 Description: Do bitwise AND operati n on 32-bit value from LDS/GDS at address1230 Description: Do bitwise AND operation on 32-bit value from LDS/GDS at address 1238 1231 (ADDR+OFFSET) & ~3, and value from VDATA0; and store result to LDS/GDS at this same 1239 1232 address. Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br /> … … 1244 1237 <p>Opcode: 105 (0x69)<br /> 1245 1238 Syntax: DS_AND_RTN_B64 VDST(2), ADDR, VDATA0(2) [OFFSET:OFFSET]<br /> 1246 Description: Do bitwise AND operati n on 64-bit value from LDS/GDS at address1239 Description: Do bitwise AND operation on 64-bit value from LDS/GDS at address 1247 1240 (ADDR+OFFSET) & ~7, and value from VDATA0; and store result to LDS/GDS at this same 1248 1241 address. Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br /> … … 1253 1246 <p>Opcode: 137 (0x89)<br /> 1254 1247 Syntax: DS_AND_SRC2_B32 ADDR [OFFSET:OFFSET]<br /> 1255 Description: Do bitwise AND operati n on 32-bit value from LDS/GDS at address1248 Description: Do bitwise AND operation on 32-bit value from LDS/GDS at address 1256 1249 A, and at address B; and store result to LDS/GDS at address A. Operation is atomic.<br /> 1257 1250 Operation:<br /> … … 1262 1255 UINT32* V = (UINT32*)(DS + A) 1263 1256 *V = *V & *(UINT32*)(DS + B) // atomic operation</code></p> 1257 <h4>DS_AND_SRC2_B64</h4> 1258 <p>Opcode: 201 (0xc9)<br /> 1259 Syntax: DS_AND_SRC2_B64 ADDR [OFFSET:OFFSET]<br /> 1260 Description: Do bitwise AND operation on 64-bit value from LDS/GDS at address 1261 A, and at address B; and store result to LDS/GDS at address A. Operation is atomic.<br /> 1262 Operation:<br /> 1263 <code>UINT16 A = (OFFSET&0x8000) ? ADDR&0x1fff8 : ADDR&~7 1264 UINT16 B = (A + ((OFFSET&0x8000) ? \ 1265 ((ADDR>>17) | ((ADDR>>16)&0x8000)) : \ 1266 ((OFFSET&07fff) | (OFFSET<<1)&0x8000)) * 4)&~7 1267 UINT64* V = (UINT64*)(DS + A) 1268 *V = *V & *(UINT64*)(DS + B) // atomic operation</code></p> 1264 1269 <h4>DS_CMPST_B32</h4> 1265 1270 <p>Opcode: 16 (0x10)<br /> … … 1369 1374 UINT32* VB = (UINT32*)(DS + B) 1370 1375 *V = (*VB >= *V && *V!=0) ? *V-1 : *VB // atomic operation</code></p> 1376 <h4>DS_DEC_SRC2_U64</h4> 1377 <p>Opcode: 196 (0xc4)<br /> 1378 Syntax: DS_DEC_SRC2_U64 ADDR [OFFSET:OFFSET]<br /> 1379 Description: Load unsigned 64-bit value from LDS/GDS at address A, and compare with unsigned 1380 64-bit value at address B. If value at address B is greater or equal and loaded 1381 unsigned value is not zero, then decrement value from LDS/GDS, otherwise store value 1382 at address B to LDS/GDS at address A. Refer to listing to learn about addressing. 1383 Operation is atomic.<br /> 1384 Operation:<br /> 1385 <code>UINT16 A = (OFFSET&0x8000) ? ADDR&0x1fff8 : ADDR&~7 1386 UINT16 B = (A + ((OFFSET&0x8000) ? \ 1387 ((ADDR>>17) | ((ADDR>>16)&0x8000)) : \ 1388 ((OFFSET&07fff) | (OFFSET<<1)&0x8000)) * 4)&~7 1389 UINT64* V = (UINT64*)(DS + A) 1390 UINT64* VB = (UINT64*)(DS + B) 1391 *V = (*VB >= *V && *V!=0) ? *V-1 : *VB // atomic operation</code></p> 1371 1392 <h4>DS_DEC_U32</h4> 1372 1393 <p>Opcode: 4 (0x4)<br /> … … 1423 1444 UINT32* V = (UINT32*)(DS + A) 1424 1445 *V = (*(UINT32*)(DS + B) > *V) ? *V+1 : 0 // atomic operation</code></p> 1446 <h4>DS_INC_SRC2_U64</h4> 1447 <p>Opcode: 195 (0xc3)<br /> 1448 Syntax: DS_INC_SRC2_U64 ADDR [OFFSET:OFFSET]<br /> 1449 Description: Load unsigned 64-bit value from LDS/GDS at address A, and 1450 compare with unsigned value at address B. If value at address B is greater, 1451 then increment value from LDS/GDS, otherwise store 0 to LDS/GDS at address A. 1452 Refer to listing to learn about addressing. Operation is atomic.<br /> 1453 Operation:<br /> 1454 <code>UINT16 A = (OFFSET&0x8000) ? ADDR&0x1fff8 : ADDR&~7 1455 UINT16 B = (A + ((OFFSET&0x8000) ? \ 1456 ((ADDR>>17) | ((ADDR>>16)&0x8000)) : \ 1457 ((OFFSET&07fff) | (OFFSET<<1)&0x8000)) * 4)&~7 1458 UINT64* V = (UINT64*)(DS + A) 1459 *V = (*(UINT64*)(DS + B) > *V) ? *V+1 : 0 // atomic operation</code></p> 1425 1460 <h4>DS_INC_U32</h4> 1426 1461 <p>Opcode: 3 (0x3)<br /> … … 1544 1579 FLOAT* V = (FLOAT*)(DS + A) 1545 1580 *V = MAX(*V, *(FLOAT*)(DS + B)) // atomic operation</code></p> 1581 <h4>DS_MAX_SRC2_F64</h4> 1582 <p>Opcode: 211 (0xd3)<br /> 1583 Syntax: DS_MAX_SRC2_F64 ADDR [OFFSET:OFFSET]<br /> 1584 Description: Choose greatest double floating point value from LDS/GDS at address 1585 A and at address B, and store result to LDS/GDS at address A. 1586 Refer to listing to learn about addressing. Operation is atomic.<br /> 1587 Operation:<br /> 1588 <code>UINT16 A = (OFFSET&0x8000) ? ADDR&0x1fff8 : ADDR&~7 1589 UINT16 B = (A + ((OFFSET&0x8000) ? \ 1590 ((ADDR>>17) | ((ADDR>>16)&0x8000)) : \ 1591 ((OFFSET&07fff) | (OFFSET<<1)&0x8000)) * 4)&~7 1592 DOUBLE* V = (DOUBLE*)(DS + A) 1593 *V = MAX(*V, *(DOUBLE*)(DS + B)) // atomic operation</code></p> 1546 1594 <h4>DS_MAX_SRC2_I32</h4> 1547 1595 <p>Opcode: 134 (0x86)<br /> … … 1557 1605 INT32* V = (INT32*)(DS + A) 1558 1606 *V = MAX(*V, *(INT32*)(DS + B)) // atomic operation</code></p> 1607 <h4>DS_MAX_SRC2_I64</h4> 1608 <p>Opcode: 198 (0x86)<br /> 1609 Syntax: DS_MAX_SRC2_I64 ADDR [OFFSET:OFFSET]<br /> 1610 Description: Choose greatest signed 64-bit integer value from LDS/GDS at address 1611 A and at address B, and store result to LDS/GDS at address A. 1612 Refer to listing to learn about addressing. Operation is atomic.<br /> 1613 Operation:<br /> 1614 <code>UINT16 A = (OFFSET&0x8000) ? ADDR&0x1fff8 : ADDR&~7 1615 UINT16 B = (A + ((OFFSET&0x8000) ? \ 1616 ((ADDR>>17) | ((ADDR>>16)&0x8000)) : \ 1617 ((OFFSET&07fff) | (OFFSET<<1)&0x8000)) * 4)&~7 1618 INT64* V = (INT64*)(DS + A) 1619 *V = MAX(*V, *(INT64*)(DS + B)) // atomic operation</code></p> 1559 1620 <h4>DS_MAX_SRC2_U32</h4> 1560 1621 <p>Opcode: 136 (0x88)<br /> … … 1570 1631 UINT32* V = (UINT32*)(DS + A) 1571 1632 *V = MAX(*V, *(UINT32*)(DS + B)) // atomic operation</code></p> 1633 <h4>DS_MAX_SRC2_U64</h4> 1634 <p>Opcode: 200 (0xc8)<br /> 1635 Syntax: DS_MAX_SRC2_U64 ADDR [OFFSET:OFFSET]<br /> 1636 Description: Choose greatest unsigned 64-bit integer value from LDS/GDS at address 1637 A and at address B, and store result to LDS/GDS at address A. 1638 Refer to listing to learn about addressing. Operation is atomic.<br /> 1639 Operation:<br /> 1640 <code>UINT16 A = (OFFSET&0x8000) ? ADDR&0x1fff8 : ADDR&~7 1641 UINT16 B = (A + ((OFFSET&0x8000) ? \ 1642 ((ADDR>>17) | ((ADDR>>16)&0x8000)) : \ 1643 ((OFFSET&07fff) | (OFFSET<<1)&0x8000)) * 4)&~7 1644 UINT64* V = (UINT64*)(DS + A) 1645 *V = MAX(*V, *(UINT64*)(DS + B)) // atomic operation</code></p> 1572 1646 <h4>DS_MAX_U32</h4> 1573 1647 <p>Opcode: 8 (0x8)<br /> … … 1691 1765 FLOAT* V = (FLOAT*)(DS + A) 1692 1766 *V = MIN(*V, *(FLOAT*)(DS + B)) // atomic operation</code></p> 1767 <h4>DS_MIN_SRC2_F64</h4> 1768 <p>Opcode: 210 (0xd2)<br /> 1769 Syntax: DS_MIN_SRC2_F64 ADDR [OFFSET:OFFSET]<br /> 1770 Description: Choose smallest double floating point value from LDS/GDS at address 1771 A and at address B, and store result to LDS/GDS at address A. 1772 Refer to listing to learn about addressing. Operation is atomic.<br /> 1773 Operation:<br /> 1774 <code>UINT16 A = (OFFSET&0x8000) ? ADDR&0x1fff8 : ADDR&~7 1775 UINT16 B = (A + ((OFFSET&0x8000) ? \ 1776 ((ADDR>>17) | ((ADDR>>16)&0x8000)) : \ 1777 ((OFFSET&07fff) | (OFFSET<<1)&0x8000)) * 4)&~7 1778 DOUBLE* V = (DOUBLE*)(DS + A) 1779 *V = MIN(*V, *(DOUBLE*)(DS + B)) // atomic operation</code></p> 1693 1780 <h4>DS_MIN_SRC2_I32</h4> 1694 1781 <p>Opcode: 133 (0x85)<br /> … … 1704 1791 INT32* V = (INT32*)(DS + A) 1705 1792 *V = MIN(*V, *(INT32*)(DS + B)) // atomic operation</code></p> 1793 <h4>DS_MIN_SRC2_I64</h4> 1794 <p>Opcode: 197 (0xc5)<br /> 1795 Syntax: DS_MIN_SRC2_I64 ADDR [OFFSET:OFFSET]<br /> 1796 Description: Choose smallest signed 64-bit integer value from LDS/GDS at address 1797 A and at address B, and store result to LDS/GDS at address A. 1798 Refer to listing to learn about addressing. Operation is atomic.<br /> 1799 Operation:<br /> 1800 <code>UINT16 A = (OFFSET&0x8000) ? ADDR&0x1fff8 : ADDR&~7 1801 UINT16 B = A + (((OFFSET&0x8000) ? \ 1802 ((ADDR>>17) | ((ADDR>>16)&0x8000)) : \ 1803 ((OFFSET&07fff) | (OFFSET<<1)&0x8000)) * 4)&~7 1804 INT64* V = (INT64*)(DS + A) 1805 *V = MIN(*V, *(INT64*)(DS + B)) // atomic operation</code></p> 1706 1806 <h4>DS_MIN_SRC2_U32</h4> 1707 1807 <p>Opcode: 135 (0x87)<br /> … … 1717 1817 UINT32* V = (UINT32*)(DS + A) 1718 1818 *V = MIN(*V, *(UINT32*)(DS + B)) // atomic operation</code></p> 1819 <h4>DS_MIN_SRC2_U64</h4> 1820 <p>Opcode: 199 (0xc7)<br /> 1821 Syntax: DS_MIN_SRC2_U64 ADDR [OFFSET:OFFSET]<br /> 1822 Description: Choose smallest unsigned 64-bit integer value from LDS/GDS at address 1823 A and at address B, and store result to LDS/GDS at address A. 1824 Refer to listing to learn about addressing. Operation is atomic.<br /> 1825 Operation:<br /> 1826 <code>UINT16 A = (OFFSET&0x8000) ? ADDR&0x1fff8 : ADDR&~7 1827 UINT16 B = (A + ((OFFSET&0x8000) ? \ 1828 ((ADDR>>17) | ((ADDR>>16)&0x8000)) : \ 1829 ((OFFSET&07fff) | (OFFSET<<1)&0x8000)) * 4)&~7 1830 UINT64* V = (UINT64*)(DS + A) 1831 *V = MIN(*V, *(UINT64*)(DS + B)) // atomic operation</code></p> 1719 1832 <h4>DS_MIN_U32</h4> 1720 1833 <p>Opcode: 7 (0x7)<br /> … … 1780 1893 <p>Opcode: 10 (0xa)<br /> 1781 1894 Syntax: DS_OR_B32 ADDR, VDATA0 [OFFSET:OFFSET]<br /> 1782 Description: Do bitwise OR operati n on 32-bit value from LDS/GDS at address1895 Description: Do bitwise OR operation on 32-bit value from LDS/GDS at address 1783 1896 (ADDR+OFFSET) & ~3, and value from VDATA0; and store result to LDS/GDS at this same 1784 1897 address. Operation is atomic.<br /> … … 1789 1902 <p>Opcode: 74 (0x4a)<br /> 1790 1903 Syntax: DS_OR_B64 ADDR, VDATA0(2) [OFFSET:OFFSET]<br /> 1791 Description: Do bitwise OR operati n on 64-bit value from LDS/GDS at address1904 Description: Do bitwise OR operation on 64-bit value from LDS/GDS at address 1792 1905 (ADDR+OFFSET) & ~7, and value from VDATA0; and store result to LDS/GDS at this same 1793 1906 address. Operation is atomic.<br /> … … 1798 1911 <p>Opcode: 42 (0x2a)<br /> 1799 1912 Syntax: DS_OR_RTN_B32 VDST, ADDR, VDATA0 [OFFSET:OFFSET]<br /> 1800 Description: Do bitwise OR operati n on 32-bit value from LDS/GDS at address1913 Description: Do bitwise OR operation on 32-bit value from LDS/GDS at address 1801 1914 (ADDR+OFFSET) & ~3, and value from VDATA0; and store result to LDS/GDS at this same 1802 1915 address. Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br /> … … 1807 1920 <p>Opcode: 106 (0x6a)<br /> 1808 1921 Syntax: DS_OR_RTN_B64 VDST(2), ADDR, VDATA0(2) [OFFSET:OFFSET]<br /> 1809 Description: Do bitwise OR operati n on 32-bit value from LDS/GDS at address1922 Description: Do bitwise OR operation on 32-bit value from LDS/GDS at address 1810 1923 (ADDR+OFFSET) & ~7, and value from VDATA0; and store result to LDS/GDS at this same 1811 1924 address. Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br /> … … 1816 1929 <p>Opcode: 138 (0x8a)<br /> 1817 1930 Syntax: DS_OR_SRC2_B32 ADDR [OFFSET:OFFSET]<br /> 1818 Description: Do bitwise OR operati n on 32-bit value from LDS/GDS at address1931 Description: Do bitwise OR operation on 32-bit value from LDS/GDS at address 1819 1932 A, and at address B; and store result to LDS/GDS at address A. Operation is atomic.<br /> 1820 1933 Operation:<br /> … … 1825 1938 UINT32* V = (UINT32*)(DS + A) 1826 1939 *V = *V | *(UINT32*)(DS + B) // atomic operation</code></p> 1940 <h4>DS_OR_SRC2_B64</h4> 1941 <p>Opcode: 202 (0xca)<br /> 1942 Syntax: DS_OR_SRC2_B64 ADDR [OFFSET:OFFSET]<br /> 1943 Description: Do bitwise OR operation on 64-bit value from LDS/GDS at address 1944 A, and at address B; and store result to LDS/GDS at address A. Operation is atomic.<br /> 1945 Operation:<br /> 1946 <code>UINT16 A = (OFFSET&0x8000) ? ADDR&0x1fff8 : ADDR&~7 1947 UINT16 B = (A + ((OFFSET&0x8000) ? \ 1948 ((ADDR>>17) | ((ADDR>>16)&0x8000)) : \ 1949 ((OFFSET&07fff) | (OFFSET<<1)&0x8000)) * 4)&~7 1950 UINT64* V = (UINT64*)(DS + A) 1951 *V = *V | *(UINT64*)(DS + B) // atomic operation</code></p> 1827 1952 <h4>DS_READ_B32</h4> 1828 1953 <p>Opcode: 54 (0x36)<br /> … … 1925 2050 UINT32* V = (UINT32*)(DS + A) 1926 2051 *V = *(UINT32*)(DS + B) - *V // atomic operation</code></p> 2052 <h4>DS_RSUB_SRC2_U64</h4> 2053 <p>Opcode: 194 (0xc2)<br /> 2054 Syntax: DS_RSUB_SRC2_U64 ADDR [OFFSET:OFFSET]<br /> 2055 Description: Subtract unsigned integer value from LDS/GDS at address A from 2056 value at address B, and store result back to LDS/GDS at address A. 2057 Refer to listing to learn about addressing. Operation is atomic.<br /> 2058 Operation:<br /> 2059 <code>UINT16 A = (OFFSET&0x8000) ? ADDR&0x1fff8 : ADDR&~7 2060 UINT16 B = (A + ((OFFSET&0x8000) ? \ 2061 ((ADDR>>17) | ((ADDR>>16)&0x8000)) : \ 2062 ((OFFSET&07fff) | (OFFSET<<1)&0x8000)) * 4)&~7 2063 UINT64* V = (UINT64*)(DS + A) 2064 *V = *(UINT64*)(DS + B) - *V // atomic operation</code></p> 1927 2065 <h4>DS_RSUB_U32</h4> 1928 2066 <p>Opcode: 2 (0x2)<br /> … … 1974 2112 UINT32* V = (UINT32*)(DS + A) 1975 2113 *V = *V - *(UINT32*)(DS + B) // atomic operation</code></p> 1976 <h4>DS_ ADD_SRC2_U64</h4>2114 <h4>DS_SUB_SRC2_U64</h4> 1977 2115 <p>Opcode: 193 (0xc1)<br /> 1978 2116 Syntax: DS_SUB_SRC2_U64 ADDR [OFFSET:OFFSET]<br /> … … 2062 2200 ((OFFSET&07fff) | (OFFSET<<1)&0x8000)) * 4 2063 2201 *(UINT32*)(DS + A) = *(UINT32*)(DS + B)</code></p> 2202 <h4>DS_WRITE_SRC2_B64</h4> 2203 <p>Opcode: 205 (0xcd)<br /> 2204 Syntax: DS_WRITE_SRC2_B64 ADDR [OFFSET:OFFSET]<br /> 2205 Description: Store 64-bit value from LDS/GDS at address B into LDS/GDS at address A.<br /> 2206 Operation:<br /> 2207 <code>UINT16 A = (OFFSET&0x8000) ? ADDR&0x1fff8 : ADDR&~7 2208 UINT16 B = (A + ((OFFSET&0x8000) ? \ 2209 ((ADDR>>17) | ((ADDR>>16)&0x8000)) : \ 2210 ((OFFSET&07fff) | (OFFSET<<1)&0x8000)) * 4)&~7 2211 *(UINT64*)(DS + A) = *(UINT64*)(DS + B)</code></p> 2064 2212 <h4>DS_WRITE2_B32</h4> 2065 2213 <p>Opcode: 14 (0xe)<br /> … … 2173 2321 <p>Opcode: 11 (0xb)<br /> 2174 2322 Syntax: DS_XOR_B32 ADDR, VDATA0 [OFFSET:OFFSET]<br /> 2175 Description: Do bitwise XOR operati n on 32-bit value from LDS/GDS at address2323 Description: Do bitwise XOR operation on 32-bit value from LDS/GDS at address 2176 2324 (ADDR+OFFSET) & ~3, and value from VDATA0; and store result to LDS/GDS at this same 2177 2325 address. Operation is atomic.<br /> … … 2182 2330 <p>Opcode: 75 (0x4b)<br /> 2183 2331 Syntax: DS_XOR_B64 ADDR, VDATA0(2) [OFFSET:OFFSET]<br /> 2184 Description: Do bitwise XOR operati n on 64-bit value from LDS/GDS at address2332 Description: Do bitwise XOR operation on 64-bit value from LDS/GDS at address 2185 2333 (ADDR+OFFSET) & ~7, and value from VDATA0; and store result to LDS/GDS at this same 2186 2334 address. Operation is atomic.<br /> … … 2191 2339 <p>Opcode: 43 (0x2b)<br /> 2192 2340 Syntax: DS_XOR_RTN_B32 VDST, ADDR, VDATA0 [OFFSET:OFFSET]<br /> 2193 Description: Do bitwise XOR operati n on 32-bit value from LDS/GDS at address2341 Description: Do bitwise XOR operation on 32-bit value from LDS/GDS at address 2194 2342 (ADDR+OFFSET) & ~3, and value from VDATA0; and store result to LDS/GDS at this same 2195 2343 address. Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br /> … … 2200 2348 <p>Opcode: 107 (0x6b)<br /> 2201 2349 Syntax: DS_XOR_RTN_B64 VDST(2), ADDR, VDATA0(2) [OFFSET:OFFSET]<br /> 2202 Description: Do bitwise XOR operati n on 64-bit value from LDS/GDS at address2350 Description: Do bitwise XOR operation on 64-bit value from LDS/GDS at address 2203 2351 (ADDR+OFFSET) & ~7, and value from VDATA0; and store result to LDS/GDS at this same 2204 2352 address. Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br /> … … 2209 2357 <p>Opcode: 139 (0x8b)<br /> 2210 2358 Syntax: DS_XOR_SRC2_B32 ADDR [OFFSET:OFFSET]<br /> 2211 Description: Do bitwise XOR operati n on 32-bit value from LDS/GDS at address2359 Description: Do bitwise XOR operation on 32-bit value from LDS/GDS at address 2212 2360 A, and at address B; and store result to LDS/GDS at address A. Operation is atomic.<br /> 2213 2361 Operation:<br /> … … 2218 2366 UINT32* V = (UINT32*)(DS + A) 2219 2367 *V = *V | *(UINT32*)(DS + B) // atomic operation</code></p> 2368 <h4>DS_XOR_SRC2_B64</h4> 2369 <p>Opcode: 203 (0xcb)<br /> 2370 Syntax: DS_XOR_SRC2_B64 ADDR [OFFSET:OFFSET]<br /> 2371 Description: Do bitwise XOR operation on 64-bit value from LDS/GDS at address 2372 A, and at address B; and store result to LDS/GDS at address A. Operation is atomic.<br /> 2373 Operation:<br /> 2374 <code>UINT16 A = (OFFSET&0x8000) ? ADDR&0x1fff8 : ADDR&~7 2375 UINT16 B = (A + ((OFFSET&0x8000) ? \ 2376 ((ADDR>>17) | ((ADDR>>16)&0x8000)) : \ 2377 ((OFFSET&07fff) | (OFFSET<<1)&0x8000)) * 4)&~7 2378 UINT64* V = (UINT64*)(DS + A) 2379 *V = *V | *(UINT64*)(DS + B) // atomic operation</code></p> 2220 2380 }}}