Changes between Version 13 and Version 14 of GcnInstrsDs
- Timestamp:
- 12/23/15 15:00:15 (8 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
GcnInstrsDs
v13 v14 1177 1177 Operation is atomic.<br /> 1178 1178 Operation:<br /> 1179 <code>UINT 16A = (OFFSET&0x8000) ? ADDR&0x1fffc : ADDR&~31180 UINT 16B = A + ((OFFSET&0x8000) ? \1179 <code>UINT32 A = (OFFSET&0x8000) ? ADDR&0x1fffc : ADDR&~3 1180 UINT32 B = A + ((OFFSET&0x8000) ? \ 1181 1181 ((ADDR>>17) | ((ADDR>>16)&0x8000)) : \ 1182 1182 ((OFFSET&07fff) | (OFFSET<<1)&0x8000)) * 4 … … 1190 1190 Operation is atomic.<br /> 1191 1191 Operation:<br /> 1192 <code>UINT 16A = (OFFSET&0x8000) ? ADDR&0x1fff8 : ADDR&~71193 UINT 16B = (A + ((OFFSET&0x8000) ? \1192 <code>UINT32 A = (OFFSET&0x8000) ? ADDR&0x1fff8 : ADDR&~7 1193 UINT32 B = (A + ((OFFSET&0x8000) ? \ 1194 1194 ((ADDR>>17) | ((ADDR>>16)&0x8000)) : \ 1195 1195 ((OFFSET&07fff) | (OFFSET<<1)&0x8000)) * 4)&~7 … … 1254 1254 A, and at address B; and store result to LDS/GDS at address A. Operation is atomic.<br /> 1255 1255 Operation:<br /> 1256 <code>UINT 16A = (OFFSET&0x8000) ? ADDR&0x1fffc : ADDR&~31257 UINT 16B = A + ((OFFSET&0x8000) ? \1256 <code>UINT32 A = (OFFSET&0x8000) ? ADDR&0x1fffc : ADDR&~3 1257 UINT32 B = A + ((OFFSET&0x8000) ? \ 1258 1258 ((ADDR>>17) | ((ADDR>>16)&0x8000)) : \ 1259 1259 ((OFFSET&07fff) | (OFFSET<<1)&0x8000)) * 4 … … 1266 1266 A, and at address B; and store result to LDS/GDS at address A. Operation is atomic.<br /> 1267 1267 Operation:<br /> 1268 <code>UINT 16A = (OFFSET&0x8000) ? ADDR&0x1fff8 : ADDR&~71269 UINT 16B = (A + ((OFFSET&0x8000) ? \1268 <code>UINT32 A = (OFFSET&0x8000) ? ADDR&0x1fff8 : ADDR&~7 1269 UINT32 B = (A + ((OFFSET&0x8000) ? \ 1270 1270 ((ADDR>>17) | ((ADDR>>16)&0x8000)) : \ 1271 1271 ((OFFSET&07fff) | (OFFSET<<1)&0x8000)) * 4)&~7 … … 1349 1349 Description: Load unsigned value from LDS/GDS at address (ADDR+OFFSET) & ~3, and 1350 1350 compare 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 store1351 unsigned value is not zero, then increment value from LDS/GDS, otherwise store 1352 1352 VDATA0 to LDS/GDS. Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br /> 1353 1353 Operation:<br /> … … 1372 1372 LDS/GDS at address A. Refer to listing to learn about addressing. Operation is atomic.<br /> 1373 1373 Operation:<br /> 1374 <code>UINT 16A = (OFFSET&0x8000) ? ADDR&0x1fffc : ADDR&~31375 UINT 16B = A + ((OFFSET&0x8000) ? \1374 <code>UINT32 A = (OFFSET&0x8000) ? ADDR&0x1fffc : ADDR&~3 1375 UINT32 B = A + ((OFFSET&0x8000) ? \ 1376 1376 ((ADDR>>17) | ((ADDR>>16)&0x8000)) : \ 1377 1377 ((OFFSET&07fff) | (OFFSET<<1)&0x8000)) * 4 … … 1388 1388 Operation is atomic.<br /> 1389 1389 Operation:<br /> 1390 <code>UINT 16A = (OFFSET&0x8000) ? ADDR&0x1fff8 : ADDR&~71391 UINT 16B = (A + ((OFFSET&0x8000) ? \1390 <code>UINT32 A = (OFFSET&0x8000) ? ADDR&0x1fff8 : ADDR&~7 1391 UINT32 B = (A + ((OFFSET&0x8000) ? \ 1392 1392 ((ADDR>>17) | ((ADDR>>16)&0x8000)) : \ 1393 1393 ((OFFSET&07fff) | (OFFSET<<1)&0x8000)) * 4)&~7 … … 1443 1443 Refer to listing to learn about addressing. Operation is atomic.<br /> 1444 1444 Operation:<br /> 1445 <code>UINT 16A = (OFFSET&0x8000) ? ADDR&0x1fffc : ADDR&~31446 UINT 16B = A + ((OFFSET&0x8000) ? \1445 <code>UINT32 A = (OFFSET&0x8000) ? ADDR&0x1fffc : ADDR&~3 1446 UINT32 B = A + ((OFFSET&0x8000) ? \ 1447 1447 ((ADDR>>17) | ((ADDR>>16)&0x8000)) : \ 1448 1448 ((OFFSET&07fff) | (OFFSET<<1)&0x8000)) * 4 … … 1457 1457 Refer to listing to learn about addressing. Operation is atomic.<br /> 1458 1458 Operation:<br /> 1459 <code>UINT 16A = (OFFSET&0x8000) ? ADDR&0x1fff8 : ADDR&~71460 UINT 16B = (A + ((OFFSET&0x8000) ? \1459 <code>UINT32 A = (OFFSET&0x8000) ? ADDR&0x1fff8 : ADDR&~7 1460 UINT32 B = (A + ((OFFSET&0x8000) ? \ 1461 1461 ((ADDR>>17) | ((ADDR>>16)&0x8000)) : \ 1462 1462 ((OFFSET&07fff) | (OFFSET<<1)&0x8000)) * 4)&~7 … … 1578 1578 Refer to listing to learn about addressing. Operation is atomic.<br /> 1579 1579 Operation:<br /> 1580 <code>UINT 16A = (OFFSET&0x8000) ? ADDR&0x1fffc : ADDR&~31581 UINT 16B = A + ((OFFSET&0x8000) ? \1580 <code>UINT32 A = (OFFSET&0x8000) ? ADDR&0x1fffc : ADDR&~3 1581 UINT32 B = A + ((OFFSET&0x8000) ? \ 1582 1582 ((ADDR>>17) | ((ADDR>>16)&0x8000)) : \ 1583 1583 ((OFFSET&07fff) | (OFFSET<<1)&0x8000)) * 4 … … 1591 1591 Refer to listing to learn about addressing. Operation is atomic.<br /> 1592 1592 Operation:<br /> 1593 <code>UINT 16A = (OFFSET&0x8000) ? ADDR&0x1fff8 : ADDR&~71594 UINT 16B = (A + ((OFFSET&0x8000) ? \1593 <code>UINT32 A = (OFFSET&0x8000) ? ADDR&0x1fff8 : ADDR&~7 1594 UINT32 B = (A + ((OFFSET&0x8000) ? \ 1595 1595 ((ADDR>>17) | ((ADDR>>16)&0x8000)) : \ 1596 1596 ((OFFSET&07fff) | (OFFSET<<1)&0x8000)) * 4)&~7 … … 1604 1604 Refer to listing to learn about addressing. Operation is atomic.<br /> 1605 1605 Operation:<br /> 1606 <code>UINT 16A = (OFFSET&0x8000) ? ADDR&0x1fffc : ADDR&~31607 UINT 16B = A + ((OFFSET&0x8000) ? \1606 <code>UINT32 A = (OFFSET&0x8000) ? ADDR&0x1fffc : ADDR&~3 1607 UINT32 B = A + ((OFFSET&0x8000) ? \ 1608 1608 ((ADDR>>17) | ((ADDR>>16)&0x8000)) : \ 1609 1609 ((OFFSET&07fff) | (OFFSET<<1)&0x8000)) * 4 … … 1617 1617 Refer to listing to learn about addressing. Operation is atomic.<br /> 1618 1618 Operation:<br /> 1619 <code>UINT 16A = (OFFSET&0x8000) ? ADDR&0x1fff8 : ADDR&~71620 UINT 16B = (A + ((OFFSET&0x8000) ? \1619 <code>UINT32 A = (OFFSET&0x8000) ? ADDR&0x1fff8 : ADDR&~7 1620 UINT32 B = (A + ((OFFSET&0x8000) ? \ 1621 1621 ((ADDR>>17) | ((ADDR>>16)&0x8000)) : \ 1622 1622 ((OFFSET&07fff) | (OFFSET<<1)&0x8000)) * 4)&~7 … … 1630 1630 Refer to listing to learn about addressing. Operation is atomic.<br /> 1631 1631 Operation:<br /> 1632 <code>UINT 16A = (OFFSET&0x8000) ? ADDR&0x1fffc : ADDR&~31633 UINT 16B = A + ((OFFSET&0x8000) ? \1632 <code>UINT32 A = (OFFSET&0x8000) ? ADDR&0x1fffc : ADDR&~3 1633 UINT32 B = A + ((OFFSET&0x8000) ? \ 1634 1634 ((ADDR>>17) | ((ADDR>>16)&0x8000)) : \ 1635 1635 ((OFFSET&07fff) | (OFFSET<<1)&0x8000)) * 4 … … 1643 1643 Refer to listing to learn about addressing. Operation is atomic.<br /> 1644 1644 Operation:<br /> 1645 <code>UINT 16A = (OFFSET&0x8000) ? ADDR&0x1fff8 : ADDR&~71646 UINT 16B = (A + ((OFFSET&0x8000) ? \1645 <code>UINT32 A = (OFFSET&0x8000) ? ADDR&0x1fff8 : ADDR&~7 1646 UINT32 B = (A + ((OFFSET&0x8000) ? \ 1647 1647 ((ADDR>>17) | ((ADDR>>16)&0x8000)) : \ 1648 1648 ((OFFSET&07fff) | (OFFSET<<1)&0x8000)) * 4)&~7 … … 1764 1764 Refer to listing to learn about addressing. Operation is atomic.<br /> 1765 1765 Operation:<br /> 1766 <code>UINT 16A = (OFFSET&0x8000) ? ADDR&0x1fffc : ADDR&~31767 UINT 16B = A + ((OFFSET&0x8000) ? \1766 <code>UINT32 A = (OFFSET&0x8000) ? ADDR&0x1fffc : ADDR&~3 1767 UINT32 B = A + ((OFFSET&0x8000) ? \ 1768 1768 ((ADDR>>17) | ((ADDR>>16)&0x8000)) : \ 1769 1769 ((OFFSET&07fff) | (OFFSET<<1)&0x8000)) * 4 … … 1777 1777 Refer to listing to learn about addressing. Operation is atomic.<br /> 1778 1778 Operation:<br /> 1779 <code>UINT 16A = (OFFSET&0x8000) ? ADDR&0x1fff8 : ADDR&~71780 UINT 16B = (A + ((OFFSET&0x8000) ? \1779 <code>UINT32 A = (OFFSET&0x8000) ? ADDR&0x1fff8 : ADDR&~7 1780 UINT32 B = (A + ((OFFSET&0x8000) ? \ 1781 1781 ((ADDR>>17) | ((ADDR>>16)&0x8000)) : \ 1782 1782 ((OFFSET&07fff) | (OFFSET<<1)&0x8000)) * 4)&~7 … … 1790 1790 Refer to listing to learn about addressing. Operation is atomic.<br /> 1791 1791 Operation:<br /> 1792 <code>UINT 16A = (OFFSET&0x8000) ? ADDR&0x1fffc : ADDR&~31793 UINT 16B = A + ((OFFSET&0x8000) ? \1792 <code>UINT32 A = (OFFSET&0x8000) ? ADDR&0x1fffc : ADDR&~3 1793 UINT32 B = A + ((OFFSET&0x8000) ? \ 1794 1794 ((ADDR>>17) | ((ADDR>>16)&0x8000)) : \ 1795 1795 ((OFFSET&07fff) | (OFFSET<<1)&0x8000)) * 4 … … 1803 1803 Refer to listing to learn about addressing. Operation is atomic.<br /> 1804 1804 Operation:<br /> 1805 <code>UINT 16A = (OFFSET&0x8000) ? ADDR&0x1fff8 : ADDR&~71806 UINT 16B = A + (((OFFSET&0x8000) ? \1805 <code>UINT32 A = (OFFSET&0x8000) ? ADDR&0x1fff8 : ADDR&~7 1806 UINT32 B = A + (((OFFSET&0x8000) ? \ 1807 1807 ((ADDR>>17) | ((ADDR>>16)&0x8000)) : \ 1808 1808 ((OFFSET&07fff) | (OFFSET<<1)&0x8000)) * 4)&~7 … … 1816 1816 Refer to listing to learn about addressing. Operation is atomic.<br /> 1817 1817 Operation:<br /> 1818 <code>UINT 16A = (OFFSET&0x8000) ? ADDR&0x1fffc : ADDR&~31819 UINT 16B = A + ((OFFSET&0x8000) ? \1818 <code>UINT32 A = (OFFSET&0x8000) ? ADDR&0x1fffc : ADDR&~3 1819 UINT32 B = A + ((OFFSET&0x8000) ? \ 1820 1820 ((ADDR>>17) | ((ADDR>>16)&0x8000)) : \ 1821 1821 ((OFFSET&07fff) | (OFFSET<<1)&0x8000)) * 4 … … 1829 1829 Refer to listing to learn about addressing. Operation is atomic.<br /> 1830 1830 Operation:<br /> 1831 <code>UINT 16A = (OFFSET&0x8000) ? ADDR&0x1fff8 : ADDR&~71832 UINT 16B = (A + ((OFFSET&0x8000) ? \1831 <code>UINT32 A = (OFFSET&0x8000) ? ADDR&0x1fff8 : ADDR&~7 1832 UINT32 B = (A + ((OFFSET&0x8000) ? \ 1833 1833 ((ADDR>>17) | ((ADDR>>16)&0x8000)) : \ 1834 1834 ((OFFSET&07fff) | (OFFSET<<1)&0x8000)) * 4)&~7 … … 1937 1937 A, and at address B; and store result to LDS/GDS at address A. Operation is atomic.<br /> 1938 1938 Operation:<br /> 1939 <code>UINT 16A = (OFFSET&0x8000) ? ADDR&0x1fffc : ADDR&~31940 UINT 16B = A + ((OFFSET&0x8000) ? \1939 <code>UINT32 A = (OFFSET&0x8000) ? ADDR&0x1fffc : ADDR&~3 1940 UINT32 B = A + ((OFFSET&0x8000) ? \ 1941 1941 ((ADDR>>17) | ((ADDR>>16)&0x8000)) : \ 1942 1942 ((OFFSET&07fff) | (OFFSET<<1)&0x8000)) * 4 … … 1949 1949 A, and at address B; and store result to LDS/GDS at address A. Operation is atomic.<br /> 1950 1950 Operation:<br /> 1951 <code>UINT 16A = (OFFSET&0x8000) ? ADDR&0x1fff8 : ADDR&~71952 UINT 16B = (A + ((OFFSET&0x8000) ? \1951 <code>UINT32 A = (OFFSET&0x8000) ? ADDR&0x1fff8 : ADDR&~7 1952 UINT32 B = (A + ((OFFSET&0x8000) ? \ 1953 1953 ((ADDR>>17) | ((ADDR>>16)&0x8000)) : \ 1954 1954 ((OFFSET&07fff) | (OFFSET<<1)&0x8000)) * 4)&~7 … … 1967 1967 store into VDST. The value's sign will be extended to higher bits.<br /> 1968 1968 Operation:<br /> 1969 <code>VDST = (INT32)*(INT16*)(DS + ( ADDR+OFFSET)&~1)</code></p>1969 <code>VDST = (INT32)*(INT16*)(DS + ((ADDR+OFFSET)&~1))</code></p> 1970 1970 <h4>DS_READ_I8</h4> 1971 1971 <p>Opcode: 57 (0x39)<br /> … … 1981 1981 store into VDST.<br /> 1982 1982 Operation:<br /> 1983 <code>VDST = *(UINT16*)(DS + ( ADDR+OFFSET)&~1)</code></p>1983 <code>VDST = *(UINT16*)(DS + ((ADDR+OFFSET)&~1))</code></p> 1984 1984 <h4>DS_READ_U8</h4> 1985 1985 <p>Opcode: 58 (0x3a)<br /> … … 2049 2049 Refer to listing to learn about addressing. Operation is atomic.<br /> 2050 2050 Operation:<br /> 2051 <code>UINT 16A = (OFFSET&0x8000) ? ADDR&0x1fffc : ADDR&~32052 UINT 16B = A + ((OFFSET&0x8000) ? \2051 <code>UINT32 A = (OFFSET&0x8000) ? ADDR&0x1fffc : ADDR&~3 2052 UINT32 B = A + ((OFFSET&0x8000) ? \ 2053 2053 ((ADDR>>17) | ((ADDR>>16)&0x8000)) : \ 2054 2054 ((OFFSET&07fff) | (OFFSET<<1)&0x8000)) * 4 … … 2062 2062 Refer to listing to learn about addressing. Operation is atomic.<br /> 2063 2063 Operation:<br /> 2064 <code>UINT 16A = (OFFSET&0x8000) ? ADDR&0x1fff8 : ADDR&~72065 UINT 16B = (A + ((OFFSET&0x8000) ? \2064 <code>UINT32 A = (OFFSET&0x8000) ? ADDR&0x1fff8 : ADDR&~7 2065 UINT32 B = (A + ((OFFSET&0x8000) ? \ 2066 2066 ((ADDR>>17) | ((ADDR>>16)&0x8000)) : \ 2067 2067 ((OFFSET&07fff) | (OFFSET<<1)&0x8000)) * 4)&~7 … … 2111 2111 Refer to listing to learn about addressing. Operation is atomic.<br /> 2112 2112 Operation:<br /> 2113 <code>UINT 16A = (OFFSET&0x8000) ? ADDR&0x1fffc : ADDR&~32114 UINT 16B = A + ((OFFSET&0x8000) ? \2113 <code>UINT32 A = (OFFSET&0x8000) ? ADDR&0x1fffc : ADDR&~3 2114 UINT32 B = A + ((OFFSET&0x8000) ? \ 2115 2115 ((ADDR>>17) | ((ADDR>>16)&0x8000)) : \ 2116 2116 ((OFFSET&07fff) | (OFFSET<<1)&0x8000)) * 4 … … 2124 2124 Refer to listing to learn about addressing. Operation is atomic.<br /> 2125 2125 Operation:<br /> 2126 <code>UINT 16A = (OFFSET&0x8000) ? ADDR&0x1fff8 : ADDR&~72127 UINT 16B = (A + ((OFFSET&0x8000) ? \2126 <code>UINT32 A = (OFFSET&0x8000) ? ADDR&0x1fff8 : ADDR&~7 2127 UINT32 B = (A + ((OFFSET&0x8000) ? \ 2128 2128 ((ADDR>>17) | ((ADDR>>16)&0x8000)) : \ 2129 2129 ((OFFSET&07fff) | (OFFSET<<1)&0x8000)) * 4)&~7 … … 2158 2158 <code>BYTE INLANEID = 0 2159 2159 if (OFFSET&0x8000) 2160 INLANEID = (LANEID&0x3c) + ( OFFSET>>(2*(LANEID&3))&32160 INLANEID = (LANEID&0x3c) + ((OFFSET >> (2*(LANEID&3)) & 3) 2161 2161 else 2162 2162 { … … 2200 2200 Description: Store value from LDS/GDS at address B into LDS/GDS at address A.<br /> 2201 2201 Operation:<br /> 2202 <code>UINT 16A = (OFFSET&0x8000) ? ADDR&0x1fffc : ADDR&~32203 UINT 16B = A + ((OFFSET&0x8000) ? \2202 <code>UINT32 A = (OFFSET&0x8000) ? ADDR&0x1fffc : ADDR&~3 2203 UINT32 B = A + ((OFFSET&0x8000) ? \ 2204 2204 ((ADDR>>17) | ((ADDR>>16)&0x8000)) : \ 2205 2205 ((OFFSET&07fff) | (OFFSET<<1)&0x8000)) * 4 … … 2210 2210 Description: Store 64-bit value from LDS/GDS at address B into LDS/GDS at address A.<br /> 2211 2211 Operation:<br /> 2212 <code>UINT 16A = (OFFSET&0x8000) ? ADDR&0x1fff8 : ADDR&~72213 UINT 16B = (A + ((OFFSET&0x8000) ? \2212 <code>UINT32 A = (OFFSET&0x8000) ? ADDR&0x1fff8 : ADDR&~7 2213 UINT32 B = (A + ((OFFSET&0x8000) ? \ 2214 2214 ((ADDR>>17) | ((ADDR>>16)&0x8000)) : \ 2215 2215 ((OFFSET&07fff) | (OFFSET<<1)&0x8000)) * 4)&~7 … … 2306 2306 Operation:<br /> 2307 2307 <code>UINT32* V0 = (UINT32*)(DS + ((ADDR + OFFSET0*256)&~3)) 2308 UINT32* V1 = (UINT32*)(DS + (( (ADDR + OFFSET1*256)&~3)))2308 UINT32* V1 = (UINT32*)(DS + ((ADDR + OFFSET1*256)&~3)) 2309 2309 VDST = (*V0) | (UINT64(*V1)<<32) 2310 2310 *V0 = VDATA0 … … 2319 2319 Operation:<br /> 2320 2320 <code>UINT64* V0 = (UINT64*)(DS + ((ADDR + OFFSET0*512)&~7)) 2321 UINT64* V1 = (UINT64*)(DS + (( (ADDR + OFFSET1*512)&~7)))2321 UINT64* V1 = (UINT64*)(DS + ((ADDR + OFFSET1*512)&~7)) 2322 2322 VDST = (*V0) | (UINT128(*V1)<<64) 2323 2323 *V0 = VDATA0 … … 2365 2365 A, and at address B; and store result to LDS/GDS at address A. Operation is atomic.<br /> 2366 2366 Operation:<br /> 2367 <code>UINT 16A = (OFFSET&0x8000) ? ADDR&0x1fffc : ADDR&~32368 UINT 16B = A + ((OFFSET&0x8000) ? \2367 <code>UINT32 A = (OFFSET&0x8000) ? ADDR&0x1fffc : ADDR&~3 2368 UINT32 B = A + ((OFFSET&0x8000) ? \ 2369 2369 ((ADDR>>17) | ((ADDR>>16)&0x8000)) : \ 2370 2370 ((OFFSET&07fff) | (OFFSET<<1)&0x8000)) * 4 2371 2371 UINT32* V = (UINT32*)(DS + A) 2372 *V = *V |*(UINT32*)(DS + B) // atomic operation</code></p>2372 *V = *V ^ *(UINT32*)(DS + B) // atomic operation</code></p> 2373 2373 <h4>DS_XOR_SRC2_B64</h4> 2374 2374 <p>Opcode: 203 (0xcb)<br /> … … 2377 2377 A, and at address B; and store result to LDS/GDS at address A. Operation is atomic.<br /> 2378 2378 Operation:<br /> 2379 <code>UINT 16A = (OFFSET&0x8000) ? ADDR&0x1fff8 : ADDR&~72380 UINT 16B = (A + ((OFFSET&0x8000) ? \2379 <code>UINT32 A = (OFFSET&0x8000) ? ADDR&0x1fff8 : ADDR&~7 2380 UINT32 B = (A + ((OFFSET&0x8000) ? \ 2381 2381 ((ADDR>>17) | ((ADDR>>16)&0x8000)) : \ 2382 2382 ((OFFSET&07fff) | (OFFSET<<1)&0x8000)) * 4)&~7 2383 2383 UINT64* V = (UINT64*)(DS + A) 2384 *V = *V |*(UINT64*)(DS + B) // atomic operation</code></p>2384 *V = *V ^ *(UINT64*)(DS + B) // atomic operation</code></p> 2385 2385 }}}