Changes between Version 3 and Version 4 of GcnInstrsMubuf


Ignore:
Timestamp:
01/02/16 18:00:17 (8 years ago)
Author:
trac
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • GcnInstrsMubuf

    v3 v4  
    784784<h3>Instruction set</h3>
    785785<p>Alphabetically sorted instruction list:</p>
     786<h4>BUFFER_ATOMIC_ADD</h4>
     787<p>Opcode: 50 (0x32) for GCN 1.0/1.1; 66 (0x42) for GCN 1.2<br />
     788Syntax: BUFFER_ATOMIC_ADD VDATA, VADDR, SRSRC, SOFFSET<br />
     789Description: Add VDATA to value of SRSRC resource, and store result to this resource.
     790If GLC flag is set then return previous value to VDATA, otherwise keep VDATA value.
     791Operation is atomic.<br />
     792Operation:<br />
     793<code>UINT32* VM = (UINT32*)VMEM(SRSRC, VADDR, SOFFSET, OFFSET)
     794UINT32* P = *VM; *VM = *VM + VDATA; VDATA = (GLC) ? P : VDATA // atomic</code></p>
     795<h4>BUFFER_ATOMIC_CMPSWAP</h4>
     796<p>Opcode: 49 (0x31) for GCN 1.0/1.1; 65 (0x41) for GCN 1.2<br />
     797Syntax: BUFFER_ATOMIC_CMPSWAP VDATA(2), VADDR, SRSRC, SOFFSET<br />
     798Description: Store lower VDATA dword into SRSRC resource if previous value
     799from resources is equal VDATA&gt;&gt;32, otherwise keep old value from resource.
     800If GLC flag is set then return previous value to VDATA, otherwise keep VDATA value.
     801Operation is atomic.<br />
     802Operation:<br />
     803<code>UINT32* VM = (UINT32*)VMEM(SRSRC, VADDR, SOFFSET, OFFSET)
     804UINT32* P = *VM; *VM = *VM==(VDATA&gt;&gt;32) ? VDATA&amp;0xffffffff : *VM // part of atomic
     805VDATA = (GLC) ? P : VDATA // last part of atomic</code></p>
     806<h4>BUFFER_ATOMIC_RSUB</h4>
     807<p>Opcode: 52 (0x34) for GCN 1.0
     808Syntax: BUFFER_ATOMIC_RSUB VDATA, VADDR, SRSRC, SOFFSET<br />
     809Description: Subtract value of SRSRC resource from VDATA, and store result to
     810this resource. If GLC flag is set then return previous value to VDATA,
     811otherwise keep VDATA value. Operation is atomic.<br />
     812Operation:<br />
     813<code>UINT32* VM = (UINT32*)VMEM(SRSRC, VADDR, SOFFSET, OFFSET)
     814UINT32* P = *VM; *VM = VDATA - *VM; VDATA = (GLC) ? P : VDATA // atomic</code></p>
     815<h4>BUFFER_ATOMIC_SMAX</h4>
     816<p>Opcode: 55 (0x37) for GCN 1.0/1.1; 70 (0x46) for GCN 1.2<br />
     817Syntax: BUFFER_ATOMIC_SMAX VDATA, VADDR, SRSRC, SOFFSET<br />
     818Description: Choose greatest signed 32-bit value from VDATA and from SRSRC resource,
     819and store result to this resource.
     820If GLC flag is set then return previous value to VDATA, otherwise keep VDATA value.
     821Operation is atomic.<br />
     822Operation:<br />
     823<code>INT32* VM = (INT32*)VMEM(SRSRC, VADDR, SOFFSET, OFFSET)
     824UINT32* P = *VM; *VM = MAX(*VM, (INT32)VDATA); VDATA = (GLC) ? P : VDATA // atomic</code></p>
     825<h4>BUFFER_ATOMIC_SMIN</h4>
     826<p>Opcode: 53 (0x35) for GCN 1.0/1.1; 68 (0x44) for GCN 1.2<br />
     827Syntax: BUFFER_ATOMIC_SMIN VDATA, VADDR, SRSRC, SOFFSET<br />
     828Description: Choose smallest signed 32-bit value from VDATA and from SRSRC resource,
     829and store result to this resource.
     830If GLC flag is set then return previous value to VDATA, otherwise keep VDATA value.
     831Operation is atomic.<br />
     832Operation:<br />
     833<code>INT32* VM = (INT32*)VMEM(SRSRC, VADDR, SOFFSET, OFFSET)
     834UINT32* P = *VM; *VM = MIN(*VM, (INT32)VDATA); VDATA = (GLC) ? P : VDATA // atomic</code></p>
     835<h4>BUFFER_ATOMIC_SUB</h4>
     836<p>Opcode: 51 (0x33) for GCN 1.0/1.1; 67 (0x43) for GCN 1.2<br />
     837Syntax: BUFFER_ATOMIC_SUB VDATA, VADDR, SRSRC, SOFFSET<br />
     838Description: Subtract VDATA from value from SRSRC resource, and store result to
     839this resource. If GLC flag is set then return previous value to VDATA,
     840otherwise keep VDATA value. Operation is atomic.<br />
     841Operation:<br />
     842<code>UINT32* VM = (UINT32*)VMEM(SRSRC, VADDR, SOFFSET, OFFSET)
     843UINT32* P = *VM; *VM = *VM - VDATA; VDATA = (GLC) ? P : VDATA // atomic</code></p>
     844<h4>BUFFER_ATOMIC_SWAP</h4>
     845<p>Opcode: 48 (0x30) for GCN 1.0/1.1; 64 (0x40) for GCN 1.2<br />
     846Syntax: BUFFER_ATOMIC_SWAP VDATA, VADDR, SRSRC, SOFFSET<br />
     847Description: Store VDATA dword into SRSRC resource. If GLC flag is set then
     848return previous value to VDATA, otherwise keep VDATA value. Operation is atomic.<br />
     849Operation:<br />
     850<code>UINT32* VM = (UINT32*)VMEM(SRSRC, VADDR, SOFFSET, OFFSET)
     851UINT32* P = *VM; *VM = VDATA; VDATA = (GLC) ? P : VDATA // atomic</code></p>
     852<h4>BUFFER_ATOMIC_UMAX</h4>
     853<p>Opcode: 56 (0x38) for GCN 1.0/1.1; 71 (0x47) for GCN 1.2<br />
     854Syntax: BUFFER_ATOMIC_UMAX VDATA, VADDR, SRSRC, SOFFSET<br />
     855Description: Choose greatest unsigned 32-bit value from VDATA and from SRSRC resource,
     856and store result to this resource.
     857If GLC flag is set then return previous value to VDATA, otherwise keep VDATA value.
     858Operation is atomic.<br />
     859Operation:<br />
     860<code>UINT32* VM = (UINT32*)VMEM(SRSRC, VADDR, SOFFSET, OFFSET)
     861UINT32* P = *VM; *VM = MAX(*VM, (INT32)VDATA); VDATA = (GLC) ? P : VDATA // atomic</code></p>
     862<h4>BUFFER_ATOMIC_UMIN</h4>
     863<p>Opcode: 54 (0x36) for GCN 1.0/1.1; 69 (0x45) for GCN 1.2<br />
     864Syntax: BUFFER_ATOMIC_UMIN VDATA, VADDR, SRSRC, SOFFSET<br />
     865Description: Choose smallest unsigned 32-bit value from VDATA and from SRSRC resource,
     866and store result to this resource.
     867If GLC flag is set then return previous value to VDATA, otherwise keep VDATA value.
     868Operation is atomic.<br />
     869Operation:<br />
     870<code>UINT32* VM = (UINT32*)VMEM(SRSRC, VADDR, SOFFSET, OFFSET)
     871UINT32* P = *VM; *VM = MIN(*VM, (INT32)VDATA); VDATA = (GLC) ? P : VDATA // atomic</code></p>
     872<h4>BUFFER_LOAD_DWORD</h4>
     873<p>Opcode: 12 (0xc) for GCN 1.0/1.1; 20 (0x14) for GCN 1.2<br />
     874Syntax: BUFFER_LOAD_DWORD VDATA, VADDR, SRSRC, SOFFSET<br />
     875Description: Load dword to VDATA from SRSRC resource.<br />
     876Operation:<br />
     877<code>VDATA = *(UINT32*)VMEM(SRSRC, VADDR, SOFFSET, OFFSET)</code></p>
     878<h4>BUFFER_LOAD_DWORDX2</h4>
     879<p>Opcode: 13 (0xd) for GCN 1.0/1.1; 21 (0x15) for GCN 1.2<br />
     880Syntax: BUFFER_LOAD_DWORDX2 VDATA(2), VADDR, SRSRC, SOFFSET<br />
     881Description: Load two dwords to VDATA from SRSRC resource.<br />
     882Operation:<br />
     883<code>UINT32* VM = *(UINT32*)VMEM(SRSRC, VADDR, SOFFSET, OFFSET)
     884VDATA[0] = VM[0]
     885VDATA[1] = VM[1]</code></p>
     886<h4>BUFFER_LOAD_DWORDX3</h4>
     887<p>Opcode: 15 (0xf) for GCN 1.1; 22 (0x16) for GCN 1.2<br />
     888Syntax: BUFFER_LOAD_DWORDX3 VDATA(3), VADDR, SRSRC, SOFFSET<br />
     889Description: Load three dwords to VDATA from SRSRC resource.<br />
     890Operation:<br />
     891<code>UINT32* VM = *(UINT32*)VMEM(SRSRC, VADDR, SOFFSET, OFFSET)
     892VDATA[0] = VM[0]
     893VDATA[1] = VM[1]
     894VDATA[2] = VM[2]</code></p>
     895<h4>BUFFER_LOAD_DWORDX4</h4>
     896<p>Opcode: 14 (0xe) for GCN 1.0/1.1; 23 (0x17) for GCN 1.2<br />
     897Syntax: BUFFER_LOAD_DWORDX4 VDATA(4), VADDR, SRSRC, SOFFSET<br />
     898Description: Load four dwords to VDATA from SRSRC resource.<br />
     899Operation:<br />
     900<code>UINT32* VM = *(UINT32*)VMEM(SRSRC, VADDR, SOFFSET, OFFSET)
     901VDATA[0] = VM[0]
     902VDATA[1] = VM[1]
     903VDATA[2] = VM[2]
     904VDATA[3] = VM[3]</code></p>
    786905<h4>BUFFER_LOAD_FORMAT_X</h4>
    787906<p>Opcode: 0 (0x0)<br />
     
    812931Operation:<br />
    813932<code>VDATA[0] = LOAD_FORMAT_XYZW(SRSRC, VADDR, SOFFSET, OFFSET)</code></p>
     933<h4>BUFFER_LOAD_SBYTE</h4>
     934<p>Opcode: 9 (0x9) for GCN 1.0/1.1; 17 (0x11) for GCN 1.2<br />
     935Syntax: BUFFER_LOAD_SBYTE VDATA, VADDR, SRSRC, SOFFSET<br />
     936Description: Load byte to VDATA from SRSRC resource with sign extending.<br />
     937Operation:<br />
     938<code>VDATA = *(INT8*)VMEM(SRSRC, VADDR, SOFFSET, OFFSET)</code></p>
     939<h4>BUFFER_LOAD_SSHORT</h4>
     940<p>Opcode: 11 (0xb) for GCN 1.0/1.1; 19 (0x13) for GCN 1.2<br />
     941Syntax: BUFFER_LOAD_SSHORT VDATA, VADDR, SRSRC, SOFFSET<br />
     942Description: Load 16-bit word to VDATA from SRSRC resource with sign extending.<br />
     943Operation:<br />
     944<code>VDATA = *(INT16*)VMEM(SRSRC, VADDR, SOFFSET, OFFSET)</code></p>
     945<h4>BUFFER_LOAD_UBYTE</h4>
     946<p>Opcode: 8 (0x8) for GCN 1.0/1.1; 16 (0x10) for GCN 1.2<br />
     947Syntax: BUFFER_LOAD_UBYTE VDATA, VADDR, SRSRC, SOFFSET<br />
     948Description: Load byte to VDATA from SRSRC resource with zero extending.<br />
     949Operation:<br />
     950<code>VDATA = *(UINT8*)VMEM(SRSRC, VADDR, SOFFSET, OFFSET)</code></p>
     951<h4>BUFFER_LOAD_USHORT</h4>
     952<p>Opcode: 10 (0xa) for GCN 1.0/1.1; 18 (0x12) for GCN 1.2<br />
     953Syntax: BUFFER_LOAD_USHORT VDATA, VADDR, SRSRC, SOFFSET<br />
     954Description: Load 16-bit word to VDATA from SRSRC resource with zero extending.<br />
     955Operation:<br />
     956<code>VDATA = *(UINT16*)VMEM(SRSRC, VADDR, SOFFSET, OFFSET)</code></p>
     957<h4>BUFFER_STORE_BYTE</h4>
     958<p>Opcode: 24 (0x18)<br />
     959Syntax: BUFFER_STORE_BYTE VDATA, VADDR, SRSRC, SOFFSET<br />
     960Description: Store byte from VDATA into SRSRC resource.<br />
     961Operation:<br />
     962<code>*(UINT8*)VMEM(SRSRC, VADDR, SOFFSET, OFFSET) = VDATA&amp;0xff</code></p>
     963<h4>BUFFER_STORE_DWORD</h4>
     964<p>Opcode: 28 (0x1c)<br />
     965Syntax: BUFFER_STORE_DWORD VDATA, VADDR, SRSRC, SOFFSET<br />
     966Description: Store dword from VDATA into SRSRC resource.<br />
     967Operation:<br />
     968<code>*(UINT32*)VMEM(SRSRC, VADDR, SOFFSET, OFFSET) = VDATA</code></p>
     969<h4>BUFFER_STORE_DWORDX2</h4>
     970<p>Opcode: 29 (0x1d)<br />
     971Syntax: BUFFER_STORE_DWORDX2 VDATA(2), VADDR, SRSRC, SOFFSET<br />
     972Description: Store two dwords from VDATA into SRSRC resource.<br />
     973Operation:<br />
     974<code>UINT32* VM = *(UINT32*)VMEM(SRSRC, VADDR, SOFFSET, OFFSET)
     975VM[0] = VDATA[0]
     976VM[1] = VDATA[1]</code></p>
     977<h4>BUFFER_STORE_DWORDX3</h4>
     978<p>Opcode: 31 (0x1f) for GCN 1.1; 30 (0x1e) for GCN 1.2<br />
     979Syntax: BUFFER_STORE_DWORDX2 VDATA(3), VADDR, SRSRC, SOFFSET<br />
     980Description: Store three dwords from VDATA into SRSRC resource.<br />
     981Operation:<br />
     982<code>UINT32* VM = *(UINT32*)VMEM(SRSRC, VADDR, SOFFSET, OFFSET)
     983VM[0] = VDATA[0]
     984VM[1] = VDATA[1]
     985VM[2] = VDATA[2]</code></p>
     986<h4>BUFFER_STORE_DWORDX4</h4>
     987<p>Opcode: 31 (0x1e) for GCN 1.1; 31 (0x1f) for GCN 1.2<br />
     988Syntax: BUFFER_STORE_DWORDX2 VDATA(4), VADDR, SRSRC, SOFFSET<br />
     989Description: Store four dwords from VDATA into SRSRC resource.<br />
     990Operation:<br />
     991<code>UINT32* VM = *(UINT32*)VMEM(SRSRC, VADDR, SOFFSET, OFFSET)
     992VM[0] = VDATA[0]
     993VM[1] = VDATA[1]
     994VM[2] = VDATA[2]
     995VM[3] = VDATA[3]</code></p>
    814996<h4>BUFFER_STORE_FORMAT_X</h4>
    815997<p>Opcode: 4 (0x4)<br />
     
    8401022Operation:<br />
    8411023<code>STORE_FORMAT_XYZW(SRSRC, VADDR, SOFFSET, OFFSET, VDATA)</code></p>
     1024<h4>BUFFER_STORE_SHORT</h4>
     1025<p>Opcode: 26 (0x1a)<br />
     1026Syntax: BUFFER_STORE_SHORT VDATA, VADDR, SRSRC, SOFFSET<br />
     1027Description: Store 16-bit word from VDATA into SRSRC resource.<br />
     1028Operation:<br />
     1029<code>*(UINT16*)VMEM(SRSRC, VADDR, SOFFSET, OFFSET) = VDATA&amp;0xffff</code></p>
    8421030}}}