Changes between Version 3 and Version 4 of GcnInstrsFlat


Ignore:
Timestamp:
05/03/16 00:00:24 (8 years ago)
Author:
trac
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • GcnInstrsFlat

    v3 v4  
    471471<p>Alphabetically sorted instruction list:</p>
    472472<h4>FLAT_ATOMIC_ADD</h4>
    473 <p>Opcode: 50 (0x32) for GCN 1.0/1.1; 66 (0x42) for GCN 1.2<br />
     473<p>Opcode: 50 (0x32) for GCN 1.1; 66 (0x42) for GCN 1.2<br />
    474474Syntax: FLAT_ATOMIC_ADD VDST, VADDR(2), VDATA<br />
    475475Description: Add VDATA to value of VADDR address, and store result to this address.
     
    480480UINT32 P = *VM; *VM = *VM + VDATA; VDST = (GLC) ? P : VDST // atomic</code></p>
    481481<h4>FLAT_ATOMIC_ADD_X2</h4>
    482 <p>Opcode: 82 (0x52) for GCN 1.0/1.1; 98 (0x62) for GCN 1.2<br />
     482<p>Opcode: 82 (0x52) for GCN 1.1; 98 (0x62) for GCN 1.2<br />
    483483Syntax: FLAT_ATOMIC_ADD_X2 VDST(2), VADDR(2), VDATA(2)<br />
    484484Description: Add 64-bit VDATA to 64-bit value of VADDR address, and store result
     
    489489UINT64 P = *VM; *VM = *VM + VDATA; VDST = (GLC) ? P : VDST // atomic</code></p>
    490490<h4>FLAT_ATOMIC_AND</h4>
    491 <p>Opcode: 57 (0x39) for GCN 1.0/1.1; 72 (0x48) for GCN 1.2<br />
     491<p>Opcode: 57 (0x39) for GCN 1.1; 72 (0x48) for GCN 1.2<br />
    492492Syntax: FLAT_ATOMIC_AND VDST, VADDR(2), VDATA<br />
    493493Description: Do bitwise AND on VDATA and value of VADDR address,
     
    498498UINT32 P = *VM; *VM = *VM &amp; VDATA; VDST = (GLC) ? P : VDST // atomic</code></p>
    499499<h4>FLAT_ATOMIC_AND_X2</h4>
    500 <p>Opcode: 89 (0x59) for GCN 1.0/1.1; 104 (0x68) for GCN 1.2<br />
     500<p>Opcode: 89 (0x59) for GCN 1.1; 104 (0x68) for GCN 1.2<br />
    501501Syntax: FLAT_ATOMIC_AND_X2 VDST(2), VADDR(2), VDATA(2)<br />
    502502Description: Do 64-bit bitwise AND on VDATA and value of VADDR address,
     
    507507UINT64 P = *VM; *VM = *VM &amp; VDATA; VDST = (GLC) ? P : VDST // atomic</code></p>
    508508<h4>FLAT_ATOMIC_CMPSWAP</h4>
    509 <p>Opcode: 49 (0x31) for GCN 1.0/1.1; 65 (0x41) for GCN 1.2<br />
     509<p>Opcode: 49 (0x31) for GCN 1.1; 65 (0x41) for GCN 1.2<br />
    510510Syntax: FLAT_ATOMIC_CMPSWAP VDST, VADDR(2), VDATA(2)<br />
    511511Description: Store lower VDATA dword into VADDR address  if previous value
     
    518518VDST = (GLC) ? P : VDST // last part of atomic</code></p>
    519519<h4>FLAT_ATOMIC_CMPSWAP_X2</h4>
    520 <p>Opcode: 81 (0x51) for GCN 1.0/1.1; 97 (0x61) for GCN 1.2<br />
     520<p>Opcode: 81 (0x51) for GCN 1.1; 97 (0x61) for GCN 1.2<br />
    521521Syntax: FLAT_ATOMIC_CMPSWAP_X2 VDST(2), VADDR(2), VDATA(4)<br />
    522522Description: Store lower VDATA 64-bit word into VADDR address if previous value
     
    528528UINT64 P = *VM; *VM = *VM==(VDATA[2:3]) ? VDATA[0:1] : *VM // part of atomic
    529529VDST = (GLC) ? P : VDST // last part of atomic</code></p>
     530<h4>FLAT_ATOMIC_DEC</h4>
     531<p>Opcode: 61 (0x3d) for GCN 1.1; 76 (0x4c) for GCN 1.2<br />
     532Syntax: FLAT_ATOMIC_DEC VDST, VADDR(2), VDATA<br />
     533Description: Compare value from VADDR address and if less or equal than VDATA
     534and this value is not zero, then decrement value from VADDR address,
     535otherwise store VDATA to this address. If GLC flag is set then return previous value
     536from this address to VDST, otherwise keep VDST value. Operation is atomic.<br />
     537Operation:<br />
     538<code>UINT32* VM = (UINT32*)VADDR
     539UINT32 P = *VM; *VM = (*VM &lt;= VDATA &amp;&amp; *VM!=0) ? *VM-1 : VDATA // atomic
     540VDST = (GLC) ? P : VDST // atomic</code></p>
     541<h4>FLAT_ATOMIC_DEC_X2</h4>
     542<p>Opcode: 93 (0x5d) for GCN 1.1; 108 (0x6c) for GCN 1.2<br />
     543Syntax: FLAT_ATOMIC_DEC_X2 VDST(2), VADDR(2), VDATA(2)<br />
     544Description: Compare 64-bit value from VADDR address and if less or equal than VDATA
     545and this value is not zero, then decrement value from VADDR address,
     546otherwise store VDATA to this address. If GLC flag is set then return previous value
     547from this address to VDST, otherwise keep VDST value. Operation is atomic.<br />
     548Operation:<br />
     549<code>UINT64* VM = (UINT64*)VADDR
     550UINT64 P = *VM; *VM = (*VM &lt;= VDATA &amp;&amp; *VM!=0) ? *VM-1 : VDATA // atomic
     551VDST = (GLC) ? P : VDST // atomic</code></p>
     552<h4>BUFFER_ATOMIC_FCMPSWAP</h4>
     553<p>Opcode: 62 (0x3e) for GCN 1.1<br />
     554Syntax: FLAT_ATOMIC_FCMPSWAP VDST, VADDR(1:2), VDATA(2)<br />
     555Description: Store lower VDATA dword into VADDR address if previous single floating point
     556value from address is equal singe floating point value VDATA&gt;&gt;32,
     557otherwise keep old value from VADDR address.
     558If GLC flag is set then return previous value from this address to VDST,
     559otherwise keep VDST value. Operation is atomic.<br />
     560Operation:<br />
     561<code>FLOAT* VM = (FLOAT*)VADDR
     562FLOAT P = *VM; *VM = *VM==ASFLOAT(VDATA&gt;&gt;32) ? VDATA&amp;0xffffffff : *VM // part of atomic
     563VDST[0] = (GLC) ? P : VDST // last part of atomic</code></p>
     564<h4>FLAT_ATOMIC_FCMPSWAP_X2</h4>
     565<p>Opcode: 94 (0x5e) for GCN 1.1<br />
     566Syntax: FLAT_ATOMIC_FCMPSWAP_X2 VDATA(2), VADDR(2), SRSRC(4), SOFFSET<br />
     567Description: Store lower VDATA 64-bit word into VADDR address if previous double
     568floating point value from address is equal singe floating point value VDATA&gt;&gt;32,
     569otherwise keep old value from VADDR address.
     570If GLC flag is set then return previous value from address to VDST, otherwise keep
     571VDST value. Operation is atomic.<br />
     572Operation:<br />
     573<code>DOUBLE* VM = (DOUBLE*)VMADDR
     574DOUBLE P = *VM; *VM = *VM==ASDOUBLE(VDATA[2:3]) ? VDATA[0:1] : *VM // part of atomic
     575VDST = (GLC) ? P : VDST // last part of atomic</code></p>
     576<h4>FLAT_ATOMIC_FMAX</h4>
     577<p>Opcode: 64 (0x40) for GCN 1.1<br />
     578Syntax: FLAT_ATOMIC_FMAX VDST, VADDR(2), VDATA<br />
     579Description: Choose greatest single floating point value from VDATA and from
     580VADDR address, and store result to this address.
     581If GLC flag is set then return previous value from address to VDST, otherwise keep
     582VDST value. Operation is atomic.<br />
     583Operation:<br />
     584<code>FLOAT* VM = (FLOAT*)VADDR
     585UINT32 P = *VM; *VM = MAX(*VM, ASFLOAT(VDATA)); VDST = (GLC) ? P : VDST // atomic</code></p>
     586<h4>BUFFER_ATOMIC_FMAX_X2</h4>
     587<p>Opcode: 96 (0x60) for GCN 1.1<br />
     588Syntax: FLAT_ATOMIC_FMAX_X2 VDST(2), VADDR(2), VDATA(2)<br />
     589Description: Choose greatest double floating point value from VDATA and from
     590VADDR address, and store result to this address.
     591If GLC flag is set then return previous value from address to VDST,
     592otherwise keep VDST value. Operation is atomic.<br />
     593Operation:<br />
     594<code>DOUBLE* VM = (DOUBLE*)VADDR
     595UINT64 P = *VM; *VM = MAX(*VM, ASDOUBLE(VDATA)); VDST = (GLC) ? P : VDST // atomic</code></p>
     596<h4>FLAT_ATOMIC_FMIN</h4>
     597<p>Opcode: 63 (0x3f) for GCN 1.1<br />
     598Syntax: FLAT_ATOMIC_FMIN VDST, VADDR(2), VDATA<br />
     599Description: Choose smallest single floating point value from VDATA and from
     600VADDR address, and store result to this address.
     601If GLC flag is set then return previous value from address to VDST, otherwise keep
     602VDST value. Operation is atomic.<br />
     603Operation:<br />
     604<code>FLOAT* VM = (FLOAT*)VADDR
     605UINT32 P = *VM; *VM = MIN(*VM, ASFLOAT(VDATA)); VDST = (GLC) ? P : VDST // atomic</code></p>
     606<h4>BUFFER_ATOMIC_FMIN_X2</h4>
     607<p>Opcode: 95 (0x5f) for GCN 1.1<br />
     608Syntax: FLAT_ATOMIC_FMIN_X2 VDST(2), VADDR(2), VDATA(2)<br />
     609Description: Choose smallest double floating point value from VDATA and from
     610VADDR address, and store result to this address.
     611If GLC flag is set then return previous value from address to VDST,
     612otherwise keep VDST value. Operation is atomic.<br />
     613Operation:<br />
     614<code>DOUBLE* VM = (DOUBLE*)VADDR
     615UINT64 P = *VM; *VM = MIN(*VM, ASDOUBLE(VDATA)); VDST = (GLC) ? P : VDST // atomic</code></p>
     616<h4>FLAT_ATOMIC_INC</h4>
     617<p>Opcode: 60 (0x3c) for GCN 1.1; 75 (0x4b) for GCN 1.2<br />
     618Syntax: FLT_ATOMIC_INC VDST, VADDR(2), VDATA<br />
     619Description: Compare value from VADDR address and if less than VDATA,
     620then increment value from address, otherwise store zero to address.
     621If GLC flag is set then return previous value from this address to VDST,
     622otherwise keep VDST value. Operation is atomic.<br />
     623Operation:<br />
     624<code>UINT32* VM = (UINT32*)VADDR
     625UINT32 P = *VM; *VM = (*VM &lt; VDATA) ? *VM+1 : 0; VDST = (GLC) ? P : VDST // atomic</code></p>
     626<h4>FLAT_ATOMIC_INC_X2</h4>
     627<p>Opcode: 92 (0x5c) for GCN 1.1; 107 (0x9b) for GCN 1.2<br />
     628Syntax: FLAT_ATOMIC_INC_X2 VDST(2), VADDR(2), VADDR(2)<br />
     629Description: Compare 64-bit value from VADDR address and if less than VDATA,
     630then increment value from address, otherwise store zero to address.
     631If GLC flag is set then return previous value from this address to VDST,
     632otherwise keep VDST value. Operation is atomic.<br />
     633Operation:<br />
     634<code>UINT64* VM = (UINT64*)VADDR
     635UINT64 P = *VM; *VM = (*VM &lt; VDATA) ? *VM+1 : 0; VDST = (GLC) ? P : VDST // atomic</code></p>
    530636<h4>FLAT_ATOMIC_OR</h4>
    531 <p>Opcode: 58 (0x3a) for GCN 1.0/1.1; 73 (0x49) for GCN 1.2<br />
     637<p>Opcode: 58 (0x3a) for GCN 1.1; 73 (0x49) for GCN 1.2<br />
    532638Syntax: FLAT_ATOMIC_OR VDST, VADDR(2), VDATA<br />
    533639Description: Do bitwise OR on VDATA and value of VADDR address,
     
    538644UINT32 P = *VM; *VM = *VM | VDATA; VDST = (GLC) ? P : VDST // atomic</code></p>
    539645<h4>FLAT_ATOMIC_OR_X2</h4>
    540 <p>Opcode: 90 (0x5a) for GCN 1.0/1.1; 105 (0x69) for GCN 1.2<br />
     646<p>Opcode: 90 (0x5a) for GCN 1.1; 105 (0x69) for GCN 1.2<br />
    541647Syntax: FLAT_ATOMIC_OR_X2 VDST(2), VADDR(2), VDATA(2)<br />
    542648Description: Do 64-bit bitwise OR on VDATA and value of VADDR address,
     
    547653UINT64 P = *VM; *VM = *VM | VDATA; VDST = (GLC) ? P : VDST // atomic</code></p>
    548654<h4>FLAT_ATOMIC_SMAX</h4>
    549 <p>Opcode: 55 (0x37) for GCN 1.0/1.1; 70 (0x46) for GCN 1.2<br />
     655<p>Opcode: 55 (0x37) for GCN 1.1; 70 (0x46) for GCN 1.2<br />
    550656Syntax: FLAT_ATOMIC_SMAX VDST, VADDR(2), VDATA<br />
    551657Description: Choose greatest signed 32-bit value from VDATA and from VADDR address,
     
    557663UINT32 P = *VM; *VM = MAX(*VM, (INT32)VDATA); VDST = (GLC) ? P : VDST // atomic</code></p>
    558664<h4>FLAT_ATOMIC_SMAX_X2</h4>
    559 <p>Opcode: 87 (0x57) for GCN 1.0/1.1; 102 (0x66) for GCN 1.2<br />
     665<p>Opcode: 87 (0x57) for GCN 1.1; 102 (0x66) for GCN 1.2<br />
    560666Syntax: FLAT_ATOMIC_SMAX_X2 VDST(2), VADDR(2), VDATA(2)<br />
    561667Description: Choose greatest signed 64-bit value from VDATA and from VADDR address,
     
    567673UINT64 P = *VM; *VM = MAX(*VM, (INT64)VDATA); VDST = (GLC) ? P : VDST // atomic</code></p>
    568674<h4>FLAT_ATOMIC_SMIN</h4>
    569 <p>Opcode: 53 (0x35) for GCN 1.0/1.1; 68 (0x44) for GCN 1.2<br />
     675<p>Opcode: 53 (0x35) for GCN 1.1; 68 (0x44) for GCN 1.2<br />
    570676Syntax: FLAT_ATOMIC_SMIN VDST, VADDR(2), VDATA<br />
    571677Description: Choose smallest signed 32-bit value from VDATA and from VADDR address,
     
    577683UINT32 P = *VM; *VM = MIN(*VM, (INT32)VDATA); VDST = (GLC) ? P : VDST // atomic</code></p>
    578684<h4>FLAT_ATOMIC_SMIN_X2</h4>
    579 <p>Opcode: 85 (0x55) for GCN 1.0/1.1; 100 (0x64) for GCN 1.2<br />
     685<p>Opcode: 85 (0x55) for GCN 1.1; 100 (0x64) for GCN 1.2<br />
    580686Syntax: FLAT_ATOMIC_SMIN_X2 VDST(2), VADDR(2), VDATA(2)<br />
    581687Description: Choose smallest signed 64-bit value from VDATA and from VADDR address,
     
    587693UINT64 P = *VM; *VM = MIN(*VM, (INT64)VDATA); VDST = (GLC) ? P : VDST // atomic</code></p>
    588694<h4>FLAT_ATOMIC_SUB</h4>
    589 <p>Opcode: 51 (0x33) for GCN 1.0/1.1; 67 (0x43) for GCN 1.2<br />
     695<p>Opcode: 51 (0x33) for GCN 1.1; 67 (0x43) for GCN 1.2<br />
    590696Syntax: FLAT_ATOMIC_SUB VDST, VADDR(2), VDATA<br />
    591697Description: Subtract VDATA from value of VADDR address, and store result to this address.
     
    596702UINT32 P = *VM; *VM = *VM - VDATA; VDST = (GLC) ? P : VDST // atomic</code></p>
    597703<h4>FLAT_ATOMIC_SUB_X2</h4>
    598 <p>Opcode: 83 (0x53) for GCN 1.0/1.1; 99 (0x63) for GCN 1.2<br />
     704<p>Opcode: 83 (0x53) for GCN 1.1; 99 (0x63) for GCN 1.2<br />
    599705Syntax: FLAT_ATOMIC_SUB_X2 VDST(2), VADDR(2), VDATA(2)<br />
    600706Description: Subtract 64-bit VDATA from 64-bit value of VADDR address, and store result
     
    605711UINT64 P = *VM; *VM = *VM - VDATA; VDST = (GLC) ? P : VDST // atomic</code></p>
    606712<h4>FLAT_ATOMIC_SWAP</h4>
    607 <p>Opcode: 48 (0x30) for GCN 1.0/1.1; 64 (0x40) for GCN 1.2<br />
     713<p>Opcode: 48 (0x30) for GCN 1.1; 64 (0x40) for GCN 1.2<br />
    608714Syntax: FLAT_ATOMIC_SWAP VDST, VADDR(2), VDATA
    609715Description: Store VDATA dword into VADDR address. If GLC flag is set then
     
    614720UINT32 P = *VM; *VM = VDATA; VDST = (GLC) ? P : VDST // atomic</code></p>
    615721<h4>FLAT_ATOMIC_SWAP_X2</h4>
    616 <p>Opcode: 80 (0x50) for GCN 1.0/1.1; 96 (0x60) for GCN 1.2<br />
     722<p>Opcode: 80 (0x50) for GCN 1.1; 96 (0x60) for GCN 1.2<br />
    617723Syntax: FLAT_ATOMIC_SWAP_X2 VDST(2), VADDR(2), VDATA(2)
    618724Description: Store VDATA 64-bit word into VADDR address. If GLC flag is set then
     
    623729UINT64 P = *VM; *VM = VDATA; VDST = (GLC) ? P : VDST // atomic</code></p>
    624730<h4>FLAT_ATOMIC_UMAX</h4>
    625 <p>Opcode: 56 (0x38) for GCN 1.0/1.1; 71 (0x47) for GCN 1.2<br />
     731<p>Opcode: 56 (0x38) for GCN 1.1; 71 (0x47) for GCN 1.2<br />
    626732Syntax: FLAT_ATOMIC_UMAX VDST, VADDR(2), VDATA<br />
    627733Description: Choose greatest unsigned 32-bit value from VDATA and from VADDR address,
     
    633739UINT32 P = *VM; *VM = MAX(*VM, (UINT32)VDATA); VDST = (GLC) ? P : VDST // atomic</code></p>
    634740<h4>FLAT_ATOMIC_UMAX_X2</h4>
    635 <p>Opcode: 88 (0x58) for GCN 1.0/1.1; 103 (0x67) for GCN 1.2<br />
     741<p>Opcode: 88 (0x58) for GCN 1.1; 103 (0x67) for GCN 1.2<br />
    636742Syntax: FLAT_ATOMIC_UMAX_X2 VDST(2), VADDR(2), VDATA(2)<br />
    637743Description: Choose greatest unsigned 64-bit value from VDATA and from VADDR address,
     
    643749UINT64 P = *VM; *VM = MAX(*VM, (UINT64)VDATA); VDST = (GLC) ? P : VDST // atomic</code></p>
    644750<h4>FLAT_ATOMIC_UMIN</h4>
    645 <p>Opcode: 54 (0x36) for GCN 1.0/1.1; 69 (0x45) for GCN 1.2<br />
     751<p>Opcode: 54 (0x36) for GCN 1.1; 69 (0x45) for GCN 1.2<br />
    646752Syntax: FLAT_ATOMIC_UMIN VDST, VADDR(2), VDATA<br />
    647753Description: Choose smallest unsigned 32-bit value from VDATA and from VADDR address,
     
    653759UINT32 P = *VM; *VM = MIN(*VM, (UINT32)VDATA); VDST = (GLC) ? P : VDST // atomic</code></p>
    654760<h4>FLAT_ATOMIC_UMIN_X2</h4>
    655 <p>Opcode: 86 (0x56) for GCN 1.0/1.1; 101 (0x65) for GCN 1.2<br />
     761<p>Opcode: 86 (0x56) for GCN 1.1; 101 (0x65) for GCN 1.2<br />
    656762Syntax: FLAT_ATOMIC_UMIN_X2 VDST(2), VADDR(2), VDATA(2)<br />
    657763Description: Choose smallest unsigned 64-bit value from VDATA and from VADDR address,
     
    663769UINT64 P = *VM; *VM = MIN(*VM, (UINT64)VDATA); VDST = (GLC) ? P : VDST // atomic</code></p>
    664770<h4>FLAT_ATOMIC_XOR</h4>
    665 <p>Opcode: 59 (0x3b) for GCN 1.0/1.1; 73 (0x4a) for GCN 1.2<br />
     771<p>Opcode: 59 (0x3b) for GCN 1.1; 73 (0x4a) for GCN 1.2<br />
    666772Syntax: FLAT_ATOMIC_XOR VDST, VADDR(2), VDATA<br />
    667773Description: Do bitwise XOR on VDATA and value of VADDR address,
     
    672778UINT32 P = *VM; *VM = *VM ^ VDATA; VDST = (GLC) ? P : VDST // atomic</code></p>
    673779<h4>FLAT_ATOMIC_XOR_X2</h4>
    674 <p>Opcode: 91 (0x5b) for GCN 1.0/1.1; 106 (0x6a) for GCN 1.2<br />
     780<p>Opcode: 91 (0x5b) for GCN 1.1; 106 (0x6a) for GCN 1.2<br />
    675781Syntax: FLAT_ATOMIC_XOR_X2 VDST(2), VADDR(2), VDATA(2)<br />
    676782Description: Do 64-bit bitwise XOR on VDATA and value of VADDR address,
     
    762868<p>Opcode: 30 (0x1e) for GCN 1.1; 31 (0x1d) for GCN 1.2<br />
    763869Syntax: FLAT_STORE_DWORDX4 VADDR(2), VDATA(4)<br />
    764 Description: Store three dwords from VDATA to VADDR address.<br />
     870Description: Store four dwords from VDATA to VADDR address.<br />
    765871Operation:<br />
    766872<code>*(UINT32*)(VADDR) = VDATA[0]