xref: /llvm-project/llvm/test/MC/AMDGPU/gfx12_asm_vop3p_features.s (revision a888f5e4d7d979617a47262a875f5433ee161074)
1// RUN: llvm-mc -triple=amdgcn -show-encoding -mcpu=gfx1200 %s | FileCheck --check-prefix=GFX12 %s
2
3//
4// Test op_sel/op_sel_hi
5//
6
7v_pk_add_u16 v1, v2, v3
8// GFX12: encoding: [0x01,0x40,0x0a,0xcc,0x02,0x07,0x02,0x18]
9
10v_pk_add_u16 v1, v2, v3 op_sel:[0,0]
11// GFX12: v_pk_add_u16 v1, v2, v3 ; encoding: [0x01,0x40,0x0a,0xcc,0x02,0x07,0x02,0x18]
12
13v_pk_add_u16 v1, v2, v3 op_sel_hi:[1,1]
14// GFX12: v_pk_add_u16 v1, v2, v3 ; encoding: [0x01,0x40,0x0a,0xcc,0x02,0x07,0x02,0x18]
15
16v_pk_add_u16 v1, v2, v3 op_sel:[0,0] op_sel_hi:[1,1]
17// GFX12: v_pk_add_u16 v1, v2, v3 ; encoding: [0x01,0x40,0x0a,0xcc,0x02,0x07,0x02,0x18]
18
19v_pk_add_u16 v1, v2, v3 op_sel_hi:[0,0]
20// GFX12: v_pk_add_u16 v1, v2, v3 op_sel_hi:[0,0] ; encoding: [0x01,0x40,0x0a,0xcc,0x02,0x07,0x02,0x00]
21
22v_pk_add_u16 v1, v2, v3 op_sel:[0,0] op_sel_hi:[0,0]
23// GFX12: v_pk_add_u16 v1, v2, v3 op_sel_hi:[0,0] ; encoding: [0x01,0x40,0x0a,0xcc,0x02,0x07,0x02,0x00]
24
25v_pk_add_u16 v1, v2, v3 op_sel:[1,0]
26// GFX12: v_pk_add_u16 v1, v2, v3 op_sel:[1,0] ; encoding: [0x01,0x48,0x0a,0xcc,0x02,0x07,0x02,0x18]
27
28v_pk_add_u16 v1, v2, v3 op_sel:[0,1]
29// GFX12: v_pk_add_u16 v1, v2, v3 op_sel:[0,1] ; encoding: [0x01,0x50,0x0a,0xcc,0x02,0x07,0x02,0x18]
30
31v_pk_add_u16 v1, v2, v3 op_sel:[1,1]
32// GFX12: v_pk_add_u16 v1, v2, v3 op_sel:[1,1] ; encoding: [0x01,0x58,0x0a,0xcc,0x02,0x07,0x02,0x18]
33
34v_pk_add_u16 v1, v2, v3 op_sel_hi:[0,1]
35// GFX12: v_pk_add_u16 v1, v2, v3 op_sel_hi:[0,1] ; encoding: [0x01,0x40,0x0a,0xcc,0x02,0x07,0x02,0x10]
36
37v_pk_add_u16 v1, v2, v3 op_sel_hi:[1,0]
38// GFX12: v_pk_add_u16 v1, v2, v3 op_sel_hi:[1,0] ; encoding: [0x01,0x40,0x0a,0xcc,0x02,0x07,0x02,0x08]
39
40v_pk_add_u16 v1, v2, v3 op_sel:[1,1] op_sel_hi:[1,1]
41// GFX12: v_pk_add_u16 v1, v2, v3 op_sel:[1,1] ; encoding: [0x01,0x58,0x0a,0xcc,0x02,0x07,0x02,0x18]
42
43v_pk_add_u16 v1, v2, v3 op_sel:[1,0] op_sel_hi:[1,0]
44// GFX12: v_pk_add_u16 v1, v2, v3 op_sel:[1,0] op_sel_hi:[1,0] ; encoding: [0x01,0x48,0x0a,0xcc,0x02,0x07,0x02,0x08]
45
46v_pk_add_u16 v1, v2, v3 op_sel:[0,1] op_sel_hi:[0,1]
47// GFX12: v_pk_add_u16 v1, v2, v3 op_sel:[0,1] op_sel_hi:[0,1] ; encoding: [0x01,0x50,0x0a,0xcc,0x02,0x07,0x02,0x10]
48
49v_pk_add_u16 v1, v2, v3 op_sel:[1,0] op_sel_hi:[0,1]
50// GFX12: v_pk_add_u16 v1, v2, v3 op_sel:[1,0] op_sel_hi:[0,1] ; encoding: [0x01,0x48,0x0a,0xcc,0x02,0x07,0x02,0x10]
51
52v_pk_add_u16 v1, v2, v3 op_sel:[0,1] op_sel_hi:[1,0]
53// GFX12: v_pk_add_u16 v1, v2, v3 op_sel:[0,1] op_sel_hi:[1,0] ; encoding: [0x01,0x50,0x0a,0xcc,0x02,0x07,0x02,0x08]
54
55//
56// Test src2 op_sel/op_sel_hi
57//
58
59v_pk_fma_f16 v8, v0, s0, v1
60// GFX12: encoding: [0x08,0x40,0x0e,0xcc,0x00,0x01,0x04,0x1c]
61
62v_pk_fma_f16 v8, v0, s0, v1 neg_lo:[0,0,0] neg_hi:[0,0,0]
63// GFX12: v_pk_fma_f16 v8, v0, s0, v1 ; encoding: [0x08,0x40,0x0e,0xcc,0x00,0x01,0x04,0x1c]
64
65v_pk_fma_f16 v8, v0, s0, v1 op_sel:[0,0,0] op_sel_hi:[1,1,1] neg_lo:[0,0,0] neg_hi:[0,0,0]
66// GFX12: v_pk_fma_f16 v8, v0, s0, v1 ; encoding: [0x08,0x40,0x0e,0xcc,0x00,0x01,0x04,0x1c]
67
68v_pk_fma_f16 v8, v0, s0, v1 op_sel:[0,0,0] op_sel_hi:[1,1,1]
69// GFX12: v_pk_fma_f16 v8, v0, s0, v1 ; encoding: [0x08,0x40,0x0e,0xcc,0x00,0x01,0x04,0x1c]
70
71v_pk_fma_f16 v8, v0, s0, v1 op_sel:[0,0,0] op_sel_hi:[0,0,0]
72// GFX12: v_pk_fma_f16 v8, v0, s0, v1 op_sel_hi:[0,0,0] ; encoding: [0x08,0x00,0x0e,0xcc,0x00,0x01,0x04,0x04]
73
74v_pk_fma_f16 v8, v0, s0, v1 op_sel:[0,0,1] op_sel_hi:[0,0,1]
75// GFX12: v_pk_fma_f16 v8, v0, s0, v1 op_sel:[0,0,1] op_sel_hi:[0,0,1] ; encoding: [0x08,0x60,0x0e,0xcc,0x00,0x01,0x04,0x04]
76
77//
78// Test neg_lo/neg_hi
79//
80
81v_pk_fma_f16 v8, v0, s0, v1 neg_lo:[1,1,1]
82// GFX12: v_pk_fma_f16 v8, v0, s0, v1 neg_lo:[1,1,1] ; encoding: [0x08,0x40,0x0e,0xcc,0x00,0x01,0x04,0xfc]
83
84v_pk_fma_f16 v8, v0, s0, v1 neg_hi:[1,1,1]
85// GFX12: v_pk_fma_f16 v8, v0, s0, v1 neg_hi:[1,1,1] ; encoding: [0x08,0x47,0x0e,0xcc,0x00,0x01,0x04,0x1c]
86
87v_pk_fma_f16 v8, v0, s0, v1 neg_lo:[1,1,1] neg_hi:[1,1,1]
88// GFX12: v_pk_fma_f16 v8, v0, s0, v1 neg_lo:[1,1,1] neg_hi:[1,1,1] ; encoding: [0x08,0x47,0x0e,0xcc,0x00,0x01,0x04,0xfc]
89
90v_pk_fma_f16 v8, v0, s0, v1 neg_lo:[1,0,0]
91// GFX12: v_pk_fma_f16 v8, v0, s0, v1 neg_lo:[1,0,0] ; encoding: [0x08,0x40,0x0e,0xcc,0x00,0x01,0x04,0x3c]
92
93v_pk_fma_f16 v8, v0, s0, v1 neg_lo:[0,1,0]
94// GFX12: v_pk_fma_f16 v8, v0, s0, v1 neg_lo:[0,1,0] ; encoding: [0x08,0x40,0x0e,0xcc,0x00,0x01,0x04,0x5c]
95
96v_pk_fma_f16 v8, v0, s0, v1 neg_lo:[0,0,1]
97// GFX12: v_pk_fma_f16 v8, v0, s0, v1 neg_lo:[0,0,1] ; encoding: [0x08,0x40,0x0e,0xcc,0x00,0x01,0x04,0x9c]
98
99v_pk_fma_f16 v8, v0, s0, v1 neg_hi:[1,0,0]
100// GFX12: v_pk_fma_f16 v8, v0, s0, v1 neg_hi:[1,0,0] ; encoding: [0x08,0x41,0x0e,0xcc,0x00,0x01,0x04,0x1c]
101
102v_pk_fma_f16 v8, v0, s0, v1 neg_hi:[0,1,0]
103// GFX12: v_pk_fma_f16 v8, v0, s0, v1 neg_hi:[0,1,0] ; encoding: [0x08,0x42,0x0e,0xcc,0x00,0x01,0x04,0x1c]
104
105v_pk_fma_f16 v8, v0, s0, v1 neg_hi:[0,0,1]
106// GFX12: v_pk_fma_f16 v8, v0, s0, v1 neg_hi:[0,0,1] ; encoding: [0x08,0x44,0x0e,0xcc,0x00,0x01,0x04,0x1c]
107
108//
109// DOT
110//
111
112v_dot4_i32_iu8 v3, v4, v5, v6
113// GFX12: v_dot4_i32_iu8 v3, v4, v5, v6                ; encoding: [0x03,0x40,0x16,0xcc,0x04,0x0b,0x1a,0x1c]
114
115v_dot4_i32_iu8 v3, v4, v5, 0xf neg_lo:[1,1]
116// GFX12: v_dot4_i32_iu8 v3, v4, v5, 15 neg_lo:[1,1,0] ; encoding: [0x03,0x40,0x16,0xcc,0x04,0x0b,0x3e,0x7a]
117
118v_dot4_u32_u8 v3, v4, v5, v6
119// GFX12: v_dot4_u32_u8 v3, v4, v5, v6            ; encoding: [0x03,0x40,0x17,0xcc,0x04,0x0b,0x1a,0x1c]
120
121v_dot4_i32_iu8 v3, v4, v5, 0xf
122// GFX12: v_dot4_i32_iu8 v3, v4, v5, 15                ; encoding: [0x03,0x40,0x16,0xcc,0x04,0x0b,0x3e,0x1a]
123
124v_dot8_i32_iu4 v3, v4, v5, 0xf neg_lo:[1,0]
125// GFX12: v_dot8_i32_iu4 v3, v4, v5, 15 neg_lo:[1,0,0] ; encoding: [0x03,0x40,0x18,0xcc,0x04,0x0b,0x3e,0x3a]
126
127v_dot8_i32_iu4 v3, v4, v5, v0 neg_lo:[0,0]
128// GFX12: v_dot8_i32_iu4 v3, v4, v5, v0                ; encoding: [0x03,0x40,0x18,0xcc,0x04,0x0b,0x02,0x1c]
129
130v_dot8_u32_u4 v0, v1, v2, v3
131// GFX12: v_dot8_u32_u4 v0, v1, v2, v3            ; encoding: [0x00,0x40,0x19,0xcc,0x01,0x05,0x0e,0x1c]
132
133v_dot2_f32_f16 v0, v1, v2, v3
134// GFX12: v_dot2_f32_f16 v0, v1, v2, v3                ; encoding: [0x00,0x40,0x13,0xcc,0x01,0x05,0x0e,0x1c]
135
136v_dot2_f32_f16 v0, v1, v2, v3 neg_lo:[1,1,0] neg_hi:[1,0,1]
137// GFX12: v_dot2_f32_f16 v0, v1, v2, v3 neg_lo:[1,1,0] neg_hi:[1,0,1] ; encoding: [0x00,0x45,0x13,0xcc,0x01,0x05,0x0e,0x7c]
138
139v_dot2_f32_bf16 v0, v1, v2, v3
140// GFX12: v_dot2_f32_bf16 v0, v1, v2, v3          ; encoding: [0x00,0x40,0x1a,0xcc,0x01,0x05,0x0e,0x1c]
141
142v_dot2_f32_bf16 v0, v1, v2, v3 neg_lo:[1,1,0] neg_hi:[1,0,1]
143// GFX12: v_dot2_f32_bf16 v0, v1, v2, v3 neg_lo:[1,1,0] neg_hi:[1,0,1] ; encoding: [0x00,0x45,0x1a,0xcc,0x01,0x05,0x0e,0x7c]
144