AMDGPU / GFX Instructions GPU Native ISA AMD
1960 instructions - showing 100 per page, page 6 of 20 - AMDGPU/GFX is AMD's native, low-level
GPU instruction set family, assembled directly with no virtual intermediate layer. Supported
instructions and their exact encodings vary by GFX compatibility target (e.g.
gfx942, gfx1100). Scalar instructions execute once per wavefront on
the Scalar ALU; vector instructions execute per-lane on the Vector ALU, gated by the EXEC mask.
| Mnemonic | Syntax | Format | GFX Targets | Unit | Summary |
|---|---|---|---|---|---|
| global_load_tr4_b64 | global_load_tr4_b64 | GLOBAL | AMDGPU GLOBAL vector instruction operating on b64 data. (Format and name extracted from LLVM's AMDGPU backend source - semantics not yet curated.) | ||
| global_load_tr6_b96 | global_load_tr6_b96 | GLOBAL | AMDGPU GLOBAL vector instruction operating on b96 data. (Format and name extracted from LLVM's AMDGPU backend source - semantics not yet curated.) | ||
| global_load_tr_b128 | global_load_tr_b128 | GLOBAL | Load a 16x16 matrix of 16-bit data from the global aperture, transpose data between row-major and column-major order, and store the result into a… | ||
| global_load_tr_b128_w64 | global_load_tr_b128_w64 | GLOBAL | AMDGPU GLOBAL vector instruction operating on b128 data. (Format and name extracted from LLVM's AMDGPU backend source - semantics not yet curated.) | ||
| global_load_tr_b64 | global_load_tr_b64 | GLOBAL | Load a 16x16 matrix of 8-bit data from the global aperture, transpose data between row-major and column-major order, and store the result into a… | ||
| global_load_tr_b64_w64 | global_load_tr_b64_w64 | GLOBAL | AMDGPU GLOBAL vector instruction operating on b64 data. (Format and name extracted from LLVM's AMDGPU backend source - semantics not yet curated.) | ||
| global_load_ubyte | global_load_ubyte | GLOBAL | Load 8 bits of unsigned data from the global aperture, zero extend to 32 bits and store the result into a vector register. | ||
| global_load_ubyte_d16 | global_load_ubyte_d16 | GLOBAL | Load 8 bits of unsigned data from the global aperture, zero extend to 16 bits and store the result into the low 16 bits of a 32-bit vector register. | ||
| global_load_ubyte_d16_hi | global_load_ubyte_d16_hi | GLOBAL | Load 8 bits of unsigned data from the global aperture, zero extend to 16 bits and store the result into the high 16 bits of a 32-bit vector register. | ||
| global_load_ushort | global_load_ushort | GLOBAL | Load 16 bits of unsigned data from the global aperture, zero extend to 32 bits and store the result into a vector register. | ||
| global_prefetch_b8 | global_prefetch_b8 | GLOBAL | AMDGPU GLOBAL vector instruction operating on b8 data. (Format and name extracted from LLVM's AMDGPU backend source - semantics not yet curated.) | ||
| global_store_async_from_lds_b128 | global_store_async_from_lds_b128 | GLOBAL | AMDGPU GLOBAL vector instruction operating on b128 data. (Format and name extracted from LLVM's AMDGPU backend source - semantics not yet curated.) | ||
| global_store_async_from_lds_b32 | global_store_async_from_lds_b32 | GLOBAL | AMDGPU GLOBAL vector instruction operating on b32 data. (Format and name extracted from LLVM's AMDGPU backend source - semantics not yet curated.) | ||
| global_store_async_from_lds_b64 | global_store_async_from_lds_b64 | GLOBAL | AMDGPU GLOBAL vector instruction operating on b64 data. (Format and name extracted from LLVM's AMDGPU backend source - semantics not yet curated.) | ||
| global_store_async_from_lds_b8 | global_store_async_from_lds_b8 | GLOBAL | AMDGPU GLOBAL vector instruction operating on b8 data. (Format and name extracted from LLVM's AMDGPU backend source - semantics not yet curated.) | ||
| global_store_block | global_store_block | GLOBAL | Store a block of data to the global aperture. | ||
| global_store_byte | global_store_byte | GLOBAL | Store 8 bits of data from a vector register into the global aperture. | ||
| global_store_byte_d16_hi | global_store_byte_d16_hi | GLOBAL | Store 8 bits of data from the high 16 bits of a 32-bit vector register into the global aperture. | ||
| global_store_dword | global_store_dword VADDR, VDATA, SADDR, offset | GLOBAL | gfx942, gfx1100 | Vector Memory Unit | Store one 32-bit dword per lane to the global address space using a 64-bit per-lane address. |
| global_store_dword_addtid | global_store_dword_addtid | GLOBAL | Store 32 bits of data from a vector input register into the global aperture. | ||
| global_store_dwordx2 | global_store_dwordx2 | GLOBAL | Store 64 bits of data from vector input registers into the global aperture. | ||
| global_store_dwordx3 | global_store_dwordx3 | GLOBAL | Store 96 bits of data from vector input registers into the global aperture. | ||
| global_store_dwordx4 | global_store_dwordx4 | GLOBAL | Store 128 bits of data from vector input registers into the global aperture. | ||
| global_store_short | global_store_short | GLOBAL | Store 16 bits of data from a vector register into the global aperture. | ||
| global_store_short_d16_hi | global_store_short_d16_hi | GLOBAL | Store 16 bits of data from the high 16 bits of a 32-bit vector register into the global aperture. | ||
| global_wb | global_wb | GLOBAL | Write back dirty cache lines based on the SCOPE field. Increments/decrements STORE_CNT. | ||
| global_wbinv | global_wbinv | GLOBAL | Write back and invalidate cache lines based on the SCOPE field. Increments/decrements STORE_CNT. | ||
| image_atomic_add | image_atomic_add | MIMG | Add two unsigned 32-bit integer values stored in the data register and a location in an image surface. | ||
| image_atomic_add_flt | image_atomic_add_flt | MIMG | Add two single-precision float values stored in the data register and a location in an image surface. | ||
| image_atomic_and | image_atomic_and | MIMG | Calculate bitwise AND given two unsigned 32-bit integer values stored in the data register and a location in an image surface. | ||
| image_atomic_cmpswap | image_atomic_cmpswap | MIMG | Compare two unsigned 32-bit integer values stored in the data comparison register and a location in an image surface. | ||
| image_atomic_dec | image_atomic_dec | MIMG | Decrement an unsigned 32-bit integer value from a location in an image surface with wraparound to a value in the data register if the decrement… | ||
| image_atomic_fcmpswap | image_atomic_fcmpswap | MIMG | Compare two single-precision float values stored in the data comparison register and a location in an image surface. | ||
| image_atomic_fmax | image_atomic_fmax | MIMG | Select the maximum of two single-precision float inputs, given two values stored in the data register and a location in an image surface. | ||
| image_atomic_fmin | image_atomic_fmin | MIMG | Select the minimum of two single-precision float inputs, given two values stored in the data register and a location in an image surface. | ||
| image_atomic_inc | image_atomic_inc | MIMG | Increment an unsigned 32-bit integer value from a location in an image surface with wraparound to 0 if the value exceeds a value in the data register. | ||
| image_atomic_max_flt | image_atomic_max_flt | MIMG | Select the IEEE maximumNumber() of two single-precision float inputs, given two values stored in the data register and a location in an image surface. | ||
| image_atomic_max_num_flt | image_atomic_max_num_flt | MIMG | AMDGPU MIMG vector instruction. (Format and name extracted from LLVM's AMDGPU backend source - semantics not yet curated.) | ||
| image_atomic_min_flt | image_atomic_min_flt | MIMG | Select the IEEE minimumNumber() of two single-precision float inputs, given two values stored in the data register and a location in an image surface. | ||
| image_atomic_min_num_flt | image_atomic_min_num_flt | MIMG | AMDGPU MIMG vector instruction. (Format and name extracted from LLVM's AMDGPU backend source - semantics not yet curated.) | ||
| image_atomic_or | image_atomic_or | MIMG | Calculate bitwise OR given two unsigned 32-bit integer values stored in the data register and a location in an image surface. | ||
| image_atomic_pk_add_bf16 | image_atomic_pk_add_bf16 | MIMG | Add a packed 2-component BF16 float value from the data register to a location in an image surface. | ||
| image_atomic_pk_add_f16 | image_atomic_pk_add_f16 | MIMG | Add a packed 2-component half-precision float value from the data register to a location in an image surface. | ||
| image_atomic_rsub | image_atomic_rsub | MIMG | AMDGPU MIMG vector instruction. (Format and name extracted from LLVM's AMDGPU backend source - semantics not yet curated.) | ||
| image_atomic_smax | image_atomic_smax | MIMG | Select the maximum of two signed 32-bit integer inputs, given two values stored in the data register and a location in an image surface. | ||
| image_atomic_smin | image_atomic_smin | MIMG | Select the minimum of two signed 32-bit integer inputs, given two values stored in the data register and a location in an image surface. | ||
| image_atomic_sub | image_atomic_sub | MIMG | Subtract an unsigned 32-bit integer value stored in the data register from a value stored in a location in an image surface. | ||
| image_atomic_swap | image_atomic_swap | MIMG | Swap an unsigned 32-bit integer value in the data register with a location in an image surface. | ||
| image_atomic_umax | image_atomic_umax | MIMG | Select the maximum of two unsigned 32-bit integer inputs, given two values stored in the data register and a location in an image surface. | ||
| image_atomic_umin | image_atomic_umin | MIMG | Select the minimum of two unsigned 32-bit integer inputs, given two values stored in the data register and a location in an image surface. | ||
| image_atomic_xor | image_atomic_xor | MIMG | Calculate bitwise XOR given two unsigned 32-bit integer values stored in the data register and a location in an image surface. | ||
| image_bvh64_intersect_ray | image_bvh64_intersect_ray | MIMG | Test the intersection of rays with either box nodes or triangle nodes within a bounded volume hierarchy using 64 bit node pointers. | ||
| image_bvh8_intersect_ray | image_bvh8_intersect_ray | MIMG | This instruction supports testing one BVH8 node against one ray per lane using both intersection engines. | ||
| image_bvh_dual_intersect_ray | image_bvh_dual_intersect_ray | MIMG | This instruction supports testing two QBVH nodes against the same ray per lane using both intersection engines. | ||
| image_bvh_intersect_ray | image_bvh_intersect_ray | MIMG | Test the intersection of rays with either box nodes or triangle nodes within a bounded volume hierarchy using 32 bit node pointers. | ||
| image_gather4h | image_gather4h | MIMG | Gather 4 single-component texels from a 4x1 row vector on an image surface. | ||
| image_get_lod | image_get_lod | MIMG | Return the calculated level of detail (LOD) for the provided input as two single-precision float values. No memory access is performed. | ||
| image_get_resinfo | image_get_resinfo | MIMG | Gather resource information for a given miplevel provided in the address register. | ||
| image_load | image_load | MIMG | Load a texel from the largest miplevel in an image surface and store the result into a vector register. | ||
| image_load_mip | image_load_mip | MIMG | Load a texel from a user-specified miplevel in an image surface and store the result into a vector register. | ||
| image_load_mip_pck | image_load_mip_pck | MIMG | Load a texel from a user-specified miplevel in an image surface and store the result into a vector register. | ||
| image_load_mip_pck_sgn | image_load_mip_pck_sgn | MIMG | Load a texel from a user-specified miplevel in an image surface and store the result into a vector register. | ||
| image_load_pck | image_load_pck | MIMG | Load a texel from the largest miplevel in an image surface and store the result into a vector register. | ||
| image_load_pck_sgn | image_load_pck_sgn | MIMG | Load a texel from the largest miplevel in an image surface and store the result into a vector register. | ||
| image_msaa_load | image_msaa_load | MIMG | Load up to 4 samples of 1 component from an MSAA resource with a user-specified fragment ID. No sampling is performed. | ||
| image_store | image_store | MIMG | Store a texel from a vector register to the largest miplevel in an image surface. | ||
| image_store_mip | image_store_mip | MIMG | Store a texel from a vector register to a user-specified miplevel in an image surface. | ||
| image_store_mip_pck | image_store_mip_pck | MIMG | Store a texel from a vector register to a user-specified miplevel in an image surface. | ||
| image_store_pck | image_store_pck | MIMG | Store a texel from a vector register to the largest miplevel in an image surface. | ||
| lds_direct_load | lds_direct_load | DSDIR | gfx1100 | Read a single 32-bit value from LDS to all lanes. | |
| lds_param_load | lds_param_load | DSDIR | gfx1100 | Transfer parameter data from LDS to VGPRs and expand data in LDS using the NewPrimMask (provided in M0) to place per-quad data into lanes 0-3 of each… | |
| s_abs_i32 | s_abs_i32 | SOP1 | gfx1100 | Compute the absolute value of a scalar input, store the result into a scalar register and set SCC iff the result is nonzero. | |
| s_absdiff_i32 | s_absdiff_i32 | SOP2 | gfx1100 | Calculate the absolute value of difference between two scalar inputs, store the result into a scalar register and set SCC iff the result is nonzero. | |
| s_add_co_ci_u32 | s_add_co_ci_u32 | SOP2 | gfx1100 | Add two unsigned 32-bit integer inputs and a carry-in bit from SCC, store the result into a scalar register and store the carry-out bit into SCC. | |
| s_add_co_i32 | s_add_co_i32 | SOP2 | gfx1100 | Add two signed 32-bit integer inputs, store the result into a scalar register and store the carry-out bit into SCC. | |
| s_add_co_u32 | s_add_co_u32 | SOP2 | gfx1100 | Add two unsigned 32-bit integer inputs, store the result into a scalar register and store the carry-out bit into SCC. | |
| s_add_f16 | s_add_f16 | SOP2 | gfx1100 | Add two floating point inputs and store the result into a scalar register. | |
| s_add_f32 | s_add_f32 | SOP2 | gfx1100 | Add two floating point inputs and store the result into a scalar register. | |
| s_add_i32 | s_add_i32 | SOP2 | gfx1100 | Add two signed 32-bit integer inputs, store the result into a scalar register and store the carry-out bit into SCC. | |
| s_add_nc_u64 | s_add_nc_u64 | SOP2 | Add two unsigned 64-bit integer inputs and store the result into a scalar register. | ||
| s_add_pc_i64 | s_add_pc_i64 | SOP1 | AMDGPU SOP1 scalar instruction operating on i64 data. (Format and name extracted from LLVM's AMDGPU backend source - semantics not yet curated.) | ||
| s_add_u32 | s_add_u32 SDST, S0, S1 | SOP2 | gfx942, gfx1100 | Scalar ALU | Add two 32-bit unsigned scalar operands, wavefront-uniform. |
| s_add_u64 | s_add_u64 | SOP2 | AMDGPU SOP2 scalar instruction operating on u64 data. (Format and name extracted from LLVM's AMDGPU backend source - semantics not yet curated.) | ||
| s_addc_u32 | s_addc_u32 | SOP2 | gfx1100 | Add two unsigned 32-bit integer inputs and a carry-in bit from SCC, store the result into a scalar register and store the carry-out bit into SCC. | |
| s_addk_co_i32 | s_addk_co_i32 | SOPK | gfx1100 | Add a scalar input and the sign extension of a literal 16-bit constant, store the result into a scalar register and store the carry-out bit into SCC. | |
| s_addk_i32 | s_addk_i32 | SOPK | gfx1100 | Add a scalar input and the sign extension of a literal 16-bit constant, store the result into a scalar register and store the carry-out bit into SCC. | |
| s_alloc_vgpr | s_alloc_vgpr | SOP1 | Attempt to set the wave's VGPR allocation to the specified number of VGPRs (or greater). | ||
| s_and_b32 | s_and_b32 | SOP2 | gfx1100 | Calculate bitwise AND on two scalar inputs, store the result into a scalar register and set SCC iff the result is nonzero. | |
| s_and_b64 | s_and_b64 | SOP2 | gfx1100 | Calculate bitwise AND on two scalar inputs, store the result into a scalar register and set SCC iff the result is nonzero. | |
| s_and_not0_saveexec_b32 | s_and_not0_saveexec_b32 | SOP1 | gfx1100 | Calculate bitwise AND on the EXEC mask and the negation of the scalar input, store the calculated result into the EXEC mask, set SCC iff the… | |
| s_and_not0_saveexec_b64 | s_and_not0_saveexec_b64 | SOP1 | gfx1100 | Calculate bitwise AND on the EXEC mask and the negation of the scalar input, store the calculated result into the EXEC mask, set SCC iff the… | |
| s_and_not0_wrexec_b32 | s_and_not0_wrexec_b32 | SOP1 | gfx1100 | Calculate bitwise AND on the EXEC mask and the negation of the scalar input, store the calculated result into the EXEC mask and also into the scalar… | |
| s_and_not0_wrexec_b64 | s_and_not0_wrexec_b64 | SOP1 | gfx1100 | Calculate bitwise AND on the EXEC mask and the negation of the scalar input, store the calculated result into the EXEC mask and also into the scalar… | |
| s_and_not1_b32 | s_and_not1_b32 | SOP2 | gfx1100 | Calculate bitwise AND with the first input and the negation of the second input, store the result into a scalar register and set SCC if the result is… | |
| s_and_not1_b64 | s_and_not1_b64 | SOP2 | gfx1100 | Calculate bitwise AND with the first input and the negation of the second input, store the result into a scalar register and set SCC if the result is… | |
| s_and_not1_saveexec_b32 | s_and_not1_saveexec_b32 | SOP1 | gfx1100 | Calculate bitwise AND on the scalar input and the negation of the EXEC mask, store the calculated result into the EXEC mask, set SCC iff the… | |
| s_and_not1_saveexec_b64 | s_and_not1_saveexec_b64 | SOP1 | gfx1100 | Calculate bitwise AND on the scalar input and the negation of the EXEC mask, store the calculated result into the EXEC mask, set SCC iff the… | |
| s_and_not1_wrexec_b32 | s_and_not1_wrexec_b32 | SOP1 | gfx1100 | Calculate bitwise AND on the scalar input and the negation of the EXEC mask, store the calculated result into the EXEC mask and also into the scalar… | |
| s_and_not1_wrexec_b64 | s_and_not1_wrexec_b64 | SOP1 | gfx1100 | Calculate bitwise AND on the scalar input and the negation of the EXEC mask, store the calculated result into the EXEC mask and also into the scalar… | |
| s_and_saveexec_b32 | s_and_saveexec_b32 | SOP1 | gfx1100 | Calculate bitwise AND on the scalar input and the EXEC mask, store the calculated result into the EXEC mask, set SCC iff the calculated result is… |
Source
Normalized from AMD's official ROCm documentation, with the LLVM AMDGPU backend documentation as supplementary compiler-target information. ROCm documentation ↗