Changes between Version 11 and Version 12 of GcnInstrsDs
- Timestamp:
- 12/23/15 00:00:18 (8 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
GcnInstrsDs
v11 v12 1159 1159 LDS/GDS are stored in VDST. Operation is atomic.<br /> 1160 1160 Operation:<br /> 1161 <code>UINT32* V = (UINT32*)(DS + ( ADDR+OFFSET)&~3)1161 <code>UINT32* V = (UINT32*)(DS + ((ADDR+OFFSET)&~3)) 1162 1162 VDST = *V; *V = *V + VDATA0 // atomic operation</code></p> 1163 1163 <h4>DS_ADD_RTN_U64</h4> … … 1168 1168 LDS/GDS are stored in VDST. Operation is atomic.<br /> 1169 1169 Operation:<br /> 1170 <code>UINT64* V = (UINT64*)(DS + ( ADDR+OFFSET)&~7)1170 <code>UINT64* V = (UINT64*)(DS + ((ADDR+OFFSET)&~7)) 1171 1171 VDST = *V; *V = *V + VDATA0 // atomic operation</code></p> 1172 1172 <h4>DS_ADD_SRC2_U32</h4> … … 1202 1202 VDATA0, and store result back to LDS/GDS at this address. Operation is atomic.<br /> 1203 1203 Operation:<br /> 1204 <code>UINT32* V = (UINT32*)(DS + ( ADDR+OFFSET)&~3)1204 <code>UINT32* V = (UINT32*)(DS + ((ADDR+OFFSET)&~3)) 1205 1205 *V = *V + VDATA0 // atomic operation</code></p> 1206 1206 <h4>DS_ADD_U64</h4> … … 1210 1210 and VDATA0, and store result back to LDS/GDS at this address. Operation is atomic.<br /> 1211 1211 Operation:<br /> 1212 <code>UINT64* V = (UINT64*)(DS + ( ADDR+OFFSET)&~7)1212 <code>UINT64* V = (UINT64*)(DS + ((ADDR+OFFSET)&~7)) 1213 1213 *V = *V + VDATA0 // atomic operation</code></p> 1214 1214 <h4>DS_AND_B32</h4> … … 1219 1219 address. Operation is atomic.<br /> 1220 1220 Operation:<br /> 1221 <code>UINT32* V = (UINT32*)(DS + ( ADDR+OFFSET)&~3)1221 <code>UINT32* V = (UINT32*)(DS + ((ADDR+OFFSET)&~3)) 1222 1222 *V = *V & VDATA0 // atomic operation</code></p> 1223 1223 <h4>DS_AND_B64</h4> … … 1228 1228 address. Operation is atomic.<br /> 1229 1229 Operation:<br /> 1230 <code>UINT64* V = (UINT64*)(DS + ( ADDR+OFFSET)&~7)1230 <code>UINT64* V = (UINT64*)(DS + ((ADDR+OFFSET)&~7)) 1231 1231 *V = *V & VDATA0 // atomic operation</code></p> 1232 1232 <h4>DS_AND_RTN_B32</h4> … … 1237 1237 address. Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br /> 1238 1238 Operation:<br /> 1239 <code>UINT32* V = (UINT32*)(DS + ( ADDR+OFFSET)&~3)1239 <code>UINT32* V = (UINT32*)(DS + ((ADDR+OFFSET)&~3)) 1240 1240 VDST = *V; *V = *V & VDATA0 // atomic operation</code></p> 1241 1241 <h4>DS_AND_RTN_B64</h4> … … 1246 1246 address. Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br /> 1247 1247 Operation:<br /> 1248 <code>UINT64* V = (UINT64*)(DS + ( ADDR+OFFSET)&~7)1248 <code>UINT64* V = (UINT64*)(DS + ((ADDR+OFFSET)&~7)) 1249 1249 VDST = *V; *V = *V & VDATA0 // atomic operation</code></p> 1250 1250 <h4>DS_AND_SRC2_B32</h4> … … 1279 1279 Operation is atomic.<br /> 1280 1280 Operation:<br /> 1281 <code>UINT32* V = (UINT32*)(DS + ( ADDR+OFFSET)&~3)1281 <code>UINT32* V = (UINT32*)(DS + ((ADDR+OFFSET)&~3)) 1282 1282 *V = (*V==VDATA0) ? VDATA1 : *V // atomic operation</code></p> 1283 1283 <h4>DS_CMPST_B64</h4> … … 1288 1288 otherwise do nothing. Operation is atomic.<br /> 1289 1289 Operation:<br /> 1290 <code>UINT64* V = (UINT64*)(DS + ( ADDR+OFFSET)&~7)1290 <code>UINT64* V = (UINT64*)(DS + ((ADDR+OFFSET)&~7)) 1291 1291 *V = (*V==VDATA0) ? VDATA1 : *V // atomic operation</code></p> 1292 1292 <h4>DS_CMPST_F32</h4> … … 1297 1297 otherwise do nothing. Operation is atomic.<br /> 1298 1298 Operation:<br /> 1299 <code>FLOAT* V = (FLOAT*)(DS + ( ADDR+OFFSET)&~3)1299 <code>FLOAT* V = (FLOAT*)(DS + ((ADDR+OFFSET)&~3)) 1300 1300 *V = (*V==ASFLOATR(VDATA0)) ? ASFLOAT(VDATA1) : *V // atomic operation</code></p> 1301 1301 <h4>DS_CMPST_F64</h4> … … 1306 1306 otherwise do nothing. Operation is atomic.<br /> 1307 1307 Operation:<br /> 1308 <code>DOUBLE* V = (DOUBLE*)(DS + ( ADDR+OFFSET)&~7)1308 <code>DOUBLE* V = (DOUBLE*)(DS + ((ADDR+OFFSET)&~7)) 1309 1309 *V = (*V==ASDOUBLE(VDATA0)) ? ASDOUBLE(VDATA1) : *V // atomic operation</code></p> 1310 1310 <h4>DS_CMPST_RTN_B32</h4> … … 1315 1315 Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br /> 1316 1316 Operation:<br /> 1317 <code>UINT32* V = (UINT32*)(DS + ( ADDR+OFFSET)&~3)1317 <code>UINT32* V = (UINT32*)(DS + ((ADDR+OFFSET)&~3)) 1318 1318 *V = VDST; *V = (*V==VDATA0) ? VDATA1 : *V // atomic operation</code></p> 1319 1319 <h4>DS_CMPST_RTN_B64</h4> … … 1324 1324 otherwise do nothing. Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br /> 1325 1325 Operation:<br /> 1326 <code>UINT64* V = (UINT64*)(DS + ( ADDR+OFFSET)&~7)1326 <code>UINT64* V = (UINT64*)(DS + ((ADDR+OFFSET)&~7)) 1327 1327 *V = VDST; *V = (*V==VDATA0) ? VDATA1 : *V // atomic operation</code></p> 1328 1328 <h4>DS_CMPST_RTN_F32</h4> … … 1333 1333 otherwise do nothing. Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br /> 1334 1334 Operation:<br /> 1335 <code>FLOAT* V = (FLOAT*)(DS + ( ADDR+OFFSET)&~3)1335 <code>FLOAT* V = (FLOAT*)(DS + ((ADDR+OFFSET)&~3)) 1336 1336 VDST = *V; *V = (*V==ASFLOAT(VDATA0)) ? ASFLOAT(VDATA1) : *V // atomic operation</code></p> 1337 <h4>DS_CMPST_RTN_F 32</h4>1337 <h4>DS_CMPST_RTN_F64</h4> 1338 1338 <p>Opcode: 113 (0x71)<br /> 1339 1339 Syntax: DS_CMPST_RTN_F64 VDST(2), ADDR, VDATA0(2), VDATA1(2) [OFFSET:OFFSET]<br /> … … 1342 1342 otherwise do nothing. Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br /> 1343 1343 Operation:<br /> 1344 <code>DOUBLE* V = (DOUBLE*)(DS + ( ADDR+OFFSET)&~7)1344 <code>DOUBLE* V = (DOUBLE*)(DS + ((ADDR+OFFSET)&~7)) 1345 1345 VDST = *V; *V = (*V==ASDOUBLE(VDATA0)) ? ASDOUBLE(VDATA1) : *V // atomic operation</code></p> 1346 1346 <h4>DS_DEC_RTN_U32</h4> … … 1352 1352 VDATA0 to LDS/GDS. Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br /> 1353 1353 Operation:<br /> 1354 <code>UINT32* V = (UINT32*)(DS + ( ADDR+OFFSET)&~3)1354 <code>UINT32* V = (UINT32*)(DS + ((ADDR+OFFSET)&~3)) 1355 1355 VDST = *V; *V = (VDATA0 >= *V && *V!=0) ? *V-1 : VDATA0 // atomic operation</code></p> 1356 1356 <h4>DS_DEC_RTN_U64</h4> … … 1362 1362 VDATA0 to LDS/GDS. Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br /> 1363 1363 Operation:<br /> 1364 <code>UINT64* V = (UINT64*)(DS + ( ADDR+OFFSET)&~7)1364 <code>UINT64* V = (UINT64*)(DS + ((ADDR+OFFSET)&~7)) 1365 1365 VDST = *V; *V = (VDATA0 >= *V && *V!=0) ? *V-1 : VDATA0 // atomic operation</code></p> 1366 1366 <h4>DS_DEC_SRC2_U32</h4> … … 1403 1403 VDATA0 to LDS/GDS. Operation is atomic.<br /> 1404 1404 Operation:<br /> 1405 <code>UINT32* V = (UINT32*)(DS + ( ADDR+OFFSET)&~3)1405 <code>UINT32* V = (UINT32*)(DS + ((ADDR+OFFSET)&~3)) 1406 1406 *V = (VDATA0 >= *V && *V!=0) ? *V-1 : VDATA0 // atomic operation</code></p> 1407 1407 <h4>DS_DEC_U64</h4> … … 1413 1413 VDATA0 to LDS/GDS. Operation is atomic.<br /> 1414 1414 Operation:<br /> 1415 <code>UINT64* V = (UINT64*)(DS + ( ADDR+OFFSET)&~7)1415 <code>UINT64* V = (UINT64*)(DS + ((ADDR+OFFSET)&~7)) 1416 1416 *V = (VDATA0 >= *V && *V!=0) ? *V-1 : VDATA0 // atomic operation</code></p> 1417 1417 <h4>DS_INC_RTN_U32</h4> … … 1423 1423 Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br /> 1424 1424 Operation:<br /> 1425 <code>UINT32* V = (UINT32*)(DS + ( ADDR+OFFSET)&~3)1425 <code>UINT32* V = (UINT32*)(DS + ((ADDR+OFFSET)&~3)) 1426 1426 VDST = *V; *V = (VDATA0 > *V) ? *V+1 : 0 // atomic operation</code></p> 1427 1427 <h4>DS_INC_RTN_U64</h4> … … 1433 1433 Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br /> 1434 1434 Operation:<br /> 1435 <code>UINT64* V = (UINT64*)(DS + ( ADDR+OFFSET)&~7)1435 <code>UINT64* V = (UINT64*)(DS + ((ADDR+OFFSET)&~7)) 1436 1436 VDST = *V; *V = (VDATA0 > *V) ? *V+1 : 0 // atomic operation</code></p> 1437 1437 <h4>DS_INC_SRC2_U32</h4> … … 1470 1470 from LDS/GDS, otherwise store 0 to LDS/GDS. Operation is atomic.<br /> 1471 1471 Operation:<br /> 1472 <code>UINT32* V = (UINT32*)(DS + ( ADDR+OFFSET)&~3)1472 <code>UINT32* V = (UINT32*)(DS + ((ADDR+OFFSET)&~3)) 1473 1473 *V = (VDATA0 > *V) ? *V+1 : 0 // atomic operation</code></p> 1474 1474 <h4>DS_INC_U64</h4> … … 1479 1479 from LDS/GDS, otherwise store 0 to LDS/GDS. Operation is atomic.<br /> 1480 1480 Operation:<br /> 1481 <code>UINT64* V = (UINT64*)(DS + ( ADDR+OFFSET)&~7)1481 <code>UINT64* V = (UINT64*)(DS + ((ADDR+OFFSET)&~7)) 1482 1482 *V = (VDATA0 > *V) ? *V+1 : 0 // atomic operation</code></p> 1483 1483 <h4>DS_MAX_F32</h4> … … 1488 1488 Operation is atomic.<br /> 1489 1489 Operation:<br /> 1490 <code>FLOAT* V = (FLOAT*)(DS + ( ADDR+OFFSET)&~3)1490 <code>FLOAT* V = (FLOAT*)(DS + ((ADDR+OFFSET)&~3)) 1491 1491 *V = MAX(*V, ASFLOAT(VDATA0)) // atomic operation</code></p> 1492 1492 <h4>DS_MAX_F64</h4> … … 1497 1497 Operation is atomic.<br /> 1498 1498 Operation:<br /> 1499 <code>DOUBLE* V = (DOUBLE*)(DS + ( ADDR+OFFSET)&~7)1499 <code>DOUBLE* V = (DOUBLE*)(DS + ((ADDR+OFFSET)&~7)) 1500 1500 *V = MAX(*V, ASDOUBLE(VDATA0)) // atomic operation</code></p> 1501 1501 <h4>DS_MAX_I32</h4> … … 1506 1506 Operation is atomic.<br /> 1507 1507 Operation:<br /> 1508 <code>INT32* V = (INT32*)(DS + ( ADDR+OFFSET)&~3)1508 <code>INT32* V = (INT32*)(DS + ((ADDR+OFFSET)&~3)) 1509 1509 *V = MAX(*V, (INT32)VDATA0) // atomic operation</code></p> 1510 1510 <h4>DS_MAX_I64</h4> … … 1515 1515 Operation is atomic.<br /> 1516 1516 Operation:<br /> 1517 <code>INT64* V = (INT64*)(DS + ( ADDR+OFFSET)&~7)1517 <code>INT64* V = (INT64*)(DS + ((ADDR+OFFSET)&~7)) 1518 1518 *V = MAX(*V, (INT64)VDATA0) // atomic operation</code></p> 1519 1519 <h4>DS_MAX_RTN_F32</h4> … … 1524 1524 Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br /> 1525 1525 Operation:<br /> 1526 <code>FLOAT* V = (FLOAT*)(DS + ( ADDR+OFFSET)&~3)1526 <code>FLOAT* V = (FLOAT*)(DS + ((ADDR+OFFSET)&~3)) 1527 1527 VDST = *V; *V = MAX(*V, ASFLOAT(VDATA0)) // atomic operation</code></p> 1528 1528 <h4>DS_MAX_RTN_F64</h4> … … 1533 1533 Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br /> 1534 1534 Operation:<br /> 1535 <code>DOUBLE* V = (DOUBLE*)(DS + ( ADDR+OFFSET)&~7)1535 <code>DOUBLE* V = (DOUBLE*)(DS + ((ADDR+OFFSET)&~7)) 1536 1536 VDST = *V; *V = MAX(*V, ASDOUBLE(VDATA0)) // atomic operation</code></p> 1537 1537 <h4>DS_MAX_RTN_I32</h4> … … 1542 1542 Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br /> 1543 1543 Operation:<br /> 1544 <code>INT32* V = (INT32*)(DS + ( ADDR+OFFSET)&~3)1544 <code>INT32* V = (INT32*)(DS + ((ADDR+OFFSET)&~3)) 1545 1545 VDST = *V; *V = MAX(*V, (INT32)VDATA0) // atomic operation</code></p> 1546 1546 <h4>DS_MAX_RTN_I64</h4> … … 1551 1551 Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br /> 1552 1552 Operation:<br /> 1553 <code>INT64* V = (INT64*)(DS + ( ADDR+OFFSET)&~7)1553 <code>INT64* V = (INT64*)(DS + ((ADDR+OFFSET)&~7)) 1554 1554 VDST = *V; *V = MAX(*V, (INT64)VDATA0) // atomic operation</code></p> 1555 1555 <h4>DS_MAX_RTN_U32</h4> … … 1560 1560 Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br /> 1561 1561 Operation:<br /> 1562 <code>UINT32* V = (UINT32*)(DS + ( ADDR+OFFSET)&~3)1562 <code>UINT32* V = (UINT32*)(DS + ((ADDR+OFFSET)&~3)) 1563 1563 VDST = *V; *V = MAX(*V, VDATA0) // atomic operation</code></p> 1564 1564 <h4>DS_MAX_RTN_U64</h4> … … 1569 1569 Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br /> 1570 1570 Operation:<br /> 1571 <code>UINT64* V = (UINT64*)(DS + ( ADDR+OFFSET)&~7)1571 <code>UINT64* V = (UINT64*)(DS + ((ADDR+OFFSET)&~7)) 1572 1572 VDST = *V; *V = MAX(*V, VDATA0) // atomic operation</code></p> 1573 1573 <h4>DS_MAX_SRC2_F32</h4> … … 1656 1656 Operation is atomic.<br /> 1657 1657 Operation:<br /> 1658 <code>UINT32* V = (UINT32*)(DS + ( ADDR+OFFSET)&~3)1658 <code>UINT32* V = (UINT32*)(DS + ((ADDR+OFFSET)&~3)) 1659 1659 *V = MAX(*V, VDATA0) // atomic operation</code></p> 1660 1660 <h4>DS_MAX_U64</h4> … … 1665 1665 Operation is atomic.<br /> 1666 1666 Operation:<br /> 1667 <code>UINT64* V = (UINT64*)(DS + ( ADDR+OFFSET)&~7)1667 <code>UINT64* V = (UINT64*)(DS + ((ADDR+OFFSET)&~7)) 1668 1668 *V = MAX(*V, VDATA0) // atomic operation</code></p> 1669 1669 <h4>DS_MIN_F32</h4> … … 1674 1674 Operation is atomic.<br /> 1675 1675 Operation:<br /> 1676 <code>FLOAT* V = (FLOAT*)(DS + ( ADDR+OFFSET)&~3)1676 <code>FLOAT* V = (FLOAT*)(DS + ((ADDR+OFFSET)&~3)) 1677 1677 *V = MIN(*V, ASFLOAT(VDATA0)) // atomic operation</code></p> 1678 1678 <h4>DS_MIN_F64</h4> … … 1683 1683 Operation is atomic.<br /> 1684 1684 Operation:<br /> 1685 <code>DOUBLE* V = (DOUBLE*)(DS + ( ADDR+OFFSET)&~7)1685 <code>DOUBLE* V = (DOUBLE*)(DS + ((ADDR+OFFSET)&~7)) 1686 1686 *V = MIN(*V, ASDOUBLE(VDATA0)) // atomic operation</code></p> 1687 1687 <h4>DS_MIN_I32</h4> … … 1692 1692 Operation is atomic.<br /> 1693 1693 Operation:<br /> 1694 <code>INT32* V = (INT32*)(DS + ( ADDR+OFFSET)&~3)1694 <code>INT32* V = (INT32*)(DS + ((ADDR+OFFSET)&~3)) 1695 1695 *V = MIN(*V, (INT32)VDATA0) // atomic operation</code></p> 1696 1696 <h4>DS_MIN_I64</h4> 1697 <p>Opcode: 69 (0x 65)<br />1697 <p>Opcode: 69 (0x45)<br /> 1698 1698 Syntax: DS_MIN_I64 ADDR, VDATA0(2) [OFFSET:OFFSET]<br /> 1699 1699 Description: Choose smallest signed 64-bit integer value from LDS/GDS at address … … 1701 1701 Operation is atomic.<br /> 1702 1702 Operation:<br /> 1703 <code>INT64* V = (INT64*)(DS + ( ADDR+OFFSET)&~7)1703 <code>INT64* V = (INT64*)(DS + ((ADDR+OFFSET)&~7)) 1704 1704 *V = MIN(*V, (INT64)VDATA0) // atomic operation</code></p> 1705 1705 <h4>DS_MIN_RTN_F32</h4> … … 1710 1710 Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br /> 1711 1711 Operation:<br /> 1712 <code>FLOAT* V = (FLOAT*)(DS + ( ADDR+OFFSET)&~3)1712 <code>FLOAT* V = (FLOAT*)(DS + ((ADDR+OFFSET)&~3)) 1713 1713 VDST = *V; *V = MIN(*V, ASFLOAT(VDATA0)) // atomic operation</code></p> 1714 1714 <h4>DS_MIN_RTN_F64</h4> … … 1719 1719 Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br /> 1720 1720 Operation:<br /> 1721 <code>DOUBLE* V = (FLOAT*)(DS + ( ADDR+OFFSET)&~7)1721 <code>DOUBLE* V = (FLOAT*)(DS + ((ADDR+OFFSET)&~7)) 1722 1722 VDST = *V; *V = MIN(*V, ASDOUBLE(VDATA0)) // atomic operation</code></p> 1723 1723 <h4>DS_MIN_RTN_I32</h4> … … 1728 1728 Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br /> 1729 1729 Operation:<br /> 1730 <code>INT32* V = (INT32*)(DS + ( ADDR+OFFSET)&~3)1730 <code>INT32* V = (INT32*)(DS + ((ADDR+OFFSET)&~3)) 1731 1731 VDST = *V; *V = MIN(*V, (INT32)VDATA0) // atomic operation</code></p> 1732 1732 <h4>DS_MIN_RTN_I64</h4> … … 1737 1737 Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br /> 1738 1738 Operation:<br /> 1739 <code>INT64 V = (INT64*)(DS + ( ADDR+OFFSET)&~7)1739 <code>INT64 V = (INT64*)(DS + ((ADDR+OFFSET)&~7)) 1740 1740 VDST = *V; *V = MIN(*V, (INT64)VDATA0) // atomic operation</code></p> 1741 1741 <h4>DS_MIN_RTN_U32</h4> … … 1746 1746 Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br /> 1747 1747 Operation:<br /> 1748 <code>UINT32* V = (UINT32*)(DS + ( ADDR+OFFSET)&~3)1748 <code>UINT32* V = (UINT32*)(DS + ((ADDR+OFFSET)&~3)) 1749 1749 VDST = *V; *V = MIN(*V, VDATA0) // atomic operation</code></p> 1750 1750 <h4>DS_MIN_RTN_U64</h4> … … 1755 1755 Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br /> 1756 1756 Operation:<br /> 1757 <code>UINT64* V = (UINT64*)(DS + ( ADDR+OFFSET)&~7)1757 <code>UINT64* V = (UINT64*)(DS + ((ADDR+OFFSET)&~7)) 1758 1758 VDST = *V; *V = MIN(*V, VDATA0) // atomic operation</code></p> 1759 1759 <h4>DS_MIN_SRC2_F32</h4> … … 1842 1842 Operation is atomic.<br /> 1843 1843 Operation:<br /> 1844 <code>UINT32* V = (UINT32*)(DS + ( ADDR+OFFSET)&~3)1844 <code>UINT32* V = (UINT32*)(DS + ((ADDR+OFFSET)&~3)) 1845 1845 *V = MIN(*V, VDATA0) // atomic operation</code></p> 1846 1846 <h4>DS_MIN_U64</h4> … … 1851 1851 Operation is atomic.<br /> 1852 1852 Operation:<br /> 1853 <code>UINT64* V = (UINT64*)(DS + ( ADDR+OFFSET)&~7)1853 <code>UINT64* V = (UINT64*)(DS + ((ADDR+OFFSET)&~7)) 1854 1854 *V = MIN(*V, VDATA0) // atomic operation</code></p> 1855 1855 <h4>DS_MSKOR_B32</h4> … … 1861 1861 Result is stored in LDS/GDS at this same address. Operation is atomic.<br /> 1862 1862 Operation:<br /> 1863 <code>UINT32* V = (UINT32*)(DS + ( ADDR+OFFSET)&~3)1863 <code>UINT32* V = (UINT32*)(DS + ((ADDR+OFFSET)&~3)) 1864 1864 *V = (*V & ~VDATA0) | VDATA1 // atomic operation</code></p> 1865 1865 <h4>DS_MSKOR_B64</h4> … … 1871 1871 third argument. Result is stored in LDS/GDS at this same address. Operation is atomic.<br /> 1872 1872 Operation:<br /> 1873 <code>UINT64* V = (UINT64*)(DS + ( ADDR+OFFSET)&~7)1873 <code>UINT64* V = (UINT64*)(DS + ((ADDR+OFFSET)&~7)) 1874 1874 *V = (*V & ~VDATA0) | VDATA1 // atomic operation</code></p> 1875 1875 <h4>DS_MSKOR_RTN_B32</h4> … … 1882 1882 Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br /> 1883 1883 Operation:<br /> 1884 <code>UINT32* V = (UINT32*)(DS + ( ADDR+OFFSET)&~3)1884 <code>UINT32* V = (UINT32*)(DS + ((ADDR+OFFSET)&~3)) 1885 1885 VDST = *V; *V = (*V & ~VDATA0) | VDATA1 // atomic operation</code></p> 1886 1886 <h4>DS_MSKOR_RTN_B64</h4> … … 1893 1893 Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br /> 1894 1894 Operation:<br /> 1895 <code>UINT64* V = (UINT64*)(DS + ( ADDR+OFFSET)&~7)1895 <code>UINT64* V = (UINT64*)(DS + ((ADDR+OFFSET)&~7)) 1896 1896 VDST = *V; *V = (*V & ~VDATA0) | VDATA1 // atomic operation</code></p> 1897 1897 <h4>DS_OR_B32</h4> … … 1902 1902 address. Operation is atomic.<br /> 1903 1903 Operation:<br /> 1904 <code>UINT32* V = (UINT32*)(DS + ( ADDR+OFFSET)&~3)1904 <code>UINT32* V = (UINT32*)(DS + ((ADDR+OFFSET)&~3)) 1905 1905 *V = *V | VDATA0 // atomic operation</code></p> 1906 1906 <h4>DS_OR_B64</h4> … … 1911 1911 address. Operation is atomic.<br /> 1912 1912 Operation:<br /> 1913 <code>UINT64* V = (UINT64*)(DS + ( ADDR+OFFSET)&~7)1913 <code>UINT64* V = (UINT64*)(DS + ((ADDR+OFFSET)&~7)) 1914 1914 *V = *V | VDATA0 // atomic operation</code></p> 1915 1915 <h4>DS_OR_RTN_B32</h4> … … 1920 1920 address. Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br /> 1921 1921 Operation:<br /> 1922 <code>UINT32* V = (UINT32*)(DS + ( ADDR+OFFSET)&~3)1922 <code>UINT32* V = (UINT32*)(DS + ((ADDR+OFFSET)&~3)) 1923 1923 VDST = *V; *V = *V | VDATA0 // atomic operation</code></p> 1924 1924 <h4>DS_OR_RTN_B64</h4> … … 1929 1929 address. Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br /> 1930 1930 Operation:<br /> 1931 <code>UINT64* V = (UINT64*)(DS + ( ADDR+OFFSET)&~7)1931 <code>UINT64* V = (UINT64*)(DS + ((ADDR+OFFSET)&~7)) 1932 1932 VDST = *V; *V = *V | VDATA0 // atomic operation</code></p> 1933 1933 <h4>DS_OR_SRC2_B32</h4> … … 1960 1960 Description: Read dword from LDS/GDS at address (ADDR+OFFSET) & ~3, store into VDST.<br /> 1961 1961 Operation:<br /> 1962 <code>VDST = *(UINT32*)(DS + ( ADDR+OFFSET)&~3)</code></p>1962 <code>VDST = *(UINT32*)(DS + ((ADDR+OFFSET)&~3))</code></p> 1963 1963 <h4>DS_READ_I16</h4> 1964 1964 <p>Opcode: 59 (0x3b)<br /> … … 2031 2031 Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br /> 2032 2032 Operation:<br /> 2033 <code>UINT32* V = (UINT32*)(DS + ( ADDR+OFFSET)&~3)2033 <code>UINT32* V = (UINT32*)(DS + ((ADDR+OFFSET)&~3)) 2034 2034 VDST= *V; *V = VDATA0 - *V // atomic operation</code></p> 2035 2035 <h4>DS_RSUB_RTN_U64</h4> … … 2040 2040 same address. Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br /> 2041 2041 Operation:<br /> 2042 <code>UINT64* V = (UINT64*)(DS + ( ADDR+OFFSET)&~7)2042 <code>UINT64* V = (UINT64*)(DS + ((ADDR+OFFSET)&~7)) 2043 2043 VDST= *V; *V = VDATA0 - *V // atomic operation</code></p> 2044 2044 <h4>DS_RSUB_SRC2_U32</h4> … … 2075 2075 Operation is atomic.<br /> 2076 2076 Operation:<br /> 2077 <code>UINT32* V = (UINT32*)(DS + ( ADDR+OFFSET)&~3)2077 <code>UINT32* V = (UINT32*)(DS + ((ADDR+OFFSET)&~3)) 2078 2078 *V = VDATA0 - *V // atomic operation</code></p> 2079 2079 <h4>DS_RSUB_U64</h4> … … 2084 2084 same address. Operation is atomic.<br /> 2085 2085 Operation:<br /> 2086 <code>UINT64* V = (UINT64*)(DS + ( ADDR+OFFSET)&~7)2086 <code>UINT64* V = (UINT64*)(DS + ((ADDR+OFFSET)&~7)) 2087 2087 *V = VDATA0 - *V // atomic operation</code></p> 2088 2088 <h4>DS_SUB_RTN_U32</h4> … … 2093 2093 Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br /> 2094 2094 Operation:<br /> 2095 <code>UINT32* V = (UINT32*)(DS + ( ADDR+OFFSET)&~3)2095 <code>UINT32* V = (UINT32*)(DS + ((ADDR+OFFSET)&~3)) 2096 2096 VDST = *V; *V = *V - VDATA0 // atomic operation</code></p> 2097 2097 <h4>DS_SUB_RTN_U64</h4> … … 2102 2102 Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br /> 2103 2103 Operation:<br /> 2104 <code>UINT64* V = (UINT64*)(DS + ( ADDR+OFFSET)&~7)2104 <code>UINT64* V = (UINT64*)(DS + ((ADDR+OFFSET)&~7)) 2105 2105 VDST = *V; *V = *V - VDATA0 // atomic operation</code></p> 2106 2106 <h4>DS_SUB_SRC2_U32</h4> … … 2137 2137 Operation is atomic.<br /> 2138 2138 Operation:<br /> 2139 <code>UINT32* V = (UINT32*)(DS + ( ADDR+OFFSET)&~3)2139 <code>UINT32* V = (UINT32*)(DS + ((ADDR+OFFSET)&~3)) 2140 2140 *V = *V - VDATA0 // atomic operation</code></p> 2141 2141 <h4>DS_SUB_U64</h4> … … 2146 2146 Operation is atomic.<br /> 2147 2147 Operation:<br /> 2148 <code>UINT64* V = (UINT64*)(DS + ( ADDR+OFFSET)&~7)2148 <code>UINT64* V = (UINT64*)(DS + ((ADDR+OFFSET)&~7)) 2149 2149 *V = *V - VDATA0 // atomic operation</code></p> 2150 2150 <h4>DS_SWIZZLE_B32</h4> … … 2179 2179 Description: Store value from VDATA0 into LDS/GDS at address (ADDR+OFFSET) & ~3.<br /> 2180 2180 Operation:<br /> 2181 <code>UINT32* V = (UINT32*)(DS + ( ADDR+OFFSET)&~3)2181 <code>UINT32* V = (UINT32*)(DS + ((ADDR+OFFSET)&~3)) 2182 2182 *V = VDATA0</code></p> 2183 2183 <h4>DS_WRITE_B64</h4> … … 2186 2186 Description: Store 64-bit value from VDATA0 into LDS/GDS at address (ADDR+OFFSET) & ~7.<br /> 2187 2187 Operation:<br /> 2188 <code>UINT64* V = (UINT64*)(DS + ( ADDR+OFFSET)&~7)2188 <code>UINT64* V = (UINT64*)(DS + ((ADDR+OFFSET)&~7)) 2189 2189 *V = VDATA0</code></p> 2190 2190 <h4>DS_WRITE_B8</h4> … … 2261 2261 Previous value from LDS/GDS are stored in VDST.<br /> 2262 2262 Operation:<br /> 2263 <code>UINT32* V = (UINT32*)(DS + ( ADDR+OFFSET)&~3)2263 <code>UINT32* V = (UINT32*)(DS + ((ADDR+OFFSET)&~3)) 2264 2264 VDST = *V; *V = VDATA0 // atomic operation</code></p> 2265 2265 <h4>DS_WRXCHG_RTN_B64</h4> … … 2269 2269 Previous value from LDS/GDS are stored in VDST.<br /> 2270 2270 Operation:<br /> 2271 <code>UINT32* V = (UINT32*)(DS + ( ADDR+OFFSET)&~7)2271 <code>UINT32* V = (UINT32*)(DS + ((ADDR+OFFSET)&~7)) 2272 2272 VDST = *V; *V = VDATA0 // atomic operation</code></p> 2273 2273 <h4>DS_WRXCHG2_RTN_B32</h4> … … 2330 2330 address. Operation is atomic.<br /> 2331 2331 Operation:<br /> 2332 <code>UINT32* V = (UINT32*)(DS + ( ADDR+OFFSET)&~3)2332 <code>UINT32* V = (UINT32*)(DS + ((ADDR+OFFSET)&~3)) 2333 2333 *V = *V ^ VDATA0 // atomic operation</code></p> 2334 2334 <h4>DS_XOR_B64</h4> … … 2339 2339 address. Operation is atomic.<br /> 2340 2340 Operation:<br /> 2341 <code>UINT64* V = (UINT64*)(DS + ( ADDR+OFFSET)&~7)2341 <code>UINT64* V = (UINT64*)(DS + ((ADDR+OFFSET)&~7)) 2342 2342 *V = *V ^ VDATA0 // atomic operation</code></p> 2343 2343 <h4>DS_XOR_RTN_B32</h4> … … 2348 2348 address. Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br /> 2349 2349 Operation:<br /> 2350 <code>UINT32* V = (UINT32*)(DS + ( ADDR+OFFSET)&~3)2350 <code>UINT32* V = (UINT32*)(DS + ((ADDR+OFFSET)&~3)) 2351 2351 VDST = *V; *V = *V ^ VDATA0 // atomic operation</code></p> 2352 2352 <h4>DS_XOR_RTN_B64</h4> … … 2357 2357 address. Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br /> 2358 2358 Operation:<br /> 2359 <code>UINT64* V = (UINT64*)(DS + ( ADDR+OFFSET)&~7)2359 <code>UINT64* V = (UINT64*)(DS + ((ADDR+OFFSET)&~7)) 2360 2360 VDST = *V; *V = *V ^ VDATA0 // atomic operation</code></p> 2361 2361 <h4>DS_XOR_SRC2_B32</h4>