1// RUN: llvm-mc -triple i686-unknown-unknown -x86-asm-syntax=intel %s | FileCheck %s --check-prefixes=CHECK-32,CHECK 2// RUN: llvm-mc -triple x86_64-unknown-unknown --defsym X64=1 -x86-asm-syntax=intel %s | FileCheck %s --check-prefixes=CHECK-64,CHECK 3 4// RUN: not llvm-mc -triple i686-unknown-unknown --defsym ERR=1 -x86-asm-syntax=intel %s 2>&1 | FileCheck %s --check-prefixes=ERR-32 5 6t0: 7call direct_branch 8jmp direct_branch 9// CHECK-LABEL: t0: 10// CHECK-64: callq direct_branch 11// CHECK-32: calll direct_branch 12// CHECK: jmp direct_branch 13 14t1: 15call [fn_ref] 16jmp [fn_ref] 17// CHECK-LABEL: t1: 18// CHECK-64: callq *fn_ref 19// CHECK-64: jmpq *fn_ref 20// CHECK-32: calll *fn_ref 21// CHECK-32: jmpl *fn_ref 22 23.ifdef X64 24 25 t2: 26 call qword ptr [fn_ref] 27 jmp qword ptr [fn_ref] 28 // CHECK-64-LABEL: t2: 29 // CHECK-64: callq *fn_ref 30 // CHECK-64: jmpq *fn_ref 31 32 t3: 33 call qword ptr [rip + fn_ref] 34 jmp qword ptr [rip + fn_ref] 35 // CHECK-64-LABEL: t3: 36 // CHECK-64: callq *fn_ref(%rip) 37 // CHECK-64: jmpq *fn_ref(%rip) 38 39.else 40 41 t4: 42 call dword ptr [fn_ref] 43 jmp dword ptr [fn_ref] 44 // CHECK-32-LABEL: t4: 45 // CHECK-32: calll *fn_ref 46 // CHECK-32: jmpl *fn_ref 47 48 t5: 49 call dword ptr fn_ref 50 jmp dword ptr fn_ref 51 // CHECK-32-LABEL: t5: 52 // CHECK-32: calll *fn_ref 53 // CHECK-32: jmpl *fn_ref 54 55 t6: 56 call dword ptr [offset fn_ref] 57 jmp dword ptr [offset fn_ref] 58 // CHECK-32-LABEL: t6: 59 // CHECK-32: calll *fn_ref 60 // CHECK-32: jmpl *fn_ref 61 62.ifdef ERR 63 64 call [offset fn_ref] 65 // ERR-32: {{.*}}.s:[[#@LINE-1]]:8: error: `OFFSET` operator cannot be used in an unconditional branch 66 jmp [offset fn_ref] 67 // ERR-32: {{.*}}.s:[[#@LINE-1]]:7: error: `OFFSET` operator cannot be used in an unconditional branch 68 69 call offset fn_ref 70 // ERR-32: {{.*}}.s:[[#@LINE-1]]:3: error: invalid operand for instruction 71 jmp offset fn_ref 72 // ERR-32: {{.*}}.s:[[#@LINE-1]]:3: error: invalid operand for instruction 73 74.endif 75 76.endif 77