Home | History | Annotate | Download | only in X86
      1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
      2 ; RUN: llc < %s -mtriple=x86_64-unknown | FileCheck %s --check-prefix=X64
      3 ; RUN: llc < %s -mtriple=i386-unknown | FileCheck %s --check-prefix=X86
      4 
      5 define i128 @foo(i128 %t, i128 %u) {
      6 ; X64-LABEL: foo:
      7 ; X64:       # %bb.0:
      8 ; X64-NEXT:    movq %rdx, %r8
      9 ; X64-NEXT:    imulq %rdi, %rcx
     10 ; X64-NEXT:    movq %rdi, %rax
     11 ; X64-NEXT:    mulq %rdx
     12 ; X64-NEXT:    addq %rcx, %rdx
     13 ; X64-NEXT:    imulq %r8, %rsi
     14 ; X64-NEXT:    addq %rsi, %rdx
     15 ; X64-NEXT:    retq
     16 ;
     17 ; X86-LABEL: foo:
     18 ; X86:       # %bb.0:
     19 ; X86-NEXT:    pushl %ebp
     20 ; X86-NEXT:    .cfi_def_cfa_offset 8
     21 ; X86-NEXT:    pushl %ebx
     22 ; X86-NEXT:    .cfi_def_cfa_offset 12
     23 ; X86-NEXT:    pushl %edi
     24 ; X86-NEXT:    .cfi_def_cfa_offset 16
     25 ; X86-NEXT:    pushl %esi
     26 ; X86-NEXT:    .cfi_def_cfa_offset 20
     27 ; X86-NEXT:    subl $8, %esp
     28 ; X86-NEXT:    .cfi_def_cfa_offset 28
     29 ; X86-NEXT:    .cfi_offset %esi, -20
     30 ; X86-NEXT:    .cfi_offset %edi, -16
     31 ; X86-NEXT:    .cfi_offset %ebx, -12
     32 ; X86-NEXT:    .cfi_offset %ebp, -8
     33 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
     34 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi
     35 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi
     36 ; X86-NEXT:    imull %edx, %esi
     37 ; X86-NEXT:    movl %edi, %eax
     38 ; X86-NEXT:    mull %edx
     39 ; X86-NEXT:    movl %eax, %ebx
     40 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
     41 ; X86-NEXT:    imull %edi, %ecx
     42 ; X86-NEXT:    addl %edx, %ecx
     43 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
     44 ; X86-NEXT:    addl %esi, %ecx
     45 ; X86-NEXT:    movl %eax, %esi
     46 ; X86-NEXT:    imull {{[0-9]+}}(%esp), %esi
     47 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %ebp
     48 ; X86-NEXT:    mull %ebp
     49 ; X86-NEXT:    addl %esi, %edx
     50 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi
     51 ; X86-NEXT:    imull %ebp, %edi
     52 ; X86-NEXT:    addl %edx, %edi
     53 ; X86-NEXT:    addl %ebx, %eax
     54 ; X86-NEXT:    movl %eax, {{[0-9]+}}(%esp) # 4-byte Spill
     55 ; X86-NEXT:    adcl %ecx, %edi
     56 ; X86-NEXT:    movl %ebp, %eax
     57 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
     58 ; X86-NEXT:    mull %ecx
     59 ; X86-NEXT:    movl %edx, %ebx
     60 ; X86-NEXT:    movl %eax, (%esp) # 4-byte Spill
     61 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
     62 ; X86-NEXT:    mull %ecx
     63 ; X86-NEXT:    movl %edx, %esi
     64 ; X86-NEXT:    movl %eax, %ecx
     65 ; X86-NEXT:    addl %ebx, %ecx
     66 ; X86-NEXT:    adcl $0, %esi
     67 ; X86-NEXT:    movl %ebp, %eax
     68 ; X86-NEXT:    mull {{[0-9]+}}(%esp)
     69 ; X86-NEXT:    movl %edx, %ebx
     70 ; X86-NEXT:    movl %eax, %ebp
     71 ; X86-NEXT:    addl %ecx, %ebp
     72 ; X86-NEXT:    adcl %esi, %ebx
     73 ; X86-NEXT:    setb %cl
     74 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
     75 ; X86-NEXT:    mull {{[0-9]+}}(%esp)
     76 ; X86-NEXT:    addl %ebx, %eax
     77 ; X86-NEXT:    movzbl %cl, %ecx
     78 ; X86-NEXT:    adcl %ecx, %edx
     79 ; X86-NEXT:    addl {{[0-9]+}}(%esp), %eax # 4-byte Folded Reload
     80 ; X86-NEXT:    adcl %edi, %edx
     81 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
     82 ; X86-NEXT:    movl (%esp), %esi # 4-byte Reload
     83 ; X86-NEXT:    movl %esi, (%ecx)
     84 ; X86-NEXT:    movl %ebp, 4(%ecx)
     85 ; X86-NEXT:    movl %eax, 8(%ecx)
     86 ; X86-NEXT:    movl %edx, 12(%ecx)
     87 ; X86-NEXT:    movl %ecx, %eax
     88 ; X86-NEXT:    addl $8, %esp
     89 ; X86-NEXT:    .cfi_def_cfa_offset 20
     90 ; X86-NEXT:    popl %esi
     91 ; X86-NEXT:    .cfi_def_cfa_offset 16
     92 ; X86-NEXT:    popl %edi
     93 ; X86-NEXT:    .cfi_def_cfa_offset 12
     94 ; X86-NEXT:    popl %ebx
     95 ; X86-NEXT:    .cfi_def_cfa_offset 8
     96 ; X86-NEXT:    popl %ebp
     97 ; X86-NEXT:    .cfi_def_cfa_offset 4
     98 ; X86-NEXT:    retl $4
     99   %k = mul i128 %t, %u
    100   ret i128 %k
    101 }
    102