138 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=i386-unknown | FileCheck %s --check-prefix=X863; RUN: llc < %s -mtriple=x86_64-unknown-gnux32 | FileCheck %s --check-prefixes=X324; RUN: llc < %s -mtriple=x86_64-unknown | FileCheck %s --check-prefix=X645 6define void @add(ptr %p, ptr %q) nounwind {7; X86-LABEL: add:8; X86: # %bb.0:9; X86-NEXT: pushl %ebp10; X86-NEXT: pushl %ebx11; X86-NEXT: pushl %edi12; X86-NEXT: pushl %esi13; X86-NEXT: subl $8, %esp14; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx15; X86-NEXT: movl 28(%ecx), %eax16; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill17; X86-NEXT: movl 24(%ecx), %eax18; X86-NEXT: movl %eax, (%esp) # 4-byte Spill19; X86-NEXT: movl 20(%ecx), %esi20; X86-NEXT: movl 16(%ecx), %edi21; X86-NEXT: movl 12(%ecx), %ebx22; X86-NEXT: movl 8(%ecx), %ebp23; X86-NEXT: movl (%ecx), %edx24; X86-NEXT: movl 4(%ecx), %ecx25; X86-NEXT: movl {{[0-9]+}}(%esp), %eax26; X86-NEXT: addl %edx, (%eax)27; X86-NEXT: adcl %ecx, 4(%eax)28; X86-NEXT: adcl %ebp, 8(%eax)29; X86-NEXT: adcl %ebx, 12(%eax)30; X86-NEXT: adcl %edi, 16(%eax)31; X86-NEXT: adcl %esi, 20(%eax)32; X86-NEXT: movl (%esp), %ecx # 4-byte Reload33; X86-NEXT: adcl %ecx, 24(%eax)34; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload35; X86-NEXT: adcl %ecx, 28(%eax)36; X86-NEXT: addl $8, %esp37; X86-NEXT: popl %esi38; X86-NEXT: popl %edi39; X86-NEXT: popl %ebx40; X86-NEXT: popl %ebp41; X86-NEXT: retl42;43; X32-LABEL: add:44; X32: # %bb.0:45; X32-NEXT: movq 24(%esi), %rax46; X32-NEXT: movq 16(%esi), %rcx47; X32-NEXT: movq (%esi), %rdx48; X32-NEXT: movq 8(%esi), %rsi49; X32-NEXT: addq %rdx, (%edi)50; X32-NEXT: adcq %rsi, 8(%edi)51; X32-NEXT: adcq %rcx, 16(%edi)52; X32-NEXT: adcq %rax, 24(%edi)53; X32-NEXT: retq54;55; X64-LABEL: add:56; X64: # %bb.0:57; X64-NEXT: movq 24(%rsi), %rax58; X64-NEXT: movq 16(%rsi), %rcx59; X64-NEXT: movq (%rsi), %rdx60; X64-NEXT: movq 8(%rsi), %rsi61; X64-NEXT: addq %rdx, (%rdi)62; X64-NEXT: adcq %rsi, 8(%rdi)63; X64-NEXT: adcq %rcx, 16(%rdi)64; X64-NEXT: adcq %rax, 24(%rdi)65; X64-NEXT: retq66 %a = load i256, ptr %p67 %b = load i256, ptr %q68 %c = add i256 %a, %b69 store i256 %c, ptr %p70 ret void71}72define void @sub(ptr %p, ptr %q) nounwind {73; X86-LABEL: sub:74; X86: # %bb.0:75; X86-NEXT: pushl %ebp76; X86-NEXT: pushl %ebx77; X86-NEXT: pushl %edi78; X86-NEXT: pushl %esi79; X86-NEXT: subl $8, %esp80; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx81; X86-NEXT: movl 28(%ecx), %eax82; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill83; X86-NEXT: movl 24(%ecx), %eax84; X86-NEXT: movl %eax, (%esp) # 4-byte Spill85; X86-NEXT: movl 20(%ecx), %esi86; X86-NEXT: movl 16(%ecx), %edi87; X86-NEXT: movl 12(%ecx), %ebx88; X86-NEXT: movl 8(%ecx), %ebp89; X86-NEXT: movl (%ecx), %edx90; X86-NEXT: movl 4(%ecx), %ecx91; X86-NEXT: movl {{[0-9]+}}(%esp), %eax92; X86-NEXT: subl %edx, (%eax)93; X86-NEXT: sbbl %ecx, 4(%eax)94; X86-NEXT: sbbl %ebp, 8(%eax)95; X86-NEXT: sbbl %ebx, 12(%eax)96; X86-NEXT: sbbl %edi, 16(%eax)97; X86-NEXT: sbbl %esi, 20(%eax)98; X86-NEXT: movl (%esp), %ecx # 4-byte Reload99; X86-NEXT: sbbl %ecx, 24(%eax)100; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload101; X86-NEXT: sbbl %ecx, 28(%eax)102; X86-NEXT: addl $8, %esp103; X86-NEXT: popl %esi104; X86-NEXT: popl %edi105; X86-NEXT: popl %ebx106; X86-NEXT: popl %ebp107; X86-NEXT: retl108;109; X32-LABEL: sub:110; X32: # %bb.0:111; X32-NEXT: movq 24(%esi), %rax112; X32-NEXT: movq 16(%esi), %rcx113; X32-NEXT: movq (%esi), %rdx114; X32-NEXT: movq 8(%esi), %rsi115; X32-NEXT: subq %rdx, (%edi)116; X32-NEXT: sbbq %rsi, 8(%edi)117; X32-NEXT: sbbq %rcx, 16(%edi)118; X32-NEXT: sbbq %rax, 24(%edi)119; X32-NEXT: retq120;121; X64-LABEL: sub:122; X64: # %bb.0:123; X64-NEXT: movq 24(%rsi), %rax124; X64-NEXT: movq 16(%rsi), %rcx125; X64-NEXT: movq (%rsi), %rdx126; X64-NEXT: movq 8(%rsi), %rsi127; X64-NEXT: subq %rdx, (%rdi)128; X64-NEXT: sbbq %rsi, 8(%rdi)129; X64-NEXT: sbbq %rcx, 16(%rdi)130; X64-NEXT: sbbq %rax, 24(%rdi)131; X64-NEXT: retq132 %a = load i256, ptr %p133 %b = load i256, ptr %q134 %c = sub i256 %a, %b135 store i256 %c, ptr %p136 ret void137}138