summaryrefslogtreecommitdiffstats
path: root/llvm/docs/AMDGPUInstructionNotation.rst
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/docs/AMDGPUInstructionNotation.rst')
-rw-r--r--llvm/docs/AMDGPUInstructionNotation.rst110
1 files changed, 110 insertions, 0 deletions
diff --git a/llvm/docs/AMDGPUInstructionNotation.rst b/llvm/docs/AMDGPUInstructionNotation.rst
new file mode 100644
index 00000000000..a2b617c2b0b
--- /dev/null
+++ b/llvm/docs/AMDGPUInstructionNotation.rst
@@ -0,0 +1,110 @@
+============================
+AMDGPU Instructions Notation
+============================
+
+.. contents::
+ :local:
+
+.. _amdgpu_syn_instruction_notation:
+
+Introduction
+============
+
+This is an overview of notation used to describe the syntax of AMDGPU assembler instructions.
+
+This notation mimics the :ref:`syntax of assembler instructions<amdgpu_syn_instructions>`
+except that instead of real operands and modifiers it provides references to their description.
+
+Instructions
+============
+
+Notation
+~~~~~~~~
+
+This is the notation used to describe AMDGPU instructions:
+
+ ``<``\ :ref:`opcode description<amdgpu_syn_opcode_notation>`\ ``> <``\ :ref:`operands description<amdgpu_syn_instruction_operands_notation>`\ ``> <``\ :ref:`modifiers description<amdgpu_syn_instruction_modifiers_notation>`\ ``>``
+
+.. _amdgpu_syn_opcode_notation:
+
+Opcode
+======
+
+Notation
+~~~~~~~~
+
+TBD
+
+.. _amdgpu_syn_instruction_operands_notation:
+
+Operands
+========
+
+An instruction may have zero or more *operands*. They are comma-separated in the description:
+
+ ``<``\ :ref:`description of operand 0<amdgpu_syn_instruction_operand_notation>`\ ``>, <``\ :ref:`description of operand 1<amdgpu_syn_instruction_operand_notation>`\ ``>, ...``
+
+The order of *operands* is fixed. *Operands* cannot be omitted
+except for special cases described below.
+
+.. _amdgpu_syn_instruction_operand_notation:
+
+Notation
+~~~~~~~~
+
+An operand is described using the following notation:
+
+ *<name><tag0><tag1>...*
+
+Where:
+
+* *name* is a link to a description of the operand.
+* *tags* are optional. They are used to indicate special operand properties:
+
+.. _amdgpu_syn_instruction_operand_tags:
+
+ ============== =================================================================================
+ Operand tag Meaning
+ ============== =================================================================================
+ :opt An optional operand.
+ :m An operand which may be used with
+ :ref:`VOP3 operand modifiers<amdgpu_synid_vop3_operand_modifiers>` or
+ :ref:`SDWA operand modifiers<amdgpu_synid_sdwa_operand_modifiers>`.
+ :dst An input operand which may also serve as a destination
+ if :ref:`glc<amdgpu_synid_glc>` modifier is specified.
+ :fx This is an *f32* or *f16* operand depending on
+ :ref:`mad_mix_op_sel_hi<amdgpu_synid_mad_mix_op_sel_hi>` modifier.
+ :<type> Operand *type* differs from *type*
+ :ref:`implied by the opcode name<amdgpu_syn_instruction_type>`.
+ This tag specifies actual operand *type*.
+ ============== =================================================================================
+
+Examples:
+
+.. code-block:: nasm
+
+ src1:m // src1 operand may be used with operand modifiers
+ vdata:dst // vdata operand may be used as both source and destination
+ vdst:u32 // vdst operand has u32 type
+
+.. _amdgpu_syn_instruction_modifiers_notation:
+
+Modifiers
+=========
+
+An instruction may have zero or more optional *modifiers*. They are space-separated in the description:
+
+ ``<``\ :ref:`description of modifier 0<amdgpu_syn_instruction_modifier_notation>`\ ``> <``\ :ref:`description of modifier 1<amdgpu_syn_instruction_modifier_notation>`\ ``> ...``
+
+The order of *modifiers* is fixed.
+
+.. _amdgpu_syn_instruction_modifier_notation:
+
+Notation
+~~~~~~~~
+
+A *modifier* is described using the following notation:
+
+ *<name>*
+
+Where *name* is a link to a description of the *modifier*.
OpenPOWER on IntegriCloud