// RUN: llvm-mc -triple i686-unknown-unknown -x86-asm-syntax=intel %s | FileCheck %s --check-prefixes=CHECK-32,CHECK
// RUN: llvm-mc -triple x86_64-unknown-unknown --defsym X64=1 -x86-asm-syntax=intel %s | FileCheck %s --check-prefixes=CHECK-64,CHECK
// RUN: not llvm-mc -triple i686-unknown-unknown --defsym ERR=1 -x86-asm-syntax=intel %s 2>&1 | FileCheck %s --check-prefixes=ERR-32
t0:
call direct_branch
jmp direct_branch
// CHECK-LABEL: t0:
// CHECK-64: callq direct_branch
// CHECK-32: calll direct_branch
// CHECK: jmp direct_branch
t1:
call [fn_ref]
jmp [fn_ref]
// CHECK-LABEL: t1:
// CHECK-64: callq *fn_ref
// CHECK-64: jmpq *fn_ref
// CHECK-32: calll *fn_ref
// CHECK-32: jmpl *fn_ref
.ifdef X64
t2:
call qword ptr [fn_ref]
jmp qword ptr [fn_ref]
// CHECK-64-LABEL: t2:
// CHECK-64: callq *fn_ref
// CHECK-64: jmpq *fn_ref
t3:
call qword ptr [rip + fn_ref]
jmp qword ptr [rip + fn_ref]
// CHECK-64-LABEL: t3:
// CHECK-64: callq *fn_ref(%rip)
// CHECK-64: jmpq *fn_ref(%rip)
.else
t4:
call dword ptr [fn_ref]
jmp dword ptr [fn_ref]
// CHECK-32-LABEL: t4:
// CHECK-32: calll *fn_ref
// CHECK-32: jmpl *fn_ref
t5:
call dword ptr fn_ref
jmp dword ptr fn_ref
// CHECK-32-LABEL: t5:
// CHECK-32: calll *fn_ref
// CHECK-32: jmpl *fn_ref
t6:
call dword ptr [offset fn_ref]
jmp dword ptr [offset fn_ref]
// CHECK-32-LABEL: t6:
// CHECK-32: calll *fn_ref
// CHECK-32: jmpl *fn_ref
.ifdef ERR
call [offset fn_ref]
// ERR-32: {{.*}}.s:[[#@LINE-1]]:8: error: `OFFSET` operator cannot be used in an unconditional branch
jmp [offset fn_ref]
// ERR-32: {{.*}}.s:[[#@LINE-1]]:7: error: `OFFSET` operator cannot be used in an unconditional branch
call offset fn_ref
// ERR-32: {{.*}}.s:[[#@LINE-1]]:3: error: invalid operand for instruction
jmp offset fn_ref
// ERR-32: {{.*}}.s:[[#@LINE-1]]:3: error: invalid operand for instruction
.endif
.endif