brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.9 KiB · 724b2dc Raw
321 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -verify-machineinstrs -mtriple=i686-unknown-unknown | FileCheck %s --check-prefix=X863; RUN: llc < %s -verify-machineinstrs -mtriple=x86_64-unknown-unknown | FileCheck %s --check-prefix=X644 5declare i8 @llvm.abs.i8(i8, i1)6declare i16 @llvm.abs.i16(i16, i1)7declare i24 @llvm.abs.i24(i24, i1)8declare i32 @llvm.abs.i32(i32, i1)9declare i64 @llvm.abs.i64(i64, i1)10declare i128 @llvm.abs.i128(i128, i1)11 12define i8 @neg_abs_i8(i8 %x) nounwind {13; X86-LABEL: neg_abs_i8:14; X86:       # %bb.0:15; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx16; X86-NEXT:    movl %ecx, %eax17; X86-NEXT:    sarb $7, %al18; X86-NEXT:    xorb %al, %cl19; X86-NEXT:    subb %cl, %al20; X86-NEXT:    retl21;22; X64-LABEL: neg_abs_i8:23; X64:       # %bb.0:24; X64-NEXT:    movl %edi, %eax25; X64-NEXT:    sarb $7, %al26; X64-NEXT:    xorb %al, %dil27; X64-NEXT:    subb %dil, %al28; X64-NEXT:    retq29  %abs = tail call i8 @llvm.abs.i8(i8 %x, i1 true)30  %neg = sub nsw i8 0, %abs31  ret i8 %neg32}33 34define i16 @neg_abs_i16(i16 %x) nounwind {35; X86-LABEL: neg_abs_i16:36; X86:       # %bb.0:37; X86-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx38; X86-NEXT:    movswl %cx, %eax39; X86-NEXT:    sarl $15, %eax40; X86-NEXT:    xorl %eax, %ecx41; X86-NEXT:    subl %ecx, %eax42; X86-NEXT:    # kill: def $ax killed $ax killed $eax43; X86-NEXT:    retl44;45; X64-LABEL: neg_abs_i16:46; X64:       # %bb.0:47; X64-NEXT:    movl %edi, %eax48; X64-NEXT:    negw %ax49; X64-NEXT:    cmovnsw %di, %ax50; X64-NEXT:    retq51  %abs = tail call i16 @llvm.abs.i16(i16 %x, i1 true)52  %neg = sub nsw i16 0, %abs53  ret i16 %neg54}55 56define i32 @neg_abs_i32(i32 %x) nounwind {57; X86-LABEL: neg_abs_i32:58; X86:       # %bb.0:59; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx60; X86-NEXT:    movl %ecx, %eax61; X86-NEXT:    sarl $31, %eax62; X86-NEXT:    xorl %eax, %ecx63; X86-NEXT:    subl %ecx, %eax64; X86-NEXT:    retl65;66; X64-LABEL: neg_abs_i32:67; X64:       # %bb.0:68; X64-NEXT:    movl %edi, %eax69; X64-NEXT:    negl %eax70; X64-NEXT:    cmovnsl %edi, %eax71; X64-NEXT:    retq72  %abs = tail call i32 @llvm.abs.i32(i32 %x, i1 true)73  %neg = sub nsw i32 0, %abs74  ret i32 %neg75}76 77define i64 @neg_abs_i64(i64 %x) nounwind {78; X86-LABEL: neg_abs_i64:79; X86:       # %bb.0:80; X86-NEXT:    pushl %esi81; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx82; X86-NEXT:    movl %ecx, %edx83; X86-NEXT:    sarl $31, %edx84; X86-NEXT:    xorl %edx, %ecx85; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi86; X86-NEXT:    xorl %edx, %esi87; X86-NEXT:    movl %edx, %eax88; X86-NEXT:    subl %esi, %eax89; X86-NEXT:    sbbl %ecx, %edx90; X86-NEXT:    popl %esi91; X86-NEXT:    retl92;93; X64-LABEL: neg_abs_i64:94; X64:       # %bb.0:95; X64-NEXT:    movq %rdi, %rax96; X64-NEXT:    negq %rax97; X64-NEXT:    cmovnsq %rdi, %rax98; X64-NEXT:    retq99  %abs = tail call i64 @llvm.abs.i64(i64 %x, i1 true)100  %neg = sub nsw i64 0, %abs101  ret i64 %neg102}103 104define i128 @neg_abs_i128(i128 %x) nounwind {105; X86-LABEL: neg_abs_i128:106; X86:       # %bb.0:107; X86-NEXT:    pushl %ebp108; X86-NEXT:    movl %esp, %ebp109; X86-NEXT:    pushl %ebx110; X86-NEXT:    pushl %edi111; X86-NEXT:    pushl %esi112; X86-NEXT:    andl $-16, %esp113; X86-NEXT:    subl $16, %esp114; X86-NEXT:    movl 36(%ebp), %eax115; X86-NEXT:    movl %eax, %ecx116; X86-NEXT:    sarl $31, %ecx117; X86-NEXT:    xorl %ecx, %eax118; X86-NEXT:    movl 32(%ebp), %edx119; X86-NEXT:    xorl %ecx, %edx120; X86-NEXT:    movl 28(%ebp), %esi121; X86-NEXT:    xorl %ecx, %esi122; X86-NEXT:    movl 24(%ebp), %edi123; X86-NEXT:    xorl %ecx, %edi124; X86-NEXT:    movl %ecx, %ebx125; X86-NEXT:    subl %edi, %ebx126; X86-NEXT:    movl %ecx, %edi127; X86-NEXT:    sbbl %esi, %edi128; X86-NEXT:    movl %ecx, %esi129; X86-NEXT:    sbbl %edx, %esi130; X86-NEXT:    sbbl %eax, %ecx131; X86-NEXT:    movl 8(%ebp), %eax132; X86-NEXT:    movl %ebx, (%eax)133; X86-NEXT:    movl %edi, 4(%eax)134; X86-NEXT:    movl %esi, 8(%eax)135; X86-NEXT:    movl %ecx, 12(%eax)136; X86-NEXT:    leal -12(%ebp), %esp137; X86-NEXT:    popl %esi138; X86-NEXT:    popl %edi139; X86-NEXT:    popl %ebx140; X86-NEXT:    popl %ebp141; X86-NEXT:    retl $4142;143; X64-LABEL: neg_abs_i128:144; X64:       # %bb.0:145; X64-NEXT:    movq %rsi, %rdx146; X64-NEXT:    sarq $63, %rdx147; X64-NEXT:    xorq %rdx, %rsi148; X64-NEXT:    xorq %rdx, %rdi149; X64-NEXT:    movq %rdx, %rax150; X64-NEXT:    subq %rdi, %rax151; X64-NEXT:    sbbq %rsi, %rdx152; X64-NEXT:    retq153  %abs = tail call i128 @llvm.abs.i128(i128 %x, i1 true)154  %neg = sub nsw i128 0, %abs155  ret i128 %neg156}157 158define i8 @sub_abs_i8(i8 %x, i8 %y) nounwind {159; X86-LABEL: sub_abs_i8:160; X86:       # %bb.0:161; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx162; X86-NEXT:    movl %ecx, %eax163; X86-NEXT:    sarb $7, %al164; X86-NEXT:    xorb %al, %cl165; X86-NEXT:    subb %cl, %al166; X86-NEXT:    addb {{[0-9]+}}(%esp), %al167; X86-NEXT:    retl168;169; X64-LABEL: sub_abs_i8:170; X64:       # %bb.0:171; X64-NEXT:    movl %edi, %eax172; X64-NEXT:    sarb $7, %al173; X64-NEXT:    xorb %al, %dil174; X64-NEXT:    subb %dil, %al175; X64-NEXT:    addb %sil, %al176; X64-NEXT:    retq177  %abs = tail call i8 @llvm.abs.i8(i8 %x, i1 false)178  %neg = sub nsw i8 %y, %abs179  ret i8 %neg180}181 182define i16 @sub_abs_i16(i16 %x, i16 %y) nounwind {183; X86-LABEL: sub_abs_i16:184; X86:       # %bb.0:185; X86-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx186; X86-NEXT:    movswl %cx, %eax187; X86-NEXT:    sarl $15, %eax188; X86-NEXT:    xorl %eax, %ecx189; X86-NEXT:    subl %ecx, %eax190; X86-NEXT:    addl {{[0-9]+}}(%esp), %eax191; X86-NEXT:    # kill: def $ax killed $ax killed $eax192; X86-NEXT:    retl193;194; X64-LABEL: sub_abs_i16:195; X64:       # %bb.0:196; X64-NEXT:    movl %edi, %eax197; X64-NEXT:    negw %ax198; X64-NEXT:    cmovnsw %di, %ax199; X64-NEXT:    addl %esi, %eax200; X64-NEXT:    # kill: def $ax killed $ax killed $eax201; X64-NEXT:    retq202  %abs = tail call i16 @llvm.abs.i16(i16 %x, i1 false)203  %neg = sub i16 %y, %abs204  ret i16 %neg205}206 207define i32 @sub_abs_i32(i32 %x, i32 %y) nounwind {208; X86-LABEL: sub_abs_i32:209; X86:       # %bb.0:210; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx211; X86-NEXT:    movl %ecx, %eax212; X86-NEXT:    sarl $31, %eax213; X86-NEXT:    xorl %eax, %ecx214; X86-NEXT:    subl %ecx, %eax215; X86-NEXT:    addl {{[0-9]+}}(%esp), %eax216; X86-NEXT:    retl217;218; X64-LABEL: sub_abs_i32:219; X64:       # %bb.0:220; X64-NEXT:    movl %edi, %eax221; X64-NEXT:    negl %eax222; X64-NEXT:    cmovnsl %edi, %eax223; X64-NEXT:    addl %esi, %eax224; X64-NEXT:    retq225  %abs = tail call i32 @llvm.abs.i32(i32 %x, i1 false)226  %neg = sub i32 %y, %abs227  ret i32 %neg228}229 230define i64 @sub_abs_i64(i64 %x, i64 %y) nounwind {231; X86-LABEL: sub_abs_i64:232; X86:       # %bb.0:233; X86-NEXT:    pushl %edi234; X86-NEXT:    pushl %esi235; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax236; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx237; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx238; X86-NEXT:    movl %ecx, %esi239; X86-NEXT:    sarl $31, %esi240; X86-NEXT:    xorl %esi, %ecx241; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi242; X86-NEXT:    xorl %esi, %edi243; X86-NEXT:    subl %esi, %edi244; X86-NEXT:    sbbl %esi, %ecx245; X86-NEXT:    subl %edi, %eax246; X86-NEXT:    sbbl %ecx, %edx247; X86-NEXT:    popl %esi248; X86-NEXT:    popl %edi249; X86-NEXT:    retl250;251; X64-LABEL: sub_abs_i64:252; X64:       # %bb.0:253; X64-NEXT:    movq %rdi, %rax254; X64-NEXT:    negq %rax255; X64-NEXT:    cmovnsq %rdi, %rax256; X64-NEXT:    addq %rsi, %rax257; X64-NEXT:    retq258  %abs = tail call i64 @llvm.abs.i64(i64 %x, i1 false)259  %neg = sub i64 %y, %abs260  ret i64 %neg261}262 263define i128 @sub_abs_i128(i128 %x, i128 %y) nounwind {264; X86-LABEL: sub_abs_i128:265; X86:       # %bb.0:266; X86-NEXT:    pushl %ebp267; X86-NEXT:    movl %esp, %ebp268; X86-NEXT:    pushl %edi269; X86-NEXT:    pushl %esi270; X86-NEXT:    andl $-16, %esp271; X86-NEXT:    movl 36(%ebp), %eax272; X86-NEXT:    movl %eax, %edx273; X86-NEXT:    sarl $31, %edx274; X86-NEXT:    xorl %edx, %eax275; X86-NEXT:    movl 32(%ebp), %ecx276; X86-NEXT:    xorl %edx, %ecx277; X86-NEXT:    movl 28(%ebp), %esi278; X86-NEXT:    xorl %edx, %esi279; X86-NEXT:    movl 24(%ebp), %edi280; X86-NEXT:    xorl %edx, %edi281; X86-NEXT:    subl %edx, %edi282; X86-NEXT:    sbbl %edx, %esi283; X86-NEXT:    sbbl %edx, %ecx284; X86-NEXT:    sbbl %edx, %eax285; X86-NEXT:    movl 40(%ebp), %edx286; X86-NEXT:    subl %edi, %edx287; X86-NEXT:    movl 44(%ebp), %edi288; X86-NEXT:    sbbl %esi, %edi289; X86-NEXT:    movl 48(%ebp), %esi290; X86-NEXT:    sbbl %ecx, %esi291; X86-NEXT:    movl 52(%ebp), %ecx292; X86-NEXT:    sbbl %eax, %ecx293; X86-NEXT:    movl 8(%ebp), %eax294; X86-NEXT:    movl %edx, (%eax)295; X86-NEXT:    movl %edi, 4(%eax)296; X86-NEXT:    movl %esi, 8(%eax)297; X86-NEXT:    movl %ecx, 12(%eax)298; X86-NEXT:    leal -8(%ebp), %esp299; X86-NEXT:    popl %esi300; X86-NEXT:    popl %edi301; X86-NEXT:    popl %ebp302; X86-NEXT:    retl $4303;304; X64-LABEL: sub_abs_i128:305; X64:       # %bb.0:306; X64-NEXT:    movq %rdx, %rax307; X64-NEXT:    movq %rsi, %rdx308; X64-NEXT:    sarq $63, %rdx309; X64-NEXT:    xorq %rdx, %rsi310; X64-NEXT:    xorq %rdx, %rdi311; X64-NEXT:    subq %rdx, %rdi312; X64-NEXT:    sbbq %rdx, %rsi313; X64-NEXT:    subq %rdi, %rax314; X64-NEXT:    sbbq %rsi, %rcx315; X64-NEXT:    movq %rcx, %rdx316; X64-NEXT:    retq317  %abs = tail call i128 @llvm.abs.i128(i128 %x, i1 false)318  %neg = sub i128 %y, %abs319  ret i128 %neg320}321