2775 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=thumbv6-none-eabi -float-abi=soft %s -o - | FileCheck %s --check-prefixes=SOFT3; RUN: llc -mtriple=thumbv7-none-eabi -mattr=+vfp2 %s -o - | FileCheck %s --check-prefixes=VFP,VFP24; RUN: llc -mtriple=thumbv8.1m.main-eabi -mattr=+fullfp16,+fp64 %s -o - | FileCheck %s --check-prefixes=VFP,FP165 6;7; 32-bit float to signed 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_signed_i1_f32(float %f) nounwind {22; SOFT-LABEL: test_signed_i1_f32:23; SOFT: @ %bb.0:24; SOFT-NEXT: .save {r4, r5, r6, lr}25; SOFT-NEXT: push {r4, r5, r6, lr}26; SOFT-NEXT: mov r5, r027; SOFT-NEXT: movs r1, #028; SOFT-NEXT: bl __aeabi_fcmpge29; SOFT-NEXT: mov r6, r030; SOFT-NEXT: mov r0, r531; SOFT-NEXT: bl __aeabi_f2uiz32; SOFT-NEXT: mov r4, r033; SOFT-NEXT: cmp r6, #034; SOFT-NEXT: bne .LBB0_235; SOFT-NEXT: @ %bb.1:36; SOFT-NEXT: mov r4, r637; SOFT-NEXT: .LBB0_2:38; SOFT-NEXT: movs r0, #12739; SOFT-NEXT: lsls r1, r0, #2340; SOFT-NEXT: mov r0, r541; SOFT-NEXT: bl __aeabi_fcmpgt42; SOFT-NEXT: cmp r0, #043; SOFT-NEXT: beq .LBB0_444; SOFT-NEXT: @ %bb.3:45; SOFT-NEXT: movs r4, #146; SOFT-NEXT: .LBB0_4:47; SOFT-NEXT: mov r0, r448; SOFT-NEXT: pop {r4, r5, r6, pc}49;50; VFP2-LABEL: test_signed_i1_f32:51; VFP2: @ %bb.0:52; VFP2-NEXT: vmov s0, r053; VFP2-NEXT: vmov.f32 s4, #1.000000e+0054; VFP2-NEXT: vcvt.u32.f32 s2, s055; VFP2-NEXT: vcmp.f32 s0, #056; VFP2-NEXT: vmrs APSR_nzcv, fpscr57; VFP2-NEXT: vcmp.f32 s0, s458; VFP2-NEXT: vmov r0, s259; VFP2-NEXT: it lt60; VFP2-NEXT: movlt r0, #061; VFP2-NEXT: vmrs APSR_nzcv, fpscr62; VFP2-NEXT: it gt63; VFP2-NEXT: movgt r0, #164; VFP2-NEXT: bx lr65;66; FP16-LABEL: test_signed_i1_f32:67; FP16: @ %bb.0:68; FP16-NEXT: vldr s0, .LCPI0_069; FP16-NEXT: vmov s2, r070; FP16-NEXT: vmov.f32 s4, #1.000000e+0071; FP16-NEXT: vmaxnm.f32 s0, s2, s072; FP16-NEXT: vminnm.f32 s0, s0, s473; FP16-NEXT: vcvt.u32.f32 s0, s074; FP16-NEXT: vmov r0, s075; FP16-NEXT: bx lr76; FP16-NEXT: .p2align 277; FP16-NEXT: @ %bb.1:78; FP16-NEXT: .LCPI0_0:79; FP16-NEXT: .long 0x00000000 @ float 080 %x = call i1 @llvm.fptoui.sat.i1.f32(float %f)81 ret i1 %x82}83 84define i8 @test_signed_i8_f32(float %f) nounwind {85; SOFT-LABEL: test_signed_i8_f32:86; SOFT: @ %bb.0:87; SOFT-NEXT: .save {r4, r5, r6, lr}88; SOFT-NEXT: push {r4, r5, r6, lr}89; SOFT-NEXT: mov r5, r090; SOFT-NEXT: movs r1, #091; SOFT-NEXT: bl __aeabi_fcmpge92; SOFT-NEXT: mov r6, r093; SOFT-NEXT: mov r0, r594; SOFT-NEXT: bl __aeabi_f2uiz95; SOFT-NEXT: mov r4, r096; SOFT-NEXT: cmp r6, #097; SOFT-NEXT: bne .LBB1_298; SOFT-NEXT: @ %bb.1:99; SOFT-NEXT: mov r4, r6100; SOFT-NEXT: .LBB1_2:101; SOFT-NEXT: ldr r1, .LCPI1_0102; SOFT-NEXT: mov r0, r5103; SOFT-NEXT: bl __aeabi_fcmpgt104; SOFT-NEXT: cmp r0, #0105; SOFT-NEXT: beq .LBB1_4106; SOFT-NEXT: @ %bb.3:107; SOFT-NEXT: movs r4, #255108; SOFT-NEXT: .LBB1_4:109; SOFT-NEXT: mov r0, r4110; SOFT-NEXT: pop {r4, r5, r6, pc}111; SOFT-NEXT: .p2align 2112; SOFT-NEXT: @ %bb.5:113; SOFT-NEXT: .LCPI1_0:114; SOFT-NEXT: .long 1132396544 @ 0x437f0000115;116; VFP2-LABEL: test_signed_i8_f32:117; VFP2: @ %bb.0:118; VFP2-NEXT: vmov s0, r0119; VFP2-NEXT: vldr s4, .LCPI1_0120; VFP2-NEXT: vcvt.u32.f32 s2, s0121; VFP2-NEXT: vcmp.f32 s0, #0122; VFP2-NEXT: vmrs APSR_nzcv, fpscr123; VFP2-NEXT: vcmp.f32 s0, s4124; VFP2-NEXT: vmov r0, s2125; VFP2-NEXT: it lt126; VFP2-NEXT: movlt r0, #0127; VFP2-NEXT: vmrs APSR_nzcv, fpscr128; VFP2-NEXT: it gt129; VFP2-NEXT: movgt r0, #255130; VFP2-NEXT: bx lr131; VFP2-NEXT: .p2align 2132; VFP2-NEXT: @ %bb.1:133; VFP2-NEXT: .LCPI1_0:134; VFP2-NEXT: .long 0x437f0000 @ float 255135;136; FP16-LABEL: test_signed_i8_f32:137; FP16: @ %bb.0:138; FP16-NEXT: vldr s0, .LCPI1_0139; FP16-NEXT: vmov s2, r0140; FP16-NEXT: vldr s4, .LCPI1_1141; FP16-NEXT: vmaxnm.f32 s0, s2, s0142; FP16-NEXT: vminnm.f32 s0, s0, s4143; FP16-NEXT: vcvt.u32.f32 s0, s0144; FP16-NEXT: vmov r0, s0145; FP16-NEXT: bx lr146; FP16-NEXT: .p2align 2147; FP16-NEXT: @ %bb.1:148; FP16-NEXT: .LCPI1_0:149; FP16-NEXT: .long 0x00000000 @ float 0150; FP16-NEXT: .LCPI1_1:151; FP16-NEXT: .long 0x437f0000 @ float 255152 %x = call i8 @llvm.fptoui.sat.i8.f32(float %f)153 ret i8 %x154}155 156define i13 @test_signed_i13_f32(float %f) nounwind {157; SOFT-LABEL: test_signed_i13_f32:158; SOFT: @ %bb.0:159; SOFT-NEXT: .save {r4, r5, r6, lr}160; SOFT-NEXT: push {r4, r5, r6, lr}161; SOFT-NEXT: mov r5, r0162; SOFT-NEXT: movs r1, #0163; SOFT-NEXT: bl __aeabi_fcmpge164; SOFT-NEXT: mov r6, r0165; SOFT-NEXT: mov r0, r5166; SOFT-NEXT: bl __aeabi_f2uiz167; SOFT-NEXT: mov r4, r0168; SOFT-NEXT: cmp r6, #0169; SOFT-NEXT: bne .LBB2_2170; SOFT-NEXT: @ %bb.1:171; SOFT-NEXT: mov r4, r6172; SOFT-NEXT: .LBB2_2:173; SOFT-NEXT: ldr r1, .LCPI2_0174; SOFT-NEXT: mov r0, r5175; SOFT-NEXT: bl __aeabi_fcmpgt176; SOFT-NEXT: cmp r0, #0177; SOFT-NEXT: beq .LBB2_4178; SOFT-NEXT: @ %bb.3:179; SOFT-NEXT: ldr r4, .LCPI2_1180; SOFT-NEXT: .LBB2_4:181; SOFT-NEXT: mov r0, r4182; SOFT-NEXT: pop {r4, r5, r6, pc}183; SOFT-NEXT: .p2align 2184; SOFT-NEXT: @ %bb.5:185; SOFT-NEXT: .LCPI2_0:186; SOFT-NEXT: .long 1174403072 @ 0x45fff800187; SOFT-NEXT: .LCPI2_1:188; SOFT-NEXT: .long 8191 @ 0x1fff189;190; VFP2-LABEL: test_signed_i13_f32:191; VFP2: @ %bb.0:192; VFP2-NEXT: vmov s0, r0193; VFP2-NEXT: vldr s4, .LCPI2_0194; VFP2-NEXT: vcvt.u32.f32 s2, s0195; VFP2-NEXT: vcmp.f32 s0, #0196; VFP2-NEXT: vmrs APSR_nzcv, fpscr197; VFP2-NEXT: vcmp.f32 s0, s4198; VFP2-NEXT: vmov r0, s2199; VFP2-NEXT: it lt200; VFP2-NEXT: movlt r0, #0201; VFP2-NEXT: vmrs APSR_nzcv, fpscr202; VFP2-NEXT: it gt203; VFP2-NEXT: movwgt r0, #8191204; VFP2-NEXT: bx lr205; VFP2-NEXT: .p2align 2206; VFP2-NEXT: @ %bb.1:207; VFP2-NEXT: .LCPI2_0:208; VFP2-NEXT: .long 0x45fff800 @ float 8191209;210; FP16-LABEL: test_signed_i13_f32:211; FP16: @ %bb.0:212; FP16-NEXT: vldr s0, .LCPI2_0213; FP16-NEXT: vmov s2, r0214; FP16-NEXT: vldr s4, .LCPI2_1215; FP16-NEXT: vmaxnm.f32 s0, s2, s0216; FP16-NEXT: vminnm.f32 s0, s0, s4217; FP16-NEXT: vcvt.u32.f32 s0, s0218; FP16-NEXT: vmov r0, s0219; FP16-NEXT: bx lr220; FP16-NEXT: .p2align 2221; FP16-NEXT: @ %bb.1:222; FP16-NEXT: .LCPI2_0:223; FP16-NEXT: .long 0x00000000 @ float 0224; FP16-NEXT: .LCPI2_1:225; FP16-NEXT: .long 0x45fff800 @ float 8191226 %x = call i13 @llvm.fptoui.sat.i13.f32(float %f)227 ret i13 %x228}229 230define i16 @test_signed_i16_f32(float %f) nounwind {231; SOFT-LABEL: test_signed_i16_f32:232; SOFT: @ %bb.0:233; SOFT-NEXT: .save {r4, r5, r6, lr}234; SOFT-NEXT: push {r4, r5, r6, lr}235; SOFT-NEXT: mov r5, r0236; SOFT-NEXT: movs r1, #0237; SOFT-NEXT: bl __aeabi_fcmpge238; SOFT-NEXT: mov r6, r0239; SOFT-NEXT: mov r0, r5240; SOFT-NEXT: bl __aeabi_f2uiz241; SOFT-NEXT: mov r4, r0242; SOFT-NEXT: cmp r6, #0243; SOFT-NEXT: bne .LBB3_2244; SOFT-NEXT: @ %bb.1:245; SOFT-NEXT: mov r4, r6246; SOFT-NEXT: .LBB3_2:247; SOFT-NEXT: ldr r1, .LCPI3_0248; SOFT-NEXT: mov r0, r5249; SOFT-NEXT: bl __aeabi_fcmpgt250; SOFT-NEXT: cmp r0, #0251; SOFT-NEXT: beq .LBB3_4252; SOFT-NEXT: @ %bb.3:253; SOFT-NEXT: ldr r4, .LCPI3_1254; SOFT-NEXT: .LBB3_4:255; SOFT-NEXT: mov r0, r4256; SOFT-NEXT: pop {r4, r5, r6, pc}257; SOFT-NEXT: .p2align 2258; SOFT-NEXT: @ %bb.5:259; SOFT-NEXT: .LCPI3_0:260; SOFT-NEXT: .long 1199570688 @ 0x477fff00261; SOFT-NEXT: .LCPI3_1:262; SOFT-NEXT: .long 65535 @ 0xffff263;264; VFP2-LABEL: test_signed_i16_f32:265; VFP2: @ %bb.0:266; VFP2-NEXT: vmov s0, r0267; VFP2-NEXT: vldr s4, .LCPI3_0268; VFP2-NEXT: vcvt.u32.f32 s2, s0269; VFP2-NEXT: vcmp.f32 s0, #0270; VFP2-NEXT: vmrs APSR_nzcv, fpscr271; VFP2-NEXT: vcmp.f32 s0, s4272; VFP2-NEXT: vmov r0, s2273; VFP2-NEXT: it lt274; VFP2-NEXT: movlt r0, #0275; VFP2-NEXT: vmrs APSR_nzcv, fpscr276; VFP2-NEXT: it gt277; VFP2-NEXT: movwgt r0, #65535278; VFP2-NEXT: bx lr279; VFP2-NEXT: .p2align 2280; VFP2-NEXT: @ %bb.1:281; VFP2-NEXT: .LCPI3_0:282; VFP2-NEXT: .long 0x477fff00 @ float 65535283;284; FP16-LABEL: test_signed_i16_f32:285; FP16: @ %bb.0:286; FP16-NEXT: vldr s0, .LCPI3_0287; FP16-NEXT: vmov s2, r0288; FP16-NEXT: vldr s4, .LCPI3_1289; FP16-NEXT: vmaxnm.f32 s0, s2, s0290; FP16-NEXT: vminnm.f32 s0, s0, s4291; FP16-NEXT: vcvt.u32.f32 s0, s0292; FP16-NEXT: vmov r0, s0293; FP16-NEXT: bx lr294; FP16-NEXT: .p2align 2295; FP16-NEXT: @ %bb.1:296; FP16-NEXT: .LCPI3_0:297; FP16-NEXT: .long 0x00000000 @ float 0298; FP16-NEXT: .LCPI3_1:299; FP16-NEXT: .long 0x477fff00 @ float 65535300 %x = call i16 @llvm.fptoui.sat.i16.f32(float %f)301 ret i16 %x302}303 304define i19 @test_signed_i19_f32(float %f) nounwind {305; SOFT-LABEL: test_signed_i19_f32:306; SOFT: @ %bb.0:307; SOFT-NEXT: .save {r4, r5, r6, lr}308; SOFT-NEXT: push {r4, r5, r6, lr}309; SOFT-NEXT: mov r5, r0310; SOFT-NEXT: movs r1, #0311; SOFT-NEXT: bl __aeabi_fcmpge312; SOFT-NEXT: mov r6, r0313; SOFT-NEXT: mov r0, r5314; SOFT-NEXT: bl __aeabi_f2uiz315; SOFT-NEXT: mov r4, r0316; SOFT-NEXT: cmp r6, #0317; SOFT-NEXT: bne .LBB4_2318; SOFT-NEXT: @ %bb.1:319; SOFT-NEXT: mov r4, r6320; SOFT-NEXT: .LBB4_2:321; SOFT-NEXT: ldr r1, .LCPI4_0322; SOFT-NEXT: mov r0, r5323; SOFT-NEXT: bl __aeabi_fcmpgt324; SOFT-NEXT: cmp r0, #0325; SOFT-NEXT: beq .LBB4_4326; SOFT-NEXT: @ %bb.3:327; SOFT-NEXT: ldr r4, .LCPI4_1328; SOFT-NEXT: .LBB4_4:329; SOFT-NEXT: mov r0, r4330; SOFT-NEXT: pop {r4, r5, r6, pc}331; SOFT-NEXT: .p2align 2332; SOFT-NEXT: @ %bb.5:333; SOFT-NEXT: .LCPI4_0:334; SOFT-NEXT: .long 1224736736 @ 0x48ffffe0335; SOFT-NEXT: .LCPI4_1:336; SOFT-NEXT: .long 524287 @ 0x7ffff337;338; VFP2-LABEL: test_signed_i19_f32:339; VFP2: @ %bb.0:340; VFP2-NEXT: vmov s0, r0341; VFP2-NEXT: vldr s4, .LCPI4_0342; VFP2-NEXT: vcvt.u32.f32 s2, s0343; VFP2-NEXT: vcmp.f32 s0, #0344; VFP2-NEXT: vmrs APSR_nzcv, fpscr345; VFP2-NEXT: vcmp.f32 s0, s4346; VFP2-NEXT: vmov r0, s2347; VFP2-NEXT: it lt348; VFP2-NEXT: movlt r0, #0349; VFP2-NEXT: vmrs APSR_nzcv, fpscr350; VFP2-NEXT: itt gt351; VFP2-NEXT: movwgt r0, #65535352; VFP2-NEXT: movtgt r0, #7353; VFP2-NEXT: bx lr354; VFP2-NEXT: .p2align 2355; VFP2-NEXT: @ %bb.1:356; VFP2-NEXT: .LCPI4_0:357; VFP2-NEXT: .long 0x48ffffe0 @ float 524287358;359; FP16-LABEL: test_signed_i19_f32:360; FP16: @ %bb.0:361; FP16-NEXT: vldr s0, .LCPI4_0362; FP16-NEXT: vmov s2, r0363; FP16-NEXT: vldr s4, .LCPI4_1364; FP16-NEXT: vmaxnm.f32 s0, s2, s0365; FP16-NEXT: vminnm.f32 s0, s0, s4366; FP16-NEXT: vcvt.u32.f32 s0, s0367; FP16-NEXT: vmov r0, s0368; FP16-NEXT: bx lr369; FP16-NEXT: .p2align 2370; FP16-NEXT: @ %bb.1:371; FP16-NEXT: .LCPI4_0:372; FP16-NEXT: .long 0x00000000 @ float 0373; FP16-NEXT: .LCPI4_1:374; FP16-NEXT: .long 0x48ffffe0 @ float 524287375 %x = call i19 @llvm.fptoui.sat.i19.f32(float %f)376 ret i19 %x377}378 379define i32 @test_signed_i32_f32(float %f) nounwind {380; SOFT-LABEL: test_signed_i32_f32:381; SOFT: @ %bb.0:382; SOFT-NEXT: .save {r4, r5, r6, r7, lr}383; SOFT-NEXT: push {r4, r5, r6, r7, lr}384; SOFT-NEXT: .pad #4385; SOFT-NEXT: sub sp, #4386; SOFT-NEXT: mov r6, r0387; SOFT-NEXT: movs r4, #0388; SOFT-NEXT: mov r1, r4389; SOFT-NEXT: bl __aeabi_fcmpge390; SOFT-NEXT: mov r7, r0391; SOFT-NEXT: mov r0, r6392; SOFT-NEXT: bl __aeabi_f2uiz393; SOFT-NEXT: mov r5, r0394; SOFT-NEXT: cmp r7, #0395; SOFT-NEXT: bne .LBB5_2396; SOFT-NEXT: @ %bb.1:397; SOFT-NEXT: mov r5, r7398; SOFT-NEXT: .LBB5_2:399; SOFT-NEXT: ldr r1, .LCPI5_0400; SOFT-NEXT: mov r0, r6401; SOFT-NEXT: bl __aeabi_fcmpgt402; SOFT-NEXT: cmp r0, #0403; SOFT-NEXT: beq .LBB5_4404; SOFT-NEXT: @ %bb.3:405; SOFT-NEXT: mvns r5, r4406; SOFT-NEXT: .LBB5_4:407; SOFT-NEXT: mov r0, r5408; SOFT-NEXT: add sp, #4409; SOFT-NEXT: pop {r4, r5, r6, r7, pc}410; SOFT-NEXT: .p2align 2411; SOFT-NEXT: @ %bb.5:412; SOFT-NEXT: .LCPI5_0:413; SOFT-NEXT: .long 1333788671 @ 0x4f7fffff414;415; VFP-LABEL: test_signed_i32_f32:416; VFP: @ %bb.0:417; VFP-NEXT: vmov s0, r0418; VFP-NEXT: vcvt.u32.f32 s0, s0419; VFP-NEXT: vmov r0, s0420; VFP-NEXT: bx lr421 %x = call i32 @llvm.fptoui.sat.i32.f32(float %f)422 ret i32 %x423}424 425define i50 @test_signed_i50_f32(float %f) nounwind {426; SOFT-LABEL: test_signed_i50_f32:427; SOFT: @ %bb.0:428; SOFT-NEXT: .save {r4, r5, r6, r7, lr}429; SOFT-NEXT: push {r4, r5, r6, r7, lr}430; SOFT-NEXT: .pad #4431; SOFT-NEXT: sub sp, #4432; SOFT-NEXT: mov r6, r0433; SOFT-NEXT: movs r5, #0434; SOFT-NEXT: mov r1, r5435; SOFT-NEXT: bl __aeabi_fcmpge436; SOFT-NEXT: mov r4, r0437; SOFT-NEXT: mov r0, r6438; SOFT-NEXT: bl __aeabi_f2ulz439; SOFT-NEXT: mov r7, r1440; SOFT-NEXT: cmp r4, #0441; SOFT-NEXT: bne .LBB6_2442; SOFT-NEXT: @ %bb.1:443; SOFT-NEXT: mov r7, r4444; SOFT-NEXT: .LBB6_2:445; SOFT-NEXT: bne .LBB6_4446; SOFT-NEXT: @ %bb.3:447; SOFT-NEXT: mov r0, r4448; SOFT-NEXT: .LBB6_4:449; SOFT-NEXT: mov r4, r0450; SOFT-NEXT: ldr r1, .LCPI6_0451; SOFT-NEXT: mov r0, r6452; SOFT-NEXT: bl __aeabi_fcmpgt453; SOFT-NEXT: mov r1, r0454; SOFT-NEXT: mvns r0, r5455; SOFT-NEXT: cmp r1, #0456; SOFT-NEXT: bne .LBB6_6457; SOFT-NEXT: @ %bb.5:458; SOFT-NEXT: mov r0, r4459; SOFT-NEXT: .LBB6_6:460; SOFT-NEXT: beq .LBB6_8461; SOFT-NEXT: @ %bb.7:462; SOFT-NEXT: ldr r7, .LCPI6_1463; SOFT-NEXT: .LBB6_8:464; SOFT-NEXT: mov r1, r7465; SOFT-NEXT: add sp, #4466; SOFT-NEXT: pop {r4, r5, r6, r7, pc}467; SOFT-NEXT: .p2align 2468; SOFT-NEXT: @ %bb.9:469; SOFT-NEXT: .LCPI6_0:470; SOFT-NEXT: .long 1484783615 @ 0x587fffff471; SOFT-NEXT: .LCPI6_1:472; SOFT-NEXT: .long 262143 @ 0x3ffff473;474; VFP-LABEL: test_signed_i50_f32:475; VFP: @ %bb.0:476; VFP-NEXT: .save {r7, lr}477; VFP-NEXT: push {r7, lr}478; VFP-NEXT: .vsave {d8}479; VFP-NEXT: vpush {d8}480; VFP-NEXT: vmov s16, r0481; VFP-NEXT: bl __aeabi_f2ulz482; VFP-NEXT: vldr s0, .LCPI6_0483; VFP-NEXT: vcmp.f32 s16, #0484; VFP-NEXT: vmrs APSR_nzcv, fpscr485; VFP-NEXT: itt lt486; VFP-NEXT: movlt r1, #0487; VFP-NEXT: movlt r0, #0488; VFP-NEXT: vcmp.f32 s16, s0489; VFP-NEXT: vmrs APSR_nzcv, fpscr490; VFP-NEXT: ittt gt491; VFP-NEXT: movwgt r1, #65535492; VFP-NEXT: movtgt r1, #3493; VFP-NEXT: movgt.w r0, #-1494; VFP-NEXT: vpop {d8}495; VFP-NEXT: pop {r7, pc}496; VFP-NEXT: .p2align 2497; VFP-NEXT: @ %bb.1:498; VFP-NEXT: .LCPI6_0:499; VFP-NEXT: .long 0x587fffff @ float 1.12589984E+15500 %x = call i50 @llvm.fptoui.sat.i50.f32(float %f)501 ret i50 %x502}503 504define i64 @test_signed_i64_f32(float %f) nounwind {505; SOFT-LABEL: test_signed_i64_f32:506; SOFT: @ %bb.0:507; SOFT-NEXT: .save {r4, r5, r6, r7, lr}508; SOFT-NEXT: push {r4, r5, r6, r7, lr}509; SOFT-NEXT: .pad #4510; SOFT-NEXT: sub sp, #4511; SOFT-NEXT: mov r6, r0512; SOFT-NEXT: movs r4, #0513; SOFT-NEXT: mov r1, r4514; SOFT-NEXT: bl __aeabi_fcmpge515; SOFT-NEXT: mov r5, r0516; SOFT-NEXT: mov r0, r6517; SOFT-NEXT: bl __aeabi_f2ulz518; SOFT-NEXT: mov r7, r0519; SOFT-NEXT: cmp r5, #0520; SOFT-NEXT: bne .LBB7_2521; SOFT-NEXT: @ %bb.1:522; SOFT-NEXT: mov r1, r5523; SOFT-NEXT: .LBB7_2:524; SOFT-NEXT: str r1, [sp] @ 4-byte Spill525; SOFT-NEXT: bne .LBB7_4526; SOFT-NEXT: @ %bb.3:527; SOFT-NEXT: mov r7, r5528; SOFT-NEXT: .LBB7_4:529; SOFT-NEXT: ldr r1, .LCPI7_0530; SOFT-NEXT: mov r0, r6531; SOFT-NEXT: bl __aeabi_fcmpgt532; SOFT-NEXT: mvns r1, r4533; SOFT-NEXT: cmp r0, #0534; SOFT-NEXT: mov r0, r1535; SOFT-NEXT: beq .LBB7_7536; SOFT-NEXT: @ %bb.5:537; SOFT-NEXT: beq .LBB7_8538; SOFT-NEXT: .LBB7_6:539; SOFT-NEXT: add sp, #4540; SOFT-NEXT: pop {r4, r5, r6, r7, pc}541; SOFT-NEXT: .LBB7_7:542; SOFT-NEXT: mov r0, r7543; SOFT-NEXT: bne .LBB7_6544; SOFT-NEXT: .LBB7_8:545; SOFT-NEXT: ldr r1, [sp] @ 4-byte Reload546; SOFT-NEXT: add sp, #4547; SOFT-NEXT: pop {r4, r5, r6, r7, pc}548; SOFT-NEXT: .p2align 2549; SOFT-NEXT: @ %bb.9:550; SOFT-NEXT: .LCPI7_0:551; SOFT-NEXT: .long 1602224127 @ 0x5f7fffff552;553; VFP-LABEL: test_signed_i64_f32:554; VFP: @ %bb.0:555; VFP-NEXT: .save {r7, lr}556; VFP-NEXT: push {r7, lr}557; VFP-NEXT: .vsave {d8}558; VFP-NEXT: vpush {d8}559; VFP-NEXT: vmov s16, r0560; VFP-NEXT: bl __aeabi_f2ulz561; VFP-NEXT: vldr s0, .LCPI7_0562; VFP-NEXT: vcmp.f32 s16, #0563; VFP-NEXT: vmrs APSR_nzcv, fpscr564; VFP-NEXT: itt lt565; VFP-NEXT: movlt r1, #0566; VFP-NEXT: movlt r0, #0567; VFP-NEXT: vcmp.f32 s16, s0568; VFP-NEXT: vmrs APSR_nzcv, fpscr569; VFP-NEXT: itt gt570; VFP-NEXT: movgt.w r0, #-1571; VFP-NEXT: movgt.w r1, #-1572; VFP-NEXT: vpop {d8}573; VFP-NEXT: pop {r7, pc}574; VFP-NEXT: .p2align 2575; VFP-NEXT: @ %bb.1:576; VFP-NEXT: .LCPI7_0:577; VFP-NEXT: .long 0x5f7fffff @ float 1.8446743E+19578 %x = call i64 @llvm.fptoui.sat.i64.f32(float %f)579 ret i64 %x580}581 582define i100 @test_signed_i100_f32(float %f) nounwind {583; SOFT-LABEL: test_signed_i100_f32:584; SOFT: @ %bb.0:585; SOFT-NEXT: .save {r4, r5, r6, r7, lr}586; SOFT-NEXT: push {r4, r5, r6, r7, lr}587; SOFT-NEXT: .pad #12588; SOFT-NEXT: sub sp, #12589; SOFT-NEXT: mov r4, r0590; SOFT-NEXT: movs r6, #0591; SOFT-NEXT: mov r1, r6592; SOFT-NEXT: bl __aeabi_fcmpge593; SOFT-NEXT: mov r7, r0594; SOFT-NEXT: mov r0, r4595; SOFT-NEXT: bl __fixunssfti596; SOFT-NEXT: mov r5, r0597; SOFT-NEXT: cmp r7, #0598; SOFT-NEXT: beq .LBB8_11599; SOFT-NEXT: @ %bb.1:600; SOFT-NEXT: beq .LBB8_12601; SOFT-NEXT: .LBB8_2:602; SOFT-NEXT: bne .LBB8_4603; SOFT-NEXT: .LBB8_3:604; SOFT-NEXT: mov r1, r7605; SOFT-NEXT: .LBB8_4:606; SOFT-NEXT: str r1, [sp] @ 4-byte Spill607; SOFT-NEXT: str r2, [sp, #4] @ 4-byte Spill608; SOFT-NEXT: str r3, [sp, #8] @ 4-byte Spill609; SOFT-NEXT: bne .LBB8_6610; SOFT-NEXT: @ %bb.5:611; SOFT-NEXT: mov r5, r7612; SOFT-NEXT: .LBB8_6:613; SOFT-NEXT: ldr r1, .LCPI8_0614; SOFT-NEXT: mov r0, r4615; SOFT-NEXT: bl __aeabi_fcmpgt616; SOFT-NEXT: mvns r2, r6617; SOFT-NEXT: movs r3, #15618; SOFT-NEXT: cmp r0, #0619; SOFT-NEXT: mov r0, r2620; SOFT-NEXT: beq .LBB8_13621; SOFT-NEXT: @ %bb.7:622; SOFT-NEXT: mov r1, r2623; SOFT-NEXT: beq .LBB8_14624; SOFT-NEXT: .LBB8_8:625; SOFT-NEXT: beq .LBB8_15626; SOFT-NEXT: .LBB8_9:627; SOFT-NEXT: beq .LBB8_16628; SOFT-NEXT: .LBB8_10:629; SOFT-NEXT: add sp, #12630; SOFT-NEXT: pop {r4, r5, r6, r7, pc}631; SOFT-NEXT: .LBB8_11:632; SOFT-NEXT: mov r3, r7633; SOFT-NEXT: bne .LBB8_2634; SOFT-NEXT: .LBB8_12:635; SOFT-NEXT: mov r2, r7636; SOFT-NEXT: beq .LBB8_3637; SOFT-NEXT: b .LBB8_4638; SOFT-NEXT: .LBB8_13:639; SOFT-NEXT: mov r0, r5640; SOFT-NEXT: mov r1, r2641; SOFT-NEXT: bne .LBB8_8642; SOFT-NEXT: .LBB8_14:643; SOFT-NEXT: ldr r1, [sp] @ 4-byte Reload644; SOFT-NEXT: bne .LBB8_9645; SOFT-NEXT: .LBB8_15:646; SOFT-NEXT: ldr r2, [sp, #4] @ 4-byte Reload647; SOFT-NEXT: bne .LBB8_10648; SOFT-NEXT: .LBB8_16:649; SOFT-NEXT: ldr r3, [sp, #8] @ 4-byte Reload650; SOFT-NEXT: add sp, #12651; SOFT-NEXT: pop {r4, r5, r6, r7, pc}652; SOFT-NEXT: .p2align 2653; SOFT-NEXT: @ %bb.17:654; SOFT-NEXT: .LCPI8_0:655; SOFT-NEXT: .long 1904214015 @ 0x717fffff656;657; VFP-LABEL: test_signed_i100_f32:658; VFP: @ %bb.0:659; VFP-NEXT: .save {r7, lr}660; VFP-NEXT: push {r7, lr}661; VFP-NEXT: .vsave {d8}662; VFP-NEXT: vpush {d8}663; VFP-NEXT: vmov s16, r0664; VFP-NEXT: bl __fixunssfti665; VFP-NEXT: vldr s0, .LCPI8_0666; VFP-NEXT: vcmp.f32 s16, #0667; VFP-NEXT: vmrs APSR_nzcv, fpscr668; VFP-NEXT: itttt lt669; VFP-NEXT: movlt r3, #0670; VFP-NEXT: movlt r2, #0671; VFP-NEXT: movlt r1, #0672; VFP-NEXT: movlt r0, #0673; VFP-NEXT: vcmp.f32 s16, s0674; VFP-NEXT: vmrs APSR_nzcv, fpscr675; VFP-NEXT: itttt gt676; VFP-NEXT: movgt.w r0, #-1677; VFP-NEXT: movgt.w r1, #-1678; VFP-NEXT: movgt.w r2, #-1679; VFP-NEXT: movgt r3, #15680; VFP-NEXT: vpop {d8}681; VFP-NEXT: pop {r7, pc}682; VFP-NEXT: .p2align 2683; VFP-NEXT: @ %bb.1:684; VFP-NEXT: .LCPI8_0:685; VFP-NEXT: .long 0x717fffff @ float 1.26765052E+30686 %x = call i100 @llvm.fptoui.sat.i100.f32(float %f)687 ret i100 %x688}689 690define i128 @test_signed_i128_f32(float %f) nounwind {691; SOFT-LABEL: test_signed_i128_f32:692; SOFT: @ %bb.0:693; SOFT-NEXT: .save {r4, r5, r6, r7, lr}694; SOFT-NEXT: push {r4, r5, r6, r7, lr}695; SOFT-NEXT: .pad #12696; SOFT-NEXT: sub sp, #12697; SOFT-NEXT: mov r4, r0698; SOFT-NEXT: movs r6, #0699; SOFT-NEXT: mov r1, r6700; SOFT-NEXT: bl __aeabi_fcmpge701; SOFT-NEXT: mov r7, r0702; SOFT-NEXT: mov r0, r4703; SOFT-NEXT: bl __fixunssfti704; SOFT-NEXT: mov r5, r0705; SOFT-NEXT: cmp r7, #0706; SOFT-NEXT: beq .LBB9_11707; SOFT-NEXT: @ %bb.1:708; SOFT-NEXT: beq .LBB9_12709; SOFT-NEXT: .LBB9_2:710; SOFT-NEXT: bne .LBB9_4711; SOFT-NEXT: .LBB9_3:712; SOFT-NEXT: mov r1, r7713; SOFT-NEXT: .LBB9_4:714; SOFT-NEXT: str r1, [sp] @ 4-byte Spill715; SOFT-NEXT: str r2, [sp, #4] @ 4-byte Spill716; SOFT-NEXT: str r3, [sp, #8] @ 4-byte Spill717; SOFT-NEXT: bne .LBB9_6718; SOFT-NEXT: @ %bb.5:719; SOFT-NEXT: mov r5, r7720; SOFT-NEXT: .LBB9_6:721; SOFT-NEXT: ldr r1, .LCPI9_0722; SOFT-NEXT: mov r0, r4723; SOFT-NEXT: bl __aeabi_fcmpgt724; SOFT-NEXT: mvns r3, r6725; SOFT-NEXT: cmp r0, #0726; SOFT-NEXT: mov r0, r3727; SOFT-NEXT: beq .LBB9_13728; SOFT-NEXT: @ %bb.7:729; SOFT-NEXT: mov r1, r3730; SOFT-NEXT: beq .LBB9_14731; SOFT-NEXT: .LBB9_8:732; SOFT-NEXT: mov r2, r3733; SOFT-NEXT: beq .LBB9_15734; SOFT-NEXT: .LBB9_9:735; SOFT-NEXT: beq .LBB9_16736; SOFT-NEXT: .LBB9_10:737; SOFT-NEXT: add sp, #12738; SOFT-NEXT: pop {r4, r5, r6, r7, pc}739; SOFT-NEXT: .LBB9_11:740; SOFT-NEXT: mov r3, r7741; SOFT-NEXT: bne .LBB9_2742; SOFT-NEXT: .LBB9_12:743; SOFT-NEXT: mov r2, r7744; SOFT-NEXT: beq .LBB9_3745; SOFT-NEXT: b .LBB9_4746; SOFT-NEXT: .LBB9_13:747; SOFT-NEXT: mov r0, r5748; SOFT-NEXT: mov r1, r3749; SOFT-NEXT: bne .LBB9_8750; SOFT-NEXT: .LBB9_14:751; SOFT-NEXT: ldr r1, [sp] @ 4-byte Reload752; SOFT-NEXT: mov r2, r3753; SOFT-NEXT: bne .LBB9_9754; SOFT-NEXT: .LBB9_15:755; SOFT-NEXT: ldr r2, [sp, #4] @ 4-byte Reload756; SOFT-NEXT: bne .LBB9_10757; SOFT-NEXT: .LBB9_16:758; SOFT-NEXT: ldr r3, [sp, #8] @ 4-byte Reload759; SOFT-NEXT: add sp, #12760; SOFT-NEXT: pop {r4, r5, r6, r7, pc}761; SOFT-NEXT: .p2align 2762; SOFT-NEXT: @ %bb.17:763; SOFT-NEXT: .LCPI9_0:764; SOFT-NEXT: .long 2139095039 @ 0x7f7fffff765;766; VFP-LABEL: test_signed_i128_f32:767; VFP: @ %bb.0:768; VFP-NEXT: .save {r7, lr}769; VFP-NEXT: push {r7, lr}770; VFP-NEXT: .vsave {d8}771; VFP-NEXT: vpush {d8}772; VFP-NEXT: vmov s16, r0773; VFP-NEXT: bl __fixunssfti774; VFP-NEXT: vldr s0, .LCPI9_0775; VFP-NEXT: vcmp.f32 s16, #0776; VFP-NEXT: vmrs APSR_nzcv, fpscr777; VFP-NEXT: itttt lt778; VFP-NEXT: movlt r3, #0779; VFP-NEXT: movlt r2, #0780; VFP-NEXT: movlt r1, #0781; VFP-NEXT: movlt r0, #0782; VFP-NEXT: vcmp.f32 s16, s0783; VFP-NEXT: vmrs APSR_nzcv, fpscr784; VFP-NEXT: itttt gt785; VFP-NEXT: movgt.w r0, #-1786; VFP-NEXT: movgt.w r1, #-1787; VFP-NEXT: movgt.w r2, #-1788; VFP-NEXT: movgt.w r3, #-1789; VFP-NEXT: vpop {d8}790; VFP-NEXT: pop {r7, pc}791; VFP-NEXT: .p2align 2792; VFP-NEXT: @ %bb.1:793; VFP-NEXT: .LCPI9_0:794; VFP-NEXT: .long 0x7f7fffff @ float 3.40282347E+38795 %x = call i128 @llvm.fptoui.sat.i128.f32(float %f)796 ret i128 %x797}798 799;800; 64-bit float to signed integer801;802 803declare i1 @llvm.fptoui.sat.i1.f64 (double)804declare i8 @llvm.fptoui.sat.i8.f64 (double)805declare i13 @llvm.fptoui.sat.i13.f64 (double)806declare i16 @llvm.fptoui.sat.i16.f64 (double)807declare i19 @llvm.fptoui.sat.i19.f64 (double)808declare i32 @llvm.fptoui.sat.i32.f64 (double)809declare i50 @llvm.fptoui.sat.i50.f64 (double)810declare i64 @llvm.fptoui.sat.i64.f64 (double)811declare i100 @llvm.fptoui.sat.i100.f64(double)812declare i128 @llvm.fptoui.sat.i128.f64(double)813 814define i1 @test_signed_i1_f64(double %f) nounwind {815; SOFT-LABEL: test_signed_i1_f64:816; SOFT: @ %bb.0:817; SOFT-NEXT: .save {r4, r5, r6, r7, lr}818; SOFT-NEXT: push {r4, r5, r6, r7, lr}819; SOFT-NEXT: .pad #4820; SOFT-NEXT: sub sp, #4821; SOFT-NEXT: mov r4, r1822; SOFT-NEXT: mov r5, r0823; SOFT-NEXT: movs r6, #0824; SOFT-NEXT: mov r2, r6825; SOFT-NEXT: mov r3, r6826; SOFT-NEXT: bl __aeabi_dcmpge827; SOFT-NEXT: mov r7, r0828; SOFT-NEXT: mov r0, r5829; SOFT-NEXT: mov r1, r4830; SOFT-NEXT: bl __aeabi_d2uiz831; SOFT-NEXT: cmp r7, #0832; SOFT-NEXT: bne .LBB10_2833; SOFT-NEXT: @ %bb.1:834; SOFT-NEXT: mov r0, r7835; SOFT-NEXT: .LBB10_2:836; SOFT-NEXT: mov r7, r0837; SOFT-NEXT: ldr r3, .LCPI10_0838; SOFT-NEXT: mov r0, r5839; SOFT-NEXT: mov r1, r4840; SOFT-NEXT: mov r2, r6841; SOFT-NEXT: bl __aeabi_dcmpgt842; SOFT-NEXT: cmp r0, #0843; SOFT-NEXT: bne .LBB10_4844; SOFT-NEXT: @ %bb.3:845; SOFT-NEXT: mov r0, r7846; SOFT-NEXT: add sp, #4847; SOFT-NEXT: pop {r4, r5, r6, r7, pc}848; SOFT-NEXT: .LBB10_4:849; SOFT-NEXT: movs r0, #1850; SOFT-NEXT: add sp, #4851; SOFT-NEXT: pop {r4, r5, r6, r7, pc}852; SOFT-NEXT: .p2align 2853; SOFT-NEXT: @ %bb.5:854; SOFT-NEXT: .LCPI10_0:855; SOFT-NEXT: .long 1072693248 @ 0x3ff00000856;857; VFP2-LABEL: test_signed_i1_f64:858; VFP2: @ %bb.0:859; VFP2-NEXT: vmov d16, r0, r1860; VFP2-NEXT: vcmp.f64 d16, #0861; VFP2-NEXT: vcvt.u32.f64 s0, d16862; VFP2-NEXT: vmov.f64 d17, #1.000000e+00863; VFP2-NEXT: vmrs APSR_nzcv, fpscr864; VFP2-NEXT: vmov r0, s0865; VFP2-NEXT: vcmp.f64 d16, d17866; VFP2-NEXT: it lt867; VFP2-NEXT: movlt r0, #0868; VFP2-NEXT: vmrs APSR_nzcv, fpscr869; VFP2-NEXT: it gt870; VFP2-NEXT: movgt r0, #1871; VFP2-NEXT: bx lr872;873; FP16-LABEL: test_signed_i1_f64:874; FP16: @ %bb.0:875; FP16-NEXT: vmov.f64 d0, #1.000000e+00876; FP16-NEXT: vldr d1, .LCPI10_0877; FP16-NEXT: vmov d2, r0, r1878; FP16-NEXT: vmaxnm.f64 d1, d2, d1879; FP16-NEXT: vminnm.f64 d0, d1, d0880; FP16-NEXT: vcvt.u32.f64 s0, d0881; FP16-NEXT: vmov r0, s0882; FP16-NEXT: bx lr883; FP16-NEXT: .p2align 3884; FP16-NEXT: @ %bb.1:885; FP16-NEXT: .LCPI10_0:886; FP16-NEXT: .long 0 @ double 0887; FP16-NEXT: .long 0888 %x = call i1 @llvm.fptoui.sat.i1.f64(double %f)889 ret i1 %x890}891 892define i8 @test_signed_i8_f64(double %f) nounwind {893; SOFT-LABEL: test_signed_i8_f64:894; SOFT: @ %bb.0:895; SOFT-NEXT: .save {r4, r5, r6, r7, lr}896; SOFT-NEXT: push {r4, r5, r6, r7, lr}897; SOFT-NEXT: .pad #4898; SOFT-NEXT: sub sp, #4899; SOFT-NEXT: mov r4, r1900; SOFT-NEXT: mov r5, r0901; SOFT-NEXT: movs r6, #0902; SOFT-NEXT: mov r2, r6903; SOFT-NEXT: mov r3, r6904; SOFT-NEXT: bl __aeabi_dcmpge905; SOFT-NEXT: mov r7, r0906; SOFT-NEXT: mov r0, r5907; SOFT-NEXT: mov r1, r4908; SOFT-NEXT: bl __aeabi_d2uiz909; SOFT-NEXT: cmp r7, #0910; SOFT-NEXT: bne .LBB11_2911; SOFT-NEXT: @ %bb.1:912; SOFT-NEXT: mov r0, r7913; SOFT-NEXT: .LBB11_2:914; SOFT-NEXT: mov r7, r0915; SOFT-NEXT: ldr r3, .LCPI11_0916; SOFT-NEXT: mov r0, r5917; SOFT-NEXT: mov r1, r4918; SOFT-NEXT: mov r2, r6919; SOFT-NEXT: bl __aeabi_dcmpgt920; SOFT-NEXT: cmp r0, #0921; SOFT-NEXT: bne .LBB11_4922; SOFT-NEXT: @ %bb.3:923; SOFT-NEXT: mov r0, r7924; SOFT-NEXT: add sp, #4925; SOFT-NEXT: pop {r4, r5, r6, r7, pc}926; SOFT-NEXT: .LBB11_4:927; SOFT-NEXT: movs r0, #255928; SOFT-NEXT: add sp, #4929; SOFT-NEXT: pop {r4, r5, r6, r7, pc}930; SOFT-NEXT: .p2align 2931; SOFT-NEXT: @ %bb.5:932; SOFT-NEXT: .LCPI11_0:933; SOFT-NEXT: .long 1081073664 @ 0x406fe000934;935; VFP2-LABEL: test_signed_i8_f64:936; VFP2: @ %bb.0:937; VFP2-NEXT: vmov d16, r0, r1938; VFP2-NEXT: vldr d17, .LCPI11_0939; VFP2-NEXT: vcmp.f64 d16, #0940; VFP2-NEXT: vcvt.u32.f64 s0, d16941; VFP2-NEXT: vmrs APSR_nzcv, fpscr942; VFP2-NEXT: vmov r0, s0943; VFP2-NEXT: vcmp.f64 d16, d17944; VFP2-NEXT: it lt945; VFP2-NEXT: movlt r0, #0946; VFP2-NEXT: vmrs APSR_nzcv, fpscr947; VFP2-NEXT: it gt948; VFP2-NEXT: movgt r0, #255949; VFP2-NEXT: bx lr950; VFP2-NEXT: .p2align 3951; VFP2-NEXT: @ %bb.1:952; VFP2-NEXT: .LCPI11_0:953; VFP2-NEXT: .long 0 @ double 255954; VFP2-NEXT: .long 1081073664955;956; FP16-LABEL: test_signed_i8_f64:957; FP16: @ %bb.0:958; FP16-NEXT: vldr d0, .LCPI11_0959; FP16-NEXT: vmov d1, r0, r1960; FP16-NEXT: vldr d2, .LCPI11_1961; FP16-NEXT: vmaxnm.f64 d0, d1, d0962; FP16-NEXT: vminnm.f64 d0, d0, d2963; FP16-NEXT: vcvt.u32.f64 s0, d0964; FP16-NEXT: vmov r0, s0965; FP16-NEXT: bx lr966; FP16-NEXT: .p2align 3967; FP16-NEXT: @ %bb.1:968; FP16-NEXT: .LCPI11_0:969; FP16-NEXT: .long 0 @ double 0970; FP16-NEXT: .long 0971; FP16-NEXT: .LCPI11_1:972; FP16-NEXT: .long 0 @ double 255973; FP16-NEXT: .long 1081073664974 %x = call i8 @llvm.fptoui.sat.i8.f64(double %f)975 ret i8 %x976}977 978define i13 @test_signed_i13_f64(double %f) nounwind {979; SOFT-LABEL: test_signed_i13_f64:980; SOFT: @ %bb.0:981; SOFT-NEXT: .save {r4, r5, r6, r7, lr}982; SOFT-NEXT: push {r4, r5, r6, r7, lr}983; SOFT-NEXT: .pad #4984; SOFT-NEXT: sub sp, #4985; SOFT-NEXT: mov r4, r1986; SOFT-NEXT: mov r5, r0987; SOFT-NEXT: movs r6, #0988; SOFT-NEXT: mov r2, r6989; SOFT-NEXT: mov r3, r6990; SOFT-NEXT: bl __aeabi_dcmpge991; SOFT-NEXT: mov r7, r0992; SOFT-NEXT: mov r0, r5993; SOFT-NEXT: mov r1, r4994; SOFT-NEXT: bl __aeabi_d2uiz995; SOFT-NEXT: cmp r7, #0996; SOFT-NEXT: bne .LBB12_2997; SOFT-NEXT: @ %bb.1:998; SOFT-NEXT: mov r0, r7999; SOFT-NEXT: .LBB12_2:1000; SOFT-NEXT: mov r7, r01001; SOFT-NEXT: ldr r3, .LCPI12_01002; SOFT-NEXT: mov r0, r51003; SOFT-NEXT: mov r1, r41004; SOFT-NEXT: mov r2, r61005; SOFT-NEXT: bl __aeabi_dcmpgt1006; SOFT-NEXT: cmp r0, #01007; SOFT-NEXT: bne .LBB12_41008; SOFT-NEXT: @ %bb.3:1009; SOFT-NEXT: mov r0, r71010; SOFT-NEXT: add sp, #41011; SOFT-NEXT: pop {r4, r5, r6, r7, pc}1012; SOFT-NEXT: .LBB12_4:1013; SOFT-NEXT: ldr r0, .LCPI12_11014; SOFT-NEXT: add sp, #41015; SOFT-NEXT: pop {r4, r5, r6, r7, pc}1016; SOFT-NEXT: .p2align 21017; SOFT-NEXT: @ %bb.5:1018; SOFT-NEXT: .LCPI12_0:1019; SOFT-NEXT: .long 1086324480 @ 0x40bfff001020; SOFT-NEXT: .LCPI12_1:1021; SOFT-NEXT: .long 8191 @ 0x1fff1022;1023; VFP2-LABEL: test_signed_i13_f64:1024; VFP2: @ %bb.0:1025; VFP2-NEXT: vmov d16, r0, r11026; VFP2-NEXT: vldr d17, .LCPI12_01027; VFP2-NEXT: vcmp.f64 d16, #01028; VFP2-NEXT: vcvt.u32.f64 s0, d161029; VFP2-NEXT: vmrs APSR_nzcv, fpscr1030; VFP2-NEXT: vmov r0, s01031; VFP2-NEXT: vcmp.f64 d16, d171032; VFP2-NEXT: it lt1033; VFP2-NEXT: movlt r0, #01034; VFP2-NEXT: vmrs APSR_nzcv, fpscr1035; VFP2-NEXT: it gt1036; VFP2-NEXT: movwgt r0, #81911037; VFP2-NEXT: bx lr1038; VFP2-NEXT: .p2align 31039; VFP2-NEXT: @ %bb.1:1040; VFP2-NEXT: .LCPI12_0:1041; VFP2-NEXT: .long 0 @ double 81911042; VFP2-NEXT: .long 10863244801043;1044; FP16-LABEL: test_signed_i13_f64:1045; FP16: @ %bb.0:1046; FP16-NEXT: vldr d0, .LCPI12_01047; FP16-NEXT: vmov d1, r0, r11048; FP16-NEXT: vldr d2, .LCPI12_11049; FP16-NEXT: vmaxnm.f64 d0, d1, d01050; FP16-NEXT: vminnm.f64 d0, d0, d21051; FP16-NEXT: vcvt.u32.f64 s0, d01052; FP16-NEXT: vmov r0, s01053; FP16-NEXT: bx lr1054; FP16-NEXT: .p2align 31055; FP16-NEXT: @ %bb.1:1056; FP16-NEXT: .LCPI12_0:1057; FP16-NEXT: .long 0 @ double 01058; FP16-NEXT: .long 01059; FP16-NEXT: .LCPI12_1:1060; FP16-NEXT: .long 0 @ double 81911061; FP16-NEXT: .long 10863244801062 %x = call i13 @llvm.fptoui.sat.i13.f64(double %f)1063 ret i13 %x1064}1065 1066define i16 @test_signed_i16_f64(double %f) nounwind {1067; SOFT-LABEL: test_signed_i16_f64:1068; SOFT: @ %bb.0:1069; SOFT-NEXT: .save {r4, r5, r6, r7, lr}1070; SOFT-NEXT: push {r4, r5, r6, r7, lr}1071; SOFT-NEXT: .pad #41072; SOFT-NEXT: sub sp, #41073; SOFT-NEXT: mov r4, r11074; SOFT-NEXT: mov r5, r01075; SOFT-NEXT: movs r6, #01076; SOFT-NEXT: mov r2, r61077; SOFT-NEXT: mov r3, r61078; SOFT-NEXT: bl __aeabi_dcmpge1079; SOFT-NEXT: mov r7, r01080; SOFT-NEXT: mov r0, r51081; SOFT-NEXT: mov r1, r41082; SOFT-NEXT: bl __aeabi_d2uiz1083; SOFT-NEXT: cmp r7, #01084; SOFT-NEXT: bne .LBB13_21085; SOFT-NEXT: @ %bb.1:1086; SOFT-NEXT: mov r0, r71087; SOFT-NEXT: .LBB13_2:1088; SOFT-NEXT: mov r7, r01089; SOFT-NEXT: ldr r3, .LCPI13_01090; SOFT-NEXT: mov r0, r51091; SOFT-NEXT: mov r1, r41092; SOFT-NEXT: mov r2, r61093; SOFT-NEXT: bl __aeabi_dcmpgt1094; SOFT-NEXT: cmp r0, #01095; SOFT-NEXT: bne .LBB13_41096; SOFT-NEXT: @ %bb.3:1097; SOFT-NEXT: mov r0, r71098; SOFT-NEXT: add sp, #41099; SOFT-NEXT: pop {r4, r5, r6, r7, pc}1100; SOFT-NEXT: .LBB13_4:1101; SOFT-NEXT: ldr r0, .LCPI13_11102; SOFT-NEXT: add sp, #41103; SOFT-NEXT: pop {r4, r5, r6, r7, pc}1104; SOFT-NEXT: .p2align 21105; SOFT-NEXT: @ %bb.5:1106; SOFT-NEXT: .LCPI13_0:1107; SOFT-NEXT: .long 1089470432 @ 0x40efffe01108; SOFT-NEXT: .LCPI13_1:1109; SOFT-NEXT: .long 65535 @ 0xffff1110;1111; VFP2-LABEL: test_signed_i16_f64:1112; VFP2: @ %bb.0:1113; VFP2-NEXT: vmov d16, r0, r11114; VFP2-NEXT: vldr d17, .LCPI13_01115; VFP2-NEXT: vcmp.f64 d16, #01116; VFP2-NEXT: vcvt.u32.f64 s0, d161117; VFP2-NEXT: vmrs APSR_nzcv, fpscr1118; VFP2-NEXT: vmov r0, s01119; VFP2-NEXT: vcmp.f64 d16, d171120; VFP2-NEXT: it lt1121; VFP2-NEXT: movlt r0, #01122; VFP2-NEXT: vmrs APSR_nzcv, fpscr1123; VFP2-NEXT: it gt1124; VFP2-NEXT: movwgt r0, #655351125; VFP2-NEXT: bx lr1126; VFP2-NEXT: .p2align 31127; VFP2-NEXT: @ %bb.1:1128; VFP2-NEXT: .LCPI13_0:1129; VFP2-NEXT: .long 0 @ double 655351130; VFP2-NEXT: .long 10894704321131;1132; FP16-LABEL: test_signed_i16_f64:1133; FP16: @ %bb.0:1134; FP16-NEXT: vldr d0, .LCPI13_01135; FP16-NEXT: vmov d1, r0, r11136; FP16-NEXT: vldr d2, .LCPI13_11137; FP16-NEXT: vmaxnm.f64 d0, d1, d01138; FP16-NEXT: vminnm.f64 d0, d0, d21139; FP16-NEXT: vcvt.u32.f64 s0, d01140; FP16-NEXT: vmov r0, s01141; FP16-NEXT: bx lr1142; FP16-NEXT: .p2align 31143; FP16-NEXT: @ %bb.1:1144; FP16-NEXT: .LCPI13_0:1145; FP16-NEXT: .long 0 @ double 01146; FP16-NEXT: .long 01147; FP16-NEXT: .LCPI13_1:1148; FP16-NEXT: .long 0 @ double 655351149; FP16-NEXT: .long 10894704321150 %x = call i16 @llvm.fptoui.sat.i16.f64(double %f)1151 ret i16 %x1152}1153 1154define i19 @test_signed_i19_f64(double %f) nounwind {1155; SOFT-LABEL: test_signed_i19_f64:1156; SOFT: @ %bb.0:1157; SOFT-NEXT: .save {r4, r5, r6, r7, lr}1158; SOFT-NEXT: push {r4, r5, r6, r7, lr}1159; SOFT-NEXT: .pad #41160; SOFT-NEXT: sub sp, #41161; SOFT-NEXT: mov r4, r11162; SOFT-NEXT: mov r5, r01163; SOFT-NEXT: movs r6, #01164; SOFT-NEXT: mov r2, r61165; SOFT-NEXT: mov r3, r61166; SOFT-NEXT: bl __aeabi_dcmpge1167; SOFT-NEXT: mov r7, r01168; SOFT-NEXT: mov r0, r51169; SOFT-NEXT: mov r1, r41170; SOFT-NEXT: bl __aeabi_d2uiz1171; SOFT-NEXT: cmp r7, #01172; SOFT-NEXT: bne .LBB14_21173; SOFT-NEXT: @ %bb.1:1174; SOFT-NEXT: mov r0, r71175; SOFT-NEXT: .LBB14_2:1176; SOFT-NEXT: mov r7, r01177; SOFT-NEXT: ldr r3, .LCPI14_01178; SOFT-NEXT: mov r0, r51179; SOFT-NEXT: mov r1, r41180; SOFT-NEXT: mov r2, r61181; SOFT-NEXT: bl __aeabi_dcmpgt1182; SOFT-NEXT: cmp r0, #01183; SOFT-NEXT: bne .LBB14_41184; SOFT-NEXT: @ %bb.3:1185; SOFT-NEXT: mov r0, r71186; SOFT-NEXT: add sp, #41187; SOFT-NEXT: pop {r4, r5, r6, r7, pc}1188; SOFT-NEXT: .LBB14_4:1189; SOFT-NEXT: ldr r0, .LCPI14_11190; SOFT-NEXT: add sp, #41191; SOFT-NEXT: pop {r4, r5, r6, r7, pc}1192; SOFT-NEXT: .p2align 21193; SOFT-NEXT: @ %bb.5:1194; SOFT-NEXT: .LCPI14_0:1195; SOFT-NEXT: .long 1092616188 @ 0x411ffffc1196; SOFT-NEXT: .LCPI14_1:1197; SOFT-NEXT: .long 524287 @ 0x7ffff1198;1199; VFP2-LABEL: test_signed_i19_f64:1200; VFP2: @ %bb.0:1201; VFP2-NEXT: vmov d16, r0, r11202; VFP2-NEXT: vldr d17, .LCPI14_01203; VFP2-NEXT: vcmp.f64 d16, #01204; VFP2-NEXT: vcvt.u32.f64 s0, d161205; VFP2-NEXT: vmrs APSR_nzcv, fpscr1206; VFP2-NEXT: vmov r0, s01207; VFP2-NEXT: vcmp.f64 d16, d171208; VFP2-NEXT: it lt1209; VFP2-NEXT: movlt r0, #01210; VFP2-NEXT: vmrs APSR_nzcv, fpscr1211; VFP2-NEXT: itt gt1212; VFP2-NEXT: movwgt r0, #655351213; VFP2-NEXT: movtgt r0, #71214; VFP2-NEXT: bx lr1215; VFP2-NEXT: .p2align 31216; VFP2-NEXT: @ %bb.1:1217; VFP2-NEXT: .LCPI14_0:1218; VFP2-NEXT: .long 0 @ double 5242871219; VFP2-NEXT: .long 10926161881220;1221; FP16-LABEL: test_signed_i19_f64:1222; FP16: @ %bb.0:1223; FP16-NEXT: vldr d0, .LCPI14_01224; FP16-NEXT: vmov d1, r0, r11225; FP16-NEXT: vldr d2, .LCPI14_11226; FP16-NEXT: vmaxnm.f64 d0, d1, d01227; FP16-NEXT: vminnm.f64 d0, d0, d21228; FP16-NEXT: vcvt.u32.f64 s0, d01229; FP16-NEXT: vmov r0, s01230; FP16-NEXT: bx lr1231; FP16-NEXT: .p2align 31232; FP16-NEXT: @ %bb.1:1233; FP16-NEXT: .LCPI14_0:1234; FP16-NEXT: .long 0 @ double 01235; FP16-NEXT: .long 01236; FP16-NEXT: .LCPI14_1:1237; FP16-NEXT: .long 0 @ double 5242871238; FP16-NEXT: .long 10926161881239 %x = call i19 @llvm.fptoui.sat.i19.f64(double %f)1240 ret i19 %x1241}1242 1243define i32 @test_signed_i32_f64(double %f) nounwind {1244; SOFT-LABEL: test_signed_i32_f64:1245; SOFT: @ %bb.0:1246; SOFT-NEXT: .save {r4, r5, r6, r7, lr}1247; SOFT-NEXT: push {r4, r5, r6, r7, lr}1248; SOFT-NEXT: .pad #41249; SOFT-NEXT: sub sp, #41250; SOFT-NEXT: mov r5, r11251; SOFT-NEXT: mov r6, r01252; SOFT-NEXT: movs r4, #01253; SOFT-NEXT: mov r2, r41254; SOFT-NEXT: mov r3, r41255; SOFT-NEXT: bl __aeabi_dcmpge1256; SOFT-NEXT: mov r7, r01257; SOFT-NEXT: mov r0, r61258; SOFT-NEXT: mov r1, r51259; SOFT-NEXT: bl __aeabi_d2uiz1260; SOFT-NEXT: cmp r7, #01261; SOFT-NEXT: bne .LBB15_21262; SOFT-NEXT: @ %bb.1:1263; SOFT-NEXT: mov r0, r71264; SOFT-NEXT: .LBB15_2:1265; SOFT-NEXT: mov r7, r01266; SOFT-NEXT: ldr r2, .LCPI15_01267; SOFT-NEXT: ldr r3, .LCPI15_11268; SOFT-NEXT: mov r0, r61269; SOFT-NEXT: mov r1, r51270; SOFT-NEXT: bl __aeabi_dcmpgt1271; SOFT-NEXT: cmp r0, #01272; SOFT-NEXT: bne .LBB15_41273; SOFT-NEXT: @ %bb.3:1274; SOFT-NEXT: mov r0, r71275; SOFT-NEXT: add sp, #41276; SOFT-NEXT: pop {r4, r5, r6, r7, pc}1277; SOFT-NEXT: .LBB15_4:1278; SOFT-NEXT: mvns r0, r41279; SOFT-NEXT: add sp, #41280; SOFT-NEXT: pop {r4, r5, r6, r7, pc}1281; SOFT-NEXT: .p2align 21282; SOFT-NEXT: @ %bb.5:1283; SOFT-NEXT: .LCPI15_0:1284; SOFT-NEXT: .long 4292870144 @ 0xffe000001285; SOFT-NEXT: .LCPI15_1:1286; SOFT-NEXT: .long 1106247679 @ 0x41efffff1287;1288; VFP2-LABEL: test_signed_i32_f64:1289; VFP2: @ %bb.0:1290; VFP2-NEXT: vmov d16, r0, r11291; VFP2-NEXT: vcvt.u32.f64 s0, d161292; VFP2-NEXT: vmov r0, s01293; VFP2-NEXT: bx lr1294;1295; FP16-LABEL: test_signed_i32_f64:1296; FP16: @ %bb.0:1297; FP16-NEXT: vmov d0, r0, r11298; FP16-NEXT: vcvt.u32.f64 s0, d01299; FP16-NEXT: vmov r0, s01300; FP16-NEXT: bx lr1301 %x = call i32 @llvm.fptoui.sat.i32.f64(double %f)1302 ret i32 %x1303}1304 1305define i50 @test_signed_i50_f64(double %f) nounwind {1306; SOFT-LABEL: test_signed_i50_f64:1307; SOFT: @ %bb.0:1308; SOFT-NEXT: .save {r4, r5, r6, r7, lr}1309; SOFT-NEXT: push {r4, r5, r6, r7, lr}1310; SOFT-NEXT: .pad #41311; SOFT-NEXT: sub sp, #41312; SOFT-NEXT: mov r6, r11313; SOFT-NEXT: mov r7, r01314; SOFT-NEXT: movs r5, #01315; SOFT-NEXT: mov r2, r51316; SOFT-NEXT: mov r3, r51317; SOFT-NEXT: bl __aeabi_dcmpge1318; SOFT-NEXT: mov r4, r01319; SOFT-NEXT: mov r0, r71320; SOFT-NEXT: mov r1, r61321; SOFT-NEXT: bl __aeabi_d2ulz1322; SOFT-NEXT: cmp r4, #01323; SOFT-NEXT: bne .LBB16_21324; SOFT-NEXT: @ %bb.1:1325; SOFT-NEXT: mov r1, r41326; SOFT-NEXT: .LBB16_2:1327; SOFT-NEXT: str r1, [sp] @ 4-byte Spill1328; SOFT-NEXT: bne .LBB16_41329; SOFT-NEXT: @ %bb.3:1330; SOFT-NEXT: mov r0, r41331; SOFT-NEXT: .LBB16_4:1332; SOFT-NEXT: mov r4, r01333; SOFT-NEXT: movs r0, #71334; SOFT-NEXT: mvns r2, r01335; SOFT-NEXT: ldr r3, .LCPI16_01336; SOFT-NEXT: mov r0, r71337; SOFT-NEXT: mov r1, r61338; SOFT-NEXT: bl __aeabi_dcmpgt1339; SOFT-NEXT: mov r1, r01340; SOFT-NEXT: mvns r0, r51341; SOFT-NEXT: cmp r1, #01342; SOFT-NEXT: beq .LBB16_71343; SOFT-NEXT: @ %bb.5:1344; SOFT-NEXT: ldr r1, [sp] @ 4-byte Reload1345; SOFT-NEXT: bne .LBB16_81346; SOFT-NEXT: .LBB16_6:1347; SOFT-NEXT: add sp, #41348; SOFT-NEXT: pop {r4, r5, r6, r7, pc}1349; SOFT-NEXT: .LBB16_7:1350; SOFT-NEXT: mov r0, r41351; SOFT-NEXT: ldr r1, [sp] @ 4-byte Reload1352; SOFT-NEXT: beq .LBB16_61353; SOFT-NEXT: .LBB16_8:1354; SOFT-NEXT: ldr r1, .LCPI16_11355; SOFT-NEXT: add sp, #41356; SOFT-NEXT: pop {r4, r5, r6, r7, pc}1357; SOFT-NEXT: .p2align 21358; SOFT-NEXT: @ %bb.9:1359; SOFT-NEXT: .LCPI16_0:1360; SOFT-NEXT: .long 1125122047 @ 0x430fffff1361; SOFT-NEXT: .LCPI16_1:1362; SOFT-NEXT: .long 262143 @ 0x3ffff1363;1364; VFP2-LABEL: test_signed_i50_f64:1365; VFP2: @ %bb.0:1366; VFP2-NEXT: .save {r7, lr}1367; VFP2-NEXT: push {r7, lr}1368; VFP2-NEXT: .vsave {d8}1369; VFP2-NEXT: vpush {d8}1370; VFP2-NEXT: vmov d8, r0, r11371; VFP2-NEXT: bl __aeabi_d2ulz1372; VFP2-NEXT: vcmp.f64 d8, #01373; VFP2-NEXT: vldr d16, .LCPI16_01374; VFP2-NEXT: vmrs APSR_nzcv, fpscr1375; VFP2-NEXT: itt lt1376; VFP2-NEXT: movlt r1, #01377; VFP2-NEXT: movlt r0, #01378; VFP2-NEXT: vcmp.f64 d8, d161379; VFP2-NEXT: vmrs APSR_nzcv, fpscr1380; VFP2-NEXT: ittt gt1381; VFP2-NEXT: movwgt r1, #655351382; VFP2-NEXT: movtgt r1, #31383; VFP2-NEXT: movgt.w r0, #-11384; VFP2-NEXT: vpop {d8}1385; VFP2-NEXT: pop {r7, pc}1386; VFP2-NEXT: .p2align 31387; VFP2-NEXT: @ %bb.1:1388; VFP2-NEXT: .LCPI16_0:1389; VFP2-NEXT: .long 4294967288 @ double 11258999068426231390; VFP2-NEXT: .long 11251220471391;1392; FP16-LABEL: test_signed_i50_f64:1393; FP16: @ %bb.0:1394; FP16-NEXT: .save {r7, lr}1395; FP16-NEXT: push {r7, lr}1396; FP16-NEXT: vldr d0, .LCPI16_01397; FP16-NEXT: vmov d1, r0, r11398; FP16-NEXT: vldr d2, .LCPI16_11399; FP16-NEXT: vmaxnm.f64 d0, d1, d01400; FP16-NEXT: vminnm.f64 d0, d0, d21401; FP16-NEXT: vmov r0, r1, d01402; FP16-NEXT: bl __aeabi_d2ulz1403; FP16-NEXT: pop {r7, pc}1404; FP16-NEXT: .p2align 31405; FP16-NEXT: @ %bb.1:1406; FP16-NEXT: .LCPI16_0:1407; FP16-NEXT: .long 0 @ double 01408; FP16-NEXT: .long 01409; FP16-NEXT: .LCPI16_1:1410; FP16-NEXT: .long 4294967288 @ double 11258999068426231411; FP16-NEXT: .long 11251220471412 %x = call i50 @llvm.fptoui.sat.i50.f64(double %f)1413 ret i50 %x1414}1415 1416define i64 @test_signed_i64_f64(double %f) nounwind {1417; SOFT-LABEL: test_signed_i64_f64:1418; SOFT: @ %bb.0:1419; SOFT-NEXT: .save {r4, r5, r6, r7, lr}1420; SOFT-NEXT: push {r4, r5, r6, r7, lr}1421; SOFT-NEXT: .pad #41422; SOFT-NEXT: sub sp, #41423; SOFT-NEXT: mov r4, r11424; SOFT-NEXT: mov r5, r01425; SOFT-NEXT: movs r7, #01426; SOFT-NEXT: mov r2, r71427; SOFT-NEXT: mov r3, r71428; SOFT-NEXT: bl __aeabi_dcmpge1429; SOFT-NEXT: mov r6, r01430; SOFT-NEXT: mov r0, r51431; SOFT-NEXT: mov r1, r41432; SOFT-NEXT: bl __aeabi_d2ulz1433; SOFT-NEXT: cmp r6, #01434; SOFT-NEXT: bne .LBB17_21435; SOFT-NEXT: @ %bb.1:1436; SOFT-NEXT: mov r1, r61437; SOFT-NEXT: .LBB17_2:1438; SOFT-NEXT: str r1, [sp] @ 4-byte Spill1439; SOFT-NEXT: bne .LBB17_41440; SOFT-NEXT: @ %bb.3:1441; SOFT-NEXT: mov r0, r61442; SOFT-NEXT: .LBB17_4:1443; SOFT-NEXT: mov r6, r01444; SOFT-NEXT: mvns r7, r71445; SOFT-NEXT: ldr r3, .LCPI17_01446; SOFT-NEXT: mov r0, r51447; SOFT-NEXT: mov r1, r41448; SOFT-NEXT: mov r2, r71449; SOFT-NEXT: bl __aeabi_dcmpgt1450; SOFT-NEXT: cmp r0, #01451; SOFT-NEXT: mov r0, r71452; SOFT-NEXT: bne .LBB17_61453; SOFT-NEXT: @ %bb.5:1454; SOFT-NEXT: mov r0, r61455; SOFT-NEXT: .LBB17_6:1456; SOFT-NEXT: bne .LBB17_81457; SOFT-NEXT: @ %bb.7:1458; SOFT-NEXT: ldr r7, [sp] @ 4-byte Reload1459; SOFT-NEXT: .LBB17_8:1460; SOFT-NEXT: mov r1, r71461; SOFT-NEXT: add sp, #41462; SOFT-NEXT: pop {r4, r5, r6, r7, pc}1463; SOFT-NEXT: .p2align 21464; SOFT-NEXT: @ %bb.9:1465; SOFT-NEXT: .LCPI17_0:1466; SOFT-NEXT: .long 1139802111 @ 0x43efffff1467;1468; VFP2-LABEL: test_signed_i64_f64:1469; VFP2: @ %bb.0:1470; VFP2-NEXT: .save {r7, lr}1471; VFP2-NEXT: push {r7, lr}1472; VFP2-NEXT: .vsave {d8}1473; VFP2-NEXT: vpush {d8}1474; VFP2-NEXT: vmov d8, r0, r11475; VFP2-NEXT: bl __aeabi_d2ulz1476; VFP2-NEXT: vcmp.f64 d8, #01477; VFP2-NEXT: vldr d16, .LCPI17_01478; VFP2-NEXT: vmrs APSR_nzcv, fpscr1479; VFP2-NEXT: itt lt1480; VFP2-NEXT: movlt r1, #01481; VFP2-NEXT: movlt r0, #01482; VFP2-NEXT: vcmp.f64 d8, d161483; VFP2-NEXT: vmrs APSR_nzcv, fpscr1484; VFP2-NEXT: itt gt1485; VFP2-NEXT: movgt.w r0, #-11486; VFP2-NEXT: movgt.w r1, #-11487; VFP2-NEXT: vpop {d8}1488; VFP2-NEXT: pop {r7, pc}1489; VFP2-NEXT: .p2align 31490; VFP2-NEXT: @ %bb.1:1491; VFP2-NEXT: .LCPI17_0:1492; VFP2-NEXT: .long 4294967295 @ double 1.844674407370955E+191493; VFP2-NEXT: .long 11398021111494;1495; FP16-LABEL: test_signed_i64_f64:1496; FP16: @ %bb.0:1497; FP16-NEXT: .save {r7, lr}1498; FP16-NEXT: push {r7, lr}1499; FP16-NEXT: .vsave {d8}1500; FP16-NEXT: vpush {d8}1501; FP16-NEXT: vmov d8, r0, r11502; FP16-NEXT: bl __aeabi_d2ulz1503; FP16-NEXT: vcmp.f64 d8, #01504; FP16-NEXT: vldr d0, .LCPI17_01505; FP16-NEXT: vmrs APSR_nzcv, fpscr1506; FP16-NEXT: itt lt1507; FP16-NEXT: movlt r1, #01508; FP16-NEXT: movlt r0, #01509; FP16-NEXT: vcmp.f64 d8, d01510; FP16-NEXT: vmrs APSR_nzcv, fpscr1511; FP16-NEXT: itt gt1512; FP16-NEXT: movgt.w r0, #-11513; FP16-NEXT: movgt.w r1, #-11514; FP16-NEXT: vpop {d8}1515; FP16-NEXT: pop {r7, pc}1516; FP16-NEXT: .p2align 31517; FP16-NEXT: @ %bb.1:1518; FP16-NEXT: .LCPI17_0:1519; FP16-NEXT: .long 4294967295 @ double 1.844674407370955E+191520; FP16-NEXT: .long 11398021111521 %x = call i64 @llvm.fptoui.sat.i64.f64(double %f)1522 ret i64 %x1523}1524 1525define i100 @test_signed_i100_f64(double %f) nounwind {1526; SOFT-LABEL: test_signed_i100_f64:1527; SOFT: @ %bb.0:1528; SOFT-NEXT: .save {r4, r5, r6, r7, lr}1529; SOFT-NEXT: push {r4, r5, r6, r7, lr}1530; SOFT-NEXT: .pad #121531; SOFT-NEXT: sub sp, #121532; SOFT-NEXT: mov r6, r11533; SOFT-NEXT: mov r4, r01534; SOFT-NEXT: movs r5, #01535; SOFT-NEXT: mov r2, r51536; SOFT-NEXT: mov r3, r51537; SOFT-NEXT: bl __aeabi_dcmpge1538; SOFT-NEXT: mov r7, r01539; SOFT-NEXT: mov r0, r41540; SOFT-NEXT: mov r1, r61541; SOFT-NEXT: bl __fixunsdfti1542; SOFT-NEXT: cmp r7, #01543; SOFT-NEXT: beq .LBB18_121544; SOFT-NEXT: @ %bb.1:1545; SOFT-NEXT: beq .LBB18_131546; SOFT-NEXT: .LBB18_2:1547; SOFT-NEXT: bne .LBB18_41548; SOFT-NEXT: .LBB18_3:1549; SOFT-NEXT: mov r1, r71550; SOFT-NEXT: .LBB18_4:1551; SOFT-NEXT: str r1, [sp] @ 4-byte Spill1552; SOFT-NEXT: str r2, [sp, #4] @ 4-byte Spill1553; SOFT-NEXT: str r3, [sp, #8] @ 4-byte Spill1554; SOFT-NEXT: bne .LBB18_61555; SOFT-NEXT: @ %bb.5:1556; SOFT-NEXT: mov r0, r71557; SOFT-NEXT: .LBB18_6:1558; SOFT-NEXT: mov r7, r01559; SOFT-NEXT: mvns r5, r51560; SOFT-NEXT: ldr r3, .LCPI18_01561; SOFT-NEXT: mov r0, r41562; SOFT-NEXT: mov r1, r61563; SOFT-NEXT: mov r2, r51564; SOFT-NEXT: bl __aeabi_dcmpgt1565; SOFT-NEXT: movs r3, #151566; SOFT-NEXT: cmp r0, #01567; SOFT-NEXT: mov r0, r51568; SOFT-NEXT: beq .LBB18_141569; SOFT-NEXT: @ %bb.7:1570; SOFT-NEXT: mov r1, r51571; SOFT-NEXT: beq .LBB18_151572; SOFT-NEXT: .LBB18_8:1573; SOFT-NEXT: beq .LBB18_161574; SOFT-NEXT: .LBB18_9:1575; SOFT-NEXT: bne .LBB18_111576; SOFT-NEXT: .LBB18_10:1577; SOFT-NEXT: ldr r3, [sp, #8] @ 4-byte Reload1578; SOFT-NEXT: .LBB18_11:1579; SOFT-NEXT: mov r2, r51580; SOFT-NEXT: add sp, #121581; SOFT-NEXT: pop {r4, r5, r6, r7, pc}1582; SOFT-NEXT: .LBB18_12:1583; SOFT-NEXT: mov r3, r71584; SOFT-NEXT: bne .LBB18_21585; SOFT-NEXT: .LBB18_13:1586; SOFT-NEXT: mov r2, r71587; SOFT-NEXT: beq .LBB18_31588; SOFT-NEXT: b .LBB18_41589; SOFT-NEXT: .LBB18_14:1590; SOFT-NEXT: mov r0, r71591; SOFT-NEXT: mov r1, r51592; SOFT-NEXT: bne .LBB18_81593; SOFT-NEXT: .LBB18_15:1594; SOFT-NEXT: ldr r1, [sp] @ 4-byte Reload1595; SOFT-NEXT: bne .LBB18_91596; SOFT-NEXT: .LBB18_16:1597; SOFT-NEXT: ldr r5, [sp, #4] @ 4-byte Reload1598; SOFT-NEXT: beq .LBB18_101599; SOFT-NEXT: b .LBB18_111600; SOFT-NEXT: .p2align 21601; SOFT-NEXT: @ %bb.17:1602; SOFT-NEXT: .LCPI18_0:1603; SOFT-NEXT: .long 1177550847 @ 0x462fffff1604;1605; VFP2-LABEL: test_signed_i100_f64:1606; VFP2: @ %bb.0:1607; VFP2-NEXT: .save {r7, lr}1608; VFP2-NEXT: push {r7, lr}1609; VFP2-NEXT: .vsave {d8}1610; VFP2-NEXT: vpush {d8}1611; VFP2-NEXT: vmov d8, r0, r11612; VFP2-NEXT: bl __fixunsdfti1613; VFP2-NEXT: vcmp.f64 d8, #01614; VFP2-NEXT: vldr d16, .LCPI18_01615; VFP2-NEXT: vmrs APSR_nzcv, fpscr1616; VFP2-NEXT: itttt lt1617; VFP2-NEXT: movlt r3, #01618; VFP2-NEXT: movlt r2, #01619; VFP2-NEXT: movlt r1, #01620; VFP2-NEXT: movlt r0, #01621; VFP2-NEXT: vcmp.f64 d8, d161622; VFP2-NEXT: vmrs APSR_nzcv, fpscr1623; VFP2-NEXT: itttt gt1624; VFP2-NEXT: movgt.w r0, #-11625; VFP2-NEXT: movgt.w r1, #-11626; VFP2-NEXT: movgt.w r2, #-11627; VFP2-NEXT: movgt r3, #151628; VFP2-NEXT: vpop {d8}1629; VFP2-NEXT: pop {r7, pc}1630; VFP2-NEXT: .p2align 31631; VFP2-NEXT: @ %bb.1:1632; VFP2-NEXT: .LCPI18_0:1633; VFP2-NEXT: .long 4294967295 @ double 1.2676506002282293E+301634; VFP2-NEXT: .long 11775508471635;1636; FP16-LABEL: test_signed_i100_f64:1637; FP16: @ %bb.0:1638; FP16-NEXT: .save {r7, lr}1639; FP16-NEXT: push {r7, lr}1640; FP16-NEXT: .vsave {d8}1641; FP16-NEXT: vpush {d8}1642; FP16-NEXT: vmov d8, r0, r11643; FP16-NEXT: bl __fixunsdfti1644; FP16-NEXT: vcmp.f64 d8, #01645; FP16-NEXT: vldr d0, .LCPI18_01646; FP16-NEXT: vmrs APSR_nzcv, fpscr1647; FP16-NEXT: itttt lt1648; FP16-NEXT: movlt r3, #01649; FP16-NEXT: movlt r2, #01650; FP16-NEXT: movlt r1, #01651; FP16-NEXT: movlt r0, #01652; FP16-NEXT: vcmp.f64 d8, d01653; FP16-NEXT: vmrs APSR_nzcv, fpscr1654; FP16-NEXT: itttt gt1655; FP16-NEXT: movgt.w r0, #-11656; FP16-NEXT: movgt.w r1, #-11657; FP16-NEXT: movgt.w r2, #-11658; FP16-NEXT: movgt r3, #151659; FP16-NEXT: vpop {d8}1660; FP16-NEXT: pop {r7, pc}1661; FP16-NEXT: .p2align 31662; FP16-NEXT: @ %bb.1:1663; FP16-NEXT: .LCPI18_0:1664; FP16-NEXT: .long 4294967295 @ double 1.2676506002282293E+301665; FP16-NEXT: .long 11775508471666 %x = call i100 @llvm.fptoui.sat.i100.f64(double %f)1667 ret i100 %x1668}1669 1670define i128 @test_signed_i128_f64(double %f) nounwind {1671; SOFT-LABEL: test_signed_i128_f64:1672; SOFT: @ %bb.0:1673; SOFT-NEXT: .save {r4, r5, r6, r7, lr}1674; SOFT-NEXT: push {r4, r5, r6, r7, lr}1675; SOFT-NEXT: .pad #121676; SOFT-NEXT: sub sp, #121677; SOFT-NEXT: mov r6, r11678; SOFT-NEXT: mov r7, r01679; SOFT-NEXT: movs r5, #01680; SOFT-NEXT: mov r2, r51681; SOFT-NEXT: mov r3, r51682; SOFT-NEXT: bl __aeabi_dcmpge1683; SOFT-NEXT: mov r4, r01684; SOFT-NEXT: mov r0, r71685; SOFT-NEXT: mov r1, r61686; SOFT-NEXT: bl __fixunsdfti1687; SOFT-NEXT: cmp r4, #01688; SOFT-NEXT: beq .LBB19_121689; SOFT-NEXT: @ %bb.1:1690; SOFT-NEXT: beq .LBB19_131691; SOFT-NEXT: .LBB19_2:1692; SOFT-NEXT: bne .LBB19_41693; SOFT-NEXT: .LBB19_3:1694; SOFT-NEXT: mov r1, r41695; SOFT-NEXT: .LBB19_4:1696; SOFT-NEXT: str r1, [sp] @ 4-byte Spill1697; SOFT-NEXT: str r2, [sp, #4] @ 4-byte Spill1698; SOFT-NEXT: str r3, [sp, #8] @ 4-byte Spill1699; SOFT-NEXT: bne .LBB19_61700; SOFT-NEXT: @ %bb.5:1701; SOFT-NEXT: mov r0, r41702; SOFT-NEXT: .LBB19_6:1703; SOFT-NEXT: mov r4, r01704; SOFT-NEXT: mvns r5, r51705; SOFT-NEXT: ldr r3, .LCPI19_01706; SOFT-NEXT: mov r0, r71707; SOFT-NEXT: mov r1, r61708; SOFT-NEXT: mov r2, r51709; SOFT-NEXT: bl __aeabi_dcmpgt1710; SOFT-NEXT: cmp r0, #01711; SOFT-NEXT: mov r0, r51712; SOFT-NEXT: beq .LBB19_141713; SOFT-NEXT: @ %bb.7:1714; SOFT-NEXT: mov r1, r51715; SOFT-NEXT: beq .LBB19_151716; SOFT-NEXT: .LBB19_8:1717; SOFT-NEXT: mov r2, r51718; SOFT-NEXT: beq .LBB19_161719; SOFT-NEXT: .LBB19_9:1720; SOFT-NEXT: bne .LBB19_111721; SOFT-NEXT: .LBB19_10:1722; SOFT-NEXT: ldr r5, [sp, #8] @ 4-byte Reload1723; SOFT-NEXT: .LBB19_11:1724; SOFT-NEXT: mov r3, r51725; SOFT-NEXT: add sp, #121726; SOFT-NEXT: pop {r4, r5, r6, r7, pc}1727; SOFT-NEXT: .LBB19_12:1728; SOFT-NEXT: mov r3, r41729; SOFT-NEXT: bne .LBB19_21730; SOFT-NEXT: .LBB19_13:1731; SOFT-NEXT: mov r2, r41732; SOFT-NEXT: beq .LBB19_31733; SOFT-NEXT: b .LBB19_41734; SOFT-NEXT: .LBB19_14:1735; SOFT-NEXT: mov r0, r41736; SOFT-NEXT: mov r1, r51737; SOFT-NEXT: bne .LBB19_81738; SOFT-NEXT: .LBB19_15:1739; SOFT-NEXT: ldr r1, [sp] @ 4-byte Reload1740; SOFT-NEXT: mov r2, r51741; SOFT-NEXT: bne .LBB19_91742; SOFT-NEXT: .LBB19_16:1743; SOFT-NEXT: ldr r2, [sp, #4] @ 4-byte Reload1744; SOFT-NEXT: beq .LBB19_101745; SOFT-NEXT: b .LBB19_111746; SOFT-NEXT: .p2align 21747; SOFT-NEXT: @ %bb.17:1748; SOFT-NEXT: .LCPI19_0:1749; SOFT-NEXT: .long 1206910975 @ 0x47efffff1750;1751; VFP2-LABEL: test_signed_i128_f64:1752; VFP2: @ %bb.0:1753; VFP2-NEXT: .save {r7, lr}1754; VFP2-NEXT: push {r7, lr}1755; VFP2-NEXT: .vsave {d8}1756; VFP2-NEXT: vpush {d8}1757; VFP2-NEXT: vmov d8, r0, r11758; VFP2-NEXT: bl __fixunsdfti1759; VFP2-NEXT: vcmp.f64 d8, #01760; VFP2-NEXT: vldr d16, .LCPI19_01761; VFP2-NEXT: vmrs APSR_nzcv, fpscr1762; VFP2-NEXT: itttt lt1763; VFP2-NEXT: movlt r3, #01764; VFP2-NEXT: movlt r2, #01765; VFP2-NEXT: movlt r1, #01766; VFP2-NEXT: movlt r0, #01767; VFP2-NEXT: vcmp.f64 d8, d161768; VFP2-NEXT: vmrs APSR_nzcv, fpscr1769; VFP2-NEXT: itttt gt1770; VFP2-NEXT: movgt.w r0, #-11771; VFP2-NEXT: movgt.w r1, #-11772; VFP2-NEXT: movgt.w r2, #-11773; VFP2-NEXT: movgt.w r3, #-11774; VFP2-NEXT: vpop {d8}1775; VFP2-NEXT: pop {r7, pc}1776; VFP2-NEXT: .p2align 31777; VFP2-NEXT: @ %bb.1:1778; VFP2-NEXT: .LCPI19_0:1779; VFP2-NEXT: .long 4294967295 @ double 3.4028236692093843E+381780; VFP2-NEXT: .long 12069109751781;1782; FP16-LABEL: test_signed_i128_f64:1783; FP16: @ %bb.0:1784; FP16-NEXT: .save {r7, lr}1785; FP16-NEXT: push {r7, lr}1786; FP16-NEXT: .vsave {d8}1787; FP16-NEXT: vpush {d8}1788; FP16-NEXT: vmov d8, r0, r11789; FP16-NEXT: bl __fixunsdfti1790; FP16-NEXT: vcmp.f64 d8, #01791; FP16-NEXT: vldr d0, .LCPI19_01792; FP16-NEXT: vmrs APSR_nzcv, fpscr1793; FP16-NEXT: itttt lt1794; FP16-NEXT: movlt r3, #01795; FP16-NEXT: movlt r2, #01796; FP16-NEXT: movlt r1, #01797; FP16-NEXT: movlt r0, #01798; FP16-NEXT: vcmp.f64 d8, d01799; FP16-NEXT: vmrs APSR_nzcv, fpscr1800; FP16-NEXT: itttt gt1801; FP16-NEXT: movgt.w r0, #-11802; FP16-NEXT: movgt.w r1, #-11803; FP16-NEXT: movgt.w r2, #-11804; FP16-NEXT: movgt.w r3, #-11805; FP16-NEXT: vpop {d8}1806; FP16-NEXT: pop {r7, pc}1807; FP16-NEXT: .p2align 31808; FP16-NEXT: @ %bb.1:1809; FP16-NEXT: .LCPI19_0:1810; FP16-NEXT: .long 4294967295 @ double 3.4028236692093843E+381811; FP16-NEXT: .long 12069109751812 %x = call i128 @llvm.fptoui.sat.i128.f64(double %f)1813 ret i128 %x1814}1815 1816;1817; 16-bit float to signed integer1818;1819 1820declare i1 @llvm.fptoui.sat.i1.f16 (half)1821declare i8 @llvm.fptoui.sat.i8.f16 (half)1822declare i13 @llvm.fptoui.sat.i13.f16 (half)1823declare i16 @llvm.fptoui.sat.i16.f16 (half)1824declare i19 @llvm.fptoui.sat.i19.f16 (half)1825declare i32 @llvm.fptoui.sat.i32.f16 (half)1826declare i50 @llvm.fptoui.sat.i50.f16 (half)1827declare i64 @llvm.fptoui.sat.i64.f16 (half)1828declare i100 @llvm.fptoui.sat.i100.f16(half)1829declare i128 @llvm.fptoui.sat.i128.f16(half)1830 1831define i1 @test_signed_i1_f16(half %f) nounwind {1832; SOFT-LABEL: test_signed_i1_f16:1833; SOFT: @ %bb.0:1834; SOFT-NEXT: .save {r4, r5, r6, lr}1835; SOFT-NEXT: push {r4, r5, r6, lr}1836; SOFT-NEXT: uxth r0, r01837; SOFT-NEXT: bl __aeabi_h2f1838; SOFT-NEXT: mov r5, r01839; SOFT-NEXT: movs r1, #01840; SOFT-NEXT: bl __aeabi_fcmpge1841; SOFT-NEXT: mov r6, r01842; SOFT-NEXT: mov r0, r51843; SOFT-NEXT: bl __aeabi_f2uiz1844; SOFT-NEXT: mov r4, r01845; SOFT-NEXT: cmp r6, #01846; SOFT-NEXT: bne .LBB20_21847; SOFT-NEXT: @ %bb.1:1848; SOFT-NEXT: mov r4, r61849; SOFT-NEXT: .LBB20_2:1850; SOFT-NEXT: movs r0, #1271851; SOFT-NEXT: lsls r1, r0, #231852; SOFT-NEXT: mov r0, r51853; SOFT-NEXT: bl __aeabi_fcmpgt1854; SOFT-NEXT: cmp r0, #01855; SOFT-NEXT: beq .LBB20_41856; SOFT-NEXT: @ %bb.3:1857; SOFT-NEXT: movs r4, #11858; SOFT-NEXT: .LBB20_4:1859; SOFT-NEXT: mov r0, r41860; SOFT-NEXT: pop {r4, r5, r6, pc}1861;1862; VFP2-LABEL: test_signed_i1_f16:1863; VFP2: @ %bb.0:1864; VFP2-NEXT: .save {r7, lr}1865; VFP2-NEXT: push {r7, lr}1866; VFP2-NEXT: bl __aeabi_h2f1867; VFP2-NEXT: vmov s0, r01868; VFP2-NEXT: vmov.f32 s4, #1.000000e+001869; VFP2-NEXT: vcvt.u32.f32 s2, s01870; VFP2-NEXT: vcmp.f32 s0, #01871; VFP2-NEXT: vmrs APSR_nzcv, fpscr1872; VFP2-NEXT: vcmp.f32 s0, s41873; VFP2-NEXT: vmov r0, s21874; VFP2-NEXT: it lt1875; VFP2-NEXT: movlt r0, #01876; VFP2-NEXT: vmrs APSR_nzcv, fpscr1877; VFP2-NEXT: it gt1878; VFP2-NEXT: movgt r0, #11879; VFP2-NEXT: pop {r7, pc}1880;1881; FP16-LABEL: test_signed_i1_f16:1882; FP16: @ %bb.0:1883; FP16-NEXT: vmov.f16 s0, r01884; FP16-NEXT: vldr s4, .LCPI20_01885; FP16-NEXT: vcvtb.f32.f16 s0, s01886; FP16-NEXT: vmov.f32 s2, #1.000000e+001887; FP16-NEXT: vmaxnm.f32 s0, s0, s41888; FP16-NEXT: vminnm.f32 s0, s0, s21889; FP16-NEXT: vcvt.u32.f32 s0, s01890; FP16-NEXT: vmov r0, s01891; FP16-NEXT: bx lr1892; FP16-NEXT: .p2align 21893; FP16-NEXT: @ %bb.1:1894; FP16-NEXT: .LCPI20_0:1895; FP16-NEXT: .long 0x00000000 @ float 01896 %x = call i1 @llvm.fptoui.sat.i1.f16(half %f)1897 ret i1 %x1898}1899 1900define i8 @test_signed_i8_f16(half %f) nounwind {1901; SOFT-LABEL: test_signed_i8_f16:1902; SOFT: @ %bb.0:1903; SOFT-NEXT: .save {r4, r5, r6, lr}1904; SOFT-NEXT: push {r4, r5, r6, lr}1905; SOFT-NEXT: uxth r0, r01906; SOFT-NEXT: bl __aeabi_h2f1907; SOFT-NEXT: mov r5, r01908; SOFT-NEXT: movs r1, #01909; SOFT-NEXT: bl __aeabi_fcmpge1910; SOFT-NEXT: mov r6, r01911; SOFT-NEXT: mov r0, r51912; SOFT-NEXT: bl __aeabi_f2uiz1913; SOFT-NEXT: mov r4, r01914; SOFT-NEXT: cmp r6, #01915; SOFT-NEXT: bne .LBB21_21916; SOFT-NEXT: @ %bb.1:1917; SOFT-NEXT: mov r4, r61918; SOFT-NEXT: .LBB21_2:1919; SOFT-NEXT: ldr r1, .LCPI21_01920; SOFT-NEXT: mov r0, r51921; SOFT-NEXT: bl __aeabi_fcmpgt1922; SOFT-NEXT: cmp r0, #01923; SOFT-NEXT: beq .LBB21_41924; SOFT-NEXT: @ %bb.3:1925; SOFT-NEXT: movs r4, #2551926; SOFT-NEXT: .LBB21_4:1927; SOFT-NEXT: mov r0, r41928; SOFT-NEXT: pop {r4, r5, r6, pc}1929; SOFT-NEXT: .p2align 21930; SOFT-NEXT: @ %bb.5:1931; SOFT-NEXT: .LCPI21_0:1932; SOFT-NEXT: .long 1132396544 @ 0x437f00001933;1934; VFP2-LABEL: test_signed_i8_f16:1935; VFP2: @ %bb.0:1936; VFP2-NEXT: .save {r7, lr}1937; VFP2-NEXT: push {r7, lr}1938; VFP2-NEXT: bl __aeabi_h2f1939; VFP2-NEXT: vmov s0, r01940; VFP2-NEXT: vldr s4, .LCPI21_01941; VFP2-NEXT: vcvt.u32.f32 s2, s01942; VFP2-NEXT: vcmp.f32 s0, #01943; VFP2-NEXT: vmrs APSR_nzcv, fpscr1944; VFP2-NEXT: vcmp.f32 s0, s41945; VFP2-NEXT: vmov r0, s21946; VFP2-NEXT: it lt1947; VFP2-NEXT: movlt r0, #01948; VFP2-NEXT: vmrs APSR_nzcv, fpscr1949; VFP2-NEXT: it gt1950; VFP2-NEXT: movgt r0, #2551951; VFP2-NEXT: pop {r7, pc}1952; VFP2-NEXT: .p2align 21953; VFP2-NEXT: @ %bb.1:1954; VFP2-NEXT: .LCPI21_0:1955; VFP2-NEXT: .long 0x437f0000 @ float 2551956;1957; FP16-LABEL: test_signed_i8_f16:1958; FP16: @ %bb.0:1959; FP16-NEXT: vmov.f16 s0, r01960; FP16-NEXT: vldr s4, .LCPI21_11961; FP16-NEXT: vcvtb.f32.f16 s0, s01962; FP16-NEXT: vldr s2, .LCPI21_01963; FP16-NEXT: vmaxnm.f32 s0, s0, s41964; FP16-NEXT: vminnm.f32 s0, s0, s21965; FP16-NEXT: vcvt.u32.f32 s0, s01966; FP16-NEXT: vmov r0, s01967; FP16-NEXT: bx lr1968; FP16-NEXT: .p2align 21969; FP16-NEXT: @ %bb.1:1970; FP16-NEXT: .LCPI21_0:1971; FP16-NEXT: .long 0x437f0000 @ float 2551972; FP16-NEXT: .LCPI21_1:1973; FP16-NEXT: .long 0x00000000 @ float 01974 %x = call i8 @llvm.fptoui.sat.i8.f16(half %f)1975 ret i8 %x1976}1977 1978define i13 @test_signed_i13_f16(half %f) nounwind {1979; SOFT-LABEL: test_signed_i13_f16:1980; SOFT: @ %bb.0:1981; SOFT-NEXT: .save {r4, r5, r6, lr}1982; SOFT-NEXT: push {r4, r5, r6, lr}1983; SOFT-NEXT: uxth r0, r01984; SOFT-NEXT: bl __aeabi_h2f1985; SOFT-NEXT: mov r5, r01986; SOFT-NEXT: movs r1, #01987; SOFT-NEXT: bl __aeabi_fcmpge1988; SOFT-NEXT: mov r6, r01989; SOFT-NEXT: mov r0, r51990; SOFT-NEXT: bl __aeabi_f2uiz1991; SOFT-NEXT: mov r4, r01992; SOFT-NEXT: cmp r6, #01993; SOFT-NEXT: bne .LBB22_21994; SOFT-NEXT: @ %bb.1:1995; SOFT-NEXT: mov r4, r61996; SOFT-NEXT: .LBB22_2:1997; SOFT-NEXT: ldr r1, .LCPI22_01998; SOFT-NEXT: mov r0, r51999; SOFT-NEXT: bl __aeabi_fcmpgt2000; SOFT-NEXT: cmp r0, #02001; SOFT-NEXT: beq .LBB22_42002; SOFT-NEXT: @ %bb.3:2003; SOFT-NEXT: ldr r4, .LCPI22_12004; SOFT-NEXT: .LBB22_4:2005; SOFT-NEXT: mov r0, r42006; SOFT-NEXT: pop {r4, r5, r6, pc}2007; SOFT-NEXT: .p2align 22008; SOFT-NEXT: @ %bb.5:2009; SOFT-NEXT: .LCPI22_0:2010; SOFT-NEXT: .long 1174403072 @ 0x45fff8002011; SOFT-NEXT: .LCPI22_1:2012; SOFT-NEXT: .long 8191 @ 0x1fff2013;2014; VFP2-LABEL: test_signed_i13_f16:2015; VFP2: @ %bb.0:2016; VFP2-NEXT: .save {r7, lr}2017; VFP2-NEXT: push {r7, lr}2018; VFP2-NEXT: bl __aeabi_h2f2019; VFP2-NEXT: vmov s0, r02020; VFP2-NEXT: vldr s4, .LCPI22_02021; VFP2-NEXT: vcvt.u32.f32 s2, s02022; VFP2-NEXT: vcmp.f32 s0, #02023; VFP2-NEXT: vmrs APSR_nzcv, fpscr2024; VFP2-NEXT: vcmp.f32 s0, s42025; VFP2-NEXT: vmov r0, s22026; VFP2-NEXT: it lt2027; VFP2-NEXT: movlt r0, #02028; VFP2-NEXT: vmrs APSR_nzcv, fpscr2029; VFP2-NEXT: it gt2030; VFP2-NEXT: movwgt r0, #81912031; VFP2-NEXT: pop {r7, pc}2032; VFP2-NEXT: .p2align 22033; VFP2-NEXT: @ %bb.1:2034; VFP2-NEXT: .LCPI22_0:2035; VFP2-NEXT: .long 0x45fff800 @ float 81912036;2037; FP16-LABEL: test_signed_i13_f16:2038; FP16: @ %bb.0:2039; FP16-NEXT: vmov.f16 s0, r02040; FP16-NEXT: vldr s4, .LCPI22_12041; FP16-NEXT: vcvtb.f32.f16 s0, s02042; FP16-NEXT: vldr s2, .LCPI22_02043; FP16-NEXT: vmaxnm.f32 s0, s0, s42044; FP16-NEXT: vminnm.f32 s0, s0, s22045; FP16-NEXT: vcvt.u32.f32 s0, s02046; FP16-NEXT: vmov r0, s02047; FP16-NEXT: bx lr2048; FP16-NEXT: .p2align 22049; FP16-NEXT: @ %bb.1:2050; FP16-NEXT: .LCPI22_0:2051; FP16-NEXT: .long 0x45fff800 @ float 81912052; FP16-NEXT: .LCPI22_1:2053; FP16-NEXT: .long 0x00000000 @ float 02054 %x = call i13 @llvm.fptoui.sat.i13.f16(half %f)2055 ret i13 %x2056}2057 2058define i16 @test_signed_i16_f16(half %f) nounwind {2059; SOFT-LABEL: test_signed_i16_f16:2060; SOFT: @ %bb.0:2061; SOFT-NEXT: .save {r4, r5, r6, lr}2062; SOFT-NEXT: push {r4, r5, r6, lr}2063; SOFT-NEXT: uxth r0, r02064; SOFT-NEXT: bl __aeabi_h2f2065; SOFT-NEXT: mov r5, r02066; SOFT-NEXT: movs r1, #02067; SOFT-NEXT: bl __aeabi_fcmpge2068; SOFT-NEXT: mov r6, r02069; SOFT-NEXT: mov r0, r52070; SOFT-NEXT: bl __aeabi_f2uiz2071; SOFT-NEXT: mov r4, r02072; SOFT-NEXT: cmp r6, #02073; SOFT-NEXT: bne .LBB23_22074; SOFT-NEXT: @ %bb.1:2075; SOFT-NEXT: mov r4, r62076; SOFT-NEXT: .LBB23_2:2077; SOFT-NEXT: ldr r1, .LCPI23_02078; SOFT-NEXT: mov r0, r52079; SOFT-NEXT: bl __aeabi_fcmpgt2080; SOFT-NEXT: cmp r0, #02081; SOFT-NEXT: beq .LBB23_42082; SOFT-NEXT: @ %bb.3:2083; SOFT-NEXT: ldr r4, .LCPI23_12084; SOFT-NEXT: .LBB23_4:2085; SOFT-NEXT: mov r0, r42086; SOFT-NEXT: pop {r4, r5, r6, pc}2087; SOFT-NEXT: .p2align 22088; SOFT-NEXT: @ %bb.5:2089; SOFT-NEXT: .LCPI23_0:2090; SOFT-NEXT: .long 1199570688 @ 0x477fff002091; SOFT-NEXT: .LCPI23_1:2092; SOFT-NEXT: .long 65535 @ 0xffff2093;2094; VFP2-LABEL: test_signed_i16_f16:2095; VFP2: @ %bb.0:2096; VFP2-NEXT: .save {r7, lr}2097; VFP2-NEXT: push {r7, lr}2098; VFP2-NEXT: bl __aeabi_h2f2099; VFP2-NEXT: vmov s0, r02100; VFP2-NEXT: vldr s4, .LCPI23_02101; VFP2-NEXT: vcvt.u32.f32 s2, s02102; VFP2-NEXT: vcmp.f32 s0, #02103; VFP2-NEXT: vmrs APSR_nzcv, fpscr2104; VFP2-NEXT: vcmp.f32 s0, s42105; VFP2-NEXT: vmov r0, s22106; VFP2-NEXT: it lt2107; VFP2-NEXT: movlt r0, #02108; VFP2-NEXT: vmrs APSR_nzcv, fpscr2109; VFP2-NEXT: it gt2110; VFP2-NEXT: movwgt r0, #655352111; VFP2-NEXT: pop {r7, pc}2112; VFP2-NEXT: .p2align 22113; VFP2-NEXT: @ %bb.1:2114; VFP2-NEXT: .LCPI23_0:2115; VFP2-NEXT: .long 0x477fff00 @ float 655352116;2117; FP16-LABEL: test_signed_i16_f16:2118; FP16: @ %bb.0:2119; FP16-NEXT: vmov.f16 s0, r02120; FP16-NEXT: vldr s4, .LCPI23_12121; FP16-NEXT: vcvtb.f32.f16 s0, s02122; FP16-NEXT: vldr s2, .LCPI23_02123; FP16-NEXT: vmaxnm.f32 s0, s0, s42124; FP16-NEXT: vminnm.f32 s0, s0, s22125; FP16-NEXT: vcvt.u32.f32 s0, s02126; FP16-NEXT: vmov r0, s02127; FP16-NEXT: bx lr2128; FP16-NEXT: .p2align 22129; FP16-NEXT: @ %bb.1:2130; FP16-NEXT: .LCPI23_0:2131; FP16-NEXT: .long 0x477fff00 @ float 655352132; FP16-NEXT: .LCPI23_1:2133; FP16-NEXT: .long 0x00000000 @ float 02134 %x = call i16 @llvm.fptoui.sat.i16.f16(half %f)2135 ret i16 %x2136}2137 2138define i19 @test_signed_i19_f16(half %f) nounwind {2139; SOFT-LABEL: test_signed_i19_f16:2140; SOFT: @ %bb.0:2141; SOFT-NEXT: .save {r4, r5, r6, lr}2142; SOFT-NEXT: push {r4, r5, r6, lr}2143; SOFT-NEXT: uxth r0, r02144; SOFT-NEXT: bl __aeabi_h2f2145; SOFT-NEXT: mov r5, r02146; SOFT-NEXT: movs r1, #02147; SOFT-NEXT: bl __aeabi_fcmpge2148; SOFT-NEXT: mov r6, r02149; SOFT-NEXT: mov r0, r52150; SOFT-NEXT: bl __aeabi_f2uiz2151; SOFT-NEXT: mov r4, r02152; SOFT-NEXT: cmp r6, #02153; SOFT-NEXT: bne .LBB24_22154; SOFT-NEXT: @ %bb.1:2155; SOFT-NEXT: mov r4, r62156; SOFT-NEXT: .LBB24_2:2157; SOFT-NEXT: ldr r1, .LCPI24_02158; SOFT-NEXT: mov r0, r52159; SOFT-NEXT: bl __aeabi_fcmpgt2160; SOFT-NEXT: cmp r0, #02161; SOFT-NEXT: beq .LBB24_42162; SOFT-NEXT: @ %bb.3:2163; SOFT-NEXT: ldr r4, .LCPI24_12164; SOFT-NEXT: .LBB24_4:2165; SOFT-NEXT: mov r0, r42166; SOFT-NEXT: pop {r4, r5, r6, pc}2167; SOFT-NEXT: .p2align 22168; SOFT-NEXT: @ %bb.5:2169; SOFT-NEXT: .LCPI24_0:2170; SOFT-NEXT: .long 1224736736 @ 0x48ffffe02171; SOFT-NEXT: .LCPI24_1:2172; SOFT-NEXT: .long 524287 @ 0x7ffff2173;2174; VFP2-LABEL: test_signed_i19_f16:2175; VFP2: @ %bb.0:2176; VFP2-NEXT: .save {r7, lr}2177; VFP2-NEXT: push {r7, lr}2178; VFP2-NEXT: bl __aeabi_h2f2179; VFP2-NEXT: vmov s0, r02180; VFP2-NEXT: vldr s4, .LCPI24_02181; VFP2-NEXT: vcvt.u32.f32 s2, s02182; VFP2-NEXT: vcmp.f32 s0, #02183; VFP2-NEXT: vmrs APSR_nzcv, fpscr2184; VFP2-NEXT: vcmp.f32 s0, s42185; VFP2-NEXT: vmov r0, s22186; VFP2-NEXT: it lt2187; VFP2-NEXT: movlt r0, #02188; VFP2-NEXT: vmrs APSR_nzcv, fpscr2189; VFP2-NEXT: itt gt2190; VFP2-NEXT: movwgt r0, #655352191; VFP2-NEXT: movtgt r0, #72192; VFP2-NEXT: pop {r7, pc}2193; VFP2-NEXT: .p2align 22194; VFP2-NEXT: @ %bb.1:2195; VFP2-NEXT: .LCPI24_0:2196; VFP2-NEXT: .long 0x48ffffe0 @ float 5242872197;2198; FP16-LABEL: test_signed_i19_f16:2199; FP16: @ %bb.0:2200; FP16-NEXT: vmov.f16 s0, r02201; FP16-NEXT: vldr s4, .LCPI24_12202; FP16-NEXT: vcvtb.f32.f16 s0, s02203; FP16-NEXT: vldr s2, .LCPI24_02204; FP16-NEXT: vmaxnm.f32 s0, s0, s42205; FP16-NEXT: vminnm.f32 s0, s0, s22206; FP16-NEXT: vcvt.u32.f32 s0, s02207; FP16-NEXT: vmov r0, s02208; FP16-NEXT: bx lr2209; FP16-NEXT: .p2align 22210; FP16-NEXT: @ %bb.1:2211; FP16-NEXT: .LCPI24_0:2212; FP16-NEXT: .long 0x48ffffe0 @ float 5242872213; FP16-NEXT: .LCPI24_1:2214; FP16-NEXT: .long 0x00000000 @ float 02215 %x = call i19 @llvm.fptoui.sat.i19.f16(half %f)2216 ret i19 %x2217}2218 2219define i32 @test_signed_i32_f16(half %f) nounwind {2220; SOFT-LABEL: test_signed_i32_f16:2221; SOFT: @ %bb.0:2222; SOFT-NEXT: .save {r4, r5, r6, r7, lr}2223; SOFT-NEXT: push {r4, r5, r6, r7, lr}2224; SOFT-NEXT: .pad #42225; SOFT-NEXT: sub sp, #42226; SOFT-NEXT: uxth r0, r02227; SOFT-NEXT: bl __aeabi_h2f2228; SOFT-NEXT: mov r6, r02229; SOFT-NEXT: movs r4, #02230; SOFT-NEXT: mov r1, r42231; SOFT-NEXT: bl __aeabi_fcmpge2232; SOFT-NEXT: mov r7, r02233; SOFT-NEXT: mov r0, r62234; SOFT-NEXT: bl __aeabi_f2uiz2235; SOFT-NEXT: mov r5, r02236; SOFT-NEXT: cmp r7, #02237; SOFT-NEXT: bne .LBB25_22238; SOFT-NEXT: @ %bb.1:2239; SOFT-NEXT: mov r5, r72240; SOFT-NEXT: .LBB25_2:2241; SOFT-NEXT: ldr r1, .LCPI25_02242; SOFT-NEXT: mov r0, r62243; SOFT-NEXT: bl __aeabi_fcmpgt2244; SOFT-NEXT: cmp r0, #02245; SOFT-NEXT: beq .LBB25_42246; SOFT-NEXT: @ %bb.3:2247; SOFT-NEXT: mvns r5, r42248; SOFT-NEXT: .LBB25_4:2249; SOFT-NEXT: mov r0, r52250; SOFT-NEXT: add sp, #42251; SOFT-NEXT: pop {r4, r5, r6, r7, pc}2252; SOFT-NEXT: .p2align 22253; SOFT-NEXT: @ %bb.5:2254; SOFT-NEXT: .LCPI25_0:2255; SOFT-NEXT: .long 1333788671 @ 0x4f7fffff2256;2257; VFP2-LABEL: test_signed_i32_f16:2258; VFP2: @ %bb.0:2259; VFP2-NEXT: .save {r7, lr}2260; VFP2-NEXT: push {r7, lr}2261; VFP2-NEXT: bl __aeabi_h2f2262; VFP2-NEXT: vmov s0, r02263; VFP2-NEXT: vcvt.u32.f32 s0, s02264; VFP2-NEXT: vmov r0, s02265; VFP2-NEXT: pop {r7, pc}2266;2267; FP16-LABEL: test_signed_i32_f16:2268; FP16: @ %bb.0:2269; FP16-NEXT: vmov.f16 s0, r02270; FP16-NEXT: vcvt.u32.f16 s0, s02271; FP16-NEXT: vmov r0, s02272; FP16-NEXT: bx lr2273 %x = call i32 @llvm.fptoui.sat.i32.f16(half %f)2274 ret i32 %x2275}2276 2277define i50 @test_signed_i50_f16(half %f) nounwind {2278; SOFT-LABEL: test_signed_i50_f16:2279; SOFT: @ %bb.0:2280; SOFT-NEXT: .save {r4, r5, r6, r7, lr}2281; SOFT-NEXT: push {r4, r5, r6, r7, lr}2282; SOFT-NEXT: .pad #42283; SOFT-NEXT: sub sp, #42284; SOFT-NEXT: uxth r0, r02285; SOFT-NEXT: bl __aeabi_h2f2286; SOFT-NEXT: mov r6, r02287; SOFT-NEXT: movs r5, #02288; SOFT-NEXT: mov r1, r52289; SOFT-NEXT: bl __aeabi_fcmpge2290; SOFT-NEXT: mov r4, r02291; SOFT-NEXT: mov r0, r62292; SOFT-NEXT: bl __aeabi_f2ulz2293; SOFT-NEXT: mov r7, r12294; SOFT-NEXT: cmp r4, #02295; SOFT-NEXT: bne .LBB26_22296; SOFT-NEXT: @ %bb.1:2297; SOFT-NEXT: mov r7, r42298; SOFT-NEXT: .LBB26_2:2299; SOFT-NEXT: bne .LBB26_42300; SOFT-NEXT: @ %bb.3:2301; SOFT-NEXT: mov r0, r42302; SOFT-NEXT: .LBB26_4:2303; SOFT-NEXT: mov r4, r02304; SOFT-NEXT: ldr r1, .LCPI26_02305; SOFT-NEXT: mov r0, r62306; SOFT-NEXT: bl __aeabi_fcmpgt2307; SOFT-NEXT: mov r1, r02308; SOFT-NEXT: mvns r0, r52309; SOFT-NEXT: cmp r1, #02310; SOFT-NEXT: bne .LBB26_62311; SOFT-NEXT: @ %bb.5:2312; SOFT-NEXT: mov r0, r42313; SOFT-NEXT: .LBB26_6:2314; SOFT-NEXT: beq .LBB26_82315; SOFT-NEXT: @ %bb.7:2316; SOFT-NEXT: ldr r7, .LCPI26_12317; SOFT-NEXT: .LBB26_8:2318; SOFT-NEXT: mov r1, r72319; SOFT-NEXT: add sp, #42320; SOFT-NEXT: pop {r4, r5, r6, r7, pc}2321; SOFT-NEXT: .p2align 22322; SOFT-NEXT: @ %bb.9:2323; SOFT-NEXT: .LCPI26_0:2324; SOFT-NEXT: .long 1484783615 @ 0x587fffff2325; SOFT-NEXT: .LCPI26_1:2326; SOFT-NEXT: .long 262143 @ 0x3ffff2327;2328; VFP2-LABEL: test_signed_i50_f16:2329; VFP2: @ %bb.0:2330; VFP2-NEXT: .save {r4, lr}2331; VFP2-NEXT: push {r4, lr}2332; VFP2-NEXT: bl __aeabi_h2f2333; VFP2-NEXT: mov r4, r02334; VFP2-NEXT: bl __aeabi_f2ulz2335; VFP2-NEXT: vmov s0, r42336; VFP2-NEXT: vldr s2, .LCPI26_02337; VFP2-NEXT: vcmp.f32 s0, #02338; VFP2-NEXT: vmrs APSR_nzcv, fpscr2339; VFP2-NEXT: itt lt2340; VFP2-NEXT: movlt r1, #02341; VFP2-NEXT: movlt r0, #02342; VFP2-NEXT: vcmp.f32 s0, s22343; VFP2-NEXT: vmrs APSR_nzcv, fpscr2344; VFP2-NEXT: ittt gt2345; VFP2-NEXT: movwgt r1, #655352346; VFP2-NEXT: movtgt r1, #32347; VFP2-NEXT: movgt.w r0, #-12348; VFP2-NEXT: pop {r4, pc}2349; VFP2-NEXT: .p2align 22350; VFP2-NEXT: @ %bb.1:2351; VFP2-NEXT: .LCPI26_0:2352; VFP2-NEXT: .long 0x587fffff @ float 1.12589984E+152353;2354; FP16-LABEL: test_signed_i50_f16:2355; FP16: @ %bb.0:2356; FP16-NEXT: .save {r7, lr}2357; FP16-NEXT: push {r7, lr}2358; FP16-NEXT: .vsave {d8}2359; FP16-NEXT: vpush {d8}2360; FP16-NEXT: vmov.f16 s0, r02361; FP16-NEXT: vcvtb.f32.f16 s16, s02362; FP16-NEXT: vmov r0, s162363; FP16-NEXT: bl __aeabi_f2ulz2364; FP16-NEXT: vldr s0, .LCPI26_02365; FP16-NEXT: vcmp.f32 s16, #02366; FP16-NEXT: vmrs APSR_nzcv, fpscr2367; FP16-NEXT: itt lt2368; FP16-NEXT: movlt r1, #02369; FP16-NEXT: movlt r0, #02370; FP16-NEXT: vcmp.f32 s16, s02371; FP16-NEXT: vmrs APSR_nzcv, fpscr2372; FP16-NEXT: ittt gt2373; FP16-NEXT: movwgt r1, #655352374; FP16-NEXT: movtgt r1, #32375; FP16-NEXT: movgt.w r0, #-12376; FP16-NEXT: vpop {d8}2377; FP16-NEXT: pop {r7, pc}2378; FP16-NEXT: .p2align 22379; FP16-NEXT: @ %bb.1:2380; FP16-NEXT: .LCPI26_0:2381; FP16-NEXT: .long 0x587fffff @ float 1.12589984E+152382 %x = call i50 @llvm.fptoui.sat.i50.f16(half %f)2383 ret i50 %x2384}2385 2386define i64 @test_signed_i64_f16(half %f) nounwind {2387; SOFT-LABEL: test_signed_i64_f16:2388; SOFT: @ %bb.0:2389; SOFT-NEXT: .save {r4, r5, r6, r7, lr}2390; SOFT-NEXT: push {r4, r5, r6, r7, lr}2391; SOFT-NEXT: .pad #42392; SOFT-NEXT: sub sp, #42393; SOFT-NEXT: uxth r0, r02394; SOFT-NEXT: bl __aeabi_h2f2395; SOFT-NEXT: mov r6, r02396; SOFT-NEXT: movs r4, #02397; SOFT-NEXT: mov r1, r42398; SOFT-NEXT: bl __aeabi_fcmpge2399; SOFT-NEXT: mov r5, r02400; SOFT-NEXT: mov r0, r62401; SOFT-NEXT: bl __aeabi_f2ulz2402; SOFT-NEXT: mov r7, r02403; SOFT-NEXT: cmp r5, #02404; SOFT-NEXT: bne .LBB27_22405; SOFT-NEXT: @ %bb.1:2406; SOFT-NEXT: mov r1, r52407; SOFT-NEXT: .LBB27_2:2408; SOFT-NEXT: str r1, [sp] @ 4-byte Spill2409; SOFT-NEXT: bne .LBB27_42410; SOFT-NEXT: @ %bb.3:2411; SOFT-NEXT: mov r7, r52412; SOFT-NEXT: .LBB27_4:2413; SOFT-NEXT: ldr r1, .LCPI27_02414; SOFT-NEXT: mov r0, r62415; SOFT-NEXT: bl __aeabi_fcmpgt2416; SOFT-NEXT: mvns r1, r42417; SOFT-NEXT: cmp r0, #02418; SOFT-NEXT: mov r0, r12419; SOFT-NEXT: beq .LBB27_72420; SOFT-NEXT: @ %bb.5:2421; SOFT-NEXT: beq .LBB27_82422; SOFT-NEXT: .LBB27_6:2423; SOFT-NEXT: add sp, #42424; SOFT-NEXT: pop {r4, r5, r6, r7, pc}2425; SOFT-NEXT: .LBB27_7:2426; SOFT-NEXT: mov r0, r72427; SOFT-NEXT: bne .LBB27_62428; SOFT-NEXT: .LBB27_8:2429; SOFT-NEXT: ldr r1, [sp] @ 4-byte Reload2430; SOFT-NEXT: add sp, #42431; SOFT-NEXT: pop {r4, r5, r6, r7, pc}2432; SOFT-NEXT: .p2align 22433; SOFT-NEXT: @ %bb.9:2434; SOFT-NEXT: .LCPI27_0:2435; SOFT-NEXT: .long 1602224127 @ 0x5f7fffff2436;2437; VFP2-LABEL: test_signed_i64_f16:2438; VFP2: @ %bb.0:2439; VFP2-NEXT: .save {r4, lr}2440; VFP2-NEXT: push {r4, lr}2441; VFP2-NEXT: bl __aeabi_h2f2442; VFP2-NEXT: mov r4, r02443; VFP2-NEXT: bl __aeabi_f2ulz2444; VFP2-NEXT: vmov s0, r42445; VFP2-NEXT: vldr s2, .LCPI27_02446; VFP2-NEXT: vcmp.f32 s0, #02447; VFP2-NEXT: vmrs APSR_nzcv, fpscr2448; VFP2-NEXT: itt lt2449; VFP2-NEXT: movlt r1, #02450; VFP2-NEXT: movlt r0, #02451; VFP2-NEXT: vcmp.f32 s0, s22452; VFP2-NEXT: vmrs APSR_nzcv, fpscr2453; VFP2-NEXT: itt gt2454; VFP2-NEXT: movgt.w r0, #-12455; VFP2-NEXT: movgt.w r1, #-12456; VFP2-NEXT: pop {r4, pc}2457; VFP2-NEXT: .p2align 22458; VFP2-NEXT: @ %bb.1:2459; VFP2-NEXT: .LCPI27_0:2460; VFP2-NEXT: .long 0x5f7fffff @ float 1.8446743E+192461;2462; FP16-LABEL: test_signed_i64_f16:2463; FP16: @ %bb.0:2464; FP16-NEXT: .save {r7, lr}2465; FP16-NEXT: push {r7, lr}2466; FP16-NEXT: .vsave {d8}2467; FP16-NEXT: vpush {d8}2468; FP16-NEXT: vmov.f16 s0, r02469; FP16-NEXT: vcvtb.f32.f16 s16, s02470; FP16-NEXT: vmov r0, s162471; FP16-NEXT: bl __aeabi_f2ulz2472; FP16-NEXT: vldr s0, .LCPI27_02473; FP16-NEXT: vcmp.f32 s16, #02474; FP16-NEXT: vmrs APSR_nzcv, fpscr2475; FP16-NEXT: itt lt2476; FP16-NEXT: movlt r1, #02477; FP16-NEXT: movlt r0, #02478; FP16-NEXT: vcmp.f32 s16, s02479; FP16-NEXT: vmrs APSR_nzcv, fpscr2480; FP16-NEXT: itt gt2481; FP16-NEXT: movgt.w r0, #-12482; FP16-NEXT: movgt.w r1, #-12483; FP16-NEXT: vpop {d8}2484; FP16-NEXT: pop {r7, pc}2485; FP16-NEXT: .p2align 22486; FP16-NEXT: @ %bb.1:2487; FP16-NEXT: .LCPI27_0:2488; FP16-NEXT: .long 0x5f7fffff @ float 1.8446743E+192489 %x = call i64 @llvm.fptoui.sat.i64.f16(half %f)2490 ret i64 %x2491}2492 2493define i100 @test_signed_i100_f16(half %f) nounwind {2494; SOFT-LABEL: test_signed_i100_f16:2495; SOFT: @ %bb.0:2496; SOFT-NEXT: .save {r4, r5, r6, r7, lr}2497; SOFT-NEXT: push {r4, r5, r6, r7, lr}2498; SOFT-NEXT: .pad #122499; SOFT-NEXT: sub sp, #122500; SOFT-NEXT: uxth r0, r02501; SOFT-NEXT: bl __aeabi_h2f2502; SOFT-NEXT: mov r4, r02503; SOFT-NEXT: movs r6, #02504; SOFT-NEXT: mov r1, r62505; SOFT-NEXT: bl __aeabi_fcmpge2506; SOFT-NEXT: mov r7, r02507; SOFT-NEXT: mov r0, r42508; SOFT-NEXT: bl __fixunssfti2509; SOFT-NEXT: mov r5, r02510; SOFT-NEXT: cmp r7, #02511; SOFT-NEXT: beq .LBB28_112512; SOFT-NEXT: @ %bb.1:2513; SOFT-NEXT: beq .LBB28_122514; SOFT-NEXT: .LBB28_2:2515; SOFT-NEXT: bne .LBB28_42516; SOFT-NEXT: .LBB28_3:2517; SOFT-NEXT: mov r1, r72518; SOFT-NEXT: .LBB28_4:2519; SOFT-NEXT: str r1, [sp] @ 4-byte Spill2520; SOFT-NEXT: str r2, [sp, #4] @ 4-byte Spill2521; SOFT-NEXT: str r3, [sp, #8] @ 4-byte Spill2522; SOFT-NEXT: bne .LBB28_62523; SOFT-NEXT: @ %bb.5:2524; SOFT-NEXT: mov r5, r72525; SOFT-NEXT: .LBB28_6:2526; SOFT-NEXT: ldr r1, .LCPI28_02527; SOFT-NEXT: mov r0, r42528; SOFT-NEXT: bl __aeabi_fcmpgt2529; SOFT-NEXT: mvns r2, r62530; SOFT-NEXT: movs r3, #152531; SOFT-NEXT: cmp r0, #02532; SOFT-NEXT: mov r0, r22533; SOFT-NEXT: beq .LBB28_132534; SOFT-NEXT: @ %bb.7:2535; SOFT-NEXT: mov r1, r22536; SOFT-NEXT: beq .LBB28_142537; SOFT-NEXT: .LBB28_8:2538; SOFT-NEXT: beq .LBB28_152539; SOFT-NEXT: .LBB28_9:2540; SOFT-NEXT: beq .LBB28_162541; SOFT-NEXT: .LBB28_10:2542; SOFT-NEXT: add sp, #122543; SOFT-NEXT: pop {r4, r5, r6, r7, pc}2544; SOFT-NEXT: .LBB28_11:2545; SOFT-NEXT: mov r3, r72546; SOFT-NEXT: bne .LBB28_22547; SOFT-NEXT: .LBB28_12:2548; SOFT-NEXT: mov r2, r72549; SOFT-NEXT: beq .LBB28_32550; SOFT-NEXT: b .LBB28_42551; SOFT-NEXT: .LBB28_13:2552; SOFT-NEXT: mov r0, r52553; SOFT-NEXT: mov r1, r22554; SOFT-NEXT: bne .LBB28_82555; SOFT-NEXT: .LBB28_14:2556; SOFT-NEXT: ldr r1, [sp] @ 4-byte Reload2557; SOFT-NEXT: bne .LBB28_92558; SOFT-NEXT: .LBB28_15:2559; SOFT-NEXT: ldr r2, [sp, #4] @ 4-byte Reload2560; SOFT-NEXT: bne .LBB28_102561; SOFT-NEXT: .LBB28_16:2562; SOFT-NEXT: ldr r3, [sp, #8] @ 4-byte Reload2563; SOFT-NEXT: add sp, #122564; SOFT-NEXT: pop {r4, r5, r6, r7, pc}2565; SOFT-NEXT: .p2align 22566; SOFT-NEXT: @ %bb.17:2567; SOFT-NEXT: .LCPI28_0:2568; SOFT-NEXT: .long 1904214015 @ 0x717fffff2569;2570; VFP2-LABEL: test_signed_i100_f16:2571; VFP2: @ %bb.0:2572; VFP2-NEXT: .save {r4, lr}2573; VFP2-NEXT: push {r4, lr}2574; VFP2-NEXT: bl __aeabi_h2f2575; VFP2-NEXT: mov r4, r02576; VFP2-NEXT: bl __fixunssfti2577; VFP2-NEXT: vmov s0, r42578; VFP2-NEXT: vldr s2, .LCPI28_02579; VFP2-NEXT: vcmp.f32 s0, #02580; VFP2-NEXT: vmrs APSR_nzcv, fpscr2581; VFP2-NEXT: itttt lt2582; VFP2-NEXT: movlt r3, #02583; VFP2-NEXT: movlt r2, #02584; VFP2-NEXT: movlt r1, #02585; VFP2-NEXT: movlt r0, #02586; VFP2-NEXT: vcmp.f32 s0, s22587; VFP2-NEXT: vmrs APSR_nzcv, fpscr2588; VFP2-NEXT: itttt gt2589; VFP2-NEXT: movgt.w r0, #-12590; VFP2-NEXT: movgt.w r1, #-12591; VFP2-NEXT: movgt.w r2, #-12592; VFP2-NEXT: movgt r3, #152593; VFP2-NEXT: pop {r4, pc}2594; VFP2-NEXT: .p2align 22595; VFP2-NEXT: @ %bb.1:2596; VFP2-NEXT: .LCPI28_0:2597; VFP2-NEXT: .long 0x717fffff @ float 1.26765052E+302598;2599; FP16-LABEL: test_signed_i100_f16:2600; FP16: @ %bb.0:2601; FP16-NEXT: .save {r7, lr}2602; FP16-NEXT: push {r7, lr}2603; FP16-NEXT: .vsave {d8}2604; FP16-NEXT: vpush {d8}2605; FP16-NEXT: vmov.f16 s0, r02606; FP16-NEXT: vcvtb.f32.f16 s16, s02607; FP16-NEXT: vmov r0, s162608; FP16-NEXT: bl __fixunssfti2609; FP16-NEXT: vldr s0, .LCPI28_02610; FP16-NEXT: vcmp.f32 s16, #02611; FP16-NEXT: vmrs APSR_nzcv, fpscr2612; FP16-NEXT: itttt lt2613; FP16-NEXT: movlt r3, #02614; FP16-NEXT: movlt r2, #02615; FP16-NEXT: movlt r1, #02616; FP16-NEXT: movlt r0, #02617; FP16-NEXT: vcmp.f32 s16, s02618; FP16-NEXT: vmrs APSR_nzcv, fpscr2619; FP16-NEXT: itttt gt2620; FP16-NEXT: movgt.w r0, #-12621; FP16-NEXT: movgt.w r1, #-12622; FP16-NEXT: movgt.w r2, #-12623; FP16-NEXT: movgt r3, #152624; FP16-NEXT: vpop {d8}2625; FP16-NEXT: pop {r7, pc}2626; FP16-NEXT: .p2align 22627; FP16-NEXT: @ %bb.1:2628; FP16-NEXT: .LCPI28_0:2629; FP16-NEXT: .long 0x717fffff @ float 1.26765052E+302630 %x = call i100 @llvm.fptoui.sat.i100.f16(half %f)2631 ret i100 %x2632}2633 2634define i128 @test_signed_i128_f16(half %f) nounwind {2635; SOFT-LABEL: test_signed_i128_f16:2636; SOFT: @ %bb.0:2637; SOFT-NEXT: .save {r4, r5, r6, r7, lr}2638; SOFT-NEXT: push {r4, r5, r6, r7, lr}2639; SOFT-NEXT: .pad #122640; SOFT-NEXT: sub sp, #122641; SOFT-NEXT: uxth r0, r02642; SOFT-NEXT: bl __aeabi_h2f2643; SOFT-NEXT: mov r4, r02644; SOFT-NEXT: movs r6, #02645; SOFT-NEXT: mov r1, r62646; SOFT-NEXT: bl __aeabi_fcmpge2647; SOFT-NEXT: mov r7, r02648; SOFT-NEXT: mov r0, r42649; SOFT-NEXT: bl __fixunssfti2650; SOFT-NEXT: mov r5, r02651; SOFT-NEXT: cmp r7, #02652; SOFT-NEXT: beq .LBB29_112653; SOFT-NEXT: @ %bb.1:2654; SOFT-NEXT: beq .LBB29_122655; SOFT-NEXT: .LBB29_2:2656; SOFT-NEXT: bne .LBB29_42657; SOFT-NEXT: .LBB29_3:2658; SOFT-NEXT: mov r1, r72659; SOFT-NEXT: .LBB29_4:2660; SOFT-NEXT: str r1, [sp] @ 4-byte Spill2661; SOFT-NEXT: str r2, [sp, #4] @ 4-byte Spill2662; SOFT-NEXT: str r3, [sp, #8] @ 4-byte Spill2663; SOFT-NEXT: bne .LBB29_62664; SOFT-NEXT: @ %bb.5:2665; SOFT-NEXT: mov r5, r72666; SOFT-NEXT: .LBB29_6:2667; SOFT-NEXT: ldr r1, .LCPI29_02668; SOFT-NEXT: mov r0, r42669; SOFT-NEXT: bl __aeabi_fcmpgt2670; SOFT-NEXT: mvns r3, r62671; SOFT-NEXT: cmp r0, #02672; SOFT-NEXT: mov r0, r32673; SOFT-NEXT: beq .LBB29_132674; SOFT-NEXT: @ %bb.7:2675; SOFT-NEXT: mov r1, r32676; SOFT-NEXT: beq .LBB29_142677; SOFT-NEXT: .LBB29_8:2678; SOFT-NEXT: mov r2, r32679; SOFT-NEXT: beq .LBB29_152680; SOFT-NEXT: .LBB29_9:2681; SOFT-NEXT: beq .LBB29_162682; SOFT-NEXT: .LBB29_10:2683; SOFT-NEXT: add sp, #122684; SOFT-NEXT: pop {r4, r5, r6, r7, pc}2685; SOFT-NEXT: .LBB29_11:2686; SOFT-NEXT: mov r3, r72687; SOFT-NEXT: bne .LBB29_22688; SOFT-NEXT: .LBB29_12:2689; SOFT-NEXT: mov r2, r72690; SOFT-NEXT: beq .LBB29_32691; SOFT-NEXT: b .LBB29_42692; SOFT-NEXT: .LBB29_13:2693; SOFT-NEXT: mov r0, r52694; SOFT-NEXT: mov r1, r32695; SOFT-NEXT: bne .LBB29_82696; SOFT-NEXT: .LBB29_14:2697; SOFT-NEXT: ldr r1, [sp] @ 4-byte Reload2698; SOFT-NEXT: mov r2, r32699; SOFT-NEXT: bne .LBB29_92700; SOFT-NEXT: .LBB29_15:2701; SOFT-NEXT: ldr r2, [sp, #4] @ 4-byte Reload2702; SOFT-NEXT: bne .LBB29_102703; SOFT-NEXT: .LBB29_16:2704; SOFT-NEXT: ldr r3, [sp, #8] @ 4-byte Reload2705; SOFT-NEXT: add sp, #122706; SOFT-NEXT: pop {r4, r5, r6, r7, pc}2707; SOFT-NEXT: .p2align 22708; SOFT-NEXT: @ %bb.17:2709; SOFT-NEXT: .LCPI29_0:2710; SOFT-NEXT: .long 2139095039 @ 0x7f7fffff2711;2712; VFP2-LABEL: test_signed_i128_f16:2713; VFP2: @ %bb.0:2714; VFP2-NEXT: .save {r4, lr}2715; VFP2-NEXT: push {r4, lr}2716; VFP2-NEXT: bl __aeabi_h2f2717; VFP2-NEXT: mov r4, r02718; VFP2-NEXT: bl __fixunssfti2719; VFP2-NEXT: vmov s0, r42720; VFP2-NEXT: vldr s2, .LCPI29_02721; VFP2-NEXT: vcmp.f32 s0, #02722; VFP2-NEXT: vmrs APSR_nzcv, fpscr2723; VFP2-NEXT: itttt lt2724; VFP2-NEXT: movlt r3, #02725; VFP2-NEXT: movlt r2, #02726; VFP2-NEXT: movlt r1, #02727; VFP2-NEXT: movlt r0, #02728; VFP2-NEXT: vcmp.f32 s0, s22729; VFP2-NEXT: vmrs APSR_nzcv, fpscr2730; VFP2-NEXT: itttt gt2731; VFP2-NEXT: movgt.w r0, #-12732; VFP2-NEXT: movgt.w r1, #-12733; VFP2-NEXT: movgt.w r2, #-12734; VFP2-NEXT: movgt.w r3, #-12735; VFP2-NEXT: pop {r4, pc}2736; VFP2-NEXT: .p2align 22737; VFP2-NEXT: @ %bb.1:2738; VFP2-NEXT: .LCPI29_0:2739; VFP2-NEXT: .long 0x7f7fffff @ float 3.40282347E+382740;2741; FP16-LABEL: test_signed_i128_f16:2742; FP16: @ %bb.0:2743; FP16-NEXT: .save {r7, lr}2744; FP16-NEXT: push {r7, lr}2745; FP16-NEXT: .vsave {d8}2746; FP16-NEXT: vpush {d8}2747; FP16-NEXT: vmov.f16 s0, r02748; FP16-NEXT: vcvtb.f32.f16 s16, s02749; FP16-NEXT: vmov r0, s162750; FP16-NEXT: bl __fixunssfti2751; FP16-NEXT: vldr s0, .LCPI29_02752; FP16-NEXT: vcmp.f32 s16, #02753; FP16-NEXT: vmrs APSR_nzcv, fpscr2754; FP16-NEXT: itttt lt2755; FP16-NEXT: movlt r3, #02756; FP16-NEXT: movlt r2, #02757; FP16-NEXT: movlt r1, #02758; FP16-NEXT: movlt r0, #02759; FP16-NEXT: vcmp.f32 s16, s02760; FP16-NEXT: vmrs APSR_nzcv, fpscr2761; FP16-NEXT: itttt gt2762; FP16-NEXT: movgt.w r0, #-12763; FP16-NEXT: movgt.w r1, #-12764; FP16-NEXT: movgt.w r2, #-12765; FP16-NEXT: movgt.w r3, #-12766; FP16-NEXT: vpop {d8}2767; FP16-NEXT: pop {r7, pc}2768; FP16-NEXT: .p2align 22769; FP16-NEXT: @ %bb.1:2770; FP16-NEXT: .LCPI29_0:2771; FP16-NEXT: .long 0x7f7fffff @ float 3.40282347E+382772 %x = call i128 @llvm.fptoui.sat.i128.f16(half %f)2773 ret i128 %x2774}2775