1// RUN: llvm-mc -arch=amdgcn -show-encoding %s | FileCheck %s
2// RUN: llvm-mc -arch=amdgcn -show-encoding %s | FileCheck %s
3
4//===----------------------------------------------------------------------===//
5// VOPC Instructions
6//===----------------------------------------------------------------------===//
7
8//
9// Modifier tests:
10//
11
12v_cmp_lt_f32 s[2:3] -v4, v6
13// CHECK: v_cmp_lt_f32_e64 s[2:3], -v4, v6 ; encoding: [0x02,0x00,0x02,0xd0,0x04,0x0d,0x02,0x20]
14
15v_cmp_lt_f32 s[2:3]  v4, -v6
16// CHECK: v_cmp_lt_f32_e64 s[2:3], v4, -v6 ; encoding: [0x02,0x00,0x02,0xd0,0x04,0x0d,0x02,0x40]
17
18v_cmp_lt_f32 s[2:3] -v4, -v6
19// CHECK: v_cmp_lt_f32_e64 s[2:3], -v4, -v6 ; encoding: [0x02,0x00,0x02,0xd0,0x04,0x0d,0x02,0x60]
20
21v_cmp_lt_f32 s[2:3] |v4|, v6
22// CHECK: v_cmp_lt_f32_e64 s[2:3], |v4|, v6 ; encoding: [0x02,0x01,0x02,0xd0,0x04,0x0d,0x02,0x00]
23
24v_cmp_lt_f32 s[2:3] v4, |v6|
25// CHECK: v_cmp_lt_f32_e64 s[2:3], v4, |v6| ; encoding: [0x02,0x02,0x02,0xd0,0x04,0x0d,0x02,0x00]
26
27v_cmp_lt_f32 s[2:3] |v4|, |v6|
28// CHECK: v_cmp_lt_f32_e64 s[2:3], |v4|, |v6| ; encoding: [0x02,0x03,0x02,0xd0,0x04,0x0d,0x02,0x00]
29
30v_cmp_lt_f32 s[2:3] -|v4|, v6
31// CHECK: v_cmp_lt_f32_e64 s[2:3], -|v4|, v6 ; encoding: [0x02,0x01,0x02,0xd0,0x04,0x0d,0x02,0x20]
32
33v_cmp_lt_f32 s[2:3] v4, -|v6|
34// CHECK: v_cmp_lt_f32_e64 s[2:3], v4, -|v6| ; encoding: [0x02,0x02,0x02,0xd0,0x04,0x0d,0x02,0x40]
35
36v_cmp_lt_f32 s[2:3] -|v4|, -|v6|
37// CHECK: v_cmp_lt_f32_e64 s[2:3], -|v4|, -|v6| ; encoding: [0x02,0x03,0x02,0xd0,0x04,0x0d,0x02,0x60]
38
39//
40// Instruction tests:
41//
42
43v_cmp_f_f32 s[2:3], v4, v6
44// CHECK: v_cmp_f_f32_e64 s[2:3], v4, v6 ; encoding: [0x02,0x00,0x00,0xd0,0x04,0x0d,0x02,0x00]
45
46v_cmp_lt_f32 s[2:3], v4, v6
47// CHECK: v_cmp_lt_f32_e64 s[2:3], v4, v6 ; encoding: [0x02,0x00,0x02,0xd0,0x04,0x0d,0x02,0x00]
48
49v_cmp_eq_f32 s[2:3], v4, v6
50// CHECK: v_cmp_eq_f32_e64 s[2:3], v4, v6 ; encoding: [0x02,0x00,0x04,0xd0,0x04,0x0d,0x02,0x00]
51
52v_cmp_le_f32 s[2:3], v4, v6
53// CHECK: v_cmp_le_f32_e64 s[2:3], v4, v6 ; encoding: [0x02,0x00,0x06,0xd0,0x04,0x0d,0x02,0x00]
54
55v_cmp_gt_f32 s[2:3], v4, v6
56// CHECK: v_cmp_gt_f32_e64 s[2:3], v4, v6 ; encoding: [0x02,0x00,0x08,0xd0,0x04,0x0d,0x02,0x00]
57
58v_cmp_lg_f32 s[2:3], v4, v6
59// CHECK: v_cmp_lg_f32_e64 s[2:3], v4, v6 ; encoding: [0x02,0x00,0x0a,0xd0,0x04,0x0d,0x02,0x00]
60
61v_cmp_ge_f32 s[2:3], v4, v6
62// CHECK: v_cmp_ge_f32_e64 s[2:3], v4, v6 ; encoding: [0x02,0x00,0x0c,0xd0,0x04,0x0d,0x02,0x00]
63
64// TODO: Finish VOPC
65
66//===----------------------------------------------------------------------===//
67// VOP1 Instructions
68//===----------------------------------------------------------------------===//
69
70//
71// Modifier tests:
72//
73
74v_fract_f32 v1, -v2
75// CHECK: v_fract_f32_e64 v1, -v2 ; encoding: [0x01,0x00,0x40,0xd3,0x02,0x01,0x00,0x20]
76
77v_fract_f32 v1, |v2|
78// CHECK: v_fract_f32_e64 v1, |v2| ; encoding: [0x01,0x01,0x40,0xd3,0x02,0x01,0x00,0x00]
79
80v_fract_f32 v1, -|v2|
81// CHECK: v_fract_f32_e64 v1, -|v2| ; encoding: [0x01,0x01,0x40,0xd3,0x02,0x01,0x00,0x20]
82
83v_fract_f32 v1, v2 clamp
84// CHECK: v_fract_f32_e64 v1, v2 clamp ; encoding: [0x01,0x08,0x40,0xd3,0x02,0x01,0x00,0x00]
85
86v_fract_f32 v1, v2 mul:2
87// CHECK: v_fract_f32_e64 v1, v2 mul:2 ; encoding: [0x01,0x00,0x40,0xd3,0x02,0x01,0x00,0x08]
88
89v_fract_f32 v1, v2, div:2 clamp
90// CHECK: v_fract_f32_e64 v1, v2 clamp div:2 ; encoding: [0x01,0x08,0x40,0xd3,0x02,0x01,0x00,0x18]
91
92// TODO: Finish VOP1
93
94///===---------------------------------------------------------------------===//
95// VOP2 Instructions
96///===---------------------------------------------------------------------===//
97
98// TODO: Modifier tests
99
100v_cndmask_b32 v1, v3, v5, s[4:5]
101// CHECK: v_cndmask_b32_e64 v1, v3, v5, s[4:5] ; encoding: [0x01,0x00,0x00,0xd2,0x03,0x0b,0x12,0x00]
102
103//TODO: readlane, writelane
104
105v_add_f32 v1, v3, s5
106// CHECK: v_add_f32_e64 v1, v3, s5 ; encoding: [0x01,0x00,0x06,0xd2,0x03,0x0b,0x00,0x00]
107
108v_sub_f32 v1, v3, s5
109// CHECK: v_sub_f32_e64 v1, v3, s5 ; encoding: [0x01,0x00,0x08,0xd2,0x03,0x0b,0x00,0x00]
110
111v_subrev_f32 v1, v3, s5
112// CHECK: v_subrev_f32_e64 v1, v3, s5 ; encoding: [0x01,0x00,0x0a,0xd2,0x03,0x0b,0x00,0x00]
113
114v_mac_legacy_f32 v1, v3, s5
115// CHECK: v_mac_legacy_f32_e64 v1, v3, s5 ; encoding: [0x01,0x00,0x0c,0xd2,0x03,0x0b,0x00,0x00]
116
117v_mul_legacy_f32 v1, v3, s5
118// CHECK: v_mul_legacy_f32_e64 v1, v3, s5 ; encoding: [0x01,0x00,0x0e,0xd2,0x03,0x0b,0x00,0x00]
119
120v_mul_f32 v1, v3, s5
121// CHECK: v_mul_f32_e64 v1, v3, s5 ; encoding: [0x01,0x00,0x10,0xd2,0x03,0x0b,0x00,0x00]
122
123v_mul_i32_i24 v1, v3, s5
124// CHECK: v_mul_i32_i24_e64 v1, v3, s5 ; encoding: [0x01,0x00,0x12,0xd2,0x03,0x0b,0x00,0x00]
125
126///===---------------------------------------------------------------------===//
127// VOP3 Instructions
128///===---------------------------------------------------------------------===//
129
130// TODO: Modifier tests
131
132v_mad_legacy_f32 v2, v4, v6, v8
133// CHECK: v_mad_legacy_f32 v2, v4, v6, v8 ; encoding: [0x02,0x00,0x80,0xd2,0x04,0x0d,0x22,0x04]
134
135
136
137
138
139