1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -mtriple=thumbv6-none-eabi -float-abi=soft %s -o - | FileCheck %s --check-prefixes=SOFT 3; RUN: llc -mtriple=thumbv7-none-eabi -mattr=+vfp2 %s -o - | FileCheck %s --check-prefixes=VFP,VFP2 4; RUN: llc -mtriple=thumbv8.1m.main-eabi -mattr=+fullfp16,+fp64 %s -o - | FileCheck %s --check-prefixes=VFP,FP16 5 6; 7; 32-bit float to signed integer 8; 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, r0 27; SOFT-NEXT: movs r1, #0 28; SOFT-NEXT: bl __aeabi_fcmpge 29; SOFT-NEXT: mov r6, r0 30; SOFT-NEXT: mov r0, r5 31; SOFT-NEXT: bl __aeabi_f2uiz 32; SOFT-NEXT: mov r4, r0 33; SOFT-NEXT: cmp r6, #0 34; SOFT-NEXT: bne .LBB0_2 35; SOFT-NEXT: @ %bb.1: 36; SOFT-NEXT: mov r4, r6 37; SOFT-NEXT: .LBB0_2: 38; SOFT-NEXT: movs r0, #127 39; SOFT-NEXT: lsls r1, r0, #23 40; SOFT-NEXT: mov r0, r5 41; SOFT-NEXT: bl __aeabi_fcmpgt 42; SOFT-NEXT: cmp r0, #0 43; SOFT-NEXT: beq .LBB0_4 44; SOFT-NEXT: @ %bb.3: 45; SOFT-NEXT: movs r4, #1 46; SOFT-NEXT: .LBB0_4: 47; SOFT-NEXT: mov r0, r4 48; SOFT-NEXT: pop {r4, r5, r6, pc} 49; 50; VFP2-LABEL: test_signed_i1_f32: 51; VFP2: @ %bb.0: 52; VFP2-NEXT: vmov s0, r0 53; VFP2-NEXT: vmov.f32 s4, #1.000000e+00 54; VFP2-NEXT: vcvt.u32.f32 s2, s0 55; VFP2-NEXT: vcmp.f32 s0, #0 56; VFP2-NEXT: vmrs APSR_nzcv, fpscr 57; VFP2-NEXT: vcmp.f32 s0, s4 58; VFP2-NEXT: vmov r0, s2 59; VFP2-NEXT: it lt 60; VFP2-NEXT: movlt r0, #0 61; VFP2-NEXT: vmrs APSR_nzcv, fpscr 62; VFP2-NEXT: it gt 63; VFP2-NEXT: movgt r0, #1 64; VFP2-NEXT: bx lr 65; 66; FP16-LABEL: test_signed_i1_f32: 67; FP16: @ %bb.0: 68; FP16-NEXT: vldr s0, .LCPI0_0 69; FP16-NEXT: vmov s2, r0 70; FP16-NEXT: vmov.f32 s4, #1.000000e+00 71; FP16-NEXT: vmaxnm.f32 s0, s2, s0 72; FP16-NEXT: vminnm.f32 s0, s0, s4 73; FP16-NEXT: vcvt.u32.f32 s0, s0 74; FP16-NEXT: vmov r0, s0 75; FP16-NEXT: bx lr 76; FP16-NEXT: .p2align 2 77; FP16-NEXT: @ %bb.1: 78; FP16-NEXT: .LCPI0_0: 79; FP16-NEXT: .long 0x00000000 @ float 0 80 %x = call i1 @llvm.fptoui.sat.i1.f32(float %f) 81 ret i1 %x 82} 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, r0 90; SOFT-NEXT: movs r1, #0 91; SOFT-NEXT: bl __aeabi_fcmpge 92; SOFT-NEXT: mov r6, r0 93; SOFT-NEXT: mov r0, r5 94; SOFT-NEXT: bl __aeabi_f2uiz 95; SOFT-NEXT: mov r4, r0 96; SOFT-NEXT: cmp r6, #0 97; SOFT-NEXT: bne .LBB1_2 98; SOFT-NEXT: @ %bb.1: 99; SOFT-NEXT: mov r4, r6 100; SOFT-NEXT: .LBB1_2: 101; SOFT-NEXT: ldr r1, .LCPI1_0 102; SOFT-NEXT: mov r0, r5 103; SOFT-NEXT: bl __aeabi_fcmpgt 104; SOFT-NEXT: cmp r0, #0 105; SOFT-NEXT: beq .LBB1_4 106; SOFT-NEXT: @ %bb.3: 107; SOFT-NEXT: movs r4, #255 108; SOFT-NEXT: .LBB1_4: 109; SOFT-NEXT: mov r0, r4 110; SOFT-NEXT: pop {r4, r5, r6, pc} 111; SOFT-NEXT: .p2align 2 112; SOFT-NEXT: @ %bb.5: 113; SOFT-NEXT: .LCPI1_0: 114; SOFT-NEXT: .long 1132396544 @ 0x437f0000 115; 116; VFP2-LABEL: test_signed_i8_f32: 117; VFP2: @ %bb.0: 118; VFP2-NEXT: vmov s0, r0 119; VFP2-NEXT: vldr s4, .LCPI1_0 120; VFP2-NEXT: vcvt.u32.f32 s2, s0 121; VFP2-NEXT: vcmp.f32 s0, #0 122; VFP2-NEXT: vmrs APSR_nzcv, fpscr 123; VFP2-NEXT: vcmp.f32 s0, s4 124; VFP2-NEXT: vmov r0, s2 125; VFP2-NEXT: it lt 126; VFP2-NEXT: movlt r0, #0 127; VFP2-NEXT: vmrs APSR_nzcv, fpscr 128; VFP2-NEXT: it gt 129; VFP2-NEXT: movgt r0, #255 130; VFP2-NEXT: bx lr 131; VFP2-NEXT: .p2align 2 132; VFP2-NEXT: @ %bb.1: 133; VFP2-NEXT: .LCPI1_0: 134; VFP2-NEXT: .long 0x437f0000 @ float 255 135; 136; FP16-LABEL: test_signed_i8_f32: 137; FP16: @ %bb.0: 138; FP16-NEXT: vldr s0, .LCPI1_0 139; FP16-NEXT: vmov s2, r0 140; FP16-NEXT: vldr s4, .LCPI1_1 141; FP16-NEXT: vmaxnm.f32 s0, s2, s0 142; FP16-NEXT: vminnm.f32 s0, s0, s4 143; FP16-NEXT: vcvt.u32.f32 s0, s0 144; FP16-NEXT: vmov r0, s0 145; FP16-NEXT: bx lr 146; FP16-NEXT: .p2align 2 147; FP16-NEXT: @ %bb.1: 148; FP16-NEXT: .LCPI1_0: 149; FP16-NEXT: .long 0x00000000 @ float 0 150; FP16-NEXT: .LCPI1_1: 151; FP16-NEXT: .long 0x437f0000 @ float 255 152 %x = call i8 @llvm.fptoui.sat.i8.f32(float %f) 153 ret i8 %x 154} 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, r0 162; SOFT-NEXT: movs r1, #0 163; SOFT-NEXT: bl __aeabi_fcmpge 164; SOFT-NEXT: mov r6, r0 165; SOFT-NEXT: mov r0, r5 166; SOFT-NEXT: bl __aeabi_f2uiz 167; SOFT-NEXT: mov r4, r0 168; SOFT-NEXT: cmp r6, #0 169; SOFT-NEXT: bne .LBB2_2 170; SOFT-NEXT: @ %bb.1: 171; SOFT-NEXT: mov r4, r6 172; SOFT-NEXT: .LBB2_2: 173; SOFT-NEXT: ldr r1, .LCPI2_0 174; SOFT-NEXT: mov r0, r5 175; SOFT-NEXT: bl __aeabi_fcmpgt 176; SOFT-NEXT: cmp r0, #0 177; SOFT-NEXT: beq .LBB2_4 178; SOFT-NEXT: @ %bb.3: 179; SOFT-NEXT: ldr r4, .LCPI2_1 180; SOFT-NEXT: .LBB2_4: 181; SOFT-NEXT: mov r0, r4 182; SOFT-NEXT: pop {r4, r5, r6, pc} 183; SOFT-NEXT: .p2align 2 184; SOFT-NEXT: @ %bb.5: 185; SOFT-NEXT: .LCPI2_0: 186; SOFT-NEXT: .long 1174403072 @ 0x45fff800 187; SOFT-NEXT: .LCPI2_1: 188; SOFT-NEXT: .long 8191 @ 0x1fff 189; 190; VFP2-LABEL: test_signed_i13_f32: 191; VFP2: @ %bb.0: 192; VFP2-NEXT: vmov s0, r0 193; VFP2-NEXT: vldr s4, .LCPI2_0 194; VFP2-NEXT: vcvt.u32.f32 s2, s0 195; VFP2-NEXT: vcmp.f32 s0, #0 196; VFP2-NEXT: vmrs APSR_nzcv, fpscr 197; VFP2-NEXT: vcmp.f32 s0, s4 198; VFP2-NEXT: vmov r0, s2 199; VFP2-NEXT: it lt 200; VFP2-NEXT: movlt r0, #0 201; VFP2-NEXT: vmrs APSR_nzcv, fpscr 202; VFP2-NEXT: it gt 203; VFP2-NEXT: movwgt r0, #8191 204; VFP2-NEXT: bx lr 205; VFP2-NEXT: .p2align 2 206; VFP2-NEXT: @ %bb.1: 207; VFP2-NEXT: .LCPI2_0: 208; VFP2-NEXT: .long 0x45fff800 @ float 8191 209; 210; FP16-LABEL: test_signed_i13_f32: 211; FP16: @ %bb.0: 212; FP16-NEXT: vldr s0, .LCPI2_0 213; FP16-NEXT: vmov s2, r0 214; FP16-NEXT: vldr s4, .LCPI2_1 215; FP16-NEXT: vmaxnm.f32 s0, s2, s0 216; FP16-NEXT: vminnm.f32 s0, s0, s4 217; FP16-NEXT: vcvt.u32.f32 s0, s0 218; FP16-NEXT: vmov r0, s0 219; FP16-NEXT: bx lr 220; FP16-NEXT: .p2align 2 221; FP16-NEXT: @ %bb.1: 222; FP16-NEXT: .LCPI2_0: 223; FP16-NEXT: .long 0x00000000 @ float 0 224; FP16-NEXT: .LCPI2_1: 225; FP16-NEXT: .long 0x45fff800 @ float 8191 226 %x = call i13 @llvm.fptoui.sat.i13.f32(float %f) 227 ret i13 %x 228} 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, r0 236; SOFT-NEXT: movs r1, #0 237; SOFT-NEXT: bl __aeabi_fcmpge 238; SOFT-NEXT: mov r6, r0 239; SOFT-NEXT: mov r0, r5 240; SOFT-NEXT: bl __aeabi_f2uiz 241; SOFT-NEXT: mov r4, r0 242; SOFT-NEXT: cmp r6, #0 243; SOFT-NEXT: bne .LBB3_2 244; SOFT-NEXT: @ %bb.1: 245; SOFT-NEXT: mov r4, r6 246; SOFT-NEXT: .LBB3_2: 247; SOFT-NEXT: ldr r1, .LCPI3_0 248; SOFT-NEXT: mov r0, r5 249; SOFT-NEXT: bl __aeabi_fcmpgt 250; SOFT-NEXT: cmp r0, #0 251; SOFT-NEXT: beq .LBB3_4 252; SOFT-NEXT: @ %bb.3: 253; SOFT-NEXT: ldr r4, .LCPI3_1 254; SOFT-NEXT: .LBB3_4: 255; SOFT-NEXT: mov r0, r4 256; SOFT-NEXT: pop {r4, r5, r6, pc} 257; SOFT-NEXT: .p2align 2 258; SOFT-NEXT: @ %bb.5: 259; SOFT-NEXT: .LCPI3_0: 260; SOFT-NEXT: .long 1199570688 @ 0x477fff00 261; SOFT-NEXT: .LCPI3_1: 262; SOFT-NEXT: .long 65535 @ 0xffff 263; 264; VFP2-LABEL: test_signed_i16_f32: 265; VFP2: @ %bb.0: 266; VFP2-NEXT: vmov s0, r0 267; VFP2-NEXT: vldr s4, .LCPI3_0 268; VFP2-NEXT: vcvt.u32.f32 s2, s0 269; VFP2-NEXT: vcmp.f32 s0, #0 270; VFP2-NEXT: vmrs APSR_nzcv, fpscr 271; VFP2-NEXT: vcmp.f32 s0, s4 272; VFP2-NEXT: vmov r0, s2 273; VFP2-NEXT: it lt 274; VFP2-NEXT: movlt r0, #0 275; VFP2-NEXT: vmrs APSR_nzcv, fpscr 276; VFP2-NEXT: it gt 277; VFP2-NEXT: movwgt r0, #65535 278; VFP2-NEXT: bx lr 279; VFP2-NEXT: .p2align 2 280; VFP2-NEXT: @ %bb.1: 281; VFP2-NEXT: .LCPI3_0: 282; VFP2-NEXT: .long 0x477fff00 @ float 65535 283; 284; FP16-LABEL: test_signed_i16_f32: 285; FP16: @ %bb.0: 286; FP16-NEXT: vldr s0, .LCPI3_0 287; FP16-NEXT: vmov s2, r0 288; FP16-NEXT: vldr s4, .LCPI3_1 289; FP16-NEXT: vmaxnm.f32 s0, s2, s0 290; FP16-NEXT: vminnm.f32 s0, s0, s4 291; FP16-NEXT: vcvt.u32.f32 s0, s0 292; FP16-NEXT: vmov r0, s0 293; FP16-NEXT: bx lr 294; FP16-NEXT: .p2align 2 295; FP16-NEXT: @ %bb.1: 296; FP16-NEXT: .LCPI3_0: 297; FP16-NEXT: .long 0x00000000 @ float 0 298; FP16-NEXT: .LCPI3_1: 299; FP16-NEXT: .long 0x477fff00 @ float 65535 300 %x = call i16 @llvm.fptoui.sat.i16.f32(float %f) 301 ret i16 %x 302} 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, r0 310; SOFT-NEXT: movs r1, #0 311; SOFT-NEXT: bl __aeabi_fcmpge 312; SOFT-NEXT: mov r6, r0 313; SOFT-NEXT: mov r0, r5 314; SOFT-NEXT: bl __aeabi_f2uiz 315; SOFT-NEXT: mov r4, r0 316; SOFT-NEXT: cmp r6, #0 317; SOFT-NEXT: bne .LBB4_2 318; SOFT-NEXT: @ %bb.1: 319; SOFT-NEXT: mov r4, r6 320; SOFT-NEXT: .LBB4_2: 321; SOFT-NEXT: ldr r1, .LCPI4_0 322; SOFT-NEXT: mov r0, r5 323; SOFT-NEXT: bl __aeabi_fcmpgt 324; SOFT-NEXT: cmp r0, #0 325; SOFT-NEXT: beq .LBB4_4 326; SOFT-NEXT: @ %bb.3: 327; SOFT-NEXT: ldr r4, .LCPI4_1 328; SOFT-NEXT: .LBB4_4: 329; SOFT-NEXT: mov r0, r4 330; SOFT-NEXT: pop {r4, r5, r6, pc} 331; SOFT-NEXT: .p2align 2 332; SOFT-NEXT: @ %bb.5: 333; SOFT-NEXT: .LCPI4_0: 334; SOFT-NEXT: .long 1224736736 @ 0x48ffffe0 335; SOFT-NEXT: .LCPI4_1: 336; SOFT-NEXT: .long 524287 @ 0x7ffff 337; 338; VFP2-LABEL: test_signed_i19_f32: 339; VFP2: @ %bb.0: 340; VFP2-NEXT: vmov s0, r0 341; VFP2-NEXT: vldr s4, .LCPI4_0 342; VFP2-NEXT: vcvt.u32.f32 s2, s0 343; VFP2-NEXT: vcmp.f32 s0, #0 344; VFP2-NEXT: vmrs APSR_nzcv, fpscr 345; VFP2-NEXT: vcmp.f32 s0, s4 346; VFP2-NEXT: vmov r0, s2 347; VFP2-NEXT: it lt 348; VFP2-NEXT: movlt r0, #0 349; VFP2-NEXT: vmrs APSR_nzcv, fpscr 350; VFP2-NEXT: itt gt 351; VFP2-NEXT: movwgt r0, #65535 352; VFP2-NEXT: movtgt r0, #7 353; VFP2-NEXT: bx lr 354; VFP2-NEXT: .p2align 2 355; VFP2-NEXT: @ %bb.1: 356; VFP2-NEXT: .LCPI4_0: 357; VFP2-NEXT: .long 0x48ffffe0 @ float 524287 358; 359; FP16-LABEL: test_signed_i19_f32: 360; FP16: @ %bb.0: 361; FP16-NEXT: vldr s0, .LCPI4_0 362; FP16-NEXT: vmov s2, r0 363; FP16-NEXT: vldr s4, .LCPI4_1 364; FP16-NEXT: vmaxnm.f32 s0, s2, s0 365; FP16-NEXT: vminnm.f32 s0, s0, s4 366; FP16-NEXT: vcvt.u32.f32 s0, s0 367; FP16-NEXT: vmov r0, s0 368; FP16-NEXT: bx lr 369; FP16-NEXT: .p2align 2 370; FP16-NEXT: @ %bb.1: 371; FP16-NEXT: .LCPI4_0: 372; FP16-NEXT: .long 0x00000000 @ float 0 373; FP16-NEXT: .LCPI4_1: 374; FP16-NEXT: .long 0x48ffffe0 @ float 524287 375 %x = call i19 @llvm.fptoui.sat.i19.f32(float %f) 376 ret i19 %x 377} 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 #4 385; SOFT-NEXT: sub sp, #4 386; SOFT-NEXT: mov r6, r0 387; SOFT-NEXT: movs r4, #0 388; SOFT-NEXT: mov r1, r4 389; SOFT-NEXT: bl __aeabi_fcmpge 390; SOFT-NEXT: mov r7, r0 391; SOFT-NEXT: mov r0, r6 392; SOFT-NEXT: bl __aeabi_f2uiz 393; SOFT-NEXT: mov r5, r0 394; SOFT-NEXT: cmp r7, #0 395; SOFT-NEXT: bne .LBB5_2 396; SOFT-NEXT: @ %bb.1: 397; SOFT-NEXT: mov r5, r7 398; SOFT-NEXT: .LBB5_2: 399; SOFT-NEXT: ldr r1, .LCPI5_0 400; SOFT-NEXT: mov r0, r6 401; SOFT-NEXT: bl __aeabi_fcmpgt 402; SOFT-NEXT: cmp r0, #0 403; SOFT-NEXT: beq .LBB5_4 404; SOFT-NEXT: @ %bb.3: 405; SOFT-NEXT: mvns r5, r4 406; SOFT-NEXT: .LBB5_4: 407; SOFT-NEXT: mov r0, r5 408; SOFT-NEXT: add sp, #4 409; SOFT-NEXT: pop {r4, r5, r6, r7, pc} 410; SOFT-NEXT: .p2align 2 411; SOFT-NEXT: @ %bb.5: 412; SOFT-NEXT: .LCPI5_0: 413; SOFT-NEXT: .long 1333788671 @ 0x4f7fffff 414; 415; VFP-LABEL: test_signed_i32_f32: 416; VFP: @ %bb.0: 417; VFP-NEXT: vmov s0, r0 418; VFP-NEXT: vcvt.u32.f32 s0, s0 419; VFP-NEXT: vmov r0, s0 420; VFP-NEXT: bx lr 421 %x = call i32 @llvm.fptoui.sat.i32.f32(float %f) 422 ret i32 %x 423} 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 #4 431; SOFT-NEXT: sub sp, #4 432; SOFT-NEXT: mov r6, r0 433; SOFT-NEXT: movs r5, #0 434; SOFT-NEXT: mov r1, r5 435; SOFT-NEXT: bl __aeabi_fcmpge 436; SOFT-NEXT: mov r4, r0 437; SOFT-NEXT: mov r0, r6 438; SOFT-NEXT: bl __aeabi_f2ulz 439; SOFT-NEXT: mov r7, r1 440; SOFT-NEXT: cmp r4, #0 441; SOFT-NEXT: bne .LBB6_2 442; SOFT-NEXT: @ %bb.1: 443; SOFT-NEXT: mov r7, r4 444; SOFT-NEXT: .LBB6_2: 445; SOFT-NEXT: bne .LBB6_4 446; SOFT-NEXT: @ %bb.3: 447; SOFT-NEXT: mov r0, r4 448; SOFT-NEXT: .LBB6_4: 449; SOFT-NEXT: mov r4, r0 450; SOFT-NEXT: ldr r1, .LCPI6_0 451; SOFT-NEXT: mov r0, r6 452; SOFT-NEXT: bl __aeabi_fcmpgt 453; SOFT-NEXT: mov r1, r0 454; SOFT-NEXT: mvns r0, r5 455; SOFT-NEXT: cmp r1, #0 456; SOFT-NEXT: bne .LBB6_6 457; SOFT-NEXT: @ %bb.5: 458; SOFT-NEXT: mov r0, r4 459; SOFT-NEXT: .LBB6_6: 460; SOFT-NEXT: beq .LBB6_8 461; SOFT-NEXT: @ %bb.7: 462; SOFT-NEXT: ldr r7, .LCPI6_1 463; SOFT-NEXT: .LBB6_8: 464; SOFT-NEXT: mov r1, r7 465; SOFT-NEXT: add sp, #4 466; SOFT-NEXT: pop {r4, r5, r6, r7, pc} 467; SOFT-NEXT: .p2align 2 468; SOFT-NEXT: @ %bb.9: 469; SOFT-NEXT: .LCPI6_0: 470; SOFT-NEXT: .long 1484783615 @ 0x587fffff 471; SOFT-NEXT: .LCPI6_1: 472; SOFT-NEXT: .long 262143 @ 0x3ffff 473; 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, r0 481; VFP-NEXT: bl __aeabi_f2ulz 482; VFP-NEXT: vldr s0, .LCPI6_0 483; VFP-NEXT: vcmp.f32 s16, #0 484; VFP-NEXT: vmrs APSR_nzcv, fpscr 485; VFP-NEXT: itt lt 486; VFP-NEXT: movlt r1, #0 487; VFP-NEXT: movlt r0, #0 488; VFP-NEXT: vcmp.f32 s16, s0 489; VFP-NEXT: vmrs APSR_nzcv, fpscr 490; VFP-NEXT: ittt gt 491; VFP-NEXT: movwgt r1, #65535 492; VFP-NEXT: movtgt r1, #3 493; VFP-NEXT: movgt.w r0, #-1 494; VFP-NEXT: vpop {d8} 495; VFP-NEXT: pop {r7, pc} 496; VFP-NEXT: .p2align 2 497; VFP-NEXT: @ %bb.1: 498; VFP-NEXT: .LCPI6_0: 499; VFP-NEXT: .long 0x587fffff @ float 1.12589984E+15 500 %x = call i50 @llvm.fptoui.sat.i50.f32(float %f) 501 ret i50 %x 502} 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 #4 510; SOFT-NEXT: sub sp, #4 511; SOFT-NEXT: mov r6, r0 512; SOFT-NEXT: movs r4, #0 513; SOFT-NEXT: mov r1, r4 514; SOFT-NEXT: bl __aeabi_fcmpge 515; SOFT-NEXT: mov r5, r0 516; SOFT-NEXT: mov r0, r6 517; SOFT-NEXT: bl __aeabi_f2ulz 518; SOFT-NEXT: mov r7, r0 519; SOFT-NEXT: cmp r5, #0 520; SOFT-NEXT: bne .LBB7_2 521; SOFT-NEXT: @ %bb.1: 522; SOFT-NEXT: mov r1, r5 523; SOFT-NEXT: .LBB7_2: 524; SOFT-NEXT: str r1, [sp] @ 4-byte Spill 525; SOFT-NEXT: bne .LBB7_4 526; SOFT-NEXT: @ %bb.3: 527; SOFT-NEXT: mov r7, r5 528; SOFT-NEXT: .LBB7_4: 529; SOFT-NEXT: ldr r1, .LCPI7_0 530; SOFT-NEXT: mov r0, r6 531; SOFT-NEXT: bl __aeabi_fcmpgt 532; SOFT-NEXT: mvns r1, r4 533; SOFT-NEXT: cmp r0, #0 534; SOFT-NEXT: mov r0, r1 535; SOFT-NEXT: beq .LBB7_7 536; SOFT-NEXT: @ %bb.5: 537; SOFT-NEXT: beq .LBB7_8 538; SOFT-NEXT: .LBB7_6: 539; SOFT-NEXT: add sp, #4 540; SOFT-NEXT: pop {r4, r5, r6, r7, pc} 541; SOFT-NEXT: .LBB7_7: 542; SOFT-NEXT: mov r0, r7 543; SOFT-NEXT: bne .LBB7_6 544; SOFT-NEXT: .LBB7_8: 545; SOFT-NEXT: ldr r1, [sp] @ 4-byte Reload 546; SOFT-NEXT: add sp, #4 547; SOFT-NEXT: pop {r4, r5, r6, r7, pc} 548; SOFT-NEXT: .p2align 2 549; SOFT-NEXT: @ %bb.9: 550; SOFT-NEXT: .LCPI7_0: 551; SOFT-NEXT: .long 1602224127 @ 0x5f7fffff 552; 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, r0 560; VFP-NEXT: bl __aeabi_f2ulz 561; VFP-NEXT: vldr s0, .LCPI7_0 562; VFP-NEXT: vcmp.f32 s16, #0 563; VFP-NEXT: vmrs APSR_nzcv, fpscr 564; VFP-NEXT: itt lt 565; VFP-NEXT: movlt r1, #0 566; VFP-NEXT: movlt r0, #0 567; VFP-NEXT: vcmp.f32 s16, s0 568; VFP-NEXT: vmrs APSR_nzcv, fpscr 569; VFP-NEXT: itt gt 570; VFP-NEXT: movgt.w r0, #-1 571; VFP-NEXT: movgt.w r1, #-1 572; VFP-NEXT: vpop {d8} 573; VFP-NEXT: pop {r7, pc} 574; VFP-NEXT: .p2align 2 575; VFP-NEXT: @ %bb.1: 576; VFP-NEXT: .LCPI7_0: 577; VFP-NEXT: .long 0x5f7fffff @ float 1.8446743E+19 578 %x = call i64 @llvm.fptoui.sat.i64.f32(float %f) 579 ret i64 %x 580} 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 #12 588; SOFT-NEXT: sub sp, #12 589; SOFT-NEXT: mov r4, r0 590; SOFT-NEXT: movs r6, #0 591; SOFT-NEXT: mov r1, r6 592; SOFT-NEXT: bl __aeabi_fcmpge 593; SOFT-NEXT: mov r7, r0 594; SOFT-NEXT: mov r0, r4 595; SOFT-NEXT: bl __fixunssfti 596; SOFT-NEXT: mov r5, r0 597; SOFT-NEXT: cmp r7, #0 598; SOFT-NEXT: beq .LBB8_11 599; SOFT-NEXT: @ %bb.1: 600; SOFT-NEXT: beq .LBB8_12 601; SOFT-NEXT: .LBB8_2: 602; SOFT-NEXT: bne .LBB8_4 603; SOFT-NEXT: .LBB8_3: 604; SOFT-NEXT: mov r1, r7 605; SOFT-NEXT: .LBB8_4: 606; SOFT-NEXT: str r1, [sp] @ 4-byte Spill 607; SOFT-NEXT: str r2, [sp, #4] @ 4-byte Spill 608; SOFT-NEXT: str r3, [sp, #8] @ 4-byte Spill 609; SOFT-NEXT: bne .LBB8_6 610; SOFT-NEXT: @ %bb.5: 611; SOFT-NEXT: mov r5, r7 612; SOFT-NEXT: .LBB8_6: 613; SOFT-NEXT: ldr r1, .LCPI8_0 614; SOFT-NEXT: mov r0, r4 615; SOFT-NEXT: bl __aeabi_fcmpgt 616; SOFT-NEXT: mvns r2, r6 617; SOFT-NEXT: movs r3, #15 618; SOFT-NEXT: cmp r0, #0 619; SOFT-NEXT: mov r0, r2 620; SOFT-NEXT: beq .LBB8_13 621; SOFT-NEXT: @ %bb.7: 622; SOFT-NEXT: mov r1, r2 623; SOFT-NEXT: beq .LBB8_14 624; SOFT-NEXT: .LBB8_8: 625; SOFT-NEXT: beq .LBB8_15 626; SOFT-NEXT: .LBB8_9: 627; SOFT-NEXT: beq .LBB8_16 628; SOFT-NEXT: .LBB8_10: 629; SOFT-NEXT: add sp, #12 630; SOFT-NEXT: pop {r4, r5, r6, r7, pc} 631; SOFT-NEXT: .LBB8_11: 632; SOFT-NEXT: mov r3, r7 633; SOFT-NEXT: bne .LBB8_2 634; SOFT-NEXT: .LBB8_12: 635; SOFT-NEXT: mov r2, r7 636; SOFT-NEXT: beq .LBB8_3 637; SOFT-NEXT: b .LBB8_4 638; SOFT-NEXT: .LBB8_13: 639; SOFT-NEXT: mov r0, r5 640; SOFT-NEXT: mov r1, r2 641; SOFT-NEXT: bne .LBB8_8 642; SOFT-NEXT: .LBB8_14: 643; SOFT-NEXT: ldr r1, [sp] @ 4-byte Reload 644; SOFT-NEXT: bne .LBB8_9 645; SOFT-NEXT: .LBB8_15: 646; SOFT-NEXT: ldr r2, [sp, #4] @ 4-byte Reload 647; SOFT-NEXT: bne .LBB8_10 648; SOFT-NEXT: .LBB8_16: 649; SOFT-NEXT: ldr r3, [sp, #8] @ 4-byte Reload 650; SOFT-NEXT: add sp, #12 651; SOFT-NEXT: pop {r4, r5, r6, r7, pc} 652; SOFT-NEXT: .p2align 2 653; SOFT-NEXT: @ %bb.17: 654; SOFT-NEXT: .LCPI8_0: 655; SOFT-NEXT: .long 1904214015 @ 0x717fffff 656; 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, r0 664; VFP-NEXT: bl __fixunssfti 665; VFP-NEXT: vldr s0, .LCPI8_0 666; VFP-NEXT: vcmp.f32 s16, #0 667; VFP-NEXT: vmrs APSR_nzcv, fpscr 668; VFP-NEXT: itttt lt 669; VFP-NEXT: movlt r3, #0 670; VFP-NEXT: movlt r2, #0 671; VFP-NEXT: movlt r1, #0 672; VFP-NEXT: movlt r0, #0 673; VFP-NEXT: vcmp.f32 s16, s0 674; VFP-NEXT: vmrs APSR_nzcv, fpscr 675; VFP-NEXT: itttt gt 676; VFP-NEXT: movgt.w r0, #-1 677; VFP-NEXT: movgt.w r1, #-1 678; VFP-NEXT: movgt.w r2, #-1 679; VFP-NEXT: movgt r3, #15 680; VFP-NEXT: vpop {d8} 681; VFP-NEXT: pop {r7, pc} 682; VFP-NEXT: .p2align 2 683; VFP-NEXT: @ %bb.1: 684; VFP-NEXT: .LCPI8_0: 685; VFP-NEXT: .long 0x717fffff @ float 1.26765052E+30 686 %x = call i100 @llvm.fptoui.sat.i100.f32(float %f) 687 ret i100 %x 688} 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 #12 696; SOFT-NEXT: sub sp, #12 697; SOFT-NEXT: mov r4, r0 698; SOFT-NEXT: movs r6, #0 699; SOFT-NEXT: mov r1, r6 700; SOFT-NEXT: bl __aeabi_fcmpge 701; SOFT-NEXT: mov r7, r0 702; SOFT-NEXT: mov r0, r4 703; SOFT-NEXT: bl __fixunssfti 704; SOFT-NEXT: mov r5, r0 705; SOFT-NEXT: cmp r7, #0 706; SOFT-NEXT: beq .LBB9_11 707; SOFT-NEXT: @ %bb.1: 708; SOFT-NEXT: beq .LBB9_12 709; SOFT-NEXT: .LBB9_2: 710; SOFT-NEXT: bne .LBB9_4 711; SOFT-NEXT: .LBB9_3: 712; SOFT-NEXT: mov r1, r7 713; SOFT-NEXT: .LBB9_4: 714; SOFT-NEXT: str r1, [sp] @ 4-byte Spill 715; SOFT-NEXT: str r2, [sp, #4] @ 4-byte Spill 716; SOFT-NEXT: str r3, [sp, #8] @ 4-byte Spill 717; SOFT-NEXT: bne .LBB9_6 718; SOFT-NEXT: @ %bb.5: 719; SOFT-NEXT: mov r5, r7 720; SOFT-NEXT: .LBB9_6: 721; SOFT-NEXT: ldr r1, .LCPI9_0 722; SOFT-NEXT: mov r0, r4 723; SOFT-NEXT: bl __aeabi_fcmpgt 724; SOFT-NEXT: mvns r3, r6 725; SOFT-NEXT: cmp r0, #0 726; SOFT-NEXT: mov r0, r3 727; SOFT-NEXT: beq .LBB9_13 728; SOFT-NEXT: @ %bb.7: 729; SOFT-NEXT: mov r1, r3 730; SOFT-NEXT: beq .LBB9_14 731; SOFT-NEXT: .LBB9_8: 732; SOFT-NEXT: mov r2, r3 733; SOFT-NEXT: beq .LBB9_15 734; SOFT-NEXT: .LBB9_9: 735; SOFT-NEXT: beq .LBB9_16 736; SOFT-NEXT: .LBB9_10: 737; SOFT-NEXT: add sp, #12 738; SOFT-NEXT: pop {r4, r5, r6, r7, pc} 739; SOFT-NEXT: .LBB9_11: 740; SOFT-NEXT: mov r3, r7 741; SOFT-NEXT: bne .LBB9_2 742; SOFT-NEXT: .LBB9_12: 743; SOFT-NEXT: mov r2, r7 744; SOFT-NEXT: beq .LBB9_3 745; SOFT-NEXT: b .LBB9_4 746; SOFT-NEXT: .LBB9_13: 747; SOFT-NEXT: mov r0, r5 748; SOFT-NEXT: mov r1, r3 749; SOFT-NEXT: bne .LBB9_8 750; SOFT-NEXT: .LBB9_14: 751; SOFT-NEXT: ldr r1, [sp] @ 4-byte Reload 752; SOFT-NEXT: mov r2, r3 753; SOFT-NEXT: bne .LBB9_9 754; SOFT-NEXT: .LBB9_15: 755; SOFT-NEXT: ldr r2, [sp, #4] @ 4-byte Reload 756; SOFT-NEXT: bne .LBB9_10 757; SOFT-NEXT: .LBB9_16: 758; SOFT-NEXT: ldr r3, [sp, #8] @ 4-byte Reload 759; SOFT-NEXT: add sp, #12 760; SOFT-NEXT: pop {r4, r5, r6, r7, pc} 761; SOFT-NEXT: .p2align 2 762; SOFT-NEXT: @ %bb.17: 763; SOFT-NEXT: .LCPI9_0: 764; SOFT-NEXT: .long 2139095039 @ 0x7f7fffff 765; 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, r0 773; VFP-NEXT: bl __fixunssfti 774; VFP-NEXT: vldr s0, .LCPI9_0 775; VFP-NEXT: vcmp.f32 s16, #0 776; VFP-NEXT: vmrs APSR_nzcv, fpscr 777; VFP-NEXT: itttt lt 778; VFP-NEXT: movlt r3, #0 779; VFP-NEXT: movlt r2, #0 780; VFP-NEXT: movlt r1, #0 781; VFP-NEXT: movlt r0, #0 782; VFP-NEXT: vcmp.f32 s16, s0 783; VFP-NEXT: vmrs APSR_nzcv, fpscr 784; VFP-NEXT: itttt gt 785; VFP-NEXT: movgt.w r0, #-1 786; VFP-NEXT: movgt.w r1, #-1 787; VFP-NEXT: movgt.w r2, #-1 788; VFP-NEXT: movgt.w r3, #-1 789; VFP-NEXT: vpop {d8} 790; VFP-NEXT: pop {r7, pc} 791; VFP-NEXT: .p2align 2 792; VFP-NEXT: @ %bb.1: 793; VFP-NEXT: .LCPI9_0: 794; VFP-NEXT: .long 0x7f7fffff @ float 3.40282347E+38 795 %x = call i128 @llvm.fptoui.sat.i128.f32(float %f) 796 ret i128 %x 797} 798 799; 800; 64-bit float to signed integer 801; 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 #4 820; SOFT-NEXT: sub sp, #4 821; SOFT-NEXT: mov r4, r1 822; SOFT-NEXT: mov r5, r0 823; SOFT-NEXT: movs r6, #0 824; SOFT-NEXT: mov r2, r6 825; SOFT-NEXT: mov r3, r6 826; SOFT-NEXT: bl __aeabi_dcmpge 827; SOFT-NEXT: mov r7, r0 828; SOFT-NEXT: mov r0, r5 829; SOFT-NEXT: mov r1, r4 830; SOFT-NEXT: bl __aeabi_d2uiz 831; SOFT-NEXT: cmp r7, #0 832; SOFT-NEXT: bne .LBB10_2 833; SOFT-NEXT: @ %bb.1: 834; SOFT-NEXT: mov r0, r7 835; SOFT-NEXT: .LBB10_2: 836; SOFT-NEXT: mov r7, r0 837; SOFT-NEXT: ldr r3, .LCPI10_0 838; SOFT-NEXT: mov r0, r5 839; SOFT-NEXT: mov r1, r4 840; SOFT-NEXT: mov r2, r6 841; SOFT-NEXT: bl __aeabi_dcmpgt 842; SOFT-NEXT: cmp r0, #0 843; SOFT-NEXT: bne .LBB10_4 844; SOFT-NEXT: @ %bb.3: 845; SOFT-NEXT: mov r0, r7 846; SOFT-NEXT: add sp, #4 847; SOFT-NEXT: pop {r4, r5, r6, r7, pc} 848; SOFT-NEXT: .LBB10_4: 849; SOFT-NEXT: movs r0, #1 850; SOFT-NEXT: add sp, #4 851; SOFT-NEXT: pop {r4, r5, r6, r7, pc} 852; SOFT-NEXT: .p2align 2 853; SOFT-NEXT: @ %bb.5: 854; SOFT-NEXT: .LCPI10_0: 855; SOFT-NEXT: .long 1072693248 @ 0x3ff00000 856; 857; VFP2-LABEL: test_signed_i1_f64: 858; VFP2: @ %bb.0: 859; VFP2-NEXT: vmov d16, r0, r1 860; VFP2-NEXT: vcmp.f64 d16, #0 861; VFP2-NEXT: vcvt.u32.f64 s0, d16 862; VFP2-NEXT: vmov.f64 d17, #1.000000e+00 863; VFP2-NEXT: vmrs APSR_nzcv, fpscr 864; VFP2-NEXT: vmov r0, s0 865; VFP2-NEXT: vcmp.f64 d16, d17 866; VFP2-NEXT: it lt 867; VFP2-NEXT: movlt r0, #0 868; VFP2-NEXT: vmrs APSR_nzcv, fpscr 869; VFP2-NEXT: it gt 870; VFP2-NEXT: movgt r0, #1 871; VFP2-NEXT: bx lr 872; 873; FP16-LABEL: test_signed_i1_f64: 874; FP16: @ %bb.0: 875; FP16-NEXT: vmov.f64 d0, #1.000000e+00 876; FP16-NEXT: vldr d1, .LCPI10_0 877; FP16-NEXT: vmov d2, r0, r1 878; FP16-NEXT: vmaxnm.f64 d1, d2, d1 879; FP16-NEXT: vminnm.f64 d0, d1, d0 880; FP16-NEXT: vcvt.u32.f64 s0, d0 881; FP16-NEXT: vmov r0, s0 882; FP16-NEXT: bx lr 883; FP16-NEXT: .p2align 3 884; FP16-NEXT: @ %bb.1: 885; FP16-NEXT: .LCPI10_0: 886; FP16-NEXT: .long 0 @ double 0 887; FP16-NEXT: .long 0 888 %x = call i1 @llvm.fptoui.sat.i1.f64(double %f) 889 ret i1 %x 890} 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 #4 898; SOFT-NEXT: sub sp, #4 899; SOFT-NEXT: mov r4, r1 900; SOFT-NEXT: mov r5, r0 901; SOFT-NEXT: movs r6, #0 902; SOFT-NEXT: mov r2, r6 903; SOFT-NEXT: mov r3, r6 904; SOFT-NEXT: bl __aeabi_dcmpge 905; SOFT-NEXT: mov r7, r0 906; SOFT-NEXT: mov r0, r5 907; SOFT-NEXT: mov r1, r4 908; SOFT-NEXT: bl __aeabi_d2uiz 909; SOFT-NEXT: cmp r7, #0 910; SOFT-NEXT: bne .LBB11_2 911; SOFT-NEXT: @ %bb.1: 912; SOFT-NEXT: mov r0, r7 913; SOFT-NEXT: .LBB11_2: 914; SOFT-NEXT: mov r7, r0 915; SOFT-NEXT: ldr r3, .LCPI11_0 916; SOFT-NEXT: mov r0, r5 917; SOFT-NEXT: mov r1, r4 918; SOFT-NEXT: mov r2, r6 919; SOFT-NEXT: bl __aeabi_dcmpgt 920; SOFT-NEXT: cmp r0, #0 921; SOFT-NEXT: bne .LBB11_4 922; SOFT-NEXT: @ %bb.3: 923; SOFT-NEXT: mov r0, r7 924; SOFT-NEXT: add sp, #4 925; SOFT-NEXT: pop {r4, r5, r6, r7, pc} 926; SOFT-NEXT: .LBB11_4: 927; SOFT-NEXT: movs r0, #255 928; SOFT-NEXT: add sp, #4 929; SOFT-NEXT: pop {r4, r5, r6, r7, pc} 930; SOFT-NEXT: .p2align 2 931; SOFT-NEXT: @ %bb.5: 932; SOFT-NEXT: .LCPI11_0: 933; SOFT-NEXT: .long 1081073664 @ 0x406fe000 934; 935; VFP2-LABEL: test_signed_i8_f64: 936; VFP2: @ %bb.0: 937; VFP2-NEXT: vmov d16, r0, r1 938; VFP2-NEXT: vldr d17, .LCPI11_0 939; VFP2-NEXT: vcmp.f64 d16, #0 940; VFP2-NEXT: vcvt.u32.f64 s0, d16 941; VFP2-NEXT: vmrs APSR_nzcv, fpscr 942; VFP2-NEXT: vmov r0, s0 943; VFP2-NEXT: vcmp.f64 d16, d17 944; VFP2-NEXT: it lt 945; VFP2-NEXT: movlt r0, #0 946; VFP2-NEXT: vmrs APSR_nzcv, fpscr 947; VFP2-NEXT: it gt 948; VFP2-NEXT: movgt r0, #255 949; VFP2-NEXT: bx lr 950; VFP2-NEXT: .p2align 3 951; VFP2-NEXT: @ %bb.1: 952; VFP2-NEXT: .LCPI11_0: 953; VFP2-NEXT: .long 0 @ double 255 954; VFP2-NEXT: .long 1081073664 955; 956; FP16-LABEL: test_signed_i8_f64: 957; FP16: @ %bb.0: 958; FP16-NEXT: vldr d0, .LCPI11_0 959; FP16-NEXT: vmov d1, r0, r1 960; FP16-NEXT: vldr d2, .LCPI11_1 961; FP16-NEXT: vmaxnm.f64 d0, d1, d0 962; FP16-NEXT: vminnm.f64 d0, d0, d2 963; FP16-NEXT: vcvt.u32.f64 s0, d0 964; FP16-NEXT: vmov r0, s0 965; FP16-NEXT: bx lr 966; FP16-NEXT: .p2align 3 967; FP16-NEXT: @ %bb.1: 968; FP16-NEXT: .LCPI11_0: 969; FP16-NEXT: .long 0 @ double 0 970; FP16-NEXT: .long 0 971; FP16-NEXT: .LCPI11_1: 972; FP16-NEXT: .long 0 @ double 255 973; FP16-NEXT: .long 1081073664 974 %x = call i8 @llvm.fptoui.sat.i8.f64(double %f) 975 ret i8 %x 976} 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 #4 984; SOFT-NEXT: sub sp, #4 985; SOFT-NEXT: mov r4, r1 986; SOFT-NEXT: mov r5, r0 987; SOFT-NEXT: movs r6, #0 988; SOFT-NEXT: mov r2, r6 989; SOFT-NEXT: mov r3, r6 990; SOFT-NEXT: bl __aeabi_dcmpge 991; SOFT-NEXT: mov r7, r0 992; SOFT-NEXT: mov r0, r5 993; SOFT-NEXT: mov r1, r4 994; SOFT-NEXT: bl __aeabi_d2uiz 995; SOFT-NEXT: cmp r7, #0 996; SOFT-NEXT: bne .LBB12_2 997; SOFT-NEXT: @ %bb.1: 998; SOFT-NEXT: mov r0, r7 999; SOFT-NEXT: .LBB12_2: 1000; SOFT-NEXT: mov r7, r0 1001; SOFT-NEXT: ldr r3, .LCPI12_0 1002; SOFT-NEXT: mov r0, r5 1003; SOFT-NEXT: mov r1, r4 1004; SOFT-NEXT: mov r2, r6 1005; SOFT-NEXT: bl __aeabi_dcmpgt 1006; SOFT-NEXT: cmp r0, #0 1007; SOFT-NEXT: bne .LBB12_4 1008; SOFT-NEXT: @ %bb.3: 1009; SOFT-NEXT: mov r0, r7 1010; SOFT-NEXT: add sp, #4 1011; SOFT-NEXT: pop {r4, r5, r6, r7, pc} 1012; SOFT-NEXT: .LBB12_4: 1013; SOFT-NEXT: ldr r0, .LCPI12_1 1014; SOFT-NEXT: add sp, #4 1015; SOFT-NEXT: pop {r4, r5, r6, r7, pc} 1016; SOFT-NEXT: .p2align 2 1017; SOFT-NEXT: @ %bb.5: 1018; SOFT-NEXT: .LCPI12_0: 1019; SOFT-NEXT: .long 1086324480 @ 0x40bfff00 1020; SOFT-NEXT: .LCPI12_1: 1021; SOFT-NEXT: .long 8191 @ 0x1fff 1022; 1023; VFP2-LABEL: test_signed_i13_f64: 1024; VFP2: @ %bb.0: 1025; VFP2-NEXT: vmov d16, r0, r1 1026; VFP2-NEXT: vldr d17, .LCPI12_0 1027; VFP2-NEXT: vcmp.f64 d16, #0 1028; VFP2-NEXT: vcvt.u32.f64 s0, d16 1029; VFP2-NEXT: vmrs APSR_nzcv, fpscr 1030; VFP2-NEXT: vmov r0, s0 1031; VFP2-NEXT: vcmp.f64 d16, d17 1032; VFP2-NEXT: it lt 1033; VFP2-NEXT: movlt r0, #0 1034; VFP2-NEXT: vmrs APSR_nzcv, fpscr 1035; VFP2-NEXT: it gt 1036; VFP2-NEXT: movwgt r0, #8191 1037; VFP2-NEXT: bx lr 1038; VFP2-NEXT: .p2align 3 1039; VFP2-NEXT: @ %bb.1: 1040; VFP2-NEXT: .LCPI12_0: 1041; VFP2-NEXT: .long 0 @ double 8191 1042; VFP2-NEXT: .long 1086324480 1043; 1044; FP16-LABEL: test_signed_i13_f64: 1045; FP16: @ %bb.0: 1046; FP16-NEXT: vldr d0, .LCPI12_0 1047; FP16-NEXT: vmov d1, r0, r1 1048; FP16-NEXT: vldr d2, .LCPI12_1 1049; FP16-NEXT: vmaxnm.f64 d0, d1, d0 1050; FP16-NEXT: vminnm.f64 d0, d0, d2 1051; FP16-NEXT: vcvt.u32.f64 s0, d0 1052; FP16-NEXT: vmov r0, s0 1053; FP16-NEXT: bx lr 1054; FP16-NEXT: .p2align 3 1055; FP16-NEXT: @ %bb.1: 1056; FP16-NEXT: .LCPI12_0: 1057; FP16-NEXT: .long 0 @ double 0 1058; FP16-NEXT: .long 0 1059; FP16-NEXT: .LCPI12_1: 1060; FP16-NEXT: .long 0 @ double 8191 1061; FP16-NEXT: .long 1086324480 1062 %x = call i13 @llvm.fptoui.sat.i13.f64(double %f) 1063 ret i13 %x 1064} 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 #4 1072; SOFT-NEXT: sub sp, #4 1073; SOFT-NEXT: mov r4, r1 1074; SOFT-NEXT: mov r5, r0 1075; SOFT-NEXT: movs r6, #0 1076; SOFT-NEXT: mov r2, r6 1077; SOFT-NEXT: mov r3, r6 1078; SOFT-NEXT: bl __aeabi_dcmpge 1079; SOFT-NEXT: mov r7, r0 1080; SOFT-NEXT: mov r0, r5 1081; SOFT-NEXT: mov r1, r4 1082; SOFT-NEXT: bl __aeabi_d2uiz 1083; SOFT-NEXT: cmp r7, #0 1084; SOFT-NEXT: bne .LBB13_2 1085; SOFT-NEXT: @ %bb.1: 1086; SOFT-NEXT: mov r0, r7 1087; SOFT-NEXT: .LBB13_2: 1088; SOFT-NEXT: mov r7, r0 1089; SOFT-NEXT: ldr r3, .LCPI13_0 1090; SOFT-NEXT: mov r0, r5 1091; SOFT-NEXT: mov r1, r4 1092; SOFT-NEXT: mov r2, r6 1093; SOFT-NEXT: bl __aeabi_dcmpgt 1094; SOFT-NEXT: cmp r0, #0 1095; SOFT-NEXT: bne .LBB13_4 1096; SOFT-NEXT: @ %bb.3: 1097; SOFT-NEXT: mov r0, r7 1098; SOFT-NEXT: add sp, #4 1099; SOFT-NEXT: pop {r4, r5, r6, r7, pc} 1100; SOFT-NEXT: .LBB13_4: 1101; SOFT-NEXT: ldr r0, .LCPI13_1 1102; SOFT-NEXT: add sp, #4 1103; SOFT-NEXT: pop {r4, r5, r6, r7, pc} 1104; SOFT-NEXT: .p2align 2 1105; SOFT-NEXT: @ %bb.5: 1106; SOFT-NEXT: .LCPI13_0: 1107; SOFT-NEXT: .long 1089470432 @ 0x40efffe0 1108; SOFT-NEXT: .LCPI13_1: 1109; SOFT-NEXT: .long 65535 @ 0xffff 1110; 1111; VFP2-LABEL: test_signed_i16_f64: 1112; VFP2: @ %bb.0: 1113; VFP2-NEXT: vmov d16, r0, r1 1114; VFP2-NEXT: vldr d17, .LCPI13_0 1115; VFP2-NEXT: vcmp.f64 d16, #0 1116; VFP2-NEXT: vcvt.u32.f64 s0, d16 1117; VFP2-NEXT: vmrs APSR_nzcv, fpscr 1118; VFP2-NEXT: vmov r0, s0 1119; VFP2-NEXT: vcmp.f64 d16, d17 1120; VFP2-NEXT: it lt 1121; VFP2-NEXT: movlt r0, #0 1122; VFP2-NEXT: vmrs APSR_nzcv, fpscr 1123; VFP2-NEXT: it gt 1124; VFP2-NEXT: movwgt r0, #65535 1125; VFP2-NEXT: bx lr 1126; VFP2-NEXT: .p2align 3 1127; VFP2-NEXT: @ %bb.1: 1128; VFP2-NEXT: .LCPI13_0: 1129; VFP2-NEXT: .long 0 @ double 65535 1130; VFP2-NEXT: .long 1089470432 1131; 1132; FP16-LABEL: test_signed_i16_f64: 1133; FP16: @ %bb.0: 1134; FP16-NEXT: vldr d0, .LCPI13_0 1135; FP16-NEXT: vmov d1, r0, r1 1136; FP16-NEXT: vldr d2, .LCPI13_1 1137; FP16-NEXT: vmaxnm.f64 d0, d1, d0 1138; FP16-NEXT: vminnm.f64 d0, d0, d2 1139; FP16-NEXT: vcvt.u32.f64 s0, d0 1140; FP16-NEXT: vmov r0, s0 1141; FP16-NEXT: bx lr 1142; FP16-NEXT: .p2align 3 1143; FP16-NEXT: @ %bb.1: 1144; FP16-NEXT: .LCPI13_0: 1145; FP16-NEXT: .long 0 @ double 0 1146; FP16-NEXT: .long 0 1147; FP16-NEXT: .LCPI13_1: 1148; FP16-NEXT: .long 0 @ double 65535 1149; FP16-NEXT: .long 1089470432 1150 %x = call i16 @llvm.fptoui.sat.i16.f64(double %f) 1151 ret i16 %x 1152} 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 #4 1160; SOFT-NEXT: sub sp, #4 1161; SOFT-NEXT: mov r4, r1 1162; SOFT-NEXT: mov r5, r0 1163; SOFT-NEXT: movs r6, #0 1164; SOFT-NEXT: mov r2, r6 1165; SOFT-NEXT: mov r3, r6 1166; SOFT-NEXT: bl __aeabi_dcmpge 1167; SOFT-NEXT: mov r7, r0 1168; SOFT-NEXT: mov r0, r5 1169; SOFT-NEXT: mov r1, r4 1170; SOFT-NEXT: bl __aeabi_d2uiz 1171; SOFT-NEXT: cmp r7, #0 1172; SOFT-NEXT: bne .LBB14_2 1173; SOFT-NEXT: @ %bb.1: 1174; SOFT-NEXT: mov r0, r7 1175; SOFT-NEXT: .LBB14_2: 1176; SOFT-NEXT: mov r7, r0 1177; SOFT-NEXT: ldr r3, .LCPI14_0 1178; SOFT-NEXT: mov r0, r5 1179; SOFT-NEXT: mov r1, r4 1180; SOFT-NEXT: mov r2, r6 1181; SOFT-NEXT: bl __aeabi_dcmpgt 1182; SOFT-NEXT: cmp r0, #0 1183; SOFT-NEXT: bne .LBB14_4 1184; SOFT-NEXT: @ %bb.3: 1185; SOFT-NEXT: mov r0, r7 1186; SOFT-NEXT: add sp, #4 1187; SOFT-NEXT: pop {r4, r5, r6, r7, pc} 1188; SOFT-NEXT: .LBB14_4: 1189; SOFT-NEXT: ldr r0, .LCPI14_1 1190; SOFT-NEXT: add sp, #4 1191; SOFT-NEXT: pop {r4, r5, r6, r7, pc} 1192; SOFT-NEXT: .p2align 2 1193; SOFT-NEXT: @ %bb.5: 1194; SOFT-NEXT: .LCPI14_0: 1195; SOFT-NEXT: .long 1092616188 @ 0x411ffffc 1196; SOFT-NEXT: .LCPI14_1: 1197; SOFT-NEXT: .long 524287 @ 0x7ffff 1198; 1199; VFP2-LABEL: test_signed_i19_f64: 1200; VFP2: @ %bb.0: 1201; VFP2-NEXT: vmov d16, r0, r1 1202; VFP2-NEXT: vldr d17, .LCPI14_0 1203; VFP2-NEXT: vcmp.f64 d16, #0 1204; VFP2-NEXT: vcvt.u32.f64 s0, d16 1205; VFP2-NEXT: vmrs APSR_nzcv, fpscr 1206; VFP2-NEXT: vmov r0, s0 1207; VFP2-NEXT: vcmp.f64 d16, d17 1208; VFP2-NEXT: it lt 1209; VFP2-NEXT: movlt r0, #0 1210; VFP2-NEXT: vmrs APSR_nzcv, fpscr 1211; VFP2-NEXT: itt gt 1212; VFP2-NEXT: movwgt r0, #65535 1213; VFP2-NEXT: movtgt r0, #7 1214; VFP2-NEXT: bx lr 1215; VFP2-NEXT: .p2align 3 1216; VFP2-NEXT: @ %bb.1: 1217; VFP2-NEXT: .LCPI14_0: 1218; VFP2-NEXT: .long 0 @ double 524287 1219; VFP2-NEXT: .long 1092616188 1220; 1221; FP16-LABEL: test_signed_i19_f64: 1222; FP16: @ %bb.0: 1223; FP16-NEXT: vldr d0, .LCPI14_0 1224; FP16-NEXT: vmov d1, r0, r1 1225; FP16-NEXT: vldr d2, .LCPI14_1 1226; FP16-NEXT: vmaxnm.f64 d0, d1, d0 1227; FP16-NEXT: vminnm.f64 d0, d0, d2 1228; FP16-NEXT: vcvt.u32.f64 s0, d0 1229; FP16-NEXT: vmov r0, s0 1230; FP16-NEXT: bx lr 1231; FP16-NEXT: .p2align 3 1232; FP16-NEXT: @ %bb.1: 1233; FP16-NEXT: .LCPI14_0: 1234; FP16-NEXT: .long 0 @ double 0 1235; FP16-NEXT: .long 0 1236; FP16-NEXT: .LCPI14_1: 1237; FP16-NEXT: .long 0 @ double 524287 1238; FP16-NEXT: .long 1092616188 1239 %x = call i19 @llvm.fptoui.sat.i19.f64(double %f) 1240 ret i19 %x 1241} 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 #4 1249; SOFT-NEXT: sub sp, #4 1250; SOFT-NEXT: mov r5, r1 1251; SOFT-NEXT: mov r6, r0 1252; SOFT-NEXT: movs r4, #0 1253; SOFT-NEXT: mov r2, r4 1254; SOFT-NEXT: mov r3, r4 1255; SOFT-NEXT: bl __aeabi_dcmpge 1256; SOFT-NEXT: mov r7, r0 1257; SOFT-NEXT: mov r0, r6 1258; SOFT-NEXT: mov r1, r5 1259; SOFT-NEXT: bl __aeabi_d2uiz 1260; SOFT-NEXT: cmp r7, #0 1261; SOFT-NEXT: bne .LBB15_2 1262; SOFT-NEXT: @ %bb.1: 1263; SOFT-NEXT: mov r0, r7 1264; SOFT-NEXT: .LBB15_2: 1265; SOFT-NEXT: mov r7, r0 1266; SOFT-NEXT: ldr r2, .LCPI15_0 1267; SOFT-NEXT: ldr r3, .LCPI15_1 1268; SOFT-NEXT: mov r0, r6 1269; SOFT-NEXT: mov r1, r5 1270; SOFT-NEXT: bl __aeabi_dcmpgt 1271; SOFT-NEXT: cmp r0, #0 1272; SOFT-NEXT: bne .LBB15_4 1273; SOFT-NEXT: @ %bb.3: 1274; SOFT-NEXT: mov r0, r7 1275; SOFT-NEXT: add sp, #4 1276; SOFT-NEXT: pop {r4, r5, r6, r7, pc} 1277; SOFT-NEXT: .LBB15_4: 1278; SOFT-NEXT: mvns r0, r4 1279; SOFT-NEXT: add sp, #4 1280; SOFT-NEXT: pop {r4, r5, r6, r7, pc} 1281; SOFT-NEXT: .p2align 2 1282; SOFT-NEXT: @ %bb.5: 1283; SOFT-NEXT: .LCPI15_0: 1284; SOFT-NEXT: .long 4292870144 @ 0xffe00000 1285; SOFT-NEXT: .LCPI15_1: 1286; SOFT-NEXT: .long 1106247679 @ 0x41efffff 1287; 1288; VFP2-LABEL: test_signed_i32_f64: 1289; VFP2: @ %bb.0: 1290; VFP2-NEXT: vmov d16, r0, r1 1291; VFP2-NEXT: vcvt.u32.f64 s0, d16 1292; VFP2-NEXT: vmov r0, s0 1293; VFP2-NEXT: bx lr 1294; 1295; FP16-LABEL: test_signed_i32_f64: 1296; FP16: @ %bb.0: 1297; FP16-NEXT: vmov d0, r0, r1 1298; FP16-NEXT: vcvt.u32.f64 s0, d0 1299; FP16-NEXT: vmov r0, s0 1300; FP16-NEXT: bx lr 1301 %x = call i32 @llvm.fptoui.sat.i32.f64(double %f) 1302 ret i32 %x 1303} 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 #4 1311; SOFT-NEXT: sub sp, #4 1312; SOFT-NEXT: mov r6, r1 1313; SOFT-NEXT: mov r7, r0 1314; SOFT-NEXT: movs r5, #0 1315; SOFT-NEXT: mov r2, r5 1316; SOFT-NEXT: mov r3, r5 1317; SOFT-NEXT: bl __aeabi_dcmpge 1318; SOFT-NEXT: mov r4, r0 1319; SOFT-NEXT: mov r0, r7 1320; SOFT-NEXT: mov r1, r6 1321; SOFT-NEXT: bl __aeabi_d2ulz 1322; SOFT-NEXT: cmp r4, #0 1323; SOFT-NEXT: bne .LBB16_2 1324; SOFT-NEXT: @ %bb.1: 1325; SOFT-NEXT: mov r1, r4 1326; SOFT-NEXT: .LBB16_2: 1327; SOFT-NEXT: str r1, [sp] @ 4-byte Spill 1328; SOFT-NEXT: bne .LBB16_4 1329; SOFT-NEXT: @ %bb.3: 1330; SOFT-NEXT: mov r0, r4 1331; SOFT-NEXT: .LBB16_4: 1332; SOFT-NEXT: mov r4, r0 1333; SOFT-NEXT: movs r0, #7 1334; SOFT-NEXT: mvns r2, r0 1335; SOFT-NEXT: ldr r3, .LCPI16_0 1336; SOFT-NEXT: mov r0, r7 1337; SOFT-NEXT: mov r1, r6 1338; SOFT-NEXT: bl __aeabi_dcmpgt 1339; SOFT-NEXT: mov r1, r0 1340; SOFT-NEXT: mvns r0, r5 1341; SOFT-NEXT: cmp r1, #0 1342; SOFT-NEXT: beq .LBB16_7 1343; SOFT-NEXT: @ %bb.5: 1344; SOFT-NEXT: ldr r1, [sp] @ 4-byte Reload 1345; SOFT-NEXT: bne .LBB16_8 1346; SOFT-NEXT: .LBB16_6: 1347; SOFT-NEXT: add sp, #4 1348; SOFT-NEXT: pop {r4, r5, r6, r7, pc} 1349; SOFT-NEXT: .LBB16_7: 1350; SOFT-NEXT: mov r0, r4 1351; SOFT-NEXT: ldr r1, [sp] @ 4-byte Reload 1352; SOFT-NEXT: beq .LBB16_6 1353; SOFT-NEXT: .LBB16_8: 1354; SOFT-NEXT: ldr r1, .LCPI16_1 1355; SOFT-NEXT: add sp, #4 1356; SOFT-NEXT: pop {r4, r5, r6, r7, pc} 1357; SOFT-NEXT: .p2align 2 1358; SOFT-NEXT: @ %bb.9: 1359; SOFT-NEXT: .LCPI16_0: 1360; SOFT-NEXT: .long 1125122047 @ 0x430fffff 1361; SOFT-NEXT: .LCPI16_1: 1362; SOFT-NEXT: .long 262143 @ 0x3ffff 1363; 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, r1 1371; VFP2-NEXT: bl __aeabi_d2ulz 1372; VFP2-NEXT: vcmp.f64 d8, #0 1373; VFP2-NEXT: vldr d16, .LCPI16_0 1374; VFP2-NEXT: vmrs APSR_nzcv, fpscr 1375; VFP2-NEXT: itt lt 1376; VFP2-NEXT: movlt r1, #0 1377; VFP2-NEXT: movlt r0, #0 1378; VFP2-NEXT: vcmp.f64 d8, d16 1379; VFP2-NEXT: vmrs APSR_nzcv, fpscr 1380; VFP2-NEXT: ittt gt 1381; VFP2-NEXT: movwgt r1, #65535 1382; VFP2-NEXT: movtgt r1, #3 1383; VFP2-NEXT: movgt.w r0, #-1 1384; VFP2-NEXT: vpop {d8} 1385; VFP2-NEXT: pop {r7, pc} 1386; VFP2-NEXT: .p2align 3 1387; VFP2-NEXT: @ %bb.1: 1388; VFP2-NEXT: .LCPI16_0: 1389; VFP2-NEXT: .long 4294967288 @ double 1125899906842623 1390; VFP2-NEXT: .long 1125122047 1391; 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_0 1397; FP16-NEXT: vmov d1, r0, r1 1398; FP16-NEXT: vldr d2, .LCPI16_1 1399; FP16-NEXT: vmaxnm.f64 d0, d1, d0 1400; FP16-NEXT: vminnm.f64 d0, d0, d2 1401; FP16-NEXT: vmov r0, r1, d0 1402; FP16-NEXT: bl __aeabi_d2ulz 1403; FP16-NEXT: pop {r7, pc} 1404; FP16-NEXT: .p2align 3 1405; FP16-NEXT: @ %bb.1: 1406; FP16-NEXT: .LCPI16_0: 1407; FP16-NEXT: .long 0 @ double 0 1408; FP16-NEXT: .long 0 1409; FP16-NEXT: .LCPI16_1: 1410; FP16-NEXT: .long 4294967288 @ double 1125899906842623 1411; FP16-NEXT: .long 1125122047 1412 %x = call i50 @llvm.fptoui.sat.i50.f64(double %f) 1413 ret i50 %x 1414} 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 #4 1422; SOFT-NEXT: sub sp, #4 1423; SOFT-NEXT: mov r4, r1 1424; SOFT-NEXT: mov r5, r0 1425; SOFT-NEXT: movs r7, #0 1426; SOFT-NEXT: mov r2, r7 1427; SOFT-NEXT: mov r3, r7 1428; SOFT-NEXT: bl __aeabi_dcmpge 1429; SOFT-NEXT: mov r6, r0 1430; SOFT-NEXT: mov r0, r5 1431; SOFT-NEXT: mov r1, r4 1432; SOFT-NEXT: bl __aeabi_d2ulz 1433; SOFT-NEXT: cmp r6, #0 1434; SOFT-NEXT: bne .LBB17_2 1435; SOFT-NEXT: @ %bb.1: 1436; SOFT-NEXT: mov r1, r6 1437; SOFT-NEXT: .LBB17_2: 1438; SOFT-NEXT: str r1, [sp] @ 4-byte Spill 1439; SOFT-NEXT: bne .LBB17_4 1440; SOFT-NEXT: @ %bb.3: 1441; SOFT-NEXT: mov r0, r6 1442; SOFT-NEXT: .LBB17_4: 1443; SOFT-NEXT: mov r6, r0 1444; SOFT-NEXT: mvns r7, r7 1445; SOFT-NEXT: ldr r3, .LCPI17_0 1446; SOFT-NEXT: mov r0, r5 1447; SOFT-NEXT: mov r1, r4 1448; SOFT-NEXT: mov r2, r7 1449; SOFT-NEXT: bl __aeabi_dcmpgt 1450; SOFT-NEXT: cmp r0, #0 1451; SOFT-NEXT: mov r0, r7 1452; SOFT-NEXT: bne .LBB17_6 1453; SOFT-NEXT: @ %bb.5: 1454; SOFT-NEXT: mov r0, r6 1455; SOFT-NEXT: .LBB17_6: 1456; SOFT-NEXT: bne .LBB17_8 1457; SOFT-NEXT: @ %bb.7: 1458; SOFT-NEXT: ldr r7, [sp] @ 4-byte Reload 1459; SOFT-NEXT: .LBB17_8: 1460; SOFT-NEXT: mov r1, r7 1461; SOFT-NEXT: add sp, #4 1462; SOFT-NEXT: pop {r4, r5, r6, r7, pc} 1463; SOFT-NEXT: .p2align 2 1464; SOFT-NEXT: @ %bb.9: 1465; SOFT-NEXT: .LCPI17_0: 1466; SOFT-NEXT: .long 1139802111 @ 0x43efffff 1467; 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, r1 1475; VFP2-NEXT: bl __aeabi_d2ulz 1476; VFP2-NEXT: vcmp.f64 d8, #0 1477; VFP2-NEXT: vldr d16, .LCPI17_0 1478; VFP2-NEXT: vmrs APSR_nzcv, fpscr 1479; VFP2-NEXT: itt lt 1480; VFP2-NEXT: movlt r1, #0 1481; VFP2-NEXT: movlt r0, #0 1482; VFP2-NEXT: vcmp.f64 d8, d16 1483; VFP2-NEXT: vmrs APSR_nzcv, fpscr 1484; VFP2-NEXT: itt gt 1485; VFP2-NEXT: movgt.w r0, #-1 1486; VFP2-NEXT: movgt.w r1, #-1 1487; VFP2-NEXT: vpop {d8} 1488; VFP2-NEXT: pop {r7, pc} 1489; VFP2-NEXT: .p2align 3 1490; VFP2-NEXT: @ %bb.1: 1491; VFP2-NEXT: .LCPI17_0: 1492; VFP2-NEXT: .long 4294967295 @ double 1.844674407370955E+19 1493; VFP2-NEXT: .long 1139802111 1494; 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, r1 1502; FP16-NEXT: bl __aeabi_d2ulz 1503; FP16-NEXT: vcmp.f64 d8, #0 1504; FP16-NEXT: vldr d0, .LCPI17_0 1505; FP16-NEXT: vmrs APSR_nzcv, fpscr 1506; FP16-NEXT: itt lt 1507; FP16-NEXT: movlt r1, #0 1508; FP16-NEXT: movlt r0, #0 1509; FP16-NEXT: vcmp.f64 d8, d0 1510; FP16-NEXT: vmrs APSR_nzcv, fpscr 1511; FP16-NEXT: itt gt 1512; FP16-NEXT: movgt.w r0, #-1 1513; FP16-NEXT: movgt.w r1, #-1 1514; FP16-NEXT: vpop {d8} 1515; FP16-NEXT: pop {r7, pc} 1516; FP16-NEXT: .p2align 3 1517; FP16-NEXT: @ %bb.1: 1518; FP16-NEXT: .LCPI17_0: 1519; FP16-NEXT: .long 4294967295 @ double 1.844674407370955E+19 1520; FP16-NEXT: .long 1139802111 1521 %x = call i64 @llvm.fptoui.sat.i64.f64(double %f) 1522 ret i64 %x 1523} 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 #12 1531; SOFT-NEXT: sub sp, #12 1532; SOFT-NEXT: mov r6, r1 1533; SOFT-NEXT: mov r4, r0 1534; SOFT-NEXT: movs r5, #0 1535; SOFT-NEXT: mov r2, r5 1536; SOFT-NEXT: mov r3, r5 1537; SOFT-NEXT: bl __aeabi_dcmpge 1538; SOFT-NEXT: mov r7, r0 1539; SOFT-NEXT: mov r0, r4 1540; SOFT-NEXT: mov r1, r6 1541; SOFT-NEXT: bl __fixunsdfti 1542; SOFT-NEXT: cmp r7, #0 1543; SOFT-NEXT: beq .LBB18_12 1544; SOFT-NEXT: @ %bb.1: 1545; SOFT-NEXT: beq .LBB18_13 1546; SOFT-NEXT: .LBB18_2: 1547; SOFT-NEXT: bne .LBB18_4 1548; SOFT-NEXT: .LBB18_3: 1549; SOFT-NEXT: mov r1, r7 1550; SOFT-NEXT: .LBB18_4: 1551; SOFT-NEXT: str r1, [sp] @ 4-byte Spill 1552; SOFT-NEXT: str r2, [sp, #4] @ 4-byte Spill 1553; SOFT-NEXT: str r3, [sp, #8] @ 4-byte Spill 1554; SOFT-NEXT: bne .LBB18_6 1555; SOFT-NEXT: @ %bb.5: 1556; SOFT-NEXT: mov r0, r7 1557; SOFT-NEXT: .LBB18_6: 1558; SOFT-NEXT: mov r7, r0 1559; SOFT-NEXT: mvns r5, r5 1560; SOFT-NEXT: ldr r3, .LCPI18_0 1561; SOFT-NEXT: mov r0, r4 1562; SOFT-NEXT: mov r1, r6 1563; SOFT-NEXT: mov r2, r5 1564; SOFT-NEXT: bl __aeabi_dcmpgt 1565; SOFT-NEXT: movs r3, #15 1566; SOFT-NEXT: cmp r0, #0 1567; SOFT-NEXT: mov r0, r5 1568; SOFT-NEXT: beq .LBB18_14 1569; SOFT-NEXT: @ %bb.7: 1570; SOFT-NEXT: mov r1, r5 1571; SOFT-NEXT: beq .LBB18_15 1572; SOFT-NEXT: .LBB18_8: 1573; SOFT-NEXT: beq .LBB18_16 1574; SOFT-NEXT: .LBB18_9: 1575; SOFT-NEXT: bne .LBB18_11 1576; SOFT-NEXT: .LBB18_10: 1577; SOFT-NEXT: ldr r3, [sp, #8] @ 4-byte Reload 1578; SOFT-NEXT: .LBB18_11: 1579; SOFT-NEXT: mov r2, r5 1580; SOFT-NEXT: add sp, #12 1581; SOFT-NEXT: pop {r4, r5, r6, r7, pc} 1582; SOFT-NEXT: .LBB18_12: 1583; SOFT-NEXT: mov r3, r7 1584; SOFT-NEXT: bne .LBB18_2 1585; SOFT-NEXT: .LBB18_13: 1586; SOFT-NEXT: mov r2, r7 1587; SOFT-NEXT: beq .LBB18_3 1588; SOFT-NEXT: b .LBB18_4 1589; SOFT-NEXT: .LBB18_14: 1590; SOFT-NEXT: mov r0, r7 1591; SOFT-NEXT: mov r1, r5 1592; SOFT-NEXT: bne .LBB18_8 1593; SOFT-NEXT: .LBB18_15: 1594; SOFT-NEXT: ldr r1, [sp] @ 4-byte Reload 1595; SOFT-NEXT: bne .LBB18_9 1596; SOFT-NEXT: .LBB18_16: 1597; SOFT-NEXT: ldr r5, [sp, #4] @ 4-byte Reload 1598; SOFT-NEXT: beq .LBB18_10 1599; SOFT-NEXT: b .LBB18_11 1600; SOFT-NEXT: .p2align 2 1601; SOFT-NEXT: @ %bb.17: 1602; SOFT-NEXT: .LCPI18_0: 1603; SOFT-NEXT: .long 1177550847 @ 0x462fffff 1604; 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, r1 1612; VFP2-NEXT: bl __fixunsdfti 1613; VFP2-NEXT: vcmp.f64 d8, #0 1614; VFP2-NEXT: vldr d16, .LCPI18_0 1615; VFP2-NEXT: vmrs APSR_nzcv, fpscr 1616; VFP2-NEXT: itttt lt 1617; VFP2-NEXT: movlt r3, #0 1618; VFP2-NEXT: movlt r2, #0 1619; VFP2-NEXT: movlt r1, #0 1620; VFP2-NEXT: movlt r0, #0 1621; VFP2-NEXT: vcmp.f64 d8, d16 1622; VFP2-NEXT: vmrs APSR_nzcv, fpscr 1623; VFP2-NEXT: itttt gt 1624; VFP2-NEXT: movgt.w r0, #-1 1625; VFP2-NEXT: movgt.w r1, #-1 1626; VFP2-NEXT: movgt.w r2, #-1 1627; VFP2-NEXT: movgt r3, #15 1628; VFP2-NEXT: vpop {d8} 1629; VFP2-NEXT: pop {r7, pc} 1630; VFP2-NEXT: .p2align 3 1631; VFP2-NEXT: @ %bb.1: 1632; VFP2-NEXT: .LCPI18_0: 1633; VFP2-NEXT: .long 4294967295 @ double 1.2676506002282293E+30 1634; VFP2-NEXT: .long 1177550847 1635; 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, r1 1643; FP16-NEXT: bl __fixunsdfti 1644; FP16-NEXT: vcmp.f64 d8, #0 1645; FP16-NEXT: vldr d0, .LCPI18_0 1646; FP16-NEXT: vmrs APSR_nzcv, fpscr 1647; FP16-NEXT: itttt lt 1648; FP16-NEXT: movlt r3, #0 1649; FP16-NEXT: movlt r2, #0 1650; FP16-NEXT: movlt r1, #0 1651; FP16-NEXT: movlt r0, #0 1652; FP16-NEXT: vcmp.f64 d8, d0 1653; FP16-NEXT: vmrs APSR_nzcv, fpscr 1654; FP16-NEXT: itttt gt 1655; FP16-NEXT: movgt.w r0, #-1 1656; FP16-NEXT: movgt.w r1, #-1 1657; FP16-NEXT: movgt.w r2, #-1 1658; FP16-NEXT: movgt r3, #15 1659; FP16-NEXT: vpop {d8} 1660; FP16-NEXT: pop {r7, pc} 1661; FP16-NEXT: .p2align 3 1662; FP16-NEXT: @ %bb.1: 1663; FP16-NEXT: .LCPI18_0: 1664; FP16-NEXT: .long 4294967295 @ double 1.2676506002282293E+30 1665; FP16-NEXT: .long 1177550847 1666 %x = call i100 @llvm.fptoui.sat.i100.f64(double %f) 1667 ret i100 %x 1668} 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 #12 1676; SOFT-NEXT: sub sp, #12 1677; SOFT-NEXT: mov r6, r1 1678; SOFT-NEXT: mov r7, r0 1679; SOFT-NEXT: movs r5, #0 1680; SOFT-NEXT: mov r2, r5 1681; SOFT-NEXT: mov r3, r5 1682; SOFT-NEXT: bl __aeabi_dcmpge 1683; SOFT-NEXT: mov r4, r0 1684; SOFT-NEXT: mov r0, r7 1685; SOFT-NEXT: mov r1, r6 1686; SOFT-NEXT: bl __fixunsdfti 1687; SOFT-NEXT: cmp r4, #0 1688; SOFT-NEXT: beq .LBB19_12 1689; SOFT-NEXT: @ %bb.1: 1690; SOFT-NEXT: beq .LBB19_13 1691; SOFT-NEXT: .LBB19_2: 1692; SOFT-NEXT: bne .LBB19_4 1693; SOFT-NEXT: .LBB19_3: 1694; SOFT-NEXT: mov r1, r4 1695; SOFT-NEXT: .LBB19_4: 1696; SOFT-NEXT: str r1, [sp] @ 4-byte Spill 1697; SOFT-NEXT: str r2, [sp, #4] @ 4-byte Spill 1698; SOFT-NEXT: str r3, [sp, #8] @ 4-byte Spill 1699; SOFT-NEXT: bne .LBB19_6 1700; SOFT-NEXT: @ %bb.5: 1701; SOFT-NEXT: mov r0, r4 1702; SOFT-NEXT: .LBB19_6: 1703; SOFT-NEXT: mov r4, r0 1704; SOFT-NEXT: mvns r5, r5 1705; SOFT-NEXT: ldr r3, .LCPI19_0 1706; SOFT-NEXT: mov r0, r7 1707; SOFT-NEXT: mov r1, r6 1708; SOFT-NEXT: mov r2, r5 1709; SOFT-NEXT: bl __aeabi_dcmpgt 1710; SOFT-NEXT: cmp r0, #0 1711; SOFT-NEXT: mov r0, r5 1712; SOFT-NEXT: beq .LBB19_14 1713; SOFT-NEXT: @ %bb.7: 1714; SOFT-NEXT: mov r1, r5 1715; SOFT-NEXT: beq .LBB19_15 1716; SOFT-NEXT: .LBB19_8: 1717; SOFT-NEXT: mov r2, r5 1718; SOFT-NEXT: beq .LBB19_16 1719; SOFT-NEXT: .LBB19_9: 1720; SOFT-NEXT: bne .LBB19_11 1721; SOFT-NEXT: .LBB19_10: 1722; SOFT-NEXT: ldr r5, [sp, #8] @ 4-byte Reload 1723; SOFT-NEXT: .LBB19_11: 1724; SOFT-NEXT: mov r3, r5 1725; SOFT-NEXT: add sp, #12 1726; SOFT-NEXT: pop {r4, r5, r6, r7, pc} 1727; SOFT-NEXT: .LBB19_12: 1728; SOFT-NEXT: mov r3, r4 1729; SOFT-NEXT: bne .LBB19_2 1730; SOFT-NEXT: .LBB19_13: 1731; SOFT-NEXT: mov r2, r4 1732; SOFT-NEXT: beq .LBB19_3 1733; SOFT-NEXT: b .LBB19_4 1734; SOFT-NEXT: .LBB19_14: 1735; SOFT-NEXT: mov r0, r4 1736; SOFT-NEXT: mov r1, r5 1737; SOFT-NEXT: bne .LBB19_8 1738; SOFT-NEXT: .LBB19_15: 1739; SOFT-NEXT: ldr r1, [sp] @ 4-byte Reload 1740; SOFT-NEXT: mov r2, r5 1741; SOFT-NEXT: bne .LBB19_9 1742; SOFT-NEXT: .LBB19_16: 1743; SOFT-NEXT: ldr r2, [sp, #4] @ 4-byte Reload 1744; SOFT-NEXT: beq .LBB19_10 1745; SOFT-NEXT: b .LBB19_11 1746; SOFT-NEXT: .p2align 2 1747; SOFT-NEXT: @ %bb.17: 1748; SOFT-NEXT: .LCPI19_0: 1749; SOFT-NEXT: .long 1206910975 @ 0x47efffff 1750; 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, r1 1758; VFP2-NEXT: bl __fixunsdfti 1759; VFP2-NEXT: vcmp.f64 d8, #0 1760; VFP2-NEXT: vldr d16, .LCPI19_0 1761; VFP2-NEXT: vmrs APSR_nzcv, fpscr 1762; VFP2-NEXT: itttt lt 1763; VFP2-NEXT: movlt r3, #0 1764; VFP2-NEXT: movlt r2, #0 1765; VFP2-NEXT: movlt r1, #0 1766; VFP2-NEXT: movlt r0, #0 1767; VFP2-NEXT: vcmp.f64 d8, d16 1768; VFP2-NEXT: vmrs APSR_nzcv, fpscr 1769; VFP2-NEXT: itttt gt 1770; VFP2-NEXT: movgt.w r0, #-1 1771; VFP2-NEXT: movgt.w r1, #-1 1772; VFP2-NEXT: movgt.w r2, #-1 1773; VFP2-NEXT: movgt.w r3, #-1 1774; VFP2-NEXT: vpop {d8} 1775; VFP2-NEXT: pop {r7, pc} 1776; VFP2-NEXT: .p2align 3 1777; VFP2-NEXT: @ %bb.1: 1778; VFP2-NEXT: .LCPI19_0: 1779; VFP2-NEXT: .long 4294967295 @ double 3.4028236692093843E+38 1780; VFP2-NEXT: .long 1206910975 1781; 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, r1 1789; FP16-NEXT: bl __fixunsdfti 1790; FP16-NEXT: vcmp.f64 d8, #0 1791; FP16-NEXT: vldr d0, .LCPI19_0 1792; FP16-NEXT: vmrs APSR_nzcv, fpscr 1793; FP16-NEXT: itttt lt 1794; FP16-NEXT: movlt r3, #0 1795; FP16-NEXT: movlt r2, #0 1796; FP16-NEXT: movlt r1, #0 1797; FP16-NEXT: movlt r0, #0 1798; FP16-NEXT: vcmp.f64 d8, d0 1799; FP16-NEXT: vmrs APSR_nzcv, fpscr 1800; FP16-NEXT: itttt gt 1801; FP16-NEXT: movgt.w r0, #-1 1802; FP16-NEXT: movgt.w r1, #-1 1803; FP16-NEXT: movgt.w r2, #-1 1804; FP16-NEXT: movgt.w r3, #-1 1805; FP16-NEXT: vpop {d8} 1806; FP16-NEXT: pop {r7, pc} 1807; FP16-NEXT: .p2align 3 1808; FP16-NEXT: @ %bb.1: 1809; FP16-NEXT: .LCPI19_0: 1810; FP16-NEXT: .long 4294967295 @ double 3.4028236692093843E+38 1811; FP16-NEXT: .long 1206910975 1812 %x = call i128 @llvm.fptoui.sat.i128.f64(double %f) 1813 ret i128 %x 1814} 1815 1816; 1817; 16-bit float to signed integer 1818; 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, r0 1837; SOFT-NEXT: bl __aeabi_h2f 1838; SOFT-NEXT: mov r5, r0 1839; SOFT-NEXT: movs r1, #0 1840; SOFT-NEXT: bl __aeabi_fcmpge 1841; SOFT-NEXT: mov r6, r0 1842; SOFT-NEXT: mov r0, r5 1843; SOFT-NEXT: bl __aeabi_f2uiz 1844; SOFT-NEXT: mov r4, r0 1845; SOFT-NEXT: cmp r6, #0 1846; SOFT-NEXT: bne .LBB20_2 1847; SOFT-NEXT: @ %bb.1: 1848; SOFT-NEXT: mov r4, r6 1849; SOFT-NEXT: .LBB20_2: 1850; SOFT-NEXT: movs r0, #127 1851; SOFT-NEXT: lsls r1, r0, #23 1852; SOFT-NEXT: mov r0, r5 1853; SOFT-NEXT: bl __aeabi_fcmpgt 1854; SOFT-NEXT: cmp r0, #0 1855; SOFT-NEXT: beq .LBB20_4 1856; SOFT-NEXT: @ %bb.3: 1857; SOFT-NEXT: movs r4, #1 1858; SOFT-NEXT: .LBB20_4: 1859; SOFT-NEXT: mov r0, r4 1860; 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_h2f 1867; VFP2-NEXT: vmov s0, r0 1868; VFP2-NEXT: vmov.f32 s4, #1.000000e+00 1869; VFP2-NEXT: vcvt.u32.f32 s2, s0 1870; VFP2-NEXT: vcmp.f32 s0, #0 1871; VFP2-NEXT: vmrs APSR_nzcv, fpscr 1872; VFP2-NEXT: vcmp.f32 s0, s4 1873; VFP2-NEXT: vmov r0, s2 1874; VFP2-NEXT: it lt 1875; VFP2-NEXT: movlt r0, #0 1876; VFP2-NEXT: vmrs APSR_nzcv, fpscr 1877; VFP2-NEXT: it gt 1878; VFP2-NEXT: movgt r0, #1 1879; VFP2-NEXT: pop {r7, pc} 1880; 1881; FP16-LABEL: test_signed_i1_f16: 1882; FP16: @ %bb.0: 1883; FP16-NEXT: vmov.f16 s0, r0 1884; FP16-NEXT: vldr s4, .LCPI20_0 1885; FP16-NEXT: vcvtb.f32.f16 s0, s0 1886; FP16-NEXT: vmov.f32 s2, #1.000000e+00 1887; FP16-NEXT: vmaxnm.f32 s0, s0, s4 1888; FP16-NEXT: vminnm.f32 s0, s0, s2 1889; FP16-NEXT: vcvt.u32.f32 s0, s0 1890; FP16-NEXT: vmov r0, s0 1891; FP16-NEXT: bx lr 1892; FP16-NEXT: .p2align 2 1893; FP16-NEXT: @ %bb.1: 1894; FP16-NEXT: .LCPI20_0: 1895; FP16-NEXT: .long 0x00000000 @ float 0 1896 %x = call i1 @llvm.fptoui.sat.i1.f16(half %f) 1897 ret i1 %x 1898} 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, r0 1906; SOFT-NEXT: bl __aeabi_h2f 1907; SOFT-NEXT: mov r5, r0 1908; SOFT-NEXT: movs r1, #0 1909; SOFT-NEXT: bl __aeabi_fcmpge 1910; SOFT-NEXT: mov r6, r0 1911; SOFT-NEXT: mov r0, r5 1912; SOFT-NEXT: bl __aeabi_f2uiz 1913; SOFT-NEXT: mov r4, r0 1914; SOFT-NEXT: cmp r6, #0 1915; SOFT-NEXT: bne .LBB21_2 1916; SOFT-NEXT: @ %bb.1: 1917; SOFT-NEXT: mov r4, r6 1918; SOFT-NEXT: .LBB21_2: 1919; SOFT-NEXT: ldr r1, .LCPI21_0 1920; SOFT-NEXT: mov r0, r5 1921; SOFT-NEXT: bl __aeabi_fcmpgt 1922; SOFT-NEXT: cmp r0, #0 1923; SOFT-NEXT: beq .LBB21_4 1924; SOFT-NEXT: @ %bb.3: 1925; SOFT-NEXT: movs r4, #255 1926; SOFT-NEXT: .LBB21_4: 1927; SOFT-NEXT: mov r0, r4 1928; SOFT-NEXT: pop {r4, r5, r6, pc} 1929; SOFT-NEXT: .p2align 2 1930; SOFT-NEXT: @ %bb.5: 1931; SOFT-NEXT: .LCPI21_0: 1932; SOFT-NEXT: .long 1132396544 @ 0x437f0000 1933; 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_h2f 1939; VFP2-NEXT: vmov s0, r0 1940; VFP2-NEXT: vldr s4, .LCPI21_0 1941; VFP2-NEXT: vcvt.u32.f32 s2, s0 1942; VFP2-NEXT: vcmp.f32 s0, #0 1943; VFP2-NEXT: vmrs APSR_nzcv, fpscr 1944; VFP2-NEXT: vcmp.f32 s0, s4 1945; VFP2-NEXT: vmov r0, s2 1946; VFP2-NEXT: it lt 1947; VFP2-NEXT: movlt r0, #0 1948; VFP2-NEXT: vmrs APSR_nzcv, fpscr 1949; VFP2-NEXT: it gt 1950; VFP2-NEXT: movgt r0, #255 1951; VFP2-NEXT: pop {r7, pc} 1952; VFP2-NEXT: .p2align 2 1953; VFP2-NEXT: @ %bb.1: 1954; VFP2-NEXT: .LCPI21_0: 1955; VFP2-NEXT: .long 0x437f0000 @ float 255 1956; 1957; FP16-LABEL: test_signed_i8_f16: 1958; FP16: @ %bb.0: 1959; FP16-NEXT: vmov.f16 s0, r0 1960; FP16-NEXT: vldr s4, .LCPI21_1 1961; FP16-NEXT: vcvtb.f32.f16 s0, s0 1962; FP16-NEXT: vldr s2, .LCPI21_0 1963; FP16-NEXT: vmaxnm.f32 s0, s0, s4 1964; FP16-NEXT: vminnm.f32 s0, s0, s2 1965; FP16-NEXT: vcvt.u32.f32 s0, s0 1966; FP16-NEXT: vmov r0, s0 1967; FP16-NEXT: bx lr 1968; FP16-NEXT: .p2align 2 1969; FP16-NEXT: @ %bb.1: 1970; FP16-NEXT: .LCPI21_0: 1971; FP16-NEXT: .long 0x437f0000 @ float 255 1972; FP16-NEXT: .LCPI21_1: 1973; FP16-NEXT: .long 0x00000000 @ float 0 1974 %x = call i8 @llvm.fptoui.sat.i8.f16(half %f) 1975 ret i8 %x 1976} 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, r0 1984; SOFT-NEXT: bl __aeabi_h2f 1985; SOFT-NEXT: mov r5, r0 1986; SOFT-NEXT: movs r1, #0 1987; SOFT-NEXT: bl __aeabi_fcmpge 1988; SOFT-NEXT: mov r6, r0 1989; SOFT-NEXT: mov r0, r5 1990; SOFT-NEXT: bl __aeabi_f2uiz 1991; SOFT-NEXT: mov r4, r0 1992; SOFT-NEXT: cmp r6, #0 1993; SOFT-NEXT: bne .LBB22_2 1994; SOFT-NEXT: @ %bb.1: 1995; SOFT-NEXT: mov r4, r6 1996; SOFT-NEXT: .LBB22_2: 1997; SOFT-NEXT: ldr r1, .LCPI22_0 1998; SOFT-NEXT: mov r0, r5 1999; SOFT-NEXT: bl __aeabi_fcmpgt 2000; SOFT-NEXT: cmp r0, #0 2001; SOFT-NEXT: beq .LBB22_4 2002; SOFT-NEXT: @ %bb.3: 2003; SOFT-NEXT: ldr r4, .LCPI22_1 2004; SOFT-NEXT: .LBB22_4: 2005; SOFT-NEXT: mov r0, r4 2006; SOFT-NEXT: pop {r4, r5, r6, pc} 2007; SOFT-NEXT: .p2align 2 2008; SOFT-NEXT: @ %bb.5: 2009; SOFT-NEXT: .LCPI22_0: 2010; SOFT-NEXT: .long 1174403072 @ 0x45fff800 2011; SOFT-NEXT: .LCPI22_1: 2012; SOFT-NEXT: .long 8191 @ 0x1fff 2013; 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_h2f 2019; VFP2-NEXT: vmov s0, r0 2020; VFP2-NEXT: vldr s4, .LCPI22_0 2021; VFP2-NEXT: vcvt.u32.f32 s2, s0 2022; VFP2-NEXT: vcmp.f32 s0, #0 2023; VFP2-NEXT: vmrs APSR_nzcv, fpscr 2024; VFP2-NEXT: vcmp.f32 s0, s4 2025; VFP2-NEXT: vmov r0, s2 2026; VFP2-NEXT: it lt 2027; VFP2-NEXT: movlt r0, #0 2028; VFP2-NEXT: vmrs APSR_nzcv, fpscr 2029; VFP2-NEXT: it gt 2030; VFP2-NEXT: movwgt r0, #8191 2031; VFP2-NEXT: pop {r7, pc} 2032; VFP2-NEXT: .p2align 2 2033; VFP2-NEXT: @ %bb.1: 2034; VFP2-NEXT: .LCPI22_0: 2035; VFP2-NEXT: .long 0x45fff800 @ float 8191 2036; 2037; FP16-LABEL: test_signed_i13_f16: 2038; FP16: @ %bb.0: 2039; FP16-NEXT: vmov.f16 s0, r0 2040; FP16-NEXT: vldr s4, .LCPI22_1 2041; FP16-NEXT: vcvtb.f32.f16 s0, s0 2042; FP16-NEXT: vldr s2, .LCPI22_0 2043; FP16-NEXT: vmaxnm.f32 s0, s0, s4 2044; FP16-NEXT: vminnm.f32 s0, s0, s2 2045; FP16-NEXT: vcvt.u32.f32 s0, s0 2046; FP16-NEXT: vmov r0, s0 2047; FP16-NEXT: bx lr 2048; FP16-NEXT: .p2align 2 2049; FP16-NEXT: @ %bb.1: 2050; FP16-NEXT: .LCPI22_0: 2051; FP16-NEXT: .long 0x45fff800 @ float 8191 2052; FP16-NEXT: .LCPI22_1: 2053; FP16-NEXT: .long 0x00000000 @ float 0 2054 %x = call i13 @llvm.fptoui.sat.i13.f16(half %f) 2055 ret i13 %x 2056} 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, r0 2064; SOFT-NEXT: bl __aeabi_h2f 2065; SOFT-NEXT: mov r5, r0 2066; SOFT-NEXT: movs r1, #0 2067; SOFT-NEXT: bl __aeabi_fcmpge 2068; SOFT-NEXT: mov r6, r0 2069; SOFT-NEXT: mov r0, r5 2070; SOFT-NEXT: bl __aeabi_f2uiz 2071; SOFT-NEXT: mov r4, r0 2072; SOFT-NEXT: cmp r6, #0 2073; SOFT-NEXT: bne .LBB23_2 2074; SOFT-NEXT: @ %bb.1: 2075; SOFT-NEXT: mov r4, r6 2076; SOFT-NEXT: .LBB23_2: 2077; SOFT-NEXT: ldr r1, .LCPI23_0 2078; SOFT-NEXT: mov r0, r5 2079; SOFT-NEXT: bl __aeabi_fcmpgt 2080; SOFT-NEXT: cmp r0, #0 2081; SOFT-NEXT: beq .LBB23_4 2082; SOFT-NEXT: @ %bb.3: 2083; SOFT-NEXT: ldr r4, .LCPI23_1 2084; SOFT-NEXT: .LBB23_4: 2085; SOFT-NEXT: mov r0, r4 2086; SOFT-NEXT: pop {r4, r5, r6, pc} 2087; SOFT-NEXT: .p2align 2 2088; SOFT-NEXT: @ %bb.5: 2089; SOFT-NEXT: .LCPI23_0: 2090; SOFT-NEXT: .long 1199570688 @ 0x477fff00 2091; SOFT-NEXT: .LCPI23_1: 2092; SOFT-NEXT: .long 65535 @ 0xffff 2093; 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_h2f 2099; VFP2-NEXT: vmov s0, r0 2100; VFP2-NEXT: vldr s4, .LCPI23_0 2101; VFP2-NEXT: vcvt.u32.f32 s2, s0 2102; VFP2-NEXT: vcmp.f32 s0, #0 2103; VFP2-NEXT: vmrs APSR_nzcv, fpscr 2104; VFP2-NEXT: vcmp.f32 s0, s4 2105; VFP2-NEXT: vmov r0, s2 2106; VFP2-NEXT: it lt 2107; VFP2-NEXT: movlt r0, #0 2108; VFP2-NEXT: vmrs APSR_nzcv, fpscr 2109; VFP2-NEXT: it gt 2110; VFP2-NEXT: movwgt r0, #65535 2111; VFP2-NEXT: pop {r7, pc} 2112; VFP2-NEXT: .p2align 2 2113; VFP2-NEXT: @ %bb.1: 2114; VFP2-NEXT: .LCPI23_0: 2115; VFP2-NEXT: .long 0x477fff00 @ float 65535 2116; 2117; FP16-LABEL: test_signed_i16_f16: 2118; FP16: @ %bb.0: 2119; FP16-NEXT: vmov.f16 s0, r0 2120; FP16-NEXT: vldr s4, .LCPI23_1 2121; FP16-NEXT: vcvtb.f32.f16 s0, s0 2122; FP16-NEXT: vldr s2, .LCPI23_0 2123; FP16-NEXT: vmaxnm.f32 s0, s0, s4 2124; FP16-NEXT: vminnm.f32 s0, s0, s2 2125; FP16-NEXT: vcvt.u32.f32 s0, s0 2126; FP16-NEXT: vmov r0, s0 2127; FP16-NEXT: bx lr 2128; FP16-NEXT: .p2align 2 2129; FP16-NEXT: @ %bb.1: 2130; FP16-NEXT: .LCPI23_0: 2131; FP16-NEXT: .long 0x477fff00 @ float 65535 2132; FP16-NEXT: .LCPI23_1: 2133; FP16-NEXT: .long 0x00000000 @ float 0 2134 %x = call i16 @llvm.fptoui.sat.i16.f16(half %f) 2135 ret i16 %x 2136} 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, r0 2144; SOFT-NEXT: bl __aeabi_h2f 2145; SOFT-NEXT: mov r5, r0 2146; SOFT-NEXT: movs r1, #0 2147; SOFT-NEXT: bl __aeabi_fcmpge 2148; SOFT-NEXT: mov r6, r0 2149; SOFT-NEXT: mov r0, r5 2150; SOFT-NEXT: bl __aeabi_f2uiz 2151; SOFT-NEXT: mov r4, r0 2152; SOFT-NEXT: cmp r6, #0 2153; SOFT-NEXT: bne .LBB24_2 2154; SOFT-NEXT: @ %bb.1: 2155; SOFT-NEXT: mov r4, r6 2156; SOFT-NEXT: .LBB24_2: 2157; SOFT-NEXT: ldr r1, .LCPI24_0 2158; SOFT-NEXT: mov r0, r5 2159; SOFT-NEXT: bl __aeabi_fcmpgt 2160; SOFT-NEXT: cmp r0, #0 2161; SOFT-NEXT: beq .LBB24_4 2162; SOFT-NEXT: @ %bb.3: 2163; SOFT-NEXT: ldr r4, .LCPI24_1 2164; SOFT-NEXT: .LBB24_4: 2165; SOFT-NEXT: mov r0, r4 2166; SOFT-NEXT: pop {r4, r5, r6, pc} 2167; SOFT-NEXT: .p2align 2 2168; SOFT-NEXT: @ %bb.5: 2169; SOFT-NEXT: .LCPI24_0: 2170; SOFT-NEXT: .long 1224736736 @ 0x48ffffe0 2171; SOFT-NEXT: .LCPI24_1: 2172; SOFT-NEXT: .long 524287 @ 0x7ffff 2173; 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_h2f 2179; VFP2-NEXT: vmov s0, r0 2180; VFP2-NEXT: vldr s4, .LCPI24_0 2181; VFP2-NEXT: vcvt.u32.f32 s2, s0 2182; VFP2-NEXT: vcmp.f32 s0, #0 2183; VFP2-NEXT: vmrs APSR_nzcv, fpscr 2184; VFP2-NEXT: vcmp.f32 s0, s4 2185; VFP2-NEXT: vmov r0, s2 2186; VFP2-NEXT: it lt 2187; VFP2-NEXT: movlt r0, #0 2188; VFP2-NEXT: vmrs APSR_nzcv, fpscr 2189; VFP2-NEXT: itt gt 2190; VFP2-NEXT: movwgt r0, #65535 2191; VFP2-NEXT: movtgt r0, #7 2192; VFP2-NEXT: pop {r7, pc} 2193; VFP2-NEXT: .p2align 2 2194; VFP2-NEXT: @ %bb.1: 2195; VFP2-NEXT: .LCPI24_0: 2196; VFP2-NEXT: .long 0x48ffffe0 @ float 524287 2197; 2198; FP16-LABEL: test_signed_i19_f16: 2199; FP16: @ %bb.0: 2200; FP16-NEXT: vmov.f16 s0, r0 2201; FP16-NEXT: vldr s4, .LCPI24_1 2202; FP16-NEXT: vcvtb.f32.f16 s0, s0 2203; FP16-NEXT: vldr s2, .LCPI24_0 2204; FP16-NEXT: vmaxnm.f32 s0, s0, s4 2205; FP16-NEXT: vminnm.f32 s0, s0, s2 2206; FP16-NEXT: vcvt.u32.f32 s0, s0 2207; FP16-NEXT: vmov r0, s0 2208; FP16-NEXT: bx lr 2209; FP16-NEXT: .p2align 2 2210; FP16-NEXT: @ %bb.1: 2211; FP16-NEXT: .LCPI24_0: 2212; FP16-NEXT: .long 0x48ffffe0 @ float 524287 2213; FP16-NEXT: .LCPI24_1: 2214; FP16-NEXT: .long 0x00000000 @ float 0 2215 %x = call i19 @llvm.fptoui.sat.i19.f16(half %f) 2216 ret i19 %x 2217} 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 #4 2225; SOFT-NEXT: sub sp, #4 2226; SOFT-NEXT: uxth r0, r0 2227; SOFT-NEXT: bl __aeabi_h2f 2228; SOFT-NEXT: mov r6, r0 2229; SOFT-NEXT: movs r4, #0 2230; SOFT-NEXT: mov r1, r4 2231; SOFT-NEXT: bl __aeabi_fcmpge 2232; SOFT-NEXT: mov r7, r0 2233; SOFT-NEXT: mov r0, r6 2234; SOFT-NEXT: bl __aeabi_f2uiz 2235; SOFT-NEXT: mov r5, r0 2236; SOFT-NEXT: cmp r7, #0 2237; SOFT-NEXT: bne .LBB25_2 2238; SOFT-NEXT: @ %bb.1: 2239; SOFT-NEXT: mov r5, r7 2240; SOFT-NEXT: .LBB25_2: 2241; SOFT-NEXT: ldr r1, .LCPI25_0 2242; SOFT-NEXT: mov r0, r6 2243; SOFT-NEXT: bl __aeabi_fcmpgt 2244; SOFT-NEXT: cmp r0, #0 2245; SOFT-NEXT: beq .LBB25_4 2246; SOFT-NEXT: @ %bb.3: 2247; SOFT-NEXT: mvns r5, r4 2248; SOFT-NEXT: .LBB25_4: 2249; SOFT-NEXT: mov r0, r5 2250; SOFT-NEXT: add sp, #4 2251; SOFT-NEXT: pop {r4, r5, r6, r7, pc} 2252; SOFT-NEXT: .p2align 2 2253; SOFT-NEXT: @ %bb.5: 2254; SOFT-NEXT: .LCPI25_0: 2255; SOFT-NEXT: .long 1333788671 @ 0x4f7fffff 2256; 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_h2f 2262; VFP2-NEXT: vmov s0, r0 2263; VFP2-NEXT: vcvt.u32.f32 s0, s0 2264; VFP2-NEXT: vmov r0, s0 2265; VFP2-NEXT: pop {r7, pc} 2266; 2267; FP16-LABEL: test_signed_i32_f16: 2268; FP16: @ %bb.0: 2269; FP16-NEXT: vmov.f16 s0, r0 2270; FP16-NEXT: vcvt.u32.f16 s0, s0 2271; FP16-NEXT: vmov r0, s0 2272; FP16-NEXT: bx lr 2273 %x = call i32 @llvm.fptoui.sat.i32.f16(half %f) 2274 ret i32 %x 2275} 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 #4 2283; SOFT-NEXT: sub sp, #4 2284; SOFT-NEXT: uxth r0, r0 2285; SOFT-NEXT: bl __aeabi_h2f 2286; SOFT-NEXT: mov r6, r0 2287; SOFT-NEXT: movs r5, #0 2288; SOFT-NEXT: mov r1, r5 2289; SOFT-NEXT: bl __aeabi_fcmpge 2290; SOFT-NEXT: mov r4, r0 2291; SOFT-NEXT: mov r0, r6 2292; SOFT-NEXT: bl __aeabi_f2ulz 2293; SOFT-NEXT: mov r7, r1 2294; SOFT-NEXT: cmp r4, #0 2295; SOFT-NEXT: bne .LBB26_2 2296; SOFT-NEXT: @ %bb.1: 2297; SOFT-NEXT: mov r7, r4 2298; SOFT-NEXT: .LBB26_2: 2299; SOFT-NEXT: bne .LBB26_4 2300; SOFT-NEXT: @ %bb.3: 2301; SOFT-NEXT: mov r0, r4 2302; SOFT-NEXT: .LBB26_4: 2303; SOFT-NEXT: mov r4, r0 2304; SOFT-NEXT: ldr r1, .LCPI26_0 2305; SOFT-NEXT: mov r0, r6 2306; SOFT-NEXT: bl __aeabi_fcmpgt 2307; SOFT-NEXT: mov r1, r0 2308; SOFT-NEXT: mvns r0, r5 2309; SOFT-NEXT: cmp r1, #0 2310; SOFT-NEXT: bne .LBB26_6 2311; SOFT-NEXT: @ %bb.5: 2312; SOFT-NEXT: mov r0, r4 2313; SOFT-NEXT: .LBB26_6: 2314; SOFT-NEXT: beq .LBB26_8 2315; SOFT-NEXT: @ %bb.7: 2316; SOFT-NEXT: ldr r7, .LCPI26_1 2317; SOFT-NEXT: .LBB26_8: 2318; SOFT-NEXT: mov r1, r7 2319; SOFT-NEXT: add sp, #4 2320; SOFT-NEXT: pop {r4, r5, r6, r7, pc} 2321; SOFT-NEXT: .p2align 2 2322; SOFT-NEXT: @ %bb.9: 2323; SOFT-NEXT: .LCPI26_0: 2324; SOFT-NEXT: .long 1484783615 @ 0x587fffff 2325; SOFT-NEXT: .LCPI26_1: 2326; SOFT-NEXT: .long 262143 @ 0x3ffff 2327; 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_h2f 2333; VFP2-NEXT: mov r4, r0 2334; VFP2-NEXT: bl __aeabi_f2ulz 2335; VFP2-NEXT: vmov s0, r4 2336; VFP2-NEXT: vldr s2, .LCPI26_0 2337; VFP2-NEXT: vcmp.f32 s0, #0 2338; VFP2-NEXT: vmrs APSR_nzcv, fpscr 2339; VFP2-NEXT: itt lt 2340; VFP2-NEXT: movlt r1, #0 2341; VFP2-NEXT: movlt r0, #0 2342; VFP2-NEXT: vcmp.f32 s0, s2 2343; VFP2-NEXT: vmrs APSR_nzcv, fpscr 2344; VFP2-NEXT: ittt gt 2345; VFP2-NEXT: movwgt r1, #65535 2346; VFP2-NEXT: movtgt r1, #3 2347; VFP2-NEXT: movgt.w r0, #-1 2348; VFP2-NEXT: pop {r4, pc} 2349; VFP2-NEXT: .p2align 2 2350; VFP2-NEXT: @ %bb.1: 2351; VFP2-NEXT: .LCPI26_0: 2352; VFP2-NEXT: .long 0x587fffff @ float 1.12589984E+15 2353; 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, r0 2361; FP16-NEXT: vcvtb.f32.f16 s16, s0 2362; FP16-NEXT: vmov r0, s16 2363; FP16-NEXT: bl __aeabi_f2ulz 2364; FP16-NEXT: vldr s0, .LCPI26_0 2365; FP16-NEXT: vcmp.f32 s16, #0 2366; FP16-NEXT: vmrs APSR_nzcv, fpscr 2367; FP16-NEXT: itt lt 2368; FP16-NEXT: movlt r1, #0 2369; FP16-NEXT: movlt r0, #0 2370; FP16-NEXT: vcmp.f32 s16, s0 2371; FP16-NEXT: vmrs APSR_nzcv, fpscr 2372; FP16-NEXT: ittt gt 2373; FP16-NEXT: movwgt r1, #65535 2374; FP16-NEXT: movtgt r1, #3 2375; FP16-NEXT: movgt.w r0, #-1 2376; FP16-NEXT: vpop {d8} 2377; FP16-NEXT: pop {r7, pc} 2378; FP16-NEXT: .p2align 2 2379; FP16-NEXT: @ %bb.1: 2380; FP16-NEXT: .LCPI26_0: 2381; FP16-NEXT: .long 0x587fffff @ float 1.12589984E+15 2382 %x = call i50 @llvm.fptoui.sat.i50.f16(half %f) 2383 ret i50 %x 2384} 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 #4 2392; SOFT-NEXT: sub sp, #4 2393; SOFT-NEXT: uxth r0, r0 2394; SOFT-NEXT: bl __aeabi_h2f 2395; SOFT-NEXT: mov r6, r0 2396; SOFT-NEXT: movs r4, #0 2397; SOFT-NEXT: mov r1, r4 2398; SOFT-NEXT: bl __aeabi_fcmpge 2399; SOFT-NEXT: mov r5, r0 2400; SOFT-NEXT: mov r0, r6 2401; SOFT-NEXT: bl __aeabi_f2ulz 2402; SOFT-NEXT: mov r7, r0 2403; SOFT-NEXT: cmp r5, #0 2404; SOFT-NEXT: bne .LBB27_2 2405; SOFT-NEXT: @ %bb.1: 2406; SOFT-NEXT: mov r1, r5 2407; SOFT-NEXT: .LBB27_2: 2408; SOFT-NEXT: str r1, [sp] @ 4-byte Spill 2409; SOFT-NEXT: bne .LBB27_4 2410; SOFT-NEXT: @ %bb.3: 2411; SOFT-NEXT: mov r7, r5 2412; SOFT-NEXT: .LBB27_4: 2413; SOFT-NEXT: ldr r1, .LCPI27_0 2414; SOFT-NEXT: mov r0, r6 2415; SOFT-NEXT: bl __aeabi_fcmpgt 2416; SOFT-NEXT: mvns r1, r4 2417; SOFT-NEXT: cmp r0, #0 2418; SOFT-NEXT: mov r0, r1 2419; SOFT-NEXT: beq .LBB27_7 2420; SOFT-NEXT: @ %bb.5: 2421; SOFT-NEXT: beq .LBB27_8 2422; SOFT-NEXT: .LBB27_6: 2423; SOFT-NEXT: add sp, #4 2424; SOFT-NEXT: pop {r4, r5, r6, r7, pc} 2425; SOFT-NEXT: .LBB27_7: 2426; SOFT-NEXT: mov r0, r7 2427; SOFT-NEXT: bne .LBB27_6 2428; SOFT-NEXT: .LBB27_8: 2429; SOFT-NEXT: ldr r1, [sp] @ 4-byte Reload 2430; SOFT-NEXT: add sp, #4 2431; SOFT-NEXT: pop {r4, r5, r6, r7, pc} 2432; SOFT-NEXT: .p2align 2 2433; SOFT-NEXT: @ %bb.9: 2434; SOFT-NEXT: .LCPI27_0: 2435; SOFT-NEXT: .long 1602224127 @ 0x5f7fffff 2436; 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_h2f 2442; VFP2-NEXT: mov r4, r0 2443; VFP2-NEXT: bl __aeabi_f2ulz 2444; VFP2-NEXT: vmov s0, r4 2445; VFP2-NEXT: vldr s2, .LCPI27_0 2446; VFP2-NEXT: vcmp.f32 s0, #0 2447; VFP2-NEXT: vmrs APSR_nzcv, fpscr 2448; VFP2-NEXT: itt lt 2449; VFP2-NEXT: movlt r1, #0 2450; VFP2-NEXT: movlt r0, #0 2451; VFP2-NEXT: vcmp.f32 s0, s2 2452; VFP2-NEXT: vmrs APSR_nzcv, fpscr 2453; VFP2-NEXT: itt gt 2454; VFP2-NEXT: movgt.w r0, #-1 2455; VFP2-NEXT: movgt.w r1, #-1 2456; VFP2-NEXT: pop {r4, pc} 2457; VFP2-NEXT: .p2align 2 2458; VFP2-NEXT: @ %bb.1: 2459; VFP2-NEXT: .LCPI27_0: 2460; VFP2-NEXT: .long 0x5f7fffff @ float 1.8446743E+19 2461; 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, r0 2469; FP16-NEXT: vcvtb.f32.f16 s16, s0 2470; FP16-NEXT: vmov r0, s16 2471; FP16-NEXT: bl __aeabi_f2ulz 2472; FP16-NEXT: vldr s0, .LCPI27_0 2473; FP16-NEXT: vcmp.f32 s16, #0 2474; FP16-NEXT: vmrs APSR_nzcv, fpscr 2475; FP16-NEXT: itt lt 2476; FP16-NEXT: movlt r1, #0 2477; FP16-NEXT: movlt r0, #0 2478; FP16-NEXT: vcmp.f32 s16, s0 2479; FP16-NEXT: vmrs APSR_nzcv, fpscr 2480; FP16-NEXT: itt gt 2481; FP16-NEXT: movgt.w r0, #-1 2482; FP16-NEXT: movgt.w r1, #-1 2483; FP16-NEXT: vpop {d8} 2484; FP16-NEXT: pop {r7, pc} 2485; FP16-NEXT: .p2align 2 2486; FP16-NEXT: @ %bb.1: 2487; FP16-NEXT: .LCPI27_0: 2488; FP16-NEXT: .long 0x5f7fffff @ float 1.8446743E+19 2489 %x = call i64 @llvm.fptoui.sat.i64.f16(half %f) 2490 ret i64 %x 2491} 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 #12 2499; SOFT-NEXT: sub sp, #12 2500; SOFT-NEXT: uxth r0, r0 2501; SOFT-NEXT: bl __aeabi_h2f 2502; SOFT-NEXT: mov r4, r0 2503; SOFT-NEXT: movs r6, #0 2504; SOFT-NEXT: mov r1, r6 2505; SOFT-NEXT: bl __aeabi_fcmpge 2506; SOFT-NEXT: mov r7, r0 2507; SOFT-NEXT: mov r0, r4 2508; SOFT-NEXT: bl __fixunssfti 2509; SOFT-NEXT: mov r5, r0 2510; SOFT-NEXT: cmp r7, #0 2511; SOFT-NEXT: beq .LBB28_11 2512; SOFT-NEXT: @ %bb.1: 2513; SOFT-NEXT: beq .LBB28_12 2514; SOFT-NEXT: .LBB28_2: 2515; SOFT-NEXT: bne .LBB28_4 2516; SOFT-NEXT: .LBB28_3: 2517; SOFT-NEXT: mov r1, r7 2518; SOFT-NEXT: .LBB28_4: 2519; SOFT-NEXT: str r1, [sp] @ 4-byte Spill 2520; SOFT-NEXT: str r2, [sp, #4] @ 4-byte Spill 2521; SOFT-NEXT: str r3, [sp, #8] @ 4-byte Spill 2522; SOFT-NEXT: bne .LBB28_6 2523; SOFT-NEXT: @ %bb.5: 2524; SOFT-NEXT: mov r5, r7 2525; SOFT-NEXT: .LBB28_6: 2526; SOFT-NEXT: ldr r1, .LCPI28_0 2527; SOFT-NEXT: mov r0, r4 2528; SOFT-NEXT: bl __aeabi_fcmpgt 2529; SOFT-NEXT: mvns r2, r6 2530; SOFT-NEXT: movs r3, #15 2531; SOFT-NEXT: cmp r0, #0 2532; SOFT-NEXT: mov r0, r2 2533; SOFT-NEXT: beq .LBB28_13 2534; SOFT-NEXT: @ %bb.7: 2535; SOFT-NEXT: mov r1, r2 2536; SOFT-NEXT: beq .LBB28_14 2537; SOFT-NEXT: .LBB28_8: 2538; SOFT-NEXT: beq .LBB28_15 2539; SOFT-NEXT: .LBB28_9: 2540; SOFT-NEXT: beq .LBB28_16 2541; SOFT-NEXT: .LBB28_10: 2542; SOFT-NEXT: add sp, #12 2543; SOFT-NEXT: pop {r4, r5, r6, r7, pc} 2544; SOFT-NEXT: .LBB28_11: 2545; SOFT-NEXT: mov r3, r7 2546; SOFT-NEXT: bne .LBB28_2 2547; SOFT-NEXT: .LBB28_12: 2548; SOFT-NEXT: mov r2, r7 2549; SOFT-NEXT: beq .LBB28_3 2550; SOFT-NEXT: b .LBB28_4 2551; SOFT-NEXT: .LBB28_13: 2552; SOFT-NEXT: mov r0, r5 2553; SOFT-NEXT: mov r1, r2 2554; SOFT-NEXT: bne .LBB28_8 2555; SOFT-NEXT: .LBB28_14: 2556; SOFT-NEXT: ldr r1, [sp] @ 4-byte Reload 2557; SOFT-NEXT: bne .LBB28_9 2558; SOFT-NEXT: .LBB28_15: 2559; SOFT-NEXT: ldr r2, [sp, #4] @ 4-byte Reload 2560; SOFT-NEXT: bne .LBB28_10 2561; SOFT-NEXT: .LBB28_16: 2562; SOFT-NEXT: ldr r3, [sp, #8] @ 4-byte Reload 2563; SOFT-NEXT: add sp, #12 2564; SOFT-NEXT: pop {r4, r5, r6, r7, pc} 2565; SOFT-NEXT: .p2align 2 2566; SOFT-NEXT: @ %bb.17: 2567; SOFT-NEXT: .LCPI28_0: 2568; SOFT-NEXT: .long 1904214015 @ 0x717fffff 2569; 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_h2f 2575; VFP2-NEXT: mov r4, r0 2576; VFP2-NEXT: bl __fixunssfti 2577; VFP2-NEXT: vmov s0, r4 2578; VFP2-NEXT: vldr s2, .LCPI28_0 2579; VFP2-NEXT: vcmp.f32 s0, #0 2580; VFP2-NEXT: vmrs APSR_nzcv, fpscr 2581; VFP2-NEXT: itttt lt 2582; VFP2-NEXT: movlt r3, #0 2583; VFP2-NEXT: movlt r2, #0 2584; VFP2-NEXT: movlt r1, #0 2585; VFP2-NEXT: movlt r0, #0 2586; VFP2-NEXT: vcmp.f32 s0, s2 2587; VFP2-NEXT: vmrs APSR_nzcv, fpscr 2588; VFP2-NEXT: itttt gt 2589; VFP2-NEXT: movgt.w r0, #-1 2590; VFP2-NEXT: movgt.w r1, #-1 2591; VFP2-NEXT: movgt.w r2, #-1 2592; VFP2-NEXT: movgt r3, #15 2593; VFP2-NEXT: pop {r4, pc} 2594; VFP2-NEXT: .p2align 2 2595; VFP2-NEXT: @ %bb.1: 2596; VFP2-NEXT: .LCPI28_0: 2597; VFP2-NEXT: .long 0x717fffff @ float 1.26765052E+30 2598; 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, r0 2606; FP16-NEXT: vcvtb.f32.f16 s16, s0 2607; FP16-NEXT: vmov r0, s16 2608; FP16-NEXT: bl __fixunssfti 2609; FP16-NEXT: vldr s0, .LCPI28_0 2610; FP16-NEXT: vcmp.f32 s16, #0 2611; FP16-NEXT: vmrs APSR_nzcv, fpscr 2612; FP16-NEXT: itttt lt 2613; FP16-NEXT: movlt r3, #0 2614; FP16-NEXT: movlt r2, #0 2615; FP16-NEXT: movlt r1, #0 2616; FP16-NEXT: movlt r0, #0 2617; FP16-NEXT: vcmp.f32 s16, s0 2618; FP16-NEXT: vmrs APSR_nzcv, fpscr 2619; FP16-NEXT: itttt gt 2620; FP16-NEXT: movgt.w r0, #-1 2621; FP16-NEXT: movgt.w r1, #-1 2622; FP16-NEXT: movgt.w r2, #-1 2623; FP16-NEXT: movgt r3, #15 2624; FP16-NEXT: vpop {d8} 2625; FP16-NEXT: pop {r7, pc} 2626; FP16-NEXT: .p2align 2 2627; FP16-NEXT: @ %bb.1: 2628; FP16-NEXT: .LCPI28_0: 2629; FP16-NEXT: .long 0x717fffff @ float 1.26765052E+30 2630 %x = call i100 @llvm.fptoui.sat.i100.f16(half %f) 2631 ret i100 %x 2632} 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 #12 2640; SOFT-NEXT: sub sp, #12 2641; SOFT-NEXT: uxth r0, r0 2642; SOFT-NEXT: bl __aeabi_h2f 2643; SOFT-NEXT: mov r4, r0 2644; SOFT-NEXT: movs r6, #0 2645; SOFT-NEXT: mov r1, r6 2646; SOFT-NEXT: bl __aeabi_fcmpge 2647; SOFT-NEXT: mov r7, r0 2648; SOFT-NEXT: mov r0, r4 2649; SOFT-NEXT: bl __fixunssfti 2650; SOFT-NEXT: mov r5, r0 2651; SOFT-NEXT: cmp r7, #0 2652; SOFT-NEXT: beq .LBB29_11 2653; SOFT-NEXT: @ %bb.1: 2654; SOFT-NEXT: beq .LBB29_12 2655; SOFT-NEXT: .LBB29_2: 2656; SOFT-NEXT: bne .LBB29_4 2657; SOFT-NEXT: .LBB29_3: 2658; SOFT-NEXT: mov r1, r7 2659; SOFT-NEXT: .LBB29_4: 2660; SOFT-NEXT: str r1, [sp] @ 4-byte Spill 2661; SOFT-NEXT: str r2, [sp, #4] @ 4-byte Spill 2662; SOFT-NEXT: str r3, [sp, #8] @ 4-byte Spill 2663; SOFT-NEXT: bne .LBB29_6 2664; SOFT-NEXT: @ %bb.5: 2665; SOFT-NEXT: mov r5, r7 2666; SOFT-NEXT: .LBB29_6: 2667; SOFT-NEXT: ldr r1, .LCPI29_0 2668; SOFT-NEXT: mov r0, r4 2669; SOFT-NEXT: bl __aeabi_fcmpgt 2670; SOFT-NEXT: mvns r3, r6 2671; SOFT-NEXT: cmp r0, #0 2672; SOFT-NEXT: mov r0, r3 2673; SOFT-NEXT: beq .LBB29_13 2674; SOFT-NEXT: @ %bb.7: 2675; SOFT-NEXT: mov r1, r3 2676; SOFT-NEXT: beq .LBB29_14 2677; SOFT-NEXT: .LBB29_8: 2678; SOFT-NEXT: mov r2, r3 2679; SOFT-NEXT: beq .LBB29_15 2680; SOFT-NEXT: .LBB29_9: 2681; SOFT-NEXT: beq .LBB29_16 2682; SOFT-NEXT: .LBB29_10: 2683; SOFT-NEXT: add sp, #12 2684; SOFT-NEXT: pop {r4, r5, r6, r7, pc} 2685; SOFT-NEXT: .LBB29_11: 2686; SOFT-NEXT: mov r3, r7 2687; SOFT-NEXT: bne .LBB29_2 2688; SOFT-NEXT: .LBB29_12: 2689; SOFT-NEXT: mov r2, r7 2690; SOFT-NEXT: beq .LBB29_3 2691; SOFT-NEXT: b .LBB29_4 2692; SOFT-NEXT: .LBB29_13: 2693; SOFT-NEXT: mov r0, r5 2694; SOFT-NEXT: mov r1, r3 2695; SOFT-NEXT: bne .LBB29_8 2696; SOFT-NEXT: .LBB29_14: 2697; SOFT-NEXT: ldr r1, [sp] @ 4-byte Reload 2698; SOFT-NEXT: mov r2, r3 2699; SOFT-NEXT: bne .LBB29_9 2700; SOFT-NEXT: .LBB29_15: 2701; SOFT-NEXT: ldr r2, [sp, #4] @ 4-byte Reload 2702; SOFT-NEXT: bne .LBB29_10 2703; SOFT-NEXT: .LBB29_16: 2704; SOFT-NEXT: ldr r3, [sp, #8] @ 4-byte Reload 2705; SOFT-NEXT: add sp, #12 2706; SOFT-NEXT: pop {r4, r5, r6, r7, pc} 2707; SOFT-NEXT: .p2align 2 2708; SOFT-NEXT: @ %bb.17: 2709; SOFT-NEXT: .LCPI29_0: 2710; SOFT-NEXT: .long 2139095039 @ 0x7f7fffff 2711; 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_h2f 2717; VFP2-NEXT: mov r4, r0 2718; VFP2-NEXT: bl __fixunssfti 2719; VFP2-NEXT: vmov s0, r4 2720; VFP2-NEXT: vldr s2, .LCPI29_0 2721; VFP2-NEXT: vcmp.f32 s0, #0 2722; VFP2-NEXT: vmrs APSR_nzcv, fpscr 2723; VFP2-NEXT: itttt lt 2724; VFP2-NEXT: movlt r3, #0 2725; VFP2-NEXT: movlt r2, #0 2726; VFP2-NEXT: movlt r1, #0 2727; VFP2-NEXT: movlt r0, #0 2728; VFP2-NEXT: vcmp.f32 s0, s2 2729; VFP2-NEXT: vmrs APSR_nzcv, fpscr 2730; VFP2-NEXT: itttt gt 2731; VFP2-NEXT: movgt.w r0, #-1 2732; VFP2-NEXT: movgt.w r1, #-1 2733; VFP2-NEXT: movgt.w r2, #-1 2734; VFP2-NEXT: movgt.w r3, #-1 2735; VFP2-NEXT: pop {r4, pc} 2736; VFP2-NEXT: .p2align 2 2737; VFP2-NEXT: @ %bb.1: 2738; VFP2-NEXT: .LCPI29_0: 2739; VFP2-NEXT: .long 0x7f7fffff @ float 3.40282347E+38 2740; 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, r0 2748; FP16-NEXT: vcvtb.f32.f16 s16, s0 2749; FP16-NEXT: vmov r0, s16 2750; FP16-NEXT: bl __fixunssfti 2751; FP16-NEXT: vldr s0, .LCPI29_0 2752; FP16-NEXT: vcmp.f32 s16, #0 2753; FP16-NEXT: vmrs APSR_nzcv, fpscr 2754; FP16-NEXT: itttt lt 2755; FP16-NEXT: movlt r3, #0 2756; FP16-NEXT: movlt r2, #0 2757; FP16-NEXT: movlt r1, #0 2758; FP16-NEXT: movlt r0, #0 2759; FP16-NEXT: vcmp.f32 s16, s0 2760; FP16-NEXT: vmrs APSR_nzcv, fpscr 2761; FP16-NEXT: itttt gt 2762; FP16-NEXT: movgt.w r0, #-1 2763; FP16-NEXT: movgt.w r1, #-1 2764; FP16-NEXT: movgt.w r2, #-1 2765; FP16-NEXT: movgt.w r3, #-1 2766; FP16-NEXT: vpop {d8} 2767; FP16-NEXT: pop {r7, pc} 2768; FP16-NEXT: .p2align 2 2769; FP16-NEXT: @ %bb.1: 2770; FP16-NEXT: .LCPI29_0: 2771; FP16-NEXT: .long 0x7f7fffff @ float 3.40282347E+38 2772 %x = call i128 @llvm.fptoui.sat.i128.f16(half %f) 2773 ret i128 %x 2774} 2775