Changes between Version 10 and Version 11 of GcnInstrsFlat


Ignore:
Timestamp:
11/29/17 19:00:38 (6 years ago)
Author:
trac
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • GcnInstrsFlat

    v10 v11  
    185185Instruction syntax: INSTRUCTION VADDR(2), VDATA [MODIFIERS]</p>
    186186<p>GLOBAL instruction syntax: INSTRUCTION VDST, VADDR(2), SADDR(2)|OFF [MODIFIERS]<br />
    187 GLOBAL instruction syntax: INSTRUCTION VADDR(2), VDATA, SADDR(2)|OFF [MODIFIERS]<br />
     187GLOBAL instruction syntax: INSTRUCTION VADDR(1:2), VDATA, SADDR(2)|OFF [MODIFIERS]<br />
    188188SCRATCH instruction syntax: INSTRUCTION VDST, VADDR(2), SADDR|OFF [MODIFIERS]<br />
    189 SCRATCH instruction syntax: INSTRUCTION VADDR(2), VDATA, SADDR|OFF [MODIFIERS]</p>
     189SCRATCH instruction syntax: INSTRUCTION VADDR, VDATA, SADDR|OFF [MODIFIERS]</p>
    190190<p>Modifiers can be supplied in any order. Modifiers list: SLC, GLC, TFE,
    191191LDS, NV, INST_OFFSET:OFFSET. The TFE flag requires additional the VDATA register.
     
    196196<p>OFFSET (INST_OFFSET modifier) can be 13-bit signed for GLOBAL_* and SCRATCH_*
    197197instructions or 12-bit unsigned for FLAT_* instructions.</p>
     198<p>For GLOBAL instruction VADDR have 2 registers if SADDR is OFF, otherwise VADDR holds
     19932-bit offset in single VGPR register.</p>
    198200<h3>Instructions by opcode</h3>
    199201<p>List of the FLAT instructions by opcode (GCN 1.1/1.2):</p>
     
    14251427<h4>GLOBAL_ATOMIC_ADD</h4>
    14261428<p>Opcode: 66 (0x42) for GCN 1.4<br />
    1427 Syntax: GLOBAL_ATOMIC_ADD VDST, VADDR(2), VDATA, SADDR(2)|OFF<br />
     1429Syntax: GLOBAL_ATOMIC_ADD VDST, VADDR(1:2), VDATA, SADDR(2)|OFF<br />
    14281430Description: Add VDATA to value of global address, and store result to this address.
    14291431If GLC flag is set then return previous value from this address to VDST,
     
    14341436<h4>GLOBAL_ATOMIC_ADD_X2</h4>
    14351437<p>Opcode: 98 (0x62) for GCN 1.4<br />
    1436 Syntax: GLOBAL_ATOMIC_ADD_X2 VDST(2), VADDR(2), VDATA(2), SADDR(2)|OFF<br />
     1438Syntax: GLOBAL_ATOMIC_ADD_X2 VDST(2), VADDR(1:2), VDATA(2), SADDR(2)|OFF<br />
    14371439Description: Add 64-bit VDATA to 64-bit value of global address, and store result
    14381440to this address. If GLC flag is set then return previous value from address to VDST,
     
    14431445<h4>GLOBAL_ATOMIC_AND</h4>
    14441446<p>Opcode: 72 (0x48) for GCN 1.4<br />
    1445 Syntax: GLOBAL_ATOMIC_AND VDST, VADDR(2), VDATA, SADDR(2)|OFF<br />
     1447Syntax: GLOBAL_ATOMIC_AND VDST, VADDR(1:2), VDATA, SADDR(2)|OFF<br />
    14461448Description: Do bitwise AND on VDATA and value of global address,
    14471449and store result to this address. If GLC flag is set then return previous value
     
    14521454<h4>GLOBAL_ATOMIC_AND_X2</h4>
    14531455<p>Opcode: 104 (0x68) for GCN 1.4<br />
    1454 Syntax: GLOBAL_ATOMIC_AND_X2 VDST(2), VADDR(2), VDATA(2), SADDR(2)|OFF<br />
     1456Syntax: GLOBAL_ATOMIC_AND_X2 VDST(2), VADDR(1:2), VDATA(2), SADDR(2)|OFF<br />
    14551457Description: Do 64-bit bitwise AND on VDATA and value of global address,
    14561458and store result to this address. If GLC flag is set then return previous value
     
    14611463<h4>GLOBAL_ATOMIC_CMPSWAP</h4>
    14621464<p>Opcode: 65 (0x41) for GCN 1.4<br />
    1463 Syntax: GLOBAL_ATOMIC_CMPSWAP VDST, VADDR(2), VDATA(2), SADDR(2)|OFF<br />
     1465Syntax: GLOBAL_ATOMIC_CMPSWAP VDST, VADDR(1:2), VDATA(2), SADDR(2)|OFF<br />
    14641466Description: Store lower VDATA dword into global address  if previous value
    14651467from that address is equal VDATA&gt;&gt;32, otherwise keep old value from address.
     
    14721474<h4>GLOBAL_ATOMIC_CMPSWAP_X2</h4>
    14731475<p>Opcode: 97 (0x61) for GCN 1.4<br />
    1474 Syntax: GLOBAL_ATOMIC_CMPSWAP_X2 VDST(2), VADDR(2), VDATA(4), SADDR(2)|OFF<br />
     1476Syntax: GLOBAL_ATOMIC_CMPSWAP_X2 VDST(2), VADDR(1:2), VDATA(4), SADDR(2)|OFF<br />
    14751477Description: Store lower VDATA 64-bit word into global address if previous value
    14761478from address is equal VDATA&gt;&gt;64, otherwise keep old value from VADDR.
     
    14831485<h4>GLOBAL_ATOMIC_DEC</h4>
    14841486<p>Opcode: 76 (0x4c) for GCN 1.4<br />
    1485 Syntax: GLOBAL_ATOMIC_DEC VDST, VADDR(2), VDATA, SADDR(2)|OFF<br />
     1487Syntax: GLOBAL_ATOMIC_DEC VDST, VADDR(1:2), VDATA, SADDR(2)|OFF<br />
    14861488Description: Compare value from global address and if less or equal than VDATA
    14871489and this value is not zero, then decrement value from global address,
     
    14941496<h4>GLOBAL_ATOMIC_DEC_X2</h4>
    14951497<p>Opcode: 108 (0x6c) for GCN 1.4<br />
    1496 Syntax: GLOBAL_ATOMIC_DEC_X2 VDST(2), VADDR(2), VDATA(2), SADDR(2)|OFF<br />
     1498Syntax: GLOBAL_ATOMIC_DEC_X2 VDST(2), VADDR(1:2), VDATA(2), SADDR(2)|OFF<br />
    14971499Description: Compare 64-bit value from global address and if less or equal than VDATA
    14981500and this value is not zero, then decrement value from global address,
     
    15051507<h4>GLOBAL_ATOMIC_INC</h4>
    15061508<p>Opcode: 75 (0x4b) for GCN 1.4<br />
    1507 Syntax: FLT_ATOMIC_INC VDST, VADDR(2), VDATA, SADDR(2)|OFF<br />
     1509Syntax: FLT_ATOMIC_INC VDST, VADDR(1:2), VDATA, SADDR(2)|OFF<br />
    15081510Description: Compare value from global address and if less than VDATA,
    15091511then increment value from address, otherwise store zero to address.
     
    15151517<h4>GLOBAL_ATOMIC_INC_X2</h4>
    15161518<p>Opcode: 107 (0x9b) for GCN 1.4<br />
    1517 Syntax: GLOBAL_ATOMIC_INC_X2 VDST(2), VADDR(2), VADDR(2), SADDR(2)|OFF<br />
     1519Syntax: GLOBAL_ATOMIC_INC_X2 VDST(2), VADDR(1:2), VADDR(1:2), SADDR(2)|OFF<br />
    15181520Description: Compare 64-bit value from global address and if less than VDATA,
    15191521then increment value from address, otherwise store zero to address.
     
    15251527<h4>GLOBAL_ATOMIC_OR</h4>
    15261528<p>Opcode: 73 (0x49) for GCN 1.4<br />
    1527 Syntax: GLOBAL_ATOMIC_OR VDST, VADDR(2), VDATA, SADDR(2)|OFF<br />
     1529Syntax: GLOBAL_ATOMIC_OR VDST, VADDR(1:2), VDATA, SADDR(2)|OFF<br />
    15281530Description: Do bitwise OR on VDATA and value of global address,
    15291531and store result to this address. If GLC flag is set then return previous value
     
    15341536<h4>GLOBAL_ATOMIC_OR_X2</h4>
    15351537<p>Opcode: 105 (0x69) for GCN 1.4<br />
    1536 Syntax: GLOBAL_ATOMIC_OR_X2 VDST(2), VADDR(2), VDATA(2), SADDR(2)|OFF<br />
     1538Syntax: GLOBAL_ATOMIC_OR_X2 VDST(2), VADDR(1:2), VDATA(2), SADDR(2)|OFF<br />
    15371539Description: Do 64-bit bitwise OR on VDATA and value of global address,
    15381540and store result to this address. If GLC flag is set then return previous value
     
    15431545<h4>GLOBAL_ATOMIC_SMAX</h4>
    15441546<p>Opcode: 70 (0x46) for GCN 1.4<br />
    1545 Syntax: GLOBAL_ATOMIC_SMAX VDST, VADDR(2), VDATA, SADDR(2)|OFF<br />
     1547Syntax: GLOBAL_ATOMIC_SMAX VDST, VADDR(1:2), VDATA, SADDR(2)|OFF<br />
    15461548Description: Choose greatest signed 32-bit value from VDATA and from global address,
    15471549and store result to this address.
     
    15531555<h4>GLOBAL_ATOMIC_SMAX_X2</h4>
    15541556<p>Opcode: 102 (0x66) for GCN 1.4<br />
    1555 Syntax: GLOBAL_ATOMIC_SMAX_X2 VDST(2), VADDR(2), VDATA(2), SADDR(2)|OFF<br />
     1557Syntax: GLOBAL_ATOMIC_SMAX_X2 VDST(2), VADDR(1:2), VDATA(2), SADDR(2)|OFF<br />
    15561558Description: Choose greatest signed 64-bit value from VDATA and from global address,
    15571559and store result to this address.
     
    15631565<h4>GLOBAL_ATOMIC_SMIN</h4>
    15641566<p>Opcode: 68 (0x44) for GCN 1.4<br />
    1565 Syntax: GLOBAL_ATOMIC_SMIN VDST, VADDR(2), VDATA, SADDR(2)|OFF<br />
     1567Syntax: GLOBAL_ATOMIC_SMIN VDST, VADDR(1:2), VDATA, SADDR(2)|OFF<br />
    15661568Description: Choose smallest signed 32-bit value from VDATA and from global address,
    15671569and store result to this address.
     
    15731575<h4>GLOBAL_ATOMIC_SMIN_X2</h4>
    15741576<p>Opcode: 100 (0x64) for GCN 1.4<br />
    1575 Syntax: GLOBAL_ATOMIC_SMIN_X2 VDST(2), VADDR(2), VDATA(2), SADDR(2)|OFF<br />
     1577Syntax: GLOBAL_ATOMIC_SMIN_X2 VDST(2), VADDR(1:2), VDATA(2), SADDR(2)|OFF<br />
    15761578Description: Choose smallest signed 64-bit value from VDATA and from global address,
    15771579and store result to this address.
     
    15831585<h4>GLOBAL_ATOMIC_SUB</h4>
    15841586<p>Opcode: 67 (0x43) for GCN 1.4<br />
    1585 Syntax: GLOBAL_ATOMIC_SUB VDST, VADDR(2), VDATA, SADDR(2)|OFF<br />
     1587Syntax: GLOBAL_ATOMIC_SUB VDST, VADDR(1:2), VDATA, SADDR(2)|OFF<br />
    15861588Description: Subtract VDATA from value of global address, and store result to this address.
    15871589If GLC flag is set then return previous value from this address to VDST,
     
    15921594<h4>GLOBAL_ATOMIC_SUB_X2</h4>
    15931595<p>Opcode: 99 (0x63) for GCN 1.4<br />
    1594 Syntax: GLOBAL_ATOMIC_SUB_X2 VDST(2), VADDR(2), VDATA(2), SADDR(2)|OFF<br />
     1596Syntax: GLOBAL_ATOMIC_SUB_X2 VDST(2), VADDR(1:2), VDATA(2), SADDR(2)|OFF<br />
    15951597Description: Subtract 64-bit VDATA from 64-bit value of global address, and store result
    15961598to this address. If GLC flag is set then return previous value from address to VDST,
     
    16011603<h4>GLOBAL_ATOMIC_SWAP</h4>
    16021604<p>Opcode: 64 (0x40) for GCN 1.4<br />
    1603 Syntax: GLOBAL_ATOMIC_SWAP VDST, VADDR(2), VDATA, SADDR(2)|OFF<br />
     1605Syntax: GLOBAL_ATOMIC_SWAP VDST, VADDR(1:2), VDATA, SADDR(2)|OFF<br />
    16041606Description: Store VDATA dword into global address. If GLC flag is set then
    16051607return previous value from global address to VDST, otherwise keep old value from VDST.
     
    16101612<h4>GLOBAL_ATOMIC_SWAP_X2</h4>
    16111613<p>Opcode: 96 (0x60) for GCN 1.4<br />
    1612 Syntax: GLOBAL_ATOMIC_SWAP_X2 VDST(2), VADDR(2), VDATA(2), SADDR(2)|OFF<br />
     1614Syntax: GLOBAL_ATOMIC_SWAP_X2 VDST(2), VADDR(1:2), VDATA(2), SADDR(2)|OFF<br />
    16131615Description: Store VDATA 64-bit word into global address. If GLC flag is set then
    16141616return previous value from global address to VDST, otherwise keep old value from VDST.
     
    16191621<h4>GLOBAL_ATOMIC_UMAX</h4>
    16201622<p>Opcode: 71 (0x47) for GCN 1.4<br />
    1621 Syntax: GLOBAL_ATOMIC_UMAX VDST, VADDR(2), VDATA, SADDR(2)|OFF<br />
     1623Syntax: GLOBAL_ATOMIC_UMAX VDST, VADDR(1:2), VDATA, SADDR(2)|OFF<br />
    16221624Description: Choose greatest unsigned 32-bit value from VDATA and from global address,
    16231625and store result to this address.
     
    16291631<h4>GLOBAL_ATOMIC_UMAX_X2</h4>
    16301632<p>Opcode: 103 (0x67) for GCN 1.4<br />
    1631 Syntax: GLOBAL_ATOMIC_UMAX_X2 VDST(2), VADDR(2), VDATA(2), SADDR(2)|OFF<br />
     1633Syntax: GLOBAL_ATOMIC_UMAX_X2 VDST(2), VADDR(1:2), VDATA(2), SADDR(2)|OFF<br />
    16321634Description: Choose greatest unsigned 64-bit value from VDATA and from global address,
    16331635and store result to this address.
     
    16391641<h4>GLOBAL_ATOMIC_UMIN</h4>
    16401642<p>Opcode: 69 (0x45) for GCN 1.4<br />
    1641 Syntax: GLOBAL_ATOMIC_UMIN VDST, VADDR(2), VDATA, SADDR(2)|OFF<br />
     1643Syntax: GLOBAL_ATOMIC_UMIN VDST, VADDR(1:2), VDATA, SADDR(2)|OFF<br />
    16421644Description: Choose smallest unsigned 32-bit value from VDATA and from global address,
    16431645and store result to this address.
     
    16491651<h4>GLOBAL_ATOMIC_UMIN_X2</h4>
    16501652<p>Opcode: 101 (0x65) for GCN 1.4<br />
    1651 Syntax: GLOBAL_ATOMIC_UMIN_X2 VDST(2), VADDR(2), VDATA(2), SADDR(2)|OFF<br />
     1653Syntax: GLOBAL_ATOMIC_UMIN_X2 VDST(2), VADDR(1:2), VDATA(2), SADDR(2)|OFF<br />
    16521654Description: Choose smallest unsigned 64-bit value from VDATA and from global address,
    16531655and store result to this address.
     
    16591661<h4>GLOBAL_ATOMIC_XOR</h4>
    16601662<p>Opcode: 74 (0x4a) for GCN 1.4<br />
    1661 Syntax: GLOBAL_ATOMIC_XOR VDST, VADDR(2), VDATA, SADDR(2)|OFF<br />
     1663Syntax: GLOBAL_ATOMIC_XOR VDST, VADDR(1:2), VDATA, SADDR(2)|OFF<br />
    16621664Description: Do bitwise XOR on VDATA and value of global address,
    16631665and store result to this address. If GLC flag is set then return previous value
     
    16681670<h4>GLOBAL_ATOMIC_XOR_X2</h4>
    16691671<p>Opcode: 106 (0x6a) for GCN 1.4<br />
    1670 Syntax: GLOBAL_ATOMIC_XOR_X2 VDST(2), VADDR(2), VDATA(2), SADDR(2)|OFF<br />
     1672Syntax: GLOBAL_ATOMIC_XOR_X2 VDST(2), VADDR(1:2), VDATA(2), SADDR(2)|OFF<br />
    16711673Description: Do 64-bit bitwise XOR on VDATA and value of global address,
    16721674and store result to this address. If GLC flag is set then return previous value
     
    16771679<h4>GLOBAL_LOAD_DWORD</h4>
    16781680<p>Opcode: 20 (0x14) for GCN 1.4<br />
    1679 Syntax: GLOBAL_LOAD_DWORD VDST, VADDR(2), SADDR(2)|OFF<br />
     1681Syntax: GLOBAL_LOAD_DWORD VDST, VADDR(1:2), SADDR(2)|OFF<br />
    16801682Description Load dword to VDST from global address.<br />
    16811683Operation:<br />
     
    16831685<h4>GLOBAL_LOAD_DWORDX2</h4>
    16841686<p>Opcode: 21 (0x15) for GCN 1.4<br />
    1685 Syntax: GLOBAL_LOAD_DWORDX2 VDST(, VADDR(2), SADDR(2)|OFF<br />
     1687Syntax: GLOBAL_LOAD_DWORDX2 VDST(, VADDR(1:2), SADDR(2)|OFF<br />
    16861688Description Load two dwords to VDST from global address.<br />
    16871689Operation:<br />
     
    16891691<h4>GLOBAL_LOAD_DWORDX3</h4>
    16901692<p>Opcode: 22 (0x16) for GCN 1.4<br />
    1691 Syntax: GLOBAL_LOAD_DWORDX3 VDST(3), VADDR(2), SADDR(2)|OFF<br />
     1693Syntax: GLOBAL_LOAD_DWORDX3 VDST(3), VADDR(1:2), SADDR(2)|OFF<br />
    16921694Description Load three dwords to VDST from global address.<br />
    16931695Operation:<br />
     
    16981700<h4>GLOBAL_LOAD_DWORDX4</h4>
    16991701<p>Opcode: 23 (0x17) for GCN 1.4<br />
    1700 Syntax: GLOBAL_LOAD_DWORDX4 VDST(4), VADDR(2), SADDR(2)|OFF<br />
     1702Syntax: GLOBAL_LOAD_DWORDX4 VDST(4), VADDR(1:2), SADDR(2)|OFF<br />
    17011703Description Load four dwords to VDST from global address.<br />
    17021704Operation:<br />
     
    17081710<h4>GLOBAL_LOAD_SBYTE</h4>
    17091711<p>Opcode: 17 (0x11) for GCN 1.4<br />
    1710 Syntax: GLOBAL_LOAD_SBYTE VDST, VADDR(2), SADDR(2)|OFF<br />
     1712Syntax: GLOBAL_LOAD_SBYTE VDST, VADDR(1:2), SADDR(2)|OFF<br />
    17111713Description: Load byte to VDST from global address with sign extending.<br />
    17121714Operation:<br />
     
    17141716<h4>GLOBAL_LOAD_SBYTE_D16</h4>
    17151717<p>Opcode: 34 (0x22) for GCN 1.4<br />
    1716 Syntax: GLOBAL_LOAD_SBYTE_D16 VDST, VADDR(2), SADDR(2)|OFF<br />
     1718Syntax: GLOBAL_LOAD_SBYTE_D16 VDST, VADDR(1:2), SADDR(2)|OFF<br />
    17171719Description: Load byte to lower 16-bit part of VDST from
    17181720global address with sign extending.<br />
     
    17221724<h4>GLOBAL_LOAD_SBYTE_D16_HI</h4>
    17231725<p>Opcode: 35 (0x23) for GCN 1.4<br />
    1724 Syntax: GLOBAL_LOAD_SBYTE_D16_HI VDST, VADDR(2), SADDR(2)|OFF<br />
     1726Syntax: GLOBAL_LOAD_SBYTE_D16_HI VDST, VADDR(1:2), SADDR(2)|OFF<br />
    17251727Description: Load byte to higher 16-bit part of VDST from
    17261728global address with sign extending.<br />
     
    17301732<h4>GLOBAL_LOAD_SHORT_D16</h4>
    17311733<p>Opcode: 36 (0x24) for GCN 1.4<br />
    1732 Syntax: GLOBAL_LOAD_SHORT_D16 VDST, VADDR(2), SADDR(2)|OFF<br />
     1734Syntax: GLOBAL_LOAD_SHORT_D16 VDST, VADDR(1:2), SADDR(2)|OFF<br />
    17331735Description: Load 16-bit word to lower 16-bit part of VDST from global address.<br />
    17341736Operation:<br />
     
    17371739<h4>GLOBAL_LOAD_SHORT_D16_HI</h4>
    17381740<p>Opcode: 36 (0x24) for GCN 1.4<br />
    1739 Syntax: GLOBAL_LOAD_SHORT_D16_HI VDST, VADDR(2), SADDR(2)|OFF<br />
     1741Syntax: GLOBAL_LOAD_SHORT_D16_HI VDST, VADDR(1:2), SADDR(2)|OFF<br />
    17401742Description: Load 16-bit word to lower 16-bit part of VDST from global address.<br />
    17411743Operation:<br />
     
    17441746<h4>GLOBAL_LOAD_SSHORT</h4>
    17451747<p>Opcode: 19 (0x13) for GCN 1.4<br />
    1746 Syntax: GLOBAL_LOAD_SSHORT VDST, VADDR(2), SADDR(2)|OFF<br />
     1748Syntax: GLOBAL_LOAD_SSHORT VDST, VADDR(1:2), SADDR(2)|OFF<br />
    17471749Description: Load 16-bit word to VDST from global address with sign extending.<br />
    17481750Operation:<br />
     
    17501752<h4>GLOBAL_LOAD_UBYTE</h4>
    17511753<p>Opcode: 16 (0x10) for GCN 1.4<br />
    1752 Syntax: GLOBAL_LOAD_UBYTE VDST, VADDR(2), SADDR(2)|OFF<br />
     1754Syntax: GLOBAL_LOAD_UBYTE VDST, VADDR(1:2), SADDR(2)|OFF<br />
    17531755Description: Load byte to VDST from global address with zero extending.<br />
    17541756Operation:<br />
     
    17561758<h4>GLOBAL_LOAD_UBYTE_D16</h4>
    17571759<p>Opcode: 32 (0x20) for GCN 1.4<br />
    1758 Syntax: GLOBAL_LOAD_UBYTE_D16 VDST, VADDR(2), SADDR(2)|OFF<br />
     1760Syntax: GLOBAL_LOAD_UBYTE_D16 VDST, VADDR(1:2), SADDR(2)|OFF<br />
    17591761Description: Load byte to lower 16-bit part of VDST from
    17601762global address with zero extending.<br />
     
    17641766<h4>GLOBAL_LOAD_UBYTE_D16_HI</h4>
    17651767<p>Opcode: 33 (0x21) for GCN 1.4<br />
    1766 Syntax: GLOBAL_LOAD_UBYTE_D16_HI VDST, VADDR(2), SADDR(2)|OFF<br />
     1768Syntax: GLOBAL_LOAD_UBYTE_D16_HI VDST, VADDR(1:2), SADDR(2)|OFF<br />
    17671769Description: Load byte to higher 16-bit part of VDST from
    17681770global address with zero extending.<br />
     
    17781780<h4>GLOBAL_STORE_BYTE</h4>
    17791781<p>Opcode: 24 (0x18) for GCN 1.4<br />
    1780 Syntax: GLOBAL_STORE_BYTE VADDR(2), VDATA, SADDR(2)|OFF<br />
     1782Syntax: GLOBAL_STORE_BYTE VADDR(1:2), VDATA, SADDR(2)|OFF<br />
    17811783Description: Store byte from VDATA to global address.<br />
    17821784Operation:<br />
     
    17841786<h4>GLOBAL_STORE_BYTE_D16_HI</h4>
    17851787<p>Opcode: 25 (0x19) for GCN 1.4<br />
    1786 Syntax: GLOBAL_STORE_BYTE_D16_HI VADDR(2), VDATA, SADDR(2)|OFF<br />
     1788Syntax: GLOBAL_STORE_BYTE_D16_HI VADDR(1:2), VDATA, SADDR(2)|OFF<br />
    17871789Description: Store byte from 16-23 bits of VDATA to global address.<br />
    17881790Operation:<br />
     
    17901792<h4>GLOBAL_STORE_DWORD</h4>
    17911793<p>Opcode: 28 (0x1c) for GCN 1.4<br />
    1792 Syntax: GLOBAL_STORE_DWORD VADDR(2), VDATA, SADDR(2)|OFF<br />
     1794Syntax: GLOBAL_STORE_DWORD VADDR(1:2), VDATA, SADDR(2)|OFF<br />
    17931795Description: Store dword from VDATA to global address.<br />
    17941796Operation:<br />
     
    17961798<h4>GLOBAL_STORE_DWORDX2</h4>
    17971799<p>Opcode: 29 (0x1d) for GCN 1.4<br />
    1798 Syntax: GLOBAL_STORE_DWORDX2 VADDR(2), VDATA(2), SADDR(2)|OFF<br />
     1800Syntax: GLOBAL_STORE_DWORDX2 VADDR(1:2), VDATA(2), SADDR(2)|OFF<br />
    17991801Description: Store two dwords from VDATA to global address.<br />
    18001802Operation:<br />
     
    18021804<h4>GLOBAL_STORE_DWORDX3</h4>
    18031805<p>Opcode: 30 (0x1e) for GCN 1.4<br />
    1804 Syntax: GLOBAL_STORE_DWORDX3 VADDR(2), VDATA(3), SADDR(2)|OFF<br />
     1806Syntax: GLOBAL_STORE_DWORDX3 VADDR(1:2), VDATA(3), SADDR(2)|OFF<br />
    18051807Description: Store three dwords from VDATA to global address.<br />
    18061808Operation:<br />
     
    18111813<h4>GLOBAL_STORE_DWORDX4</h4>
    18121814<p>Opcode: 31 (0x1d) for GCN 1.4<br />
    1813 Syntax: GLOBAL_STORE_DWORDX4 VADDR(2), VDATA(4), SADDR(2)|OFF<br />
     1815Syntax: GLOBAL_STORE_DWORDX4 VADDR(1:2), VDATA(4), SADDR(2)|OFF<br />
    18141816Description: Store four dwords from VDATA to global address.<br />
    18151817Operation:<br />
     
    18211823<h4>GLOBAL_STORE_SHORT</h4>
    18221824<p>Opcode: 26 (0x1a) for GCN 1.4<br />
    1823 Syntax: GLOBAL_STORE_SHORT VADDR(2), VDATA, SADDR(2)|OFF<br />
     1825Syntax: GLOBAL_STORE_SHORT VADDR(1:2), VDATA, SADDR(2)|OFF<br />
    18241826Description: Store 16-bit word from VDATA to global address.<br />
    18251827Operation:<br />
     
    18271829<h4>GLOBAL_STORE_SHORT_D16_HI</h4>
    18281830<p>Opcode: 27 (0x1b) for GCN 1.4<br />
    1829 Syntax: GLOBAL_STORE_SHORT_D16_HI VADDR(2), VDATA, SADDR(2)|OFF<br />
     1831Syntax: GLOBAL_STORE_SHORT_D16_HI VADDR(1:2), VDATA, SADDR(2)|OFF<br />
    18301832Description: Store 16-bit word from higher 16-bit part of VDATA to global address.<br />
    18311833Operation:<br />
    18321834<code>*(UINT16*)(VADDR + SADDR + INST_OFFSET) = VDATA&gt;&gt;16</code></p>
     1835<h4>SCRATCH_LOAD_DWORD</h4>
     1836<p>Opcode: 20 (0x14) for GCN 1.4<br />
     1837Syntax: SCRATCH_LOAD_DWORD VDST, VADDR|OFF, SADDR|OFF<br />
     1838Description Load dword to VDST from scratch memory address.<br />
     1839Operation:<br />
     1840<code>VDST = *(UINT32*)SWIZZLE(ADDR, INST_OFFSET, LANEID)</code></p>
     1841<h4>SCRATCH_LOAD_DWORDX2</h4>
     1842<p>Opcode: 21 (0x15) for GCN 1.4<br />
     1843Syntax: SCRATCH_LOAD_DWORDX2 VDST(, VADDR|OFF, SADDR|OFF<br />
     1844Description Load two dwords to VDST from scratch memory address.<br />
     1845Operation:<br />
     1846<code>VDST = *(UINT64*)SWIZZLE(ADDR, INST_OFFSET, LANEID)</code></p>
     1847<h4>SCRATCH_LOAD_DWORDX3</h4>
     1848<p>Opcode: 22 (0x16) for GCN 1.4<br />
     1849Syntax: SCRATCH_LOAD_DWORDX3 VDST(3), VADDR|OFF, SADDR|OFF<br />
     1850Description Load three dwords to VDST from scratch memory address.<br />
     1851Operation:<br />
     1852<code>BYTE* VM = SWIZZLE(ADDR, INST_OFFSET, LANEID)
     1853VDST[0] = *(UINT32*)VM
     1854VDST[1] = *(UINT32*)(VM+4)
     1855VDST[2] = *(UINT32*)(VM+8)</code></p>
     1856<h4>SCRATCH_LOAD_DWORDX4</h4>
     1857<p>Opcode: 23 (0x17) for GCN 1.4<br />
     1858Syntax: SCRATCH_LOAD_DWORDX4 VDST(4), VADDR|OFF, SADDR|OFF<br />
     1859Description Load four dwords to VDST from scratch memory address.<br />
     1860Operation:<br />
     1861<code>BYTE* VM = SWIZZLE(ADDR, INST_OFFSET, LANEID)
     1862VDST[0] = *(UINT32*)VM
     1863VDST[1] = *(UINT32*)(VM+4)
     1864VDST[2] = *(UINT32*)(VM+8)
     1865VDST[3] = *(UINT32*)(VM+12)</code></p>
     1866<h4>SCRATCH_LOAD_SBYTE</h4>
     1867<p>Opcode: 17 (0x11) for GCN 1.4<br />
     1868Syntax: SCRATCH_LOAD_SBYTE VDST, VADDR|OFF, SADDR|OFF<br />
     1869Description: Load byte to VDST from scratch memory address with sign extending.<br />
     1870Operation:<br />
     1871<code>VDST = *(INT8*)SWIZZLE(ADDR, INST_OFFSET, LANEID)</code></p>
     1872<h4>SCRATCH_LOAD_SBYTE_D16</h4>
     1873<p>Opcode: 34 (0x22) for GCN 1.4<br />
     1874Syntax: SCRATCH_LOAD_SBYTE_D16 VDST, VADDR|OFF, SADDR|OFF<br />
     1875Description: Load byte to lower 16-bit part of VDST from
     1876scratch memory address with sign extending.<br />
     1877Operation:<br />
     1878<code>BYTE* VM = SWIZZLE(ADDR, INST_OFFSET, LANEID)
     1879VDST = ((UINT16)*(INT8*)VM) | (VDST&amp;0xffff0000)</code></p>
     1880<h4>SCRATCH_LOAD_SBYTE_D16_HI</h4>
     1881<p>Opcode: 35 (0x23) for GCN 1.4<br />
     1882Syntax: SCRATCH_LOAD_SBYTE_D16_HI VDST, VADDR|OFF, SADDR|OFF<br />
     1883Description: Load byte to higher 16-bit part of VDST from
     1884scratch memory address with sign extending.<br />
     1885Operation:<br />
     1886<code>BYTE* VM = SWIZZLE(ADDR, INST_OFFSET, LANEID)
     1887VDST = (((UINT32)*(INT8*)VM)&lt;&lt;16) | (VDST&amp;0xffff)</code></p>
     1888<h4>SCRATCH_LOAD_SHORT_D16</h4>
     1889<p>Opcode: 36 (0x24) for GCN 1.4<br />
     1890Syntax: SCRATCH_LOAD_SHORT_D16 VDST, VADDR|OFF, SADDR|OFF<br />
     1891Description: Load 16-bit word to lower 16-bit part of VDST from scratch memory address.<br />
     1892Operation:<br />
     1893<code>BYTE* VM = SWIZZLE(ADDR, INST_OFFSET, LANEID)
     1894VDST = *(UINT16*)VM | (VDST &amp; 0xffff0000)</code></p>
     1895<h4>SCRATCH_LOAD_SHORT_D16_HI</h4>
     1896<p>Opcode: 36 (0x24) for GCN 1.4<br />
     1897Syntax: SCRATCH_LOAD_SHORT_D16_HI VDST, VADDR|OFF, SADDR|OFF<br />
     1898Description: Load 16-bit word to lower 16-bit part of VDST from scratch memory address.<br />
     1899Operation:<br />
     1900<code>BYTE* VM = SWIZZLE(ADDR, INST_OFFSET, LANEID)
     1901VDST = (((UINT32)*(UINT16*)VM)&lt;&lt;16) | (VDST &amp; 0xffff)</code></p>
     1902<h4>SCRATCH_LOAD_SSHORT</h4>
     1903<p>Opcode: 19 (0x13) for GCN 1.4<br />
     1904Syntax: SCRATCH_LOAD_SSHORT VDST, VADDR|OFF, SADDR|OFF<br />
     1905Description: Load 16-bit word to VDST from scratch memory address with sign extending.<br />
     1906Operation:<br />
     1907<code>VDST = *(INT16*)SWIZZLE(ADDR, INST_OFFSET, LANEID)</code></p>
     1908<h4>SCRATCH_LOAD_UBYTE</h4>
     1909<p>Opcode: 16 (0x10) for GCN 1.4<br />
     1910Syntax: SCRATCH_LOAD_UBYTE VDST, VADDR|OFF, SADDR|OFF<br />
     1911Description: Load byte to VDST from scratch memory address with zero extending.<br />
     1912Operation:<br />
     1913<code>VDST = *(UINT8*)SWIZZLE(ADDR, INST_OFFSET, LANEID)</code></p>
     1914<h4>SCRATCH_LOAD_UBYTE_D16</h4>
     1915<p>Opcode: 32 (0x20) for GCN 1.4<br />
     1916Syntax: SCRATCH_LOAD_UBYTE_D16 VDST, VADDR|OFF, SADDR|OFF<br />
     1917Description: Load byte to lower 16-bit part of VDST from
     1918scratch memory address with zero extending.<br />
     1919Operation:<br />
     1920<code>BYTE* VM = SWIZZLE(ADDR, INST_OFFSET, LANEID)
     1921VDST = ((UINT16)*(UINT8*)VM) | (VDST&amp;0xffff0000)</code></p>
     1922<h4>SCRATCH_LOAD_UBYTE_D16_HI</h4>
     1923<p>Opcode: 33 (0x21) for GCN 1.4<br />
     1924Syntax: SCRATCH_LOAD_UBYTE_D16_HI VDST, VADDR|OFF, SADDR|OFF<br />
     1925Description: Load byte to higher 16-bit part of VDST from
     1926scratch memory address with zero extending.<br />
     1927Operation:<br />
     1928<code>BYTE* VM = SWIZZLE(ADDR, INST_OFFSET, LANEID)
     1929VDST = (((UINT32)*(UINT8*)VM)&lt;&lt;16) | (VDST&amp;0xffff)</code></p>
     1930<h4>SCRATCH_LOAD_USHORT</h4>
     1931<p>Opcode: 18 (0x12) for GCN 1.4<br />
     1932Syntax: SCRATCH_LOAD_USHORT VDST, VADDR|OFF, SADDR|OFF<br />
     1933Description: Load 16-bit word to VDST from scratch memory address with zero extending.<br />
     1934Operation:<br />
     1935<code>VDST = *(UINT16*)SWIZZLE(ADDR, INST_OFFSET, LANEID)</code></p>
     1936<h4>SCRATCH_STORE_BYTE</h4>
     1937<p>Opcode: 24 (0x18) for GCN 1.4<br />
     1938Syntax: SCRATCH_STORE_BYTE VADDR|OFF, VDATA, SADDR|OFF<br />
     1939Description: Store byte from VDATA to scratch memory address.<br />
     1940Operation:<br />
     1941<code>*(UINT8*)SWIZZLE(ADDR, INST_OFFSET, LANEID) = VDATA&amp;0xff</code></p>
     1942<h4>SCRATCH_STORE_BYTE_D16_HI</h4>
     1943<p>Opcode: 25 (0x19) for GCN 1.4<br />
     1944Syntax: SCRATCH_STORE_BYTE_D16_HI VADDR|OFF, VDATA, SADDR|OFF<br />
     1945Description: Store byte from 16-23 bits of VDATA to scratch memory address.<br />
     1946Operation:<br />
     1947<code>*(UINT8*)SWIZZLE(ADDR, INST_OFFSET, LANEID) = (VDATA&gt;&gt;16)&amp;0xff</code></p>
     1948<h4>SCRATCH_STORE_DWORD</h4>
     1949<p>Opcode: 28 (0x1c) for GCN 1.4<br />
     1950Syntax: SCRATCH_STORE_DWORD VADDR|OFF, VDATA, SADDR|OFF<br />
     1951Description: Store dword from VDATA to scratch memory address.<br />
     1952Operation:<br />
     1953<code>*(UINT32*)SWIZZLE(ADDR, INST_OFFSET, LANEID) = VDATA</code></p>
     1954<h4>SCRATCH_STORE_DWORDX2</h4>
     1955<p>Opcode: 29 (0x1d) for GCN 1.4<br />
     1956Syntax: SCRATCH_STORE_DWORDX2 VADDR|OFF, VDATA(2), SADDR|OFF<br />
     1957Description: Store two dwords from VDATA to scratch memory address.<br />
     1958Operation:<br />
     1959<code>*(UINT64*)SWIZZLE(ADDR, INST_OFFSET, LANEID) = VDATA</code></p>
     1960<h4>SCRATCH_STORE_DWORDX3</h4>
     1961<p>Opcode: 30 (0x1e) for GCN 1.4<br />
     1962Syntax: SCRATCH_STORE_DWORDX3 VADDR|OFF, VDATA(3), SADDR|OFF<br />
     1963Description: Store three dwords from VDATA to scratch memory address.<br />
     1964Operation:<br />
     1965<code>BYTE* VM = SWIZZLE(ADDR, INST_OFFSET, LANEID)
     1966*(UINT32*)(VM) = VDATA[0]
     1967*(UINT32*)(VM+4) = VDATA[1]
     1968*(UINT32*)(VM+8) = VDATA[2]</code></p>
     1969<h4>SCRATCH_STORE_DWORDX4</h4>
     1970<p>Opcode: 31 (0x1d) for GCN 1.4<br />
     1971Syntax: SCRATCH_STORE_DWORDX4 VADDR|OFF, VDATA(4), SADDR|OFF<br />
     1972Description: Store four dwords from VDATA to scratch memory address.<br />
     1973Operation:<br />
     1974<code>BYTE* VM = SWIZZLE(ADDR, INST_OFFSET, LANEID)
     1975*(UINT32*)(VM) = VDATA[0]
     1976*(UINT32*)(VM+4) = VDATA[1]
     1977*(UINT32*)(VM+8) = VDATA[2]
     1978*(UINT32*)(VM+12) = VDATA[3]</code></p>
     1979<h4>SCRATCH_STORE_SHORT</h4>
     1980<p>Opcode: 26 (0x1a) for GCN 1.4<br />
     1981Syntax: SCRATCH_STORE_SHORT VADDR|OFF, VDATA, SADDR|OFF<br />
     1982Description: Store 16-bit word from VDATA to scratch memory address.<br />
     1983Operation:<br />
     1984<code>*(UINT16*)SWIZZLE(ADDR, INST_OFFSET, LANEID) = VDATA&amp;0xffff</code></p>
     1985<h4>SCRATCH_STORE_SHORT_D16_HI</h4>
     1986<p>Opcode: 27 (0x1b) for GCN 1.4<br />
     1987Syntax: SCRATCH_STORE_SHORT_D16_HI VADDR|OFF, VDATA, SADDR|OFF<br />
     1988Description: Store 16-bit word from higher 16-bit part of VDATA to scratch memory address.<br />
     1989Operation:<br />
     1990<code>*(UINT16*)SWIZZLE(ADDR, INST_OFFSET, LANEID) = VDATA&gt;&gt;16</code></p>
    18331991}}}