xref: /llvm-project/llvm/test/MC/X86/index-operations.s (revision 8a71284cb9463a90fab0d9e8edbeb5d879531e32)
1// RUN: not llvm-mc -triple x86_64-unknown-unknown --show-encoding %s 2> %t.err | FileCheck --check-prefix=X86-64 %s
2// RUN: FileCheck --input-file=%t.err %s --check-prefix=ERR64 --implicit-check-not=error:
3// RUN: not llvm-mc -triple i386-unknown-unknown --show-encoding %s 2> %t.err | FileCheck --check-prefix=X86-32 %s
4// RUN: FileCheck --check-prefix=ERR32 < %t.err %s
5// RUN: not llvm-mc -triple i386-unknown-unknown-code16 --show-encoding %s 2> %t.err | FileCheck --check-prefix=X86-16 %s
6// RUN: FileCheck --check-prefix=ERR16 < %t.err %s
7
8lodsb
9// X86-64: lodsb (%rsi), %al # encoding: [0xac]
10// X86-32: lodsb (%esi), %al # encoding: [0xac]
11// X86-16: lodsb (%si), %al # encoding: [0xac]
12
13lodsb (%rsi), %al
14// X86-64: lodsb (%rsi), %al # encoding: [0xac]
15// ERR32: 64-bit
16// ERR16: 64-bit
17
18lodsb (%esi), %al
19// X86-64: lodsb (%esi), %al # encoding: [0x67,0xac]
20// X86-32: lodsb (%esi), %al # encoding: [0xac]
21// X86-16: lodsb (%esi), %al # encoding: [0x67,0xac]
22
23lodsb (%si), %al
24// ERR64: [[#@LINE-1]]:[[#]]: error: invalid 16-bit base register
25// X86-32: lodsb (%si), %al # encoding: [0x67,0xac]
26// X86-16: lodsb (%si), %al # encoding: [0xac]
27
28lodsl %gs:(%esi)
29// X86-64: lodsl %gs:(%esi), %eax # encoding: [0x67,0x65,0xad]
30// X86-32: lodsl %gs:(%esi), %eax # encoding: [0x65,0xad]
31// X86-16: lodsl %gs:(%esi), %eax # encoding: [0x67,0x65,0x66,0xad]
32
33lodsl (%edi), %eax
34// ERR64: [[#@LINE-1]]:[[#]]: error: invalid operand
35// ERR32: invalid operand
36// ERR16: invalid operand
37
38lodsl 44(%edi), %eax
39// ERR64: [[#@LINE-1]]:[[#]]: error: invalid operand
40// ERR32: invalid operand
41// ERR16: invalid operand
42
43lods (%esi), %ax
44// X86-64: lodsw (%esi), %ax # encoding: [0x67,0x66,0xad]
45// X86-32: lodsw (%esi), %ax # encoding: [0x66,0xad]
46// X86-16: lodsw (%esi), %ax # encoding: [0x67,0xad]
47
48stosw
49// X86-64: stosw %ax, %es:(%rdi) # encoding: [0x66,0xab]
50// X86-32: stosw %ax, %es:(%edi) # encoding: [0x66,0xab]
51// X86-16: stosw %ax, %es:(%di) # encoding: [0xab]
52
53stos %eax, (%edi)
54// X86-64: stosl %eax, %es:(%edi) # encoding: [0x67,0xab]
55// X86-32: stosl %eax, %es:(%edi) # encoding: [0xab]
56// X86-16: stosl %eax, %es:(%edi) # encoding: [0x67,0x66,0xab]
57
58stosb %al, %fs:(%edi)
59// ERR64: [[#@LINE-1]]:[[#]]: error: invalid operand for instruction
60// ERR32: invalid operand for instruction
61// ERR16: invalid operand for instruction
62
63stosb %al, %es:(%edi)
64// X86-64: stosb %al, %es:(%edi) # encoding: [0x67,0xaa]
65// X86-32: stosb %al, %es:(%edi) # encoding: [0xaa]
66// X86-16: stosb %al, %es:(%edi) # encoding: [0x67,0xaa]
67
68stosq
69// X86-64: stosq %rax, %es:(%rdi) # encoding: [0x48,0xab]
70// ERR32: 64-bit
71// ERR16: 64-bit
72
73stos %rax, (%edi)
74// X86-64: 	stosq %rax, %es:(%edi) # encoding: [0x67,0x48,0xab]
75// ERR32: only available in 64-bit mode
76// ERR16: only available in 64-bit mode
77
78scas %es:(%edi), %al
79// X86-64: scasb %es:(%edi), %al # encoding: [0x67,0xae]
80// X86-32: scasb %es:(%edi), %al # encoding: [0xae]
81// X86-16: scasb %es:(%edi), %al # encoding: [0x67,0xae]
82
83scasq %es:(%edi)
84// X86-64: scasq %es:(%edi), %rax # encoding: [0x67,0x48,0xaf]
85// ERR32: 64-bit
86// ERR16: 64-bit
87
88scasl %es:(%edi), %al
89// ERR64: [[#@LINE-1]]:[[#]]: error: invalid operand
90// ERR32: invalid operand
91// ERR16: invalid operand
92
93scas %es:(%di), %ax
94// ERR64: [[#@LINE-1]]:[[#]]: error: invalid 16-bit base register
95// X86-16: scasw %es:(%di), %ax # encoding: [0xaf]
96// X86-32: scasw %es:(%di), %ax # encoding: [0x67,0x66,0xaf]
97
98cmpsb
99// X86-64: cmpsb %es:(%rdi), (%rsi) # encoding: [0xa6]
100// X86-32: cmpsb %es:(%edi), (%esi) # encoding: [0xa6]
101// X86-16: cmpsb %es:(%di), (%si) # encoding: [0xa6]
102
103cmpsw (%edi), (%esi)
104// X86-64: cmpsw %es:(%edi), (%esi) # encoding: [0x67,0x66,0xa7]
105// X86-32: cmpsw %es:(%edi), (%esi) # encoding: [0x66,0xa7]
106// X86-16: cmpsw %es:(%edi), (%esi) # encoding: [0x67,0xa7]
107
108cmpsb (%di), (%esi)
109// ERR64: [[#@LINE-1]]:[[#]]: error: invalid 16-bit base register
110// ERR32: mismatching source and destination
111// ERR16: mismatching source and destination
112
113cmpsl %es:(%edi), %ss:(%esi)
114// X86-64: cmpsl %es:(%edi), %ss:(%esi) # encoding: [0x67,0x36,0xa7]
115// X86-32: cmpsl %es:(%edi), %ss:(%esi) # encoding: [0x36,0xa7]
116// X86-16: cmpsl %es:(%edi), %ss:(%esi) # encoding: [0x67,0x36,0x66,0xa7]
117
118cmpsq (%rdi), (%rsi)
119// X86-64: cmpsq %es:(%rdi), (%rsi) # encoding: [0x48,0xa7]
120// ERR32: 64-bit
121// ERR16: 64-bit
122
123movsb (%esi), (%edi)
124// X86-64: movsb (%esi), %es:(%edi) # encoding: [0x67,0xa4]
125// X86-32: movsb (%esi), %es:(%edi) # encoding: [0xa4]
126// X86-16: movsb (%esi), %es:(%edi) # encoding: [0x67,0xa4]
127
128movsl %gs:(%esi), (%edi)
129// X86-64: movsl %gs:(%esi), %es:(%edi) # encoding: [0x67,0x65,0xa5]
130// X86-32: movsl %gs:(%esi), %es:(%edi) # encoding: [0x65,0xa5]
131// X86-16: movsl %gs:(%esi), %es:(%edi) # encoding: [0x67,0x65,0x66,0xa5]
132
133outsb
134// X86-64: outsb (%rsi), %dx # encoding: [0x6e]
135// X86-32: outsb (%esi), %dx # encoding: [0x6e]
136// X86-16: outsb (%si), %dx # encoding: [0x6e]
137
138outsw %fs:(%esi), %dx
139// X86-64: outsw %fs:(%esi), %dx # encoding: [0x67,0x64,0x66,0x6f]
140// X86-32: outsw %fs:(%esi), %dx # encoding: [0x64,0x66,0x6f]
141// X86-16: outsw %fs:(%esi), %dx # encoding: [0x67,0x64,0x6f]
142
143insw %dx, (%edi)
144// X86-64: insw %dx, %es:(%edi) # encoding: [0x67,0x66,0x6d]
145// X86-32: insw %dx, %es:(%edi) # encoding: [0x66,0x6d]
146// X86-16: insw %dx, %es:(%edi) # encoding: [0x67,0x6d]
147
148insw %dx, (%bx)
149// ERR64: [[#@LINE-1]]:[[#]]: error: invalid 16-bit base register
150// X86-32: insw %dx, %es:(%di) # encoding: [0x67,0x66,0x6d]
151// X86-16: insw %dx, %es:(%di) # encoding: [0x6d]
152
153insw %dx, (%ebx)
154// X86-64: insw %dx, %es:(%edi) # encoding: [0x67,0x66,0x6d]
155// X86-32: insw %dx, %es:(%edi) # encoding: [0x66,0x6d]
156// X86-16: insw %dx, %es:(%edi) # encoding: [0x67,0x6d]
157
158insw %dx, (%rbx)
159// X86-64: insw %dx, %es:(%rdi) # encoding: [0x66,0x6d]
160// ERR32: 64-bit
161// ERR16: 64-bit
162
163movdir64b	291(%si), %ecx
164// ERR64: error: invalid 16-bit base register
165// ERR32: invalid operand
166// ERR16: invalid operand
167
168movdir64b	291(%esi), %cx
169// ERR64: error: invalid operand for instruction
170// ERR32: invalid operand
171// ERR16: invalid operand
172
173movdir64b (%rdx), %r15d
174// ERR64: [[#@LINE-1]]:[[#]]: error: invalid operand
175
176movdir64b (%edx), %r15
177// ERR64: [[#@LINE-1]]:[[#]]: error: invalid operand
178
179movdir64b (%eip), %ebx
180// X86-64: movdir64b (%eip), %ebx # encoding: [0x67,0x66,0x0f,0x38,0xf8,0x1d,0x00,0x00,0x00,0x00]
181
182movdir64b (%rip), %rbx
183// X86-64: movdir64b (%rip), %rbx # encoding: [0x66,0x0f,0x38,0xf8,0x1d,0x00,0x00,0x00,0x00]
184
185movdir64b 291(%esi, %eiz, 4), %ebx
186// X86-64: movdir64b 291(%esi,%eiz,4), %ebx # encoding: [0x67,0x66,0x0f,0x38,0xf8,0x9c,0xa6,0x23,0x01,0x00,0x00]
187// X86-32: movdir64b 291(%esi,%eiz,4), %ebx # encoding: [0x66,0x0f,0x38,0xf8,0x9c,0xa6,0x23,0x01,0x00,0x00]
188
189movdir64b 291(%rsi, %riz, 4), %rbx
190// X86-64: movdir64b 291(%rsi,%riz,4), %rbx # encoding: [0x66,0x0f,0x38,0xf8,0x9c,0xa6,0x23,0x01,0x00,0x00]
191
192enqcmd	291(%si), %ecx
193// ERR64: error: invalid 16-bit base register
194// ERR32: invalid operand
195// ERR16: invalid operand
196
197enqcmd	291(%esi), %cx
198// ERR64: error: invalid operand for instruction
199// ERR32: invalid operand
200// ERR16: invalid operand
201
202enqcmd (%rdx), %r15d
203// ERR64: [[#@LINE-1]]:[[#]]: error: invalid operand
204
205enqcmd (%edx), %r15
206// ERR64: [[#@LINE-1]]:[[#]]: error: invalid operand
207
208enqcmd (%eip), %ebx
209// X86-64: enqcmd (%eip), %ebx # encoding: [0x67,0xf2,0x0f,0x38,0xf8,0x1d,0x00,0x00,0x00,0x00]
210
211enqcmd (%rip), %rbx
212// X86-64: enqcmd (%rip), %rbx # encoding: [0xf2,0x0f,0x38,0xf8,0x1d,0x00,0x00,0x00,0x00]
213
214enqcmd 291(%esi, %eiz, 4), %ebx
215// X86-64: enqcmd 291(%esi,%eiz,4), %ebx # encoding: [0x67,0xf2,0x0f,0x38,0xf8,0x9c,0xa6,0x23,0x01,0x00,0x00]
216// X86-32: enqcmd 291(%esi,%eiz,4), %ebx # encoding: [0xf2,0x0f,0x38,0xf8,0x9c,0xa6,0x23,0x01,0x00,0x00]
217
218enqcmd 291(%rsi, %riz, 4), %rbx
219// X86-64: enqcmd 291(%rsi,%riz,4), %rbx # encoding: [0xf2,0x0f,0x38,0xf8,0x9c,0xa6,0x23,0x01,0x00,0x00]
220
221enqcmds	291(%si), %ecx
222// ERR64: error: invalid 16-bit base register
223// ERR32: invalid operand
224// ERR16: invalid operand
225
226enqcmds	291(%esi), %cx
227// ERR64: error: invalid operand for instruction
228// ERR32: invalid operand
229// ERR16: invalid operand
230
231enqcmds (%rdx), %r15d
232// ERR64: [[#@LINE-1]]:[[#]]: error: invalid operand
233
234enqcmds (%edx), %r15
235// ERR64: [[#@LINE-1]]:[[#]]: error: invalid operand
236
237enqcmds (%eip), %ebx
238// X86-64: enqcmds (%eip), %ebx # encoding: [0x67,0xf3,0x0f,0x38,0xf8,0x1d,0x00,0x00,0x00,0x00]
239
240enqcmds (%rip), %rbx
241// X86-64: enqcmds (%rip), %rbx # encoding: [0xf3,0x0f,0x38,0xf8,0x1d,0x00,0x00,0x00,0x00]
242
243enqcmds 291(%esi, %eiz, 4), %ebx
244// X86-64: enqcmds 291(%esi,%eiz,4), %ebx # encoding: [0x67,0xf3,0x0f,0x38,0xf8,0x9c,0xa6,0x23,0x01,0x00,0x00]
245// X86-32: enqcmds 291(%esi,%eiz,4), %ebx # encoding: [0xf3,0x0f,0x38,0xf8,0x9c,0xa6,0x23,0x01,0x00,0x00]
246
247enqcmds 291(%rsi, %riz, 4), %rbx
248// X86-64: enqcmds 291(%rsi,%riz,4), %rbx # encoding: [0xf3,0x0f,0x38,0xf8,0x9c,0xa6,0x23,0x01,0x00,0x00]
249