Changes between Version 7 and Version 8 of GcnInstrsDs
- Timestamp:
- 12/22/15 01:00:15 (8 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
GcnInstrsDs
v7 v8 1233 1233 <code>UINT32* V = (UINT32*)(DS + (ADDR+OFFSET)&~3) 1234 1234 *V = (*V==VDATA0) ? VDATA1 : *V // atomic operation</code></p> 1235 <h4>DS_CMPST_B64</h4> 1236 <p>Opcode: 80 (0x50)<br /> 1237 Syntax: DS_CMPST_B64 ADDR, VDATA0(2), VDATA1(2) [OFFSET:OFFSET]<br /> 1238 Description: Compare 64-bit values from VDATA0 and from LDS/GDS at address 1239 (ADDR+OFFSET) & ~7. If values are equal, store VDATA1 to LDS/GDS at this same address, 1240 otherwise do nothing. Operation is atomic.<br /> 1241 Operation:<br /> 1242 <code>UINT64* V = (UINT64*)(DS + (ADDR+OFFSET)&~7) 1243 *V = (*V==VDATA0) ? VDATA1 : *V // atomic operation</code></p> 1235 1244 <h4>DS_CMPST_F32</h4> 1236 1245 <p>Opcode: 17 (0x11)<br /> … … 1250 1259 Operation:<br /> 1251 1260 <code>UINT32* V = (UINT32*)(DS + (ADDR+OFFSET)&~3) 1261 *V = VDST; *V = (*V==VDATA0) ? VDATA1 : *V // atomic operation</code></p> 1262 <h4>DS_CMPST_RTN_B64</h4> 1263 <p>Opcode: 112 (0x70)<br /> 1264 Syntax: DS_CMPST_RTN_B64 VDST(2), ADDR, VDATA0(2), VDATA1(2) [OFFSET:OFFSET]<br /> 1265 Description: Compare 64-bit values from VDATA0 and from LDS/GDS at address 1266 (ADDR+OFFSET) & ~7. If values are equal, store VDATA1 to LDS/GDS at this same address, 1267 otherwise do nothing. Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br /> 1268 Operation:<br /> 1269 <code>UINT64* V = (UINT64*)(DS + (ADDR+OFFSET)&~7) 1252 1270 *V = VDST; *V = (*V==VDATA0) ? VDATA1 : *V // atomic operation</code></p> 1253 1271 <h4>DS_CMPST_RTN_F32</h4> … … 1599 1617 <p>Opcode: 54 (0x36)<br /> 1600 1618 Syntax: DS_READ_B32 VDST, ADDR [OFFSET:OFFSET]<br /> 1601 Description: Read dword from LDS/GDS at address (ADDR+OFFSET) & ~3, store in VDST.<br />1619 Description: Read dword from LDS/GDS at address (ADDR+OFFSET) & ~3, store into VDST.<br /> 1602 1620 Operation:<br /> 1603 1621 <code>VDST = *(UINT32*)(DS + (ADDR+OFFSET)&~3)</code></p> … … 1606 1624 Syntax: DS_READ_I16 VDST, ADDR [OFFSET:OFFSET]<br /> 1607 1625 Description: Read signed 16-bit word from LDS/GDS at address (ADDR+OFFSET) & ~1, 1608 store in VDST. The value's sign will be extended to higher bits.<br />1626 store into VDST. The value's sign will be extended to higher bits.<br /> 1609 1627 Operation:<br /> 1610 1628 <code>VDST = (INT32)*(INT16*)(DS + (ADDR+OFFSET)&~1)</code></p> … … 1612 1630 <p>Opcode: 57 (0x39)<br /> 1613 1631 Syntax: DS_READ_I8 VDST, ADDR [OFFSET:OFFSET]<br /> 1614 Description: Read signed byte from LDS/GDS at address (ADDR+OFFSET), store in VDST.1632 Description: Read signed byte from LDS/GDS at address (ADDR+OFFSET), store into VDST. 1615 1633 The value's sign will be extended to higher bits.<br /> 1616 1634 Operation:<br /> … … 1620 1638 Syntax: DS_READ_U16 VDST, ADDR [OFFSET:OFFSET]<br /> 1621 1639 Description: Read unsigned 16-bit word from LDS/GDS at address (ADDR+OFFSET) & ~1, 1622 store in VDST.<br />1640 store into VDST.<br /> 1623 1641 Operation:<br /> 1624 1642 <code>VDST = *(UINT16*)(DS + (ADDR+OFFSET)&~1)</code></p> … … 1626 1644 <p>Opcode: 58 (0x3a)<br /> 1627 1645 Syntax: DS_READ_U8 VDST, ADDR [OFFSET:OFFSET]<br /> 1628 Description: Read unsigned byte from LDS/GDS at address (ADDR+OFFSET), store in VDST.<br />1646 Description: Read unsigned byte from LDS/GDS at address (ADDR+OFFSET), store into VDST.<br /> 1629 1647 Operation:<br /> 1630 1648 <code>VDST = *(UINT8*)(DS + (ADDR+OFFSET))</code></p> … … 1633 1651 Syntax: DS_READ2_B32 VDST(2), ADDR [OFFSET0:OFFSET0] [OFFSET1:OFFSET1]<br /> 1634 1652 Description: Read dword from LDS/GDS at address (ADDR+OFFSET0*4) & ~3, and second dword 1635 at address (ADDR+OFFSET1*4) & ~3, and store these dwords in VDST.<br />1653 at address (ADDR+OFFSET1*4) & ~3, and store these dwords into VDST.<br /> 1636 1654 Operation:<br /> 1637 1655 <code>UINT32* V0 = (UINT32*)(DS + (ADDR + OFFSET0*4)&~3) 1638 1656 UINT32* V1 = (UINT32*)(DS + (ADDR + OFFSET1*4)&~3) 1639 VDST = *V0 | UINT64(*V1)<<32</code></p> 1657 VDST = *V0 | (UINT64(*V1)<<32)</code></p> 1658 <h4>DS_READ2_B64</h4> 1659 <p>Opcode: 119 (0x77)<br /> 1660 Syntax: DS_READ2_B64 VDST(4), ADDR [OFFSET0:OFFSET0] [OFFSET1:OFFSET1]<br /> 1661 Description: Read 64-bit value from LDS/GDS at address (ADDR+OFFSET0*8) & ~7, 1662 and second value at address (ADDR+OFFSET1*4) & ~3, and store these values into VDST.<br /> 1663 Operation:<br /> 1664 <code>UINT64* V0 = (UINT64*)(DS + (ADDR + OFFSET0*8)&~7) 1665 UINT64* V1 = (UINT64*)(DS + (ADDR + OFFSET1*8)&~7) 1666 VDST = *V0 | (UINT128(*V1)<<64)</code></p> 1640 1667 <h4>DS_READ2ST64_B32</h4> 1641 1668 <p>Opcode: 56 (0x38)<br /> 1642 1669 Syntax: DS_READ2ST64_B32 VDST(2), ADDR [OFFSET0:OFFSET0] [OFFSET1:OFFSET1]<br /> 1643 1670 Description: Read dword from LDS/GDS at address (ADDR+OFFSET0*256) & ~3, and second dword 1644 at address (ADDR+OFFSET1*256) & ~3, and store these dwords inVDST.<br />1671 at address (ADDR+OFFSET1*256) & ~3, and store these values into VDST.<br /> 1645 1672 Operation:<br /> 1646 1673 <code>UINT32* V0 = (UINT32*)(DS + (ADDR + OFFSET0*256)&~3) 1647 1674 UINT32* V1 = (UINT32*)(DS + (ADDR + OFFSET1*256)&~3) 1648 VDST = *V0 | UINT64(*V1)<<32</code></p> 1675 VDST = *V0 | (UINT64(*V1)<<32)</code></p> 1676 <h4>DS_READ2ST64_B64</h4> 1677 <p>Opcode: 120 (0x78)<br /> 1678 Syntax: DS_READ2ST64_B64 VDST(4), ADDR [OFFSET0:OFFSET0] [OFFSET1:OFFSET1]<br /> 1679 Description: Read 64-bit value from LDS/GDS at address (ADDR+OFFSET0*512) & ~7, and 1680 second value at address (ADDR+OFFSET1*512) & ~7, and store these values into VDST.<br /> 1681 Operation:<br /> 1682 <code>UINT64* V0 = (UINT64*)(DS + (ADDR + OFFSET0*512)&~7) 1683 UINT64* V1 = (UINT64*)(DS + (ADDR + OFFSET1*512)&~7) 1684 VDST = *V0 | (UINT128(*V1)<<64)</code></p> 1649 1685 <h4>DS_RSUB_RTN_U32</h4> 1650 1686 <p>Opcode: 34 (0x22)<br />