Changes between Version 11 and Version 12 of GcnInstrsMubuf
- Timestamp:
- 01/14/16 16:00:14 (8 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
GcnInstrsMubuf
v11 v12 168 168 </tbody> 169 169 </table> 170 <p>Instruction syntax: INSTRUCTION VDATA, VADDR , SRSRC, SOFFSET [MODIFIERS]</p>170 <p>Instruction syntax: INSTRUCTION VDATA, VADDR(1:2), SRSRC(4), SOFFSET [MODIFIERS]</p> 171 171 <p>Modifiers can be supplied in any order. Modifiers list: 172 172 OFFEN, IDXEN, SLC, GLC, TFE, ADDR64, LDS, OFFSET:OFFSET. … … 792 792 <h4>BUFFER_ATOMIC_ADD</h4> 793 793 <p>Opcode: 50 (0x32) for GCN 1.0/1.1; 66 (0x42) for GCN 1.2<br /> 794 Syntax: BUFFER_ATOMIC_ADD VDATA, VADDR , SRSRC, SOFFSET<br />794 Syntax: BUFFER_ATOMIC_ADD VDATA, VADDR(1:2), SRSRC(4), SOFFSET<br /> 795 795 Description: Add VDATA to value of SRSRC resource, and store result to this resource. 796 796 If GLC flag is set then return previous value from resource to VDATA, 797 797 otherwise keep VDATA value. Operation is atomic.<br /> 798 798 Operation:<br /> 799 <code>UINT32* VM = (UINT32*)VMEM(SRSRC, VADDR , SOFFSET, OFFSET)799 <code>UINT32* VM = (UINT32*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET) 800 800 UINT32 P = *VM; *VM = *VM + VDATA; VDATA = (GLC) ? P : VDATA // atomic</code></p> 801 801 <h4>BUFFER_ATOMIC_ADD_X2</h4> 802 802 <p>Opcode: 82 (0x52) for GCN 1.0/1.1; 98 (0x62) for GCN 1.2<br /> 803 Syntax: BUFFER_ATOMIC_ADD_X2 VDATA(2), VADDR , SRSRC, SOFFSET<br />803 Syntax: BUFFER_ATOMIC_ADD_X2 VDATA(2), VADDR(1:2), SRSRC(4), SOFFSET<br /> 804 804 Description: Add 64-bit VDATA to 64-bit value of SRSRC resource, and store result 805 805 to this resource. If GLC flag is set then return previous value from resource to VDATA, 806 806 otherwise keep VDATA value. Operation is atomic.<br /> 807 807 Operation:<br /> 808 <code>UINT64* VM = (UINT64*)VMEM(SRSRC, VADDR , SOFFSET, OFFSET)808 <code>UINT64* VM = (UINT64*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET) 809 809 UINT64 P = *VM; *VM = *VM + VDATA; VDATA = (GLC) ? P : VDATA // atomic</code></p> 810 810 <h4>BUFFER_ATOMIC_AND</h4> 811 811 <p>Opcode: 57 (0x39) for GCN 1.0/1.1; 72 (0x48) for GCN 1.2<br /> 812 Syntax: BUFFER_ATOMIC_AND VDATA, VADDR , SRSRC, SOFFSET<br />812 Syntax: BUFFER_ATOMIC_AND VDATA, VADDR(1:2), SRSRC(4), SOFFSET<br /> 813 813 Description: Do bitwise AND on VDATA and value of SRSRC resource, 814 814 and store result to this resource. If GLC flag is set then return previous value 815 815 from resource to VDATA, otherwise keep VDATA value. Operation is atomic.<br /> 816 816 Operation:<br /> 817 <code>UINT32* VM = (UINT32*)VMEM(SRSRC, VADDR , SOFFSET, OFFSET)817 <code>UINT32* VM = (UINT32*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET) 818 818 UINT32 P = *VM; *VM = *VM & VDATA; VDATA = (GLC) ? P : VDATA // atomic</code></p> 819 819 <h4>BUFFER_ATOMIC_AND_X2</h4> 820 820 <p>Opcode: 89 (0x59) for GCN 1.0/1.1; 104 (0x68) for GCN 1.2<br /> 821 Syntax: BUFFER_ATOMIC_AND_X2 VDATA(2), VADDR , SRSRC, SOFFSET<br />821 Syntax: BUFFER_ATOMIC_AND_X2 VDATA(2), VADDR(1:2), SRSRC(4), SOFFSET<br /> 822 822 Description: Do 64-bit bitwise AND on VDATA and value of SRSRC resource, 823 823 and store result to this resource. If GLC flag is set then return previous value 824 824 from resource to VDATA, otherwise keep VDATA value. Operation is atomic.<br /> 825 825 Operation:<br /> 826 <code>UINT64* VM = (UINT64*)VMEM(SRSRC, VADDR , SOFFSET, OFFSET)826 <code>UINT64* VM = (UINT64*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET) 827 827 UINT64 P = *VM; *VM = *VM & VDATA; VDATA = (GLC) ? P : VDATA // atomic</code></p> 828 828 <h4>BUFFER_ATOMIC_CMPSWAP</h4> 829 829 <p>Opcode: 49 (0x31) for GCN 1.0/1.1; 65 (0x41) for GCN 1.2<br /> 830 Syntax: BUFFER_ATOMIC_CMPSWAP VDATA(2), VADDR , SRSRC, SOFFSET<br />830 Syntax: BUFFER_ATOMIC_CMPSWAP VDATA(2), VADDR(1:2), SRSRC(4), SOFFSET<br /> 831 831 Description: Store lower VDATA dword into SRSRC resource if previous value 832 832 from resource is equal VDATA>>32, otherwise keep old value from resource. … … 834 834 otherwise keep VDATA value. Operation is atomic.<br /> 835 835 Operation:<br /> 836 <code>UINT32* VM = (UINT32*)VMEM(SRSRC, VADDR , SOFFSET, OFFSET)836 <code>UINT32* VM = (UINT32*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET) 837 837 UINT32 P = *VM; *VM = *VM==(VDATA>>32) ? VDATA&0xffffffff : *VM // part of atomic 838 838 VDATA[0] = (GLC) ? P : VDATA[0] // last part of atomic</code></p> 839 839 <h4>BUFFER_ATOMIC_CMPSWAP_X2</h4> 840 840 <p>Opcode: 81 (0x51) for GCN 1.0/1.1; 97 (0x61) for GCN 1.2<br /> 841 Syntax: BUFFER_ATOMIC_CMPSWAP_X2 VDATA(4), VADDR , SRSRC, SOFFSET<br />841 Syntax: BUFFER_ATOMIC_CMPSWAP_X2 VDATA(4), VADDR(1:2), SRSRC(4), SOFFSET<br /> 842 842 Description: Store lower VDATA 64-bit word into SRSRC resource if previous value 843 843 from resource is equal VDATA>>64, otherwise keep old value from resource. … … 845 845 otherwise keep VDATA value. Operation is atomic.<br /> 846 846 Operation:<br /> 847 <code>UINT64* VM = (UINT64*)VMEM(SRSRC, VADDR , SOFFSET, OFFSET)847 <code>UINT64* VM = (UINT64*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET) 848 848 UINT64 P = *VM; *VM = *VM==(VDATA[2:3]) ? VDATA[0:1] : *VM // part of atomic 849 849 VDATA[0:1] = (GLC) ? P : VDATA[0:1] // last part of atomic</code></p> 850 850 <h4>BUFFER_ATOMIC_DEC</h4> 851 851 <p>Opcode: 61 (0x3d) for GCN 1.0/1.1; 76 (0x4c) for GCN 1.2<br /> 852 Syntax: BUFFER_ATOMIC_DEC VDATA, VADDR , SRSRC, SOFFSET<br />852 Syntax: BUFFER_ATOMIC_DEC VDATA, VADDR(1:2), SRSRC(4), SOFFSET<br /> 853 853 Description: Compare value from SRSRC resource and if less or equal than VDATA 854 854 and this value is not zero, then decrement value from resource, … … 856 856 from resource to VDATA, otherwise keep VDATA value. Operation is atomic.<br /> 857 857 Operation:<br /> 858 <code>UINT32* VM = (UINT32*)VMEM(SRSRC, VADDR , SOFFSET, OFFSET)858 <code>UINT32* VM = (UINT32*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET) 859 859 UINT32 P = *VM; *VM = (*VM <= VDATA && *VM!=0) ? *VM-1 : VDATA // atomic 860 860 VDATA = (GLC) ? P : VDATA // atomic</code></p> 861 861 <h4>BUFFER_ATOMIC_DEC_X2</h4> 862 862 <p>Opcode: 93 (0x5d) for GCN 1.0/1.1; 108 (0x6c) for GCN 1.2<br /> 863 Syntax: BUFFER_ATOMIC_DEC_X2 VDATA(2), VADDR , SRSRC, SOFFSET<br />863 Syntax: BUFFER_ATOMIC_DEC_X2 VDATA(2), VADDR(1:2), SRSRC(4), SOFFSET<br /> 864 864 Description: Compare 64-bit value from SRSRC resource and if less or equal than VDATA 865 865 and this value is not zero, then decrement value from resource, … … 867 867 from resource to VDATA, otherwise keep VDATA value. Operation is atomic.<br /> 868 868 Operation:<br /> 869 <code>UINT64* VM = (UINT64*)VMEM(SRSRC, VADDR , SOFFSET, OFFSET)869 <code>UINT64* VM = (UINT64*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET) 870 870 UINT64 P = *VM; *VM = (*VM <= VDATA && *VM!=0) ? *VM-1 : VDATA // atomic 871 871 VDATA = (GLC) ? P : VDATA // atomic</code></p> 872 872 <h4>BUFFER_ATOMIC_FCMPSWAP</h4> 873 873 <p>Opcode: 62 (0x3e) for GCN 1.0/1.1<br /> 874 Syntax: BUFFER_ATOMIC_FCMPSWAP VDATA(2), VADDR , SRSRC, SOFFSET<br />874 Syntax: BUFFER_ATOMIC_FCMPSWAP VDATA(2), VADDR(1:2), SRSRC(4), SOFFSET<br /> 875 875 Description: Store lower VDATA dword into SRSRC resource if previous single floating point 876 876 value from resource is equal singe floating point value VDATA>>32, … … 879 879 otherwise keep VDATA value. Operation is atomic.<br /> 880 880 Operation:<br /> 881 <code>FLOAT* VM = (FLOAT*)VMEM(SRSRC, VADDR , SOFFSET, OFFSET)881 <code>FLOAT* VM = (FLOAT*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET) 882 882 FLOAT P = *VM; *VM = *VM==ASFLOAT(VDATA>>32) ? VDATA&0xffffffff : *VM // part of atomic 883 883 VDATA[0] = (GLC) ? P : VDATA[0] // last part of atomic</code></p> 884 884 <h4>BUFFER_ATOMIC_FCMPSWAP_X2</h4> 885 885 <p>Opcode: 94 (0x5e) for GCN 1.0/1.1<br /> 886 Syntax: BUFFER_ATOMIC_FCMPSWAP_X2 VDATA(4), VADDR , SRSRC, SOFFSET<br />886 Syntax: BUFFER_ATOMIC_FCMPSWAP_X2 VDATA(4), VADDR(1:2), SRSRC(4), SOFFSET<br /> 887 887 Description: Store lower VDATA 64-bit word into SRSRC resource if previous double 888 888 floating point value from resource is equal singe floating point value VDATA>>32, … … 891 891 VDATA value. Operation is atomic.<br /> 892 892 Operation:<br /> 893 <code>DOUBLE* VM = (DOUBLE*)VMEM(SRSRC, VADDR , SOFFSET, OFFSET)893 <code>DOUBLE* VM = (DOUBLE*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET) 894 894 DOUBLE P = *VM; *VM = *VM==ASDOUBLE(VDATA[2:3]) ? VDATA[0:1] : *VM // part of atomic 895 895 VDATA[0:1] = (GLC) ? P : VDATA[0:1] // last part of atomic</code></p> 896 896 <h4>BUFFER_ATOMIC_FMAX</h4> 897 897 <p>Opcode: 64 (0x40) for GCN 1.0/1.1<br /> 898 Syntax: BUFFER_ATOMIC_FMAX VDATA, VADDR , SRSRC, SOFFSET<br />898 Syntax: BUFFER_ATOMIC_FMAX VDATA, VADDR(1:2), SRSRC(4), SOFFSET<br /> 899 899 Description: Choose greatest single floating point value from VDATA and from 900 900 SRSRC resource, and store result to this resource. … … 902 902 VDATA value. Operation is atomic.<br /> 903 903 Operation:<br /> 904 <code>FLOAT* VM = (FLOAT*)VMEM(SRSRC, VADDR , SOFFSET, OFFSET)904 <code>FLOAT* VM = (FLOAT*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET) 905 905 UINT32 P = *VM; *VM = MAX(*VM, ASFLOAT(VDATA)); VDATA = (GLC) ? P : VDATA // atomic</code></p> 906 906 <h4>BUFFER_ATOMIC_FMAX_X2</h4> 907 907 <p>Opcode: 96 (0x60) for GCN 1.0/1.1<br /> 908 Syntax: BUFFER_ATOMIC_FMAX_X2 VDATA(2), VADDR , SRSRC, SOFFSET<br />908 Syntax: BUFFER_ATOMIC_FMAX_X2 VDATA(2), VADDR(1:2), SRSRC(4), SOFFSET<br /> 909 909 Description: Choose greatest double floating point value from VDATA and from 910 910 SRSRC resource, and store result to this resource. … … 912 912 otherwise keep VDATA value. Operation is atomic.<br /> 913 913 Operation:<br /> 914 <code>DOUBLE* VM = (DOUBLE*)VMEM(SRSRC, VADDR , SOFFSET, OFFSET)914 <code>DOUBLE* VM = (DOUBLE*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET) 915 915 UINT64 P = *VM; *VM = MAX(*VM, ASDOUBLE(VDATA)); VDATA = (GLC) ? P : VDATA // atomic</code></p> 916 916 <h4>BUFFER_ATOMIC_FMIN</h4> 917 917 <p>Opcode: 63 (0x3f) for GCN 1.0/1.1<br /> 918 Syntax: BUFFER_ATOMIC_FMIN VDATA, VADDR , SRSRC, SOFFSET<br />918 Syntax: BUFFER_ATOMIC_FMIN VDATA, VADDR(1:2), SRSRC(4), SOFFSET<br /> 919 919 Description: Choose smallest single floating point value from VDATA and from 920 920 SRSRC resource, and store result to this resource. … … 922 922 VDATA value. Operation is atomic.<br /> 923 923 Operation:<br /> 924 <code>FLOAT* VM = (FLOAT*)VMEM(SRSRC, VADDR , SOFFSET, OFFSET)924 <code>FLOAT* VM = (FLOAT*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET) 925 925 UINT32 P = *VM; *VM = MIN(*VM, ASFLOAT(VDATA)); VDATA = (GLC) ? P : VDATA // atomic</code></p> 926 926 <h4>BUFFER_ATOMIC_FMIN_X2</h4> 927 927 <p>Opcode: 95 (0x5f) for GCN 1.0/1.1<br /> 928 Syntax: BUFFER_ATOMIC_FMIN_X2 VDATA(2), VADDR , SRSRC, SOFFSET<br />928 Syntax: BUFFER_ATOMIC_FMIN_X2 VDATA(2), VADDR(1:2), SRSRC(4), SOFFSET<br /> 929 929 Description: Choose smallest double floating point value from VDATA and from 930 930 SRSRC resource, and store result to this resource. … … 932 932 VDATA value. Operation is atomic.<br /> 933 933 Operation:<br /> 934 <code>DOUBLE* VM = (DOUBLE*)VMEM(SRSRC, VADDR , SOFFSET, OFFSET)934 <code>DOUBLE* VM = (DOUBLE*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET) 935 935 UINT64 P = *VM; *VM = MIN(*VM, ASDOUBLE(VDATA)); VDATA = (GLC) ? P : VDATA // atomic</code></p> 936 936 <h4>BUFFER_ATOMIC_INC</h4> 937 937 <p>Opcode: 60 (0x3c) for GCN 1.0/1.1; 75 (0x4b) for GCN 1.2<br /> 938 Syntax: BUFFER_ATOMIC_INC VDATA, VADDR , SRSRC, SOFFSET<br />938 Syntax: BUFFER_ATOMIC_INC VDATA, VADDR(1:2), SRSRC(4), SOFFSET<br /> 939 939 Description: Compare value from SRSRC resource and if less than VDATA, 940 940 then increment value from resource, otherwise store zero to resource. … … 942 942 otherwise keep VDATA value. Operation is atomic.<br /> 943 943 Operation:<br /> 944 <code>UINT32* VM = (UINT32*)VMEM(SRSRC, VADDR , SOFFSET, OFFSET)944 <code>UINT32* VM = (UINT32*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET) 945 945 UINT32 P = *VM; *VM = (*VM < VDATA) ? *VM+1 : 0; VDATA = (GLC) ? P : VDATA // atomic</code></p> 946 946 <h4>BUFFER_ATOMIC_INC_X2</h4> 947 947 <p>Opcode: 92 (0x5c) for GCN 1.0/1.1; 107 (0x9b) for GCN 1.2<br /> 948 Syntax: BUFFER_ATOMIC_INC_X2 VDATA(2), VADDR , SRSRC, SOFFSET<br />948 Syntax: BUFFER_ATOMIC_INC_X2 VDATA(2), VADDR(1:2), SRSRC(4), SOFFSET<br /> 949 949 Description: Compare 64-bit value from SRSRC resource and if less than VDATA, 950 950 then increment value from resource, otherwise store zero to resource. … … 952 952 otherwise keep VDATA value. Operation is atomic.<br /> 953 953 Operation:<br /> 954 <code>UINT64* VM = (UINT64*)VMEM(SRSRC, VADDR , SOFFSET, OFFSET)954 <code>UINT64* VM = (UINT64*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET) 955 955 UINT64 P = *VM; *VM = (*VM < VDATA) ? *VM+1 : 0; VDATA = (GLC) ? P : VDATA // atomic</code></p> 956 956 <h4>BUFFER_ATOMIC_OR</h4> 957 957 <p>Opcode: 58 (0x3a) for GCN 1.0/1.1; 73 (0x49) for GCN 1.2<br /> 958 Syntax: BUFFER_ATOMIC_OR VDATA, VADDR , SRSRC, SOFFSET<br />958 Syntax: BUFFER_ATOMIC_OR VDATA, VADDR(1:2), SRSRC(4), SOFFSET<br /> 959 959 Description: Do bitwise OR on VDATA and value of SRSRC resource, 960 960 and store result to this resource. If GLC flag is set then return previous value 961 961 from resource to VDATA, otherwise keep VDATA value. Operation is atomic.<br /> 962 962 Operation:<br /> 963 <code>UINT32* VM = (UINT32*)VMEM(SRSRC, VADDR , SOFFSET, OFFSET)963 <code>UINT32* VM = (UINT32*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET) 964 964 UINT32 P = *VM; *VM = *VM | VDATA; VDATA = (GLC) ? P : VDATA // atomic</code></p> 965 965 <h4>BUFFER_ATOMIC_OR_X2</h4> 966 966 <p>Opcode: 90 (0x5a) for GCN 1.0/1.1; 105 (0x69) for GCN 1.2<br /> 967 Syntax: BUFFER_ATOMIC_OR_X2 VDATA(2), VADDR , SRSRC, SOFFSET<br />967 Syntax: BUFFER_ATOMIC_OR_X2 VDATA(2), VADDR(1:2), SRSRC(4), SOFFSET<br /> 968 968 Description: Do 64-bit bitwise OR on VDATA and value of SRSRC resource, 969 969 and store result to this resource. If GLC flag is set then return previous value 970 970 from resource to VDATA, otherwise keep VDATA value. Operation is atomic.<br /> 971 971 Operation:<br /> 972 <code>UINT64* VM = (UINT64*)VMEM(SRSRC, VADDR , SOFFSET, OFFSET)972 <code>UINT64* VM = (UINT64*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET) 973 973 UINT64 P = *VM; *VM = *VM | VDATA; VDATA = (GLC) ? P : VDATA // atomic</code></p> 974 974 <h4>BUFFER_ATOMIC_RSUB</h4> 975 975 <p>Opcode: 52 (0x34) for GCN 1.0<br /> 976 Syntax: BUFFER_ATOMIC_RSUB VDATA, VADDR , SRSRC, SOFFSET<br />976 Syntax: BUFFER_ATOMIC_RSUB VDATA, VADDR(1:2), SRSRC(4), SOFFSET<br /> 977 977 Description: Subtract value of SRSRC resource from VDATA, and store result to 978 978 this resource. If GLC flag is set then return previous value from resource to VDATA, 979 979 otherwise keep VDATA value. Operation is atomic.<br /> 980 980 Operation:<br /> 981 <code>UINT32* VM = (UINT32*)VMEM(SRSRC, VADDR , SOFFSET, OFFSET)981 <code>UINT32* VM = (UINT32*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET) 982 982 UINT32 P = *VM; *VM = VDATA - *VM; VDATA = (GLC) ? P : VDATA // atomic</code></p> 983 983 <h4>BUFFER_ATOMIC_RSUB_X2</h4> 984 984 <p>Opcode: 84 (0x54) for GCN 1.0<br /> 985 Syntax: BUFFER_ATOMIC_RSUB_X2 VDATA(2), VADDR , SRSRC, SOFFSET<br />985 Syntax: BUFFER_ATOMIC_RSUB_X2 VDATA(2), VADDR(1:2), SRSRC(4), SOFFSET<br /> 986 986 Description: Subtract 64-bit value of SRSRC resource from 64-bit VDATA, and store result 987 987 to this resource. If GLC flag is set then return previous value from resource to VDATA, 988 988 otherwise keep VDATA value. Operation is atomic.<br /> 989 989 Operation:<br /> 990 <code>UINT64* VM = (UINT64*)VMEM(SRSRC, VADDR , SOFFSET, OFFSET)990 <code>UINT64* VM = (UINT64*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET) 991 991 UINT64 P = *VM; *VM = VDATA - *VM; VDATA = (GLC) ? P : VDATA // atomic</code></p> 992 992 <h4>BUFFER_ATOMIC_SMAX</h4> 993 993 <p>Opcode: 55 (0x37) for GCN 1.0/1.1; 70 (0x46) for GCN 1.2<br /> 994 Syntax: BUFFER_ATOMIC_SMAX VDATA, VADDR , SRSRC, SOFFSET<br />994 Syntax: BUFFER_ATOMIC_SMAX VDATA, VADDR(1:2), SRSRC(4), SOFFSET<br /> 995 995 Description: Choose greatest signed 32-bit value from VDATA and from SRSRC resource, 996 996 and store result to this resource. … … 998 998 VDATA value. Operation is atomic.<br /> 999 999 Operation:<br /> 1000 <code>INT32* VM = (INT32*)VMEM(SRSRC, VADDR , SOFFSET, OFFSET)1000 <code>INT32* VM = (INT32*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET) 1001 1001 UINT32 P = *VM; *VM = MAX(*VM, (INT32)VDATA); VDATA = (GLC) ? P : VDATA // atomic</code></p> 1002 1002 <h4>BUFFER_ATOMIC_SMAX_X2</h4> 1003 1003 <p>Opcode: 87 (0x57) for GCN 1.0/1.1; 102 (0x66) for GCN 1.2<br /> 1004 Syntax: BUFFER_ATOMIC_SMAX_X2 VDATA(2), VADDR , SRSRC, SOFFSET<br />1004 Syntax: BUFFER_ATOMIC_SMAX_X2 VDATA(2), VADDR(1:2), SRSRC(4), SOFFSET<br /> 1005 1005 Description: Choose greatest signed 64-bit value from VDATA and from SRSRC resource, 1006 1006 and store result to this resource. … … 1008 1008 VDATA value. Operation is atomic.<br /> 1009 1009 Operation:<br /> 1010 <code>INT64* VM = (INT64*)VMEM(SRSRC, VADDR , SOFFSET, OFFSET)1010 <code>INT64* VM = (INT64*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET) 1011 1011 UINT64 P = *VM; *VM = MAX(*VM, (INT64)VDATA); VDATA = (GLC) ? P : VDATA // atomic</code></p> 1012 1012 <h4>BUFFER_ATOMIC_SMIN</h4> 1013 1013 <p>Opcode: 53 (0x35) for GCN 1.0/1.1; 68 (0x44) for GCN 1.2<br /> 1014 Syntax: BUFFER_ATOMIC_SMIN VDATA, VADDR , SRSRC, SOFFSET<br />1014 Syntax: BUFFER_ATOMIC_SMIN VDATA, VADDR(1:2), SRSRC(4), SOFFSET<br /> 1015 1015 Description: Choose smallest signed 32-bit value from VDATA and from SRSRC resource, 1016 1016 and store result to this resource. … … 1018 1018 VDATA value. Operation is atomic.<br /> 1019 1019 Operation:<br /> 1020 <code>INT32* VM = (INT32*)VMEM(SRSRC, VADDR , SOFFSET, OFFSET)1020 <code>INT32* VM = (INT32*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET) 1021 1021 UINT32 P = *VM; *VM = MIN(*VM, (INT32)VDATA); VDATA = (GLC) ? P : VDATA // atomic</code></p> 1022 1022 <h4>BUFFER_ATOMIC_SMIN_X2</h4> 1023 1023 <p>Opcode: 85 (0x55) for GCN 1.0/1.1; 100 (0x64) for GCN 1.2<br /> 1024 Syntax: BUFFER_ATOMIC_SMIN_X2 VDATA(2), VADDR , SRSRC, SOFFSET<br />1024 Syntax: BUFFER_ATOMIC_SMIN_X2 VDATA(2), VADDR(1:2), SRSRC(4), SOFFSET<br /> 1025 1025 Description: Choose smallest signed 64-bit value from VDATA and from SRSRC resource, 1026 1026 and store result to this resource. … … 1028 1028 VDATA value. Operation is atomic.<br /> 1029 1029 Operation:<br /> 1030 <code>INT64* VM = (INT64*)VMEM(SRSRC, VADDR , SOFFSET, OFFSET)1030 <code>INT64* VM = (INT64*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET) 1031 1031 UINT64 P = *VM; *VM = MIN(*VM, (INT64)VDATA); VDATA = (GLC) ? P : VDATA // atomic</code></p> 1032 1032 <h4>BUFFER_ATOMIC_SUB</h4> 1033 1033 <p>Opcode: 51 (0x33) for GCN 1.0/1.1; 67 (0x43) for GCN 1.2<br /> 1034 Syntax: BUFFER_ATOMIC_SUB VDATA, VADDR , SRSRC, SOFFSET<br />1034 Syntax: BUFFER_ATOMIC_SUB VDATA, VADDR(1:2), SRSRC(4), SOFFSET<br /> 1035 1035 Description: Subtract VDATA from value from SRSRC resource, and store result to 1036 1036 this resource. If GLC flag is set then return previous value from resource to VDATA, 1037 1037 otherwise keep VDATA value. Operation is atomic.<br /> 1038 1038 Operation:<br /> 1039 <code>UINT32* VM = (UINT32*)VMEM(SRSRC, VADDR , SOFFSET, OFFSET)1039 <code>UINT32* VM = (UINT32*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET) 1040 1040 UINT32 P = *VM; *VM = *VM - VDATA; VDATA = (GLC) ? P : VDATA // atomic</code></p> 1041 1041 <h4>BUFFER_ATOMIC_SUB_X2</h4> 1042 1042 <p>Opcode: 83 (0x53) for GCN 1.0/1.1; 99 (0x63) for GCN 1.2<br /> 1043 Syntax: BUFFER_ATOMIC_SUB_X2 VDATA(2), VADDR , SRSRC, SOFFSET<br />1043 Syntax: BUFFER_ATOMIC_SUB_X2 VDATA(2), VADDR(1:2), SRSRC(4), SOFFSET<br /> 1044 1044 Description: Subtract 64-bit VDATA from 64-bit value from SRSRC resource, and store 1045 1045 result to this resource. If GLC flag is set then return previous value from resource to 1046 1046 VDATA, otherwise keep VDATA value. Operation is atomic.<br /> 1047 1047 Operation:<br /> 1048 <code>UINT64* VM = (UINT64*)VMEM(SRSRC, VADDR , SOFFSET, OFFSET)1048 <code>UINT64* VM = (UINT64*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET) 1049 1049 UINT64 P = *VM; *VM = *VM - VDATA; VDATA = (GLC) ? P : VDATA // atomic</code></p> 1050 1050 <h4>BUFFER_ATOMIC_SWAP</h4> 1051 1051 <p>Opcode: 48 (0x30) for GCN 1.0/1.1; 64 (0x40) for GCN 1.2<br /> 1052 Syntax: BUFFER_ATOMIC_SWAP VDATA, VADDR , SRSRC, SOFFSET<br />1052 Syntax: BUFFER_ATOMIC_SWAP VDATA, VADDR(1:2), SRSRC(4), SOFFSET<br /> 1053 1053 Description: Store VDATA dword into SRSRC resource. If GLC flag is set then 1054 1054 return previous value from resource to VDATA, otherwise keep VDATA value. 1055 1055 Operation is atomic.<br /> 1056 1056 Operation:<br /> 1057 <code>UINT32* VM = (UINT32*)VMEM(SRSRC, VADDR , SOFFSET, OFFSET)1057 <code>UINT32* VM = (UINT32*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET) 1058 1058 UINT32 P = *VM; *VM = VDATA; VDATA = (GLC) ? P : VDATA // atomic</code></p> 1059 1059 <h4>BUFFER_ATOMIC_SWAP_X2</h4> 1060 1060 <p>Opcode: 80 (0x50) for GCN 1.0/1.1; 96 (0x60) for GCN 1.2<br /> 1061 Syntax: BUFFER_ATOMIC_SWAP_X2 VDATA(2), VADDR , SRSRC, SOFFSET<br />1061 Syntax: BUFFER_ATOMIC_SWAP_X2 VDATA(2), VADDR(1:2), SRSRC(4), SOFFSET<br /> 1062 1062 Description: Store VDATA 64-bit word into SRSRC resource. If GLC flag is set then 1063 1063 return previous value from resource to VDATA, otherwise keep VDATA value. 1064 1064 Operation is atomic.<br /> 1065 1065 Operation:<br /> 1066 <code>UINT64* VM = (UINT64*)VMEM(SRSRC, VADDR , SOFFSET, OFFSET)1066 <code>UINT64* VM = (UINT64*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET) 1067 1067 UINT64 P = *VM; *VM = VDATA; VDATA = (GLC) ? P : VDATA // atomic</code></p> 1068 1068 <h4>BUFFER_ATOMIC_UMAX</h4> 1069 1069 <p>Opcode: 56 (0x38) for GCN 1.0/1.1; 71 (0x47) for GCN 1.2<br /> 1070 Syntax: BUFFER_ATOMIC_UMAX VDATA, VADDR , SRSRC, SOFFSET<br />1070 Syntax: BUFFER_ATOMIC_UMAX VDATA, VADDR(1:2), SRSRC(4), SOFFSET<br /> 1071 1071 Description: Choose greatest unsigned 32-bit value from VDATA and from SRSRC resource, 1072 1072 and store result to this resource. … … 1074 1074 keep VDATA value. Operation is atomic.<br /> 1075 1075 Operation:<br /> 1076 <code>UINT32* VM = (UINT32*)VMEM(SRSRC, VADDR , SOFFSET, OFFSET)1076 <code>UINT32* VM = (UINT32*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET) 1077 1077 UINT32 P = *VM; *VM = MAX(*VM, VDATA); VDATA = (GLC) ? P : VDATA // atomic</code></p> 1078 1078 <h4>BUFFER_ATOMIC_UMAX_X2</h4> 1079 1079 <p>Opcode: 88 (0x58) for GCN 1.0/1.1; 103 (0x67) for GCN 1.2<br /> 1080 Syntax: BUFFER_ATOMIC_UMAX_X2 VDATA(2), VADDR , SRSRC, SOFFSET<br />1080 Syntax: BUFFER_ATOMIC_UMAX_X2 VDATA(2), VADDR(1:2), SRSRC(4), SOFFSET<br /> 1081 1081 Description: Choose greatest unsigned 64-bit value from VDATA and from SRSRC resource, 1082 1082 and store result to this resource. … … 1084 1084 VDATA value. Operation is atomic.<br /> 1085 1085 Operation:<br /> 1086 <code>UINT64* VM = (UINT32*)VMEM(SRSRC, VADDR , SOFFSET, OFFSET)1086 <code>UINT64* VM = (UINT32*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET) 1087 1087 UINT64 P = *VM; *VM = MAX(*VM, VDATA); VDATA = (GLC) ? P : VDATA // atomic</code></p> 1088 1088 <h4>BUFFER_ATOMIC_UMIN</h4> 1089 1089 <p>Opcode: 54 (0x36) for GCN 1.0/1.1; 69 (0x45) for GCN 1.2<br /> 1090 Syntax: BUFFER_ATOMIC_UMIN VDATA, VADDR , SRSRC, SOFFSET<br />1090 Syntax: BUFFER_ATOMIC_UMIN VDATA, VADDR(1:2), SRSRC(4), SOFFSET<br /> 1091 1091 Description: Choose smallest unsigned 32-bit value from VDATA and from SRSRC resource, 1092 1092 and store result to this resource. … … 1094 1094 VDATA value. Operation is atomic.<br /> 1095 1095 Operation:<br /> 1096 <code>UINT32* VM = (UINT32*)VMEM(SRSRC, VADDR , SOFFSET, OFFSET)1096 <code>UINT32* VM = (UINT32*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET) 1097 1097 UINT32 P = *VM; *VM = MIN(*VM, VDATA); VDATA = (GLC) ? P : VDATA // atomic</code></p> 1098 1098 <h4>BUFFER_ATOMIC_UMIN_X2</h4> 1099 1099 <p>Opcode: 86 (0x56) for GCN 1.0/1.1; 101 (0x65) for GCN 1.2<br /> 1100 Syntax: BUFFER_ATOMIC_UMIN_X2 VDATA(2), VADDR , SRSRC, SOFFSET<br />1100 Syntax: BUFFER_ATOMIC_UMIN_X2 VDATA(2), VADDR(1:2), SRSRC(4), SOFFSET<br /> 1101 1101 Description: Choose smallest unsigned 64-bit value from VDATA and from SRSRC resource, 1102 1102 and store result to this resource. … … 1104 1104 VDATA value. Operation is atomic.<br /> 1105 1105 Operation:<br /> 1106 <code>UINT64* VM = (UINT64*)VMEM(SRSRC, VADDR , SOFFSET, OFFSET)1106 <code>UINT64* VM = (UINT64*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET) 1107 1107 UINT64 P = *VM; *VM = MIN(*VM, VDATA); VDATA = (GLC) ? P : VDATA // atomic</code></p> 1108 1108 <h4>BUFFER_ATOMIC_XOR</h4> 1109 1109 <p>Opcode: 59 (0x3b) for GCN 1.0/1.1; 74 (0x4a) for GCN 1.2<br /> 1110 Syntax: BUFFER_ATOMIC_XOR VDATA, VADDR , SRSRC, SOFFSET<br />1110 Syntax: BUFFER_ATOMIC_XOR VDATA, VADDR(1:2), SRSRC(4), SOFFSET<br /> 1111 1111 Description: Do bitwise XOR on VDATA and value of SRSRC resource, 1112 1112 and store result to this resource. If GLC flag is set then return previous value 1113 1113 from resource to VDATA, otherwise keep VDATA value. Operation is atomic.<br /> 1114 1114 Operation:<br /> 1115 <code>UINT32* VM = (UINT32*)VMEM(SRSRC, VADDR , SOFFSET, OFFSET)1115 <code>UINT32* VM = (UINT32*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET) 1116 1116 UINT32 P = *VM; *VM = *VM ^ VDATA; VDATA = (GLC) ? P : VDATA // atomic</code></p> 1117 1117 <h4>BUFFER_ATOMIC_XOR_X2</h4> 1118 1118 <p>Opcode: 91 (0x5b) for GCN 1.0/1.1; 106 (0x6a) for GCN 1.2<br /> 1119 Syntax: BUFFER_ATOMIC_XOR_X2 VDATA(2), VADDR , SRSRC, SOFFSET<br />1119 Syntax: BUFFER_ATOMIC_XOR_X2 VDATA(2), VADDR(1:2), SRSRC(4), SOFFSET<br /> 1120 1120 Description: Do 64-bit bitwise XOR on VDATA and value of SRSRC resource, 1121 1121 and store result to this resource. If GLC flag is set then return previous value 1122 1122 from resource to VDATA, otherwise keep VDATA value. Operation is atomic.<br /> 1123 1123 Operation:<br /> 1124 <code>UINT64* VM = (UINT64*)VMEM(SRSRC, VADDR , SOFFSET, OFFSET)1124 <code>UINT64* VM = (UINT64*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET) 1125 1125 UINT64 P = *VM; *VM = *VM ^ VDATA; VDATA = (GLC) ? P : VDATA // atomic</code></p> 1126 1126 <h4>BUFFER_LOAD_DWORD</h4> 1127 1127 <p>Opcode: 12 (0xc) for GCN 1.0/1.1; 20 (0x14) for GCN 1.2<br /> 1128 Syntax: BUFFER_LOAD_DWORD VDATA, VADDR , SRSRC, SOFFSET<br />1128 Syntax: BUFFER_LOAD_DWORD VDATA, VADDR(1:2), SRSRC(4), SOFFSET<br /> 1129 1129 Description: Load dword to VDATA from SRSRC resource.<br /> 1130 1130 Operation:<br /> 1131 <code>VDATA = *(UINT32*)VMEM(SRSRC, VADDR , SOFFSET, OFFSET)</code></p>1131 <code>VDATA = *(UINT32*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET)</code></p> 1132 1132 <h4>BUFFER_LOAD_DWORDX2</h4> 1133 1133 <p>Opcode: 13 (0xd) for GCN 1.0/1.1; 21 (0x15) for GCN 1.2<br /> 1134 Syntax: BUFFER_LOAD_DWORDX2 VDATA(2), VADDR , SRSRC, SOFFSET<br />1134 Syntax: BUFFER_LOAD_DWORDX2 VDATA(2), VADDR(1:2), SRSRC(4), SOFFSET<br /> 1135 1135 Description: Load two dwords to VDATA from SRSRC resource.<br /> 1136 1136 Operation:<br /> 1137 <code>UINT32* VM = *(UINT32*)VMEM(SRSRC, VADDR , SOFFSET, OFFSET)1137 <code>UINT32* VM = *(UINT32*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET) 1138 1138 VDATA[0] = VM[0] 1139 1139 VDATA[1] = VM[1]</code></p> 1140 1140 <h4>BUFFER_LOAD_DWORDX3</h4> 1141 1141 <p>Opcode: 15 (0xf) for GCN 1.1; 22 (0x16) for GCN 1.2<br /> 1142 Syntax: BUFFER_LOAD_DWORDX3 VDATA(3), VADDR , SRSRC, SOFFSET<br />1142 Syntax: BUFFER_LOAD_DWORDX3 VDATA(3), VADDR(1:2), SRSRC(4), SOFFSET<br /> 1143 1143 Description: Load three dwords to VDATA from SRSRC resource.<br /> 1144 1144 Operation:<br /> 1145 <code>UINT32* VM = *(UINT32*)VMEM(SRSRC, VADDR , SOFFSET, OFFSET)1145 <code>UINT32* VM = *(UINT32*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET) 1146 1146 VDATA[0] = VM[0] 1147 1147 VDATA[1] = VM[1] … … 1149 1149 <h4>BUFFER_LOAD_DWORDX4</h4> 1150 1150 <p>Opcode: 14 (0xe) for GCN 1.0/1.1; 23 (0x17) for GCN 1.2<br /> 1151 Syntax: BUFFER_LOAD_DWORDX4 VDATA(4), VADDR , SRSRC, SOFFSET<br />1151 Syntax: BUFFER_LOAD_DWORDX4 VDATA(4), VADDR(1:2), SRSRC(4), SOFFSET<br /> 1152 1152 Description: Load four dwords to VDATA from SRSRC resource.<br /> 1153 1153 Operation:<br /> 1154 <code>UINT32* VM = *(UINT32*)VMEM(SRSRC, VADDR , SOFFSET, OFFSET)1154 <code>UINT32* VM = *(UINT32*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET) 1155 1155 VDATA[0] = VM[0] 1156 1156 VDATA[1] = VM[1] … … 1159 1159 <h4>BUFFER_LOAD_FORMAT_X</h4> 1160 1160 <p>Opcode: 0 (0x0)<br /> 1161 Syntax: BUFFER_LOAD_FORMAT_X VDATA, VADDR , SRSRC, SOFFSET<br />1161 Syntax: BUFFER_LOAD_FORMAT_X VDATA, VADDR(1:2), SRSRC(4), SOFFSET<br /> 1162 1162 Description: Load the first component of the element from SRSRC including format from 1163 1163 buffer resource.<br /> 1164 1164 Operation:<br /> 1165 <code>VDATA = LOAD_FORMAT_X(SRSRC, VADDR , SOFFSET, OFFSET)</code></p>1165 <code>VDATA = LOAD_FORMAT_X(SRSRC, VADDR(1:2), SOFFSET, OFFSET)</code></p> 1166 1166 <h4>BUFFER_LOAD_FORMAT_XY</h4> 1167 1167 <p>Opcode: 1 (0x1)<br /> 1168 Syntax: BUFFER_LOAD_FORMAT_XY VDATA(2), VADDR , SRSRC, SOFFSET<br />1168 Syntax: BUFFER_LOAD_FORMAT_XY VDATA(2), VADDR(1:2), SRSRC(4), SOFFSET<br /> 1169 1169 Description: Load the first two components of the element from SRSRC resource 1170 1170 including format from SRSRC.<br /> 1171 1171 Operation:<br /> 1172 <code>VDATA[0] = LOAD_FORMAT_XY(SRSRC, VADDR , SOFFSET, OFFSET)</code></p>1172 <code>VDATA[0] = LOAD_FORMAT_XY(SRSRC, VADDR(1:2), SOFFSET, OFFSET)</code></p> 1173 1173 <h4>BUFFER_LOAD_FORMAT_XYZ</h4> 1174 1174 <p>Opcode: 2 (0x2)<br /> 1175 Syntax: BUFFER_LOAD_FORMAT_XYZ VDATA(3), VADDR , SRSRC, SOFFSET<br />1175 Syntax: BUFFER_LOAD_FORMAT_XYZ VDATA(3), VADDR(1:2), SRSRC(4), SOFFSET<br /> 1176 1176 Description: Load the first three components of the element from SRSRC resource 1177 1177 including format from SRSRC.<br /> 1178 1178 Operation:<br /> 1179 <code>VDATA[0] = LOAD_FORMAT_XYZ(SRSRC, VADDR , SOFFSET, OFFSET)</code></p>1179 <code>VDATA[0] = LOAD_FORMAT_XYZ(SRSRC, VADDR(1:2), SOFFSET, OFFSET)</code></p> 1180 1180 <h4>BUFFER_LOAD_FORMAT_XYZW</h4> 1181 1181 <p>Opcode: 3 (0x3)<br /> 1182 Syntax: BUFFER_LOAD_FORMAT_XYZW VDATA(4), VADDR , SRSRC, SOFFSET<br />1182 Syntax: BUFFER_LOAD_FORMAT_XYZW VDATA(4), VADDR(1:2), SRSRC(4), SOFFSET<br /> 1183 1183 Description: Load the all four components of the element from SRSRC resource 1184 1184 including format from SRSRC.<br /> 1185 1185 Operation:<br /> 1186 <code>VDATA[0] = LOAD_FORMAT_XYZW(SRSRC, VADDR , SOFFSET, OFFSET)</code></p>1186 <code>VDATA[0] = LOAD_FORMAT_XYZW(SRSRC, VADDR(1:2), SOFFSET, OFFSET)</code></p> 1187 1187 <h4>BUFFER_LOAD_SBYTE</h4> 1188 1188 <p>Opcode: 9 (0x9) for GCN 1.0/1.1; 17 (0x11) for GCN 1.2<br /> 1189 Syntax: BUFFER_LOAD_SBYTE VDATA, VADDR , SRSRC, SOFFSET<br />1189 Syntax: BUFFER_LOAD_SBYTE VDATA, VADDR(1:2), SRSRC(4), SOFFSET<br /> 1190 1190 Description: Load byte to VDATA from SRSRC resource with sign extending.<br /> 1191 1191 Operation:<br /> 1192 <code>VDATA = *(INT8*)VMEM(SRSRC, VADDR , SOFFSET, OFFSET)</code></p>1192 <code>VDATA = *(INT8*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET)</code></p> 1193 1193 <h4>BUFFER_LOAD_SSHORT</h4> 1194 1194 <p>Opcode: 11 (0xb) for GCN 1.0/1.1; 19 (0x13) for GCN 1.2<br /> 1195 Syntax: BUFFER_LOAD_SSHORT VDATA, VADDR , SRSRC, SOFFSET<br />1195 Syntax: BUFFER_LOAD_SSHORT VDATA, VADDR(1:2), SRSRC(4), SOFFSET<br /> 1196 1196 Description: Load 16-bit word to VDATA from SRSRC resource with sign extending.<br /> 1197 1197 Operation:<br /> 1198 <code>VDATA = *(INT16*)VMEM(SRSRC, VADDR , SOFFSET, OFFSET)</code></p>1198 <code>VDATA = *(INT16*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET)</code></p> 1199 1199 <h4>BUFFER_LOAD_UBYTE</h4> 1200 1200 <p>Opcode: 8 (0x8) for GCN 1.0/1.1; 16 (0x10) for GCN 1.2<br /> 1201 Syntax: BUFFER_LOAD_UBYTE VDATA, VADDR , SRSRC, SOFFSET<br />1201 Syntax: BUFFER_LOAD_UBYTE VDATA, VADDR(1:2), SRSRC(4), SOFFSET<br /> 1202 1202 Description: Load byte to VDATA from SRSRC resource with zero extending.<br /> 1203 1203 Operation:<br /> 1204 <code>VDATA = *(UINT8*)VMEM(SRSRC, VADDR , SOFFSET, OFFSET)</code></p>1204 <code>VDATA = *(UINT8*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET)</code></p> 1205 1205 <h4>BUFFER_LOAD_USHORT</h4> 1206 1206 <p>Opcode: 10 (0xa) for GCN 1.0/1.1; 18 (0x12) for GCN 1.2<br /> 1207 Syntax: BUFFER_LOAD_USHORT VDATA, VADDR , SRSRC, SOFFSET<br />1207 Syntax: BUFFER_LOAD_USHORT VDATA, VADDR(1:2), SRSRC(4), SOFFSET<br /> 1208 1208 Description: Load 16-bit word to VDATA from SRSRC resource with zero extending.<br /> 1209 1209 Operation:<br /> 1210 <code>VDATA = *(UINT16*)VMEM(SRSRC, VADDR , SOFFSET, OFFSET)</code></p>1210 <code>VDATA = *(UINT16*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET)</code></p> 1211 1211 <h4>BUFFER_STORE_BYTE</h4> 1212 1212 <p>Opcode: 24 (0x18)<br /> 1213 Syntax: BUFFER_STORE_BYTE VDATA, VADDR , SRSRC, SOFFSET<br />1213 Syntax: BUFFER_STORE_BYTE VDATA, VADDR(1:2), SRSRC(4), SOFFSET<br /> 1214 1214 Description: Store byte from VDATA into SRSRC resource.<br /> 1215 1215 Operation:<br /> 1216 <code>*(UINT8*)VMEM(SRSRC, VADDR , SOFFSET, OFFSET) = VDATA&0xff</code></p>1216 <code>*(UINT8*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET) = VDATA&0xff</code></p> 1217 1217 <h4>BUFFER_STORE_DWORD</h4> 1218 1218 <p>Opcode: 28 (0x1c)<br /> 1219 Syntax: BUFFER_STORE_DWORD VDATA, VADDR , SRSRC, SOFFSET<br />1219 Syntax: BUFFER_STORE_DWORD VDATA, VADDR(1:2), SRSRC(4), SOFFSET<br /> 1220 1220 Description: Store dword from VDATA into SRSRC resource.<br /> 1221 1221 Operation:<br /> 1222 <code>*(UINT32*)VMEM(SRSRC, VADDR , SOFFSET, OFFSET) = VDATA</code></p>1222 <code>*(UINT32*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET) = VDATA</code></p> 1223 1223 <h4>BUFFER_STORE_DWORDX2</h4> 1224 1224 <p>Opcode: 29 (0x1d)<br /> 1225 Syntax: BUFFER_STORE_DWORDX2 VDATA(2), VADDR , SRSRC, SOFFSET<br />1225 Syntax: BUFFER_STORE_DWORDX2 VDATA(2), VADDR(1:2), SRSRC(4), SOFFSET<br /> 1226 1226 Description: Store two dwords from VDATA into SRSRC resource.<br /> 1227 1227 Operation:<br /> 1228 <code>UINT32* VM = *(UINT32*)VMEM(SRSRC, VADDR , SOFFSET, OFFSET)1228 <code>UINT32* VM = *(UINT32*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET) 1229 1229 VM[0] = VDATA[0] 1230 1230 VM[1] = VDATA[1]</code></p> 1231 1231 <h4>BUFFER_STORE_DWORDX3</h4> 1232 1232 <p>Opcode: 31 (0x1f) for GCN 1.1; 30 (0x1e) for GCN 1.2<br /> 1233 Syntax: BUFFER_STORE_DWORDX2 VDATA(3), VADDR , SRSRC, SOFFSET<br />1233 Syntax: BUFFER_STORE_DWORDX2 VDATA(3), VADDR(1:2), SRSRC(4), SOFFSET<br /> 1234 1234 Description: Store three dwords from VDATA into SRSRC resource.<br /> 1235 1235 Operation:<br /> 1236 <code>UINT32* VM = *(UINT32*)VMEM(SRSRC, VADDR , SOFFSET, OFFSET)1236 <code>UINT32* VM = *(UINT32*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET) 1237 1237 VM[0] = VDATA[0] 1238 1238 VM[1] = VDATA[1] … … 1240 1240 <h4>BUFFER_STORE_DWORDX4</h4> 1241 1241 <p>Opcode: 31 (0x1e) for GCN 1.1; 31 (0x1f) for GCN 1.2<br /> 1242 Syntax: BUFFER_STORE_DWORDX2 VDATA(4), VADDR , SRSRC, SOFFSET<br />1242 Syntax: BUFFER_STORE_DWORDX2 VDATA(4), VADDR(1:2), SRSRC(4), SOFFSET<br /> 1243 1243 Description: Store four dwords from VDATA into SRSRC resource.<br /> 1244 1244 Operation:<br /> 1245 <code>UINT32* VM = *(UINT32*)VMEM(SRSRC, VADDR , SOFFSET, OFFSET)1245 <code>UINT32* VM = *(UINT32*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET) 1246 1246 VM[0] = VDATA[0] 1247 1247 VM[1] = VDATA[1] … … 1250 1250 <h4>BUFFER_STORE_FORMAT_X</h4> 1251 1251 <p>Opcode: 4 (0x4)<br /> 1252 Syntax: BUFFER_STORE_FORMAT_X VDATA, VADDR , SRSRC, SOFFSET<br />1252 Syntax: BUFFER_STORE_FORMAT_X VDATA, VADDR(1:2), SRSRC(4), SOFFSET<br /> 1253 1253 Description: Store the first component of the element into SRSRC resource 1254 1254 including format from SRSRC.<br /> 1255 1255 Operation:<br /> 1256 <code>STORE_FORMAT_X(SRSRC, VADDR , SOFFSET, OFFSET, VDATA)</code></p>1256 <code>STORE_FORMAT_X(SRSRC, VADDR(1:2), SOFFSET, OFFSET, VDATA)</code></p> 1257 1257 <h4>BUFFER_STORE_FORMAT_XY</h4> 1258 1258 <p>Opcode: 5 (0x5)<br /> 1259 Syntax: BUFFER_STORE_FORMAT_XY VDATA(2), VADDR , SRSRC, SOFFSET<br />1259 Syntax: BUFFER_STORE_FORMAT_XY VDATA(2), VADDR(1:2), SRSRC(4), SOFFSET<br /> 1260 1260 Description: Store the first two components of the element into SRSRC resource 1261 1261 including format from SRSRC.<br /> 1262 1262 Operation:<br /> 1263 <code>STORE_FORMAT_XY(SRSRC, VADDR , SOFFSET, OFFSET, VDATA)</code></p>1263 <code>STORE_FORMAT_XY(SRSRC, VADDR(1:2), SOFFSET, OFFSET, VDATA)</code></p> 1264 1264 <h4>BUFFER_STORE_FORMAT_XYZ</h4> 1265 1265 <p>Opcode: 6 (0x6)<br /> 1266 Syntax: BUFFER_STORE_FORMAT_XYZ VDATA(3), VADDR , SRSRC, SOFFSET<br />1266 Syntax: BUFFER_STORE_FORMAT_XYZ VDATA(3), VADDR(1:2), SRSRC(4), SOFFSET<br /> 1267 1267 Description: Store the first three components of the element into SRSRC resource 1268 1268 including format from SRSRC.<br /> 1269 1269 Operation:<br /> 1270 <code>STORE_FORMAT_XYZ(SRSRC, VADDR , SOFFSET, OFFSET, VDATA)</code></p>1270 <code>STORE_FORMAT_XYZ(SRSRC, VADDR(1:2), SOFFSET, OFFSET, VDATA)</code></p> 1271 1271 <h4>BUFFER_STORE_FORMAT_XYZW</h4> 1272 1272 <p>Opcode: 7 (0x7)<br /> 1273 Syntax: BUFFER_STORE_FORMAT_XYZW VDATA(4), VADDR , SRSRC, SOFFSET<br />1273 Syntax: BUFFER_STORE_FORMAT_XYZW VDATA(4), VADDR(1:2), SRSRC(4), SOFFSET<br /> 1274 1274 Description: Store the all components of the element into SRSRC resource 1275 1275 including format from SRSRC.<br /> 1276 1276 Operation:<br /> 1277 <code>STORE_FORMAT_XYZW(SRSRC, VADDR , SOFFSET, OFFSET, VDATA)</code></p>1277 <code>STORE_FORMAT_XYZW(SRSRC, VADDR(1:2), SOFFSET, OFFSET, VDATA)</code></p> 1278 1278 <h4>BUFFER_STORE_SHORT</h4> 1279 1279 <p>Opcode: 26 (0x1a)<br /> 1280 Syntax: BUFFER_STORE_SHORT VDATA, VADDR , SRSRC, SOFFSET<br />1280 Syntax: BUFFER_STORE_SHORT VDATA, VADDR(1:2), SRSRC(4), SOFFSET<br /> 1281 1281 Description: Store 16-bit word from VDATA into SRSRC resource.<br /> 1282 1282 Operation:<br /> 1283 <code>*(UINT16*)VMEM(SRSRC, VADDR , SOFFSET, OFFSET) = VDATA&0xffff</code></p>1283 <code>*(UINT16*)VMEM(SRSRC, VADDR(1:2), SOFFSET, OFFSET) = VDATA&0xffff</code></p> 1284 1284 }}}