| ; RUN: llvm-ml -m64 -filetype=s %s /Fo - | FileCheck %s --check-prefixes=CHECK-64,CHECK |
| ; RUN: llvm-ml -m32 -filetype=s %s /Fo - | FileCheck %s --check-prefixes=CHECK-32,CHECK |
| |
| ifdef rax |
| extern fn_ref_extern : qword |
| else |
| extern fn_ref_extern : dword |
| endif |
| |
| extern fn_proc_extern : proc |
| extern fn_ref_extern_word : word |
| |
| .data |
| |
| ifdef rax |
| fn_ref qword 1 |
| else |
| fn_ref dword 1 |
| endif |
| |
| fn_ref_word word 2 |
| fn PROC |
| |
| BranchTargetStruc struc |
| member0 dword ? |
| ifdef rax |
| member1 dword ? |
| endif |
| BranchTargetStruc ends |
| |
| |
| ifdef rax |
| fn_ref_struc BranchTargetStruc {3, 3} |
| else |
| fn_ref_struc BranchTargetStruc {3} |
| endif |
| |
| .code |
| |
| t0: |
| call fn_ref |
| jmp fn_ref |
| ; CHECK-LABEL: t0: |
| ; CHECK-64: call qword ptr [rip + fn_ref] |
| ; CHECK-64: jmp qword ptr [rip + fn_ref] |
| ; CHECK-32: call dword ptr [fn_ref] |
| ; CHECK-32: jmp dword ptr [fn_ref] |
| |
| t1: |
| call [fn_ref] |
| jmp [fn_ref] |
| ; CHECK-LABEL: t1: |
| ; CHECK-64: call qword ptr [rip + fn_ref] |
| ; CHECK-64: jmp qword ptr [rip + fn_ref] |
| ; CHECK-32: call dword ptr [fn_ref] |
| ; CHECK-32: jmp dword ptr [fn_ref] |
| |
| ifdef rax |
| t2: |
| call qword ptr [fn_ref] |
| jmp qword ptr [fn_ref] |
| ; CHECK-64-LABEL: t2: |
| ; CHECK-64: call qword ptr [rip + fn_ref] |
| ; CHECK-64: jmp qword ptr [rip + fn_ref] |
| else |
| t2: |
| call dword ptr [fn_ref] |
| jmp dword ptr [fn_ref] |
| ; CHECK-32-LABEL: t2: |
| ; CHECK-32: call dword ptr [fn_ref] |
| ; CHECK-32: jmp dword ptr [fn_ref] |
| |
| t3: |
| call fn_ref_word |
| jmp fn_ref_word |
| ; CHECK-32-LABEL: t3: |
| ; CHECK-32: call word ptr [fn_ref_word] |
| ; CHECK-32-NEXT: jmp word ptr [fn_ref_word] |
| |
| t4: |
| call [fn_ref_word] |
| jmp [fn_ref_word] |
| ; CHECK-32-LABEL: t4: |
| ; CHECK-32: call word ptr [fn_ref_word] |
| ; CHECK-32-NEXT: jmp word ptr [fn_ref_word] |
| |
| t5: |
| call word ptr [fn_ref_word] |
| jmp word ptr [fn_ref_word] |
| ; CHECK-32-LABEL: t5: |
| ; CHECK-32: call word ptr [fn_ref_word] |
| ; CHECK-32-NEXT: jmp word ptr [fn_ref_word] |
| endif |
| |
| t6: |
| call t6 |
| jmp t6 |
| ; CHECK-LABEL: t6: |
| ; CHECK: call t6 |
| ; CHECK-NEXT: jmp t6 |
| |
| t7: |
| call [t7] |
| jmp [t7] |
| ; CHECK-LABEL: t7: |
| ; CHECK: call t7 |
| ; CHECK-NEXT: jmp t7 |
| |
| ifdef rax |
| t8: |
| call qword ptr [t8] |
| jmp qword ptr [t8] |
| ; CHECK-64-LABEL: t8: |
| ; CHECK-64: call qword ptr [rip + t8] |
| ; CHECK-64-NEXT: jmp qword ptr [rip + t8] |
| else |
| t8: |
| call dword ptr [t8] |
| jmp dword ptr [t8] |
| ; CHECK-32-LABEL: t8: |
| ; CHECK-32: call dword ptr [t8] |
| ; CHECK-32-NEXT: jmp dword ptr [t8] |
| endif |
| |
| t9: |
| call fn |
| jmp fn |
| ; CHECK-LABEL: t9: |
| ; CHECK: call fn |
| ; CHECK-NEXT: jmp fn |
| |
| t10: |
| call [fn] |
| jmp [fn] |
| ; CHECK-LABEL: t10: |
| ; CHECK: call fn |
| ; CHECK-NEXT: jmp fn |
| |
| ifdef rax |
| t11: |
| call qword ptr [fn] |
| jmp qword ptr [fn] |
| ; CHECK-64-LABEL: t11: |
| ; CHECK-64: call qword ptr [rip + fn] |
| ; CHECK-64-NEXT: jmp qword ptr [rip + fn] |
| else |
| t11: |
| call dword ptr [fn] |
| jmp dword ptr [fn] |
| ; CHECK-32-LABEL: t11: |
| ; CHECK-32: call dword ptr [fn] |
| ; CHECK-32-NEXT: jmp dword ptr [fn] |
| endif |
| |
| t12: |
| call fn_ref_struc |
| jmp fn_ref_struc |
| ; CHECK-LABEL: t12: |
| ; CHECK-64: call qword ptr [rip + fn_ref_struc] |
| ; CHECK-64: jmp qword ptr [rip + fn_ref_struc] |
| ; CHECK-32: call dword ptr [fn_ref_struc] |
| ; CHECK-32: jmp dword ptr [fn_ref_struc] |
| |
| t13: |
| call [fn_ref_struc] |
| jmp [fn_ref_struc] |
| ; CHECK-LABEL: t13: |
| ; CHECK-64: call qword ptr [rip + fn_ref_struc] |
| ; CHECK-64: jmp qword ptr [rip + fn_ref_struc] |
| ; CHECK-32: call dword ptr [fn_ref_struc] |
| ; CHECK-32: jmp dword ptr [fn_ref_struc] |
| |
| ifdef rax |
| t14: |
| call qword ptr [fn_ref_struc] |
| jmp qword ptr [fn_ref_struc] |
| ; CHECK-64-LABEL: t14: |
| ; CHECK-64: call qword ptr [rip + fn_ref_struc] |
| ; CHECK-64: jmp qword ptr [rip + fn_ref_struc] |
| else |
| t14: |
| call dword ptr [fn_ref_struc] |
| jmp dword ptr [fn_ref_struc] |
| ; CHECK-32-LABEL: t14: |
| ; CHECK-32: call dword ptr [fn_ref_struc] |
| ; CHECK-32: jmp dword ptr [fn_ref_struc] |
| endif |
| |
| t15: |
| je t15 |
| ; CHECK-LABEL: t15: |
| ; CHECK: je t15 |
| |
| t16: |
| je [t16]; |
| ; CHECK-LABEL: t16: |
| ; CHECK: je t16 |
| |
| t17: |
| call fn_ref_extern |
| jmp fn_ref_extern |
| ; CHECK-LABEL: t17: |
| ; CHECK-64: call qword ptr [rip + fn_ref_extern] |
| ; CHECK-64: jmp qword ptr [rip + fn_ref_extern] |
| ; CHECK-32: call dword ptr [fn_ref_extern] |
| ; CHECK-32: jmp dword ptr [fn_ref_extern] |
| |
| t18: |
| call [fn_ref_extern] |
| jmp [fn_ref_extern] |
| ; CHECK-LABEL: t18: |
| ; CHECK-64: call qword ptr [rip + fn_ref_extern] |
| ; CHECK-64: jmp qword ptr [rip + fn_ref_extern] |
| ; CHECK-32: call dword ptr [fn_ref_extern] |
| ; CHECK-32: jmp dword ptr [fn_ref_extern] |
| |
| ifdef rax |
| t19: |
| call qword ptr [fn_ref_extern] |
| jmp qword ptr [fn_ref_extern] |
| ; CHECK-64-LABEL: t19: |
| ; CHECK-64: call qword ptr [rip + fn_ref_extern] |
| ; CHECK-64: jmp qword ptr [rip + fn_ref_extern] |
| else |
| t19: |
| call dword ptr [fn_ref_extern] |
| jmp dword ptr [fn_ref_extern] |
| ; CHECK-32-LABEL: t19: |
| ; CHECK-32: call dword ptr [fn_ref_extern] |
| ; CHECK-32: jmp dword ptr [fn_ref_extern] |
| |
| t20: |
| call fn_ref_extern_word |
| jmp fn_ref_extern_word |
| ; CHECK-32-LABEL: t20: |
| ; CHECK-32: call word ptr [fn_ref_extern_word] |
| ; CHECK-32-NEXT: jmp word ptr [fn_ref_extern_word] |
| |
| t21: |
| call [fn_ref_extern_word] |
| jmp [fn_ref_extern_word] |
| ; CHECK-32-LABEL: t21: |
| ; CHECK-32: call word ptr [fn_ref_extern_word] |
| ; CHECK-32-NEXT: jmp word ptr [fn_ref_extern_word] |
| |
| t22: |
| call word ptr [fn_ref_extern_word] |
| jmp word ptr [fn_ref_extern_word] |
| ; CHECK-32-LABEL: t22: |
| ; CHECK-32: call word ptr [fn_ref_extern_word] |
| ; CHECK-32-NEXT: jmp word ptr [fn_ref_extern_word] |
| endif |
| |
| t23: |
| call fn_proc_extern |
| jmp fn_proc_extern |
| ; CHECK-LABEL: t23: |
| ; CHECK: call fn_proc_extern |
| |
| t24: |
| call [fn_proc_extern] |
| jmp [fn_proc_extern] |
| ; CHECK-LABEL: t24: |
| ; CHECK: call fn_proc_extern |
| |
| t25: |
| ; CHECK-LABEL: t25: |
| ifdef rax |
| call qword ptr [fn_ref_extern] |
| jmp qword ptr [fn_ref_extern] |
| ; CHECK-64: call qword ptr [rip + fn_ref_extern] |
| ; CHECK-64: jmp qword ptr [rip + fn_ref_extern] |
| else |
| call dword ptr [fn_ref_extern] |
| jmp dword ptr [fn_ref_extern] |
| ; CHECK-32: call dword ptr [fn_ref_extern] |
| ; CHECK-32: jmp dword ptr [fn_ref_extern] |
| endif |
| |
| end |