1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2 ; RUN: llc < %s -mtriple=i386-unknown | FileCheck %s --check-prefix=X32 3 ; RUN: llc < %s -mtriple=x86_64-unknown | FileCheck %s --check-prefix=X64 4 5 target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" 6 7 define void @test(i256* %a, i256* %b, i256* %out) #0 { 8 ; X32-LABEL: test: 9 ; X32: # %bb.0: # %entry 10 ; X32-NEXT: pushl %ebp 11 ; X32-NEXT: .cfi_def_cfa_offset 8 12 ; X32-NEXT: pushl %ebx 13 ; X32-NEXT: .cfi_def_cfa_offset 12 14 ; X32-NEXT: pushl %edi 15 ; X32-NEXT: .cfi_def_cfa_offset 16 16 ; X32-NEXT: pushl %esi 17 ; X32-NEXT: .cfi_def_cfa_offset 20 18 ; X32-NEXT: subl $88, %esp 19 ; X32-NEXT: .cfi_def_cfa_offset 108 20 ; X32-NEXT: .cfi_offset %esi, -20 21 ; X32-NEXT: .cfi_offset %edi, -16 22 ; X32-NEXT: .cfi_offset %ebx, -12 23 ; X32-NEXT: .cfi_offset %ebp, -8 24 ; X32-NEXT: movl {{[0-9]+}}(%esp), %eax 25 ; X32-NEXT: movl {{[0-9]+}}(%esp), %ecx 26 ; X32-NEXT: movl 12(%ecx), %ebp 27 ; X32-NEXT: movl 8(%ecx), %edi 28 ; X32-NEXT: movl %edi, {{[0-9]+}}(%esp) # 4-byte Spill 29 ; X32-NEXT: movl (%eax), %ebx 30 ; X32-NEXT: movl %ebx, {{[0-9]+}}(%esp) # 4-byte Spill 31 ; X32-NEXT: movl %edi, %eax 32 ; X32-NEXT: mull %ebx 33 ; X32-NEXT: movl %edx, %ecx 34 ; X32-NEXT: movl %eax, {{[0-9]+}}(%esp) # 4-byte Spill 35 ; X32-NEXT: movl %ebp, %eax 36 ; X32-NEXT: movl %ebp, {{[0-9]+}}(%esp) # 4-byte Spill 37 ; X32-NEXT: mull %ebx 38 ; X32-NEXT: movl %edx, %esi 39 ; X32-NEXT: movl %eax, %ebx 40 ; X32-NEXT: addl %ecx, %ebx 41 ; X32-NEXT: adcl $0, %esi 42 ; X32-NEXT: movl {{[0-9]+}}(%esp), %eax 43 ; X32-NEXT: movl 4(%eax), %ecx 44 ; X32-NEXT: movl %edi, %eax 45 ; X32-NEXT: mull %ecx 46 ; X32-NEXT: movl %ecx, %edi 47 ; X32-NEXT: movl %ecx, {{[0-9]+}}(%esp) # 4-byte Spill 48 ; X32-NEXT: movl %edx, %ecx 49 ; X32-NEXT: addl %ebx, %eax 50 ; X32-NEXT: movl %eax, {{[0-9]+}}(%esp) # 4-byte Spill 51 ; X32-NEXT: adcl %esi, %ecx 52 ; X32-NEXT: setb {{[0-9]+}}(%esp) # 1-byte Folded Spill 53 ; X32-NEXT: movl %ebp, %eax 54 ; X32-NEXT: mull %edi 55 ; X32-NEXT: movl %edx, %ebx 56 ; X32-NEXT: movl %eax, %edi 57 ; X32-NEXT: addl %ecx, %edi 58 ; X32-NEXT: movzbl {{[0-9]+}}(%esp), %eax # 1-byte Folded Reload 59 ; X32-NEXT: adcl %eax, %ebx 60 ; X32-NEXT: xorl %edx, %edx 61 ; X32-NEXT: movl {{[0-9]+}}(%esp), %ecx # 4-byte Reload 62 ; X32-NEXT: movl %ecx, %eax 63 ; X32-NEXT: mull %edx 64 ; X32-NEXT: movl %edx, %ebp 65 ; X32-NEXT: movl %edx, {{[0-9]+}}(%esp) # 4-byte Spill 66 ; X32-NEXT: movl %eax, %esi 67 ; X32-NEXT: movl %eax, (%esp) # 4-byte Spill 68 ; X32-NEXT: movl {{[0-9]+}}(%esp), %eax # 4-byte Reload 69 ; X32-NEXT: xorl %edx, %edx 70 ; X32-NEXT: mull %edx 71 ; X32-NEXT: movl %edx, {{[0-9]+}}(%esp) # 4-byte Spill 72 ; X32-NEXT: movl %eax, {{[0-9]+}}(%esp) # 4-byte Spill 73 ; X32-NEXT: addl %esi, %eax 74 ; X32-NEXT: adcl %ebp, %edx 75 ; X32-NEXT: addl %edi, %eax 76 ; X32-NEXT: movl %eax, {{[0-9]+}}(%esp) # 4-byte Spill 77 ; X32-NEXT: adcl %ebx, %edx 78 ; X32-NEXT: movl %edx, {{[0-9]+}}(%esp) # 4-byte Spill 79 ; X32-NEXT: movl {{[0-9]+}}(%esp), %esi 80 ; X32-NEXT: movl (%esi), %ebp 81 ; X32-NEXT: movl %ebp, %eax 82 ; X32-NEXT: movl %ebp, {{[0-9]+}}(%esp) # 4-byte Spill 83 ; X32-NEXT: mull %ecx 84 ; X32-NEXT: movl %ecx, %edi 85 ; X32-NEXT: movl %eax, {{[0-9]+}}(%esp) # 4-byte Spill 86 ; X32-NEXT: movl %edx, %ecx 87 ; X32-NEXT: movl 4(%esi), %esi 88 ; X32-NEXT: movl %esi, %eax 89 ; X32-NEXT: movl %esi, {{[0-9]+}}(%esp) # 4-byte Spill 90 ; X32-NEXT: mull %edi 91 ; X32-NEXT: movl %edx, %edi 92 ; X32-NEXT: movl %eax, %ebx 93 ; X32-NEXT: addl %ecx, %ebx 94 ; X32-NEXT: adcl $0, %edi 95 ; X32-NEXT: movl %ebp, %eax 96 ; X32-NEXT: movl {{[0-9]+}}(%esp), %ebp # 4-byte Reload 97 ; X32-NEXT: mull %ebp 98 ; X32-NEXT: movl %edx, %ecx 99 ; X32-NEXT: addl %ebx, %eax 100 ; X32-NEXT: movl %eax, {{[0-9]+}}(%esp) # 4-byte Spill 101 ; X32-NEXT: adcl %edi, %ecx 102 ; X32-NEXT: setb %bl 103 ; X32-NEXT: movl %esi, %eax 104 ; X32-NEXT: mull %ebp 105 ; X32-NEXT: movl %edx, %edi 106 ; X32-NEXT: movl %eax, %ebp 107 ; X32-NEXT: addl %ecx, %ebp 108 ; X32-NEXT: movzbl %bl, %eax 109 ; X32-NEXT: adcl %eax, %edi 110 ; X32-NEXT: movl {{[0-9]+}}(%esp), %esi # 4-byte Reload 111 ; X32-NEXT: movl %esi, %eax 112 ; X32-NEXT: xorl %edx, %edx 113 ; X32-NEXT: mull %edx 114 ; X32-NEXT: movl %edx, {{[0-9]+}}(%esp) # 4-byte Spill 115 ; X32-NEXT: movl %eax, {{[0-9]+}}(%esp) # 4-byte Spill 116 ; X32-NEXT: movl (%esp), %ecx # 4-byte Reload 117 ; X32-NEXT: addl %eax, %ecx 118 ; X32-NEXT: movl {{[0-9]+}}(%esp), %eax # 4-byte Reload 119 ; X32-NEXT: adcl %edx, %eax 120 ; X32-NEXT: addl %ebp, %ecx 121 ; X32-NEXT: adcl %edi, %eax 122 ; X32-NEXT: addl {{[0-9]+}}(%esp), %ecx # 4-byte Folded Reload 123 ; X32-NEXT: movl %ecx, (%esp) # 4-byte Spill 124 ; X32-NEXT: adcl {{[0-9]+}}(%esp), %eax # 4-byte Folded Reload 125 ; X32-NEXT: movl %eax, {{[0-9]+}}(%esp) # 4-byte Spill 126 ; X32-NEXT: adcl $0, {{[0-9]+}}(%esp) # 4-byte Folded Spill 127 ; X32-NEXT: adcl $0, {{[0-9]+}}(%esp) # 4-byte Folded Spill 128 ; X32-NEXT: movl {{[0-9]+}}(%esp), %eax 129 ; X32-NEXT: movl %eax, %ecx 130 ; X32-NEXT: movl 8(%eax), %ebx 131 ; X32-NEXT: movl %esi, %eax 132 ; X32-NEXT: movl %esi, %edi 133 ; X32-NEXT: mull %ebx 134 ; X32-NEXT: movl %edx, {{[0-9]+}}(%esp) # 4-byte Spill 135 ; X32-NEXT: movl %eax, {{[0-9]+}}(%esp) # 4-byte Spill 136 ; X32-NEXT: movl {{[0-9]+}}(%esp), %eax # 4-byte Reload 137 ; X32-NEXT: mull %ebx 138 ; X32-NEXT: movl %edx, %ebp 139 ; X32-NEXT: movl %eax, %esi 140 ; X32-NEXT: addl {{[0-9]+}}(%esp), %esi # 4-byte Folded Reload 141 ; X32-NEXT: adcl $0, %ebp 142 ; X32-NEXT: movl 12(%ecx), %ecx 143 ; X32-NEXT: movl %edi, %eax 144 ; X32-NEXT: mull %ecx 145 ; X32-NEXT: movl %ecx, {{[0-9]+}}(%esp) # 4-byte Spill 146 ; X32-NEXT: movl %edx, %edi 147 ; X32-NEXT: addl %esi, %eax 148 ; X32-NEXT: movl %eax, {{[0-9]+}}(%esp) # 4-byte Spill 149 ; X32-NEXT: adcl %ebp, %edi 150 ; X32-NEXT: setb {{[0-9]+}}(%esp) # 1-byte Folded Spill 151 ; X32-NEXT: movl {{[0-9]+}}(%esp), %eax # 4-byte Reload 152 ; X32-NEXT: mull %ecx 153 ; X32-NEXT: movl %edx, %esi 154 ; X32-NEXT: movl %eax, %ebp 155 ; X32-NEXT: addl %edi, %ebp 156 ; X32-NEXT: movzbl {{[0-9]+}}(%esp), %eax # 1-byte Folded Reload 157 ; X32-NEXT: adcl %eax, %esi 158 ; X32-NEXT: movl %ebx, %edi 159 ; X32-NEXT: movl %ebx, %eax 160 ; X32-NEXT: xorl %ecx, %ecx 161 ; X32-NEXT: mull %ecx 162 ; X32-NEXT: movl %edx, {{[0-9]+}}(%esp) # 4-byte Spill 163 ; X32-NEXT: movl %eax, {{[0-9]+}}(%esp) # 4-byte Spill 164 ; X32-NEXT: movl {{[0-9]+}}(%esp), %ebx # 4-byte Reload 165 ; X32-NEXT: addl %eax, %ebx 166 ; X32-NEXT: movl {{[0-9]+}}(%esp), %eax # 4-byte Reload 167 ; X32-NEXT: adcl %edx, %eax 168 ; X32-NEXT: addl %ebp, %ebx 169 ; X32-NEXT: adcl %esi, %eax 170 ; X32-NEXT: movl (%esp), %ecx # 4-byte Reload 171 ; X32-NEXT: addl %ecx, {{[0-9]+}}(%esp) # 4-byte Folded Spill 172 ; X32-NEXT: movl {{[0-9]+}}(%esp), %ecx # 4-byte Reload 173 ; X32-NEXT: adcl %ecx, {{[0-9]+}}(%esp) # 4-byte Folded Spill 174 ; X32-NEXT: adcl $0, %ebx 175 ; X32-NEXT: adcl $0, %eax 176 ; X32-NEXT: addl {{[0-9]+}}(%esp), %ebx # 4-byte Folded Reload 177 ; X32-NEXT: movl %ebx, {{[0-9]+}}(%esp) # 4-byte Spill 178 ; X32-NEXT: adcl {{[0-9]+}}(%esp), %eax # 4-byte Folded Reload 179 ; X32-NEXT: movl %eax, {{[0-9]+}}(%esp) # 4-byte Spill 180 ; X32-NEXT: setb (%esp) # 1-byte Folded Spill 181 ; X32-NEXT: movl {{[0-9]+}}(%esp), %esi # 4-byte Reload 182 ; X32-NEXT: movl %esi, %eax 183 ; X32-NEXT: movl %edi, {{[0-9]+}}(%esp) # 4-byte Spill 184 ; X32-NEXT: mull %edi 185 ; X32-NEXT: movl %edx, %ebx 186 ; X32-NEXT: movl %eax, {{[0-9]+}}(%esp) # 4-byte Spill 187 ; X32-NEXT: movl {{[0-9]+}}(%esp), %ecx # 4-byte Reload 188 ; X32-NEXT: movl %ecx, %eax 189 ; X32-NEXT: mull %edi 190 ; X32-NEXT: movl %edx, %edi 191 ; X32-NEXT: movl %eax, %ebp 192 ; X32-NEXT: addl %ebx, %ebp 193 ; X32-NEXT: adcl $0, %edi 194 ; X32-NEXT: movl %esi, %eax 195 ; X32-NEXT: movl {{[0-9]+}}(%esp), %ebx # 4-byte Reload 196 ; X32-NEXT: mull %ebx 197 ; X32-NEXT: movl %edx, %esi 198 ; X32-NEXT: addl %ebp, %eax 199 ; X32-NEXT: movl %eax, %ebp 200 ; X32-NEXT: adcl %edi, %esi 201 ; X32-NEXT: setb {{[0-9]+}}(%esp) # 1-byte Folded Spill 202 ; X32-NEXT: movl %ecx, %eax 203 ; X32-NEXT: mull %ebx 204 ; X32-NEXT: addl %esi, %eax 205 ; X32-NEXT: movzbl {{[0-9]+}}(%esp), %esi # 1-byte Folded Reload 206 ; X32-NEXT: adcl %esi, %edx 207 ; X32-NEXT: movl {{[0-9]+}}(%esp), %esi # 4-byte Reload 208 ; X32-NEXT: addl {{[0-9]+}}(%esp), %esi # 4-byte Folded Reload 209 ; X32-NEXT: movl {{[0-9]+}}(%esp), %ecx # 4-byte Reload 210 ; X32-NEXT: adcl {{[0-9]+}}(%esp), %ecx # 4-byte Folded Reload 211 ; X32-NEXT: addl %eax, %esi 212 ; X32-NEXT: adcl %edx, %ecx 213 ; X32-NEXT: movl {{[0-9]+}}(%esp), %eax # 4-byte Reload 214 ; X32-NEXT: addl %eax, {{[0-9]+}}(%esp) # 4-byte Folded Spill 215 ; X32-NEXT: adcl {{[0-9]+}}(%esp), %ebp # 4-byte Folded Reload 216 ; X32-NEXT: movl %ebp, {{[0-9]+}}(%esp) # 4-byte Spill 217 ; X32-NEXT: movzbl (%esp), %eax # 1-byte Folded Reload 218 ; X32-NEXT: adcl %eax, %esi 219 ; X32-NEXT: movl %esi, {{[0-9]+}}(%esp) # 4-byte Spill 220 ; X32-NEXT: adcl $0, %ecx 221 ; X32-NEXT: movl %ecx, {{[0-9]+}}(%esp) # 4-byte Spill 222 ; X32-NEXT: movl {{[0-9]+}}(%esp), %ecx 223 ; X32-NEXT: movl 16(%ecx), %esi 224 ; X32-NEXT: imull %esi, %ebx 225 ; X32-NEXT: movl %esi, %eax 226 ; X32-NEXT: movl {{[0-9]+}}(%esp), %edi # 4-byte Reload 227 ; X32-NEXT: mull %edi 228 ; X32-NEXT: movl %eax, {{[0-9]+}}(%esp) # 4-byte Spill 229 ; X32-NEXT: addl %ebx, %edx 230 ; X32-NEXT: movl 20(%ecx), %eax 231 ; X32-NEXT: movl %eax, {{[0-9]+}}(%esp) # 4-byte Spill 232 ; X32-NEXT: imull %eax, %edi 233 ; X32-NEXT: addl %edx, %edi 234 ; X32-NEXT: movl %edi, {{[0-9]+}}(%esp) # 4-byte Spill 235 ; X32-NEXT: movl 24(%ecx), %eax 236 ; X32-NEXT: movl %ecx, %ebp 237 ; X32-NEXT: movl %eax, %edi 238 ; X32-NEXT: movl {{[0-9]+}}(%esp), %ecx # 4-byte Reload 239 ; X32-NEXT: imull %ecx, %edi 240 ; X32-NEXT: movl {{[0-9]+}}(%esp), %ebx # 4-byte Reload 241 ; X32-NEXT: mull %ebx 242 ; X32-NEXT: movl %eax, (%esp) # 4-byte Spill 243 ; X32-NEXT: addl %edi, %edx 244 ; X32-NEXT: movl 28(%ebp), %ebp 245 ; X32-NEXT: imull %ebx, %ebp 246 ; X32-NEXT: addl %edx, %ebp 247 ; X32-NEXT: movl {{[0-9]+}}(%esp), %edx # 4-byte Reload 248 ; X32-NEXT: addl %edx, (%esp) # 4-byte Folded Spill 249 ; X32-NEXT: adcl {{[0-9]+}}(%esp), %ebp # 4-byte Folded Reload 250 ; X32-NEXT: movl %ebx, %eax 251 ; X32-NEXT: mull %esi 252 ; X32-NEXT: movl %edx, %ebx 253 ; X32-NEXT: movl %eax, {{[0-9]+}}(%esp) # 4-byte Spill 254 ; X32-NEXT: movl %ecx, %eax 255 ; X32-NEXT: mull %esi 256 ; X32-NEXT: movl %edx, %ecx 257 ; X32-NEXT: movl %eax, %edi 258 ; X32-NEXT: addl %ebx, %edi 259 ; X32-NEXT: adcl $0, %ecx 260 ; X32-NEXT: movl {{[0-9]+}}(%esp), %eax # 4-byte Reload 261 ; X32-NEXT: movl {{[0-9]+}}(%esp), %ebx # 4-byte Reload 262 ; X32-NEXT: mull %ebx 263 ; X32-NEXT: movl %edx, %esi 264 ; X32-NEXT: addl %edi, %eax 265 ; X32-NEXT: movl %eax, {{[0-9]+}}(%esp) # 4-byte Spill 266 ; X32-NEXT: adcl %ecx, %esi 267 ; X32-NEXT: setb %cl 268 ; X32-NEXT: movl {{[0-9]+}}(%esp), %eax # 4-byte Reload 269 ; X32-NEXT: mull %ebx 270 ; X32-NEXT: addl %esi, %eax 271 ; X32-NEXT: movzbl %cl, %ecx 272 ; X32-NEXT: adcl %ecx, %edx 273 ; X32-NEXT: addl (%esp), %eax # 4-byte Folded Reload 274 ; X32-NEXT: movl %eax, (%esp) # 4-byte Spill 275 ; X32-NEXT: adcl %ebp, %edx 276 ; X32-NEXT: movl %edx, {{[0-9]+}}(%esp) # 4-byte Spill 277 ; X32-NEXT: movl {{[0-9]+}}(%esp), %ebx 278 ; X32-NEXT: movl 28(%ebx), %ecx 279 ; X32-NEXT: movl {{[0-9]+}}(%esp), %esi # 4-byte Reload 280 ; X32-NEXT: imull %esi, %ecx 281 ; X32-NEXT: movl 24(%ebx), %edi 282 ; X32-NEXT: movl %esi, %eax 283 ; X32-NEXT: mull %edi 284 ; X32-NEXT: movl %eax, {{[0-9]+}}(%esp) # 4-byte Spill 285 ; X32-NEXT: addl %ecx, %edx 286 ; X32-NEXT: imull {{[0-9]+}}(%esp), %edi # 4-byte Folded Reload 287 ; X32-NEXT: addl %edx, %edi 288 ; X32-NEXT: movl 16(%ebx), %ebp 289 ; X32-NEXT: movl 20(%ebx), %ebx 290 ; X32-NEXT: movl {{[0-9]+}}(%esp), %eax # 4-byte Reload 291 ; X32-NEXT: movl %eax, %ecx 292 ; X32-NEXT: imull %ebx, %ecx 293 ; X32-NEXT: movl %ebx, {{[0-9]+}}(%esp) # 4-byte Spill 294 ; X32-NEXT: mull %ebp 295 ; X32-NEXT: addl %ecx, %edx 296 ; X32-NEXT: movl {{[0-9]+}}(%esp), %ecx # 4-byte Reload 297 ; X32-NEXT: imull %ebp, %ecx 298 ; X32-NEXT: addl %edx, %ecx 299 ; X32-NEXT: addl {{[0-9]+}}(%esp), %eax # 4-byte Folded Reload 300 ; X32-NEXT: movl %eax, {{[0-9]+}}(%esp) # 4-byte Spill 301 ; X32-NEXT: adcl %edi, %ecx 302 ; X32-NEXT: movl %ecx, {{[0-9]+}}(%esp) # 4-byte Spill 303 ; X32-NEXT: movl %ebp, %eax 304 ; X32-NEXT: mull %esi 305 ; X32-NEXT: movl %edx, %edi 306 ; X32-NEXT: movl %eax, {{[0-9]+}}(%esp) # 4-byte Spill 307 ; X32-NEXT: movl %ebx, %eax 308 ; X32-NEXT: mull %esi 309 ; X32-NEXT: movl %edx, %ecx 310 ; X32-NEXT: movl %eax, %ebx 311 ; X32-NEXT: addl %edi, %ebx 312 ; X32-NEXT: adcl $0, %ecx 313 ; X32-NEXT: movl %ebp, %eax 314 ; X32-NEXT: movl {{[0-9]+}}(%esp), %ebp # 4-byte Reload 315 ; X32-NEXT: mull %ebp 316 ; X32-NEXT: movl %edx, %edi 317 ; X32-NEXT: movl %eax, %esi 318 ; X32-NEXT: addl %ebx, %esi 319 ; X32-NEXT: adcl %ecx, %edi 320 ; X32-NEXT: setb %cl 321 ; X32-NEXT: movl {{[0-9]+}}(%esp), %eax # 4-byte Reload 322 ; X32-NEXT: mull %ebp 323 ; X32-NEXT: addl %edi, %eax 324 ; X32-NEXT: movzbl %cl, %ecx 325 ; X32-NEXT: adcl %ecx, %edx 326 ; X32-NEXT: addl {{[0-9]+}}(%esp), %eax # 4-byte Folded Reload 327 ; X32-NEXT: adcl {{[0-9]+}}(%esp), %edx # 4-byte Folded Reload 328 ; X32-NEXT: movl {{[0-9]+}}(%esp), %ecx # 4-byte Reload 329 ; X32-NEXT: addl {{[0-9]+}}(%esp), %ecx # 4-byte Folded Reload 330 ; X32-NEXT: adcl {{[0-9]+}}(%esp), %esi # 4-byte Folded Reload 331 ; X32-NEXT: adcl (%esp), %eax # 4-byte Folded Reload 332 ; X32-NEXT: adcl {{[0-9]+}}(%esp), %edx # 4-byte Folded Reload 333 ; X32-NEXT: addl {{[0-9]+}}(%esp), %ecx # 4-byte Folded Reload 334 ; X32-NEXT: movl %ecx, %ebx 335 ; X32-NEXT: adcl {{[0-9]+}}(%esp), %esi # 4-byte Folded Reload 336 ; X32-NEXT: adcl {{[0-9]+}}(%esp), %eax # 4-byte Folded Reload 337 ; X32-NEXT: adcl {{[0-9]+}}(%esp), %edx # 4-byte Folded Reload 338 ; X32-NEXT: movl {{[0-9]+}}(%esp), %ecx 339 ; X32-NEXT: movl {{[0-9]+}}(%esp), %edi # 4-byte Reload 340 ; X32-NEXT: movl %edi, (%ecx) 341 ; X32-NEXT: movl {{[0-9]+}}(%esp), %edi # 4-byte Reload 342 ; X32-NEXT: movl %edi, 4(%ecx) 343 ; X32-NEXT: movl {{[0-9]+}}(%esp), %edi # 4-byte Reload 344 ; X32-NEXT: movl %edi, 8(%ecx) 345 ; X32-NEXT: movl {{[0-9]+}}(%esp), %edi # 4-byte Reload 346 ; X32-NEXT: movl %edi, 12(%ecx) 347 ; X32-NEXT: movl %ebx, 16(%ecx) 348 ; X32-NEXT: movl %esi, 20(%ecx) 349 ; X32-NEXT: movl %eax, 24(%ecx) 350 ; X32-NEXT: movl %edx, 28(%ecx) 351 ; X32-NEXT: addl $88, %esp 352 ; X32-NEXT: .cfi_def_cfa_offset 20 353 ; X32-NEXT: popl %esi 354 ; X32-NEXT: .cfi_def_cfa_offset 16 355 ; X32-NEXT: popl %edi 356 ; X32-NEXT: .cfi_def_cfa_offset 12 357 ; X32-NEXT: popl %ebx 358 ; X32-NEXT: .cfi_def_cfa_offset 8 359 ; X32-NEXT: popl %ebp 360 ; X32-NEXT: .cfi_def_cfa_offset 4 361 ; X32-NEXT: retl 362 ; 363 ; X64-LABEL: test: 364 ; X64: # %bb.0: # %entry 365 ; X64-NEXT: pushq %r15 366 ; X64-NEXT: .cfi_def_cfa_offset 16 367 ; X64-NEXT: pushq %r14 368 ; X64-NEXT: .cfi_def_cfa_offset 24 369 ; X64-NEXT: pushq %rbx 370 ; X64-NEXT: .cfi_def_cfa_offset 32 371 ; X64-NEXT: .cfi_offset %rbx, -32 372 ; X64-NEXT: .cfi_offset %r14, -24 373 ; X64-NEXT: .cfi_offset %r15, -16 374 ; X64-NEXT: movq %rdx, %r9 375 ; X64-NEXT: movq (%rdi), %r11 376 ; X64-NEXT: movq 8(%rdi), %r8 377 ; X64-NEXT: movq 16(%rdi), %rbx 378 ; X64-NEXT: movq 16(%rsi), %r10 379 ; X64-NEXT: movq (%rsi), %rcx 380 ; X64-NEXT: movq 8(%rsi), %r15 381 ; X64-NEXT: movq 24(%rdi), %rdi 382 ; X64-NEXT: imulq %rcx, %rdi 383 ; X64-NEXT: movq %rcx, %rax 384 ; X64-NEXT: mulq %rbx 385 ; X64-NEXT: movq %rax, %r14 386 ; X64-NEXT: addq %rdi, %rdx 387 ; X64-NEXT: imulq %r15, %rbx 388 ; X64-NEXT: addq %rdx, %rbx 389 ; X64-NEXT: movq %r10, %rdi 390 ; X64-NEXT: imulq %r8, %rdi 391 ; X64-NEXT: movq %r10, %rax 392 ; X64-NEXT: mulq %r11 393 ; X64-NEXT: movq %rax, %r10 394 ; X64-NEXT: addq %rdi, %rdx 395 ; X64-NEXT: movq 24(%rsi), %rdi 396 ; X64-NEXT: imulq %r11, %rdi 397 ; X64-NEXT: addq %rdx, %rdi 398 ; X64-NEXT: addq %r14, %r10 399 ; X64-NEXT: adcq %rbx, %rdi 400 ; X64-NEXT: movq %r11, %rax 401 ; X64-NEXT: mulq %rcx 402 ; X64-NEXT: movq %rdx, %rsi 403 ; X64-NEXT: movq %rax, %r14 404 ; X64-NEXT: movq %r8, %rax 405 ; X64-NEXT: mulq %rcx 406 ; X64-NEXT: movq %rdx, %rcx 407 ; X64-NEXT: movq %rax, %rbx 408 ; X64-NEXT: addq %rsi, %rbx 409 ; X64-NEXT: adcq $0, %rcx 410 ; X64-NEXT: movq %r11, %rax 411 ; X64-NEXT: mulq %r15 412 ; X64-NEXT: movq %rdx, %rsi 413 ; X64-NEXT: movq %rax, %r11 414 ; X64-NEXT: addq %rbx, %r11 415 ; X64-NEXT: adcq %rcx, %rsi 416 ; X64-NEXT: setb %al 417 ; X64-NEXT: movzbl %al, %ecx 418 ; X64-NEXT: movq %r8, %rax 419 ; X64-NEXT: mulq %r15 420 ; X64-NEXT: addq %rsi, %rax 421 ; X64-NEXT: adcq %rcx, %rdx 422 ; X64-NEXT: addq %r10, %rax 423 ; X64-NEXT: adcq %rdi, %rdx 424 ; X64-NEXT: movq %r14, (%r9) 425 ; X64-NEXT: movq %r11, 8(%r9) 426 ; X64-NEXT: movq %rax, 16(%r9) 427 ; X64-NEXT: movq %rdx, 24(%r9) 428 ; X64-NEXT: popq %rbx 429 ; X64-NEXT: .cfi_def_cfa_offset 24 430 ; X64-NEXT: popq %r14 431 ; X64-NEXT: .cfi_def_cfa_offset 16 432 ; X64-NEXT: popq %r15 433 ; X64-NEXT: .cfi_def_cfa_offset 8 434 ; X64-NEXT: retq 435 entry: 436 %av = load i256, i256* %a 437 %bv = load i256, i256* %b 438 %r = mul i256 %av, %bv 439 store i256 %r, i256* %out 440 ret void 441 } 442 443 attributes #0 = { norecurse nounwind uwtable } 444