xref: /llvm-project/llvm/test/tools/llvm-ml/indirect_branch.asm (revision 8a1b5f26808429a157835a8011e6b58fe3361e0f)
13333c28fSAlan Zhao; RUN: llvm-ml -m64 -filetype=s %s /Fo - | FileCheck %s --check-prefixes=CHECK-64,CHECK
23333c28fSAlan Zhao; RUN: llvm-ml -m32 -filetype=s %s /Fo - | FileCheck %s --check-prefixes=CHECK-32,CHECK
33333c28fSAlan Zhao
482c5e302SAlan Zhaoifdef rax
582c5e302SAlan Zhao  extern fn_ref_extern : qword
682c5e302SAlan Zhaoelse
782c5e302SAlan Zhao  extern fn_ref_extern : dword
882c5e302SAlan Zhaoendif
9*8a1b5f26SAlan Zhao
10*8a1b5f26SAlan Zhaoextern fn_proc_extern : proc
1182c5e302SAlan Zhaoextern fn_ref_extern_word : word
1282c5e302SAlan Zhao
133333c28fSAlan Zhao.data
143333c28fSAlan Zhao
153333c28fSAlan Zhaoifdef rax
163333c28fSAlan Zhao  fn_ref qword 1
173333c28fSAlan Zhaoelse
183333c28fSAlan Zhao  fn_ref dword 1
193333c28fSAlan Zhaoendif
203333c28fSAlan Zhao
213333c28fSAlan Zhaofn_ref_word word 2
223333c28fSAlan Zhaofn PROC
233333c28fSAlan Zhao
243333c28fSAlan ZhaoBranchTargetStruc struc
253333c28fSAlan Zhao  member0 dword ?
263333c28fSAlan Zhao  ifdef rax
273333c28fSAlan Zhao    member1 dword ?
283333c28fSAlan Zhao  endif
293333c28fSAlan ZhaoBranchTargetStruc ends
303333c28fSAlan Zhao
313333c28fSAlan Zhao
323333c28fSAlan Zhaoifdef rax
333333c28fSAlan Zhao  fn_ref_struc BranchTargetStruc {3, 3}
343333c28fSAlan Zhaoelse
353333c28fSAlan Zhao  fn_ref_struc BranchTargetStruc {3}
363333c28fSAlan Zhaoendif
373333c28fSAlan Zhao
383333c28fSAlan Zhao.code
393333c28fSAlan Zhao
403333c28fSAlan Zhaot0:
413333c28fSAlan Zhaocall fn_ref
423333c28fSAlan Zhaojmp fn_ref
433333c28fSAlan Zhao; CHECK-LABEL: t0:
443333c28fSAlan Zhao; CHECK-64: call qword ptr [rip + fn_ref]
453333c28fSAlan Zhao; CHECK-64: jmp qword ptr [rip + fn_ref]
463333c28fSAlan Zhao; CHECK-32: call dword ptr [fn_ref]
473333c28fSAlan Zhao; CHECK-32: jmp dword ptr [fn_ref]
483333c28fSAlan Zhao
493333c28fSAlan Zhaot1:
503333c28fSAlan Zhaocall [fn_ref]
513333c28fSAlan Zhaojmp [fn_ref]
523333c28fSAlan Zhao; CHECK-LABEL: t1:
533333c28fSAlan Zhao; CHECK-64: call qword ptr [rip + fn_ref]
543333c28fSAlan Zhao; CHECK-64: jmp qword ptr [rip + fn_ref]
553333c28fSAlan Zhao; CHECK-32: call dword ptr [fn_ref]
563333c28fSAlan Zhao; CHECK-32: jmp dword ptr [fn_ref]
573333c28fSAlan Zhao
583333c28fSAlan Zhaoifdef rax
593333c28fSAlan Zhao  t2:
603333c28fSAlan Zhao  call qword ptr [fn_ref]
613333c28fSAlan Zhao  jmp qword ptr [fn_ref]
623333c28fSAlan Zhao  ; CHECK-64-LABEL: t2:
633333c28fSAlan Zhao  ; CHECK-64: call qword ptr [rip + fn_ref]
643333c28fSAlan Zhao  ; CHECK-64: jmp qword ptr [rip + fn_ref]
653333c28fSAlan Zhaoelse
663333c28fSAlan Zhao  t2:
673333c28fSAlan Zhao  call dword ptr [fn_ref]
683333c28fSAlan Zhao  jmp dword ptr [fn_ref]
693333c28fSAlan Zhao  ; CHECK-32-LABEL: t2:
703333c28fSAlan Zhao  ; CHECK-32: call dword ptr [fn_ref]
713333c28fSAlan Zhao  ; CHECK-32: jmp dword ptr [fn_ref]
723333c28fSAlan Zhao
733333c28fSAlan Zhao  t3:
743333c28fSAlan Zhao  call fn_ref_word
753333c28fSAlan Zhao  jmp fn_ref_word
763333c28fSAlan Zhao  ; CHECK-32-LABEL: t3:
773333c28fSAlan Zhao  ; CHECK-32: call word ptr [fn_ref_word]
783333c28fSAlan Zhao  ; CHECK-32-NEXT: jmp word ptr [fn_ref_word]
793333c28fSAlan Zhao
803333c28fSAlan Zhao  t4:
813333c28fSAlan Zhao  call [fn_ref_word]
823333c28fSAlan Zhao  jmp [fn_ref_word]
833333c28fSAlan Zhao  ; CHECK-32-LABEL: t4:
843333c28fSAlan Zhao  ; CHECK-32: call word ptr [fn_ref_word]
853333c28fSAlan Zhao  ; CHECK-32-NEXT: jmp word ptr [fn_ref_word]
863333c28fSAlan Zhao
873333c28fSAlan Zhao  t5:
883333c28fSAlan Zhao  call word ptr [fn_ref_word]
893333c28fSAlan Zhao  jmp word ptr [fn_ref_word]
903333c28fSAlan Zhao  ; CHECK-32-LABEL: t5:
913333c28fSAlan Zhao  ; CHECK-32: call word ptr [fn_ref_word]
923333c28fSAlan Zhao  ; CHECK-32-NEXT: jmp word ptr [fn_ref_word]
933333c28fSAlan Zhaoendif
943333c28fSAlan Zhao
953333c28fSAlan Zhaot6:
963333c28fSAlan Zhaocall t6
973333c28fSAlan Zhaojmp t6
983333c28fSAlan Zhao; CHECK-LABEL: t6:
993333c28fSAlan Zhao; CHECK: call t6
1003333c28fSAlan Zhao; CHECK-NEXT: jmp t6
1013333c28fSAlan Zhao
1023333c28fSAlan Zhaot7:
1033333c28fSAlan Zhaocall [t7]
1043333c28fSAlan Zhaojmp [t7]
1053333c28fSAlan Zhao; CHECK-LABEL: t7:
1063333c28fSAlan Zhao; CHECK: call t7
1073333c28fSAlan Zhao; CHECK-NEXT: jmp t7
1083333c28fSAlan Zhao
1093333c28fSAlan Zhaoifdef rax
1103333c28fSAlan Zhao  t8:
1113333c28fSAlan Zhao  call qword ptr [t8]
1123333c28fSAlan Zhao  jmp qword ptr [t8]
1133333c28fSAlan Zhao  ; CHECK-64-LABEL: t8:
1143333c28fSAlan Zhao  ; CHECK-64: call qword ptr [rip + t8]
1153333c28fSAlan Zhao  ; CHECK-64-NEXT: jmp qword ptr [rip + t8]
1163333c28fSAlan Zhaoelse
1173333c28fSAlan Zhao  t8:
1183333c28fSAlan Zhao  call dword ptr [t8]
1193333c28fSAlan Zhao  jmp dword ptr [t8]
1203333c28fSAlan Zhao  ; CHECK-32-LABEL: t8:
1213333c28fSAlan Zhao  ; CHECK-32: call dword ptr [t8]
1223333c28fSAlan Zhao  ; CHECK-32-NEXT: jmp dword ptr [t8]
1233333c28fSAlan Zhaoendif
1243333c28fSAlan Zhao
1253333c28fSAlan Zhaot9:
1263333c28fSAlan Zhaocall fn
1273333c28fSAlan Zhaojmp fn
1283333c28fSAlan Zhao; CHECK-LABEL: t9:
1293333c28fSAlan Zhao; CHECK: call fn
1303333c28fSAlan Zhao; CHECK-NEXT: jmp fn
1313333c28fSAlan Zhao
1323333c28fSAlan Zhaot10:
1333333c28fSAlan Zhaocall [fn]
1343333c28fSAlan Zhaojmp [fn]
1353333c28fSAlan Zhao; CHECK-LABEL: t10:
1363333c28fSAlan Zhao; CHECK: call fn
1373333c28fSAlan Zhao; CHECK-NEXT: jmp fn
1383333c28fSAlan Zhao
1393333c28fSAlan Zhaoifdef rax
1403333c28fSAlan Zhao  t11:
1413333c28fSAlan Zhao  call qword ptr [fn]
1423333c28fSAlan Zhao  jmp qword ptr [fn]
1433333c28fSAlan Zhao  ; CHECK-64-LABEL: t11:
1443333c28fSAlan Zhao  ; CHECK-64: call qword ptr [rip + fn]
1453333c28fSAlan Zhao  ; CHECK-64-NEXT: jmp qword ptr [rip + fn]
1463333c28fSAlan Zhaoelse
1473333c28fSAlan Zhao  t11:
1483333c28fSAlan Zhao  call dword ptr [fn]
1493333c28fSAlan Zhao  jmp dword ptr [fn]
1503333c28fSAlan Zhao  ; CHECK-32-LABEL: t11:
1513333c28fSAlan Zhao  ; CHECK-32: call dword ptr [fn]
1523333c28fSAlan Zhao  ; CHECK-32-NEXT: jmp dword ptr [fn]
1533333c28fSAlan Zhaoendif
1543333c28fSAlan Zhao
1553333c28fSAlan Zhaot12:
1563333c28fSAlan Zhaocall fn_ref_struc
1573333c28fSAlan Zhaojmp fn_ref_struc
1583333c28fSAlan Zhao; CHECK-LABEL: t12:
1593333c28fSAlan Zhao; CHECK-64: call qword ptr [rip + fn_ref_struc]
1603333c28fSAlan Zhao; CHECK-64: jmp qword ptr [rip + fn_ref_struc]
1613333c28fSAlan Zhao; CHECK-32: call dword ptr [fn_ref_struc]
1623333c28fSAlan Zhao; CHECK-32: jmp dword ptr [fn_ref_struc]
1633333c28fSAlan Zhao
1643333c28fSAlan Zhaot13:
1653333c28fSAlan Zhaocall [fn_ref_struc]
1663333c28fSAlan Zhaojmp [fn_ref_struc]
1673333c28fSAlan Zhao; CHECK-LABEL: t13:
1683333c28fSAlan Zhao; CHECK-64: call qword ptr [rip + fn_ref_struc]
1693333c28fSAlan Zhao; CHECK-64: jmp qword ptr [rip + fn_ref_struc]
1703333c28fSAlan Zhao; CHECK-32: call dword ptr [fn_ref_struc]
1713333c28fSAlan Zhao; CHECK-32: jmp dword ptr [fn_ref_struc]
1723333c28fSAlan Zhao
1733333c28fSAlan Zhaoifdef rax
1743333c28fSAlan Zhao  t14:
1753333c28fSAlan Zhao  call qword ptr [fn_ref_struc]
1763333c28fSAlan Zhao  jmp qword ptr [fn_ref_struc]
1773333c28fSAlan Zhao  ; CHECK-64-LABEL: t14:
1783333c28fSAlan Zhao  ; CHECK-64: call qword ptr [rip + fn_ref_struc]
1793333c28fSAlan Zhao  ; CHECK-64: jmp qword ptr [rip + fn_ref_struc]
1803333c28fSAlan Zhaoelse
1813333c28fSAlan Zhao  t14:
1823333c28fSAlan Zhao  call dword ptr [fn_ref_struc]
1833333c28fSAlan Zhao  jmp dword ptr [fn_ref_struc]
1843333c28fSAlan Zhao  ; CHECK-32-LABEL: t14:
1853333c28fSAlan Zhao  ; CHECK-32: call dword ptr [fn_ref_struc]
1863333c28fSAlan Zhao  ; CHECK-32: jmp dword ptr [fn_ref_struc]
1873333c28fSAlan Zhaoendif
1883333c28fSAlan Zhao
1893333c28fSAlan Zhaot15:
1903333c28fSAlan Zhaoje t15
1913333c28fSAlan Zhao; CHECK-LABEL: t15:
1923333c28fSAlan Zhao; CHECK: je t15
1933333c28fSAlan Zhao
1943333c28fSAlan Zhaot16:
1953333c28fSAlan Zhaoje [t16];
1963333c28fSAlan Zhao; CHECK-LABEL: t16:
1973333c28fSAlan Zhao; CHECK: je t16
19882c5e302SAlan Zhao
19982c5e302SAlan Zhaot17:
20082c5e302SAlan Zhaocall fn_ref_extern
20182c5e302SAlan Zhaojmp fn_ref_extern
20282c5e302SAlan Zhao; CHECK-LABEL: t17:
20382c5e302SAlan Zhao; CHECK-64: call qword ptr [rip + fn_ref_extern]
20482c5e302SAlan Zhao; CHECK-64: jmp qword ptr [rip + fn_ref_extern]
20582c5e302SAlan Zhao; CHECK-32: call dword ptr [fn_ref_extern]
20682c5e302SAlan Zhao; CHECK-32: jmp dword ptr [fn_ref_extern]
20782c5e302SAlan Zhao
20882c5e302SAlan Zhaot18:
20982c5e302SAlan Zhaocall [fn_ref_extern]
21082c5e302SAlan Zhaojmp [fn_ref_extern]
21182c5e302SAlan Zhao; CHECK-LABEL: t18:
21282c5e302SAlan Zhao; CHECK-64: call qword ptr [rip + fn_ref_extern]
21382c5e302SAlan Zhao; CHECK-64: jmp qword ptr [rip + fn_ref_extern]
21482c5e302SAlan Zhao; CHECK-32: call dword ptr [fn_ref_extern]
21582c5e302SAlan Zhao; CHECK-32: jmp dword ptr [fn_ref_extern]
21682c5e302SAlan Zhao
21782c5e302SAlan Zhaoifdef rax
21882c5e302SAlan Zhao  t19:
21982c5e302SAlan Zhao  call qword ptr [fn_ref_extern]
22082c5e302SAlan Zhao  jmp qword ptr [fn_ref_extern]
22182c5e302SAlan Zhao  ; CHECK-64-LABEL: t19:
22282c5e302SAlan Zhao  ; CHECK-64: call qword ptr [rip + fn_ref_extern]
22382c5e302SAlan Zhao  ; CHECK-64: jmp qword ptr [rip + fn_ref_extern]
22482c5e302SAlan Zhaoelse
22582c5e302SAlan Zhao  t19:
22682c5e302SAlan Zhao  call dword ptr [fn_ref_extern]
22782c5e302SAlan Zhao  jmp dword ptr [fn_ref_extern]
22882c5e302SAlan Zhao  ; CHECK-32-LABEL: t19:
22982c5e302SAlan Zhao  ; CHECK-32: call dword ptr [fn_ref_extern]
23082c5e302SAlan Zhao  ; CHECK-32: jmp dword ptr [fn_ref_extern]
23182c5e302SAlan Zhao
23282c5e302SAlan Zhao  t20:
23382c5e302SAlan Zhao  call fn_ref_extern_word
23482c5e302SAlan Zhao  jmp fn_ref_extern_word
23582c5e302SAlan Zhao  ; CHECK-32-LABEL: t20:
23682c5e302SAlan Zhao  ; CHECK-32: call word ptr [fn_ref_extern_word]
23782c5e302SAlan Zhao  ; CHECK-32-NEXT: jmp word ptr [fn_ref_extern_word]
23882c5e302SAlan Zhao
23982c5e302SAlan Zhao  t21:
24082c5e302SAlan Zhao  call [fn_ref_extern_word]
24182c5e302SAlan Zhao  jmp [fn_ref_extern_word]
24282c5e302SAlan Zhao  ; CHECK-32-LABEL: t21:
24382c5e302SAlan Zhao  ; CHECK-32: call word ptr [fn_ref_extern_word]
24482c5e302SAlan Zhao  ; CHECK-32-NEXT: jmp word ptr [fn_ref_extern_word]
24582c5e302SAlan Zhao
24682c5e302SAlan Zhao  t22:
24782c5e302SAlan Zhao  call word ptr [fn_ref_extern_word]
24882c5e302SAlan Zhao  jmp word ptr [fn_ref_extern_word]
24982c5e302SAlan Zhao  ; CHECK-32-LABEL: t22:
25082c5e302SAlan Zhao  ; CHECK-32: call word ptr [fn_ref_extern_word]
25182c5e302SAlan Zhao  ; CHECK-32-NEXT: jmp word ptr [fn_ref_extern_word]
25282c5e302SAlan Zhaoendif
253*8a1b5f26SAlan Zhao
254*8a1b5f26SAlan Zhaot23:
255*8a1b5f26SAlan Zhaocall fn_proc_extern
256*8a1b5f26SAlan Zhaojmp fn_proc_extern
257*8a1b5f26SAlan Zhao; CHECK-LABEL: t23:
258*8a1b5f26SAlan Zhao; CHECK: call fn_proc_extern
259*8a1b5f26SAlan Zhao
260*8a1b5f26SAlan Zhaot24:
261*8a1b5f26SAlan Zhaocall [fn_proc_extern]
262*8a1b5f26SAlan Zhaojmp [fn_proc_extern]
263*8a1b5f26SAlan Zhao; CHECK-LABEL: t24:
264*8a1b5f26SAlan Zhao; CHECK: call fn_proc_extern
265*8a1b5f26SAlan Zhao
266*8a1b5f26SAlan Zhaot25:
267*8a1b5f26SAlan Zhao; CHECK-LABEL: t25:
268*8a1b5f26SAlan Zhaoifdef rax
269*8a1b5f26SAlan Zhao  call qword ptr [fn_ref_extern]
270*8a1b5f26SAlan Zhao  jmp qword ptr [fn_ref_extern]
271*8a1b5f26SAlan Zhao  ; CHECK-64: call qword ptr [rip + fn_ref_extern]
272*8a1b5f26SAlan Zhao  ; CHECK-64: jmp qword ptr [rip + fn_ref_extern]
273*8a1b5f26SAlan Zhaoelse
274*8a1b5f26SAlan Zhao  call dword ptr [fn_ref_extern]
275*8a1b5f26SAlan Zhao  jmp dword ptr [fn_ref_extern]
276*8a1b5f26SAlan Zhao  ; CHECK-32: call dword ptr [fn_ref_extern]
277*8a1b5f26SAlan Zhao  ; CHECK-32: jmp dword ptr [fn_ref_extern]
278*8a1b5f26SAlan Zhaoendif
279*8a1b5f26SAlan Zhao
280*8a1b5f26SAlan Zhaoend
281