1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280
|
; 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
|