4184 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=i686-linux | FileCheck %s --check-prefix=X86-X873; RUN: llc < %s -mtriple=i686-linux -mattr=+sse2 | FileCheck %s --check-prefix=X86-SSE4; RUN: llc < %s -mtriple=x86_64-linux | FileCheck %s --check-prefix=X645 6;7; 32-bit float to unsigned integer8;9 10declare i1 @llvm.fptoui.sat.i1.f32 (float)11declare i8 @llvm.fptoui.sat.i8.f32 (float)12declare i13 @llvm.fptoui.sat.i13.f32 (float)13declare i16 @llvm.fptoui.sat.i16.f32 (float)14declare i19 @llvm.fptoui.sat.i19.f32 (float)15declare i32 @llvm.fptoui.sat.i32.f32 (float)16declare i50 @llvm.fptoui.sat.i50.f32 (float)17declare i64 @llvm.fptoui.sat.i64.f32 (float)18declare i100 @llvm.fptoui.sat.i100.f32(float)19declare i128 @llvm.fptoui.sat.i128.f32(float)20 21define i1 @test_unsigned_i1_f32(float %f) nounwind {22; X86-X87-LABEL: test_unsigned_i1_f32:23; X86-X87: # %bb.0:24; X86-X87-NEXT: subl $8, %esp25; X86-X87-NEXT: flds {{[0-9]+}}(%esp)26; X86-X87-NEXT: fnstcw {{[0-9]+}}(%esp)27; X86-X87-NEXT: movzwl {{[0-9]+}}(%esp), %eax28; X86-X87-NEXT: orl $3072, %eax # imm = 0xC0029; X86-X87-NEXT: movw %ax, {{[0-9]+}}(%esp)30; X86-X87-NEXT: fldcw {{[0-9]+}}(%esp)31; X86-X87-NEXT: fists {{[0-9]+}}(%esp)32; X86-X87-NEXT: fldcw {{[0-9]+}}(%esp)33; X86-X87-NEXT: fldz34; X86-X87-NEXT: fxch %st(1)35; X86-X87-NEXT: fucom %st(1)36; X86-X87-NEXT: fstp %st(1)37; X86-X87-NEXT: fnstsw %ax38; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax39; X86-X87-NEXT: sahf40; X86-X87-NEXT: jb .LBB0_141; X86-X87-NEXT: # %bb.2:42; X86-X87-NEXT: movzbl {{[0-9]+}}(%esp), %ecx43; X86-X87-NEXT: jmp .LBB0_344; X86-X87-NEXT: .LBB0_1:45; X86-X87-NEXT: xorl %ecx, %ecx46; X86-X87-NEXT: .LBB0_3:47; X86-X87-NEXT: fld148; X86-X87-NEXT: fxch %st(1)49; X86-X87-NEXT: fucompp50; X86-X87-NEXT: fnstsw %ax51; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax52; X86-X87-NEXT: sahf53; X86-X87-NEXT: movb $1, %al54; X86-X87-NEXT: ja .LBB0_555; X86-X87-NEXT: # %bb.4:56; X86-X87-NEXT: movl %ecx, %eax57; X86-X87-NEXT: .LBB0_5:58; X86-X87-NEXT: addl $8, %esp59; X86-X87-NEXT: retl60;61; X86-SSE-LABEL: test_unsigned_i1_f32:62; X86-SSE: # %bb.0:63; X86-SSE-NEXT: xorps %xmm0, %xmm064; X86-SSE-NEXT: maxss {{[0-9]+}}(%esp), %xmm065; X86-SSE-NEXT: movss {{.*#+}} xmm1 = [1.0E+0,0.0E+0,0.0E+0,0.0E+0]66; X86-SSE-NEXT: minss %xmm0, %xmm167; X86-SSE-NEXT: cvttss2si %xmm1, %eax68; X86-SSE-NEXT: # kill: def $al killed $al killed $eax69; X86-SSE-NEXT: retl70;71; X64-LABEL: test_unsigned_i1_f32:72; X64: # %bb.0:73; X64-NEXT: xorps %xmm1, %xmm174; X64-NEXT: maxss %xmm0, %xmm175; X64-NEXT: movss {{.*#+}} xmm0 = [1.0E+0,0.0E+0,0.0E+0,0.0E+0]76; X64-NEXT: minss %xmm1, %xmm077; X64-NEXT: cvttss2si %xmm0, %eax78; X64-NEXT: # kill: def $al killed $al killed $eax79; X64-NEXT: retq80 %x = call i1 @llvm.fptoui.sat.i1.f32(float %f)81 ret i1 %x82}83 84define i8 @test_unsigned_i8_f32(float %f) nounwind {85; X86-X87-LABEL: test_unsigned_i8_f32:86; X86-X87: # %bb.0:87; X86-X87-NEXT: subl $8, %esp88; X86-X87-NEXT: flds {{[0-9]+}}(%esp)89; X86-X87-NEXT: fnstcw {{[0-9]+}}(%esp)90; X86-X87-NEXT: movzwl {{[0-9]+}}(%esp), %eax91; X86-X87-NEXT: orl $3072, %eax # imm = 0xC0092; X86-X87-NEXT: movw %ax, {{[0-9]+}}(%esp)93; X86-X87-NEXT: fldcw {{[0-9]+}}(%esp)94; X86-X87-NEXT: fists {{[0-9]+}}(%esp)95; X86-X87-NEXT: fldcw {{[0-9]+}}(%esp)96; X86-X87-NEXT: fldz97; X86-X87-NEXT: fxch %st(1)98; X86-X87-NEXT: fucom %st(1)99; X86-X87-NEXT: fstp %st(1)100; X86-X87-NEXT: fnstsw %ax101; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax102; X86-X87-NEXT: sahf103; X86-X87-NEXT: jb .LBB1_1104; X86-X87-NEXT: # %bb.2:105; X86-X87-NEXT: movzbl {{[0-9]+}}(%esp), %ecx106; X86-X87-NEXT: jmp .LBB1_3107; X86-X87-NEXT: .LBB1_1:108; X86-X87-NEXT: xorl %ecx, %ecx109; X86-X87-NEXT: .LBB1_3:110; X86-X87-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}111; X86-X87-NEXT: fxch %st(1)112; X86-X87-NEXT: fucompp113; X86-X87-NEXT: fnstsw %ax114; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax115; X86-X87-NEXT: sahf116; X86-X87-NEXT: movb $-1, %al117; X86-X87-NEXT: ja .LBB1_5118; X86-X87-NEXT: # %bb.4:119; X86-X87-NEXT: movl %ecx, %eax120; X86-X87-NEXT: .LBB1_5:121; X86-X87-NEXT: addl $8, %esp122; X86-X87-NEXT: retl123;124; X86-SSE-LABEL: test_unsigned_i8_f32:125; X86-SSE: # %bb.0:126; X86-SSE-NEXT: xorps %xmm0, %xmm0127; X86-SSE-NEXT: maxss {{[0-9]+}}(%esp), %xmm0128; X86-SSE-NEXT: movss {{.*#+}} xmm1 = [2.55E+2,0.0E+0,0.0E+0,0.0E+0]129; X86-SSE-NEXT: minss %xmm0, %xmm1130; X86-SSE-NEXT: cvttss2si %xmm1, %eax131; X86-SSE-NEXT: # kill: def $al killed $al killed $eax132; X86-SSE-NEXT: retl133;134; X64-LABEL: test_unsigned_i8_f32:135; X64: # %bb.0:136; X64-NEXT: xorps %xmm1, %xmm1137; X64-NEXT: maxss %xmm0, %xmm1138; X64-NEXT: movss {{.*#+}} xmm0 = [2.55E+2,0.0E+0,0.0E+0,0.0E+0]139; X64-NEXT: minss %xmm1, %xmm0140; X64-NEXT: cvttss2si %xmm0, %eax141; X64-NEXT: # kill: def $al killed $al killed $eax142; X64-NEXT: retq143 %x = call i8 @llvm.fptoui.sat.i8.f32(float %f)144 ret i8 %x145}146 147define i13 @test_unsigned_i13_f32(float %f) nounwind {148; X86-X87-LABEL: test_unsigned_i13_f32:149; X86-X87: # %bb.0:150; X86-X87-NEXT: subl $8, %esp151; X86-X87-NEXT: flds {{[0-9]+}}(%esp)152; X86-X87-NEXT: fnstcw (%esp)153; X86-X87-NEXT: movzwl (%esp), %eax154; X86-X87-NEXT: orl $3072, %eax # imm = 0xC00155; X86-X87-NEXT: movw %ax, {{[0-9]+}}(%esp)156; X86-X87-NEXT: fldcw {{[0-9]+}}(%esp)157; X86-X87-NEXT: fistl {{[0-9]+}}(%esp)158; X86-X87-NEXT: fldcw (%esp)159; X86-X87-NEXT: fldz160; X86-X87-NEXT: fxch %st(1)161; X86-X87-NEXT: fucom %st(1)162; X86-X87-NEXT: fstp %st(1)163; X86-X87-NEXT: fnstsw %ax164; X86-X87-NEXT: xorl %ecx, %ecx165; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax166; X86-X87-NEXT: sahf167; X86-X87-NEXT: jb .LBB2_2168; X86-X87-NEXT: # %bb.1:169; X86-X87-NEXT: movl {{[0-9]+}}(%esp), %ecx170; X86-X87-NEXT: .LBB2_2:171; X86-X87-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}172; X86-X87-NEXT: fxch %st(1)173; X86-X87-NEXT: fucompp174; X86-X87-NEXT: fnstsw %ax175; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax176; X86-X87-NEXT: sahf177; X86-X87-NEXT: movl $8191, %eax # imm = 0x1FFF178; X86-X87-NEXT: ja .LBB2_4179; X86-X87-NEXT: # %bb.3:180; X86-X87-NEXT: movl %ecx, %eax181; X86-X87-NEXT: .LBB2_4:182; X86-X87-NEXT: # kill: def $ax killed $ax killed $eax183; X86-X87-NEXT: addl $8, %esp184; X86-X87-NEXT: retl185;186; X86-SSE-LABEL: test_unsigned_i13_f32:187; X86-SSE: # %bb.0:188; X86-SSE-NEXT: xorps %xmm0, %xmm0189; X86-SSE-NEXT: maxss {{[0-9]+}}(%esp), %xmm0190; X86-SSE-NEXT: movss {{.*#+}} xmm1 = [8.191E+3,0.0E+0,0.0E+0,0.0E+0]191; X86-SSE-NEXT: minss %xmm0, %xmm1192; X86-SSE-NEXT: cvttss2si %xmm1, %eax193; X86-SSE-NEXT: # kill: def $ax killed $ax killed $eax194; X86-SSE-NEXT: retl195;196; X64-LABEL: test_unsigned_i13_f32:197; X64: # %bb.0:198; X64-NEXT: xorps %xmm1, %xmm1199; X64-NEXT: maxss %xmm0, %xmm1200; X64-NEXT: movss {{.*#+}} xmm0 = [8.191E+3,0.0E+0,0.0E+0,0.0E+0]201; X64-NEXT: minss %xmm1, %xmm0202; X64-NEXT: cvttss2si %xmm0, %eax203; X64-NEXT: # kill: def $ax killed $ax killed $eax204; X64-NEXT: retq205 %x = call i13 @llvm.fptoui.sat.i13.f32(float %f)206 ret i13 %x207}208 209define i16 @test_unsigned_i16_f32(float %f) nounwind {210; X86-X87-LABEL: test_unsigned_i16_f32:211; X86-X87: # %bb.0:212; X86-X87-NEXT: subl $8, %esp213; X86-X87-NEXT: flds {{[0-9]+}}(%esp)214; X86-X87-NEXT: fnstcw (%esp)215; X86-X87-NEXT: movzwl (%esp), %eax216; X86-X87-NEXT: orl $3072, %eax # imm = 0xC00217; X86-X87-NEXT: movw %ax, {{[0-9]+}}(%esp)218; X86-X87-NEXT: fldcw {{[0-9]+}}(%esp)219; X86-X87-NEXT: fistl {{[0-9]+}}(%esp)220; X86-X87-NEXT: fldcw (%esp)221; X86-X87-NEXT: fldz222; X86-X87-NEXT: fxch %st(1)223; X86-X87-NEXT: fucom %st(1)224; X86-X87-NEXT: fstp %st(1)225; X86-X87-NEXT: fnstsw %ax226; X86-X87-NEXT: xorl %ecx, %ecx227; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax228; X86-X87-NEXT: sahf229; X86-X87-NEXT: jb .LBB3_2230; X86-X87-NEXT: # %bb.1:231; X86-X87-NEXT: movl {{[0-9]+}}(%esp), %ecx232; X86-X87-NEXT: .LBB3_2:233; X86-X87-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}234; X86-X87-NEXT: fxch %st(1)235; X86-X87-NEXT: fucompp236; X86-X87-NEXT: fnstsw %ax237; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax238; X86-X87-NEXT: sahf239; X86-X87-NEXT: movl $65535, %eax # imm = 0xFFFF240; X86-X87-NEXT: ja .LBB3_4241; X86-X87-NEXT: # %bb.3:242; X86-X87-NEXT: movl %ecx, %eax243; X86-X87-NEXT: .LBB3_4:244; X86-X87-NEXT: # kill: def $ax killed $ax killed $eax245; X86-X87-NEXT: addl $8, %esp246; X86-X87-NEXT: retl247;248; X86-SSE-LABEL: test_unsigned_i16_f32:249; X86-SSE: # %bb.0:250; X86-SSE-NEXT: xorps %xmm0, %xmm0251; X86-SSE-NEXT: maxss {{[0-9]+}}(%esp), %xmm0252; X86-SSE-NEXT: movss {{.*#+}} xmm1 = [6.5535E+4,0.0E+0,0.0E+0,0.0E+0]253; X86-SSE-NEXT: minss %xmm0, %xmm1254; X86-SSE-NEXT: cvttss2si %xmm1, %eax255; X86-SSE-NEXT: # kill: def $ax killed $ax killed $eax256; X86-SSE-NEXT: retl257;258; X64-LABEL: test_unsigned_i16_f32:259; X64: # %bb.0:260; X64-NEXT: xorps %xmm1, %xmm1261; X64-NEXT: maxss %xmm0, %xmm1262; X64-NEXT: movss {{.*#+}} xmm0 = [6.5535E+4,0.0E+0,0.0E+0,0.0E+0]263; X64-NEXT: minss %xmm1, %xmm0264; X64-NEXT: cvttss2si %xmm0, %eax265; X64-NEXT: # kill: def $ax killed $ax killed $eax266; X64-NEXT: retq267 %x = call i16 @llvm.fptoui.sat.i16.f32(float %f)268 ret i16 %x269}270 271define i19 @test_unsigned_i19_f32(float %f) nounwind {272; X86-X87-LABEL: test_unsigned_i19_f32:273; X86-X87: # %bb.0:274; X86-X87-NEXT: subl $20, %esp275; X86-X87-NEXT: flds {{[0-9]+}}(%esp)276; X86-X87-NEXT: fnstcw {{[0-9]+}}(%esp)277; X86-X87-NEXT: movzwl {{[0-9]+}}(%esp), %eax278; X86-X87-NEXT: orl $3072, %eax # imm = 0xC00279; X86-X87-NEXT: movw %ax, {{[0-9]+}}(%esp)280; X86-X87-NEXT: fldcw {{[0-9]+}}(%esp)281; X86-X87-NEXT: fld %st(0)282; X86-X87-NEXT: fistpll {{[0-9]+}}(%esp)283; X86-X87-NEXT: fldcw {{[0-9]+}}(%esp)284; X86-X87-NEXT: fldz285; X86-X87-NEXT: fxch %st(1)286; X86-X87-NEXT: fucom %st(1)287; X86-X87-NEXT: fstp %st(1)288; X86-X87-NEXT: fnstsw %ax289; X86-X87-NEXT: xorl %ecx, %ecx290; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax291; X86-X87-NEXT: sahf292; X86-X87-NEXT: jb .LBB4_2293; X86-X87-NEXT: # %bb.1:294; X86-X87-NEXT: movl {{[0-9]+}}(%esp), %ecx295; X86-X87-NEXT: .LBB4_2:296; X86-X87-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}297; X86-X87-NEXT: fxch %st(1)298; X86-X87-NEXT: fucompp299; X86-X87-NEXT: fnstsw %ax300; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax301; X86-X87-NEXT: sahf302; X86-X87-NEXT: movl $524287, %eax # imm = 0x7FFFF303; X86-X87-NEXT: ja .LBB4_4304; X86-X87-NEXT: # %bb.3:305; X86-X87-NEXT: movl %ecx, %eax306; X86-X87-NEXT: .LBB4_4:307; X86-X87-NEXT: addl $20, %esp308; X86-X87-NEXT: retl309;310; X86-SSE-LABEL: test_unsigned_i19_f32:311; X86-SSE: # %bb.0:312; X86-SSE-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero313; X86-SSE-NEXT: xorps %xmm1, %xmm1314; X86-SSE-NEXT: maxss %xmm1, %xmm0315; X86-SSE-NEXT: minss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0316; X86-SSE-NEXT: cvttss2si %xmm0, %eax317; X86-SSE-NEXT: retl318;319; X64-LABEL: test_unsigned_i19_f32:320; X64: # %bb.0:321; X64-NEXT: xorps %xmm1, %xmm1322; X64-NEXT: maxss %xmm1, %xmm0323; X64-NEXT: minss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0324; X64-NEXT: cvttss2si %xmm0, %eax325; X64-NEXT: retq326 %x = call i19 @llvm.fptoui.sat.i19.f32(float %f)327 ret i19 %x328}329 330define i32 @test_unsigned_i32_f32(float %f) nounwind {331; X86-X87-LABEL: test_unsigned_i32_f32:332; X86-X87: # %bb.0:333; X86-X87-NEXT: subl $20, %esp334; X86-X87-NEXT: flds {{[0-9]+}}(%esp)335; X86-X87-NEXT: fnstcw {{[0-9]+}}(%esp)336; X86-X87-NEXT: movzwl {{[0-9]+}}(%esp), %eax337; X86-X87-NEXT: orl $3072, %eax # imm = 0xC00338; X86-X87-NEXT: movw %ax, {{[0-9]+}}(%esp)339; X86-X87-NEXT: fldcw {{[0-9]+}}(%esp)340; X86-X87-NEXT: fld %st(0)341; X86-X87-NEXT: fistpll {{[0-9]+}}(%esp)342; X86-X87-NEXT: fldcw {{[0-9]+}}(%esp)343; X86-X87-NEXT: fldz344; X86-X87-NEXT: fxch %st(1)345; X86-X87-NEXT: fucom %st(1)346; X86-X87-NEXT: fstp %st(1)347; X86-X87-NEXT: fnstsw %ax348; X86-X87-NEXT: xorl %ecx, %ecx349; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax350; X86-X87-NEXT: sahf351; X86-X87-NEXT: jb .LBB5_2352; X86-X87-NEXT: # %bb.1:353; X86-X87-NEXT: movl {{[0-9]+}}(%esp), %ecx354; X86-X87-NEXT: .LBB5_2:355; X86-X87-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}356; X86-X87-NEXT: fxch %st(1)357; X86-X87-NEXT: fucompp358; X86-X87-NEXT: fnstsw %ax359; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax360; X86-X87-NEXT: sahf361; X86-X87-NEXT: movl $-1, %eax362; X86-X87-NEXT: ja .LBB5_4363; X86-X87-NEXT: # %bb.3:364; X86-X87-NEXT: movl %ecx, %eax365; X86-X87-NEXT: .LBB5_4:366; X86-X87-NEXT: addl $20, %esp367; X86-X87-NEXT: retl368;369; X86-SSE-LABEL: test_unsigned_i32_f32:370; X86-SSE: # %bb.0:371; X86-SSE-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero372; X86-SSE-NEXT: cvttss2si %xmm0, %eax373; X86-SSE-NEXT: movl %eax, %ecx374; X86-SSE-NEXT: sarl $31, %ecx375; X86-SSE-NEXT: movaps %xmm0, %xmm1376; X86-SSE-NEXT: subss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm1377; X86-SSE-NEXT: cvttss2si %xmm1, %edx378; X86-SSE-NEXT: andl %ecx, %edx379; X86-SSE-NEXT: orl %eax, %edx380; X86-SSE-NEXT: xorl %ecx, %ecx381; X86-SSE-NEXT: xorps %xmm1, %xmm1382; X86-SSE-NEXT: ucomiss %xmm1, %xmm0383; X86-SSE-NEXT: cmovael %edx, %ecx384; X86-SSE-NEXT: ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0385; X86-SSE-NEXT: movl $-1, %eax386; X86-SSE-NEXT: cmovbel %ecx, %eax387; X86-SSE-NEXT: retl388;389; X64-LABEL: test_unsigned_i32_f32:390; X64: # %bb.0:391; X64-NEXT: cvttss2si %xmm0, %rax392; X64-NEXT: xorl %ecx, %ecx393; X64-NEXT: xorps %xmm1, %xmm1394; X64-NEXT: ucomiss %xmm1, %xmm0395; X64-NEXT: cmovael %eax, %ecx396; X64-NEXT: ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0397; X64-NEXT: movl $-1, %eax398; X64-NEXT: cmovbel %ecx, %eax399; X64-NEXT: retq400 %x = call i32 @llvm.fptoui.sat.i32.f32(float %f)401 ret i32 %x402}403 404define i50 @test_unsigned_i50_f32(float %f) nounwind {405; X86-X87-LABEL: test_unsigned_i50_f32:406; X86-X87: # %bb.0:407; X86-X87-NEXT: pushl %esi408; X86-X87-NEXT: subl $16, %esp409; X86-X87-NEXT: flds {{[0-9]+}}(%esp)410; X86-X87-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}411; X86-X87-NEXT: fucom %st(1)412; X86-X87-NEXT: fnstsw %ax413; X86-X87-NEXT: xorl %ecx, %ecx414; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax415; X86-X87-NEXT: sahf416; X86-X87-NEXT: setbe %al417; X86-X87-NEXT: fldz418; X86-X87-NEXT: jbe .LBB6_2419; X86-X87-NEXT: # %bb.1:420; X86-X87-NEXT: fstp %st(1)421; X86-X87-NEXT: fld %st(0)422; X86-X87-NEXT: fxch %st(1)423; X86-X87-NEXT: .LBB6_2:424; X86-X87-NEXT: fxch %st(1)425; X86-X87-NEXT: fsubr %st(2), %st426; X86-X87-NEXT: fnstcw {{[0-9]+}}(%esp)427; X86-X87-NEXT: movzwl {{[0-9]+}}(%esp), %edx428; X86-X87-NEXT: orl $3072, %edx # imm = 0xC00429; X86-X87-NEXT: movw %dx, {{[0-9]+}}(%esp)430; X86-X87-NEXT: fldcw {{[0-9]+}}(%esp)431; X86-X87-NEXT: fistpll {{[0-9]+}}(%esp)432; X86-X87-NEXT: fldcw {{[0-9]+}}(%esp)433; X86-X87-NEXT: movb %al, %cl434; X86-X87-NEXT: shll $31, %ecx435; X86-X87-NEXT: xorl {{[0-9]+}}(%esp), %ecx436; X86-X87-NEXT: fxch %st(1)437; X86-X87-NEXT: fucom %st(1)438; X86-X87-NEXT: fstp %st(1)439; X86-X87-NEXT: fnstsw %ax440; X86-X87-NEXT: xorl %edx, %edx441; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax442; X86-X87-NEXT: sahf443; X86-X87-NEXT: movl $0, %esi444; X86-X87-NEXT: jb .LBB6_4445; X86-X87-NEXT: # %bb.3:446; X86-X87-NEXT: movl %ecx, %esi447; X86-X87-NEXT: .LBB6_4:448; X86-X87-NEXT: jb .LBB6_6449; X86-X87-NEXT: # %bb.5:450; X86-X87-NEXT: movl {{[0-9]+}}(%esp), %edx451; X86-X87-NEXT: .LBB6_6:452; X86-X87-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}453; X86-X87-NEXT: fxch %st(1)454; X86-X87-NEXT: fucompp455; X86-X87-NEXT: fnstsw %ax456; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax457; X86-X87-NEXT: sahf458; X86-X87-NEXT: movl $-1, %eax459; X86-X87-NEXT: ja .LBB6_8460; X86-X87-NEXT: # %bb.7:461; X86-X87-NEXT: movl %edx, %eax462; X86-X87-NEXT: .LBB6_8:463; X86-X87-NEXT: movl $262143, %edx # imm = 0x3FFFF464; X86-X87-NEXT: ja .LBB6_10465; X86-X87-NEXT: # %bb.9:466; X86-X87-NEXT: movl %esi, %edx467; X86-X87-NEXT: .LBB6_10:468; X86-X87-NEXT: addl $16, %esp469; X86-X87-NEXT: popl %esi470; X86-X87-NEXT: retl471;472; X86-SSE-LABEL: test_unsigned_i50_f32:473; X86-SSE: # %bb.0:474; X86-SSE-NEXT: pushl %esi475; X86-SSE-NEXT: subl $16, %esp476; X86-SSE-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero477; X86-SSE-NEXT: movss {{.*#+}} xmm2 = [9.22337203E+18,0.0E+0,0.0E+0,0.0E+0]478; X86-SSE-NEXT: ucomiss %xmm0, %xmm2479; X86-SSE-NEXT: xorps %xmm1, %xmm1480; X86-SSE-NEXT: jbe .LBB6_2481; X86-SSE-NEXT: # %bb.1:482; X86-SSE-NEXT: xorps %xmm2, %xmm2483; X86-SSE-NEXT: .LBB6_2:484; X86-SSE-NEXT: movaps %xmm0, %xmm3485; X86-SSE-NEXT: subss %xmm2, %xmm3486; X86-SSE-NEXT: movss %xmm3, {{[0-9]+}}(%esp)487; X86-SSE-NEXT: setbe %cl488; X86-SSE-NEXT: flds {{[0-9]+}}(%esp)489; X86-SSE-NEXT: fnstcw {{[0-9]+}}(%esp)490; X86-SSE-NEXT: movzwl {{[0-9]+}}(%esp), %eax491; X86-SSE-NEXT: orl $3072, %eax # imm = 0xC00492; X86-SSE-NEXT: movw %ax, {{[0-9]+}}(%esp)493; X86-SSE-NEXT: fldcw {{[0-9]+}}(%esp)494; X86-SSE-NEXT: fistpll {{[0-9]+}}(%esp)495; X86-SSE-NEXT: fldcw {{[0-9]+}}(%esp)496; X86-SSE-NEXT: xorl %eax, %eax497; X86-SSE-NEXT: ucomiss %xmm1, %xmm0498; X86-SSE-NEXT: movl $0, %esi499; X86-SSE-NEXT: jb .LBB6_4500; X86-SSE-NEXT: # %bb.3:501; X86-SSE-NEXT: movzbl %cl, %eax502; X86-SSE-NEXT: shll $31, %eax503; X86-SSE-NEXT: xorl {{[0-9]+}}(%esp), %eax504; X86-SSE-NEXT: movl {{[0-9]+}}(%esp), %esi505; X86-SSE-NEXT: .LBB6_4:506; X86-SSE-NEXT: ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0507; X86-SSE-NEXT: movl $262143, %edx # imm = 0x3FFFF508; X86-SSE-NEXT: cmovbel %eax, %edx509; X86-SSE-NEXT: movl $-1, %eax510; X86-SSE-NEXT: cmovbel %esi, %eax511; X86-SSE-NEXT: addl $16, %esp512; X86-SSE-NEXT: popl %esi513; X86-SSE-NEXT: retl514;515; X64-LABEL: test_unsigned_i50_f32:516; X64: # %bb.0:517; X64-NEXT: cvttss2si %xmm0, %rax518; X64-NEXT: xorl %ecx, %ecx519; X64-NEXT: xorps %xmm1, %xmm1520; X64-NEXT: ucomiss %xmm1, %xmm0521; X64-NEXT: cmovaeq %rax, %rcx522; X64-NEXT: ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0523; X64-NEXT: movabsq $1125899906842623, %rax # imm = 0x3FFFFFFFFFFFF524; X64-NEXT: cmovbeq %rcx, %rax525; X64-NEXT: retq526 %x = call i50 @llvm.fptoui.sat.i50.f32(float %f)527 ret i50 %x528}529 530define i64 @test_unsigned_i64_f32(float %f) nounwind {531; X86-X87-LABEL: test_unsigned_i64_f32:532; X86-X87: # %bb.0:533; X86-X87-NEXT: pushl %edi534; X86-X87-NEXT: pushl %esi535; X86-X87-NEXT: subl $20, %esp536; X86-X87-NEXT: flds {{[0-9]+}}(%esp)537; X86-X87-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}538; X86-X87-NEXT: fucom %st(1)539; X86-X87-NEXT: fnstsw %ax540; X86-X87-NEXT: xorl %ecx, %ecx541; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax542; X86-X87-NEXT: sahf543; X86-X87-NEXT: setbe %al544; X86-X87-NEXT: fldz545; X86-X87-NEXT: jbe .LBB7_2546; X86-X87-NEXT: # %bb.1:547; X86-X87-NEXT: fstp %st(1)548; X86-X87-NEXT: fld %st(0)549; X86-X87-NEXT: fxch %st(1)550; X86-X87-NEXT: .LBB7_2:551; X86-X87-NEXT: fxch %st(1)552; X86-X87-NEXT: fsubr %st(2), %st553; X86-X87-NEXT: fnstcw {{[0-9]+}}(%esp)554; X86-X87-NEXT: movzwl {{[0-9]+}}(%esp), %edx555; X86-X87-NEXT: orl $3072, %edx # imm = 0xC00556; X86-X87-NEXT: movw %dx, {{[0-9]+}}(%esp)557; X86-X87-NEXT: fldcw {{[0-9]+}}(%esp)558; X86-X87-NEXT: fistpll {{[0-9]+}}(%esp)559; X86-X87-NEXT: fldcw {{[0-9]+}}(%esp)560; X86-X87-NEXT: movb %al, %cl561; X86-X87-NEXT: shll $31, %ecx562; X86-X87-NEXT: xorl {{[0-9]+}}(%esp), %ecx563; X86-X87-NEXT: fxch %st(1)564; X86-X87-NEXT: fucom %st(1)565; X86-X87-NEXT: fstp %st(1)566; X86-X87-NEXT: fnstsw %ax567; X86-X87-NEXT: xorl %esi, %esi568; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax569; X86-X87-NEXT: sahf570; X86-X87-NEXT: movl $0, %edi571; X86-X87-NEXT: jb .LBB7_4572; X86-X87-NEXT: # %bb.3:573; X86-X87-NEXT: movl %ecx, %edi574; X86-X87-NEXT: .LBB7_4:575; X86-X87-NEXT: jb .LBB7_6576; X86-X87-NEXT: # %bb.5:577; X86-X87-NEXT: movl {{[0-9]+}}(%esp), %esi578; X86-X87-NEXT: .LBB7_6:579; X86-X87-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}580; X86-X87-NEXT: fxch %st(1)581; X86-X87-NEXT: fucompp582; X86-X87-NEXT: fnstsw %ax583; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax584; X86-X87-NEXT: sahf585; X86-X87-NEXT: movl $-1, %eax586; X86-X87-NEXT: movl $-1, %edx587; X86-X87-NEXT: ja .LBB7_8588; X86-X87-NEXT: # %bb.7:589; X86-X87-NEXT: movl %esi, %eax590; X86-X87-NEXT: movl %edi, %edx591; X86-X87-NEXT: .LBB7_8:592; X86-X87-NEXT: addl $20, %esp593; X86-X87-NEXT: popl %esi594; X86-X87-NEXT: popl %edi595; X86-X87-NEXT: retl596;597; X86-SSE-LABEL: test_unsigned_i64_f32:598; X86-SSE: # %bb.0:599; X86-SSE-NEXT: subl $20, %esp600; X86-SSE-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero601; X86-SSE-NEXT: movss {{.*#+}} xmm2 = [9.22337203E+18,0.0E+0,0.0E+0,0.0E+0]602; X86-SSE-NEXT: ucomiss %xmm0, %xmm2603; X86-SSE-NEXT: xorps %xmm1, %xmm1604; X86-SSE-NEXT: jbe .LBB7_2605; X86-SSE-NEXT: # %bb.1:606; X86-SSE-NEXT: xorps %xmm2, %xmm2607; X86-SSE-NEXT: .LBB7_2:608; X86-SSE-NEXT: movaps %xmm0, %xmm3609; X86-SSE-NEXT: subss %xmm2, %xmm3610; X86-SSE-NEXT: movss %xmm3, {{[0-9]+}}(%esp)611; X86-SSE-NEXT: setbe %cl612; X86-SSE-NEXT: flds {{[0-9]+}}(%esp)613; X86-SSE-NEXT: fnstcw {{[0-9]+}}(%esp)614; X86-SSE-NEXT: movzwl {{[0-9]+}}(%esp), %eax615; X86-SSE-NEXT: orl $3072, %eax # imm = 0xC00616; X86-SSE-NEXT: movw %ax, {{[0-9]+}}(%esp)617; X86-SSE-NEXT: fldcw {{[0-9]+}}(%esp)618; X86-SSE-NEXT: fistpll {{[0-9]+}}(%esp)619; X86-SSE-NEXT: fldcw {{[0-9]+}}(%esp)620; X86-SSE-NEXT: xorl %edx, %edx621; X86-SSE-NEXT: ucomiss %xmm1, %xmm0622; X86-SSE-NEXT: movl $0, %eax623; X86-SSE-NEXT: jb .LBB7_4624; X86-SSE-NEXT: # %bb.3:625; X86-SSE-NEXT: movzbl %cl, %edx626; X86-SSE-NEXT: shll $31, %edx627; X86-SSE-NEXT: xorl {{[0-9]+}}(%esp), %edx628; X86-SSE-NEXT: movl {{[0-9]+}}(%esp), %eax629; X86-SSE-NEXT: .LBB7_4:630; X86-SSE-NEXT: ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0631; X86-SSE-NEXT: movl $-1, %ecx632; X86-SSE-NEXT: cmoval %ecx, %edx633; X86-SSE-NEXT: cmoval %ecx, %eax634; X86-SSE-NEXT: addl $20, %esp635; X86-SSE-NEXT: retl636;637; X64-LABEL: test_unsigned_i64_f32:638; X64: # %bb.0:639; X64-NEXT: cvttss2si %xmm0, %rax640; X64-NEXT: movq %rax, %rcx641; X64-NEXT: sarq $63, %rcx642; X64-NEXT: movaps %xmm0, %xmm1643; X64-NEXT: subss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1644; X64-NEXT: cvttss2si %xmm1, %rdx645; X64-NEXT: andq %rcx, %rdx646; X64-NEXT: orq %rax, %rdx647; X64-NEXT: xorl %ecx, %ecx648; X64-NEXT: xorps %xmm1, %xmm1649; X64-NEXT: ucomiss %xmm1, %xmm0650; X64-NEXT: cmovaeq %rdx, %rcx651; X64-NEXT: ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0652; X64-NEXT: movq $-1, %rax653; X64-NEXT: cmovbeq %rcx, %rax654; X64-NEXT: retq655 %x = call i64 @llvm.fptoui.sat.i64.f32(float %f)656 ret i64 %x657}658 659define i100 @test_unsigned_i100_f32(float %f) nounwind {660; X86-X87-LABEL: test_unsigned_i100_f32:661; X86-X87: # %bb.0:662; X86-X87-NEXT: pushl %ebp663; X86-X87-NEXT: pushl %ebx664; X86-X87-NEXT: pushl %edi665; X86-X87-NEXT: pushl %esi666; X86-X87-NEXT: subl $44, %esp667; X86-X87-NEXT: flds {{[0-9]+}}(%esp)668; X86-X87-NEXT: fsts {{[0-9]+}}(%esp)669; X86-X87-NEXT: leal {{[0-9]+}}(%esp), %eax670; X86-X87-NEXT: movl %eax, (%esp)671; X86-X87-NEXT: fldz672; X86-X87-NEXT: fxch %st(1)673; X86-X87-NEXT: fsts {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill674; X86-X87-NEXT: fucompp675; X86-X87-NEXT: fnstsw %ax676; X86-X87-NEXT: movl %eax, %ebx677; X86-X87-NEXT: calll __fixunssfti678; X86-X87-NEXT: subl $4, %esp679; X86-X87-NEXT: xorl %edi, %edi680; X86-X87-NEXT: movb %bh, %ah681; X86-X87-NEXT: sahf682; X86-X87-NEXT: movl $0, %eax683; X86-X87-NEXT: jb .LBB8_2684; X86-X87-NEXT: # %bb.1:685; X86-X87-NEXT: movl {{[0-9]+}}(%esp), %eax686; X86-X87-NEXT: .LBB8_2:687; X86-X87-NEXT: movl $0, %esi688; X86-X87-NEXT: movl $0, %ebx689; X86-X87-NEXT: jb .LBB8_4690; X86-X87-NEXT: # %bb.3:691; X86-X87-NEXT: movl {{[0-9]+}}(%esp), %ebx692; X86-X87-NEXT: movl {{[0-9]+}}(%esp), %esi693; X86-X87-NEXT: .LBB8_4:694; X86-X87-NEXT: jb .LBB8_6695; X86-X87-NEXT: # %bb.5:696; X86-X87-NEXT: movl {{[0-9]+}}(%esp), %edi697; X86-X87-NEXT: .LBB8_6:698; X86-X87-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill699; X86-X87-NEXT: movl {{[0-9]+}}(%esp), %ecx700; X86-X87-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}701; X86-X87-NEXT: flds {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload702; X86-X87-NEXT: fucompp703; X86-X87-NEXT: fnstsw %ax704; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax705; X86-X87-NEXT: sahf706; X86-X87-NEXT: movl $15, %eax707; X86-X87-NEXT: ja .LBB8_8708; X86-X87-NEXT: # %bb.7:709; X86-X87-NEXT: movl %edi, %eax710; X86-X87-NEXT: .LBB8_8:711; X86-X87-NEXT: movl $-1, %edi712; X86-X87-NEXT: movl $-1, %ebp713; X86-X87-NEXT: movl $-1, %edx714; X86-X87-NEXT: ja .LBB8_10715; X86-X87-NEXT: # %bb.9:716; X86-X87-NEXT: movl %ebx, %edi717; X86-X87-NEXT: movl %esi, %ebp718; X86-X87-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload719; X86-X87-NEXT: .LBB8_10:720; X86-X87-NEXT: movl %edx, 8(%ecx)721; X86-X87-NEXT: movl %ebp, 4(%ecx)722; X86-X87-NEXT: movl %edi, (%ecx)723; X86-X87-NEXT: andl $15, %eax724; X86-X87-NEXT: movb %al, 12(%ecx)725; X86-X87-NEXT: movl %ecx, %eax726; X86-X87-NEXT: addl $44, %esp727; X86-X87-NEXT: popl %esi728; X86-X87-NEXT: popl %edi729; X86-X87-NEXT: popl %ebx730; X86-X87-NEXT: popl %ebp731; X86-X87-NEXT: retl $4732;733; X86-SSE-LABEL: test_unsigned_i100_f32:734; X86-SSE: # %bb.0:735; X86-SSE-NEXT: pushl %ebx736; X86-SSE-NEXT: pushl %edi737; X86-SSE-NEXT: pushl %esi738; X86-SSE-NEXT: subl $32, %esp739; X86-SSE-NEXT: movl {{[0-9]+}}(%esp), %esi740; X86-SSE-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero741; X86-SSE-NEXT: movss %xmm0, {{[0-9]+}}(%esp)742; X86-SSE-NEXT: leal {{[0-9]+}}(%esp), %eax743; X86-SSE-NEXT: movl %eax, (%esp)744; X86-SSE-NEXT: calll __fixunssfti745; X86-SSE-NEXT: subl $4, %esp746; X86-SSE-NEXT: xorl %eax, %eax747; X86-SSE-NEXT: xorps %xmm0, %xmm0748; X86-SSE-NEXT: movss {{.*#+}} xmm1 = mem[0],zero,zero,zero749; X86-SSE-NEXT: ucomiss %xmm0, %xmm1750; X86-SSE-NEXT: movaps %xmm1, %xmm0751; X86-SSE-NEXT: movl $0, %ecx752; X86-SSE-NEXT: movl $0, %edx753; X86-SSE-NEXT: movl $0, %edi754; X86-SSE-NEXT: jb .LBB8_2755; X86-SSE-NEXT: # %bb.1:756; X86-SSE-NEXT: movl {{[0-9]+}}(%esp), %eax757; X86-SSE-NEXT: movl {{[0-9]+}}(%esp), %ecx758; X86-SSE-NEXT: movl {{[0-9]+}}(%esp), %edx759; X86-SSE-NEXT: movl {{[0-9]+}}(%esp), %edi760; X86-SSE-NEXT: .LBB8_2:761; X86-SSE-NEXT: ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0762; X86-SSE-NEXT: movl $15, %ebx763; X86-SSE-NEXT: cmovbel %edi, %ebx764; X86-SSE-NEXT: movl $-1, %edi765; X86-SSE-NEXT: cmoval %edi, %edx766; X86-SSE-NEXT: cmoval %edi, %ecx767; X86-SSE-NEXT: cmoval %edi, %eax768; X86-SSE-NEXT: movl %eax, 8(%esi)769; X86-SSE-NEXT: movl %ecx, 4(%esi)770; X86-SSE-NEXT: movl %edx, (%esi)771; X86-SSE-NEXT: andl $15, %ebx772; X86-SSE-NEXT: movb %bl, 12(%esi)773; X86-SSE-NEXT: movl %esi, %eax774; X86-SSE-NEXT: addl $32, %esp775; X86-SSE-NEXT: popl %esi776; X86-SSE-NEXT: popl %edi777; X86-SSE-NEXT: popl %ebx778; X86-SSE-NEXT: retl $4779;780; X64-LABEL: test_unsigned_i100_f32:781; X64: # %bb.0:782; X64-NEXT: pushq %rax783; X64-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill784; X64-NEXT: callq __fixunssfti@PLT785; X64-NEXT: xorl %ecx, %ecx786; X64-NEXT: xorps %xmm0, %xmm0787; X64-NEXT: movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload788; X64-NEXT: # xmm1 = mem[0],zero,zero,zero789; X64-NEXT: ucomiss %xmm0, %xmm1790; X64-NEXT: cmovbq %rcx, %rdx791; X64-NEXT: cmovbq %rcx, %rax792; X64-NEXT: ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1793; X64-NEXT: movq $-1, %rcx794; X64-NEXT: cmovaq %rcx, %rax795; X64-NEXT: movabsq $68719476735, %rcx # imm = 0xFFFFFFFFF796; X64-NEXT: cmovaq %rcx, %rdx797; X64-NEXT: popq %rcx798; X64-NEXT: retq799 %x = call i100 @llvm.fptoui.sat.i100.f32(float %f)800 ret i100 %x801}802 803define i128 @test_unsigned_i128_f32(float %f) nounwind {804; X86-X87-LABEL: test_unsigned_i128_f32:805; X86-X87: # %bb.0:806; X86-X87-NEXT: pushl %ebp807; X86-X87-NEXT: pushl %ebx808; X86-X87-NEXT: pushl %edi809; X86-X87-NEXT: pushl %esi810; X86-X87-NEXT: subl $60, %esp811; X86-X87-NEXT: flds {{[0-9]+}}(%esp)812; X86-X87-NEXT: fsts {{[0-9]+}}(%esp)813; X86-X87-NEXT: leal {{[0-9]+}}(%esp), %eax814; X86-X87-NEXT: movl %eax, (%esp)815; X86-X87-NEXT: fldz816; X86-X87-NEXT: fxch %st(1)817; X86-X87-NEXT: fsts {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill818; X86-X87-NEXT: fucompp819; X86-X87-NEXT: fnstsw %ax820; X86-X87-NEXT: movl %eax, %ebx821; X86-X87-NEXT: calll __fixunssfti822; X86-X87-NEXT: subl $4, %esp823; X86-X87-NEXT: xorl %edx, %edx824; X86-X87-NEXT: movb %bh, %ah825; X86-X87-NEXT: sahf826; X86-X87-NEXT: movl $0, %eax827; X86-X87-NEXT: jb .LBB9_2828; X86-X87-NEXT: # %bb.1:829; X86-X87-NEXT: movl {{[0-9]+}}(%esp), %eax830; X86-X87-NEXT: .LBB9_2:831; X86-X87-NEXT: movl $0, %ecx832; X86-X87-NEXT: jb .LBB9_4833; X86-X87-NEXT: # %bb.3:834; X86-X87-NEXT: movl {{[0-9]+}}(%esp), %ecx835; X86-X87-NEXT: .LBB9_4:836; X86-X87-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill837; X86-X87-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill838; X86-X87-NEXT: movl {{[0-9]+}}(%esp), %ecx839; X86-X87-NEXT: movl $0, %ebx840; X86-X87-NEXT: jb .LBB9_6841; X86-X87-NEXT: # %bb.5:842; X86-X87-NEXT: movl {{[0-9]+}}(%esp), %ebx843; X86-X87-NEXT: movl {{[0-9]+}}(%esp), %edx844; X86-X87-NEXT: .LBB9_6:845; X86-X87-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}846; X86-X87-NEXT: flds {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload847; X86-X87-NEXT: fucompp848; X86-X87-NEXT: fnstsw %ax849; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax850; X86-X87-NEXT: sahf851; X86-X87-NEXT: movl $-1, %eax852; X86-X87-NEXT: movl $-1, %ebp853; X86-X87-NEXT: movl $-1, %edi854; X86-X87-NEXT: movl $-1, %esi855; X86-X87-NEXT: ja .LBB9_8856; X86-X87-NEXT: # %bb.7:857; X86-X87-NEXT: movl %ebx, %eax858; X86-X87-NEXT: movl %edx, %ebp859; X86-X87-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edi # 4-byte Reload860; X86-X87-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload861; X86-X87-NEXT: .LBB9_8:862; X86-X87-NEXT: movl %esi, 12(%ecx)863; X86-X87-NEXT: movl %edi, 8(%ecx)864; X86-X87-NEXT: movl %ebp, 4(%ecx)865; X86-X87-NEXT: movl %eax, (%ecx)866; X86-X87-NEXT: movl %ecx, %eax867; X86-X87-NEXT: addl $60, %esp868; X86-X87-NEXT: popl %esi869; X86-X87-NEXT: popl %edi870; X86-X87-NEXT: popl %ebx871; X86-X87-NEXT: popl %ebp872; X86-X87-NEXT: retl $4873;874; X86-SSE-LABEL: test_unsigned_i128_f32:875; X86-SSE: # %bb.0:876; X86-SSE-NEXT: pushl %ebx877; X86-SSE-NEXT: pushl %edi878; X86-SSE-NEXT: pushl %esi879; X86-SSE-NEXT: subl $32, %esp880; X86-SSE-NEXT: movl {{[0-9]+}}(%esp), %esi881; X86-SSE-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero882; X86-SSE-NEXT: movss %xmm0, {{[0-9]+}}(%esp)883; X86-SSE-NEXT: leal {{[0-9]+}}(%esp), %eax884; X86-SSE-NEXT: movl %eax, (%esp)885; X86-SSE-NEXT: calll __fixunssfti886; X86-SSE-NEXT: subl $4, %esp887; X86-SSE-NEXT: xorl %eax, %eax888; X86-SSE-NEXT: xorps %xmm0, %xmm0889; X86-SSE-NEXT: movss {{.*#+}} xmm1 = mem[0],zero,zero,zero890; X86-SSE-NEXT: ucomiss %xmm0, %xmm1891; X86-SSE-NEXT: movaps %xmm1, %xmm0892; X86-SSE-NEXT: movl $0, %ecx893; X86-SSE-NEXT: movl $0, %edx894; X86-SSE-NEXT: movl $0, %edi895; X86-SSE-NEXT: jb .LBB9_2896; X86-SSE-NEXT: # %bb.1:897; X86-SSE-NEXT: movl {{[0-9]+}}(%esp), %eax898; X86-SSE-NEXT: movl {{[0-9]+}}(%esp), %ecx899; X86-SSE-NEXT: movl {{[0-9]+}}(%esp), %edx900; X86-SSE-NEXT: movl {{[0-9]+}}(%esp), %edi901; X86-SSE-NEXT: .LBB9_2:902; X86-SSE-NEXT: ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0903; X86-SSE-NEXT: movl $-1, %ebx904; X86-SSE-NEXT: cmoval %ebx, %edi905; X86-SSE-NEXT: cmoval %ebx, %edx906; X86-SSE-NEXT: cmoval %ebx, %ecx907; X86-SSE-NEXT: cmoval %ebx, %eax908; X86-SSE-NEXT: movl %eax, 12(%esi)909; X86-SSE-NEXT: movl %ecx, 8(%esi)910; X86-SSE-NEXT: movl %edx, 4(%esi)911; X86-SSE-NEXT: movl %edi, (%esi)912; X86-SSE-NEXT: movl %esi, %eax913; X86-SSE-NEXT: addl $32, %esp914; X86-SSE-NEXT: popl %esi915; X86-SSE-NEXT: popl %edi916; X86-SSE-NEXT: popl %ebx917; X86-SSE-NEXT: retl $4918;919; X64-LABEL: test_unsigned_i128_f32:920; X64: # %bb.0:921; X64-NEXT: pushq %rax922; X64-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill923; X64-NEXT: callq __fixunssfti@PLT924; X64-NEXT: xorl %ecx, %ecx925; X64-NEXT: xorps %xmm0, %xmm0926; X64-NEXT: movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload927; X64-NEXT: # xmm1 = mem[0],zero,zero,zero928; X64-NEXT: ucomiss %xmm0, %xmm1929; X64-NEXT: cmovbq %rcx, %rdx930; X64-NEXT: cmovbq %rcx, %rax931; X64-NEXT: ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1932; X64-NEXT: movq $-1, %rcx933; X64-NEXT: cmovaq %rcx, %rax934; X64-NEXT: cmovaq %rcx, %rdx935; X64-NEXT: popq %rcx936; X64-NEXT: retq937 %x = call i128 @llvm.fptoui.sat.i128.f32(float %f)938 ret i128 %x939}940 941;942; 64-bit float to unsigned integer943;944 945declare i1 @llvm.fptoui.sat.i1.f64 (double)946declare i8 @llvm.fptoui.sat.i8.f64 (double)947declare i13 @llvm.fptoui.sat.i13.f64 (double)948declare i16 @llvm.fptoui.sat.i16.f64 (double)949declare i19 @llvm.fptoui.sat.i19.f64 (double)950declare i32 @llvm.fptoui.sat.i32.f64 (double)951declare i50 @llvm.fptoui.sat.i50.f64 (double)952declare i64 @llvm.fptoui.sat.i64.f64 (double)953declare i100 @llvm.fptoui.sat.i100.f64(double)954declare i128 @llvm.fptoui.sat.i128.f64(double)955 956define i1 @test_unsigned_i1_f64(double %f) nounwind {957; X86-X87-LABEL: test_unsigned_i1_f64:958; X86-X87: # %bb.0:959; X86-X87-NEXT: subl $8, %esp960; X86-X87-NEXT: fldl {{[0-9]+}}(%esp)961; X86-X87-NEXT: fnstcw {{[0-9]+}}(%esp)962; X86-X87-NEXT: movzwl {{[0-9]+}}(%esp), %eax963; X86-X87-NEXT: orl $3072, %eax # imm = 0xC00964; X86-X87-NEXT: movw %ax, {{[0-9]+}}(%esp)965; X86-X87-NEXT: fldcw {{[0-9]+}}(%esp)966; X86-X87-NEXT: fists {{[0-9]+}}(%esp)967; X86-X87-NEXT: fldcw {{[0-9]+}}(%esp)968; X86-X87-NEXT: fldz969; X86-X87-NEXT: fxch %st(1)970; X86-X87-NEXT: fucom %st(1)971; X86-X87-NEXT: fstp %st(1)972; X86-X87-NEXT: fnstsw %ax973; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax974; X86-X87-NEXT: sahf975; X86-X87-NEXT: jb .LBB10_1976; X86-X87-NEXT: # %bb.2:977; X86-X87-NEXT: movzbl {{[0-9]+}}(%esp), %ecx978; X86-X87-NEXT: jmp .LBB10_3979; X86-X87-NEXT: .LBB10_1:980; X86-X87-NEXT: xorl %ecx, %ecx981; X86-X87-NEXT: .LBB10_3:982; X86-X87-NEXT: fld1983; X86-X87-NEXT: fxch %st(1)984; X86-X87-NEXT: fucompp985; X86-X87-NEXT: fnstsw %ax986; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax987; X86-X87-NEXT: sahf988; X86-X87-NEXT: movb $1, %al989; X86-X87-NEXT: ja .LBB10_5990; X86-X87-NEXT: # %bb.4:991; X86-X87-NEXT: movl %ecx, %eax992; X86-X87-NEXT: .LBB10_5:993; X86-X87-NEXT: addl $8, %esp994; X86-X87-NEXT: retl995;996; X86-SSE-LABEL: test_unsigned_i1_f64:997; X86-SSE: # %bb.0:998; X86-SSE-NEXT: xorpd %xmm0, %xmm0999; X86-SSE-NEXT: maxsd {{[0-9]+}}(%esp), %xmm01000; X86-SSE-NEXT: movsd {{.*#+}} xmm1 = [1.0E+0,0.0E+0]1001; X86-SSE-NEXT: minsd %xmm0, %xmm11002; X86-SSE-NEXT: cvttsd2si %xmm1, %eax1003; X86-SSE-NEXT: # kill: def $al killed $al killed $eax1004; X86-SSE-NEXT: retl1005;1006; X64-LABEL: test_unsigned_i1_f64:1007; X64: # %bb.0:1008; X64-NEXT: xorpd %xmm1, %xmm11009; X64-NEXT: maxsd %xmm0, %xmm11010; X64-NEXT: movsd {{.*#+}} xmm0 = [1.0E+0,0.0E+0]1011; X64-NEXT: minsd %xmm1, %xmm01012; X64-NEXT: cvttsd2si %xmm0, %eax1013; X64-NEXT: # kill: def $al killed $al killed $eax1014; X64-NEXT: retq1015 %x = call i1 @llvm.fptoui.sat.i1.f64(double %f)1016 ret i1 %x1017}1018 1019define i8 @test_unsigned_i8_f64(double %f) nounwind {1020; X86-X87-LABEL: test_unsigned_i8_f64:1021; X86-X87: # %bb.0:1022; X86-X87-NEXT: subl $8, %esp1023; X86-X87-NEXT: fldl {{[0-9]+}}(%esp)1024; X86-X87-NEXT: fnstcw {{[0-9]+}}(%esp)1025; X86-X87-NEXT: movzwl {{[0-9]+}}(%esp), %eax1026; X86-X87-NEXT: orl $3072, %eax # imm = 0xC001027; X86-X87-NEXT: movw %ax, {{[0-9]+}}(%esp)1028; X86-X87-NEXT: fldcw {{[0-9]+}}(%esp)1029; X86-X87-NEXT: fists {{[0-9]+}}(%esp)1030; X86-X87-NEXT: fldcw {{[0-9]+}}(%esp)1031; X86-X87-NEXT: fldz1032; X86-X87-NEXT: fxch %st(1)1033; X86-X87-NEXT: fucom %st(1)1034; X86-X87-NEXT: fstp %st(1)1035; X86-X87-NEXT: fnstsw %ax1036; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax1037; X86-X87-NEXT: sahf1038; X86-X87-NEXT: jb .LBB11_11039; X86-X87-NEXT: # %bb.2:1040; X86-X87-NEXT: movzbl {{[0-9]+}}(%esp), %ecx1041; X86-X87-NEXT: jmp .LBB11_31042; X86-X87-NEXT: .LBB11_1:1043; X86-X87-NEXT: xorl %ecx, %ecx1044; X86-X87-NEXT: .LBB11_3:1045; X86-X87-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}1046; X86-X87-NEXT: fxch %st(1)1047; X86-X87-NEXT: fucompp1048; X86-X87-NEXT: fnstsw %ax1049; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax1050; X86-X87-NEXT: sahf1051; X86-X87-NEXT: movb $-1, %al1052; X86-X87-NEXT: ja .LBB11_51053; X86-X87-NEXT: # %bb.4:1054; X86-X87-NEXT: movl %ecx, %eax1055; X86-X87-NEXT: .LBB11_5:1056; X86-X87-NEXT: addl $8, %esp1057; X86-X87-NEXT: retl1058;1059; X86-SSE-LABEL: test_unsigned_i8_f64:1060; X86-SSE: # %bb.0:1061; X86-SSE-NEXT: xorpd %xmm0, %xmm01062; X86-SSE-NEXT: maxsd {{[0-9]+}}(%esp), %xmm01063; X86-SSE-NEXT: movsd {{.*#+}} xmm1 = [2.55E+2,0.0E+0]1064; X86-SSE-NEXT: minsd %xmm0, %xmm11065; X86-SSE-NEXT: cvttsd2si %xmm1, %eax1066; X86-SSE-NEXT: # kill: def $al killed $al killed $eax1067; X86-SSE-NEXT: retl1068;1069; X64-LABEL: test_unsigned_i8_f64:1070; X64: # %bb.0:1071; X64-NEXT: xorpd %xmm1, %xmm11072; X64-NEXT: maxsd %xmm0, %xmm11073; X64-NEXT: movsd {{.*#+}} xmm0 = [2.55E+2,0.0E+0]1074; X64-NEXT: minsd %xmm1, %xmm01075; X64-NEXT: cvttsd2si %xmm0, %eax1076; X64-NEXT: # kill: def $al killed $al killed $eax1077; X64-NEXT: retq1078 %x = call i8 @llvm.fptoui.sat.i8.f64(double %f)1079 ret i8 %x1080}1081 1082define i13 @test_unsigned_i13_f64(double %f) nounwind {1083; X86-X87-LABEL: test_unsigned_i13_f64:1084; X86-X87: # %bb.0:1085; X86-X87-NEXT: subl $8, %esp1086; X86-X87-NEXT: fldl {{[0-9]+}}(%esp)1087; X86-X87-NEXT: fnstcw (%esp)1088; X86-X87-NEXT: movzwl (%esp), %eax1089; X86-X87-NEXT: orl $3072, %eax # imm = 0xC001090; X86-X87-NEXT: movw %ax, {{[0-9]+}}(%esp)1091; X86-X87-NEXT: fldcw {{[0-9]+}}(%esp)1092; X86-X87-NEXT: fistl {{[0-9]+}}(%esp)1093; X86-X87-NEXT: fldcw (%esp)1094; X86-X87-NEXT: fldz1095; X86-X87-NEXT: fxch %st(1)1096; X86-X87-NEXT: fucom %st(1)1097; X86-X87-NEXT: fstp %st(1)1098; X86-X87-NEXT: fnstsw %ax1099; X86-X87-NEXT: xorl %ecx, %ecx1100; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax1101; X86-X87-NEXT: sahf1102; X86-X87-NEXT: jb .LBB12_21103; X86-X87-NEXT: # %bb.1:1104; X86-X87-NEXT: movl {{[0-9]+}}(%esp), %ecx1105; X86-X87-NEXT: .LBB12_2:1106; X86-X87-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}1107; X86-X87-NEXT: fxch %st(1)1108; X86-X87-NEXT: fucompp1109; X86-X87-NEXT: fnstsw %ax1110; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax1111; X86-X87-NEXT: sahf1112; X86-X87-NEXT: movl $8191, %eax # imm = 0x1FFF1113; X86-X87-NEXT: ja .LBB12_41114; X86-X87-NEXT: # %bb.3:1115; X86-X87-NEXT: movl %ecx, %eax1116; X86-X87-NEXT: .LBB12_4:1117; X86-X87-NEXT: # kill: def $ax killed $ax killed $eax1118; X86-X87-NEXT: addl $8, %esp1119; X86-X87-NEXT: retl1120;1121; X86-SSE-LABEL: test_unsigned_i13_f64:1122; X86-SSE: # %bb.0:1123; X86-SSE-NEXT: xorpd %xmm0, %xmm01124; X86-SSE-NEXT: maxsd {{[0-9]+}}(%esp), %xmm01125; X86-SSE-NEXT: movsd {{.*#+}} xmm1 = [8.191E+3,0.0E+0]1126; X86-SSE-NEXT: minsd %xmm0, %xmm11127; X86-SSE-NEXT: cvttsd2si %xmm1, %eax1128; X86-SSE-NEXT: # kill: def $ax killed $ax killed $eax1129; X86-SSE-NEXT: retl1130;1131; X64-LABEL: test_unsigned_i13_f64:1132; X64: # %bb.0:1133; X64-NEXT: xorpd %xmm1, %xmm11134; X64-NEXT: maxsd %xmm0, %xmm11135; X64-NEXT: movsd {{.*#+}} xmm0 = [8.191E+3,0.0E+0]1136; X64-NEXT: minsd %xmm1, %xmm01137; X64-NEXT: cvttsd2si %xmm0, %eax1138; X64-NEXT: # kill: def $ax killed $ax killed $eax1139; X64-NEXT: retq1140 %x = call i13 @llvm.fptoui.sat.i13.f64(double %f)1141 ret i13 %x1142}1143 1144define i16 @test_unsigned_i16_f64(double %f) nounwind {1145; X86-X87-LABEL: test_unsigned_i16_f64:1146; X86-X87: # %bb.0:1147; X86-X87-NEXT: subl $8, %esp1148; X86-X87-NEXT: fldl {{[0-9]+}}(%esp)1149; X86-X87-NEXT: fnstcw (%esp)1150; X86-X87-NEXT: movzwl (%esp), %eax1151; X86-X87-NEXT: orl $3072, %eax # imm = 0xC001152; X86-X87-NEXT: movw %ax, {{[0-9]+}}(%esp)1153; X86-X87-NEXT: fldcw {{[0-9]+}}(%esp)1154; X86-X87-NEXT: fistl {{[0-9]+}}(%esp)1155; X86-X87-NEXT: fldcw (%esp)1156; X86-X87-NEXT: fldz1157; X86-X87-NEXT: fxch %st(1)1158; X86-X87-NEXT: fucom %st(1)1159; X86-X87-NEXT: fstp %st(1)1160; X86-X87-NEXT: fnstsw %ax1161; X86-X87-NEXT: xorl %ecx, %ecx1162; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax1163; X86-X87-NEXT: sahf1164; X86-X87-NEXT: jb .LBB13_21165; X86-X87-NEXT: # %bb.1:1166; X86-X87-NEXT: movl {{[0-9]+}}(%esp), %ecx1167; X86-X87-NEXT: .LBB13_2:1168; X86-X87-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}1169; X86-X87-NEXT: fxch %st(1)1170; X86-X87-NEXT: fucompp1171; X86-X87-NEXT: fnstsw %ax1172; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax1173; X86-X87-NEXT: sahf1174; X86-X87-NEXT: movl $65535, %eax # imm = 0xFFFF1175; X86-X87-NEXT: ja .LBB13_41176; X86-X87-NEXT: # %bb.3:1177; X86-X87-NEXT: movl %ecx, %eax1178; X86-X87-NEXT: .LBB13_4:1179; X86-X87-NEXT: # kill: def $ax killed $ax killed $eax1180; X86-X87-NEXT: addl $8, %esp1181; X86-X87-NEXT: retl1182;1183; X86-SSE-LABEL: test_unsigned_i16_f64:1184; X86-SSE: # %bb.0:1185; X86-SSE-NEXT: xorpd %xmm0, %xmm01186; X86-SSE-NEXT: maxsd {{[0-9]+}}(%esp), %xmm01187; X86-SSE-NEXT: movsd {{.*#+}} xmm1 = [6.5535E+4,0.0E+0]1188; X86-SSE-NEXT: minsd %xmm0, %xmm11189; X86-SSE-NEXT: cvttsd2si %xmm1, %eax1190; X86-SSE-NEXT: # kill: def $ax killed $ax killed $eax1191; X86-SSE-NEXT: retl1192;1193; X64-LABEL: test_unsigned_i16_f64:1194; X64: # %bb.0:1195; X64-NEXT: xorpd %xmm1, %xmm11196; X64-NEXT: maxsd %xmm0, %xmm11197; X64-NEXT: movsd {{.*#+}} xmm0 = [6.5535E+4,0.0E+0]1198; X64-NEXT: minsd %xmm1, %xmm01199; X64-NEXT: cvttsd2si %xmm0, %eax1200; X64-NEXT: # kill: def $ax killed $ax killed $eax1201; X64-NEXT: retq1202 %x = call i16 @llvm.fptoui.sat.i16.f64(double %f)1203 ret i16 %x1204}1205 1206define i19 @test_unsigned_i19_f64(double %f) nounwind {1207; X86-X87-LABEL: test_unsigned_i19_f64:1208; X86-X87: # %bb.0:1209; X86-X87-NEXT: subl $20, %esp1210; X86-X87-NEXT: fldl {{[0-9]+}}(%esp)1211; X86-X87-NEXT: fnstcw {{[0-9]+}}(%esp)1212; X86-X87-NEXT: movzwl {{[0-9]+}}(%esp), %eax1213; X86-X87-NEXT: orl $3072, %eax # imm = 0xC001214; X86-X87-NEXT: movw %ax, {{[0-9]+}}(%esp)1215; X86-X87-NEXT: fldcw {{[0-9]+}}(%esp)1216; X86-X87-NEXT: fld %st(0)1217; X86-X87-NEXT: fistpll {{[0-9]+}}(%esp)1218; X86-X87-NEXT: fldcw {{[0-9]+}}(%esp)1219; X86-X87-NEXT: fldz1220; X86-X87-NEXT: fxch %st(1)1221; X86-X87-NEXT: fucom %st(1)1222; X86-X87-NEXT: fstp %st(1)1223; X86-X87-NEXT: fnstsw %ax1224; X86-X87-NEXT: xorl %ecx, %ecx1225; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax1226; X86-X87-NEXT: sahf1227; X86-X87-NEXT: jb .LBB14_21228; X86-X87-NEXT: # %bb.1:1229; X86-X87-NEXT: movl {{[0-9]+}}(%esp), %ecx1230; X86-X87-NEXT: .LBB14_2:1231; X86-X87-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}1232; X86-X87-NEXT: fxch %st(1)1233; X86-X87-NEXT: fucompp1234; X86-X87-NEXT: fnstsw %ax1235; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax1236; X86-X87-NEXT: sahf1237; X86-X87-NEXT: movl $524287, %eax # imm = 0x7FFFF1238; X86-X87-NEXT: ja .LBB14_41239; X86-X87-NEXT: # %bb.3:1240; X86-X87-NEXT: movl %ecx, %eax1241; X86-X87-NEXT: .LBB14_4:1242; X86-X87-NEXT: addl $20, %esp1243; X86-X87-NEXT: retl1244;1245; X86-SSE-LABEL: test_unsigned_i19_f64:1246; X86-SSE: # %bb.0:1247; X86-SSE-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero1248; X86-SSE-NEXT: xorpd %xmm1, %xmm11249; X86-SSE-NEXT: maxsd %xmm1, %xmm01250; X86-SSE-NEXT: minsd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm01251; X86-SSE-NEXT: cvttsd2si %xmm0, %eax1252; X86-SSE-NEXT: retl1253;1254; X64-LABEL: test_unsigned_i19_f64:1255; X64: # %bb.0:1256; X64-NEXT: xorpd %xmm1, %xmm11257; X64-NEXT: maxsd %xmm1, %xmm01258; X64-NEXT: minsd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01259; X64-NEXT: cvttsd2si %xmm0, %eax1260; X64-NEXT: retq1261 %x = call i19 @llvm.fptoui.sat.i19.f64(double %f)1262 ret i19 %x1263}1264 1265define i32 @test_unsigned_i32_f64(double %f) nounwind {1266; X86-X87-LABEL: test_unsigned_i32_f64:1267; X86-X87: # %bb.0:1268; X86-X87-NEXT: subl $20, %esp1269; X86-X87-NEXT: fldl {{[0-9]+}}(%esp)1270; X86-X87-NEXT: fnstcw {{[0-9]+}}(%esp)1271; X86-X87-NEXT: movzwl {{[0-9]+}}(%esp), %eax1272; X86-X87-NEXT: orl $3072, %eax # imm = 0xC001273; X86-X87-NEXT: movw %ax, {{[0-9]+}}(%esp)1274; X86-X87-NEXT: fldcw {{[0-9]+}}(%esp)1275; X86-X87-NEXT: fld %st(0)1276; X86-X87-NEXT: fistpll {{[0-9]+}}(%esp)1277; X86-X87-NEXT: fldcw {{[0-9]+}}(%esp)1278; X86-X87-NEXT: fldz1279; X86-X87-NEXT: fxch %st(1)1280; X86-X87-NEXT: fucom %st(1)1281; X86-X87-NEXT: fstp %st(1)1282; X86-X87-NEXT: fnstsw %ax1283; X86-X87-NEXT: xorl %ecx, %ecx1284; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax1285; X86-X87-NEXT: sahf1286; X86-X87-NEXT: jb .LBB15_21287; X86-X87-NEXT: # %bb.1:1288; X86-X87-NEXT: movl {{[0-9]+}}(%esp), %ecx1289; X86-X87-NEXT: .LBB15_2:1290; X86-X87-NEXT: fldl {{\.?LCPI[0-9]+_[0-9]+}}1291; X86-X87-NEXT: fxch %st(1)1292; X86-X87-NEXT: fucompp1293; X86-X87-NEXT: fnstsw %ax1294; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax1295; X86-X87-NEXT: sahf1296; X86-X87-NEXT: movl $-1, %eax1297; X86-X87-NEXT: ja .LBB15_41298; X86-X87-NEXT: # %bb.3:1299; X86-X87-NEXT: movl %ecx, %eax1300; X86-X87-NEXT: .LBB15_4:1301; X86-X87-NEXT: addl $20, %esp1302; X86-X87-NEXT: retl1303;1304; X86-SSE-LABEL: test_unsigned_i32_f64:1305; X86-SSE: # %bb.0:1306; X86-SSE-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero1307; X86-SSE-NEXT: xorpd %xmm1, %xmm11308; X86-SSE-NEXT: maxsd %xmm1, %xmm01309; X86-SSE-NEXT: minsd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm01310; X86-SSE-NEXT: cvttsd2si %xmm0, %ecx1311; X86-SSE-NEXT: movl %ecx, %edx1312; X86-SSE-NEXT: sarl $31, %edx1313; X86-SSE-NEXT: subsd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm01314; X86-SSE-NEXT: cvttsd2si %xmm0, %eax1315; X86-SSE-NEXT: andl %edx, %eax1316; X86-SSE-NEXT: orl %ecx, %eax1317; X86-SSE-NEXT: retl1318;1319; X64-LABEL: test_unsigned_i32_f64:1320; X64: # %bb.0:1321; X64-NEXT: xorpd %xmm1, %xmm11322; X64-NEXT: maxsd %xmm0, %xmm11323; X64-NEXT: movsd {{.*#+}} xmm0 = [4.294967295E+9,0.0E+0]1324; X64-NEXT: minsd %xmm1, %xmm01325; X64-NEXT: cvttsd2si %xmm0, %rax1326; X64-NEXT: # kill: def $eax killed $eax killed $rax1327; X64-NEXT: retq1328 %x = call i32 @llvm.fptoui.sat.i32.f64(double %f)1329 ret i32 %x1330}1331 1332define i50 @test_unsigned_i50_f64(double %f) nounwind {1333; X86-X87-LABEL: test_unsigned_i50_f64:1334; X86-X87: # %bb.0:1335; X86-X87-NEXT: pushl %esi1336; X86-X87-NEXT: subl $16, %esp1337; X86-X87-NEXT: fldl {{[0-9]+}}(%esp)1338; X86-X87-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}1339; X86-X87-NEXT: fucom %st(1)1340; X86-X87-NEXT: fnstsw %ax1341; X86-X87-NEXT: xorl %ecx, %ecx1342; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax1343; X86-X87-NEXT: sahf1344; X86-X87-NEXT: setbe %al1345; X86-X87-NEXT: fldz1346; X86-X87-NEXT: jbe .LBB16_21347; X86-X87-NEXT: # %bb.1:1348; X86-X87-NEXT: fstp %st(1)1349; X86-X87-NEXT: fld %st(0)1350; X86-X87-NEXT: fxch %st(1)1351; X86-X87-NEXT: .LBB16_2:1352; X86-X87-NEXT: fxch %st(1)1353; X86-X87-NEXT: fsubr %st(2), %st1354; X86-X87-NEXT: fnstcw {{[0-9]+}}(%esp)1355; X86-X87-NEXT: movzwl {{[0-9]+}}(%esp), %edx1356; X86-X87-NEXT: orl $3072, %edx # imm = 0xC001357; X86-X87-NEXT: movw %dx, {{[0-9]+}}(%esp)1358; X86-X87-NEXT: fldcw {{[0-9]+}}(%esp)1359; X86-X87-NEXT: fistpll {{[0-9]+}}(%esp)1360; X86-X87-NEXT: fldcw {{[0-9]+}}(%esp)1361; X86-X87-NEXT: movb %al, %cl1362; X86-X87-NEXT: shll $31, %ecx1363; X86-X87-NEXT: xorl {{[0-9]+}}(%esp), %ecx1364; X86-X87-NEXT: fxch %st(1)1365; X86-X87-NEXT: fucom %st(1)1366; X86-X87-NEXT: fstp %st(1)1367; X86-X87-NEXT: fnstsw %ax1368; X86-X87-NEXT: xorl %edx, %edx1369; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax1370; X86-X87-NEXT: sahf1371; X86-X87-NEXT: movl $0, %esi1372; X86-X87-NEXT: jb .LBB16_41373; X86-X87-NEXT: # %bb.3:1374; X86-X87-NEXT: movl %ecx, %esi1375; X86-X87-NEXT: .LBB16_4:1376; X86-X87-NEXT: jb .LBB16_61377; X86-X87-NEXT: # %bb.5:1378; X86-X87-NEXT: movl {{[0-9]+}}(%esp), %edx1379; X86-X87-NEXT: .LBB16_6:1380; X86-X87-NEXT: fldl {{\.?LCPI[0-9]+_[0-9]+}}1381; X86-X87-NEXT: fxch %st(1)1382; X86-X87-NEXT: fucompp1383; X86-X87-NEXT: fnstsw %ax1384; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax1385; X86-X87-NEXT: sahf1386; X86-X87-NEXT: movl $-1, %eax1387; X86-X87-NEXT: ja .LBB16_81388; X86-X87-NEXT: # %bb.7:1389; X86-X87-NEXT: movl %edx, %eax1390; X86-X87-NEXT: .LBB16_8:1391; X86-X87-NEXT: movl $262143, %edx # imm = 0x3FFFF1392; X86-X87-NEXT: ja .LBB16_101393; X86-X87-NEXT: # %bb.9:1394; X86-X87-NEXT: movl %esi, %edx1395; X86-X87-NEXT: .LBB16_10:1396; X86-X87-NEXT: addl $16, %esp1397; X86-X87-NEXT: popl %esi1398; X86-X87-NEXT: retl1399;1400; X86-SSE-LABEL: test_unsigned_i50_f64:1401; X86-SSE: # %bb.0:1402; X86-SSE-NEXT: pushl %esi1403; X86-SSE-NEXT: subl $16, %esp1404; X86-SSE-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero1405; X86-SSE-NEXT: movsd {{.*#+}} xmm2 = [9.2233720368547758E+18,0.0E+0]1406; X86-SSE-NEXT: ucomisd %xmm0, %xmm21407; X86-SSE-NEXT: xorpd %xmm1, %xmm11408; X86-SSE-NEXT: jbe .LBB16_21409; X86-SSE-NEXT: # %bb.1:1410; X86-SSE-NEXT: xorpd %xmm2, %xmm21411; X86-SSE-NEXT: .LBB16_2:1412; X86-SSE-NEXT: movapd %xmm0, %xmm31413; X86-SSE-NEXT: subsd %xmm2, %xmm31414; X86-SSE-NEXT: movsd %xmm3, {{[0-9]+}}(%esp)1415; X86-SSE-NEXT: setbe %cl1416; X86-SSE-NEXT: fldl {{[0-9]+}}(%esp)1417; X86-SSE-NEXT: fnstcw {{[0-9]+}}(%esp)1418; X86-SSE-NEXT: movzwl {{[0-9]+}}(%esp), %eax1419; X86-SSE-NEXT: orl $3072, %eax # imm = 0xC001420; X86-SSE-NEXT: movw %ax, {{[0-9]+}}(%esp)1421; X86-SSE-NEXT: fldcw {{[0-9]+}}(%esp)1422; X86-SSE-NEXT: fistpll {{[0-9]+}}(%esp)1423; X86-SSE-NEXT: fldcw {{[0-9]+}}(%esp)1424; X86-SSE-NEXT: xorl %eax, %eax1425; X86-SSE-NEXT: ucomisd %xmm1, %xmm01426; X86-SSE-NEXT: movl $0, %esi1427; X86-SSE-NEXT: jb .LBB16_41428; X86-SSE-NEXT: # %bb.3:1429; X86-SSE-NEXT: movzbl %cl, %eax1430; X86-SSE-NEXT: shll $31, %eax1431; X86-SSE-NEXT: xorl {{[0-9]+}}(%esp), %eax1432; X86-SSE-NEXT: movl {{[0-9]+}}(%esp), %esi1433; X86-SSE-NEXT: .LBB16_4:1434; X86-SSE-NEXT: ucomisd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm01435; X86-SSE-NEXT: movl $262143, %edx # imm = 0x3FFFF1436; X86-SSE-NEXT: cmovbel %eax, %edx1437; X86-SSE-NEXT: movl $-1, %eax1438; X86-SSE-NEXT: cmovbel %esi, %eax1439; X86-SSE-NEXT: addl $16, %esp1440; X86-SSE-NEXT: popl %esi1441; X86-SSE-NEXT: retl1442;1443; X64-LABEL: test_unsigned_i50_f64:1444; X64: # %bb.0:1445; X64-NEXT: xorpd %xmm1, %xmm11446; X64-NEXT: maxsd %xmm1, %xmm01447; X64-NEXT: minsd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01448; X64-NEXT: cvttsd2si %xmm0, %rax1449; X64-NEXT: retq1450 %x = call i50 @llvm.fptoui.sat.i50.f64(double %f)1451 ret i50 %x1452}1453 1454define i64 @test_unsigned_i64_f64(double %f) nounwind {1455; X86-X87-LABEL: test_unsigned_i64_f64:1456; X86-X87: # %bb.0:1457; X86-X87-NEXT: pushl %edi1458; X86-X87-NEXT: pushl %esi1459; X86-X87-NEXT: subl $20, %esp1460; X86-X87-NEXT: fldl {{[0-9]+}}(%esp)1461; X86-X87-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}1462; X86-X87-NEXT: fucom %st(1)1463; X86-X87-NEXT: fnstsw %ax1464; X86-X87-NEXT: xorl %ecx, %ecx1465; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax1466; X86-X87-NEXT: sahf1467; X86-X87-NEXT: setbe %al1468; X86-X87-NEXT: fldz1469; X86-X87-NEXT: jbe .LBB17_21470; X86-X87-NEXT: # %bb.1:1471; X86-X87-NEXT: fstp %st(1)1472; X86-X87-NEXT: fld %st(0)1473; X86-X87-NEXT: fxch %st(1)1474; X86-X87-NEXT: .LBB17_2:1475; X86-X87-NEXT: fxch %st(1)1476; X86-X87-NEXT: fsubr %st(2), %st1477; X86-X87-NEXT: fnstcw {{[0-9]+}}(%esp)1478; X86-X87-NEXT: movzwl {{[0-9]+}}(%esp), %edx1479; X86-X87-NEXT: orl $3072, %edx # imm = 0xC001480; X86-X87-NEXT: movw %dx, {{[0-9]+}}(%esp)1481; X86-X87-NEXT: fldcw {{[0-9]+}}(%esp)1482; X86-X87-NEXT: fistpll {{[0-9]+}}(%esp)1483; X86-X87-NEXT: fldcw {{[0-9]+}}(%esp)1484; X86-X87-NEXT: movb %al, %cl1485; X86-X87-NEXT: shll $31, %ecx1486; X86-X87-NEXT: xorl {{[0-9]+}}(%esp), %ecx1487; X86-X87-NEXT: fxch %st(1)1488; X86-X87-NEXT: fucom %st(1)1489; X86-X87-NEXT: fstp %st(1)1490; X86-X87-NEXT: fnstsw %ax1491; X86-X87-NEXT: xorl %esi, %esi1492; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax1493; X86-X87-NEXT: sahf1494; X86-X87-NEXT: movl $0, %edi1495; X86-X87-NEXT: jb .LBB17_41496; X86-X87-NEXT: # %bb.3:1497; X86-X87-NEXT: movl %ecx, %edi1498; X86-X87-NEXT: .LBB17_4:1499; X86-X87-NEXT: jb .LBB17_61500; X86-X87-NEXT: # %bb.5:1501; X86-X87-NEXT: movl {{[0-9]+}}(%esp), %esi1502; X86-X87-NEXT: .LBB17_6:1503; X86-X87-NEXT: fldl {{\.?LCPI[0-9]+_[0-9]+}}1504; X86-X87-NEXT: fxch %st(1)1505; X86-X87-NEXT: fucompp1506; X86-X87-NEXT: fnstsw %ax1507; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax1508; X86-X87-NEXT: sahf1509; X86-X87-NEXT: movl $-1, %eax1510; X86-X87-NEXT: movl $-1, %edx1511; X86-X87-NEXT: ja .LBB17_81512; X86-X87-NEXT: # %bb.7:1513; X86-X87-NEXT: movl %esi, %eax1514; X86-X87-NEXT: movl %edi, %edx1515; X86-X87-NEXT: .LBB17_8:1516; X86-X87-NEXT: addl $20, %esp1517; X86-X87-NEXT: popl %esi1518; X86-X87-NEXT: popl %edi1519; X86-X87-NEXT: retl1520;1521; X86-SSE-LABEL: test_unsigned_i64_f64:1522; X86-SSE: # %bb.0:1523; X86-SSE-NEXT: subl $20, %esp1524; X86-SSE-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero1525; X86-SSE-NEXT: movsd {{.*#+}} xmm2 = [9.2233720368547758E+18,0.0E+0]1526; X86-SSE-NEXT: ucomisd %xmm0, %xmm21527; X86-SSE-NEXT: xorpd %xmm1, %xmm11528; X86-SSE-NEXT: jbe .LBB17_21529; X86-SSE-NEXT: # %bb.1:1530; X86-SSE-NEXT: xorpd %xmm2, %xmm21531; X86-SSE-NEXT: .LBB17_2:1532; X86-SSE-NEXT: movapd %xmm0, %xmm31533; X86-SSE-NEXT: subsd %xmm2, %xmm31534; X86-SSE-NEXT: movsd %xmm3, {{[0-9]+}}(%esp)1535; X86-SSE-NEXT: setbe %cl1536; X86-SSE-NEXT: fldl {{[0-9]+}}(%esp)1537; X86-SSE-NEXT: fnstcw {{[0-9]+}}(%esp)1538; X86-SSE-NEXT: movzwl {{[0-9]+}}(%esp), %eax1539; X86-SSE-NEXT: orl $3072, %eax # imm = 0xC001540; X86-SSE-NEXT: movw %ax, {{[0-9]+}}(%esp)1541; X86-SSE-NEXT: fldcw {{[0-9]+}}(%esp)1542; X86-SSE-NEXT: fistpll {{[0-9]+}}(%esp)1543; X86-SSE-NEXT: fldcw {{[0-9]+}}(%esp)1544; X86-SSE-NEXT: xorl %edx, %edx1545; X86-SSE-NEXT: ucomisd %xmm1, %xmm01546; X86-SSE-NEXT: movl $0, %eax1547; X86-SSE-NEXT: jb .LBB17_41548; X86-SSE-NEXT: # %bb.3:1549; X86-SSE-NEXT: movzbl %cl, %edx1550; X86-SSE-NEXT: shll $31, %edx1551; X86-SSE-NEXT: xorl {{[0-9]+}}(%esp), %edx1552; X86-SSE-NEXT: movl {{[0-9]+}}(%esp), %eax1553; X86-SSE-NEXT: .LBB17_4:1554; X86-SSE-NEXT: ucomisd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm01555; X86-SSE-NEXT: movl $-1, %ecx1556; X86-SSE-NEXT: cmoval %ecx, %edx1557; X86-SSE-NEXT: cmoval %ecx, %eax1558; X86-SSE-NEXT: addl $20, %esp1559; X86-SSE-NEXT: retl1560;1561; X64-LABEL: test_unsigned_i64_f64:1562; X64: # %bb.0:1563; X64-NEXT: cvttsd2si %xmm0, %rax1564; X64-NEXT: movq %rax, %rcx1565; X64-NEXT: sarq $63, %rcx1566; X64-NEXT: movapd %xmm0, %xmm11567; X64-NEXT: subsd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm11568; X64-NEXT: cvttsd2si %xmm1, %rdx1569; X64-NEXT: andq %rcx, %rdx1570; X64-NEXT: orq %rax, %rdx1571; X64-NEXT: xorl %ecx, %ecx1572; X64-NEXT: xorpd %xmm1, %xmm11573; X64-NEXT: ucomisd %xmm1, %xmm01574; X64-NEXT: cmovaeq %rdx, %rcx1575; X64-NEXT: ucomisd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01576; X64-NEXT: movq $-1, %rax1577; X64-NEXT: cmovbeq %rcx, %rax1578; X64-NEXT: retq1579 %x = call i64 @llvm.fptoui.sat.i64.f64(double %f)1580 ret i64 %x1581}1582 1583define i100 @test_unsigned_i100_f64(double %f) nounwind {1584; X86-X87-LABEL: test_unsigned_i100_f64:1585; X86-X87: # %bb.0:1586; X86-X87-NEXT: pushl %ebp1587; X86-X87-NEXT: pushl %ebx1588; X86-X87-NEXT: pushl %edi1589; X86-X87-NEXT: pushl %esi1590; X86-X87-NEXT: subl $44, %esp1591; X86-X87-NEXT: fldl {{[0-9]+}}(%esp)1592; X86-X87-NEXT: fstl {{[0-9]+}}(%esp)1593; X86-X87-NEXT: leal {{[0-9]+}}(%esp), %eax1594; X86-X87-NEXT: movl %eax, (%esp)1595; X86-X87-NEXT: fldz1596; X86-X87-NEXT: fxch %st(1)1597; X86-X87-NEXT: fstl {{[-0-9]+}}(%e{{[sb]}}p) # 8-byte Folded Spill1598; X86-X87-NEXT: fucompp1599; X86-X87-NEXT: fnstsw %ax1600; X86-X87-NEXT: movl %eax, %ebx1601; X86-X87-NEXT: calll __fixunsdfti1602; X86-X87-NEXT: subl $4, %esp1603; X86-X87-NEXT: xorl %edi, %edi1604; X86-X87-NEXT: movb %bh, %ah1605; X86-X87-NEXT: sahf1606; X86-X87-NEXT: movl $0, %eax1607; X86-X87-NEXT: jb .LBB18_21608; X86-X87-NEXT: # %bb.1:1609; X86-X87-NEXT: movl {{[0-9]+}}(%esp), %eax1610; X86-X87-NEXT: .LBB18_2:1611; X86-X87-NEXT: movl $0, %esi1612; X86-X87-NEXT: movl $0, %ebx1613; X86-X87-NEXT: jb .LBB18_41614; X86-X87-NEXT: # %bb.3:1615; X86-X87-NEXT: movl {{[0-9]+}}(%esp), %ebx1616; X86-X87-NEXT: movl {{[0-9]+}}(%esp), %esi1617; X86-X87-NEXT: .LBB18_4:1618; X86-X87-NEXT: jb .LBB18_61619; X86-X87-NEXT: # %bb.5:1620; X86-X87-NEXT: movl {{[0-9]+}}(%esp), %edi1621; X86-X87-NEXT: .LBB18_6:1622; X86-X87-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1623; X86-X87-NEXT: movl {{[0-9]+}}(%esp), %ecx1624; X86-X87-NEXT: fldl {{\.?LCPI[0-9]+_[0-9]+}}1625; X86-X87-NEXT: fldl {{[-0-9]+}}(%e{{[sb]}}p) # 8-byte Folded Reload1626; X86-X87-NEXT: fucompp1627; X86-X87-NEXT: fnstsw %ax1628; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax1629; X86-X87-NEXT: sahf1630; X86-X87-NEXT: movl $15, %eax1631; X86-X87-NEXT: ja .LBB18_81632; X86-X87-NEXT: # %bb.7:1633; X86-X87-NEXT: movl %edi, %eax1634; X86-X87-NEXT: .LBB18_8:1635; X86-X87-NEXT: movl $-1, %edi1636; X86-X87-NEXT: movl $-1, %ebp1637; X86-X87-NEXT: movl $-1, %edx1638; X86-X87-NEXT: ja .LBB18_101639; X86-X87-NEXT: # %bb.9:1640; X86-X87-NEXT: movl %ebx, %edi1641; X86-X87-NEXT: movl %esi, %ebp1642; X86-X87-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload1643; X86-X87-NEXT: .LBB18_10:1644; X86-X87-NEXT: movl %edx, 8(%ecx)1645; X86-X87-NEXT: movl %ebp, 4(%ecx)1646; X86-X87-NEXT: movl %edi, (%ecx)1647; X86-X87-NEXT: andl $15, %eax1648; X86-X87-NEXT: movb %al, 12(%ecx)1649; X86-X87-NEXT: movl %ecx, %eax1650; X86-X87-NEXT: addl $44, %esp1651; X86-X87-NEXT: popl %esi1652; X86-X87-NEXT: popl %edi1653; X86-X87-NEXT: popl %ebx1654; X86-X87-NEXT: popl %ebp1655; X86-X87-NEXT: retl $41656;1657; X86-SSE-LABEL: test_unsigned_i100_f64:1658; X86-SSE: # %bb.0:1659; X86-SSE-NEXT: pushl %ebx1660; X86-SSE-NEXT: pushl %edi1661; X86-SSE-NEXT: pushl %esi1662; X86-SSE-NEXT: subl $32, %esp1663; X86-SSE-NEXT: movl {{[0-9]+}}(%esp), %esi1664; X86-SSE-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero1665; X86-SSE-NEXT: movsd %xmm0, {{[0-9]+}}(%esp)1666; X86-SSE-NEXT: leal {{[0-9]+}}(%esp), %eax1667; X86-SSE-NEXT: movl %eax, (%esp)1668; X86-SSE-NEXT: calll __fixunsdfti1669; X86-SSE-NEXT: subl $4, %esp1670; X86-SSE-NEXT: xorl %eax, %eax1671; X86-SSE-NEXT: xorpd %xmm0, %xmm01672; X86-SSE-NEXT: movsd {{.*#+}} xmm1 = mem[0],zero1673; X86-SSE-NEXT: ucomisd %xmm0, %xmm11674; X86-SSE-NEXT: movapd %xmm1, %xmm01675; X86-SSE-NEXT: movl $0, %ecx1676; X86-SSE-NEXT: movl $0, %edx1677; X86-SSE-NEXT: movl $0, %edi1678; X86-SSE-NEXT: jb .LBB18_21679; X86-SSE-NEXT: # %bb.1:1680; X86-SSE-NEXT: movl {{[0-9]+}}(%esp), %eax1681; X86-SSE-NEXT: movl {{[0-9]+}}(%esp), %ecx1682; X86-SSE-NEXT: movl {{[0-9]+}}(%esp), %edx1683; X86-SSE-NEXT: movl {{[0-9]+}}(%esp), %edi1684; X86-SSE-NEXT: .LBB18_2:1685; X86-SSE-NEXT: ucomisd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm01686; X86-SSE-NEXT: movl $15, %ebx1687; X86-SSE-NEXT: cmovbel %edi, %ebx1688; X86-SSE-NEXT: movl $-1, %edi1689; X86-SSE-NEXT: cmoval %edi, %edx1690; X86-SSE-NEXT: cmoval %edi, %ecx1691; X86-SSE-NEXT: cmoval %edi, %eax1692; X86-SSE-NEXT: movl %eax, 8(%esi)1693; X86-SSE-NEXT: movl %ecx, 4(%esi)1694; X86-SSE-NEXT: movl %edx, (%esi)1695; X86-SSE-NEXT: andl $15, %ebx1696; X86-SSE-NEXT: movb %bl, 12(%esi)1697; X86-SSE-NEXT: movl %esi, %eax1698; X86-SSE-NEXT: addl $32, %esp1699; X86-SSE-NEXT: popl %esi1700; X86-SSE-NEXT: popl %edi1701; X86-SSE-NEXT: popl %ebx1702; X86-SSE-NEXT: retl $41703;1704; X64-LABEL: test_unsigned_i100_f64:1705; X64: # %bb.0:1706; X64-NEXT: pushq %rax1707; X64-NEXT: movsd %xmm0, (%rsp) # 8-byte Spill1708; X64-NEXT: callq __fixunsdfti@PLT1709; X64-NEXT: xorl %ecx, %ecx1710; X64-NEXT: xorpd %xmm0, %xmm01711; X64-NEXT: movsd (%rsp), %xmm1 # 8-byte Reload1712; X64-NEXT: # xmm1 = mem[0],zero1713; X64-NEXT: ucomisd %xmm0, %xmm11714; X64-NEXT: cmovbq %rcx, %rdx1715; X64-NEXT: cmovbq %rcx, %rax1716; X64-NEXT: ucomisd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm11717; X64-NEXT: movq $-1, %rcx1718; X64-NEXT: cmovaq %rcx, %rax1719; X64-NEXT: movabsq $68719476735, %rcx # imm = 0xFFFFFFFFF1720; X64-NEXT: cmovaq %rcx, %rdx1721; X64-NEXT: popq %rcx1722; X64-NEXT: retq1723 %x = call i100 @llvm.fptoui.sat.i100.f64(double %f)1724 ret i100 %x1725}1726 1727define i128 @test_unsigned_i128_f64(double %f) nounwind {1728; X86-X87-LABEL: test_unsigned_i128_f64:1729; X86-X87: # %bb.0:1730; X86-X87-NEXT: pushl %ebp1731; X86-X87-NEXT: pushl %ebx1732; X86-X87-NEXT: pushl %edi1733; X86-X87-NEXT: pushl %esi1734; X86-X87-NEXT: subl $60, %esp1735; X86-X87-NEXT: fldl {{[0-9]+}}(%esp)1736; X86-X87-NEXT: fstl {{[0-9]+}}(%esp)1737; X86-X87-NEXT: leal {{[0-9]+}}(%esp), %eax1738; X86-X87-NEXT: movl %eax, (%esp)1739; X86-X87-NEXT: fldz1740; X86-X87-NEXT: fxch %st(1)1741; X86-X87-NEXT: fstl {{[-0-9]+}}(%e{{[sb]}}p) # 8-byte Folded Spill1742; X86-X87-NEXT: fucompp1743; X86-X87-NEXT: fnstsw %ax1744; X86-X87-NEXT: movl %eax, %ebx1745; X86-X87-NEXT: calll __fixunsdfti1746; X86-X87-NEXT: subl $4, %esp1747; X86-X87-NEXT: xorl %edx, %edx1748; X86-X87-NEXT: movb %bh, %ah1749; X86-X87-NEXT: sahf1750; X86-X87-NEXT: movl $0, %eax1751; X86-X87-NEXT: jb .LBB19_21752; X86-X87-NEXT: # %bb.1:1753; X86-X87-NEXT: movl {{[0-9]+}}(%esp), %eax1754; X86-X87-NEXT: .LBB19_2:1755; X86-X87-NEXT: movl $0, %ecx1756; X86-X87-NEXT: jb .LBB19_41757; X86-X87-NEXT: # %bb.3:1758; X86-X87-NEXT: movl {{[0-9]+}}(%esp), %ecx1759; X86-X87-NEXT: .LBB19_4:1760; X86-X87-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1761; X86-X87-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1762; X86-X87-NEXT: movl {{[0-9]+}}(%esp), %ecx1763; X86-X87-NEXT: movl $0, %ebx1764; X86-X87-NEXT: jb .LBB19_61765; X86-X87-NEXT: # %bb.5:1766; X86-X87-NEXT: movl {{[0-9]+}}(%esp), %ebx1767; X86-X87-NEXT: movl {{[0-9]+}}(%esp), %edx1768; X86-X87-NEXT: .LBB19_6:1769; X86-X87-NEXT: fldl {{\.?LCPI[0-9]+_[0-9]+}}1770; X86-X87-NEXT: fldl {{[-0-9]+}}(%e{{[sb]}}p) # 8-byte Folded Reload1771; X86-X87-NEXT: fucompp1772; X86-X87-NEXT: fnstsw %ax1773; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax1774; X86-X87-NEXT: sahf1775; X86-X87-NEXT: movl $-1, %eax1776; X86-X87-NEXT: movl $-1, %ebp1777; X86-X87-NEXT: movl $-1, %edi1778; X86-X87-NEXT: movl $-1, %esi1779; X86-X87-NEXT: ja .LBB19_81780; X86-X87-NEXT: # %bb.7:1781; X86-X87-NEXT: movl %ebx, %eax1782; X86-X87-NEXT: movl %edx, %ebp1783; X86-X87-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edi # 4-byte Reload1784; X86-X87-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload1785; X86-X87-NEXT: .LBB19_8:1786; X86-X87-NEXT: movl %esi, 12(%ecx)1787; X86-X87-NEXT: movl %edi, 8(%ecx)1788; X86-X87-NEXT: movl %ebp, 4(%ecx)1789; X86-X87-NEXT: movl %eax, (%ecx)1790; X86-X87-NEXT: movl %ecx, %eax1791; X86-X87-NEXT: addl $60, %esp1792; X86-X87-NEXT: popl %esi1793; X86-X87-NEXT: popl %edi1794; X86-X87-NEXT: popl %ebx1795; X86-X87-NEXT: popl %ebp1796; X86-X87-NEXT: retl $41797;1798; X86-SSE-LABEL: test_unsigned_i128_f64:1799; X86-SSE: # %bb.0:1800; X86-SSE-NEXT: pushl %ebx1801; X86-SSE-NEXT: pushl %edi1802; X86-SSE-NEXT: pushl %esi1803; X86-SSE-NEXT: subl $32, %esp1804; X86-SSE-NEXT: movl {{[0-9]+}}(%esp), %esi1805; X86-SSE-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero1806; X86-SSE-NEXT: movsd %xmm0, {{[0-9]+}}(%esp)1807; X86-SSE-NEXT: leal {{[0-9]+}}(%esp), %eax1808; X86-SSE-NEXT: movl %eax, (%esp)1809; X86-SSE-NEXT: calll __fixunsdfti1810; X86-SSE-NEXT: subl $4, %esp1811; X86-SSE-NEXT: xorl %eax, %eax1812; X86-SSE-NEXT: xorpd %xmm0, %xmm01813; X86-SSE-NEXT: movsd {{.*#+}} xmm1 = mem[0],zero1814; X86-SSE-NEXT: ucomisd %xmm0, %xmm11815; X86-SSE-NEXT: movapd %xmm1, %xmm01816; X86-SSE-NEXT: movl $0, %ecx1817; X86-SSE-NEXT: movl $0, %edx1818; X86-SSE-NEXT: movl $0, %edi1819; X86-SSE-NEXT: jb .LBB19_21820; X86-SSE-NEXT: # %bb.1:1821; X86-SSE-NEXT: movl {{[0-9]+}}(%esp), %eax1822; X86-SSE-NEXT: movl {{[0-9]+}}(%esp), %ecx1823; X86-SSE-NEXT: movl {{[0-9]+}}(%esp), %edx1824; X86-SSE-NEXT: movl {{[0-9]+}}(%esp), %edi1825; X86-SSE-NEXT: .LBB19_2:1826; X86-SSE-NEXT: ucomisd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm01827; X86-SSE-NEXT: movl $-1, %ebx1828; X86-SSE-NEXT: cmoval %ebx, %edi1829; X86-SSE-NEXT: cmoval %ebx, %edx1830; X86-SSE-NEXT: cmoval %ebx, %ecx1831; X86-SSE-NEXT: cmoval %ebx, %eax1832; X86-SSE-NEXT: movl %eax, 12(%esi)1833; X86-SSE-NEXT: movl %ecx, 8(%esi)1834; X86-SSE-NEXT: movl %edx, 4(%esi)1835; X86-SSE-NEXT: movl %edi, (%esi)1836; X86-SSE-NEXT: movl %esi, %eax1837; X86-SSE-NEXT: addl $32, %esp1838; X86-SSE-NEXT: popl %esi1839; X86-SSE-NEXT: popl %edi1840; X86-SSE-NEXT: popl %ebx1841; X86-SSE-NEXT: retl $41842;1843; X64-LABEL: test_unsigned_i128_f64:1844; X64: # %bb.0:1845; X64-NEXT: pushq %rax1846; X64-NEXT: movsd %xmm0, (%rsp) # 8-byte Spill1847; X64-NEXT: callq __fixunsdfti@PLT1848; X64-NEXT: xorl %ecx, %ecx1849; X64-NEXT: xorpd %xmm0, %xmm01850; X64-NEXT: movsd (%rsp), %xmm1 # 8-byte Reload1851; X64-NEXT: # xmm1 = mem[0],zero1852; X64-NEXT: ucomisd %xmm0, %xmm11853; X64-NEXT: cmovbq %rcx, %rdx1854; X64-NEXT: cmovbq %rcx, %rax1855; X64-NEXT: ucomisd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm11856; X64-NEXT: movq $-1, %rcx1857; X64-NEXT: cmovaq %rcx, %rax1858; X64-NEXT: cmovaq %rcx, %rdx1859; X64-NEXT: popq %rcx1860; X64-NEXT: retq1861 %x = call i128 @llvm.fptoui.sat.i128.f64(double %f)1862 ret i128 %x1863}1864 1865;1866; 16-bit float to unsigned integer1867;1868 1869declare i1 @llvm.fptoui.sat.i1.f16 (half)1870declare i8 @llvm.fptoui.sat.i8.f16 (half)1871declare i13 @llvm.fptoui.sat.i13.f16 (half)1872declare i16 @llvm.fptoui.sat.i16.f16 (half)1873declare i19 @llvm.fptoui.sat.i19.f16 (half)1874declare i32 @llvm.fptoui.sat.i32.f16 (half)1875declare i50 @llvm.fptoui.sat.i50.f16 (half)1876declare i64 @llvm.fptoui.sat.i64.f16 (half)1877declare i100 @llvm.fptoui.sat.i100.f16(half)1878declare i128 @llvm.fptoui.sat.i128.f16(half)1879 1880define i1 @test_unsigned_i1_f16(half %f) nounwind {1881; X86-X87-LABEL: test_unsigned_i1_f16:1882; X86-X87: # %bb.0:1883; X86-X87-NEXT: subl $12, %esp1884; X86-X87-NEXT: movzwl {{[0-9]+}}(%esp), %eax1885; X86-X87-NEXT: movl %eax, (%esp)1886; X86-X87-NEXT: calll __extendhfsf21887; X86-X87-NEXT: fnstcw {{[0-9]+}}(%esp)1888; X86-X87-NEXT: movzwl {{[0-9]+}}(%esp), %eax1889; X86-X87-NEXT: orl $3072, %eax # imm = 0xC001890; X86-X87-NEXT: movw %ax, {{[0-9]+}}(%esp)1891; X86-X87-NEXT: fldcw {{[0-9]+}}(%esp)1892; X86-X87-NEXT: fists {{[0-9]+}}(%esp)1893; X86-X87-NEXT: fldcw {{[0-9]+}}(%esp)1894; X86-X87-NEXT: fldz1895; X86-X87-NEXT: fxch %st(1)1896; X86-X87-NEXT: fucom %st(1)1897; X86-X87-NEXT: fstp %st(1)1898; X86-X87-NEXT: fnstsw %ax1899; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax1900; X86-X87-NEXT: sahf1901; X86-X87-NEXT: jb .LBB20_11902; X86-X87-NEXT: # %bb.2:1903; X86-X87-NEXT: movzbl {{[0-9]+}}(%esp), %ecx1904; X86-X87-NEXT: jmp .LBB20_31905; X86-X87-NEXT: .LBB20_1:1906; X86-X87-NEXT: xorl %ecx, %ecx1907; X86-X87-NEXT: .LBB20_3:1908; X86-X87-NEXT: fld11909; X86-X87-NEXT: fxch %st(1)1910; X86-X87-NEXT: fucompp1911; X86-X87-NEXT: fnstsw %ax1912; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax1913; X86-X87-NEXT: sahf1914; X86-X87-NEXT: movb $1, %al1915; X86-X87-NEXT: ja .LBB20_51916; X86-X87-NEXT: # %bb.4:1917; X86-X87-NEXT: movl %ecx, %eax1918; X86-X87-NEXT: .LBB20_5:1919; X86-X87-NEXT: addl $12, %esp1920; X86-X87-NEXT: retl1921;1922; X86-SSE-LABEL: test_unsigned_i1_f16:1923; X86-SSE: # %bb.0:1924; X86-SSE-NEXT: subl $12, %esp1925; X86-SSE-NEXT: pinsrw $0, {{[0-9]+}}(%esp), %xmm01926; X86-SSE-NEXT: pextrw $0, %xmm0, %eax1927; X86-SSE-NEXT: movw %ax, (%esp)1928; X86-SSE-NEXT: calll __extendhfsf21929; X86-SSE-NEXT: fstps {{[0-9]+}}(%esp)1930; X86-SSE-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero1931; X86-SSE-NEXT: cvttss2si %xmm0, %eax1932; X86-SSE-NEXT: xorl %ecx, %ecx1933; X86-SSE-NEXT: xorps %xmm1, %xmm11934; X86-SSE-NEXT: ucomiss %xmm1, %xmm01935; X86-SSE-NEXT: cmovael %eax, %ecx1936; X86-SSE-NEXT: ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm01937; X86-SSE-NEXT: movl $1, %eax1938; X86-SSE-NEXT: cmovbel %ecx, %eax1939; X86-SSE-NEXT: # kill: def $al killed $al killed $eax1940; X86-SSE-NEXT: addl $12, %esp1941; X86-SSE-NEXT: retl1942;1943; X64-LABEL: test_unsigned_i1_f16:1944; X64: # %bb.0:1945; X64-NEXT: pushq %rax1946; X64-NEXT: callq __extendhfsf2@PLT1947; X64-NEXT: cvttss2si %xmm0, %eax1948; X64-NEXT: xorl %ecx, %ecx1949; X64-NEXT: xorps %xmm1, %xmm11950; X64-NEXT: ucomiss %xmm1, %xmm01951; X64-NEXT: cmovael %eax, %ecx1952; X64-NEXT: ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01953; X64-NEXT: movl $1, %eax1954; X64-NEXT: cmovbel %ecx, %eax1955; X64-NEXT: # kill: def $al killed $al killed $eax1956; X64-NEXT: popq %rcx1957; X64-NEXT: retq1958 %x = call i1 @llvm.fptoui.sat.i1.f16(half %f)1959 ret i1 %x1960}1961 1962define i8 @test_unsigned_i8_f16(half %f) nounwind {1963; X86-X87-LABEL: test_unsigned_i8_f16:1964; X86-X87: # %bb.0:1965; X86-X87-NEXT: subl $12, %esp1966; X86-X87-NEXT: movzwl {{[0-9]+}}(%esp), %eax1967; X86-X87-NEXT: movl %eax, (%esp)1968; X86-X87-NEXT: calll __extendhfsf21969; X86-X87-NEXT: fnstcw {{[0-9]+}}(%esp)1970; X86-X87-NEXT: movzwl {{[0-9]+}}(%esp), %eax1971; X86-X87-NEXT: orl $3072, %eax # imm = 0xC001972; X86-X87-NEXT: movw %ax, {{[0-9]+}}(%esp)1973; X86-X87-NEXT: fldcw {{[0-9]+}}(%esp)1974; X86-X87-NEXT: fists {{[0-9]+}}(%esp)1975; X86-X87-NEXT: fldcw {{[0-9]+}}(%esp)1976; X86-X87-NEXT: fldz1977; X86-X87-NEXT: fxch %st(1)1978; X86-X87-NEXT: fucom %st(1)1979; X86-X87-NEXT: fstp %st(1)1980; X86-X87-NEXT: fnstsw %ax1981; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax1982; X86-X87-NEXT: sahf1983; X86-X87-NEXT: jb .LBB21_11984; X86-X87-NEXT: # %bb.2:1985; X86-X87-NEXT: movzbl {{[0-9]+}}(%esp), %ecx1986; X86-X87-NEXT: jmp .LBB21_31987; X86-X87-NEXT: .LBB21_1:1988; X86-X87-NEXT: xorl %ecx, %ecx1989; X86-X87-NEXT: .LBB21_3:1990; X86-X87-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}1991; X86-X87-NEXT: fxch %st(1)1992; X86-X87-NEXT: fucompp1993; X86-X87-NEXT: fnstsw %ax1994; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax1995; X86-X87-NEXT: sahf1996; X86-X87-NEXT: movb $-1, %al1997; X86-X87-NEXT: ja .LBB21_51998; X86-X87-NEXT: # %bb.4:1999; X86-X87-NEXT: movl %ecx, %eax2000; X86-X87-NEXT: .LBB21_5:2001; X86-X87-NEXT: addl $12, %esp2002; X86-X87-NEXT: retl2003;2004; X86-SSE-LABEL: test_unsigned_i8_f16:2005; X86-SSE: # %bb.0:2006; X86-SSE-NEXT: subl $12, %esp2007; X86-SSE-NEXT: pinsrw $0, {{[0-9]+}}(%esp), %xmm02008; X86-SSE-NEXT: pextrw $0, %xmm0, %eax2009; X86-SSE-NEXT: movw %ax, (%esp)2010; X86-SSE-NEXT: calll __extendhfsf22011; X86-SSE-NEXT: fstps {{[0-9]+}}(%esp)2012; X86-SSE-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero2013; X86-SSE-NEXT: cvttss2si %xmm0, %eax2014; X86-SSE-NEXT: xorl %ecx, %ecx2015; X86-SSE-NEXT: xorps %xmm1, %xmm12016; X86-SSE-NEXT: ucomiss %xmm1, %xmm02017; X86-SSE-NEXT: cmovael %eax, %ecx2018; X86-SSE-NEXT: ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm02019; X86-SSE-NEXT: movl $255, %eax2020; X86-SSE-NEXT: cmovbel %ecx, %eax2021; X86-SSE-NEXT: # kill: def $al killed $al killed $eax2022; X86-SSE-NEXT: addl $12, %esp2023; X86-SSE-NEXT: retl2024;2025; X64-LABEL: test_unsigned_i8_f16:2026; X64: # %bb.0:2027; X64-NEXT: pushq %rax2028; X64-NEXT: callq __extendhfsf2@PLT2029; X64-NEXT: cvttss2si %xmm0, %eax2030; X64-NEXT: xorl %ecx, %ecx2031; X64-NEXT: xorps %xmm1, %xmm12032; X64-NEXT: ucomiss %xmm1, %xmm02033; X64-NEXT: cmovael %eax, %ecx2034; X64-NEXT: ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02035; X64-NEXT: movl $255, %eax2036; X64-NEXT: cmovbel %ecx, %eax2037; X64-NEXT: # kill: def $al killed $al killed $eax2038; X64-NEXT: popq %rcx2039; X64-NEXT: retq2040 %x = call i8 @llvm.fptoui.sat.i8.f16(half %f)2041 ret i8 %x2042}2043 2044define i13 @test_unsigned_i13_f16(half %f) nounwind {2045; X86-X87-LABEL: test_unsigned_i13_f16:2046; X86-X87: # %bb.0:2047; X86-X87-NEXT: subl $12, %esp2048; X86-X87-NEXT: movzwl {{[0-9]+}}(%esp), %eax2049; X86-X87-NEXT: movl %eax, (%esp)2050; X86-X87-NEXT: calll __extendhfsf22051; X86-X87-NEXT: fnstcw {{[0-9]+}}(%esp)2052; X86-X87-NEXT: movzwl {{[0-9]+}}(%esp), %eax2053; X86-X87-NEXT: orl $3072, %eax # imm = 0xC002054; X86-X87-NEXT: movw %ax, {{[0-9]+}}(%esp)2055; X86-X87-NEXT: fldcw {{[0-9]+}}(%esp)2056; X86-X87-NEXT: fistl {{[0-9]+}}(%esp)2057; X86-X87-NEXT: fldcw {{[0-9]+}}(%esp)2058; X86-X87-NEXT: fldz2059; X86-X87-NEXT: fxch %st(1)2060; X86-X87-NEXT: fucom %st(1)2061; X86-X87-NEXT: fstp %st(1)2062; X86-X87-NEXT: fnstsw %ax2063; X86-X87-NEXT: xorl %ecx, %ecx2064; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax2065; X86-X87-NEXT: sahf2066; X86-X87-NEXT: jb .LBB22_22067; X86-X87-NEXT: # %bb.1:2068; X86-X87-NEXT: movl {{[0-9]+}}(%esp), %ecx2069; X86-X87-NEXT: .LBB22_2:2070; X86-X87-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}2071; X86-X87-NEXT: fxch %st(1)2072; X86-X87-NEXT: fucompp2073; X86-X87-NEXT: fnstsw %ax2074; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax2075; X86-X87-NEXT: sahf2076; X86-X87-NEXT: movl $8191, %eax # imm = 0x1FFF2077; X86-X87-NEXT: ja .LBB22_42078; X86-X87-NEXT: # %bb.3:2079; X86-X87-NEXT: movl %ecx, %eax2080; X86-X87-NEXT: .LBB22_4:2081; X86-X87-NEXT: # kill: def $ax killed $ax killed $eax2082; X86-X87-NEXT: addl $12, %esp2083; X86-X87-NEXT: retl2084;2085; X86-SSE-LABEL: test_unsigned_i13_f16:2086; X86-SSE: # %bb.0:2087; X86-SSE-NEXT: subl $12, %esp2088; X86-SSE-NEXT: pinsrw $0, {{[0-9]+}}(%esp), %xmm02089; X86-SSE-NEXT: pextrw $0, %xmm0, %eax2090; X86-SSE-NEXT: movw %ax, (%esp)2091; X86-SSE-NEXT: calll __extendhfsf22092; X86-SSE-NEXT: fstps {{[0-9]+}}(%esp)2093; X86-SSE-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero2094; X86-SSE-NEXT: cvttss2si %xmm0, %eax2095; X86-SSE-NEXT: xorl %ecx, %ecx2096; X86-SSE-NEXT: xorps %xmm1, %xmm12097; X86-SSE-NEXT: ucomiss %xmm1, %xmm02098; X86-SSE-NEXT: cmovael %eax, %ecx2099; X86-SSE-NEXT: ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm02100; X86-SSE-NEXT: movl $8191, %eax # imm = 0x1FFF2101; X86-SSE-NEXT: cmovbel %ecx, %eax2102; X86-SSE-NEXT: # kill: def $ax killed $ax killed $eax2103; X86-SSE-NEXT: addl $12, %esp2104; X86-SSE-NEXT: retl2105;2106; X64-LABEL: test_unsigned_i13_f16:2107; X64: # %bb.0:2108; X64-NEXT: pushq %rax2109; X64-NEXT: callq __extendhfsf2@PLT2110; X64-NEXT: cvttss2si %xmm0, %eax2111; X64-NEXT: xorl %ecx, %ecx2112; X64-NEXT: xorps %xmm1, %xmm12113; X64-NEXT: ucomiss %xmm1, %xmm02114; X64-NEXT: cmovael %eax, %ecx2115; X64-NEXT: ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02116; X64-NEXT: movl $8191, %eax # imm = 0x1FFF2117; X64-NEXT: cmovbel %ecx, %eax2118; X64-NEXT: # kill: def $ax killed $ax killed $eax2119; X64-NEXT: popq %rcx2120; X64-NEXT: retq2121 %x = call i13 @llvm.fptoui.sat.i13.f16(half %f)2122 ret i13 %x2123}2124 2125define i16 @test_unsigned_i16_f16(half %f) nounwind {2126; X86-X87-LABEL: test_unsigned_i16_f16:2127; X86-X87: # %bb.0:2128; X86-X87-NEXT: subl $12, %esp2129; X86-X87-NEXT: movzwl {{[0-9]+}}(%esp), %eax2130; X86-X87-NEXT: movl %eax, (%esp)2131; X86-X87-NEXT: calll __extendhfsf22132; X86-X87-NEXT: fnstcw {{[0-9]+}}(%esp)2133; X86-X87-NEXT: movzwl {{[0-9]+}}(%esp), %eax2134; X86-X87-NEXT: orl $3072, %eax # imm = 0xC002135; X86-X87-NEXT: movw %ax, {{[0-9]+}}(%esp)2136; X86-X87-NEXT: fldcw {{[0-9]+}}(%esp)2137; X86-X87-NEXT: fistl {{[0-9]+}}(%esp)2138; X86-X87-NEXT: fldcw {{[0-9]+}}(%esp)2139; X86-X87-NEXT: fldz2140; X86-X87-NEXT: fxch %st(1)2141; X86-X87-NEXT: fucom %st(1)2142; X86-X87-NEXT: fstp %st(1)2143; X86-X87-NEXT: fnstsw %ax2144; X86-X87-NEXT: xorl %ecx, %ecx2145; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax2146; X86-X87-NEXT: sahf2147; X86-X87-NEXT: jb .LBB23_22148; X86-X87-NEXT: # %bb.1:2149; X86-X87-NEXT: movl {{[0-9]+}}(%esp), %ecx2150; X86-X87-NEXT: .LBB23_2:2151; X86-X87-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}2152; X86-X87-NEXT: fxch %st(1)2153; X86-X87-NEXT: fucompp2154; X86-X87-NEXT: fnstsw %ax2155; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax2156; X86-X87-NEXT: sahf2157; X86-X87-NEXT: movl $65535, %eax # imm = 0xFFFF2158; X86-X87-NEXT: ja .LBB23_42159; X86-X87-NEXT: # %bb.3:2160; X86-X87-NEXT: movl %ecx, %eax2161; X86-X87-NEXT: .LBB23_4:2162; X86-X87-NEXT: # kill: def $ax killed $ax killed $eax2163; X86-X87-NEXT: addl $12, %esp2164; X86-X87-NEXT: retl2165;2166; X86-SSE-LABEL: test_unsigned_i16_f16:2167; X86-SSE: # %bb.0:2168; X86-SSE-NEXT: subl $12, %esp2169; X86-SSE-NEXT: pinsrw $0, {{[0-9]+}}(%esp), %xmm02170; X86-SSE-NEXT: pextrw $0, %xmm0, %eax2171; X86-SSE-NEXT: movw %ax, (%esp)2172; X86-SSE-NEXT: calll __extendhfsf22173; X86-SSE-NEXT: fstps {{[0-9]+}}(%esp)2174; X86-SSE-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero2175; X86-SSE-NEXT: cvttss2si %xmm0, %eax2176; X86-SSE-NEXT: xorl %ecx, %ecx2177; X86-SSE-NEXT: xorps %xmm1, %xmm12178; X86-SSE-NEXT: ucomiss %xmm1, %xmm02179; X86-SSE-NEXT: cmovael %eax, %ecx2180; X86-SSE-NEXT: ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm02181; X86-SSE-NEXT: movl $65535, %eax # imm = 0xFFFF2182; X86-SSE-NEXT: cmovbel %ecx, %eax2183; X86-SSE-NEXT: # kill: def $ax killed $ax killed $eax2184; X86-SSE-NEXT: addl $12, %esp2185; X86-SSE-NEXT: retl2186;2187; X64-LABEL: test_unsigned_i16_f16:2188; X64: # %bb.0:2189; X64-NEXT: pushq %rax2190; X64-NEXT: callq __extendhfsf2@PLT2191; X64-NEXT: cvttss2si %xmm0, %eax2192; X64-NEXT: xorl %ecx, %ecx2193; X64-NEXT: xorps %xmm1, %xmm12194; X64-NEXT: ucomiss %xmm1, %xmm02195; X64-NEXT: cmovael %eax, %ecx2196; X64-NEXT: ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02197; X64-NEXT: movl $65535, %eax # imm = 0xFFFF2198; X64-NEXT: cmovbel %ecx, %eax2199; X64-NEXT: # kill: def $ax killed $ax killed $eax2200; X64-NEXT: popq %rcx2201; X64-NEXT: retq2202 %x = call i16 @llvm.fptoui.sat.i16.f16(half %f)2203 ret i16 %x2204}2205 2206define i19 @test_unsigned_i19_f16(half %f) nounwind {2207; X86-X87-LABEL: test_unsigned_i19_f16:2208; X86-X87: # %bb.0:2209; X86-X87-NEXT: subl $28, %esp2210; X86-X87-NEXT: movzwl {{[0-9]+}}(%esp), %eax2211; X86-X87-NEXT: movl %eax, (%esp)2212; X86-X87-NEXT: calll __extendhfsf22213; X86-X87-NEXT: fnstcw {{[0-9]+}}(%esp)2214; X86-X87-NEXT: movzwl {{[0-9]+}}(%esp), %eax2215; X86-X87-NEXT: orl $3072, %eax # imm = 0xC002216; X86-X87-NEXT: movw %ax, {{[0-9]+}}(%esp)2217; X86-X87-NEXT: fldcw {{[0-9]+}}(%esp)2218; X86-X87-NEXT: fld %st(0)2219; X86-X87-NEXT: fistpll {{[0-9]+}}(%esp)2220; X86-X87-NEXT: fldcw {{[0-9]+}}(%esp)2221; X86-X87-NEXT: fldz2222; X86-X87-NEXT: fxch %st(1)2223; X86-X87-NEXT: fucom %st(1)2224; X86-X87-NEXT: fstp %st(1)2225; X86-X87-NEXT: fnstsw %ax2226; X86-X87-NEXT: xorl %ecx, %ecx2227; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax2228; X86-X87-NEXT: sahf2229; X86-X87-NEXT: jb .LBB24_22230; X86-X87-NEXT: # %bb.1:2231; X86-X87-NEXT: movl {{[0-9]+}}(%esp), %ecx2232; X86-X87-NEXT: .LBB24_2:2233; X86-X87-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}2234; X86-X87-NEXT: fxch %st(1)2235; X86-X87-NEXT: fucompp2236; X86-X87-NEXT: fnstsw %ax2237; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax2238; X86-X87-NEXT: sahf2239; X86-X87-NEXT: movl $524287, %eax # imm = 0x7FFFF2240; X86-X87-NEXT: ja .LBB24_42241; X86-X87-NEXT: # %bb.3:2242; X86-X87-NEXT: movl %ecx, %eax2243; X86-X87-NEXT: .LBB24_4:2244; X86-X87-NEXT: addl $28, %esp2245; X86-X87-NEXT: retl2246;2247; X86-SSE-LABEL: test_unsigned_i19_f16:2248; X86-SSE: # %bb.0:2249; X86-SSE-NEXT: subl $12, %esp2250; X86-SSE-NEXT: pinsrw $0, {{[0-9]+}}(%esp), %xmm02251; X86-SSE-NEXT: pextrw $0, %xmm0, %eax2252; X86-SSE-NEXT: movw %ax, (%esp)2253; X86-SSE-NEXT: calll __extendhfsf22254; X86-SSE-NEXT: fstps {{[0-9]+}}(%esp)2255; X86-SSE-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero2256; X86-SSE-NEXT: cvttss2si %xmm0, %eax2257; X86-SSE-NEXT: movl %eax, %ecx2258; X86-SSE-NEXT: sarl $31, %ecx2259; X86-SSE-NEXT: movaps %xmm0, %xmm12260; X86-SSE-NEXT: subss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm12261; X86-SSE-NEXT: cvttss2si %xmm1, %edx2262; X86-SSE-NEXT: andl %ecx, %edx2263; X86-SSE-NEXT: orl %eax, %edx2264; X86-SSE-NEXT: xorl %ecx, %ecx2265; X86-SSE-NEXT: xorps %xmm1, %xmm12266; X86-SSE-NEXT: ucomiss %xmm1, %xmm02267; X86-SSE-NEXT: cmovael %edx, %ecx2268; X86-SSE-NEXT: ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm02269; X86-SSE-NEXT: movl $524287, %eax # imm = 0x7FFFF2270; X86-SSE-NEXT: cmovbel %ecx, %eax2271; X86-SSE-NEXT: addl $12, %esp2272; X86-SSE-NEXT: retl2273;2274; X64-LABEL: test_unsigned_i19_f16:2275; X64: # %bb.0:2276; X64-NEXT: pushq %rax2277; X64-NEXT: callq __extendhfsf2@PLT2278; X64-NEXT: cvttss2si %xmm0, %rax2279; X64-NEXT: xorl %ecx, %ecx2280; X64-NEXT: xorps %xmm1, %xmm12281; X64-NEXT: ucomiss %xmm1, %xmm02282; X64-NEXT: cmovael %eax, %ecx2283; X64-NEXT: ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02284; X64-NEXT: movl $524287, %eax # imm = 0x7FFFF2285; X64-NEXT: cmovbel %ecx, %eax2286; X64-NEXT: popq %rcx2287; X64-NEXT: retq2288 %x = call i19 @llvm.fptoui.sat.i19.f16(half %f)2289 ret i19 %x2290}2291 2292define i32 @test_unsigned_i32_f16(half %f) nounwind {2293; X86-X87-LABEL: test_unsigned_i32_f16:2294; X86-X87: # %bb.0:2295; X86-X87-NEXT: subl $28, %esp2296; X86-X87-NEXT: movzwl {{[0-9]+}}(%esp), %eax2297; X86-X87-NEXT: movl %eax, (%esp)2298; X86-X87-NEXT: calll __extendhfsf22299; X86-X87-NEXT: fnstcw {{[0-9]+}}(%esp)2300; X86-X87-NEXT: movzwl {{[0-9]+}}(%esp), %eax2301; X86-X87-NEXT: orl $3072, %eax # imm = 0xC002302; X86-X87-NEXT: movw %ax, {{[0-9]+}}(%esp)2303; X86-X87-NEXT: fldcw {{[0-9]+}}(%esp)2304; X86-X87-NEXT: fld %st(0)2305; X86-X87-NEXT: fistpll {{[0-9]+}}(%esp)2306; X86-X87-NEXT: fldcw {{[0-9]+}}(%esp)2307; X86-X87-NEXT: fldz2308; X86-X87-NEXT: fxch %st(1)2309; X86-X87-NEXT: fucom %st(1)2310; X86-X87-NEXT: fstp %st(1)2311; X86-X87-NEXT: fnstsw %ax2312; X86-X87-NEXT: xorl %ecx, %ecx2313; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax2314; X86-X87-NEXT: sahf2315; X86-X87-NEXT: jb .LBB25_22316; X86-X87-NEXT: # %bb.1:2317; X86-X87-NEXT: movl {{[0-9]+}}(%esp), %ecx2318; X86-X87-NEXT: .LBB25_2:2319; X86-X87-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}2320; X86-X87-NEXT: fxch %st(1)2321; X86-X87-NEXT: fucompp2322; X86-X87-NEXT: fnstsw %ax2323; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax2324; X86-X87-NEXT: sahf2325; X86-X87-NEXT: movl $-1, %eax2326; X86-X87-NEXT: ja .LBB25_42327; X86-X87-NEXT: # %bb.3:2328; X86-X87-NEXT: movl %ecx, %eax2329; X86-X87-NEXT: .LBB25_4:2330; X86-X87-NEXT: addl $28, %esp2331; X86-X87-NEXT: retl2332;2333; X86-SSE-LABEL: test_unsigned_i32_f16:2334; X86-SSE: # %bb.0:2335; X86-SSE-NEXT: subl $12, %esp2336; X86-SSE-NEXT: pinsrw $0, {{[0-9]+}}(%esp), %xmm02337; X86-SSE-NEXT: pextrw $0, %xmm0, %eax2338; X86-SSE-NEXT: movw %ax, (%esp)2339; X86-SSE-NEXT: calll __extendhfsf22340; X86-SSE-NEXT: fstps {{[0-9]+}}(%esp)2341; X86-SSE-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero2342; X86-SSE-NEXT: cvttss2si %xmm0, %eax2343; X86-SSE-NEXT: movl %eax, %ecx2344; X86-SSE-NEXT: sarl $31, %ecx2345; X86-SSE-NEXT: movaps %xmm0, %xmm12346; X86-SSE-NEXT: subss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm12347; X86-SSE-NEXT: cvttss2si %xmm1, %edx2348; X86-SSE-NEXT: andl %ecx, %edx2349; X86-SSE-NEXT: orl %eax, %edx2350; X86-SSE-NEXT: xorl %ecx, %ecx2351; X86-SSE-NEXT: xorps %xmm1, %xmm12352; X86-SSE-NEXT: ucomiss %xmm1, %xmm02353; X86-SSE-NEXT: cmovael %edx, %ecx2354; X86-SSE-NEXT: ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm02355; X86-SSE-NEXT: movl $-1, %eax2356; X86-SSE-NEXT: cmovbel %ecx, %eax2357; X86-SSE-NEXT: addl $12, %esp2358; X86-SSE-NEXT: retl2359;2360; X64-LABEL: test_unsigned_i32_f16:2361; X64: # %bb.0:2362; X64-NEXT: pushq %rax2363; X64-NEXT: callq __extendhfsf2@PLT2364; X64-NEXT: cvttss2si %xmm0, %rax2365; X64-NEXT: xorl %ecx, %ecx2366; X64-NEXT: xorps %xmm1, %xmm12367; X64-NEXT: ucomiss %xmm1, %xmm02368; X64-NEXT: cmovael %eax, %ecx2369; X64-NEXT: ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02370; X64-NEXT: movl $-1, %eax2371; X64-NEXT: cmovbel %ecx, %eax2372; X64-NEXT: popq %rcx2373; X64-NEXT: retq2374 %x = call i32 @llvm.fptoui.sat.i32.f16(half %f)2375 ret i32 %x2376}2377 2378define i50 @test_unsigned_i50_f16(half %f) nounwind {2379; X86-X87-LABEL: test_unsigned_i50_f16:2380; X86-X87: # %bb.0:2381; X86-X87-NEXT: pushl %esi2382; X86-X87-NEXT: subl $24, %esp2383; X86-X87-NEXT: movzwl {{[0-9]+}}(%esp), %eax2384; X86-X87-NEXT: movl %eax, (%esp)2385; X86-X87-NEXT: calll __extendhfsf22386; X86-X87-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}2387; X86-X87-NEXT: fxch %st(1)2388; X86-X87-NEXT: fucom %st(1)2389; X86-X87-NEXT: fnstsw %ax2390; X86-X87-NEXT: xorl %ecx, %ecx2391; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax2392; X86-X87-NEXT: sahf2393; X86-X87-NEXT: setae %al2394; X86-X87-NEXT: fldz2395; X86-X87-NEXT: jae .LBB26_22396; X86-X87-NEXT: # %bb.1:2397; X86-X87-NEXT: fstp %st(2)2398; X86-X87-NEXT: fld %st(1)2399; X86-X87-NEXT: fxch %st(2)2400; X86-X87-NEXT: .LBB26_2:2401; X86-X87-NEXT: fxch %st(2)2402; X86-X87-NEXT: fsubr %st(1), %st2403; X86-X87-NEXT: fnstcw {{[0-9]+}}(%esp)2404; X86-X87-NEXT: movzwl {{[0-9]+}}(%esp), %edx2405; X86-X87-NEXT: orl $3072, %edx # imm = 0xC002406; X86-X87-NEXT: movw %dx, {{[0-9]+}}(%esp)2407; X86-X87-NEXT: fldcw {{[0-9]+}}(%esp)2408; X86-X87-NEXT: fistpll {{[0-9]+}}(%esp)2409; X86-X87-NEXT: fldcw {{[0-9]+}}(%esp)2410; X86-X87-NEXT: movb %al, %cl2411; X86-X87-NEXT: shll $31, %ecx2412; X86-X87-NEXT: xorl {{[0-9]+}}(%esp), %ecx2413; X86-X87-NEXT: fucom %st(1)2414; X86-X87-NEXT: fstp %st(1)2415; X86-X87-NEXT: fnstsw %ax2416; X86-X87-NEXT: xorl %edx, %edx2417; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax2418; X86-X87-NEXT: sahf2419; X86-X87-NEXT: movl $0, %esi2420; X86-X87-NEXT: jb .LBB26_42421; X86-X87-NEXT: # %bb.3:2422; X86-X87-NEXT: movl %ecx, %esi2423; X86-X87-NEXT: .LBB26_4:2424; X86-X87-NEXT: jb .LBB26_62425; X86-X87-NEXT: # %bb.5:2426; X86-X87-NEXT: movl {{[0-9]+}}(%esp), %edx2427; X86-X87-NEXT: .LBB26_6:2428; X86-X87-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}2429; X86-X87-NEXT: fxch %st(1)2430; X86-X87-NEXT: fucompp2431; X86-X87-NEXT: fnstsw %ax2432; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax2433; X86-X87-NEXT: sahf2434; X86-X87-NEXT: movl $-1, %eax2435; X86-X87-NEXT: ja .LBB26_82436; X86-X87-NEXT: # %bb.7:2437; X86-X87-NEXT: movl %edx, %eax2438; X86-X87-NEXT: .LBB26_8:2439; X86-X87-NEXT: movl $262143, %edx # imm = 0x3FFFF2440; X86-X87-NEXT: ja .LBB26_102441; X86-X87-NEXT: # %bb.9:2442; X86-X87-NEXT: movl %esi, %edx2443; X86-X87-NEXT: .LBB26_10:2444; X86-X87-NEXT: addl $24, %esp2445; X86-X87-NEXT: popl %esi2446; X86-X87-NEXT: retl2447;2448; X86-SSE-LABEL: test_unsigned_i50_f16:2449; X86-SSE: # %bb.0:2450; X86-SSE-NEXT: pushl %esi2451; X86-SSE-NEXT: subl $24, %esp2452; X86-SSE-NEXT: pinsrw $0, {{[0-9]+}}(%esp), %xmm02453; X86-SSE-NEXT: pextrw $0, %xmm0, %eax2454; X86-SSE-NEXT: movw %ax, (%esp)2455; X86-SSE-NEXT: calll __extendhfsf22456; X86-SSE-NEXT: fstps {{[0-9]+}}(%esp)2457; X86-SSE-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero2458; X86-SSE-NEXT: movss {{.*#+}} xmm2 = [9.22337203E+18,0.0E+0,0.0E+0,0.0E+0]2459; X86-SSE-NEXT: ucomiss %xmm2, %xmm02460; X86-SSE-NEXT: xorps %xmm1, %xmm12461; X86-SSE-NEXT: jae .LBB26_22462; X86-SSE-NEXT: # %bb.1:2463; X86-SSE-NEXT: xorps %xmm2, %xmm22464; X86-SSE-NEXT: .LBB26_2:2465; X86-SSE-NEXT: movaps %xmm0, %xmm32466; X86-SSE-NEXT: subss %xmm2, %xmm32467; X86-SSE-NEXT: movss %xmm3, {{[0-9]+}}(%esp)2468; X86-SSE-NEXT: setae %cl2469; X86-SSE-NEXT: flds {{[0-9]+}}(%esp)2470; X86-SSE-NEXT: fnstcw {{[0-9]+}}(%esp)2471; X86-SSE-NEXT: movzwl {{[0-9]+}}(%esp), %eax2472; X86-SSE-NEXT: orl $3072, %eax # imm = 0xC002473; X86-SSE-NEXT: movw %ax, {{[0-9]+}}(%esp)2474; X86-SSE-NEXT: fldcw {{[0-9]+}}(%esp)2475; X86-SSE-NEXT: fistpll {{[0-9]+}}(%esp)2476; X86-SSE-NEXT: fldcw {{[0-9]+}}(%esp)2477; X86-SSE-NEXT: xorl %eax, %eax2478; X86-SSE-NEXT: ucomiss %xmm1, %xmm02479; X86-SSE-NEXT: movl $0, %esi2480; X86-SSE-NEXT: jb .LBB26_42481; X86-SSE-NEXT: # %bb.3:2482; X86-SSE-NEXT: movzbl %cl, %eax2483; X86-SSE-NEXT: shll $31, %eax2484; X86-SSE-NEXT: xorl {{[0-9]+}}(%esp), %eax2485; X86-SSE-NEXT: movl {{[0-9]+}}(%esp), %esi2486; X86-SSE-NEXT: .LBB26_4:2487; X86-SSE-NEXT: ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm02488; X86-SSE-NEXT: movl $262143, %edx # imm = 0x3FFFF2489; X86-SSE-NEXT: cmovbel %eax, %edx2490; X86-SSE-NEXT: movl $-1, %eax2491; X86-SSE-NEXT: cmovbel %esi, %eax2492; X86-SSE-NEXT: addl $24, %esp2493; X86-SSE-NEXT: popl %esi2494; X86-SSE-NEXT: retl2495;2496; X64-LABEL: test_unsigned_i50_f16:2497; X64: # %bb.0:2498; X64-NEXT: pushq %rax2499; X64-NEXT: callq __extendhfsf2@PLT2500; X64-NEXT: cvttss2si %xmm0, %rax2501; X64-NEXT: movq %rax, %rcx2502; X64-NEXT: sarq $63, %rcx2503; X64-NEXT: movaps %xmm0, %xmm12504; X64-NEXT: subss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm12505; X64-NEXT: cvttss2si %xmm1, %rdx2506; X64-NEXT: andq %rcx, %rdx2507; X64-NEXT: orq %rax, %rdx2508; X64-NEXT: xorl %ecx, %ecx2509; X64-NEXT: xorps %xmm1, %xmm12510; X64-NEXT: ucomiss %xmm1, %xmm02511; X64-NEXT: cmovaeq %rdx, %rcx2512; X64-NEXT: ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02513; X64-NEXT: movabsq $1125899906842623, %rax # imm = 0x3FFFFFFFFFFFF2514; X64-NEXT: cmovbeq %rcx, %rax2515; X64-NEXT: popq %rcx2516; X64-NEXT: retq2517 %x = call i50 @llvm.fptoui.sat.i50.f16(half %f)2518 ret i50 %x2519}2520 2521define i64 @test_unsigned_i64_f16(half %f) nounwind {2522; X86-X87-LABEL: test_unsigned_i64_f16:2523; X86-X87: # %bb.0:2524; X86-X87-NEXT: pushl %edi2525; X86-X87-NEXT: pushl %esi2526; X86-X87-NEXT: subl $20, %esp2527; X86-X87-NEXT: movzwl {{[0-9]+}}(%esp), %eax2528; X86-X87-NEXT: movl %eax, (%esp)2529; X86-X87-NEXT: calll __extendhfsf22530; X86-X87-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}2531; X86-X87-NEXT: fxch %st(1)2532; X86-X87-NEXT: fucom %st(1)2533; X86-X87-NEXT: fnstsw %ax2534; X86-X87-NEXT: xorl %ecx, %ecx2535; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax2536; X86-X87-NEXT: sahf2537; X86-X87-NEXT: setae %al2538; X86-X87-NEXT: fldz2539; X86-X87-NEXT: jae .LBB27_22540; X86-X87-NEXT: # %bb.1:2541; X86-X87-NEXT: fstp %st(2)2542; X86-X87-NEXT: fld %st(1)2543; X86-X87-NEXT: fxch %st(2)2544; X86-X87-NEXT: .LBB27_2:2545; X86-X87-NEXT: fxch %st(2)2546; X86-X87-NEXT: fsubr %st(1), %st2547; X86-X87-NEXT: fnstcw {{[0-9]+}}(%esp)2548; X86-X87-NEXT: movzwl {{[0-9]+}}(%esp), %edx2549; X86-X87-NEXT: orl $3072, %edx # imm = 0xC002550; X86-X87-NEXT: movw %dx, {{[0-9]+}}(%esp)2551; X86-X87-NEXT: fldcw {{[0-9]+}}(%esp)2552; X86-X87-NEXT: fistpll {{[0-9]+}}(%esp)2553; X86-X87-NEXT: fldcw {{[0-9]+}}(%esp)2554; X86-X87-NEXT: movb %al, %cl2555; X86-X87-NEXT: shll $31, %ecx2556; X86-X87-NEXT: xorl {{[0-9]+}}(%esp), %ecx2557; X86-X87-NEXT: fucom %st(1)2558; X86-X87-NEXT: fstp %st(1)2559; X86-X87-NEXT: fnstsw %ax2560; X86-X87-NEXT: xorl %esi, %esi2561; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax2562; X86-X87-NEXT: sahf2563; X86-X87-NEXT: movl $0, %edi2564; X86-X87-NEXT: jb .LBB27_42565; X86-X87-NEXT: # %bb.3:2566; X86-X87-NEXT: movl %ecx, %edi2567; X86-X87-NEXT: .LBB27_4:2568; X86-X87-NEXT: jb .LBB27_62569; X86-X87-NEXT: # %bb.5:2570; X86-X87-NEXT: movl {{[0-9]+}}(%esp), %esi2571; X86-X87-NEXT: .LBB27_6:2572; X86-X87-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}2573; X86-X87-NEXT: fxch %st(1)2574; X86-X87-NEXT: fucompp2575; X86-X87-NEXT: fnstsw %ax2576; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax2577; X86-X87-NEXT: sahf2578; X86-X87-NEXT: movl $-1, %eax2579; X86-X87-NEXT: movl $-1, %edx2580; X86-X87-NEXT: ja .LBB27_82581; X86-X87-NEXT: # %bb.7:2582; X86-X87-NEXT: movl %esi, %eax2583; X86-X87-NEXT: movl %edi, %edx2584; X86-X87-NEXT: .LBB27_8:2585; X86-X87-NEXT: addl $20, %esp2586; X86-X87-NEXT: popl %esi2587; X86-X87-NEXT: popl %edi2588; X86-X87-NEXT: retl2589;2590; X86-SSE-LABEL: test_unsigned_i64_f16:2591; X86-SSE: # %bb.0:2592; X86-SSE-NEXT: subl $28, %esp2593; X86-SSE-NEXT: pinsrw $0, {{[0-9]+}}(%esp), %xmm02594; X86-SSE-NEXT: pextrw $0, %xmm0, %eax2595; X86-SSE-NEXT: movw %ax, (%esp)2596; X86-SSE-NEXT: calll __extendhfsf22597; X86-SSE-NEXT: fstps {{[0-9]+}}(%esp)2598; X86-SSE-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero2599; X86-SSE-NEXT: movss {{.*#+}} xmm2 = [9.22337203E+18,0.0E+0,0.0E+0,0.0E+0]2600; X86-SSE-NEXT: ucomiss %xmm2, %xmm02601; X86-SSE-NEXT: xorps %xmm1, %xmm12602; X86-SSE-NEXT: jae .LBB27_22603; X86-SSE-NEXT: # %bb.1:2604; X86-SSE-NEXT: xorps %xmm2, %xmm22605; X86-SSE-NEXT: .LBB27_2:2606; X86-SSE-NEXT: movaps %xmm0, %xmm32607; X86-SSE-NEXT: subss %xmm2, %xmm32608; X86-SSE-NEXT: movss %xmm3, {{[0-9]+}}(%esp)2609; X86-SSE-NEXT: setae %cl2610; X86-SSE-NEXT: flds {{[0-9]+}}(%esp)2611; X86-SSE-NEXT: fnstcw {{[0-9]+}}(%esp)2612; X86-SSE-NEXT: movzwl {{[0-9]+}}(%esp), %eax2613; X86-SSE-NEXT: orl $3072, %eax # imm = 0xC002614; X86-SSE-NEXT: movw %ax, {{[0-9]+}}(%esp)2615; X86-SSE-NEXT: fldcw {{[0-9]+}}(%esp)2616; X86-SSE-NEXT: fistpll {{[0-9]+}}(%esp)2617; X86-SSE-NEXT: fldcw {{[0-9]+}}(%esp)2618; X86-SSE-NEXT: xorl %edx, %edx2619; X86-SSE-NEXT: ucomiss %xmm1, %xmm02620; X86-SSE-NEXT: movl $0, %eax2621; X86-SSE-NEXT: jb .LBB27_42622; X86-SSE-NEXT: # %bb.3:2623; X86-SSE-NEXT: movzbl %cl, %edx2624; X86-SSE-NEXT: shll $31, %edx2625; X86-SSE-NEXT: xorl {{[0-9]+}}(%esp), %edx2626; X86-SSE-NEXT: movl {{[0-9]+}}(%esp), %eax2627; X86-SSE-NEXT: .LBB27_4:2628; X86-SSE-NEXT: ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm02629; X86-SSE-NEXT: movl $-1, %ecx2630; X86-SSE-NEXT: cmoval %ecx, %edx2631; X86-SSE-NEXT: cmoval %ecx, %eax2632; X86-SSE-NEXT: addl $28, %esp2633; X86-SSE-NEXT: retl2634;2635; X64-LABEL: test_unsigned_i64_f16:2636; X64: # %bb.0:2637; X64-NEXT: pushq %rax2638; X64-NEXT: callq __extendhfsf2@PLT2639; X64-NEXT: cvttss2si %xmm0, %rax2640; X64-NEXT: movq %rax, %rcx2641; X64-NEXT: sarq $63, %rcx2642; X64-NEXT: movaps %xmm0, %xmm12643; X64-NEXT: subss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm12644; X64-NEXT: cvttss2si %xmm1, %rdx2645; X64-NEXT: andq %rcx, %rdx2646; X64-NEXT: orq %rax, %rdx2647; X64-NEXT: xorl %ecx, %ecx2648; X64-NEXT: xorps %xmm1, %xmm12649; X64-NEXT: ucomiss %xmm1, %xmm02650; X64-NEXT: cmovaeq %rdx, %rcx2651; X64-NEXT: ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02652; X64-NEXT: movq $-1, %rax2653; X64-NEXT: cmovbeq %rcx, %rax2654; X64-NEXT: popq %rcx2655; X64-NEXT: retq2656 %x = call i64 @llvm.fptoui.sat.i64.f16(half %f)2657 ret i64 %x2658}2659 2660define i100 @test_unsigned_i100_f16(half %f) nounwind {2661; X86-X87-LABEL: test_unsigned_i100_f16:2662; X86-X87: # %bb.0:2663; X86-X87-NEXT: pushl %ebp2664; X86-X87-NEXT: pushl %ebx2665; X86-X87-NEXT: pushl %edi2666; X86-X87-NEXT: pushl %esi2667; X86-X87-NEXT: subl $44, %esp2668; X86-X87-NEXT: movzwl {{[0-9]+}}(%esp), %eax2669; X86-X87-NEXT: movl %eax, (%esp)2670; X86-X87-NEXT: calll __extendhfsf22671; X86-X87-NEXT: leal {{[0-9]+}}(%esp), %eax2672; X86-X87-NEXT: movl %eax, (%esp)2673; X86-X87-NEXT: fsts {{[0-9]+}}(%esp)2674; X86-X87-NEXT: fldz2675; X86-X87-NEXT: fxch %st(1)2676; X86-X87-NEXT: fsts {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill2677; X86-X87-NEXT: fucompp2678; X86-X87-NEXT: fnstsw %ax2679; X86-X87-NEXT: movl %eax, %ebx2680; X86-X87-NEXT: calll __fixunssfti2681; X86-X87-NEXT: subl $4, %esp2682; X86-X87-NEXT: xorl %edi, %edi2683; X86-X87-NEXT: movb %bh, %ah2684; X86-X87-NEXT: sahf2685; X86-X87-NEXT: movl $0, %eax2686; X86-X87-NEXT: jb .LBB28_22687; X86-X87-NEXT: # %bb.1:2688; X86-X87-NEXT: movl {{[0-9]+}}(%esp), %eax2689; X86-X87-NEXT: .LBB28_2:2690; X86-X87-NEXT: movl $0, %esi2691; X86-X87-NEXT: movl $0, %ebx2692; X86-X87-NEXT: jb .LBB28_42693; X86-X87-NEXT: # %bb.3:2694; X86-X87-NEXT: movl {{[0-9]+}}(%esp), %ebx2695; X86-X87-NEXT: movl {{[0-9]+}}(%esp), %esi2696; X86-X87-NEXT: .LBB28_4:2697; X86-X87-NEXT: jb .LBB28_62698; X86-X87-NEXT: # %bb.5:2699; X86-X87-NEXT: movl {{[0-9]+}}(%esp), %edi2700; X86-X87-NEXT: .LBB28_6:2701; X86-X87-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill2702; X86-X87-NEXT: movl {{[0-9]+}}(%esp), %ecx2703; X86-X87-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}2704; X86-X87-NEXT: flds {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload2705; X86-X87-NEXT: fucompp2706; X86-X87-NEXT: fnstsw %ax2707; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax2708; X86-X87-NEXT: sahf2709; X86-X87-NEXT: movl $15, %eax2710; X86-X87-NEXT: ja .LBB28_82711; X86-X87-NEXT: # %bb.7:2712; X86-X87-NEXT: movl %edi, %eax2713; X86-X87-NEXT: .LBB28_8:2714; X86-X87-NEXT: movl $-1, %edi2715; X86-X87-NEXT: movl $-1, %ebp2716; X86-X87-NEXT: movl $-1, %edx2717; X86-X87-NEXT: ja .LBB28_102718; X86-X87-NEXT: # %bb.9:2719; X86-X87-NEXT: movl %ebx, %edi2720; X86-X87-NEXT: movl %esi, %ebp2721; X86-X87-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload2722; X86-X87-NEXT: .LBB28_10:2723; X86-X87-NEXT: movl %edx, 8(%ecx)2724; X86-X87-NEXT: movl %ebp, 4(%ecx)2725; X86-X87-NEXT: movl %edi, (%ecx)2726; X86-X87-NEXT: andl $15, %eax2727; X86-X87-NEXT: movb %al, 12(%ecx)2728; X86-X87-NEXT: movl %ecx, %eax2729; X86-X87-NEXT: addl $44, %esp2730; X86-X87-NEXT: popl %esi2731; X86-X87-NEXT: popl %edi2732; X86-X87-NEXT: popl %ebx2733; X86-X87-NEXT: popl %ebp2734; X86-X87-NEXT: retl $42735;2736; X86-SSE-LABEL: test_unsigned_i100_f16:2737; X86-SSE: # %bb.0:2738; X86-SSE-NEXT: pushl %ebx2739; X86-SSE-NEXT: pushl %edi2740; X86-SSE-NEXT: pushl %esi2741; X86-SSE-NEXT: subl $32, %esp2742; X86-SSE-NEXT: pinsrw $0, {{[0-9]+}}(%esp), %xmm02743; X86-SSE-NEXT: movl {{[0-9]+}}(%esp), %esi2744; X86-SSE-NEXT: pextrw $0, %xmm0, %eax2745; X86-SSE-NEXT: movw %ax, (%esp)2746; X86-SSE-NEXT: calll __extendhfsf22747; X86-SSE-NEXT: leal {{[0-9]+}}(%esp), %eax2748; X86-SSE-NEXT: movl %eax, (%esp)2749; X86-SSE-NEXT: fstps {{[0-9]+}}(%esp)2750; X86-SSE-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero2751; X86-SSE-NEXT: movss %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill2752; X86-SSE-NEXT: movss %xmm0, {{[0-9]+}}(%esp)2753; X86-SSE-NEXT: calll __fixunssfti2754; X86-SSE-NEXT: subl $4, %esp2755; X86-SSE-NEXT: xorl %eax, %eax2756; X86-SSE-NEXT: xorps %xmm0, %xmm02757; X86-SSE-NEXT: movss {{[-0-9]+}}(%e{{[sb]}}p), %xmm1 # 4-byte Reload2758; X86-SSE-NEXT: # xmm1 = mem[0],zero,zero,zero2759; X86-SSE-NEXT: ucomiss %xmm0, %xmm12760; X86-SSE-NEXT: movaps %xmm1, %xmm02761; X86-SSE-NEXT: movl $0, %ecx2762; X86-SSE-NEXT: movl $0, %edx2763; X86-SSE-NEXT: movl $0, %edi2764; X86-SSE-NEXT: jb .LBB28_22765; X86-SSE-NEXT: # %bb.1:2766; X86-SSE-NEXT: movl {{[0-9]+}}(%esp), %eax2767; X86-SSE-NEXT: movl {{[0-9]+}}(%esp), %ecx2768; X86-SSE-NEXT: movl {{[0-9]+}}(%esp), %edx2769; X86-SSE-NEXT: movl {{[0-9]+}}(%esp), %edi2770; X86-SSE-NEXT: .LBB28_2:2771; X86-SSE-NEXT: ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm02772; X86-SSE-NEXT: movl $15, %ebx2773; X86-SSE-NEXT: cmovbel %edi, %ebx2774; X86-SSE-NEXT: movl $-1, %edi2775; X86-SSE-NEXT: cmoval %edi, %edx2776; X86-SSE-NEXT: cmoval %edi, %ecx2777; X86-SSE-NEXT: cmoval %edi, %eax2778; X86-SSE-NEXT: movl %eax, 8(%esi)2779; X86-SSE-NEXT: movl %ecx, 4(%esi)2780; X86-SSE-NEXT: movl %edx, (%esi)2781; X86-SSE-NEXT: andl $15, %ebx2782; X86-SSE-NEXT: movb %bl, 12(%esi)2783; X86-SSE-NEXT: movl %esi, %eax2784; X86-SSE-NEXT: addl $32, %esp2785; X86-SSE-NEXT: popl %esi2786; X86-SSE-NEXT: popl %edi2787; X86-SSE-NEXT: popl %ebx2788; X86-SSE-NEXT: retl $42789;2790; X64-LABEL: test_unsigned_i100_f16:2791; X64: # %bb.0:2792; X64-NEXT: pushq %rax2793; X64-NEXT: callq __extendhfsf2@PLT2794; X64-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill2795; X64-NEXT: callq __fixunssfti@PLT2796; X64-NEXT: xorl %ecx, %ecx2797; X64-NEXT: xorps %xmm0, %xmm02798; X64-NEXT: movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload2799; X64-NEXT: # xmm1 = mem[0],zero,zero,zero2800; X64-NEXT: ucomiss %xmm0, %xmm12801; X64-NEXT: cmovbq %rcx, %rdx2802; X64-NEXT: cmovbq %rcx, %rax2803; X64-NEXT: ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm12804; X64-NEXT: movq $-1, %rcx2805; X64-NEXT: cmovaq %rcx, %rax2806; X64-NEXT: movabsq $68719476735, %rcx # imm = 0xFFFFFFFFF2807; X64-NEXT: cmovaq %rcx, %rdx2808; X64-NEXT: popq %rcx2809; X64-NEXT: retq2810 %x = call i100 @llvm.fptoui.sat.i100.f16(half %f)2811 ret i100 %x2812}2813 2814define i128 @test_unsigned_i128_f16(half %f) nounwind {2815; X86-X87-LABEL: test_unsigned_i128_f16:2816; X86-X87: # %bb.0:2817; X86-X87-NEXT: pushl %ebp2818; X86-X87-NEXT: pushl %ebx2819; X86-X87-NEXT: pushl %edi2820; X86-X87-NEXT: pushl %esi2821; X86-X87-NEXT: subl $60, %esp2822; X86-X87-NEXT: movzwl {{[0-9]+}}(%esp), %eax2823; X86-X87-NEXT: movl %eax, (%esp)2824; X86-X87-NEXT: calll __extendhfsf22825; X86-X87-NEXT: leal {{[0-9]+}}(%esp), %eax2826; X86-X87-NEXT: movl %eax, (%esp)2827; X86-X87-NEXT: fsts {{[0-9]+}}(%esp)2828; X86-X87-NEXT: fldz2829; X86-X87-NEXT: fxch %st(1)2830; X86-X87-NEXT: fsts {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill2831; X86-X87-NEXT: fucompp2832; X86-X87-NEXT: fnstsw %ax2833; X86-X87-NEXT: movl %eax, %ebx2834; X86-X87-NEXT: calll __fixunssfti2835; X86-X87-NEXT: subl $4, %esp2836; X86-X87-NEXT: xorl %edx, %edx2837; X86-X87-NEXT: movb %bh, %ah2838; X86-X87-NEXT: sahf2839; X86-X87-NEXT: movl $0, %eax2840; X86-X87-NEXT: jb .LBB29_22841; X86-X87-NEXT: # %bb.1:2842; X86-X87-NEXT: movl {{[0-9]+}}(%esp), %eax2843; X86-X87-NEXT: .LBB29_2:2844; X86-X87-NEXT: movl $0, %ecx2845; X86-X87-NEXT: jb .LBB29_42846; X86-X87-NEXT: # %bb.3:2847; X86-X87-NEXT: movl {{[0-9]+}}(%esp), %ecx2848; X86-X87-NEXT: .LBB29_4:2849; X86-X87-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill2850; X86-X87-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill2851; X86-X87-NEXT: movl {{[0-9]+}}(%esp), %ecx2852; X86-X87-NEXT: movl $0, %ebx2853; X86-X87-NEXT: jb .LBB29_62854; X86-X87-NEXT: # %bb.5:2855; X86-X87-NEXT: movl {{[0-9]+}}(%esp), %ebx2856; X86-X87-NEXT: movl {{[0-9]+}}(%esp), %edx2857; X86-X87-NEXT: .LBB29_6:2858; X86-X87-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}2859; X86-X87-NEXT: flds {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload2860; X86-X87-NEXT: fucompp2861; X86-X87-NEXT: fnstsw %ax2862; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax2863; X86-X87-NEXT: sahf2864; X86-X87-NEXT: movl $-1, %eax2865; X86-X87-NEXT: movl $-1, %ebp2866; X86-X87-NEXT: movl $-1, %edi2867; X86-X87-NEXT: movl $-1, %esi2868; X86-X87-NEXT: ja .LBB29_82869; X86-X87-NEXT: # %bb.7:2870; X86-X87-NEXT: movl %ebx, %eax2871; X86-X87-NEXT: movl %edx, %ebp2872; X86-X87-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edi # 4-byte Reload2873; X86-X87-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload2874; X86-X87-NEXT: .LBB29_8:2875; X86-X87-NEXT: movl %esi, 12(%ecx)2876; X86-X87-NEXT: movl %edi, 8(%ecx)2877; X86-X87-NEXT: movl %ebp, 4(%ecx)2878; X86-X87-NEXT: movl %eax, (%ecx)2879; X86-X87-NEXT: movl %ecx, %eax2880; X86-X87-NEXT: addl $60, %esp2881; X86-X87-NEXT: popl %esi2882; X86-X87-NEXT: popl %edi2883; X86-X87-NEXT: popl %ebx2884; X86-X87-NEXT: popl %ebp2885; X86-X87-NEXT: retl $42886;2887; X86-SSE-LABEL: test_unsigned_i128_f16:2888; X86-SSE: # %bb.0:2889; X86-SSE-NEXT: pushl %ebx2890; X86-SSE-NEXT: pushl %edi2891; X86-SSE-NEXT: pushl %esi2892; X86-SSE-NEXT: subl $32, %esp2893; X86-SSE-NEXT: pinsrw $0, {{[0-9]+}}(%esp), %xmm02894; X86-SSE-NEXT: movl {{[0-9]+}}(%esp), %esi2895; X86-SSE-NEXT: pextrw $0, %xmm0, %eax2896; X86-SSE-NEXT: movw %ax, (%esp)2897; X86-SSE-NEXT: calll __extendhfsf22898; X86-SSE-NEXT: leal {{[0-9]+}}(%esp), %eax2899; X86-SSE-NEXT: movl %eax, (%esp)2900; X86-SSE-NEXT: fstps {{[0-9]+}}(%esp)2901; X86-SSE-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero2902; X86-SSE-NEXT: movss %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill2903; X86-SSE-NEXT: movss %xmm0, {{[0-9]+}}(%esp)2904; X86-SSE-NEXT: calll __fixunssfti2905; X86-SSE-NEXT: subl $4, %esp2906; X86-SSE-NEXT: xorl %eax, %eax2907; X86-SSE-NEXT: xorps %xmm0, %xmm02908; X86-SSE-NEXT: movss {{[-0-9]+}}(%e{{[sb]}}p), %xmm1 # 4-byte Reload2909; X86-SSE-NEXT: # xmm1 = mem[0],zero,zero,zero2910; X86-SSE-NEXT: ucomiss %xmm0, %xmm12911; X86-SSE-NEXT: movaps %xmm1, %xmm02912; X86-SSE-NEXT: movl $0, %ecx2913; X86-SSE-NEXT: movl $0, %edx2914; X86-SSE-NEXT: movl $0, %edi2915; X86-SSE-NEXT: jb .LBB29_22916; X86-SSE-NEXT: # %bb.1:2917; X86-SSE-NEXT: movl {{[0-9]+}}(%esp), %eax2918; X86-SSE-NEXT: movl {{[0-9]+}}(%esp), %ecx2919; X86-SSE-NEXT: movl {{[0-9]+}}(%esp), %edx2920; X86-SSE-NEXT: movl {{[0-9]+}}(%esp), %edi2921; X86-SSE-NEXT: .LBB29_2:2922; X86-SSE-NEXT: ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm02923; X86-SSE-NEXT: movl $-1, %ebx2924; X86-SSE-NEXT: cmoval %ebx, %edi2925; X86-SSE-NEXT: cmoval %ebx, %edx2926; X86-SSE-NEXT: cmoval %ebx, %ecx2927; X86-SSE-NEXT: cmoval %ebx, %eax2928; X86-SSE-NEXT: movl %eax, 12(%esi)2929; X86-SSE-NEXT: movl %ecx, 8(%esi)2930; X86-SSE-NEXT: movl %edx, 4(%esi)2931; X86-SSE-NEXT: movl %edi, (%esi)2932; X86-SSE-NEXT: movl %esi, %eax2933; X86-SSE-NEXT: addl $32, %esp2934; X86-SSE-NEXT: popl %esi2935; X86-SSE-NEXT: popl %edi2936; X86-SSE-NEXT: popl %ebx2937; X86-SSE-NEXT: retl $42938;2939; X64-LABEL: test_unsigned_i128_f16:2940; X64: # %bb.0:2941; X64-NEXT: pushq %rax2942; X64-NEXT: callq __extendhfsf2@PLT2943; X64-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill2944; X64-NEXT: callq __fixunssfti@PLT2945; X64-NEXT: xorl %ecx, %ecx2946; X64-NEXT: xorps %xmm0, %xmm02947; X64-NEXT: movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload2948; X64-NEXT: # xmm1 = mem[0],zero,zero,zero2949; X64-NEXT: ucomiss %xmm0, %xmm12950; X64-NEXT: cmovbq %rcx, %rdx2951; X64-NEXT: cmovbq %rcx, %rax2952; X64-NEXT: ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm12953; X64-NEXT: movq $-1, %rcx2954; X64-NEXT: cmovaq %rcx, %rax2955; X64-NEXT: cmovaq %rcx, %rdx2956; X64-NEXT: popq %rcx2957; X64-NEXT: retq2958 %x = call i128 @llvm.fptoui.sat.i128.f16(half %f)2959 ret i128 %x2960}2961 2962;2963; 80-bit float to unsigned integer2964;2965 2966declare i1 @llvm.fptoui.sat.i1.f80 (x86_fp80)2967declare i8 @llvm.fptoui.sat.i8.f80 (x86_fp80)2968declare i13 @llvm.fptoui.sat.i13.f80 (x86_fp80)2969declare i16 @llvm.fptoui.sat.i16.f80 (x86_fp80)2970declare i19 @llvm.fptoui.sat.i19.f80 (x86_fp80)2971declare i32 @llvm.fptoui.sat.i32.f80 (x86_fp80)2972declare i50 @llvm.fptoui.sat.i50.f80 (x86_fp80)2973declare i64 @llvm.fptoui.sat.i64.f80 (x86_fp80)2974declare i100 @llvm.fptoui.sat.i100.f80(x86_fp80)2975declare i128 @llvm.fptoui.sat.i128.f80(x86_fp80)2976 2977define i1 @test_unsigned_i1_f80(x86_fp80 %f) nounwind {2978; X86-X87-LABEL: test_unsigned_i1_f80:2979; X86-X87: # %bb.0:2980; X86-X87-NEXT: subl $8, %esp2981; X86-X87-NEXT: fldt {{[0-9]+}}(%esp)2982; X86-X87-NEXT: fnstcw {{[0-9]+}}(%esp)2983; X86-X87-NEXT: movzwl {{[0-9]+}}(%esp), %eax2984; X86-X87-NEXT: orl $3072, %eax # imm = 0xC002985; X86-X87-NEXT: movw %ax, {{[0-9]+}}(%esp)2986; X86-X87-NEXT: fldcw {{[0-9]+}}(%esp)2987; X86-X87-NEXT: fists {{[0-9]+}}(%esp)2988; X86-X87-NEXT: fldcw {{[0-9]+}}(%esp)2989; X86-X87-NEXT: fldz2990; X86-X87-NEXT: fxch %st(1)2991; X86-X87-NEXT: fucom %st(1)2992; X86-X87-NEXT: fstp %st(1)2993; X86-X87-NEXT: fnstsw %ax2994; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax2995; X86-X87-NEXT: sahf2996; X86-X87-NEXT: jb .LBB30_12997; X86-X87-NEXT: # %bb.2:2998; X86-X87-NEXT: movzbl {{[0-9]+}}(%esp), %ecx2999; X86-X87-NEXT: jmp .LBB30_33000; X86-X87-NEXT: .LBB30_1:3001; X86-X87-NEXT: xorl %ecx, %ecx3002; X86-X87-NEXT: .LBB30_3:3003; X86-X87-NEXT: fld13004; X86-X87-NEXT: fxch %st(1)3005; X86-X87-NEXT: fucompp3006; X86-X87-NEXT: fnstsw %ax3007; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax3008; X86-X87-NEXT: sahf3009; X86-X87-NEXT: movb $1, %al3010; X86-X87-NEXT: ja .LBB30_53011; X86-X87-NEXT: # %bb.4:3012; X86-X87-NEXT: movl %ecx, %eax3013; X86-X87-NEXT: .LBB30_5:3014; X86-X87-NEXT: addl $8, %esp3015; X86-X87-NEXT: retl3016;3017; X86-SSE-LABEL: test_unsigned_i1_f80:3018; X86-SSE: # %bb.0:3019; X86-SSE-NEXT: subl $8, %esp3020; X86-SSE-NEXT: fldt {{[0-9]+}}(%esp)3021; X86-SSE-NEXT: fnstcw {{[0-9]+}}(%esp)3022; X86-SSE-NEXT: movzwl {{[0-9]+}}(%esp), %eax3023; X86-SSE-NEXT: orl $3072, %eax # imm = 0xC003024; X86-SSE-NEXT: movw %ax, {{[0-9]+}}(%esp)3025; X86-SSE-NEXT: fldcw {{[0-9]+}}(%esp)3026; X86-SSE-NEXT: fists {{[0-9]+}}(%esp)3027; X86-SSE-NEXT: fldcw {{[0-9]+}}(%esp)3028; X86-SSE-NEXT: movzbl {{[0-9]+}}(%esp), %eax3029; X86-SSE-NEXT: xorl %ecx, %ecx3030; X86-SSE-NEXT: fldz3031; X86-SSE-NEXT: fxch %st(1)3032; X86-SSE-NEXT: fucomi %st(1), %st3033; X86-SSE-NEXT: fstp %st(1)3034; X86-SSE-NEXT: cmovael %eax, %ecx3035; X86-SSE-NEXT: fld13036; X86-SSE-NEXT: fxch %st(1)3037; X86-SSE-NEXT: fucompi %st(1), %st3038; X86-SSE-NEXT: fstp %st(0)3039; X86-SSE-NEXT: movl $1, %eax3040; X86-SSE-NEXT: cmovbel %ecx, %eax3041; X86-SSE-NEXT: # kill: def $al killed $al killed $eax3042; X86-SSE-NEXT: addl $8, %esp3043; X86-SSE-NEXT: retl3044;3045; X64-LABEL: test_unsigned_i1_f80:3046; X64: # %bb.0:3047; X64-NEXT: fldt {{[0-9]+}}(%rsp)3048; X64-NEXT: fnstcw -{{[0-9]+}}(%rsp)3049; X64-NEXT: movzwl -{{[0-9]+}}(%rsp), %eax3050; X64-NEXT: orl $3072, %eax # imm = 0xC003051; X64-NEXT: movw %ax, -{{[0-9]+}}(%rsp)3052; X64-NEXT: fldcw -{{[0-9]+}}(%rsp)3053; X64-NEXT: fists -{{[0-9]+}}(%rsp)3054; X64-NEXT: fldcw -{{[0-9]+}}(%rsp)3055; X64-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax3056; X64-NEXT: xorl %ecx, %ecx3057; X64-NEXT: fldz3058; X64-NEXT: fxch %st(1)3059; X64-NEXT: fucomi %st(1), %st3060; X64-NEXT: fstp %st(1)3061; X64-NEXT: cmovael %eax, %ecx3062; X64-NEXT: fld13063; X64-NEXT: fxch %st(1)3064; X64-NEXT: fucompi %st(1), %st3065; X64-NEXT: fstp %st(0)3066; X64-NEXT: movl $1, %eax3067; X64-NEXT: cmovbel %ecx, %eax3068; X64-NEXT: # kill: def $al killed $al killed $eax3069; X64-NEXT: retq3070 %x = call i1 @llvm.fptoui.sat.i1.f80(x86_fp80 %f)3071 ret i1 %x3072}3073 3074define i8 @test_unsigned_i8_f80(x86_fp80 %f) nounwind {3075; X86-X87-LABEL: test_unsigned_i8_f80:3076; X86-X87: # %bb.0:3077; X86-X87-NEXT: subl $8, %esp3078; X86-X87-NEXT: fldt {{[0-9]+}}(%esp)3079; X86-X87-NEXT: fnstcw {{[0-9]+}}(%esp)3080; X86-X87-NEXT: movzwl {{[0-9]+}}(%esp), %eax3081; X86-X87-NEXT: orl $3072, %eax # imm = 0xC003082; X86-X87-NEXT: movw %ax, {{[0-9]+}}(%esp)3083; X86-X87-NEXT: fldcw {{[0-9]+}}(%esp)3084; X86-X87-NEXT: fists {{[0-9]+}}(%esp)3085; X86-X87-NEXT: fldcw {{[0-9]+}}(%esp)3086; X86-X87-NEXT: fldz3087; X86-X87-NEXT: fxch %st(1)3088; X86-X87-NEXT: fucom %st(1)3089; X86-X87-NEXT: fstp %st(1)3090; X86-X87-NEXT: fnstsw %ax3091; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax3092; X86-X87-NEXT: sahf3093; X86-X87-NEXT: jb .LBB31_13094; X86-X87-NEXT: # %bb.2:3095; X86-X87-NEXT: movzbl {{[0-9]+}}(%esp), %ecx3096; X86-X87-NEXT: jmp .LBB31_33097; X86-X87-NEXT: .LBB31_1:3098; X86-X87-NEXT: xorl %ecx, %ecx3099; X86-X87-NEXT: .LBB31_3:3100; X86-X87-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}3101; X86-X87-NEXT: fxch %st(1)3102; X86-X87-NEXT: fucompp3103; X86-X87-NEXT: fnstsw %ax3104; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax3105; X86-X87-NEXT: sahf3106; X86-X87-NEXT: movb $-1, %al3107; X86-X87-NEXT: ja .LBB31_53108; X86-X87-NEXT: # %bb.4:3109; X86-X87-NEXT: movl %ecx, %eax3110; X86-X87-NEXT: .LBB31_5:3111; X86-X87-NEXT: addl $8, %esp3112; X86-X87-NEXT: retl3113;3114; X86-SSE-LABEL: test_unsigned_i8_f80:3115; X86-SSE: # %bb.0:3116; X86-SSE-NEXT: subl $8, %esp3117; X86-SSE-NEXT: fldt {{[0-9]+}}(%esp)3118; X86-SSE-NEXT: fnstcw {{[0-9]+}}(%esp)3119; X86-SSE-NEXT: movzwl {{[0-9]+}}(%esp), %eax3120; X86-SSE-NEXT: orl $3072, %eax # imm = 0xC003121; X86-SSE-NEXT: movw %ax, {{[0-9]+}}(%esp)3122; X86-SSE-NEXT: fldcw {{[0-9]+}}(%esp)3123; X86-SSE-NEXT: fists {{[0-9]+}}(%esp)3124; X86-SSE-NEXT: fldcw {{[0-9]+}}(%esp)3125; X86-SSE-NEXT: movzbl {{[0-9]+}}(%esp), %eax3126; X86-SSE-NEXT: xorl %ecx, %ecx3127; X86-SSE-NEXT: fldz3128; X86-SSE-NEXT: fxch %st(1)3129; X86-SSE-NEXT: fucomi %st(1), %st3130; X86-SSE-NEXT: fstp %st(1)3131; X86-SSE-NEXT: cmovael %eax, %ecx3132; X86-SSE-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}3133; X86-SSE-NEXT: fxch %st(1)3134; X86-SSE-NEXT: fucompi %st(1), %st3135; X86-SSE-NEXT: fstp %st(0)3136; X86-SSE-NEXT: movl $255, %eax3137; X86-SSE-NEXT: cmovbel %ecx, %eax3138; X86-SSE-NEXT: # kill: def $al killed $al killed $eax3139; X86-SSE-NEXT: addl $8, %esp3140; X86-SSE-NEXT: retl3141;3142; X64-LABEL: test_unsigned_i8_f80:3143; X64: # %bb.0:3144; X64-NEXT: fldt {{[0-9]+}}(%rsp)3145; X64-NEXT: fnstcw -{{[0-9]+}}(%rsp)3146; X64-NEXT: movzwl -{{[0-9]+}}(%rsp), %eax3147; X64-NEXT: orl $3072, %eax # imm = 0xC003148; X64-NEXT: movw %ax, -{{[0-9]+}}(%rsp)3149; X64-NEXT: fldcw -{{[0-9]+}}(%rsp)3150; X64-NEXT: fists -{{[0-9]+}}(%rsp)3151; X64-NEXT: fldcw -{{[0-9]+}}(%rsp)3152; X64-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax3153; X64-NEXT: xorl %ecx, %ecx3154; X64-NEXT: fldz3155; X64-NEXT: fxch %st(1)3156; X64-NEXT: fucomi %st(1), %st3157; X64-NEXT: fstp %st(1)3158; X64-NEXT: cmovael %eax, %ecx3159; X64-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}(%rip)3160; X64-NEXT: fxch %st(1)3161; X64-NEXT: fucompi %st(1), %st3162; X64-NEXT: fstp %st(0)3163; X64-NEXT: movl $255, %eax3164; X64-NEXT: cmovbel %ecx, %eax3165; X64-NEXT: # kill: def $al killed $al killed $eax3166; X64-NEXT: retq3167 %x = call i8 @llvm.fptoui.sat.i8.f80(x86_fp80 %f)3168 ret i8 %x3169}3170 3171define i13 @test_unsigned_i13_f80(x86_fp80 %f) nounwind {3172; X86-X87-LABEL: test_unsigned_i13_f80:3173; X86-X87: # %bb.0:3174; X86-X87-NEXT: subl $8, %esp3175; X86-X87-NEXT: fldt {{[0-9]+}}(%esp)3176; X86-X87-NEXT: fnstcw (%esp)3177; X86-X87-NEXT: movzwl (%esp), %eax3178; X86-X87-NEXT: orl $3072, %eax # imm = 0xC003179; X86-X87-NEXT: movw %ax, {{[0-9]+}}(%esp)3180; X86-X87-NEXT: fldcw {{[0-9]+}}(%esp)3181; X86-X87-NEXT: fistl {{[0-9]+}}(%esp)3182; X86-X87-NEXT: fldcw (%esp)3183; X86-X87-NEXT: fldz3184; X86-X87-NEXT: fxch %st(1)3185; X86-X87-NEXT: fucom %st(1)3186; X86-X87-NEXT: fstp %st(1)3187; X86-X87-NEXT: fnstsw %ax3188; X86-X87-NEXT: xorl %ecx, %ecx3189; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax3190; X86-X87-NEXT: sahf3191; X86-X87-NEXT: jb .LBB32_23192; X86-X87-NEXT: # %bb.1:3193; X86-X87-NEXT: movl {{[0-9]+}}(%esp), %ecx3194; X86-X87-NEXT: .LBB32_2:3195; X86-X87-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}3196; X86-X87-NEXT: fxch %st(1)3197; X86-X87-NEXT: fucompp3198; X86-X87-NEXT: fnstsw %ax3199; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax3200; X86-X87-NEXT: sahf3201; X86-X87-NEXT: movl $8191, %eax # imm = 0x1FFF3202; X86-X87-NEXT: ja .LBB32_43203; X86-X87-NEXT: # %bb.3:3204; X86-X87-NEXT: movl %ecx, %eax3205; X86-X87-NEXT: .LBB32_4:3206; X86-X87-NEXT: # kill: def $ax killed $ax killed $eax3207; X86-X87-NEXT: addl $8, %esp3208; X86-X87-NEXT: retl3209;3210; X86-SSE-LABEL: test_unsigned_i13_f80:3211; X86-SSE: # %bb.0:3212; X86-SSE-NEXT: subl $8, %esp3213; X86-SSE-NEXT: fldt {{[0-9]+}}(%esp)3214; X86-SSE-NEXT: fnstcw (%esp)3215; X86-SSE-NEXT: movzwl (%esp), %eax3216; X86-SSE-NEXT: orl $3072, %eax # imm = 0xC003217; X86-SSE-NEXT: movw %ax, {{[0-9]+}}(%esp)3218; X86-SSE-NEXT: fldcw {{[0-9]+}}(%esp)3219; X86-SSE-NEXT: fistl {{[0-9]+}}(%esp)3220; X86-SSE-NEXT: fldcw (%esp)3221; X86-SSE-NEXT: xorl %ecx, %ecx3222; X86-SSE-NEXT: fldz3223; X86-SSE-NEXT: fxch %st(1)3224; X86-SSE-NEXT: fucomi %st(1), %st3225; X86-SSE-NEXT: fstp %st(1)3226; X86-SSE-NEXT: jb .LBB32_23227; X86-SSE-NEXT: # %bb.1:3228; X86-SSE-NEXT: movl {{[0-9]+}}(%esp), %ecx3229; X86-SSE-NEXT: .LBB32_2:3230; X86-SSE-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}3231; X86-SSE-NEXT: fxch %st(1)3232; X86-SSE-NEXT: fucompi %st(1), %st3233; X86-SSE-NEXT: fstp %st(0)3234; X86-SSE-NEXT: movl $8191, %eax # imm = 0x1FFF3235; X86-SSE-NEXT: cmovbel %ecx, %eax3236; X86-SSE-NEXT: # kill: def $ax killed $ax killed $eax3237; X86-SSE-NEXT: addl $8, %esp3238; X86-SSE-NEXT: retl3239;3240; X64-LABEL: test_unsigned_i13_f80:3241; X64: # %bb.0:3242; X64-NEXT: fldt {{[0-9]+}}(%rsp)3243; X64-NEXT: fnstcw -{{[0-9]+}}(%rsp)3244; X64-NEXT: movzwl -{{[0-9]+}}(%rsp), %eax3245; X64-NEXT: orl $3072, %eax # imm = 0xC003246; X64-NEXT: movw %ax, -{{[0-9]+}}(%rsp)3247; X64-NEXT: fldcw -{{[0-9]+}}(%rsp)3248; X64-NEXT: fistl -{{[0-9]+}}(%rsp)3249; X64-NEXT: fldcw -{{[0-9]+}}(%rsp)3250; X64-NEXT: xorl %ecx, %ecx3251; X64-NEXT: fldz3252; X64-NEXT: fxch %st(1)3253; X64-NEXT: fucomi %st(1), %st3254; X64-NEXT: fstp %st(1)3255; X64-NEXT: jb .LBB32_23256; X64-NEXT: # %bb.1:3257; X64-NEXT: movl -{{[0-9]+}}(%rsp), %ecx3258; X64-NEXT: .LBB32_2:3259; X64-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}(%rip)3260; X64-NEXT: fxch %st(1)3261; X64-NEXT: fucompi %st(1), %st3262; X64-NEXT: fstp %st(0)3263; X64-NEXT: movl $8191, %eax # imm = 0x1FFF3264; X64-NEXT: cmovbel %ecx, %eax3265; X64-NEXT: # kill: def $ax killed $ax killed $eax3266; X64-NEXT: retq3267 %x = call i13 @llvm.fptoui.sat.i13.f80(x86_fp80 %f)3268 ret i13 %x3269}3270 3271define i16 @test_unsigned_i16_f80(x86_fp80 %f) nounwind {3272; X86-X87-LABEL: test_unsigned_i16_f80:3273; X86-X87: # %bb.0:3274; X86-X87-NEXT: subl $8, %esp3275; X86-X87-NEXT: fldt {{[0-9]+}}(%esp)3276; X86-X87-NEXT: fnstcw (%esp)3277; X86-X87-NEXT: movzwl (%esp), %eax3278; X86-X87-NEXT: orl $3072, %eax # imm = 0xC003279; X86-X87-NEXT: movw %ax, {{[0-9]+}}(%esp)3280; X86-X87-NEXT: fldcw {{[0-9]+}}(%esp)3281; X86-X87-NEXT: fistl {{[0-9]+}}(%esp)3282; X86-X87-NEXT: fldcw (%esp)3283; X86-X87-NEXT: fldz3284; X86-X87-NEXT: fxch %st(1)3285; X86-X87-NEXT: fucom %st(1)3286; X86-X87-NEXT: fstp %st(1)3287; X86-X87-NEXT: fnstsw %ax3288; X86-X87-NEXT: xorl %ecx, %ecx3289; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax3290; X86-X87-NEXT: sahf3291; X86-X87-NEXT: jb .LBB33_23292; X86-X87-NEXT: # %bb.1:3293; X86-X87-NEXT: movl {{[0-9]+}}(%esp), %ecx3294; X86-X87-NEXT: .LBB33_2:3295; X86-X87-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}3296; X86-X87-NEXT: fxch %st(1)3297; X86-X87-NEXT: fucompp3298; X86-X87-NEXT: fnstsw %ax3299; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax3300; X86-X87-NEXT: sahf3301; X86-X87-NEXT: movl $65535, %eax # imm = 0xFFFF3302; X86-X87-NEXT: ja .LBB33_43303; X86-X87-NEXT: # %bb.3:3304; X86-X87-NEXT: movl %ecx, %eax3305; X86-X87-NEXT: .LBB33_4:3306; X86-X87-NEXT: # kill: def $ax killed $ax killed $eax3307; X86-X87-NEXT: addl $8, %esp3308; X86-X87-NEXT: retl3309;3310; X86-SSE-LABEL: test_unsigned_i16_f80:3311; X86-SSE: # %bb.0:3312; X86-SSE-NEXT: subl $8, %esp3313; X86-SSE-NEXT: fldt {{[0-9]+}}(%esp)3314; X86-SSE-NEXT: fnstcw (%esp)3315; X86-SSE-NEXT: movzwl (%esp), %eax3316; X86-SSE-NEXT: orl $3072, %eax # imm = 0xC003317; X86-SSE-NEXT: movw %ax, {{[0-9]+}}(%esp)3318; X86-SSE-NEXT: fldcw {{[0-9]+}}(%esp)3319; X86-SSE-NEXT: fistl {{[0-9]+}}(%esp)3320; X86-SSE-NEXT: fldcw (%esp)3321; X86-SSE-NEXT: xorl %ecx, %ecx3322; X86-SSE-NEXT: fldz3323; X86-SSE-NEXT: fxch %st(1)3324; X86-SSE-NEXT: fucomi %st(1), %st3325; X86-SSE-NEXT: fstp %st(1)3326; X86-SSE-NEXT: jb .LBB33_23327; X86-SSE-NEXT: # %bb.1:3328; X86-SSE-NEXT: movl {{[0-9]+}}(%esp), %ecx3329; X86-SSE-NEXT: .LBB33_2:3330; X86-SSE-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}3331; X86-SSE-NEXT: fxch %st(1)3332; X86-SSE-NEXT: fucompi %st(1), %st3333; X86-SSE-NEXT: fstp %st(0)3334; X86-SSE-NEXT: movl $65535, %eax # imm = 0xFFFF3335; X86-SSE-NEXT: cmovbel %ecx, %eax3336; X86-SSE-NEXT: # kill: def $ax killed $ax killed $eax3337; X86-SSE-NEXT: addl $8, %esp3338; X86-SSE-NEXT: retl3339;3340; X64-LABEL: test_unsigned_i16_f80:3341; X64: # %bb.0:3342; X64-NEXT: fldt {{[0-9]+}}(%rsp)3343; X64-NEXT: fnstcw -{{[0-9]+}}(%rsp)3344; X64-NEXT: movzwl -{{[0-9]+}}(%rsp), %eax3345; X64-NEXT: orl $3072, %eax # imm = 0xC003346; X64-NEXT: movw %ax, -{{[0-9]+}}(%rsp)3347; X64-NEXT: fldcw -{{[0-9]+}}(%rsp)3348; X64-NEXT: fistl -{{[0-9]+}}(%rsp)3349; X64-NEXT: fldcw -{{[0-9]+}}(%rsp)3350; X64-NEXT: xorl %ecx, %ecx3351; X64-NEXT: fldz3352; X64-NEXT: fxch %st(1)3353; X64-NEXT: fucomi %st(1), %st3354; X64-NEXT: fstp %st(1)3355; X64-NEXT: jb .LBB33_23356; X64-NEXT: # %bb.1:3357; X64-NEXT: movl -{{[0-9]+}}(%rsp), %ecx3358; X64-NEXT: .LBB33_2:3359; X64-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}(%rip)3360; X64-NEXT: fxch %st(1)3361; X64-NEXT: fucompi %st(1), %st3362; X64-NEXT: fstp %st(0)3363; X64-NEXT: movl $65535, %eax # imm = 0xFFFF3364; X64-NEXT: cmovbel %ecx, %eax3365; X64-NEXT: # kill: def $ax killed $ax killed $eax3366; X64-NEXT: retq3367 %x = call i16 @llvm.fptoui.sat.i16.f80(x86_fp80 %f)3368 ret i16 %x3369}3370 3371define i19 @test_unsigned_i19_f80(x86_fp80 %f) nounwind {3372; X86-X87-LABEL: test_unsigned_i19_f80:3373; X86-X87: # %bb.0:3374; X86-X87-NEXT: subl $20, %esp3375; X86-X87-NEXT: fldt {{[0-9]+}}(%esp)3376; X86-X87-NEXT: fnstcw {{[0-9]+}}(%esp)3377; X86-X87-NEXT: movzwl {{[0-9]+}}(%esp), %eax3378; X86-X87-NEXT: orl $3072, %eax # imm = 0xC003379; X86-X87-NEXT: movw %ax, {{[0-9]+}}(%esp)3380; X86-X87-NEXT: fldcw {{[0-9]+}}(%esp)3381; X86-X87-NEXT: fld %st(0)3382; X86-X87-NEXT: fistpll {{[0-9]+}}(%esp)3383; X86-X87-NEXT: fldcw {{[0-9]+}}(%esp)3384; X86-X87-NEXT: fldz3385; X86-X87-NEXT: fxch %st(1)3386; X86-X87-NEXT: fucom %st(1)3387; X86-X87-NEXT: fstp %st(1)3388; X86-X87-NEXT: fnstsw %ax3389; X86-X87-NEXT: xorl %ecx, %ecx3390; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax3391; X86-X87-NEXT: sahf3392; X86-X87-NEXT: jb .LBB34_23393; X86-X87-NEXT: # %bb.1:3394; X86-X87-NEXT: movl {{[0-9]+}}(%esp), %ecx3395; X86-X87-NEXT: .LBB34_2:3396; X86-X87-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}3397; X86-X87-NEXT: fxch %st(1)3398; X86-X87-NEXT: fucompp3399; X86-X87-NEXT: fnstsw %ax3400; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax3401; X86-X87-NEXT: sahf3402; X86-X87-NEXT: movl $524287, %eax # imm = 0x7FFFF3403; X86-X87-NEXT: ja .LBB34_43404; X86-X87-NEXT: # %bb.3:3405; X86-X87-NEXT: movl %ecx, %eax3406; X86-X87-NEXT: .LBB34_4:3407; X86-X87-NEXT: addl $20, %esp3408; X86-X87-NEXT: retl3409;3410; X86-SSE-LABEL: test_unsigned_i19_f80:3411; X86-SSE: # %bb.0:3412; X86-SSE-NEXT: subl $20, %esp3413; X86-SSE-NEXT: fldt {{[0-9]+}}(%esp)3414; X86-SSE-NEXT: fnstcw {{[0-9]+}}(%esp)3415; X86-SSE-NEXT: movzwl {{[0-9]+}}(%esp), %eax3416; X86-SSE-NEXT: orl $3072, %eax # imm = 0xC003417; X86-SSE-NEXT: movw %ax, {{[0-9]+}}(%esp)3418; X86-SSE-NEXT: fldcw {{[0-9]+}}(%esp)3419; X86-SSE-NEXT: fld %st(0)3420; X86-SSE-NEXT: fistpll {{[0-9]+}}(%esp)3421; X86-SSE-NEXT: fldcw {{[0-9]+}}(%esp)3422; X86-SSE-NEXT: xorl %ecx, %ecx3423; X86-SSE-NEXT: fldz3424; X86-SSE-NEXT: fxch %st(1)3425; X86-SSE-NEXT: fucomi %st(1), %st3426; X86-SSE-NEXT: fstp %st(1)3427; X86-SSE-NEXT: jb .LBB34_23428; X86-SSE-NEXT: # %bb.1:3429; X86-SSE-NEXT: movl {{[0-9]+}}(%esp), %ecx3430; X86-SSE-NEXT: .LBB34_2:3431; X86-SSE-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}3432; X86-SSE-NEXT: fxch %st(1)3433; X86-SSE-NEXT: fucompi %st(1), %st3434; X86-SSE-NEXT: fstp %st(0)3435; X86-SSE-NEXT: movl $524287, %eax # imm = 0x7FFFF3436; X86-SSE-NEXT: cmovbel %ecx, %eax3437; X86-SSE-NEXT: addl $20, %esp3438; X86-SSE-NEXT: retl3439;3440; X64-LABEL: test_unsigned_i19_f80:3441; X64: # %bb.0:3442; X64-NEXT: fldt {{[0-9]+}}(%rsp)3443; X64-NEXT: fnstcw -{{[0-9]+}}(%rsp)3444; X64-NEXT: movzwl -{{[0-9]+}}(%rsp), %eax3445; X64-NEXT: orl $3072, %eax # imm = 0xC003446; X64-NEXT: movw %ax, -{{[0-9]+}}(%rsp)3447; X64-NEXT: fldcw -{{[0-9]+}}(%rsp)3448; X64-NEXT: fld %st(0)3449; X64-NEXT: fistpll -{{[0-9]+}}(%rsp)3450; X64-NEXT: fldcw -{{[0-9]+}}(%rsp)3451; X64-NEXT: xorl %ecx, %ecx3452; X64-NEXT: fldz3453; X64-NEXT: fxch %st(1)3454; X64-NEXT: fucomi %st(1), %st3455; X64-NEXT: fstp %st(1)3456; X64-NEXT: jb .LBB34_23457; X64-NEXT: # %bb.1:3458; X64-NEXT: movl -{{[0-9]+}}(%rsp), %ecx3459; X64-NEXT: .LBB34_2:3460; X64-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}(%rip)3461; X64-NEXT: fxch %st(1)3462; X64-NEXT: fucompi %st(1), %st3463; X64-NEXT: fstp %st(0)3464; X64-NEXT: movl $524287, %eax # imm = 0x7FFFF3465; X64-NEXT: cmovbel %ecx, %eax3466; X64-NEXT: retq3467 %x = call i19 @llvm.fptoui.sat.i19.f80(x86_fp80 %f)3468 ret i19 %x3469}3470 3471define i32 @test_unsigned_i32_f80(x86_fp80 %f) nounwind {3472; X86-X87-LABEL: test_unsigned_i32_f80:3473; X86-X87: # %bb.0:3474; X86-X87-NEXT: subl $20, %esp3475; X86-X87-NEXT: fldt {{[0-9]+}}(%esp)3476; X86-X87-NEXT: fnstcw {{[0-9]+}}(%esp)3477; X86-X87-NEXT: movzwl {{[0-9]+}}(%esp), %eax3478; X86-X87-NEXT: orl $3072, %eax # imm = 0xC003479; X86-X87-NEXT: movw %ax, {{[0-9]+}}(%esp)3480; X86-X87-NEXT: fldcw {{[0-9]+}}(%esp)3481; X86-X87-NEXT: fld %st(0)3482; X86-X87-NEXT: fistpll {{[0-9]+}}(%esp)3483; X86-X87-NEXT: fldcw {{[0-9]+}}(%esp)3484; X86-X87-NEXT: fldz3485; X86-X87-NEXT: fxch %st(1)3486; X86-X87-NEXT: fucom %st(1)3487; X86-X87-NEXT: fstp %st(1)3488; X86-X87-NEXT: fnstsw %ax3489; X86-X87-NEXT: xorl %ecx, %ecx3490; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax3491; X86-X87-NEXT: sahf3492; X86-X87-NEXT: jb .LBB35_23493; X86-X87-NEXT: # %bb.1:3494; X86-X87-NEXT: movl {{[0-9]+}}(%esp), %ecx3495; X86-X87-NEXT: .LBB35_2:3496; X86-X87-NEXT: fldl {{\.?LCPI[0-9]+_[0-9]+}}3497; X86-X87-NEXT: fxch %st(1)3498; X86-X87-NEXT: fucompp3499; X86-X87-NEXT: fnstsw %ax3500; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax3501; X86-X87-NEXT: sahf3502; X86-X87-NEXT: movl $-1, %eax3503; X86-X87-NEXT: ja .LBB35_43504; X86-X87-NEXT: # %bb.3:3505; X86-X87-NEXT: movl %ecx, %eax3506; X86-X87-NEXT: .LBB35_4:3507; X86-X87-NEXT: addl $20, %esp3508; X86-X87-NEXT: retl3509;3510; X86-SSE-LABEL: test_unsigned_i32_f80:3511; X86-SSE: # %bb.0:3512; X86-SSE-NEXT: subl $20, %esp3513; X86-SSE-NEXT: fldt {{[0-9]+}}(%esp)3514; X86-SSE-NEXT: fnstcw {{[0-9]+}}(%esp)3515; X86-SSE-NEXT: movzwl {{[0-9]+}}(%esp), %eax3516; X86-SSE-NEXT: orl $3072, %eax # imm = 0xC003517; X86-SSE-NEXT: movw %ax, {{[0-9]+}}(%esp)3518; X86-SSE-NEXT: fldcw {{[0-9]+}}(%esp)3519; X86-SSE-NEXT: fld %st(0)3520; X86-SSE-NEXT: fistpll {{[0-9]+}}(%esp)3521; X86-SSE-NEXT: fldcw {{[0-9]+}}(%esp)3522; X86-SSE-NEXT: xorl %ecx, %ecx3523; X86-SSE-NEXT: fldz3524; X86-SSE-NEXT: fxch %st(1)3525; X86-SSE-NEXT: fucomi %st(1), %st3526; X86-SSE-NEXT: fstp %st(1)3527; X86-SSE-NEXT: jb .LBB35_23528; X86-SSE-NEXT: # %bb.1:3529; X86-SSE-NEXT: movl {{[0-9]+}}(%esp), %ecx3530; X86-SSE-NEXT: .LBB35_2:3531; X86-SSE-NEXT: fldl {{\.?LCPI[0-9]+_[0-9]+}}3532; X86-SSE-NEXT: fxch %st(1)3533; X86-SSE-NEXT: fucompi %st(1), %st3534; X86-SSE-NEXT: fstp %st(0)3535; X86-SSE-NEXT: movl $-1, %eax3536; X86-SSE-NEXT: cmovbel %ecx, %eax3537; X86-SSE-NEXT: addl $20, %esp3538; X86-SSE-NEXT: retl3539;3540; X64-LABEL: test_unsigned_i32_f80:3541; X64: # %bb.0:3542; X64-NEXT: fldt {{[0-9]+}}(%rsp)3543; X64-NEXT: fnstcw -{{[0-9]+}}(%rsp)3544; X64-NEXT: movzwl -{{[0-9]+}}(%rsp), %eax3545; X64-NEXT: orl $3072, %eax # imm = 0xC003546; X64-NEXT: movw %ax, -{{[0-9]+}}(%rsp)3547; X64-NEXT: fldcw -{{[0-9]+}}(%rsp)3548; X64-NEXT: fld %st(0)3549; X64-NEXT: fistpll -{{[0-9]+}}(%rsp)3550; X64-NEXT: fldcw -{{[0-9]+}}(%rsp)3551; X64-NEXT: xorl %ecx, %ecx3552; X64-NEXT: fldz3553; X64-NEXT: fxch %st(1)3554; X64-NEXT: fucomi %st(1), %st3555; X64-NEXT: fstp %st(1)3556; X64-NEXT: jb .LBB35_23557; X64-NEXT: # %bb.1:3558; X64-NEXT: movl -{{[0-9]+}}(%rsp), %ecx3559; X64-NEXT: .LBB35_2:3560; X64-NEXT: fldl {{\.?LCPI[0-9]+_[0-9]+}}(%rip)3561; X64-NEXT: fxch %st(1)3562; X64-NEXT: fucompi %st(1), %st3563; X64-NEXT: fstp %st(0)3564; X64-NEXT: movl $-1, %eax3565; X64-NEXT: cmovbel %ecx, %eax3566; X64-NEXT: retq3567 %x = call i32 @llvm.fptoui.sat.i32.f80(x86_fp80 %f)3568 ret i32 %x3569}3570 3571define i50 @test_unsigned_i50_f80(x86_fp80 %f) nounwind {3572; X86-X87-LABEL: test_unsigned_i50_f80:3573; X86-X87: # %bb.0:3574; X86-X87-NEXT: pushl %esi3575; X86-X87-NEXT: subl $16, %esp3576; X86-X87-NEXT: fldt {{[0-9]+}}(%esp)3577; X86-X87-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}3578; X86-X87-NEXT: fucom %st(1)3579; X86-X87-NEXT: fnstsw %ax3580; X86-X87-NEXT: xorl %ecx, %ecx3581; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax3582; X86-X87-NEXT: sahf3583; X86-X87-NEXT: setbe %al3584; X86-X87-NEXT: fldz3585; X86-X87-NEXT: jbe .LBB36_23586; X86-X87-NEXT: # %bb.1:3587; X86-X87-NEXT: fstp %st(1)3588; X86-X87-NEXT: fld %st(0)3589; X86-X87-NEXT: fxch %st(1)3590; X86-X87-NEXT: .LBB36_2:3591; X86-X87-NEXT: fxch %st(1)3592; X86-X87-NEXT: fsubr %st(2), %st3593; X86-X87-NEXT: fnstcw {{[0-9]+}}(%esp)3594; X86-X87-NEXT: movzwl {{[0-9]+}}(%esp), %edx3595; X86-X87-NEXT: orl $3072, %edx # imm = 0xC003596; X86-X87-NEXT: movw %dx, {{[0-9]+}}(%esp)3597; X86-X87-NEXT: fldcw {{[0-9]+}}(%esp)3598; X86-X87-NEXT: fistpll {{[0-9]+}}(%esp)3599; X86-X87-NEXT: fldcw {{[0-9]+}}(%esp)3600; X86-X87-NEXT: movb %al, %cl3601; X86-X87-NEXT: shll $31, %ecx3602; X86-X87-NEXT: xorl {{[0-9]+}}(%esp), %ecx3603; X86-X87-NEXT: fxch %st(1)3604; X86-X87-NEXT: fucom %st(1)3605; X86-X87-NEXT: fstp %st(1)3606; X86-X87-NEXT: fnstsw %ax3607; X86-X87-NEXT: xorl %edx, %edx3608; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax3609; X86-X87-NEXT: sahf3610; X86-X87-NEXT: movl $0, %esi3611; X86-X87-NEXT: jb .LBB36_43612; X86-X87-NEXT: # %bb.3:3613; X86-X87-NEXT: movl %ecx, %esi3614; X86-X87-NEXT: .LBB36_4:3615; X86-X87-NEXT: jb .LBB36_63616; X86-X87-NEXT: # %bb.5:3617; X86-X87-NEXT: movl {{[0-9]+}}(%esp), %edx3618; X86-X87-NEXT: .LBB36_6:3619; X86-X87-NEXT: fldl {{\.?LCPI[0-9]+_[0-9]+}}3620; X86-X87-NEXT: fxch %st(1)3621; X86-X87-NEXT: fucompp3622; X86-X87-NEXT: fnstsw %ax3623; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax3624; X86-X87-NEXT: sahf3625; X86-X87-NEXT: movl $-1, %eax3626; X86-X87-NEXT: ja .LBB36_83627; X86-X87-NEXT: # %bb.7:3628; X86-X87-NEXT: movl %edx, %eax3629; X86-X87-NEXT: .LBB36_8:3630; X86-X87-NEXT: movl $262143, %edx # imm = 0x3FFFF3631; X86-X87-NEXT: ja .LBB36_103632; X86-X87-NEXT: # %bb.9:3633; X86-X87-NEXT: movl %esi, %edx3634; X86-X87-NEXT: .LBB36_10:3635; X86-X87-NEXT: addl $16, %esp3636; X86-X87-NEXT: popl %esi3637; X86-X87-NEXT: retl3638;3639; X86-SSE-LABEL: test_unsigned_i50_f80:3640; X86-SSE: # %bb.0:3641; X86-SSE-NEXT: pushl %esi3642; X86-SSE-NEXT: subl $16, %esp3643; X86-SSE-NEXT: fldt {{[0-9]+}}(%esp)3644; X86-SSE-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}3645; X86-SSE-NEXT: xorl %eax, %eax3646; X86-SSE-NEXT: fucomi %st(1), %st3647; X86-SSE-NEXT: setbe %cl3648; X86-SSE-NEXT: fldz3649; X86-SSE-NEXT: fld %st(0)3650; X86-SSE-NEXT: fcmovbe %st(2), %st3651; X86-SSE-NEXT: fstp %st(2)3652; X86-SSE-NEXT: fxch %st(1)3653; X86-SSE-NEXT: fsubr %st(2), %st3654; X86-SSE-NEXT: fnstcw {{[0-9]+}}(%esp)3655; X86-SSE-NEXT: movzwl {{[0-9]+}}(%esp), %edx3656; X86-SSE-NEXT: orl $3072, %edx # imm = 0xC003657; X86-SSE-NEXT: movw %dx, {{[0-9]+}}(%esp)3658; X86-SSE-NEXT: fldcw {{[0-9]+}}(%esp)3659; X86-SSE-NEXT: fistpll {{[0-9]+}}(%esp)3660; X86-SSE-NEXT: fldcw {{[0-9]+}}(%esp)3661; X86-SSE-NEXT: xorl %esi, %esi3662; X86-SSE-NEXT: fxch %st(1)3663; X86-SSE-NEXT: fucomi %st(1), %st3664; X86-SSE-NEXT: fstp %st(1)3665; X86-SSE-NEXT: movl $0, %edx3666; X86-SSE-NEXT: jb .LBB36_23667; X86-SSE-NEXT: # %bb.1:3668; X86-SSE-NEXT: movb %cl, %al3669; X86-SSE-NEXT: shll $31, %eax3670; X86-SSE-NEXT: xorl {{[0-9]+}}(%esp), %eax3671; X86-SSE-NEXT: movl {{[0-9]+}}(%esp), %edx3672; X86-SSE-NEXT: movl %eax, %esi3673; X86-SSE-NEXT: .LBB36_2:3674; X86-SSE-NEXT: fldl {{\.?LCPI[0-9]+_[0-9]+}}3675; X86-SSE-NEXT: fxch %st(1)3676; X86-SSE-NEXT: fucompi %st(1), %st3677; X86-SSE-NEXT: fstp %st(0)3678; X86-SSE-NEXT: movl $-1, %eax3679; X86-SSE-NEXT: cmovbel %edx, %eax3680; X86-SSE-NEXT: movl $262143, %edx # imm = 0x3FFFF3681; X86-SSE-NEXT: cmovbel %esi, %edx3682; X86-SSE-NEXT: addl $16, %esp3683; X86-SSE-NEXT: popl %esi3684; X86-SSE-NEXT: retl3685;3686; X64-LABEL: test_unsigned_i50_f80:3687; X64: # %bb.0:3688; X64-NEXT: fldt {{[0-9]+}}(%rsp)3689; X64-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}(%rip)3690; X64-NEXT: xorl %eax, %eax3691; X64-NEXT: fucomi %st(1), %st3692; X64-NEXT: setbe %al3693; X64-NEXT: fldz3694; X64-NEXT: fld %st(0)3695; X64-NEXT: fcmovbe %st(2), %st3696; X64-NEXT: fstp %st(2)3697; X64-NEXT: fxch %st(1)3698; X64-NEXT: fsubr %st(2), %st3699; X64-NEXT: fnstcw -{{[0-9]+}}(%rsp)3700; X64-NEXT: movzwl -{{[0-9]+}}(%rsp), %ecx3701; X64-NEXT: orl $3072, %ecx # imm = 0xC003702; X64-NEXT: movw %cx, -{{[0-9]+}}(%rsp)3703; X64-NEXT: fldcw -{{[0-9]+}}(%rsp)3704; X64-NEXT: fistpll -{{[0-9]+}}(%rsp)3705; X64-NEXT: fldcw -{{[0-9]+}}(%rsp)3706; X64-NEXT: shlq $63, %rax3707; X64-NEXT: xorq -{{[0-9]+}}(%rsp), %rax3708; X64-NEXT: xorl %ecx, %ecx3709; X64-NEXT: fxch %st(1)3710; X64-NEXT: fucomi %st(1), %st3711; X64-NEXT: fstp %st(1)3712; X64-NEXT: cmovaeq %rax, %rcx3713; X64-NEXT: fldl {{\.?LCPI[0-9]+_[0-9]+}}(%rip)3714; X64-NEXT: fxch %st(1)3715; X64-NEXT: fucompi %st(1), %st3716; X64-NEXT: fstp %st(0)3717; X64-NEXT: movabsq $1125899906842623, %rax # imm = 0x3FFFFFFFFFFFF3718; X64-NEXT: cmovbeq %rcx, %rax3719; X64-NEXT: retq3720 %x = call i50 @llvm.fptoui.sat.i50.f80(x86_fp80 %f)3721 ret i50 %x3722}3723 3724define i64 @test_unsigned_i64_f80(x86_fp80 %f) nounwind {3725; X86-X87-LABEL: test_unsigned_i64_f80:3726; X86-X87: # %bb.0:3727; X86-X87-NEXT: pushl %edi3728; X86-X87-NEXT: pushl %esi3729; X86-X87-NEXT: subl $20, %esp3730; X86-X87-NEXT: fldt {{[0-9]+}}(%esp)3731; X86-X87-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}3732; X86-X87-NEXT: fucom %st(1)3733; X86-X87-NEXT: fnstsw %ax3734; X86-X87-NEXT: xorl %ecx, %ecx3735; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax3736; X86-X87-NEXT: sahf3737; X86-X87-NEXT: setbe %al3738; X86-X87-NEXT: fldz3739; X86-X87-NEXT: jbe .LBB37_23740; X86-X87-NEXT: # %bb.1:3741; X86-X87-NEXT: fstp %st(1)3742; X86-X87-NEXT: fld %st(0)3743; X86-X87-NEXT: fxch %st(1)3744; X86-X87-NEXT: .LBB37_2:3745; X86-X87-NEXT: fxch %st(1)3746; X86-X87-NEXT: fsubr %st(2), %st3747; X86-X87-NEXT: fnstcw {{[0-9]+}}(%esp)3748; X86-X87-NEXT: movzwl {{[0-9]+}}(%esp), %edx3749; X86-X87-NEXT: orl $3072, %edx # imm = 0xC003750; X86-X87-NEXT: movw %dx, {{[0-9]+}}(%esp)3751; X86-X87-NEXT: fldcw {{[0-9]+}}(%esp)3752; X86-X87-NEXT: fistpll {{[0-9]+}}(%esp)3753; X86-X87-NEXT: fldcw {{[0-9]+}}(%esp)3754; X86-X87-NEXT: movb %al, %cl3755; X86-X87-NEXT: shll $31, %ecx3756; X86-X87-NEXT: xorl {{[0-9]+}}(%esp), %ecx3757; X86-X87-NEXT: fxch %st(1)3758; X86-X87-NEXT: fucom %st(1)3759; X86-X87-NEXT: fstp %st(1)3760; X86-X87-NEXT: fnstsw %ax3761; X86-X87-NEXT: xorl %esi, %esi3762; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax3763; X86-X87-NEXT: sahf3764; X86-X87-NEXT: movl $0, %edi3765; X86-X87-NEXT: jb .LBB37_43766; X86-X87-NEXT: # %bb.3:3767; X86-X87-NEXT: movl %ecx, %edi3768; X86-X87-NEXT: .LBB37_4:3769; X86-X87-NEXT: jb .LBB37_63770; X86-X87-NEXT: # %bb.5:3771; X86-X87-NEXT: movl {{[0-9]+}}(%esp), %esi3772; X86-X87-NEXT: .LBB37_6:3773; X86-X87-NEXT: fldt {{\.?LCPI[0-9]+_[0-9]+}}3774; X86-X87-NEXT: fxch %st(1)3775; X86-X87-NEXT: fucompp3776; X86-X87-NEXT: fnstsw %ax3777; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax3778; X86-X87-NEXT: sahf3779; X86-X87-NEXT: movl $-1, %eax3780; X86-X87-NEXT: movl $-1, %edx3781; X86-X87-NEXT: ja .LBB37_83782; X86-X87-NEXT: # %bb.7:3783; X86-X87-NEXT: movl %esi, %eax3784; X86-X87-NEXT: movl %edi, %edx3785; X86-X87-NEXT: .LBB37_8:3786; X86-X87-NEXT: addl $20, %esp3787; X86-X87-NEXT: popl %esi3788; X86-X87-NEXT: popl %edi3789; X86-X87-NEXT: retl3790;3791; X86-SSE-LABEL: test_unsigned_i64_f80:3792; X86-SSE: # %bb.0:3793; X86-SSE-NEXT: pushl %ebx3794; X86-SSE-NEXT: subl $16, %esp3795; X86-SSE-NEXT: fldt {{[0-9]+}}(%esp)3796; X86-SSE-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}3797; X86-SSE-NEXT: xorl %ecx, %ecx3798; X86-SSE-NEXT: fucomi %st(1), %st3799; X86-SSE-NEXT: setbe %bl3800; X86-SSE-NEXT: fldz3801; X86-SSE-NEXT: fld %st(0)3802; X86-SSE-NEXT: fcmovbe %st(2), %st3803; X86-SSE-NEXT: fstp %st(2)3804; X86-SSE-NEXT: fxch %st(1)3805; X86-SSE-NEXT: fsubr %st(2), %st3806; X86-SSE-NEXT: fnstcw {{[0-9]+}}(%esp)3807; X86-SSE-NEXT: movzwl {{[0-9]+}}(%esp), %eax3808; X86-SSE-NEXT: orl $3072, %eax # imm = 0xC003809; X86-SSE-NEXT: movw %ax, {{[0-9]+}}(%esp)3810; X86-SSE-NEXT: fldcw {{[0-9]+}}(%esp)3811; X86-SSE-NEXT: fistpll {{[0-9]+}}(%esp)3812; X86-SSE-NEXT: fldcw {{[0-9]+}}(%esp)3813; X86-SSE-NEXT: xorl %edx, %edx3814; X86-SSE-NEXT: fxch %st(1)3815; X86-SSE-NEXT: fucomi %st(1), %st3816; X86-SSE-NEXT: fstp %st(1)3817; X86-SSE-NEXT: movl $0, %eax3818; X86-SSE-NEXT: jb .LBB37_23819; X86-SSE-NEXT: # %bb.1:3820; X86-SSE-NEXT: movb %bl, %cl3821; X86-SSE-NEXT: shll $31, %ecx3822; X86-SSE-NEXT: xorl {{[0-9]+}}(%esp), %ecx3823; X86-SSE-NEXT: movl {{[0-9]+}}(%esp), %eax3824; X86-SSE-NEXT: movl %ecx, %edx3825; X86-SSE-NEXT: .LBB37_2:3826; X86-SSE-NEXT: fldt {{\.?LCPI[0-9]+_[0-9]+}}3827; X86-SSE-NEXT: fxch %st(1)3828; X86-SSE-NEXT: fucompi %st(1), %st3829; X86-SSE-NEXT: fstp %st(0)3830; X86-SSE-NEXT: movl $-1, %ecx3831; X86-SSE-NEXT: cmoval %ecx, %eax3832; X86-SSE-NEXT: cmoval %ecx, %edx3833; X86-SSE-NEXT: addl $16, %esp3834; X86-SSE-NEXT: popl %ebx3835; X86-SSE-NEXT: retl3836;3837; X64-LABEL: test_unsigned_i64_f80:3838; X64: # %bb.0:3839; X64-NEXT: fldt {{[0-9]+}}(%rsp)3840; X64-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}(%rip)3841; X64-NEXT: xorl %eax, %eax3842; X64-NEXT: fucomi %st(1), %st3843; X64-NEXT: setbe %al3844; X64-NEXT: fldz3845; X64-NEXT: fld %st(0)3846; X64-NEXT: fcmovbe %st(2), %st3847; X64-NEXT: fstp %st(2)3848; X64-NEXT: fxch %st(1)3849; X64-NEXT: fsubr %st(2), %st3850; X64-NEXT: fnstcw -{{[0-9]+}}(%rsp)3851; X64-NEXT: movzwl -{{[0-9]+}}(%rsp), %ecx3852; X64-NEXT: orl $3072, %ecx # imm = 0xC003853; X64-NEXT: movw %cx, -{{[0-9]+}}(%rsp)3854; X64-NEXT: fldcw -{{[0-9]+}}(%rsp)3855; X64-NEXT: fistpll -{{[0-9]+}}(%rsp)3856; X64-NEXT: fldcw -{{[0-9]+}}(%rsp)3857; X64-NEXT: shlq $63, %rax3858; X64-NEXT: xorq -{{[0-9]+}}(%rsp), %rax3859; X64-NEXT: xorl %ecx, %ecx3860; X64-NEXT: fxch %st(1)3861; X64-NEXT: fucomi %st(1), %st3862; X64-NEXT: fstp %st(1)3863; X64-NEXT: cmovaeq %rax, %rcx3864; X64-NEXT: fldt {{\.?LCPI[0-9]+_[0-9]+}}(%rip)3865; X64-NEXT: fxch %st(1)3866; X64-NEXT: fucompi %st(1), %st3867; X64-NEXT: fstp %st(0)3868; X64-NEXT: movq $-1, %rax3869; X64-NEXT: cmovbeq %rcx, %rax3870; X64-NEXT: retq3871 %x = call i64 @llvm.fptoui.sat.i64.f80(x86_fp80 %f)3872 ret i64 %x3873}3874 3875define i100 @test_unsigned_i100_f80(x86_fp80 %f) nounwind {3876; X86-X87-LABEL: test_unsigned_i100_f80:3877; X86-X87: # %bb.0:3878; X86-X87-NEXT: pushl %ebp3879; X86-X87-NEXT: pushl %ebx3880; X86-X87-NEXT: pushl %edi3881; X86-X87-NEXT: pushl %esi3882; X86-X87-NEXT: subl $60, %esp3883; X86-X87-NEXT: fldt {{[0-9]+}}(%esp)3884; X86-X87-NEXT: fld %st(0)3885; X86-X87-NEXT: fstpt {{[0-9]+}}(%esp)3886; X86-X87-NEXT: leal {{[0-9]+}}(%esp), %eax3887; X86-X87-NEXT: movl %eax, (%esp)3888; X86-X87-NEXT: fldz3889; X86-X87-NEXT: fld %st(1)3890; X86-X87-NEXT: fstpt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Spill3891; X86-X87-NEXT: fxch %st(1)3892; X86-X87-NEXT: fucompp3893; X86-X87-NEXT: fnstsw %ax3894; X86-X87-NEXT: movl %eax, %ebx3895; X86-X87-NEXT: calll __fixunsxfti3896; X86-X87-NEXT: subl $4, %esp3897; X86-X87-NEXT: xorl %edi, %edi3898; X86-X87-NEXT: movb %bh, %ah3899; X86-X87-NEXT: sahf3900; X86-X87-NEXT: movl $0, %eax3901; X86-X87-NEXT: jb .LBB38_23902; X86-X87-NEXT: # %bb.1:3903; X86-X87-NEXT: movl {{[0-9]+}}(%esp), %eax3904; X86-X87-NEXT: .LBB38_2:3905; X86-X87-NEXT: movl $0, %esi3906; X86-X87-NEXT: movl $0, %ebx3907; X86-X87-NEXT: jb .LBB38_43908; X86-X87-NEXT: # %bb.3:3909; X86-X87-NEXT: movl {{[0-9]+}}(%esp), %ebx3910; X86-X87-NEXT: movl {{[0-9]+}}(%esp), %esi3911; X86-X87-NEXT: .LBB38_4:3912; X86-X87-NEXT: jb .LBB38_63913; X86-X87-NEXT: # %bb.5:3914; X86-X87-NEXT: movl {{[0-9]+}}(%esp), %edi3915; X86-X87-NEXT: .LBB38_6:3916; X86-X87-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3917; X86-X87-NEXT: movl {{[0-9]+}}(%esp), %ecx3918; X86-X87-NEXT: fldt {{\.?LCPI[0-9]+_[0-9]+}}3919; X86-X87-NEXT: fldt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Reload3920; X86-X87-NEXT: fucompp3921; X86-X87-NEXT: fnstsw %ax3922; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax3923; X86-X87-NEXT: sahf3924; X86-X87-NEXT: movl $15, %eax3925; X86-X87-NEXT: ja .LBB38_83926; X86-X87-NEXT: # %bb.7:3927; X86-X87-NEXT: movl %edi, %eax3928; X86-X87-NEXT: .LBB38_8:3929; X86-X87-NEXT: movl $-1, %edi3930; X86-X87-NEXT: movl $-1, %ebp3931; X86-X87-NEXT: movl $-1, %edx3932; X86-X87-NEXT: ja .LBB38_103933; X86-X87-NEXT: # %bb.9:3934; X86-X87-NEXT: movl %ebx, %edi3935; X86-X87-NEXT: movl %esi, %ebp3936; X86-X87-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload3937; X86-X87-NEXT: .LBB38_10:3938; X86-X87-NEXT: movl %edx, 8(%ecx)3939; X86-X87-NEXT: movl %ebp, 4(%ecx)3940; X86-X87-NEXT: movl %edi, (%ecx)3941; X86-X87-NEXT: andl $15, %eax3942; X86-X87-NEXT: movb %al, 12(%ecx)3943; X86-X87-NEXT: movl %ecx, %eax3944; X86-X87-NEXT: addl $60, %esp3945; X86-X87-NEXT: popl %esi3946; X86-X87-NEXT: popl %edi3947; X86-X87-NEXT: popl %ebx3948; X86-X87-NEXT: popl %ebp3949; X86-X87-NEXT: retl $43950;3951; X86-SSE-LABEL: test_unsigned_i100_f80:3952; X86-SSE: # %bb.0:3953; X86-SSE-NEXT: pushl %ebx3954; X86-SSE-NEXT: pushl %edi3955; X86-SSE-NEXT: pushl %esi3956; X86-SSE-NEXT: subl $48, %esp3957; X86-SSE-NEXT: movl {{[0-9]+}}(%esp), %esi3958; X86-SSE-NEXT: fldt {{[0-9]+}}(%esp)3959; X86-SSE-NEXT: fld %st(0)3960; X86-SSE-NEXT: fstpt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Spill3961; X86-SSE-NEXT: fstpt {{[0-9]+}}(%esp)3962; X86-SSE-NEXT: leal {{[0-9]+}}(%esp), %eax3963; X86-SSE-NEXT: movl %eax, (%esp)3964; X86-SSE-NEXT: calll __fixunsxfti3965; X86-SSE-NEXT: subl $4, %esp3966; X86-SSE-NEXT: fldt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Reload3967; X86-SSE-NEXT: xorl %eax, %eax3968; X86-SSE-NEXT: fldz3969; X86-SSE-NEXT: fxch %st(1)3970; X86-SSE-NEXT: fucomi %st(1), %st3971; X86-SSE-NEXT: fstp %st(1)3972; X86-SSE-NEXT: movl $0, %ecx3973; X86-SSE-NEXT: movl $0, %edx3974; X86-SSE-NEXT: movl $0, %edi3975; X86-SSE-NEXT: jb .LBB38_23976; X86-SSE-NEXT: # %bb.1:3977; X86-SSE-NEXT: movl {{[0-9]+}}(%esp), %eax3978; X86-SSE-NEXT: movl {{[0-9]+}}(%esp), %ecx3979; X86-SSE-NEXT: movl {{[0-9]+}}(%esp), %edx3980; X86-SSE-NEXT: movl {{[0-9]+}}(%esp), %edi3981; X86-SSE-NEXT: .LBB38_2:3982; X86-SSE-NEXT: fldt {{\.?LCPI[0-9]+_[0-9]+}}3983; X86-SSE-NEXT: fxch %st(1)3984; X86-SSE-NEXT: fucompi %st(1), %st3985; X86-SSE-NEXT: fstp %st(0)3986; X86-SSE-NEXT: movl $15, %ebx3987; X86-SSE-NEXT: cmovbel %edi, %ebx3988; X86-SSE-NEXT: movl $-1, %edi3989; X86-SSE-NEXT: cmoval %edi, %edx3990; X86-SSE-NEXT: cmoval %edi, %ecx3991; X86-SSE-NEXT: cmoval %edi, %eax3992; X86-SSE-NEXT: movl %eax, 8(%esi)3993; X86-SSE-NEXT: movl %ecx, 4(%esi)3994; X86-SSE-NEXT: movl %edx, (%esi)3995; X86-SSE-NEXT: andl $15, %ebx3996; X86-SSE-NEXT: movb %bl, 12(%esi)3997; X86-SSE-NEXT: movl %esi, %eax3998; X86-SSE-NEXT: addl $48, %esp3999; X86-SSE-NEXT: popl %esi4000; X86-SSE-NEXT: popl %edi4001; X86-SSE-NEXT: popl %ebx4002; X86-SSE-NEXT: retl $44003;4004; X64-LABEL: test_unsigned_i100_f80:4005; X64: # %bb.0:4006; X64-NEXT: subq $40, %rsp4007; X64-NEXT: fldt {{[0-9]+}}(%rsp)4008; X64-NEXT: fld %st(0)4009; X64-NEXT: fstpt {{[-0-9]+}}(%r{{[sb]}}p) # 10-byte Folded Spill4010; X64-NEXT: fstpt (%rsp)4011; X64-NEXT: callq __fixunsxfti@PLT4012; X64-NEXT: xorl %ecx, %ecx4013; X64-NEXT: fldz4014; X64-NEXT: fldt {{[-0-9]+}}(%r{{[sb]}}p) # 10-byte Folded Reload4015; X64-NEXT: fucomi %st(1), %st4016; X64-NEXT: fstp %st(1)4017; X64-NEXT: cmovbq %rcx, %rdx4018; X64-NEXT: cmovbq %rcx, %rax4019; X64-NEXT: fldt {{\.?LCPI[0-9]+_[0-9]+}}(%rip)4020; X64-NEXT: fxch %st(1)4021; X64-NEXT: fucompi %st(1), %st4022; X64-NEXT: fstp %st(0)4023; X64-NEXT: movq $-1, %rcx4024; X64-NEXT: cmovaq %rcx, %rax4025; X64-NEXT: movabsq $68719476735, %rcx # imm = 0xFFFFFFFFF4026; X64-NEXT: cmovaq %rcx, %rdx4027; X64-NEXT: addq $40, %rsp4028; X64-NEXT: retq4029 %x = call i100 @llvm.fptoui.sat.i100.f80(x86_fp80 %f)4030 ret i100 %x4031}4032 4033define i128 @test_unsigned_i128_f80(x86_fp80 %f) nounwind {4034; X86-X87-LABEL: test_unsigned_i128_f80:4035; X86-X87: # %bb.0:4036; X86-X87-NEXT: pushl %ebp4037; X86-X87-NEXT: pushl %ebx4038; X86-X87-NEXT: pushl %edi4039; X86-X87-NEXT: pushl %esi4040; X86-X87-NEXT: subl $60, %esp4041; X86-X87-NEXT: fldt {{[0-9]+}}(%esp)4042; X86-X87-NEXT: fld %st(0)4043; X86-X87-NEXT: fstpt {{[0-9]+}}(%esp)4044; X86-X87-NEXT: leal {{[0-9]+}}(%esp), %eax4045; X86-X87-NEXT: movl %eax, (%esp)4046; X86-X87-NEXT: fldz4047; X86-X87-NEXT: fld %st(1)4048; X86-X87-NEXT: fstpt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Spill4049; X86-X87-NEXT: fxch %st(1)4050; X86-X87-NEXT: fucompp4051; X86-X87-NEXT: fnstsw %ax4052; X86-X87-NEXT: movl %eax, %ebx4053; X86-X87-NEXT: calll __fixunsxfti4054; X86-X87-NEXT: subl $4, %esp4055; X86-X87-NEXT: xorl %edx, %edx4056; X86-X87-NEXT: movb %bh, %ah4057; X86-X87-NEXT: sahf4058; X86-X87-NEXT: movl $0, %eax4059; X86-X87-NEXT: jb .LBB39_24060; X86-X87-NEXT: # %bb.1:4061; X86-X87-NEXT: movl {{[0-9]+}}(%esp), %eax4062; X86-X87-NEXT: .LBB39_2:4063; X86-X87-NEXT: movl $0, %ecx4064; X86-X87-NEXT: jb .LBB39_44065; X86-X87-NEXT: # %bb.3:4066; X86-X87-NEXT: movl {{[0-9]+}}(%esp), %ecx4067; X86-X87-NEXT: .LBB39_4:4068; X86-X87-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4069; X86-X87-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4070; X86-X87-NEXT: movl {{[0-9]+}}(%esp), %ecx4071; X86-X87-NEXT: movl $0, %ebx4072; X86-X87-NEXT: jb .LBB39_64073; X86-X87-NEXT: # %bb.5:4074; X86-X87-NEXT: movl {{[0-9]+}}(%esp), %ebx4075; X86-X87-NEXT: movl {{[0-9]+}}(%esp), %edx4076; X86-X87-NEXT: .LBB39_6:4077; X86-X87-NEXT: fldt {{\.?LCPI[0-9]+_[0-9]+}}4078; X86-X87-NEXT: fldt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Reload4079; X86-X87-NEXT: fucompp4080; X86-X87-NEXT: fnstsw %ax4081; X86-X87-NEXT: # kill: def $ah killed $ah killed $ax4082; X86-X87-NEXT: sahf4083; X86-X87-NEXT: movl $-1, %eax4084; X86-X87-NEXT: movl $-1, %ebp4085; X86-X87-NEXT: movl $-1, %edi4086; X86-X87-NEXT: movl $-1, %esi4087; X86-X87-NEXT: ja .LBB39_84088; X86-X87-NEXT: # %bb.7:4089; X86-X87-NEXT: movl %ebx, %eax4090; X86-X87-NEXT: movl %edx, %ebp4091; X86-X87-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edi # 4-byte Reload4092; X86-X87-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload4093; X86-X87-NEXT: .LBB39_8:4094; X86-X87-NEXT: movl %esi, 12(%ecx)4095; X86-X87-NEXT: movl %edi, 8(%ecx)4096; X86-X87-NEXT: movl %ebp, 4(%ecx)4097; X86-X87-NEXT: movl %eax, (%ecx)4098; X86-X87-NEXT: movl %ecx, %eax4099; X86-X87-NEXT: addl $60, %esp4100; X86-X87-NEXT: popl %esi4101; X86-X87-NEXT: popl %edi4102; X86-X87-NEXT: popl %ebx4103; X86-X87-NEXT: popl %ebp4104; X86-X87-NEXT: retl $44105;4106; X86-SSE-LABEL: test_unsigned_i128_f80:4107; X86-SSE: # %bb.0:4108; X86-SSE-NEXT: pushl %ebx4109; X86-SSE-NEXT: pushl %edi4110; X86-SSE-NEXT: pushl %esi4111; X86-SSE-NEXT: subl $48, %esp4112; X86-SSE-NEXT: movl {{[0-9]+}}(%esp), %esi4113; X86-SSE-NEXT: fldt {{[0-9]+}}(%esp)4114; X86-SSE-NEXT: fld %st(0)4115; X86-SSE-NEXT: fstpt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Spill4116; X86-SSE-NEXT: fstpt {{[0-9]+}}(%esp)4117; X86-SSE-NEXT: leal {{[0-9]+}}(%esp), %eax4118; X86-SSE-NEXT: movl %eax, (%esp)4119; X86-SSE-NEXT: calll __fixunsxfti4120; X86-SSE-NEXT: subl $4, %esp4121; X86-SSE-NEXT: fldt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Reload4122; X86-SSE-NEXT: xorl %eax, %eax4123; X86-SSE-NEXT: fldz4124; X86-SSE-NEXT: fxch %st(1)4125; X86-SSE-NEXT: fucomi %st(1), %st4126; X86-SSE-NEXT: fstp %st(1)4127; X86-SSE-NEXT: movl $0, %ecx4128; X86-SSE-NEXT: movl $0, %edx4129; X86-SSE-NEXT: movl $0, %edi4130; X86-SSE-NEXT: jb .LBB39_24131; X86-SSE-NEXT: # %bb.1:4132; X86-SSE-NEXT: movl {{[0-9]+}}(%esp), %eax4133; X86-SSE-NEXT: movl {{[0-9]+}}(%esp), %ecx4134; X86-SSE-NEXT: movl {{[0-9]+}}(%esp), %edx4135; X86-SSE-NEXT: movl {{[0-9]+}}(%esp), %edi4136; X86-SSE-NEXT: .LBB39_2:4137; X86-SSE-NEXT: fldt {{\.?LCPI[0-9]+_[0-9]+}}4138; X86-SSE-NEXT: fxch %st(1)4139; X86-SSE-NEXT: fucompi %st(1), %st4140; X86-SSE-NEXT: fstp %st(0)4141; X86-SSE-NEXT: movl $-1, %ebx4142; X86-SSE-NEXT: cmoval %ebx, %edi4143; X86-SSE-NEXT: cmoval %ebx, %edx4144; X86-SSE-NEXT: cmoval %ebx, %ecx4145; X86-SSE-NEXT: cmoval %ebx, %eax4146; X86-SSE-NEXT: movl %eax, 12(%esi)4147; X86-SSE-NEXT: movl %ecx, 8(%esi)4148; X86-SSE-NEXT: movl %edx, 4(%esi)4149; X86-SSE-NEXT: movl %edi, (%esi)4150; X86-SSE-NEXT: movl %esi, %eax4151; X86-SSE-NEXT: addl $48, %esp4152; X86-SSE-NEXT: popl %esi4153; X86-SSE-NEXT: popl %edi4154; X86-SSE-NEXT: popl %ebx4155; X86-SSE-NEXT: retl $44156;4157; X64-LABEL: test_unsigned_i128_f80:4158; X64: # %bb.0:4159; X64-NEXT: subq $40, %rsp4160; X64-NEXT: fldt {{[0-9]+}}(%rsp)4161; X64-NEXT: fld %st(0)4162; X64-NEXT: fstpt {{[-0-9]+}}(%r{{[sb]}}p) # 10-byte Folded Spill4163; X64-NEXT: fstpt (%rsp)4164; X64-NEXT: callq __fixunsxfti@PLT4165; X64-NEXT: xorl %ecx, %ecx4166; X64-NEXT: fldz4167; X64-NEXT: fldt {{[-0-9]+}}(%r{{[sb]}}p) # 10-byte Folded Reload4168; X64-NEXT: fucomi %st(1), %st4169; X64-NEXT: fstp %st(1)4170; X64-NEXT: cmovbq %rcx, %rdx4171; X64-NEXT: cmovbq %rcx, %rax4172; X64-NEXT: fldt {{\.?LCPI[0-9]+_[0-9]+}}(%rip)4173; X64-NEXT: fxch %st(1)4174; X64-NEXT: fucompi %st(1), %st4175; X64-NEXT: fstp %st(0)4176; X64-NEXT: movq $-1, %rcx4177; X64-NEXT: cmovaq %rcx, %rax4178; X64-NEXT: cmovaq %rcx, %rdx4179; X64-NEXT: addq $40, %rsp4180; X64-NEXT: retq4181 %x = call i128 @llvm.fptoui.sat.i128.f80(x86_fp80 %f)4182 ret i128 %x4183}4184