Changes between Version 18 and Version 19 of GcnInstrsDs


Ignore:
Timestamp:
05/22/16 12:01:04 (8 years ago)
Author:
trac
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • GcnInstrsDs

    v18 v19  
    19181918<code>UINT64* V = (UINT64*)(DS + ((ADDR+OFFSET)&amp;~7))
    19191919VDST = *V; *V = (*V &amp; ~VDATA0) | VDATA1 // atomic operation</code></p>
     1920<h4>DS_NOP</h4>
     1921<p>Opcode: 20 (0x14) for GCN 1.1/1.2<br />
     1922Syntax: DS_NOP VADDR<br />
     1923Description: Do nothing.</p>
    19201924<h4>DS_OR_B32</h4>
    19211925<p>Opcode: 10 (0xa)<br />
     
    19781982UINT64* V = (UINT64*)(DS + A)
    19791983*V = *V | *(UINT64*)(DS + B) // atomic operation</code></p>
     1984<h4>DS_READ_B128</h4>
     1985<p>Opcode: 255 (0xff) for GCN 1.1/1.2<br />
     1986Syntax: DS_READ_B128 VDST(4), ADDR [OFFSET:OFFSET]<br />
     1987Description: Read four dwords from LDS/GDS at address (ADDR+OFFSET) &amp; ~15,
     1988store into VDST.<br />
     1989Operation:<br />
     1990<code>VDST[0:1] = *(UINT64*)(DS + ((ADDR+OFFSET)&amp;~15))
     1991VDST[2:3] = *(UINT64*)(DS + ((ADDR+OFFSET)&amp;~15) + 8)</code></p>
    19801992<h4>DS_READ_B32</h4>
    19811993<p>Opcode: 54 (0x36)<br />
     
    19841996Operation:<br />
    19851997<code>VDST = *(UINT32*)(DS + ((ADDR+OFFSET)&amp;~3))</code></p>
     1998<h4>DS_READ_B64</h4>
     1999<p>Opcode: 118 (0x76)<br />
     2000Syntax: DS_READ_B64 VDST(2), ADDR [OFFSET:OFFSET]<br />
     2001Description: Read two dwords from LDS/GDS at address (ADDR+OFFSET) &amp; ~7, store into VDST.<br />
     2002Operation:<br />
     2003<code>VDST = *(UINT64*)(DS + ((ADDR+OFFSET)&amp;~7))</code></p>
     2004<h4>DS_READ_B96</h4>
     2005<p>Opcode: 254 (0xfe) for GCN 1.1/1.2<br />
     2006Syntax: DS_READ_B96 VDST(3), ADDR [OFFSET:OFFSET]<br />
     2007Description: Read three dwords from LDS/GDS at address (ADDR+OFFSET) &amp; ~15,
     2008store into VDST.<br />
     2009Operation:<br />
     2010<code>VDST[0:1] = *(UINT64*)(DS + ((ADDR+OFFSET)&amp;~15))
     2011VDST[2] = *(UINT32*)(DS + ((ADDR+OFFSET)&amp;~15) + 8)</code></p>
    19862012<h4>DS_READ_I16</h4>
    19872013<p>Opcode: 59 (0x3b)<br />
     
    20242050Syntax: DS_READ2_B64 VDST(4), ADDR [OFFSET0:OFFSET0] [OFFSET1:OFFSET1]<br />
    20252051Description: Read 64-bit value from LDS/GDS at address (ADDR+OFFSET0*8) &amp; ~7,
    2026 and second value at address (ADDR+OFFSET1*4) &amp; ~3, and store these values into VDST.<br />
     2052and second value at address (ADDR+OFFSET1*8) &amp; ~7, and store these values into VDST.<br />
    20272053Operation:<br />
    20282054<code>UINT64* V0 = (UINT64*)(DS + (ADDR + OFFSET0*8)&amp;~7)
     
    21902216}
    21912217VDST[LANEID] = (EXEC &amp; (1ULL&lt;&lt;INLANEID)) ? ADDR[INLANEID] : 0</code></p>
     2218<h4>DS_WRAP_RTN_B32</h4>
     2219<p>Opcode: 52 (0x34) for GCN 1.1/1.2<br />
     2220Syntax: DS_WRAP_RTN_B32 VDST, ADDR, VDATA0, VDATA1 [OFFSET:OFFSET]<br />
     2221Description: Compare unsigned 32-bit value from LDS/GDS at address A and D0. If value from
     2222LDS/GDS is not less than VDATA0 value, then subtract VDATA0 from this value and store
     2223result into LDS/GDS. Otherwise add VDATA1 to LDS/GDS value and store into LDS/GDS.
     2224Previous value from LDS/GDS are stored in VDST. Operation is atomic.<br />
     2225Operation:<br />
     2226<code>UINT32 A = (UINT32*)(DS + ((ADDR+OFFSET)&amp;~3))
     2227VDST = *V; *V = (*V &gt;= VDATA0) ? (*V-VDATA0) : (*V+VDATA1) // atomic operation</code></p>
     2228<h4>DS_WRITE_B128</h4>
     2229<p>Opcode: 223 (0xdf)for GCN 1.1/1.2<br />
     2230Syntax: DS_WRITE_B128 ADDR, VDATA0(4) [OFFSET:OFFSET]<br />
     2231Description: Store four dwords value from VDATA0 into LDS/GDS at address
     2232(ADDR+OFFSET) &amp; ~15.<br />
     2233Operation:<br />
     2234<code>UINT64* V = (UINT64*)(DS + ((ADDR+OFFSET)&amp;~15))
     2235*V = VDATA0[0:1]
     2236*(V+1) = VDATA0[2:3]</code></p>
    21922237<h4>DS_WRITE_B16</h4>
    21932238<p>Opcode: 31 (0x1f)<br />
     
    22182263<code>UINT8* V = (UINT8*)(DS + (ADDR+OFFSET))
    22192264*V = VDATA0&amp;0xff</code></p>
     2265<h4>DS_WRITE_B96</h4>
     2266<p>Opcode: 222 (0xde) for GCN 1.1/1.2<br />
     2267Syntax: DS_WRITE_B96 ADDR, VDATA0(3) [OFFSET:OFFSET]<br />
     2268Description: Store three dwords value from VDATA0 into LDS/GDS at address
     2269(ADDR+OFFSET) &amp; ~15.<br />
     2270Operation:<br />
     2271<code>UINT32* V = (UINT64*)(DS + ((ADDR+OFFSET)&amp;~15))
     2272*(UINT64*)V = VDATA0[0:1]
     2273*(V+2) = VDATA0[2]</code></p>
    22202274<h4>DS_WRITE_SRC2_B32</h4>
    22212275<p>Opcode: 141 (0x8d)<br />