563 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=i686-linux | FileCheck %s -check-prefixes=X863; RUN: llc < %s -mtriple=x86_64-linux | FileCheck %s -check-prefixes=X644 5define i1 @is_nan_f80(x86_fp80 %x) nounwind {6; X86-LABEL: is_nan_f80:7; X86: # %bb.0: # %entry8; X86-NEXT: fldt {{[0-9]+}}(%esp)9; X86-NEXT: fucomp %st(0)10; X86-NEXT: fnstsw %ax11; X86-NEXT: # kill: def $ah killed $ah killed $ax12; X86-NEXT: sahf13; X86-NEXT: setp %al14; X86-NEXT: retl15;16; X64-LABEL: is_nan_f80:17; X64: # %bb.0: # %entry18; X64-NEXT: fldt {{[0-9]+}}(%rsp)19; X64-NEXT: fucompi %st(0), %st20; X64-NEXT: setp %al21; X64-NEXT: retq22entry:23 %0 = tail call i1 @llvm.is.fpclass.f80(x86_fp80 %x, i32 3) ; "nan"24 ret i1 %025}26 27define i1 @is_nan_f80_strict(x86_fp80 %x) nounwind strictfp {28; X86-LABEL: is_nan_f80_strict:29; X86: # %bb.0: # %entry30; X86-NEXT: pushl %esi31; X86-NEXT: movl {{[0-9]+}}(%esp), %eax32; X86-NEXT: movzwl {{[0-9]+}}(%esp), %ecx33; X86-NEXT: andl $32767, %ecx # imm = 0x7FFF34; X86-NEXT: xorl %edx, %edx35; X86-NEXT: cmpl {{[0-9]+}}(%esp), %edx36; X86-NEXT: movl $-2147483648, %esi # imm = 0x8000000037; X86-NEXT: sbbl %eax, %esi38; X86-NEXT: movl $32767, %esi # imm = 0x7FFF39; X86-NEXT: sbbl %ecx, %esi40; X86-NEXT: sbbl %edx, %edx41; X86-NEXT: setl %dl42; X86-NEXT: testl %ecx, %ecx43; X86-NEXT: sete %cl44; X86-NEXT: shrl $31, %eax45; X86-NEXT: xorb %cl, %al46; X86-NEXT: xorb $1, %al47; X86-NEXT: orb %dl, %al48; X86-NEXT: # kill: def $al killed $al killed $eax49; X86-NEXT: popl %esi50; X86-NEXT: retl51;52; X64-LABEL: is_nan_f80_strict:53; X64: # %bb.0: # %entry54; X64-NEXT: movzwl {{[0-9]+}}(%rsp), %eax55; X64-NEXT: movq {{[0-9]+}}(%rsp), %rcx56; X64-NEXT: andl $32767, %eax # imm = 0x7FFF57; X64-NEXT: movabsq $-9223372036854775808, %rdx # imm = 0x800000000000000058; X64-NEXT: cmpq %rcx, %rdx59; X64-NEXT: movl $32767, %edx # imm = 0x7FFF60; X64-NEXT: sbbq %rax, %rdx61; X64-NEXT: setl %dl62; X64-NEXT: shrq $63, %rcx63; X64-NEXT: testq %rax, %rax64; X64-NEXT: sete %al65; X64-NEXT: xorb %cl, %al66; X64-NEXT: xorb $1, %al67; X64-NEXT: orb %dl, %al68; X64-NEXT: retq69entry:70 %0 = tail call i1 @llvm.is.fpclass.f80(x86_fp80 %x, i32 3) strictfp ; "nan"71 ret i1 %072}73 74define i1 @is_snan_f80(x86_fp80 %x) nounwind {75; X86-LABEL: is_snan_f80:76; X86: # %bb.0: # %entry77; X86-NEXT: pushl %ebx78; X86-NEXT: pushl %esi79; X86-NEXT: movl {{[0-9]+}}(%esp), %edx80; X86-NEXT: movzwl {{[0-9]+}}(%esp), %eax81; X86-NEXT: andl $32767, %eax # imm = 0x7FFF82; X86-NEXT: xorl %ecx, %ecx83; X86-NEXT: cmpl {{[0-9]+}}(%esp), %ecx84; X86-NEXT: movl $-2147483648, %esi # imm = 0x8000000085; X86-NEXT: sbbl %edx, %esi86; X86-NEXT: movl $32767, %esi # imm = 0x7FFF87; X86-NEXT: sbbl %eax, %esi88; X86-NEXT: movl $0, %esi89; X86-NEXT: sbbl %esi, %esi90; X86-NEXT: setl %bl91; X86-NEXT: cmpl $-1073741824, %edx # imm = 0xC000000092; X86-NEXT: sbbl $32767, %eax # imm = 0x7FFF93; X86-NEXT: sbbl %ecx, %ecx94; X86-NEXT: setl %al95; X86-NEXT: andb %bl, %al96; X86-NEXT: popl %esi97; X86-NEXT: popl %ebx98; X86-NEXT: retl99;100; X64-LABEL: is_snan_f80:101; X64: # %bb.0: # %entry102; X64-NEXT: movzwl {{[0-9]+}}(%rsp), %eax103; X64-NEXT: movq {{[0-9]+}}(%rsp), %rcx104; X64-NEXT: andl $32767, %eax # imm = 0x7FFF105; X64-NEXT: movabsq $-4611686018427387904, %rdx # imm = 0xC000000000000000106; X64-NEXT: cmpq %rdx, %rcx107; X64-NEXT: movq %rax, %rdx108; X64-NEXT: sbbq $32767, %rdx # imm = 0x7FFF109; X64-NEXT: setl %dl110; X64-NEXT: movabsq $-9223372036854775808, %rsi # imm = 0x8000000000000000111; X64-NEXT: cmpq %rcx, %rsi112; X64-NEXT: movl $32767, %ecx # imm = 0x7FFF113; X64-NEXT: sbbq %rax, %rcx114; X64-NEXT: setl %al115; X64-NEXT: andb %dl, %al116; X64-NEXT: retq117entry:118 %0 = tail call i1 @llvm.is.fpclass.f80(x86_fp80 %x, i32 1) ; "snan"119 ret i1 %0120}121 122define i1 @is_qnan_f80(x86_fp80 %x) nounwind {123; X86-LABEL: is_qnan_f80:124; X86: # %bb.0: # %entry125; X86-NEXT: movzwl {{[0-9]+}}(%esp), %eax126; X86-NEXT: andl $32767, %eax # imm = 0x7FFF127; X86-NEXT: xorl %ecx, %ecx128; X86-NEXT: movl $-1073741825, %edx # imm = 0xBFFFFFFF129; X86-NEXT: cmpl {{[0-9]+}}(%esp), %edx130; X86-NEXT: movl $32767, %edx # imm = 0x7FFF131; X86-NEXT: sbbl %eax, %edx132; X86-NEXT: sbbl %ecx, %ecx133; X86-NEXT: setl %al134; X86-NEXT: retl135;136; X64-LABEL: is_qnan_f80:137; X64: # %bb.0: # %entry138; X64-NEXT: movzwl {{[0-9]+}}(%rsp), %eax139; X64-NEXT: andl $32767, %eax # imm = 0x7FFF140; X64-NEXT: movabsq $-4611686018427387905, %rcx # imm = 0xBFFFFFFFFFFFFFFF141; X64-NEXT: cmpq {{[0-9]+}}(%rsp), %rcx142; X64-NEXT: movl $32767, %ecx # imm = 0x7FFF143; X64-NEXT: sbbq %rax, %rcx144; X64-NEXT: setl %al145; X64-NEXT: retq146entry:147 %0 = tail call i1 @llvm.is.fpclass.f80(x86_fp80 %x, i32 2) ; "qnan"148 ret i1 %0149}150 151define i1 @is_zero_f80(x86_fp80 %x) nounwind {152; X86-LABEL: is_zero_f80:153; X86: # %bb.0: # %entry154; X86-NEXT: movzwl {{[0-9]+}}(%esp), %eax155; X86-NEXT: andl $32767, %eax # imm = 0x7FFF156; X86-NEXT: orl {{[0-9]+}}(%esp), %eax157; X86-NEXT: orl {{[0-9]+}}(%esp), %eax158; X86-NEXT: sete %al159; X86-NEXT: retl160;161; X64-LABEL: is_zero_f80:162; X64: # %bb.0: # %entry163; X64-NEXT: movzwl {{[0-9]+}}(%rsp), %eax164; X64-NEXT: andl $32767, %eax # imm = 0x7FFF165; X64-NEXT: orq {{[0-9]+}}(%rsp), %rax166; X64-NEXT: sete %al167; X64-NEXT: retq168entry:169 %0 = tail call i1 @llvm.is.fpclass.f80(x86_fp80 %x, i32 96) ; 0x60 = "zero"170 ret i1 %0171}172 173define i1 @is_zero_f80_strict(x86_fp80 %x) nounwind strictfp {174; X86-LABEL: is_zero_f80_strict:175; X86: # %bb.0: # %entry176; X86-NEXT: movzwl {{[0-9]+}}(%esp), %eax177; X86-NEXT: andl $32767, %eax # imm = 0x7FFF178; X86-NEXT: orl {{[0-9]+}}(%esp), %eax179; X86-NEXT: orl {{[0-9]+}}(%esp), %eax180; X86-NEXT: sete %al181; X86-NEXT: retl182;183; X64-LABEL: is_zero_f80_strict:184; X64: # %bb.0: # %entry185; X64-NEXT: movzwl {{[0-9]+}}(%rsp), %eax186; X64-NEXT: andl $32767, %eax # imm = 0x7FFF187; X64-NEXT: orq {{[0-9]+}}(%rsp), %rax188; X64-NEXT: sete %al189; X64-NEXT: retq190entry:191 %0 = tail call i1 @llvm.is.fpclass.f80(x86_fp80 %x, i32 96) strictfp ; 0x60 = "zero"192 ret i1 %0193}194 195define i1 @is_poszero_f80(x86_fp80 %x) nounwind {196; X86-LABEL: is_poszero_f80:197; X86: # %bb.0: # %entry198; X86-NEXT: movzwl {{[0-9]+}}(%esp), %eax199; X86-NEXT: orl {{[0-9]+}}(%esp), %eax200; X86-NEXT: orl {{[0-9]+}}(%esp), %eax201; X86-NEXT: sete %al202; X86-NEXT: retl203;204; X64-LABEL: is_poszero_f80:205; X64: # %bb.0: # %entry206; X64-NEXT: movzwl {{[0-9]+}}(%rsp), %eax207; X64-NEXT: orq {{[0-9]+}}(%rsp), %rax208; X64-NEXT: sete %al209; X64-NEXT: retq210entry:211 %0 = tail call i1 @llvm.is.fpclass.f80(x86_fp80 %x, i32 64) ; 0x40 = "+zero"212 ret i1 %0213}214 215define i1 @is_negzero_f80(x86_fp80 %x) nounwind {216; X86-LABEL: is_negzero_f80:217; X86: # %bb.0: # %entry218; X86-NEXT: movzwl {{[0-9]+}}(%esp), %eax219; X86-NEXT: xorl $32768, %eax # imm = 0x8000220; X86-NEXT: orl {{[0-9]+}}(%esp), %eax221; X86-NEXT: orl {{[0-9]+}}(%esp), %eax222; X86-NEXT: sete %al223; X86-NEXT: retl224;225; X64-LABEL: is_negzero_f80:226; X64: # %bb.0: # %entry227; X64-NEXT: movzwl {{[0-9]+}}(%rsp), %eax228; X64-NEXT: xorq $32768, %rax # imm = 0x8000229; X64-NEXT: orq {{[0-9]+}}(%rsp), %rax230; X64-NEXT: sete %al231; X64-NEXT: retq232entry:233 %0 = tail call i1 @llvm.is.fpclass.f80(x86_fp80 %x, i32 32) ; 0x20 = "-zero"234 ret i1 %0235}236 237define i1 @is_inf_f80(x86_fp80 %x) nounwind {238; X86-LABEL: is_inf_f80:239; X86: # %bb.0: # %entry240; X86-NEXT: movl {{[0-9]+}}(%esp), %eax241; X86-NEXT: notl %eax242; X86-NEXT: movl $-2147483648, %ecx # imm = 0x80000000243; X86-NEXT: xorl {{[0-9]+}}(%esp), %ecx244; X86-NEXT: andl $32767, %eax # imm = 0x7FFF245; X86-NEXT: orl {{[0-9]+}}(%esp), %eax246; X86-NEXT: orl %ecx, %eax247; X86-NEXT: sete %al248; X86-NEXT: retl249;250; X64-LABEL: is_inf_f80:251; X64: # %bb.0: # %entry252; X64-NEXT: movl {{[0-9]+}}(%rsp), %eax253; X64-NEXT: notl %eax254; X64-NEXT: movabsq $-9223372036854775808, %rcx # imm = 0x8000000000000000255; X64-NEXT: xorq {{[0-9]+}}(%rsp), %rcx256; X64-NEXT: andl $32767, %eax # imm = 0x7FFF257; X64-NEXT: orq %rcx, %rax258; X64-NEXT: sete %al259; X64-NEXT: retq260entry:261 %0 = tail call i1 @llvm.is.fpclass.f80(x86_fp80 %x, i32 516) ; 0x204 = "inf"262 ret i1 %0263}264 265define i1 @is_posinf_f80(x86_fp80 %x) nounwind {266; X86-LABEL: is_posinf_f80:267; X86: # %bb.0: # %entry268; X86-NEXT: movzwl {{[0-9]+}}(%esp), %eax269; X86-NEXT: movl $-2147483648, %ecx # imm = 0x80000000270; X86-NEXT: xorl {{[0-9]+}}(%esp), %ecx271; X86-NEXT: xorl $32767, %eax # imm = 0x7FFF272; X86-NEXT: orl {{[0-9]+}}(%esp), %eax273; X86-NEXT: orl %ecx, %eax274; X86-NEXT: sete %al275; X86-NEXT: retl276;277; X64-LABEL: is_posinf_f80:278; X64: # %bb.0: # %entry279; X64-NEXT: movzwl {{[0-9]+}}(%rsp), %eax280; X64-NEXT: movabsq $-9223372036854775808, %rcx # imm = 0x8000000000000000281; X64-NEXT: xorq {{[0-9]+}}(%rsp), %rcx282; X64-NEXT: xorq $32767, %rax # imm = 0x7FFF283; X64-NEXT: orq %rcx, %rax284; X64-NEXT: sete %al285; X64-NEXT: retq286entry:287 %0 = tail call i1 @llvm.is.fpclass.f80(x86_fp80 %x, i32 512) ; 0x200 = "+inf"288 ret i1 %0289}290 291define i1 @is_neginf_f80(x86_fp80 %x) nounwind {292; X86-LABEL: is_neginf_f80:293; X86: # %bb.0: # %entry294; X86-NEXT: movzwl {{[0-9]+}}(%esp), %eax295; X86-NEXT: xorl $65535, %eax # imm = 0xFFFF296; X86-NEXT: movl $-2147483648, %ecx # imm = 0x80000000297; X86-NEXT: xorl {{[0-9]+}}(%esp), %ecx298; X86-NEXT: orl {{[0-9]+}}(%esp), %eax299; X86-NEXT: orl %ecx, %eax300; X86-NEXT: sete %al301; X86-NEXT: retl302;303; X64-LABEL: is_neginf_f80:304; X64: # %bb.0: # %entry305; X64-NEXT: movzwl {{[0-9]+}}(%rsp), %eax306; X64-NEXT: xorq $65535, %rax # imm = 0xFFFF307; X64-NEXT: movabsq $-9223372036854775808, %rcx # imm = 0x8000000000000000308; X64-NEXT: xorq {{[0-9]+}}(%rsp), %rcx309; X64-NEXT: orq %rax, %rcx310; X64-NEXT: sete %al311; X64-NEXT: retq312entry:313 %0 = tail call i1 @llvm.is.fpclass.f80(x86_fp80 %x, i32 4) ; "-inf"314 ret i1 %0315}316 317define i1 @is_normal_f80(x86_fp80 %x) nounwind {318; X86-LABEL: is_normal_f80:319; X86: # %bb.0: # %entry320; X86-NEXT: movl {{[0-9]+}}(%esp), %eax321; X86-NEXT: movzwl {{[0-9]+}}(%esp), %ecx322; X86-NEXT: andl $32767, %ecx # imm = 0x7FFF323; X86-NEXT: decl %ecx324; X86-NEXT: movzwl %cx, %ecx325; X86-NEXT: xorl %edx, %edx326; X86-NEXT: cmpl $32766, %ecx # imm = 0x7FFE327; X86-NEXT: sbbl %edx, %edx328; X86-NEXT: setb %cl329; X86-NEXT: shrl $31, %eax330; X86-NEXT: andb %cl, %al331; X86-NEXT: # kill: def $al killed $al killed $eax332; X86-NEXT: retl333;334; X64-LABEL: is_normal_f80:335; X64: # %bb.0: # %entry336; X64-NEXT: movzwl {{[0-9]+}}(%rsp), %eax337; X64-NEXT: movq {{[0-9]+}}(%rsp), %rcx338; X64-NEXT: shrq $63, %rcx339; X64-NEXT: andl $32767, %eax # imm = 0x7FFF340; X64-NEXT: decl %eax341; X64-NEXT: movzwl %ax, %eax342; X64-NEXT: cmpl $32766, %eax # imm = 0x7FFE343; X64-NEXT: setb %al344; X64-NEXT: andb %cl, %al345; X64-NEXT: retq346entry:347 %0 = tail call i1 @llvm.is.fpclass.f80(x86_fp80 %x, i32 264) ; 0x108 = "normal"348 ret i1 %0349}350 351define i1 @is_posnormal_f80(x86_fp80 %x) nounwind {352; X86-LABEL: is_posnormal_f80:353; X86: # %bb.0: # %entry354; X86-NEXT: pushl %esi355; X86-NEXT: movl {{[0-9]+}}(%esp), %eax356; X86-NEXT: movzwl {{[0-9]+}}(%esp), %ecx357; X86-NEXT: movl %ecx, %edx358; X86-NEXT: andl $32767, %edx # imm = 0x7FFF359; X86-NEXT: decl %edx360; X86-NEXT: movzwl %dx, %edx361; X86-NEXT: xorl %esi, %esi362; X86-NEXT: cmpl $32766, %edx # imm = 0x7FFE363; X86-NEXT: sbbl %esi, %esi364; X86-NEXT: setb %dl365; X86-NEXT: testl $32768, %ecx # imm = 0x8000366; X86-NEXT: sete %cl367; X86-NEXT: shrl $31, %eax368; X86-NEXT: andb %cl, %al369; X86-NEXT: andb %dl, %al370; X86-NEXT: # kill: def $al killed $al killed $eax371; X86-NEXT: popl %esi372; X86-NEXT: retl373;374; X64-LABEL: is_posnormal_f80:375; X64: # %bb.0: # %entry376; X64-NEXT: movq {{[0-9]+}}(%rsp), %rax377; X64-NEXT: movswq {{[0-9]+}}(%rsp), %rcx378; X64-NEXT: testq %rcx, %rcx379; X64-NEXT: setns %dl380; X64-NEXT: andl $32767, %ecx # imm = 0x7FFF381; X64-NEXT: decl %ecx382; X64-NEXT: movzwl %cx, %ecx383; X64-NEXT: cmpl $32766, %ecx # imm = 0x7FFE384; X64-NEXT: setb %cl385; X64-NEXT: shrq $63, %rax386; X64-NEXT: andb %dl, %al387; X64-NEXT: andb %cl, %al388; X64-NEXT: # kill: def $al killed $al killed $rax389; X64-NEXT: retq390entry:391 %0 = tail call i1 @llvm.is.fpclass.f80(x86_fp80 %x, i32 256) ; 0x100 = "+normal"392 ret i1 %0393}394 395define i1 @is_negnormal_f80(x86_fp80 %x) nounwind {396; X86-LABEL: is_negnormal_f80:397; X86: # %bb.0: # %entry398; X86-NEXT: pushl %esi399; X86-NEXT: movl {{[0-9]+}}(%esp), %eax400; X86-NEXT: movzwl {{[0-9]+}}(%esp), %ecx401; X86-NEXT: movl %ecx, %edx402; X86-NEXT: andl $32767, %edx # imm = 0x7FFF403; X86-NEXT: decl %edx404; X86-NEXT: movzwl %dx, %edx405; X86-NEXT: xorl %esi, %esi406; X86-NEXT: cmpl $32766, %edx # imm = 0x7FFE407; X86-NEXT: sbbl %esi, %esi408; X86-NEXT: setb %dl409; X86-NEXT: testl $32768, %ecx # imm = 0x8000410; X86-NEXT: setne %cl411; X86-NEXT: shrl $31, %eax412; X86-NEXT: andb %cl, %al413; X86-NEXT: andb %dl, %al414; X86-NEXT: # kill: def $al killed $al killed $eax415; X86-NEXT: popl %esi416; X86-NEXT: retl417;418; X64-LABEL: is_negnormal_f80:419; X64: # %bb.0: # %entry420; X64-NEXT: movq {{[0-9]+}}(%rsp), %rax421; X64-NEXT: movswq {{[0-9]+}}(%rsp), %rcx422; X64-NEXT: testq %rcx, %rcx423; X64-NEXT: sets %dl424; X64-NEXT: andl $32767, %ecx # imm = 0x7FFF425; X64-NEXT: decl %ecx426; X64-NEXT: movzwl %cx, %ecx427; X64-NEXT: cmpl $32766, %ecx # imm = 0x7FFE428; X64-NEXT: setb %cl429; X64-NEXT: shrq $63, %rax430; X64-NEXT: andb %dl, %al431; X64-NEXT: andb %cl, %al432; X64-NEXT: # kill: def $al killed $al killed $rax433; X64-NEXT: retq434entry:435 %0 = tail call i1 @llvm.is.fpclass.f80(x86_fp80 %x, i32 8) ; "-normal"436 ret i1 %0437}438 439define i1 @is_subnormal_f80(x86_fp80 %x) nounwind {440; X86-LABEL: is_subnormal_f80:441; X86: # %bb.0: # %entry442; X86-NEXT: pushl %esi443; X86-NEXT: movl {{[0-9]+}}(%esp), %esi444; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx445; X86-NEXT: movzwl {{[0-9]+}}(%esp), %eax446; X86-NEXT: andl $32767, %eax # imm = 0x7FFF447; X86-NEXT: xorl %edx, %edx448; X86-NEXT: addl $-1, %esi449; X86-NEXT: adcl $-1, %ecx450; X86-NEXT: adcl $-1, %eax451; X86-NEXT: adcl $-1, %edx452; X86-NEXT: cmpl $-1, %esi453; X86-NEXT: sbbl $2147483647, %ecx # imm = 0x7FFFFFFF454; X86-NEXT: sbbl $0, %eax455; X86-NEXT: sbbl $0, %edx456; X86-NEXT: setb %al457; X86-NEXT: popl %esi458; X86-NEXT: retl459;460; X64-LABEL: is_subnormal_f80:461; X64: # %bb.0: # %entry462; X64-NEXT: movzwl {{[0-9]+}}(%rsp), %eax463; X64-NEXT: movq {{[0-9]+}}(%rsp), %rcx464; X64-NEXT: andl $32767, %eax # imm = 0x7FFF465; X64-NEXT: addq $-1, %rcx466; X64-NEXT: adcq $-1, %rax467; X64-NEXT: movabsq $9223372036854775807, %rdx # imm = 0x7FFFFFFFFFFFFFFF468; X64-NEXT: cmpq %rdx, %rcx469; X64-NEXT: sbbq $0, %rax470; X64-NEXT: setb %al471; X64-NEXT: retq472entry:473 %0 = tail call i1 @llvm.is.fpclass.f80(x86_fp80 %x, i32 144) ; 0x90 = "subnormal"474 ret i1 %0475}476 477define i1 @is_possubnormal_f80(x86_fp80 %x) nounwind {478; X86-LABEL: is_possubnormal_f80:479; X86: # %bb.0: # %entry480; X86-NEXT: pushl %esi481; X86-NEXT: movl {{[0-9]+}}(%esp), %eax482; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx483; X86-NEXT: movl {{[0-9]+}}(%esp), %edx484; X86-NEXT: addl $-1, %ecx485; X86-NEXT: adcl $-1, %edx486; X86-NEXT: adcl $-1, %eax487; X86-NEXT: movzwl %ax, %eax488; X86-NEXT: xorl %esi, %esi489; X86-NEXT: cmpl $-1, %ecx490; X86-NEXT: sbbl $2147483647, %edx # imm = 0x7FFFFFFF491; X86-NEXT: sbbl $0, %eax492; X86-NEXT: sbbl %esi, %esi493; X86-NEXT: setb %al494; X86-NEXT: popl %esi495; X86-NEXT: retl496;497; X64-LABEL: is_possubnormal_f80:498; X64: # %bb.0: # %entry499; X64-NEXT: movl {{[0-9]+}}(%rsp), %eax500; X64-NEXT: movq {{[0-9]+}}(%rsp), %rcx501; X64-NEXT: addq $-1, %rcx502; X64-NEXT: adcq $-1, %rax503; X64-NEXT: movzwl %ax, %eax504; X64-NEXT: movabsq $9223372036854775807, %rdx # imm = 0x7FFFFFFFFFFFFFFF505; X64-NEXT: cmpq %rdx, %rcx506; X64-NEXT: sbbq $0, %rax507; X64-NEXT: setb %al508; X64-NEXT: retq509entry:510 %0 = tail call i1 @llvm.is.fpclass.f80(x86_fp80 %x, i32 128) ; 0x80 = "+subnormal"511 ret i1 %0512}513 514define i1 @is_negsubnormal_f80(x86_fp80 %x) nounwind {515; X86-LABEL: is_negsubnormal_f80:516; X86: # %bb.0: # %entry517; X86-NEXT: pushl %edi518; X86-NEXT: pushl %esi519; X86-NEXT: movl {{[0-9]+}}(%esp), %edi520; X86-NEXT: movl {{[0-9]+}}(%esp), %edx521; X86-NEXT: movzwl {{[0-9]+}}(%esp), %eax522; X86-NEXT: movl %eax, %ecx523; X86-NEXT: andl $32767, %ecx # imm = 0x7FFF524; X86-NEXT: xorl %esi, %esi525; X86-NEXT: addl $-1, %edi526; X86-NEXT: adcl $-1, %edx527; X86-NEXT: adcl $-1, %ecx528; X86-NEXT: adcl $-1, %esi529; X86-NEXT: cmpl $-1, %edi530; X86-NEXT: sbbl $2147483647, %edx # imm = 0x7FFFFFFF531; X86-NEXT: sbbl $0, %ecx532; X86-NEXT: sbbl $0, %esi533; X86-NEXT: setb %cl534; X86-NEXT: testl $32768, %eax # imm = 0x8000535; X86-NEXT: setne %al536; X86-NEXT: andb %cl, %al537; X86-NEXT: popl %esi538; X86-NEXT: popl %edi539; X86-NEXT: retl540;541; X64-LABEL: is_negsubnormal_f80:542; X64: # %bb.0: # %entry543; X64-NEXT: movzwl {{[0-9]+}}(%rsp), %eax544; X64-NEXT: movswq %ax, %rcx545; X64-NEXT: movq {{[0-9]+}}(%rsp), %rdx546; X64-NEXT: andl $32767, %eax # imm = 0x7FFF547; X64-NEXT: addq $-1, %rdx548; X64-NEXT: adcq $-1, %rax549; X64-NEXT: movabsq $9223372036854775807, %rsi # imm = 0x7FFFFFFFFFFFFFFF550; X64-NEXT: cmpq %rsi, %rdx551; X64-NEXT: sbbq $0, %rax552; X64-NEXT: setb %dl553; X64-NEXT: testq %rcx, %rcx554; X64-NEXT: sets %al555; X64-NEXT: andb %dl, %al556; X64-NEXT: retq557entry:558 %0 = tail call i1 @llvm.is.fpclass.f80(x86_fp80 %x, i32 16) ; 0x10 = "-subnormal"559 ret i1 %0560}561 562declare i1 @llvm.is.fpclass.f80(x86_fp80, i32)563