annotate llvm/docs/AMDGPUInstructionNotation.rst @ 164:fdfabb438fbf

...
author anatofuz
date Thu, 19 Mar 2020 17:02:53 +0900
parents 1d019706d866
children 2e18cbf3894f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
150
anatofuz
parents:
diff changeset
1 ============================
anatofuz
parents:
diff changeset
2 AMDGPU Instructions Notation
anatofuz
parents:
diff changeset
3 ============================
anatofuz
parents:
diff changeset
4
anatofuz
parents:
diff changeset
5 .. contents::
anatofuz
parents:
diff changeset
6 :local:
anatofuz
parents:
diff changeset
7
anatofuz
parents:
diff changeset
8 .. _amdgpu_syn_instruction_notation:
anatofuz
parents:
diff changeset
9
anatofuz
parents:
diff changeset
10 Introduction
anatofuz
parents:
diff changeset
11 ============
anatofuz
parents:
diff changeset
12
anatofuz
parents:
diff changeset
13 This is an overview of notation used to describe the syntax of AMDGPU assembler instructions.
anatofuz
parents:
diff changeset
14
anatofuz
parents:
diff changeset
15 This notation mimics the :ref:`syntax of assembler instructions<amdgpu_syn_instructions>`
anatofuz
parents:
diff changeset
16 except that instead of real operands and modifiers it provides references to their description.
anatofuz
parents:
diff changeset
17
anatofuz
parents:
diff changeset
18 Instructions
anatofuz
parents:
diff changeset
19 ============
anatofuz
parents:
diff changeset
20
anatofuz
parents:
diff changeset
21 Notation
anatofuz
parents:
diff changeset
22 ~~~~~~~~
anatofuz
parents:
diff changeset
23
anatofuz
parents:
diff changeset
24 This is the notation used to describe AMDGPU instructions:
anatofuz
parents:
diff changeset
25
anatofuz
parents:
diff changeset
26 ``<``\ :ref:`opcode description<amdgpu_syn_opcode_notation>`\ ``> <``\ :ref:`operands description<amdgpu_syn_instruction_operands_notation>`\ ``> <``\ :ref:`modifiers description<amdgpu_syn_instruction_modifiers_notation>`\ ``>``
anatofuz
parents:
diff changeset
27
anatofuz
parents:
diff changeset
28 .. _amdgpu_syn_opcode_notation:
anatofuz
parents:
diff changeset
29
anatofuz
parents:
diff changeset
30 Opcode
anatofuz
parents:
diff changeset
31 ======
anatofuz
parents:
diff changeset
32
anatofuz
parents:
diff changeset
33 Notation
anatofuz
parents:
diff changeset
34 ~~~~~~~~
anatofuz
parents:
diff changeset
35
anatofuz
parents:
diff changeset
36 TBD
anatofuz
parents:
diff changeset
37
anatofuz
parents:
diff changeset
38 .. _amdgpu_syn_instruction_operands_notation:
anatofuz
parents:
diff changeset
39
anatofuz
parents:
diff changeset
40 Operands
anatofuz
parents:
diff changeset
41 ========
anatofuz
parents:
diff changeset
42
anatofuz
parents:
diff changeset
43 An instruction may have zero or more *operands*. They are comma-separated in the description:
anatofuz
parents:
diff changeset
44
anatofuz
parents:
diff changeset
45 ``<``\ :ref:`description of operand 0<amdgpu_syn_instruction_operand_notation>`\ ``>, <``\ :ref:`description of operand 1<amdgpu_syn_instruction_operand_notation>`\ ``>, ...``
anatofuz
parents:
diff changeset
46
anatofuz
parents:
diff changeset
47 The order of *operands* is fixed. *Operands* cannot be omitted
anatofuz
parents:
diff changeset
48 except for special cases described below.
anatofuz
parents:
diff changeset
49
anatofuz
parents:
diff changeset
50 .. _amdgpu_syn_instruction_operand_notation:
anatofuz
parents:
diff changeset
51
anatofuz
parents:
diff changeset
52 Notation
anatofuz
parents:
diff changeset
53 ~~~~~~~~
anatofuz
parents:
diff changeset
54
anatofuz
parents:
diff changeset
55 An operand is described using the following notation:
anatofuz
parents:
diff changeset
56
anatofuz
parents:
diff changeset
57 *<name><tag0><tag1>...*
anatofuz
parents:
diff changeset
58
anatofuz
parents:
diff changeset
59 Where:
anatofuz
parents:
diff changeset
60
anatofuz
parents:
diff changeset
61 * *name* is a link to a description of the operand.
anatofuz
parents:
diff changeset
62 * *tags* are optional. They are used to indicate special operand properties:
anatofuz
parents:
diff changeset
63
anatofuz
parents:
diff changeset
64 .. _amdgpu_syn_instruction_operand_tags:
anatofuz
parents:
diff changeset
65
anatofuz
parents:
diff changeset
66 ============== =================================================================================
anatofuz
parents:
diff changeset
67 Operand tag Meaning
anatofuz
parents:
diff changeset
68 ============== =================================================================================
anatofuz
parents:
diff changeset
69 :opt An optional operand.
anatofuz
parents:
diff changeset
70 :m An operand which may be used with
anatofuz
parents:
diff changeset
71 :ref:`VOP3 operand modifiers<amdgpu_synid_vop3_operand_modifiers>` or
anatofuz
parents:
diff changeset
72 :ref:`SDWA operand modifiers<amdgpu_synid_sdwa_operand_modifiers>`.
anatofuz
parents:
diff changeset
73 :dst An input operand which may also serve as a destination
anatofuz
parents:
diff changeset
74 if :ref:`glc<amdgpu_synid_glc>` modifier is specified.
anatofuz
parents:
diff changeset
75 :fx This is an *f32* or *f16* operand depending on
anatofuz
parents:
diff changeset
76 :ref:`m_op_sel_hi<amdgpu_synid_mad_mix_op_sel_hi>` modifier.
anatofuz
parents:
diff changeset
77 :<type> Operand *type* differs from *type*
anatofuz
parents:
diff changeset
78 :ref:`implied by the opcode name<amdgpu_syn_instruction_type>`.
anatofuz
parents:
diff changeset
79 This tag specifies actual operand *type*.
anatofuz
parents:
diff changeset
80 ============== =================================================================================
anatofuz
parents:
diff changeset
81
anatofuz
parents:
diff changeset
82 Examples:
anatofuz
parents:
diff changeset
83
anatofuz
parents:
diff changeset
84 .. parsed-literal::
anatofuz
parents:
diff changeset
85
anatofuz
parents:
diff changeset
86 src1:m // src1 operand may be used with operand modifiers
anatofuz
parents:
diff changeset
87 vdata:dst // vdata operand may be used as both source and destination
anatofuz
parents:
diff changeset
88 vdst:u32 // vdst operand has u32 type
anatofuz
parents:
diff changeset
89
anatofuz
parents:
diff changeset
90 .. _amdgpu_syn_instruction_modifiers_notation:
anatofuz
parents:
diff changeset
91
anatofuz
parents:
diff changeset
92 Modifiers
anatofuz
parents:
diff changeset
93 =========
anatofuz
parents:
diff changeset
94
anatofuz
parents:
diff changeset
95 An instruction may have zero or more optional *modifiers*. They are space-separated in the description:
anatofuz
parents:
diff changeset
96
anatofuz
parents:
diff changeset
97 ``<``\ :ref:`description of modifier 0<amdgpu_syn_instruction_modifier_notation>`\ ``> <``\ :ref:`description of modifier 1<amdgpu_syn_instruction_modifier_notation>`\ ``> ...``
anatofuz
parents:
diff changeset
98
anatofuz
parents:
diff changeset
99 The order of *modifiers* is fixed.
anatofuz
parents:
diff changeset
100
anatofuz
parents:
diff changeset
101 .. _amdgpu_syn_instruction_modifier_notation:
anatofuz
parents:
diff changeset
102
anatofuz
parents:
diff changeset
103 Notation
anatofuz
parents:
diff changeset
104 ~~~~~~~~
anatofuz
parents:
diff changeset
105
anatofuz
parents:
diff changeset
106 A *modifier* is described using the following notation:
anatofuz
parents:
diff changeset
107
anatofuz
parents:
diff changeset
108 *<name>*
anatofuz
parents:
diff changeset
109
anatofuz
parents:
diff changeset
110 Where *name* is a link to a description of the *modifier*.