| // 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 |