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