1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -mtriple=i686-- -mcpu pentium4 < %s | FileCheck %s -check-prefix=SSE 3; RUN: llc -mtriple=i686-- -mcpu pentium3 < %s | FileCheck %s -check-prefixes=NOSSE,NOSSE2 4; RUN: llc -mtriple=i686-- -mcpu pentium2 < %s | FileCheck %s -check-prefixes=NOSSE,NOSSE1 5; RUN: llc -mtriple=i686-- -mcpu pentium < %s | FileCheck %s -check-prefix=NOCMOV 6; PR14035 7 8define double @test1(i32 %a, i32 %b, double %x) nounwind { 9; SSE-LABEL: test1: 10; SSE: # %bb.0: 11; SSE-NEXT: pushl %ebp 12; SSE-NEXT: movl %esp, %ebp 13; SSE-NEXT: andl $-8, %esp 14; SSE-NEXT: subl $8, %esp 15; SSE-NEXT: movl 8(%ebp), %eax 16; SSE-NEXT: cmpl 12(%ebp), %eax 17; SSE-NEXT: ja .LBB0_1 18; SSE-NEXT: # %bb.2: 19; SSE-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero 20; SSE-NEXT: jmp .LBB0_3 21; SSE-NEXT: .LBB0_1: 22; SSE-NEXT: movsd {{.*#+}} xmm0 = [9.9E+1,0.0E+0] 23; SSE-NEXT: .LBB0_3: 24; SSE-NEXT: movsd %xmm0, (%esp) 25; SSE-NEXT: fldl (%esp) 26; SSE-NEXT: movl %ebp, %esp 27; SSE-NEXT: popl %ebp 28; SSE-NEXT: retl 29; 30; NOSSE-LABEL: test1: 31; NOSSE: # %bb.0: 32; NOSSE-NEXT: fldl {{[0-9]+}}(%esp) 33; NOSSE-NEXT: movl {{[0-9]+}}(%esp), %eax 34; NOSSE-NEXT: cmpl {{[0-9]+}}(%esp), %eax 35; NOSSE-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}} 36; NOSSE-NEXT: fxch %st(1) 37; NOSSE-NEXT: fcmovnbe %st(1), %st 38; NOSSE-NEXT: fstp %st(1) 39; NOSSE-NEXT: retl 40; 41; NOCMOV-LABEL: test1: 42; NOCMOV: # %bb.0: 43; NOCMOV-NEXT: fldl {{[0-9]+}}(%esp) 44; NOCMOV-NEXT: movl {{[0-9]+}}(%esp), %eax 45; NOCMOV-NEXT: cmpl {{[0-9]+}}(%esp), %eax 46; NOCMOV-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}} 47; NOCMOV-NEXT: ja .LBB0_2 48; NOCMOV-NEXT: # %bb.1: 49; NOCMOV-NEXT: fstp %st(0) 50; NOCMOV-NEXT: fldz 51; NOCMOV-NEXT: fxch %st(1) 52; NOCMOV-NEXT: .LBB0_2: 53; NOCMOV-NEXT: fstp %st(1) 54; NOCMOV-NEXT: retl 55 %cmp = icmp ugt i32 %a, %b 56 %sel = select i1 %cmp, double 99.0, double %x 57 ret double %sel 58} 59 60define double @test2(i32 %a, i32 %b, double %x) nounwind { 61; SSE-LABEL: test2: 62; SSE: # %bb.0: 63; SSE-NEXT: pushl %ebp 64; SSE-NEXT: movl %esp, %ebp 65; SSE-NEXT: andl $-8, %esp 66; SSE-NEXT: subl $8, %esp 67; SSE-NEXT: movl 8(%ebp), %eax 68; SSE-NEXT: cmpl 12(%ebp), %eax 69; SSE-NEXT: jae .LBB1_1 70; SSE-NEXT: # %bb.2: 71; SSE-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero 72; SSE-NEXT: jmp .LBB1_3 73; SSE-NEXT: .LBB1_1: 74; SSE-NEXT: movsd {{.*#+}} xmm0 = [9.9E+1,0.0E+0] 75; SSE-NEXT: .LBB1_3: 76; SSE-NEXT: movsd %xmm0, (%esp) 77; SSE-NEXT: fldl (%esp) 78; SSE-NEXT: movl %ebp, %esp 79; SSE-NEXT: popl %ebp 80; SSE-NEXT: retl 81; 82; NOSSE-LABEL: test2: 83; NOSSE: # %bb.0: 84; NOSSE-NEXT: fldl {{[0-9]+}}(%esp) 85; NOSSE-NEXT: movl {{[0-9]+}}(%esp), %eax 86; NOSSE-NEXT: cmpl {{[0-9]+}}(%esp), %eax 87; NOSSE-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}} 88; NOSSE-NEXT: fxch %st(1) 89; NOSSE-NEXT: fcmovnb %st(1), %st 90; NOSSE-NEXT: fstp %st(1) 91; NOSSE-NEXT: retl 92; 93; NOCMOV-LABEL: test2: 94; NOCMOV: # %bb.0: 95; NOCMOV-NEXT: fldl {{[0-9]+}}(%esp) 96; NOCMOV-NEXT: movl {{[0-9]+}}(%esp), %eax 97; NOCMOV-NEXT: cmpl {{[0-9]+}}(%esp), %eax 98; NOCMOV-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}} 99; NOCMOV-NEXT: jae .LBB1_2 100; NOCMOV-NEXT: # %bb.1: 101; NOCMOV-NEXT: fstp %st(0) 102; NOCMOV-NEXT: fldz 103; NOCMOV-NEXT: fxch %st(1) 104; NOCMOV-NEXT: .LBB1_2: 105; NOCMOV-NEXT: fstp %st(1) 106; NOCMOV-NEXT: retl 107 %cmp = icmp uge i32 %a, %b 108 %sel = select i1 %cmp, double 99.0, double %x 109 ret double %sel 110} 111 112define double @test3(i32 %a, i32 %b, double %x) nounwind { 113; SSE-LABEL: test3: 114; SSE: # %bb.0: 115; SSE-NEXT: pushl %ebp 116; SSE-NEXT: movl %esp, %ebp 117; SSE-NEXT: andl $-8, %esp 118; SSE-NEXT: subl $8, %esp 119; SSE-NEXT: movl 8(%ebp), %eax 120; SSE-NEXT: cmpl 12(%ebp), %eax 121; SSE-NEXT: jb .LBB2_1 122; SSE-NEXT: # %bb.2: 123; SSE-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero 124; SSE-NEXT: jmp .LBB2_3 125; SSE-NEXT: .LBB2_1: 126; SSE-NEXT: movsd {{.*#+}} xmm0 = [9.9E+1,0.0E+0] 127; SSE-NEXT: .LBB2_3: 128; SSE-NEXT: movsd %xmm0, (%esp) 129; SSE-NEXT: fldl (%esp) 130; SSE-NEXT: movl %ebp, %esp 131; SSE-NEXT: popl %ebp 132; SSE-NEXT: retl 133; 134; NOSSE-LABEL: test3: 135; NOSSE: # %bb.0: 136; NOSSE-NEXT: fldl {{[0-9]+}}(%esp) 137; NOSSE-NEXT: movl {{[0-9]+}}(%esp), %eax 138; NOSSE-NEXT: cmpl {{[0-9]+}}(%esp), %eax 139; NOSSE-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}} 140; NOSSE-NEXT: fxch %st(1) 141; NOSSE-NEXT: fcmovb %st(1), %st 142; NOSSE-NEXT: fstp %st(1) 143; NOSSE-NEXT: retl 144; 145; NOCMOV-LABEL: test3: 146; NOCMOV: # %bb.0: 147; NOCMOV-NEXT: fldl {{[0-9]+}}(%esp) 148; NOCMOV-NEXT: movl {{[0-9]+}}(%esp), %eax 149; NOCMOV-NEXT: cmpl {{[0-9]+}}(%esp), %eax 150; NOCMOV-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}} 151; NOCMOV-NEXT: jb .LBB2_2 152; NOCMOV-NEXT: # %bb.1: 153; NOCMOV-NEXT: fstp %st(0) 154; NOCMOV-NEXT: fldz 155; NOCMOV-NEXT: fxch %st(1) 156; NOCMOV-NEXT: .LBB2_2: 157; NOCMOV-NEXT: fstp %st(1) 158; NOCMOV-NEXT: retl 159 %cmp = icmp ult i32 %a, %b 160 %sel = select i1 %cmp, double 99.0, double %x 161 ret double %sel 162} 163 164define double @test4(i32 %a, i32 %b, double %x) nounwind { 165; SSE-LABEL: test4: 166; SSE: # %bb.0: 167; SSE-NEXT: pushl %ebp 168; SSE-NEXT: movl %esp, %ebp 169; SSE-NEXT: andl $-8, %esp 170; SSE-NEXT: subl $8, %esp 171; SSE-NEXT: movl 8(%ebp), %eax 172; SSE-NEXT: cmpl 12(%ebp), %eax 173; SSE-NEXT: jbe .LBB3_1 174; SSE-NEXT: # %bb.2: 175; SSE-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero 176; SSE-NEXT: jmp .LBB3_3 177; SSE-NEXT: .LBB3_1: 178; SSE-NEXT: movsd {{.*#+}} xmm0 = [9.9E+1,0.0E+0] 179; SSE-NEXT: .LBB3_3: 180; SSE-NEXT: movsd %xmm0, (%esp) 181; SSE-NEXT: fldl (%esp) 182; SSE-NEXT: movl %ebp, %esp 183; SSE-NEXT: popl %ebp 184; SSE-NEXT: retl 185; 186; NOSSE-LABEL: test4: 187; NOSSE: # %bb.0: 188; NOSSE-NEXT: fldl {{[0-9]+}}(%esp) 189; NOSSE-NEXT: movl {{[0-9]+}}(%esp), %eax 190; NOSSE-NEXT: cmpl {{[0-9]+}}(%esp), %eax 191; NOSSE-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}} 192; NOSSE-NEXT: fxch %st(1) 193; NOSSE-NEXT: fcmovbe %st(1), %st 194; NOSSE-NEXT: fstp %st(1) 195; NOSSE-NEXT: retl 196; 197; NOCMOV-LABEL: test4: 198; NOCMOV: # %bb.0: 199; NOCMOV-NEXT: fldl {{[0-9]+}}(%esp) 200; NOCMOV-NEXT: movl {{[0-9]+}}(%esp), %eax 201; NOCMOV-NEXT: cmpl {{[0-9]+}}(%esp), %eax 202; NOCMOV-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}} 203; NOCMOV-NEXT: jbe .LBB3_2 204; NOCMOV-NEXT: # %bb.1: 205; NOCMOV-NEXT: fstp %st(0) 206; NOCMOV-NEXT: fldz 207; NOCMOV-NEXT: fxch %st(1) 208; NOCMOV-NEXT: .LBB3_2: 209; NOCMOV-NEXT: fstp %st(1) 210; NOCMOV-NEXT: retl 211 %cmp = icmp ule i32 %a, %b 212 %sel = select i1 %cmp, double 99.0, double %x 213 ret double %sel 214} 215 216define double @test5(i32 %a, i32 %b, double %x) nounwind { 217; SSE-LABEL: test5: 218; SSE: # %bb.0: 219; SSE-NEXT: pushl %ebp 220; SSE-NEXT: movl %esp, %ebp 221; SSE-NEXT: andl $-8, %esp 222; SSE-NEXT: subl $8, %esp 223; SSE-NEXT: movl 8(%ebp), %eax 224; SSE-NEXT: cmpl 12(%ebp), %eax 225; SSE-NEXT: jg .LBB4_1 226; SSE-NEXT: # %bb.2: 227; SSE-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero 228; SSE-NEXT: jmp .LBB4_3 229; SSE-NEXT: .LBB4_1: 230; SSE-NEXT: movsd {{.*#+}} xmm0 = [9.9E+1,0.0E+0] 231; SSE-NEXT: .LBB4_3: 232; SSE-NEXT: movsd %xmm0, (%esp) 233; SSE-NEXT: fldl (%esp) 234; SSE-NEXT: movl %ebp, %esp 235; SSE-NEXT: popl %ebp 236; SSE-NEXT: retl 237; 238; NOSSE-LABEL: test5: 239; NOSSE: # %bb.0: 240; NOSSE-NEXT: fldl {{[0-9]+}}(%esp) 241; NOSSE-NEXT: movl {{[0-9]+}}(%esp), %eax 242; NOSSE-NEXT: cmpl {{[0-9]+}}(%esp), %eax 243; NOSSE-NEXT: setg %al 244; NOSSE-NEXT: testb %al, %al 245; NOSSE-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}} 246; NOSSE-NEXT: fxch %st(1) 247; NOSSE-NEXT: fcmovne %st(1), %st 248; NOSSE-NEXT: fstp %st(1) 249; NOSSE-NEXT: retl 250; 251; NOCMOV-LABEL: test5: 252; NOCMOV: # %bb.0: 253; NOCMOV-NEXT: fldl {{[0-9]+}}(%esp) 254; NOCMOV-NEXT: movl {{[0-9]+}}(%esp), %eax 255; NOCMOV-NEXT: cmpl {{[0-9]+}}(%esp), %eax 256; NOCMOV-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}} 257; NOCMOV-NEXT: jg .LBB4_2 258; NOCMOV-NEXT: # %bb.1: 259; NOCMOV-NEXT: fstp %st(0) 260; NOCMOV-NEXT: fldz 261; NOCMOV-NEXT: fxch %st(1) 262; NOCMOV-NEXT: .LBB4_2: 263; NOCMOV-NEXT: fstp %st(1) 264; NOCMOV-NEXT: retl 265 %cmp = icmp sgt i32 %a, %b 266 %sel = select i1 %cmp, double 99.0, double %x 267 ret double %sel 268} 269 270define double @test6(i32 %a, i32 %b, double %x) nounwind { 271; SSE-LABEL: test6: 272; SSE: # %bb.0: 273; SSE-NEXT: pushl %ebp 274; SSE-NEXT: movl %esp, %ebp 275; SSE-NEXT: andl $-8, %esp 276; SSE-NEXT: subl $8, %esp 277; SSE-NEXT: movl 8(%ebp), %eax 278; SSE-NEXT: cmpl 12(%ebp), %eax 279; SSE-NEXT: jge .LBB5_1 280; SSE-NEXT: # %bb.2: 281; SSE-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero 282; SSE-NEXT: jmp .LBB5_3 283; SSE-NEXT: .LBB5_1: 284; SSE-NEXT: movsd {{.*#+}} xmm0 = [9.9E+1,0.0E+0] 285; SSE-NEXT: .LBB5_3: 286; SSE-NEXT: movsd %xmm0, (%esp) 287; SSE-NEXT: fldl (%esp) 288; SSE-NEXT: movl %ebp, %esp 289; SSE-NEXT: popl %ebp 290; SSE-NEXT: retl 291; 292; NOSSE-LABEL: test6: 293; NOSSE: # %bb.0: 294; NOSSE-NEXT: fldl {{[0-9]+}}(%esp) 295; NOSSE-NEXT: movl {{[0-9]+}}(%esp), %eax 296; NOSSE-NEXT: cmpl {{[0-9]+}}(%esp), %eax 297; NOSSE-NEXT: setge %al 298; NOSSE-NEXT: testb %al, %al 299; NOSSE-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}} 300; NOSSE-NEXT: fxch %st(1) 301; NOSSE-NEXT: fcmovne %st(1), %st 302; NOSSE-NEXT: fstp %st(1) 303; NOSSE-NEXT: retl 304; 305; NOCMOV-LABEL: test6: 306; NOCMOV: # %bb.0: 307; NOCMOV-NEXT: fldl {{[0-9]+}}(%esp) 308; NOCMOV-NEXT: movl {{[0-9]+}}(%esp), %eax 309; NOCMOV-NEXT: cmpl {{[0-9]+}}(%esp), %eax 310; NOCMOV-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}} 311; NOCMOV-NEXT: jge .LBB5_2 312; NOCMOV-NEXT: # %bb.1: 313; NOCMOV-NEXT: fstp %st(0) 314; NOCMOV-NEXT: fldz 315; NOCMOV-NEXT: fxch %st(1) 316; NOCMOV-NEXT: .LBB5_2: 317; NOCMOV-NEXT: fstp %st(1) 318; NOCMOV-NEXT: retl 319 %cmp = icmp sge i32 %a, %b 320 %sel = select i1 %cmp, double 99.0, double %x 321 ret double %sel 322} 323 324define double @test7(i32 %a, i32 %b, double %x) nounwind { 325; SSE-LABEL: test7: 326; SSE: # %bb.0: 327; SSE-NEXT: pushl %ebp 328; SSE-NEXT: movl %esp, %ebp 329; SSE-NEXT: andl $-8, %esp 330; SSE-NEXT: subl $8, %esp 331; SSE-NEXT: movl 8(%ebp), %eax 332; SSE-NEXT: cmpl 12(%ebp), %eax 333; SSE-NEXT: jl .LBB6_1 334; SSE-NEXT: # %bb.2: 335; SSE-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero 336; SSE-NEXT: jmp .LBB6_3 337; SSE-NEXT: .LBB6_1: 338; SSE-NEXT: movsd {{.*#+}} xmm0 = [9.9E+1,0.0E+0] 339; SSE-NEXT: .LBB6_3: 340; SSE-NEXT: movsd %xmm0, (%esp) 341; SSE-NEXT: fldl (%esp) 342; SSE-NEXT: movl %ebp, %esp 343; SSE-NEXT: popl %ebp 344; SSE-NEXT: retl 345; 346; NOSSE-LABEL: test7: 347; NOSSE: # %bb.0: 348; NOSSE-NEXT: fldl {{[0-9]+}}(%esp) 349; NOSSE-NEXT: movl {{[0-9]+}}(%esp), %eax 350; NOSSE-NEXT: cmpl {{[0-9]+}}(%esp), %eax 351; NOSSE-NEXT: setl %al 352; NOSSE-NEXT: testb %al, %al 353; NOSSE-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}} 354; NOSSE-NEXT: fxch %st(1) 355; NOSSE-NEXT: fcmovne %st(1), %st 356; NOSSE-NEXT: fstp %st(1) 357; NOSSE-NEXT: retl 358; 359; NOCMOV-LABEL: test7: 360; NOCMOV: # %bb.0: 361; NOCMOV-NEXT: fldl {{[0-9]+}}(%esp) 362; NOCMOV-NEXT: movl {{[0-9]+}}(%esp), %eax 363; NOCMOV-NEXT: cmpl {{[0-9]+}}(%esp), %eax 364; NOCMOV-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}} 365; NOCMOV-NEXT: jl .LBB6_2 366; NOCMOV-NEXT: # %bb.1: 367; NOCMOV-NEXT: fstp %st(0) 368; NOCMOV-NEXT: fldz 369; NOCMOV-NEXT: fxch %st(1) 370; NOCMOV-NEXT: .LBB6_2: 371; NOCMOV-NEXT: fstp %st(1) 372; NOCMOV-NEXT: retl 373 %cmp = icmp slt i32 %a, %b 374 %sel = select i1 %cmp, double 99.0, double %x 375 ret double %sel 376} 377 378define double @test8(i32 %a, i32 %b, double %x) nounwind { 379; SSE-LABEL: test8: 380; SSE: # %bb.0: 381; SSE-NEXT: pushl %ebp 382; SSE-NEXT: movl %esp, %ebp 383; SSE-NEXT: andl $-8, %esp 384; SSE-NEXT: subl $8, %esp 385; SSE-NEXT: movl 8(%ebp), %eax 386; SSE-NEXT: cmpl 12(%ebp), %eax 387; SSE-NEXT: jle .LBB7_1 388; SSE-NEXT: # %bb.2: 389; SSE-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero 390; SSE-NEXT: jmp .LBB7_3 391; SSE-NEXT: .LBB7_1: 392; SSE-NEXT: movsd {{.*#+}} xmm0 = [9.9E+1,0.0E+0] 393; SSE-NEXT: .LBB7_3: 394; SSE-NEXT: movsd %xmm0, (%esp) 395; SSE-NEXT: fldl (%esp) 396; SSE-NEXT: movl %ebp, %esp 397; SSE-NEXT: popl %ebp 398; SSE-NEXT: retl 399; 400; NOSSE-LABEL: test8: 401; NOSSE: # %bb.0: 402; NOSSE-NEXT: fldl {{[0-9]+}}(%esp) 403; NOSSE-NEXT: movl {{[0-9]+}}(%esp), %eax 404; NOSSE-NEXT: cmpl {{[0-9]+}}(%esp), %eax 405; NOSSE-NEXT: setle %al 406; NOSSE-NEXT: testb %al, %al 407; NOSSE-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}} 408; NOSSE-NEXT: fxch %st(1) 409; NOSSE-NEXT: fcmovne %st(1), %st 410; NOSSE-NEXT: fstp %st(1) 411; NOSSE-NEXT: retl 412; 413; NOCMOV-LABEL: test8: 414; NOCMOV: # %bb.0: 415; NOCMOV-NEXT: fldl {{[0-9]+}}(%esp) 416; NOCMOV-NEXT: movl {{[0-9]+}}(%esp), %eax 417; NOCMOV-NEXT: cmpl {{[0-9]+}}(%esp), %eax 418; NOCMOV-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}} 419; NOCMOV-NEXT: jle .LBB7_2 420; NOCMOV-NEXT: # %bb.1: 421; NOCMOV-NEXT: fstp %st(0) 422; NOCMOV-NEXT: fldz 423; NOCMOV-NEXT: fxch %st(1) 424; NOCMOV-NEXT: .LBB7_2: 425; NOCMOV-NEXT: fstp %st(1) 426; NOCMOV-NEXT: retl 427 %cmp = icmp sle i32 %a, %b 428 %sel = select i1 %cmp, double 99.0, double %x 429 ret double %sel 430} 431 432define float @test9(i32 %a, i32 %b, float %x) nounwind { 433; SSE-LABEL: test9: 434; SSE: # %bb.0: 435; SSE-NEXT: pushl %eax 436; SSE-NEXT: movl {{[0-9]+}}(%esp), %eax 437; SSE-NEXT: cmpl {{[0-9]+}}(%esp), %eax 438; SSE-NEXT: ja .LBB8_1 439; SSE-NEXT: # %bb.2: 440; SSE-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero 441; SSE-NEXT: jmp .LBB8_3 442; SSE-NEXT: .LBB8_1: 443; SSE-NEXT: movss {{.*#+}} xmm0 = [9.9E+1,0.0E+0,0.0E+0,0.0E+0] 444; SSE-NEXT: .LBB8_3: 445; SSE-NEXT: movss %xmm0, (%esp) 446; SSE-NEXT: flds (%esp) 447; SSE-NEXT: popl %eax 448; SSE-NEXT: retl 449; 450; NOSSE2-LABEL: test9: 451; NOSSE2: # %bb.0: 452; NOSSE2-NEXT: pushl %eax 453; NOSSE2-NEXT: movl {{[0-9]+}}(%esp), %eax 454; NOSSE2-NEXT: cmpl {{[0-9]+}}(%esp), %eax 455; NOSSE2-NEXT: ja .LBB8_1 456; NOSSE2-NEXT: # %bb.2: 457; NOSSE2-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero 458; NOSSE2-NEXT: jmp .LBB8_3 459; NOSSE2-NEXT: .LBB8_1: 460; NOSSE2-NEXT: movss {{.*#+}} xmm0 = [9.9E+1,0.0E+0,0.0E+0,0.0E+0] 461; NOSSE2-NEXT: .LBB8_3: 462; NOSSE2-NEXT: movss %xmm0, (%esp) 463; NOSSE2-NEXT: flds (%esp) 464; NOSSE2-NEXT: popl %eax 465; NOSSE2-NEXT: retl 466; 467; NOSSE1-LABEL: test9: 468; NOSSE1: # %bb.0: 469; NOSSE1-NEXT: flds {{[0-9]+}}(%esp) 470; NOSSE1-NEXT: movl {{[0-9]+}}(%esp), %eax 471; NOSSE1-NEXT: cmpl {{[0-9]+}}(%esp), %eax 472; NOSSE1-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}} 473; NOSSE1-NEXT: fxch %st(1) 474; NOSSE1-NEXT: fcmovnbe %st(1), %st 475; NOSSE1-NEXT: fstp %st(1) 476; NOSSE1-NEXT: retl 477; 478; NOCMOV-LABEL: test9: 479; NOCMOV: # %bb.0: 480; NOCMOV-NEXT: flds {{[0-9]+}}(%esp) 481; NOCMOV-NEXT: movl {{[0-9]+}}(%esp), %eax 482; NOCMOV-NEXT: cmpl {{[0-9]+}}(%esp), %eax 483; NOCMOV-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}} 484; NOCMOV-NEXT: ja .LBB8_2 485; NOCMOV-NEXT: # %bb.1: 486; NOCMOV-NEXT: fstp %st(0) 487; NOCMOV-NEXT: fldz 488; NOCMOV-NEXT: fxch %st(1) 489; NOCMOV-NEXT: .LBB8_2: 490; NOCMOV-NEXT: fstp %st(1) 491; NOCMOV-NEXT: retl 492 %cmp = icmp ugt i32 %a, %b 493 %sel = select i1 %cmp, float 99.0, float %x 494 ret float %sel 495} 496 497define float @test10(i32 %a, i32 %b, float %x) nounwind { 498; SSE-LABEL: test10: 499; SSE: # %bb.0: 500; SSE-NEXT: pushl %eax 501; SSE-NEXT: movl {{[0-9]+}}(%esp), %eax 502; SSE-NEXT: cmpl {{[0-9]+}}(%esp), %eax 503; SSE-NEXT: jae .LBB9_1 504; SSE-NEXT: # %bb.2: 505; SSE-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero 506; SSE-NEXT: jmp .LBB9_3 507; SSE-NEXT: .LBB9_1: 508; SSE-NEXT: movss {{.*#+}} xmm0 = [9.9E+1,0.0E+0,0.0E+0,0.0E+0] 509; SSE-NEXT: .LBB9_3: 510; SSE-NEXT: movss %xmm0, (%esp) 511; SSE-NEXT: flds (%esp) 512; SSE-NEXT: popl %eax 513; SSE-NEXT: retl 514; 515; NOSSE2-LABEL: test10: 516; NOSSE2: # %bb.0: 517; NOSSE2-NEXT: pushl %eax 518; NOSSE2-NEXT: movl {{[0-9]+}}(%esp), %eax 519; NOSSE2-NEXT: cmpl {{[0-9]+}}(%esp), %eax 520; NOSSE2-NEXT: jae .LBB9_1 521; NOSSE2-NEXT: # %bb.2: 522; NOSSE2-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero 523; NOSSE2-NEXT: jmp .LBB9_3 524; NOSSE2-NEXT: .LBB9_1: 525; NOSSE2-NEXT: movss {{.*#+}} xmm0 = [9.9E+1,0.0E+0,0.0E+0,0.0E+0] 526; NOSSE2-NEXT: .LBB9_3: 527; NOSSE2-NEXT: movss %xmm0, (%esp) 528; NOSSE2-NEXT: flds (%esp) 529; NOSSE2-NEXT: popl %eax 530; NOSSE2-NEXT: retl 531; 532; NOSSE1-LABEL: test10: 533; NOSSE1: # %bb.0: 534; NOSSE1-NEXT: flds {{[0-9]+}}(%esp) 535; NOSSE1-NEXT: movl {{[0-9]+}}(%esp), %eax 536; NOSSE1-NEXT: cmpl {{[0-9]+}}(%esp), %eax 537; NOSSE1-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}} 538; NOSSE1-NEXT: fxch %st(1) 539; NOSSE1-NEXT: fcmovnb %st(1), %st 540; NOSSE1-NEXT: fstp %st(1) 541; NOSSE1-NEXT: retl 542; 543; NOCMOV-LABEL: test10: 544; NOCMOV: # %bb.0: 545; NOCMOV-NEXT: flds {{[0-9]+}}(%esp) 546; NOCMOV-NEXT: movl {{[0-9]+}}(%esp), %eax 547; NOCMOV-NEXT: cmpl {{[0-9]+}}(%esp), %eax 548; NOCMOV-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}} 549; NOCMOV-NEXT: jae .LBB9_2 550; NOCMOV-NEXT: # %bb.1: 551; NOCMOV-NEXT: fstp %st(0) 552; NOCMOV-NEXT: fldz 553; NOCMOV-NEXT: fxch %st(1) 554; NOCMOV-NEXT: .LBB9_2: 555; NOCMOV-NEXT: fstp %st(1) 556; NOCMOV-NEXT: retl 557 %cmp = icmp uge i32 %a, %b 558 %sel = select i1 %cmp, float 99.0, float %x 559 ret float %sel 560} 561 562define float @test11(i32 %a, i32 %b, float %x) nounwind { 563; SSE-LABEL: test11: 564; SSE: # %bb.0: 565; SSE-NEXT: pushl %eax 566; SSE-NEXT: movl {{[0-9]+}}(%esp), %eax 567; SSE-NEXT: cmpl {{[0-9]+}}(%esp), %eax 568; SSE-NEXT: jb .LBB10_1 569; SSE-NEXT: # %bb.2: 570; SSE-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero 571; SSE-NEXT: jmp .LBB10_3 572; SSE-NEXT: .LBB10_1: 573; SSE-NEXT: movss {{.*#+}} xmm0 = [9.9E+1,0.0E+0,0.0E+0,0.0E+0] 574; SSE-NEXT: .LBB10_3: 575; SSE-NEXT: movss %xmm0, (%esp) 576; SSE-NEXT: flds (%esp) 577; SSE-NEXT: popl %eax 578; SSE-NEXT: retl 579; 580; NOSSE2-LABEL: test11: 581; NOSSE2: # %bb.0: 582; NOSSE2-NEXT: pushl %eax 583; NOSSE2-NEXT: movl {{[0-9]+}}(%esp), %eax 584; NOSSE2-NEXT: cmpl {{[0-9]+}}(%esp), %eax 585; NOSSE2-NEXT: jb .LBB10_1 586; NOSSE2-NEXT: # %bb.2: 587; NOSSE2-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero 588; NOSSE2-NEXT: jmp .LBB10_3 589; NOSSE2-NEXT: .LBB10_1: 590; NOSSE2-NEXT: movss {{.*#+}} xmm0 = [9.9E+1,0.0E+0,0.0E+0,0.0E+0] 591; NOSSE2-NEXT: .LBB10_3: 592; NOSSE2-NEXT: movss %xmm0, (%esp) 593; NOSSE2-NEXT: flds (%esp) 594; NOSSE2-NEXT: popl %eax 595; NOSSE2-NEXT: retl 596; 597; NOSSE1-LABEL: test11: 598; NOSSE1: # %bb.0: 599; NOSSE1-NEXT: flds {{[0-9]+}}(%esp) 600; NOSSE1-NEXT: movl {{[0-9]+}}(%esp), %eax 601; NOSSE1-NEXT: cmpl {{[0-9]+}}(%esp), %eax 602; NOSSE1-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}} 603; NOSSE1-NEXT: fxch %st(1) 604; NOSSE1-NEXT: fcmovb %st(1), %st 605; NOSSE1-NEXT: fstp %st(1) 606; NOSSE1-NEXT: retl 607; 608; NOCMOV-LABEL: test11: 609; NOCMOV: # %bb.0: 610; NOCMOV-NEXT: flds {{[0-9]+}}(%esp) 611; NOCMOV-NEXT: movl {{[0-9]+}}(%esp), %eax 612; NOCMOV-NEXT: cmpl {{[0-9]+}}(%esp), %eax 613; NOCMOV-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}} 614; NOCMOV-NEXT: jb .LBB10_2 615; NOCMOV-NEXT: # %bb.1: 616; NOCMOV-NEXT: fstp %st(0) 617; NOCMOV-NEXT: fldz 618; NOCMOV-NEXT: fxch %st(1) 619; NOCMOV-NEXT: .LBB10_2: 620; NOCMOV-NEXT: fstp %st(1) 621; NOCMOV-NEXT: retl 622 %cmp = icmp ult i32 %a, %b 623 %sel = select i1 %cmp, float 99.0, float %x 624 ret float %sel 625} 626 627define float @test12(i32 %a, i32 %b, float %x) nounwind { 628; SSE-LABEL: test12: 629; SSE: # %bb.0: 630; SSE-NEXT: pushl %eax 631; SSE-NEXT: movl {{[0-9]+}}(%esp), %eax 632; SSE-NEXT: cmpl {{[0-9]+}}(%esp), %eax 633; SSE-NEXT: jbe .LBB11_1 634; SSE-NEXT: # %bb.2: 635; SSE-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero 636; SSE-NEXT: jmp .LBB11_3 637; SSE-NEXT: .LBB11_1: 638; SSE-NEXT: movss {{.*#+}} xmm0 = [9.9E+1,0.0E+0,0.0E+0,0.0E+0] 639; SSE-NEXT: .LBB11_3: 640; SSE-NEXT: movss %xmm0, (%esp) 641; SSE-NEXT: flds (%esp) 642; SSE-NEXT: popl %eax 643; SSE-NEXT: retl 644; 645; NOSSE2-LABEL: test12: 646; NOSSE2: # %bb.0: 647; NOSSE2-NEXT: pushl %eax 648; NOSSE2-NEXT: movl {{[0-9]+}}(%esp), %eax 649; NOSSE2-NEXT: cmpl {{[0-9]+}}(%esp), %eax 650; NOSSE2-NEXT: jbe .LBB11_1 651; NOSSE2-NEXT: # %bb.2: 652; NOSSE2-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero 653; NOSSE2-NEXT: jmp .LBB11_3 654; NOSSE2-NEXT: .LBB11_1: 655; NOSSE2-NEXT: movss {{.*#+}} xmm0 = [9.9E+1,0.0E+0,0.0E+0,0.0E+0] 656; NOSSE2-NEXT: .LBB11_3: 657; NOSSE2-NEXT: movss %xmm0, (%esp) 658; NOSSE2-NEXT: flds (%esp) 659; NOSSE2-NEXT: popl %eax 660; NOSSE2-NEXT: retl 661; 662; NOSSE1-LABEL: test12: 663; NOSSE1: # %bb.0: 664; NOSSE1-NEXT: flds {{[0-9]+}}(%esp) 665; NOSSE1-NEXT: movl {{[0-9]+}}(%esp), %eax 666; NOSSE1-NEXT: cmpl {{[0-9]+}}(%esp), %eax 667; NOSSE1-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}} 668; NOSSE1-NEXT: fxch %st(1) 669; NOSSE1-NEXT: fcmovbe %st(1), %st 670; NOSSE1-NEXT: fstp %st(1) 671; NOSSE1-NEXT: retl 672; 673; NOCMOV-LABEL: test12: 674; NOCMOV: # %bb.0: 675; NOCMOV-NEXT: flds {{[0-9]+}}(%esp) 676; NOCMOV-NEXT: movl {{[0-9]+}}(%esp), %eax 677; NOCMOV-NEXT: cmpl {{[0-9]+}}(%esp), %eax 678; NOCMOV-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}} 679; NOCMOV-NEXT: jbe .LBB11_2 680; NOCMOV-NEXT: # %bb.1: 681; NOCMOV-NEXT: fstp %st(0) 682; NOCMOV-NEXT: fldz 683; NOCMOV-NEXT: fxch %st(1) 684; NOCMOV-NEXT: .LBB11_2: 685; NOCMOV-NEXT: fstp %st(1) 686; NOCMOV-NEXT: retl 687 %cmp = icmp ule i32 %a, %b 688 %sel = select i1 %cmp, float 99.0, float %x 689 ret float %sel 690} 691 692define float @test13(i32 %a, i32 %b, float %x) nounwind { 693; SSE-LABEL: test13: 694; SSE: # %bb.0: 695; SSE-NEXT: pushl %eax 696; SSE-NEXT: movl {{[0-9]+}}(%esp), %eax 697; SSE-NEXT: cmpl {{[0-9]+}}(%esp), %eax 698; SSE-NEXT: jg .LBB12_1 699; SSE-NEXT: # %bb.2: 700; SSE-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero 701; SSE-NEXT: jmp .LBB12_3 702; SSE-NEXT: .LBB12_1: 703; SSE-NEXT: movss {{.*#+}} xmm0 = [9.9E+1,0.0E+0,0.0E+0,0.0E+0] 704; SSE-NEXT: .LBB12_3: 705; SSE-NEXT: movss %xmm0, (%esp) 706; SSE-NEXT: flds (%esp) 707; SSE-NEXT: popl %eax 708; SSE-NEXT: retl 709; 710; NOSSE2-LABEL: test13: 711; NOSSE2: # %bb.0: 712; NOSSE2-NEXT: pushl %eax 713; NOSSE2-NEXT: movl {{[0-9]+}}(%esp), %eax 714; NOSSE2-NEXT: cmpl {{[0-9]+}}(%esp), %eax 715; NOSSE2-NEXT: jg .LBB12_1 716; NOSSE2-NEXT: # %bb.2: 717; NOSSE2-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero 718; NOSSE2-NEXT: jmp .LBB12_3 719; NOSSE2-NEXT: .LBB12_1: 720; NOSSE2-NEXT: movss {{.*#+}} xmm0 = [9.9E+1,0.0E+0,0.0E+0,0.0E+0] 721; NOSSE2-NEXT: .LBB12_3: 722; NOSSE2-NEXT: movss %xmm0, (%esp) 723; NOSSE2-NEXT: flds (%esp) 724; NOSSE2-NEXT: popl %eax 725; NOSSE2-NEXT: retl 726; 727; NOSSE1-LABEL: test13: 728; NOSSE1: # %bb.0: 729; NOSSE1-NEXT: flds {{[0-9]+}}(%esp) 730; NOSSE1-NEXT: movl {{[0-9]+}}(%esp), %eax 731; NOSSE1-NEXT: cmpl {{[0-9]+}}(%esp), %eax 732; NOSSE1-NEXT: setg %al 733; NOSSE1-NEXT: testb %al, %al 734; NOSSE1-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}} 735; NOSSE1-NEXT: fxch %st(1) 736; NOSSE1-NEXT: fcmovne %st(1), %st 737; NOSSE1-NEXT: fstp %st(1) 738; NOSSE1-NEXT: retl 739; 740; NOCMOV-LABEL: test13: 741; NOCMOV: # %bb.0: 742; NOCMOV-NEXT: flds {{[0-9]+}}(%esp) 743; NOCMOV-NEXT: movl {{[0-9]+}}(%esp), %eax 744; NOCMOV-NEXT: cmpl {{[0-9]+}}(%esp), %eax 745; NOCMOV-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}} 746; NOCMOV-NEXT: jg .LBB12_2 747; NOCMOV-NEXT: # %bb.1: 748; NOCMOV-NEXT: fstp %st(0) 749; NOCMOV-NEXT: fldz 750; NOCMOV-NEXT: fxch %st(1) 751; NOCMOV-NEXT: .LBB12_2: 752; NOCMOV-NEXT: fstp %st(1) 753; NOCMOV-NEXT: retl 754 %cmp = icmp sgt i32 %a, %b 755 %sel = select i1 %cmp, float 99.0, float %x 756 ret float %sel 757} 758 759define float @test14(i32 %a, i32 %b, float %x) nounwind { 760; SSE-LABEL: test14: 761; SSE: # %bb.0: 762; SSE-NEXT: pushl %eax 763; SSE-NEXT: movl {{[0-9]+}}(%esp), %eax 764; SSE-NEXT: cmpl {{[0-9]+}}(%esp), %eax 765; SSE-NEXT: jge .LBB13_1 766; SSE-NEXT: # %bb.2: 767; SSE-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero 768; SSE-NEXT: jmp .LBB13_3 769; SSE-NEXT: .LBB13_1: 770; SSE-NEXT: movss {{.*#+}} xmm0 = [9.9E+1,0.0E+0,0.0E+0,0.0E+0] 771; SSE-NEXT: .LBB13_3: 772; SSE-NEXT: movss %xmm0, (%esp) 773; SSE-NEXT: flds (%esp) 774; SSE-NEXT: popl %eax 775; SSE-NEXT: retl 776; 777; NOSSE2-LABEL: test14: 778; NOSSE2: # %bb.0: 779; NOSSE2-NEXT: pushl %eax 780; NOSSE2-NEXT: movl {{[0-9]+}}(%esp), %eax 781; NOSSE2-NEXT: cmpl {{[0-9]+}}(%esp), %eax 782; NOSSE2-NEXT: jge .LBB13_1 783; NOSSE2-NEXT: # %bb.2: 784; NOSSE2-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero 785; NOSSE2-NEXT: jmp .LBB13_3 786; NOSSE2-NEXT: .LBB13_1: 787; NOSSE2-NEXT: movss {{.*#+}} xmm0 = [9.9E+1,0.0E+0,0.0E+0,0.0E+0] 788; NOSSE2-NEXT: .LBB13_3: 789; NOSSE2-NEXT: movss %xmm0, (%esp) 790; NOSSE2-NEXT: flds (%esp) 791; NOSSE2-NEXT: popl %eax 792; NOSSE2-NEXT: retl 793; 794; NOSSE1-LABEL: test14: 795; NOSSE1: # %bb.0: 796; NOSSE1-NEXT: flds {{[0-9]+}}(%esp) 797; NOSSE1-NEXT: movl {{[0-9]+}}(%esp), %eax 798; NOSSE1-NEXT: cmpl {{[0-9]+}}(%esp), %eax 799; NOSSE1-NEXT: setge %al 800; NOSSE1-NEXT: testb %al, %al 801; NOSSE1-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}} 802; NOSSE1-NEXT: fxch %st(1) 803; NOSSE1-NEXT: fcmovne %st(1), %st 804; NOSSE1-NEXT: fstp %st(1) 805; NOSSE1-NEXT: retl 806; 807; NOCMOV-LABEL: test14: 808; NOCMOV: # %bb.0: 809; NOCMOV-NEXT: flds {{[0-9]+}}(%esp) 810; NOCMOV-NEXT: movl {{[0-9]+}}(%esp), %eax 811; NOCMOV-NEXT: cmpl {{[0-9]+}}(%esp), %eax 812; NOCMOV-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}} 813; NOCMOV-NEXT: jge .LBB13_2 814; NOCMOV-NEXT: # %bb.1: 815; NOCMOV-NEXT: fstp %st(0) 816; NOCMOV-NEXT: fldz 817; NOCMOV-NEXT: fxch %st(1) 818; NOCMOV-NEXT: .LBB13_2: 819; NOCMOV-NEXT: fstp %st(1) 820; NOCMOV-NEXT: retl 821 %cmp = icmp sge i32 %a, %b 822 %sel = select i1 %cmp, float 99.0, float %x 823 ret float %sel 824} 825 826define float @test15(i32 %a, i32 %b, float %x) nounwind { 827; SSE-LABEL: test15: 828; SSE: # %bb.0: 829; SSE-NEXT: pushl %eax 830; SSE-NEXT: movl {{[0-9]+}}(%esp), %eax 831; SSE-NEXT: cmpl {{[0-9]+}}(%esp), %eax 832; SSE-NEXT: jl .LBB14_1 833; SSE-NEXT: # %bb.2: 834; SSE-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero 835; SSE-NEXT: jmp .LBB14_3 836; SSE-NEXT: .LBB14_1: 837; SSE-NEXT: movss {{.*#+}} xmm0 = [9.9E+1,0.0E+0,0.0E+0,0.0E+0] 838; SSE-NEXT: .LBB14_3: 839; SSE-NEXT: movss %xmm0, (%esp) 840; SSE-NEXT: flds (%esp) 841; SSE-NEXT: popl %eax 842; SSE-NEXT: retl 843; 844; NOSSE2-LABEL: test15: 845; NOSSE2: # %bb.0: 846; NOSSE2-NEXT: pushl %eax 847; NOSSE2-NEXT: movl {{[0-9]+}}(%esp), %eax 848; NOSSE2-NEXT: cmpl {{[0-9]+}}(%esp), %eax 849; NOSSE2-NEXT: jl .LBB14_1 850; NOSSE2-NEXT: # %bb.2: 851; NOSSE2-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero 852; NOSSE2-NEXT: jmp .LBB14_3 853; NOSSE2-NEXT: .LBB14_1: 854; NOSSE2-NEXT: movss {{.*#+}} xmm0 = [9.9E+1,0.0E+0,0.0E+0,0.0E+0] 855; NOSSE2-NEXT: .LBB14_3: 856; NOSSE2-NEXT: movss %xmm0, (%esp) 857; NOSSE2-NEXT: flds (%esp) 858; NOSSE2-NEXT: popl %eax 859; NOSSE2-NEXT: retl 860; 861; NOSSE1-LABEL: test15: 862; NOSSE1: # %bb.0: 863; NOSSE1-NEXT: flds {{[0-9]+}}(%esp) 864; NOSSE1-NEXT: movl {{[0-9]+}}(%esp), %eax 865; NOSSE1-NEXT: cmpl {{[0-9]+}}(%esp), %eax 866; NOSSE1-NEXT: setl %al 867; NOSSE1-NEXT: testb %al, %al 868; NOSSE1-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}} 869; NOSSE1-NEXT: fxch %st(1) 870; NOSSE1-NEXT: fcmovne %st(1), %st 871; NOSSE1-NEXT: fstp %st(1) 872; NOSSE1-NEXT: retl 873; 874; NOCMOV-LABEL: test15: 875; NOCMOV: # %bb.0: 876; NOCMOV-NEXT: flds {{[0-9]+}}(%esp) 877; NOCMOV-NEXT: movl {{[0-9]+}}(%esp), %eax 878; NOCMOV-NEXT: cmpl {{[0-9]+}}(%esp), %eax 879; NOCMOV-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}} 880; NOCMOV-NEXT: jl .LBB14_2 881; NOCMOV-NEXT: # %bb.1: 882; NOCMOV-NEXT: fstp %st(0) 883; NOCMOV-NEXT: fldz 884; NOCMOV-NEXT: fxch %st(1) 885; NOCMOV-NEXT: .LBB14_2: 886; NOCMOV-NEXT: fstp %st(1) 887; NOCMOV-NEXT: retl 888 %cmp = icmp slt i32 %a, %b 889 %sel = select i1 %cmp, float 99.0, float %x 890 ret float %sel 891} 892 893define float @test16(i32 %a, i32 %b, float %x) nounwind { 894; SSE-LABEL: test16: 895; SSE: # %bb.0: 896; SSE-NEXT: pushl %eax 897; SSE-NEXT: movl {{[0-9]+}}(%esp), %eax 898; SSE-NEXT: cmpl {{[0-9]+}}(%esp), %eax 899; SSE-NEXT: jle .LBB15_1 900; SSE-NEXT: # %bb.2: 901; SSE-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero 902; SSE-NEXT: jmp .LBB15_3 903; SSE-NEXT: .LBB15_1: 904; SSE-NEXT: movss {{.*#+}} xmm0 = [9.9E+1,0.0E+0,0.0E+0,0.0E+0] 905; SSE-NEXT: .LBB15_3: 906; SSE-NEXT: movss %xmm0, (%esp) 907; SSE-NEXT: flds (%esp) 908; SSE-NEXT: popl %eax 909; SSE-NEXT: retl 910; 911; NOSSE2-LABEL: test16: 912; NOSSE2: # %bb.0: 913; NOSSE2-NEXT: pushl %eax 914; NOSSE2-NEXT: movl {{[0-9]+}}(%esp), %eax 915; NOSSE2-NEXT: cmpl {{[0-9]+}}(%esp), %eax 916; NOSSE2-NEXT: jle .LBB15_1 917; NOSSE2-NEXT: # %bb.2: 918; NOSSE2-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero 919; NOSSE2-NEXT: jmp .LBB15_3 920; NOSSE2-NEXT: .LBB15_1: 921; NOSSE2-NEXT: movss {{.*#+}} xmm0 = [9.9E+1,0.0E+0,0.0E+0,0.0E+0] 922; NOSSE2-NEXT: .LBB15_3: 923; NOSSE2-NEXT: movss %xmm0, (%esp) 924; NOSSE2-NEXT: flds (%esp) 925; NOSSE2-NEXT: popl %eax 926; NOSSE2-NEXT: retl 927; 928; NOSSE1-LABEL: test16: 929; NOSSE1: # %bb.0: 930; NOSSE1-NEXT: flds {{[0-9]+}}(%esp) 931; NOSSE1-NEXT: movl {{[0-9]+}}(%esp), %eax 932; NOSSE1-NEXT: cmpl {{[0-9]+}}(%esp), %eax 933; NOSSE1-NEXT: setle %al 934; NOSSE1-NEXT: testb %al, %al 935; NOSSE1-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}} 936; NOSSE1-NEXT: fxch %st(1) 937; NOSSE1-NEXT: fcmovne %st(1), %st 938; NOSSE1-NEXT: fstp %st(1) 939; NOSSE1-NEXT: retl 940; 941; NOCMOV-LABEL: test16: 942; NOCMOV: # %bb.0: 943; NOCMOV-NEXT: flds {{[0-9]+}}(%esp) 944; NOCMOV-NEXT: movl {{[0-9]+}}(%esp), %eax 945; NOCMOV-NEXT: cmpl {{[0-9]+}}(%esp), %eax 946; NOCMOV-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}} 947; NOCMOV-NEXT: jle .LBB15_2 948; NOCMOV-NEXT: # %bb.1: 949; NOCMOV-NEXT: fstp %st(0) 950; NOCMOV-NEXT: fldz 951; NOCMOV-NEXT: fxch %st(1) 952; NOCMOV-NEXT: .LBB15_2: 953; NOCMOV-NEXT: fstp %st(1) 954; NOCMOV-NEXT: retl 955 %cmp = icmp sle i32 %a, %b 956 %sel = select i1 %cmp, float 99.0, float %x 957 ret float %sel 958} 959 960define x86_fp80 @test17(i32 %a, i32 %b, x86_fp80 %x) nounwind { 961; SSE-LABEL: test17: 962; SSE: # %bb.0: 963; SSE-NEXT: movl {{[0-9]+}}(%esp), %eax 964; SSE-NEXT: fldt {{[0-9]+}}(%esp) 965; SSE-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}} 966; SSE-NEXT: fxch %st(1) 967; SSE-NEXT: cmpl {{[0-9]+}}(%esp), %eax 968; SSE-NEXT: fcmovnbe %st(1), %st 969; SSE-NEXT: fstp %st(1) 970; SSE-NEXT: retl 971; 972; NOSSE-LABEL: test17: 973; NOSSE: # %bb.0: 974; NOSSE-NEXT: fldt {{[0-9]+}}(%esp) 975; NOSSE-NEXT: movl {{[0-9]+}}(%esp), %eax 976; NOSSE-NEXT: cmpl {{[0-9]+}}(%esp), %eax 977; NOSSE-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}} 978; NOSSE-NEXT: fxch %st(1) 979; NOSSE-NEXT: fcmovnbe %st(1), %st 980; NOSSE-NEXT: fstp %st(1) 981; NOSSE-NEXT: retl 982; 983; NOCMOV-LABEL: test17: 984; NOCMOV: # %bb.0: 985; NOCMOV-NEXT: fldt {{[0-9]+}}(%esp) 986; NOCMOV-NEXT: movl {{[0-9]+}}(%esp), %eax 987; NOCMOV-NEXT: cmpl {{[0-9]+}}(%esp), %eax 988; NOCMOV-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}} 989; NOCMOV-NEXT: ja .LBB16_2 990; NOCMOV-NEXT: # %bb.1: 991; NOCMOV-NEXT: fstp %st(0) 992; NOCMOV-NEXT: fldz 993; NOCMOV-NEXT: fxch %st(1) 994; NOCMOV-NEXT: .LBB16_2: 995; NOCMOV-NEXT: fstp %st(1) 996; NOCMOV-NEXT: retl 997 %cmp = icmp ugt i32 %a, %b 998 %sel = select i1 %cmp, x86_fp80 0xK4005C600000000000000, x86_fp80 %x 999 ret x86_fp80 %sel 1000} 1001 1002define x86_fp80 @test18(i32 %a, i32 %b, x86_fp80 %x) nounwind { 1003; SSE-LABEL: test18: 1004; SSE: # %bb.0: 1005; SSE-NEXT: movl {{[0-9]+}}(%esp), %eax 1006; SSE-NEXT: fldt {{[0-9]+}}(%esp) 1007; SSE-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}} 1008; SSE-NEXT: fxch %st(1) 1009; SSE-NEXT: cmpl {{[0-9]+}}(%esp), %eax 1010; SSE-NEXT: fcmovnb %st(1), %st 1011; SSE-NEXT: fstp %st(1) 1012; SSE-NEXT: retl 1013; 1014; NOSSE-LABEL: test18: 1015; NOSSE: # %bb.0: 1016; NOSSE-NEXT: fldt {{[0-9]+}}(%esp) 1017; NOSSE-NEXT: movl {{[0-9]+}}(%esp), %eax 1018; NOSSE-NEXT: cmpl {{[0-9]+}}(%esp), %eax 1019; NOSSE-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}} 1020; NOSSE-NEXT: fxch %st(1) 1021; NOSSE-NEXT: fcmovnb %st(1), %st 1022; NOSSE-NEXT: fstp %st(1) 1023; NOSSE-NEXT: retl 1024; 1025; NOCMOV-LABEL: test18: 1026; NOCMOV: # %bb.0: 1027; NOCMOV-NEXT: fldt {{[0-9]+}}(%esp) 1028; NOCMOV-NEXT: movl {{[0-9]+}}(%esp), %eax 1029; NOCMOV-NEXT: cmpl {{[0-9]+}}(%esp), %eax 1030; NOCMOV-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}} 1031; NOCMOV-NEXT: jae .LBB17_2 1032; NOCMOV-NEXT: # %bb.1: 1033; NOCMOV-NEXT: fstp %st(0) 1034; NOCMOV-NEXT: fldz 1035; NOCMOV-NEXT: fxch %st(1) 1036; NOCMOV-NEXT: .LBB17_2: 1037; NOCMOV-NEXT: fstp %st(1) 1038; NOCMOV-NEXT: retl 1039 %cmp = icmp uge i32 %a, %b 1040 %sel = select i1 %cmp, x86_fp80 0xK4005C600000000000000, x86_fp80 %x 1041 ret x86_fp80 %sel 1042} 1043 1044define x86_fp80 @test19(i32 %a, i32 %b, x86_fp80 %x) nounwind { 1045; SSE-LABEL: test19: 1046; SSE: # %bb.0: 1047; SSE-NEXT: movl {{[0-9]+}}(%esp), %eax 1048; SSE-NEXT: fldt {{[0-9]+}}(%esp) 1049; SSE-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}} 1050; SSE-NEXT: fxch %st(1) 1051; SSE-NEXT: cmpl {{[0-9]+}}(%esp), %eax 1052; SSE-NEXT: fcmovb %st(1), %st 1053; SSE-NEXT: fstp %st(1) 1054; SSE-NEXT: retl 1055; 1056; NOSSE-LABEL: test19: 1057; NOSSE: # %bb.0: 1058; NOSSE-NEXT: fldt {{[0-9]+}}(%esp) 1059; NOSSE-NEXT: movl {{[0-9]+}}(%esp), %eax 1060; NOSSE-NEXT: cmpl {{[0-9]+}}(%esp), %eax 1061; NOSSE-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}} 1062; NOSSE-NEXT: fxch %st(1) 1063; NOSSE-NEXT: fcmovb %st(1), %st 1064; NOSSE-NEXT: fstp %st(1) 1065; NOSSE-NEXT: retl 1066; 1067; NOCMOV-LABEL: test19: 1068; NOCMOV: # %bb.0: 1069; NOCMOV-NEXT: fldt {{[0-9]+}}(%esp) 1070; NOCMOV-NEXT: movl {{[0-9]+}}(%esp), %eax 1071; NOCMOV-NEXT: cmpl {{[0-9]+}}(%esp), %eax 1072; NOCMOV-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}} 1073; NOCMOV-NEXT: jb .LBB18_2 1074; NOCMOV-NEXT: # %bb.1: 1075; NOCMOV-NEXT: fstp %st(0) 1076; NOCMOV-NEXT: fldz 1077; NOCMOV-NEXT: fxch %st(1) 1078; NOCMOV-NEXT: .LBB18_2: 1079; NOCMOV-NEXT: fstp %st(1) 1080; NOCMOV-NEXT: retl 1081 %cmp = icmp ult i32 %a, %b 1082 %sel = select i1 %cmp, x86_fp80 0xK4005C600000000000000, x86_fp80 %x 1083 ret x86_fp80 %sel 1084} 1085 1086define x86_fp80 @test20(i32 %a, i32 %b, x86_fp80 %x) nounwind { 1087; SSE-LABEL: test20: 1088; SSE: # %bb.0: 1089; SSE-NEXT: movl {{[0-9]+}}(%esp), %eax 1090; SSE-NEXT: fldt {{[0-9]+}}(%esp) 1091; SSE-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}} 1092; SSE-NEXT: fxch %st(1) 1093; SSE-NEXT: cmpl {{[0-9]+}}(%esp), %eax 1094; SSE-NEXT: fcmovbe %st(1), %st 1095; SSE-NEXT: fstp %st(1) 1096; SSE-NEXT: retl 1097; 1098; NOSSE-LABEL: test20: 1099; NOSSE: # %bb.0: 1100; NOSSE-NEXT: fldt {{[0-9]+}}(%esp) 1101; NOSSE-NEXT: movl {{[0-9]+}}(%esp), %eax 1102; NOSSE-NEXT: cmpl {{[0-9]+}}(%esp), %eax 1103; NOSSE-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}} 1104; NOSSE-NEXT: fxch %st(1) 1105; NOSSE-NEXT: fcmovbe %st(1), %st 1106; NOSSE-NEXT: fstp %st(1) 1107; NOSSE-NEXT: retl 1108; 1109; NOCMOV-LABEL: test20: 1110; NOCMOV: # %bb.0: 1111; NOCMOV-NEXT: fldt {{[0-9]+}}(%esp) 1112; NOCMOV-NEXT: movl {{[0-9]+}}(%esp), %eax 1113; NOCMOV-NEXT: cmpl {{[0-9]+}}(%esp), %eax 1114; NOCMOV-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}} 1115; NOCMOV-NEXT: jbe .LBB19_2 1116; NOCMOV-NEXT: # %bb.1: 1117; NOCMOV-NEXT: fstp %st(0) 1118; NOCMOV-NEXT: fldz 1119; NOCMOV-NEXT: fxch %st(1) 1120; NOCMOV-NEXT: .LBB19_2: 1121; NOCMOV-NEXT: fstp %st(1) 1122; NOCMOV-NEXT: retl 1123 %cmp = icmp ule i32 %a, %b 1124 %sel = select i1 %cmp, x86_fp80 0xK4005C600000000000000, x86_fp80 %x 1125 ret x86_fp80 %sel 1126} 1127 1128define x86_fp80 @test21(i32 %a, i32 %b, x86_fp80 %x) nounwind { 1129; SSE-LABEL: test21: 1130; SSE: # %bb.0: 1131; SSE-NEXT: movl {{[0-9]+}}(%esp), %eax 1132; SSE-NEXT: fldt {{[0-9]+}}(%esp) 1133; SSE-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}} 1134; SSE-NEXT: fxch %st(1) 1135; SSE-NEXT: cmpl {{[0-9]+}}(%esp), %eax 1136; SSE-NEXT: setg %al 1137; SSE-NEXT: testb %al, %al 1138; SSE-NEXT: fcmovne %st(1), %st 1139; SSE-NEXT: fstp %st(1) 1140; SSE-NEXT: retl 1141; 1142; NOSSE-LABEL: test21: 1143; NOSSE: # %bb.0: 1144; NOSSE-NEXT: fldt {{[0-9]+}}(%esp) 1145; NOSSE-NEXT: movl {{[0-9]+}}(%esp), %eax 1146; NOSSE-NEXT: cmpl {{[0-9]+}}(%esp), %eax 1147; NOSSE-NEXT: setg %al 1148; NOSSE-NEXT: testb %al, %al 1149; NOSSE-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}} 1150; NOSSE-NEXT: fxch %st(1) 1151; NOSSE-NEXT: fcmovne %st(1), %st 1152; NOSSE-NEXT: fstp %st(1) 1153; NOSSE-NEXT: retl 1154; 1155; NOCMOV-LABEL: test21: 1156; NOCMOV: # %bb.0: 1157; NOCMOV-NEXT: fldt {{[0-9]+}}(%esp) 1158; NOCMOV-NEXT: movl {{[0-9]+}}(%esp), %eax 1159; NOCMOV-NEXT: cmpl {{[0-9]+}}(%esp), %eax 1160; NOCMOV-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}} 1161; NOCMOV-NEXT: jg .LBB20_2 1162; NOCMOV-NEXT: # %bb.1: 1163; NOCMOV-NEXT: fstp %st(0) 1164; NOCMOV-NEXT: fldz 1165; NOCMOV-NEXT: fxch %st(1) 1166; NOCMOV-NEXT: .LBB20_2: 1167; NOCMOV-NEXT: fstp %st(1) 1168; NOCMOV-NEXT: retl 1169; We don't emit a branch for fp80, why? 1170 %cmp = icmp sgt i32 %a, %b 1171 %sel = select i1 %cmp, x86_fp80 0xK4005C600000000000000, x86_fp80 %x 1172 ret x86_fp80 %sel 1173} 1174 1175define x86_fp80 @test22(i32 %a, i32 %b, x86_fp80 %x) nounwind { 1176; SSE-LABEL: test22: 1177; SSE: # %bb.0: 1178; SSE-NEXT: movl {{[0-9]+}}(%esp), %eax 1179; SSE-NEXT: fldt {{[0-9]+}}(%esp) 1180; SSE-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}} 1181; SSE-NEXT: fxch %st(1) 1182; SSE-NEXT: cmpl {{[0-9]+}}(%esp), %eax 1183; SSE-NEXT: setge %al 1184; SSE-NEXT: testb %al, %al 1185; SSE-NEXT: fcmovne %st(1), %st 1186; SSE-NEXT: fstp %st(1) 1187; SSE-NEXT: retl 1188; 1189; NOSSE-LABEL: test22: 1190; NOSSE: # %bb.0: 1191; NOSSE-NEXT: fldt {{[0-9]+}}(%esp) 1192; NOSSE-NEXT: movl {{[0-9]+}}(%esp), %eax 1193; NOSSE-NEXT: cmpl {{[0-9]+}}(%esp), %eax 1194; NOSSE-NEXT: setge %al 1195; NOSSE-NEXT: testb %al, %al 1196; NOSSE-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}} 1197; NOSSE-NEXT: fxch %st(1) 1198; NOSSE-NEXT: fcmovne %st(1), %st 1199; NOSSE-NEXT: fstp %st(1) 1200; NOSSE-NEXT: retl 1201; 1202; NOCMOV-LABEL: test22: 1203; NOCMOV: # %bb.0: 1204; NOCMOV-NEXT: fldt {{[0-9]+}}(%esp) 1205; NOCMOV-NEXT: movl {{[0-9]+}}(%esp), %eax 1206; NOCMOV-NEXT: cmpl {{[0-9]+}}(%esp), %eax 1207; NOCMOV-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}} 1208; NOCMOV-NEXT: jge .LBB21_2 1209; NOCMOV-NEXT: # %bb.1: 1210; NOCMOV-NEXT: fstp %st(0) 1211; NOCMOV-NEXT: fldz 1212; NOCMOV-NEXT: fxch %st(1) 1213; NOCMOV-NEXT: .LBB21_2: 1214; NOCMOV-NEXT: fstp %st(1) 1215; NOCMOV-NEXT: retl 1216 %cmp = icmp sge i32 %a, %b 1217 %sel = select i1 %cmp, x86_fp80 0xK4005C600000000000000, x86_fp80 %x 1218 ret x86_fp80 %sel 1219} 1220 1221define x86_fp80 @test23(i32 %a, i32 %b, x86_fp80 %x) nounwind { 1222; SSE-LABEL: test23: 1223; SSE: # %bb.0: 1224; SSE-NEXT: movl {{[0-9]+}}(%esp), %eax 1225; SSE-NEXT: fldt {{[0-9]+}}(%esp) 1226; SSE-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}} 1227; SSE-NEXT: fxch %st(1) 1228; SSE-NEXT: cmpl {{[0-9]+}}(%esp), %eax 1229; SSE-NEXT: setl %al 1230; SSE-NEXT: testb %al, %al 1231; SSE-NEXT: fcmovne %st(1), %st 1232; SSE-NEXT: fstp %st(1) 1233; SSE-NEXT: retl 1234; 1235; NOSSE-LABEL: test23: 1236; NOSSE: # %bb.0: 1237; NOSSE-NEXT: fldt {{[0-9]+}}(%esp) 1238; NOSSE-NEXT: movl {{[0-9]+}}(%esp), %eax 1239; NOSSE-NEXT: cmpl {{[0-9]+}}(%esp), %eax 1240; NOSSE-NEXT: setl %al 1241; NOSSE-NEXT: testb %al, %al 1242; NOSSE-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}} 1243; NOSSE-NEXT: fxch %st(1) 1244; NOSSE-NEXT: fcmovne %st(1), %st 1245; NOSSE-NEXT: fstp %st(1) 1246; NOSSE-NEXT: retl 1247; 1248; NOCMOV-LABEL: test23: 1249; NOCMOV: # %bb.0: 1250; NOCMOV-NEXT: fldt {{[0-9]+}}(%esp) 1251; NOCMOV-NEXT: movl {{[0-9]+}}(%esp), %eax 1252; NOCMOV-NEXT: cmpl {{[0-9]+}}(%esp), %eax 1253; NOCMOV-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}} 1254; NOCMOV-NEXT: jl .LBB22_2 1255; NOCMOV-NEXT: # %bb.1: 1256; NOCMOV-NEXT: fstp %st(0) 1257; NOCMOV-NEXT: fldz 1258; NOCMOV-NEXT: fxch %st(1) 1259; NOCMOV-NEXT: .LBB22_2: 1260; NOCMOV-NEXT: fstp %st(1) 1261; NOCMOV-NEXT: retl 1262 %cmp = icmp slt i32 %a, %b 1263 %sel = select i1 %cmp, x86_fp80 0xK4005C600000000000000, x86_fp80 %x 1264 ret x86_fp80 %sel 1265} 1266 1267define x86_fp80 @test24(i32 %a, i32 %b, x86_fp80 %x) nounwind { 1268; SSE-LABEL: test24: 1269; SSE: # %bb.0: 1270; SSE-NEXT: movl {{[0-9]+}}(%esp), %eax 1271; SSE-NEXT: fldt {{[0-9]+}}(%esp) 1272; SSE-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}} 1273; SSE-NEXT: fxch %st(1) 1274; SSE-NEXT: cmpl {{[0-9]+}}(%esp), %eax 1275; SSE-NEXT: setle %al 1276; SSE-NEXT: testb %al, %al 1277; SSE-NEXT: fcmovne %st(1), %st 1278; SSE-NEXT: fstp %st(1) 1279; SSE-NEXT: retl 1280; 1281; NOSSE-LABEL: test24: 1282; NOSSE: # %bb.0: 1283; NOSSE-NEXT: fldt {{[0-9]+}}(%esp) 1284; NOSSE-NEXT: movl {{[0-9]+}}(%esp), %eax 1285; NOSSE-NEXT: cmpl {{[0-9]+}}(%esp), %eax 1286; NOSSE-NEXT: setle %al 1287; NOSSE-NEXT: testb %al, %al 1288; NOSSE-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}} 1289; NOSSE-NEXT: fxch %st(1) 1290; NOSSE-NEXT: fcmovne %st(1), %st 1291; NOSSE-NEXT: fstp %st(1) 1292; NOSSE-NEXT: retl 1293; 1294; NOCMOV-LABEL: test24: 1295; NOCMOV: # %bb.0: 1296; NOCMOV-NEXT: fldt {{[0-9]+}}(%esp) 1297; NOCMOV-NEXT: movl {{[0-9]+}}(%esp), %eax 1298; NOCMOV-NEXT: cmpl {{[0-9]+}}(%esp), %eax 1299; NOCMOV-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}} 1300; NOCMOV-NEXT: jle .LBB23_2 1301; NOCMOV-NEXT: # %bb.1: 1302; NOCMOV-NEXT: fstp %st(0) 1303; NOCMOV-NEXT: fldz 1304; NOCMOV-NEXT: fxch %st(1) 1305; NOCMOV-NEXT: .LBB23_2: 1306; NOCMOV-NEXT: fstp %st(1) 1307; NOCMOV-NEXT: retl 1308 %cmp = icmp sle i32 %a, %b 1309 %sel = select i1 %cmp, x86_fp80 0xK4005C600000000000000, x86_fp80 %x 1310 ret x86_fp80 %sel 1311} 1312