569 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -mtriple=mipsel-linux-gnu < %s | FileCheck %s -check-prefix=MIPS323; RUN: llc -mtriple=mips64el-linux-gnu < %s | FileCheck %s -check-prefix=MIPS644 5define void @test_fadd(ptr %p, ptr %q) nounwind {6; MIPS32-LABEL: test_fadd:7; MIPS32: # %bb.0:8; MIPS32-NEXT: addiu $sp, $sp, -329; MIPS32-NEXT: sdc1 $f20, 24($sp) # 8-byte Folded Spill10; MIPS32-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill11; MIPS32-NEXT: sw $16, 16($sp) # 4-byte Folded Spill12; MIPS32-NEXT: move $16, $413; MIPS32-NEXT: lhu $4, 0($5)14; MIPS32-NEXT: jal __extendhfsf215; MIPS32-NEXT: nop16; MIPS32-NEXT: lhu $4, 0($16)17; MIPS32-NEXT: jal __extendhfsf218; MIPS32-NEXT: mov.s $f20, $f019; MIPS32-NEXT: jal __truncsfhf220; MIPS32-NEXT: add.s $f12, $f0, $f2021; MIPS32-NEXT: sh $2, 0($16)22; MIPS32-NEXT: lw $16, 16($sp) # 4-byte Folded Reload23; MIPS32-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload24; MIPS32-NEXT: ldc1 $f20, 24($sp) # 8-byte Folded Reload25; MIPS32-NEXT: jr $ra26; MIPS32-NEXT: addiu $sp, $sp, 3227;28; MIPS64-LABEL: test_fadd:29; MIPS64: # %bb.0:30; MIPS64-NEXT: daddiu $sp, $sp, -3231; MIPS64-NEXT: sdc1 $f24, 24($sp) # 8-byte Folded Spill32; MIPS64-NEXT: sd $ra, 16($sp) # 8-byte Folded Spill33; MIPS64-NEXT: sd $16, 8($sp) # 8-byte Folded Spill34; MIPS64-NEXT: move $16, $435; MIPS64-NEXT: lhu $4, 0($5)36; MIPS64-NEXT: jal __extendhfsf237; MIPS64-NEXT: nop38; MIPS64-NEXT: lhu $4, 0($16)39; MIPS64-NEXT: jal __extendhfsf240; MIPS64-NEXT: mov.s $f24, $f041; MIPS64-NEXT: jal __truncsfhf242; MIPS64-NEXT: add.s $f12, $f0, $f2443; MIPS64-NEXT: sh $2, 0($16)44; MIPS64-NEXT: ld $16, 8($sp) # 8-byte Folded Reload45; MIPS64-NEXT: ld $ra, 16($sp) # 8-byte Folded Reload46; MIPS64-NEXT: ldc1 $f24, 24($sp) # 8-byte Folded Reload47; MIPS64-NEXT: jr $ra48; MIPS64-NEXT: daddiu $sp, $sp, 3249 %a = load half, ptr %p, align 250 %b = load half, ptr %q, align 251 %r = fadd half %a, %b52 store half %r, ptr %p53 ret void54}55 56define float @test_fpext_float(ptr %p) nounwind {57; MIPS32-LABEL: test_fpext_float:58; MIPS32: # %bb.0:59; MIPS32-NEXT: addiu $sp, $sp, -2460; MIPS32-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill61; MIPS32-NEXT: lhu $4, 0($4)62; MIPS32-NEXT: jal __extendhfsf263; MIPS32-NEXT: nop64; MIPS32-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload65; MIPS32-NEXT: jr $ra66; MIPS32-NEXT: addiu $sp, $sp, 2467;68; MIPS64-LABEL: test_fpext_float:69; MIPS64: # %bb.0:70; MIPS64-NEXT: daddiu $sp, $sp, -1671; MIPS64-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill72; MIPS64-NEXT: lhu $4, 0($4)73; MIPS64-NEXT: jal __extendhfsf274; MIPS64-NEXT: nop75; MIPS64-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload76; MIPS64-NEXT: jr $ra77; MIPS64-NEXT: daddiu $sp, $sp, 1678 %a = load half, ptr %p, align 279 %r = fpext half %a to float80 ret float %r81}82 83define double @test_fpext_double(ptr %p) nounwind {84; MIPS32-LABEL: test_fpext_double:85; MIPS32: # %bb.0:86; MIPS32-NEXT: addiu $sp, $sp, -2487; MIPS32-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill88; MIPS32-NEXT: lhu $4, 0($4)89; MIPS32-NEXT: jal __extendhfsf290; MIPS32-NEXT: nop91; MIPS32-NEXT: cvt.d.s $f0, $f092; MIPS32-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload93; MIPS32-NEXT: jr $ra94; MIPS32-NEXT: addiu $sp, $sp, 2495;96; MIPS64-LABEL: test_fpext_double:97; MIPS64: # %bb.0:98; MIPS64-NEXT: daddiu $sp, $sp, -1699; MIPS64-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill100; MIPS64-NEXT: lhu $4, 0($4)101; MIPS64-NEXT: jal __extendhfsf2102; MIPS64-NEXT: nop103; MIPS64-NEXT: cvt.d.s $f0, $f0104; MIPS64-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload105; MIPS64-NEXT: jr $ra106; MIPS64-NEXT: daddiu $sp, $sp, 16107 %a = load half, ptr %p, align 2108 %r = fpext half %a to double109 ret double %r110}111 112define void @test_fptrunc_float(float %f, ptr %p) nounwind {113; MIPS32-LABEL: test_fptrunc_float:114; MIPS32: # %bb.0:115; MIPS32-NEXT: addiu $sp, $sp, -24116; MIPS32-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill117; MIPS32-NEXT: sw $16, 16($sp) # 4-byte Folded Spill118; MIPS32-NEXT: jal __truncsfhf2119; MIPS32-NEXT: move $16, $5120; MIPS32-NEXT: sh $2, 0($16)121; MIPS32-NEXT: lw $16, 16($sp) # 4-byte Folded Reload122; MIPS32-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload123; MIPS32-NEXT: jr $ra124; MIPS32-NEXT: addiu $sp, $sp, 24125;126; MIPS64-LABEL: test_fptrunc_float:127; MIPS64: # %bb.0:128; MIPS64-NEXT: daddiu $sp, $sp, -16129; MIPS64-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill130; MIPS64-NEXT: sd $16, 0($sp) # 8-byte Folded Spill131; MIPS64-NEXT: jal __truncsfhf2132; MIPS64-NEXT: move $16, $5133; MIPS64-NEXT: sh $2, 0($16)134; MIPS64-NEXT: ld $16, 0($sp) # 8-byte Folded Reload135; MIPS64-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload136; MIPS64-NEXT: jr $ra137; MIPS64-NEXT: daddiu $sp, $sp, 16138 %a = fptrunc float %f to half139 store half %a, ptr %p140 ret void141}142 143define void @test_fptrunc_double(double %d, ptr %p) nounwind {144; MIPS32-LABEL: test_fptrunc_double:145; MIPS32: # %bb.0:146; MIPS32-NEXT: addiu $sp, $sp, -24147; MIPS32-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill148; MIPS32-NEXT: sw $16, 16($sp) # 4-byte Folded Spill149; MIPS32-NEXT: jal __truncdfhf2150; MIPS32-NEXT: move $16, $6151; MIPS32-NEXT: sh $2, 0($16)152; MIPS32-NEXT: lw $16, 16($sp) # 4-byte Folded Reload153; MIPS32-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload154; MIPS32-NEXT: jr $ra155; MIPS32-NEXT: addiu $sp, $sp, 24156;157; MIPS64-LABEL: test_fptrunc_double:158; MIPS64: # %bb.0:159; MIPS64-NEXT: daddiu $sp, $sp, -16160; MIPS64-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill161; MIPS64-NEXT: sd $16, 0($sp) # 8-byte Folded Spill162; MIPS64-NEXT: jal __truncdfhf2163; MIPS64-NEXT: move $16, $5164; MIPS64-NEXT: sh $2, 0($16)165; MIPS64-NEXT: ld $16, 0($sp) # 8-byte Folded Reload166; MIPS64-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload167; MIPS64-NEXT: jr $ra168; MIPS64-NEXT: daddiu $sp, $sp, 16169 %a = fptrunc double %d to half170 store half %a, ptr %p171 ret void172}173 174define <4 x float> @test_vec_fpext_float(ptr %p) nounwind {175; MIPS32-LABEL: test_vec_fpext_float:176; MIPS32: # %bb.0:177; MIPS32-NEXT: addiu $sp, $sp, -32178; MIPS32-NEXT: sw $ra, 28($sp) # 4-byte Folded Spill179; MIPS32-NEXT: sw $17, 24($sp) # 4-byte Folded Spill180; MIPS32-NEXT: sw $16, 20($sp) # 4-byte Folded Spill181; MIPS32-NEXT: move $17, $4182; MIPS32-NEXT: lhu $4, 6($5)183; MIPS32-NEXT: jal __extendhfsf2184; MIPS32-NEXT: move $16, $5185; MIPS32-NEXT: lhu $4, 4($16)186; MIPS32-NEXT: jal __extendhfsf2187; MIPS32-NEXT: swc1 $f0, 12($17)188; MIPS32-NEXT: swc1 $f0, 8($17)189; MIPS32-NEXT: lhu $4, 2($16)190; MIPS32-NEXT: jal __extendhfsf2191; MIPS32-NEXT: nop192; MIPS32-NEXT: swc1 $f0, 4($17)193; MIPS32-NEXT: lhu $4, 0($16)194; MIPS32-NEXT: jal __extendhfsf2195; MIPS32-NEXT: nop196; MIPS32-NEXT: swc1 $f0, 0($17)197; MIPS32-NEXT: lw $16, 20($sp) # 4-byte Folded Reload198; MIPS32-NEXT: lw $17, 24($sp) # 4-byte Folded Reload199; MIPS32-NEXT: lw $ra, 28($sp) # 4-byte Folded Reload200; MIPS32-NEXT: jr $ra201; MIPS32-NEXT: addiu $sp, $sp, 32202;203; MIPS64-LABEL: test_vec_fpext_float:204; MIPS64: # %bb.0:205; MIPS64-NEXT: daddiu $sp, $sp, -32206; MIPS64-NEXT: sd $ra, 24($sp) # 8-byte Folded Spill207; MIPS64-NEXT: sd $18, 16($sp) # 8-byte Folded Spill208; MIPS64-NEXT: sd $17, 8($sp) # 8-byte Folded Spill209; MIPS64-NEXT: sd $16, 0($sp) # 8-byte Folded Spill210; MIPS64-NEXT: move $16, $4211; MIPS64-NEXT: lhu $4, 2($4)212; MIPS64-NEXT: jal __extendhfsf2213; MIPS64-NEXT: nop214; MIPS64-NEXT: lhu $4, 6($16)215; MIPS64-NEXT: jal __extendhfsf2216; MIPS64-NEXT: mfc1 $17, $f0217; MIPS64-NEXT: mfc1 $18, $f0218; MIPS64-NEXT: lhu $4, 0($16)219; MIPS64-NEXT: jal __extendhfsf2220; MIPS64-NEXT: dsll $17, $17, 32221; MIPS64-NEXT: mfc1 $1, $f0222; MIPS64-NEXT: dsll $1, $1, 32223; MIPS64-NEXT: dsrl $1, $1, 32224; MIPS64-NEXT: or $17, $1, $17225; MIPS64-NEXT: lhu $4, 4($16)226; MIPS64-NEXT: jal __extendhfsf2227; MIPS64-NEXT: dsll $18, $18, 32228; MIPS64-NEXT: mfc1 $1, $f0229; MIPS64-NEXT: dsll $1, $1, 32230; MIPS64-NEXT: dsrl $1, $1, 32231; MIPS64-NEXT: or $3, $1, $18232; MIPS64-NEXT: move $2, $17233; MIPS64-NEXT: ld $16, 0($sp) # 8-byte Folded Reload234; MIPS64-NEXT: ld $17, 8($sp) # 8-byte Folded Reload235; MIPS64-NEXT: ld $18, 16($sp) # 8-byte Folded Reload236; MIPS64-NEXT: ld $ra, 24($sp) # 8-byte Folded Reload237; MIPS64-NEXT: jr $ra238; MIPS64-NEXT: daddiu $sp, $sp, 32239 %a = load <4 x half>, ptr %p, align 8240 %b = fpext <4 x half> %a to <4 x float>241 ret <4 x float> %b242}243 244define <4 x double> @test_vec_fpext_double(ptr %p) nounwind {245; MIPS32-LABEL: test_vec_fpext_double:246; MIPS32: # %bb.0:247; MIPS32-NEXT: addiu $sp, $sp, -40248; MIPS32-NEXT: sdc1 $f20, 32($sp) # 8-byte Folded Spill249; MIPS32-NEXT: sw $ra, 28($sp) # 4-byte Folded Spill250; MIPS32-NEXT: sw $17, 24($sp) # 4-byte Folded Spill251; MIPS32-NEXT: sw $16, 20($sp) # 4-byte Folded Spill252; MIPS32-NEXT: move $17, $4253; MIPS32-NEXT: lhu $4, 6($5)254; MIPS32-NEXT: jal __extendhfsf2255; MIPS32-NEXT: move $16, $5256; MIPS32-NEXT: lhu $4, 4($16)257; MIPS32-NEXT: jal __extendhfsf2258; MIPS32-NEXT: mov.s $f20, $f0259; MIPS32-NEXT: lhu $4, 2($16)260; MIPS32-NEXT: cvt.d.s $f0, $f0261; MIPS32-NEXT: cvt.d.s $f2, $f20262; MIPS32-NEXT: sdc1 $f2, 24($17)263; MIPS32-NEXT: jal __extendhfsf2264; MIPS32-NEXT: sdc1 $f0, 16($17)265; MIPS32-NEXT: cvt.d.s $f0, $f0266; MIPS32-NEXT: sdc1 $f0, 8($17)267; MIPS32-NEXT: lhu $4, 0($16)268; MIPS32-NEXT: jal __extendhfsf2269; MIPS32-NEXT: nop270; MIPS32-NEXT: cvt.d.s $f0, $f0271; MIPS32-NEXT: sdc1 $f0, 0($17)272; MIPS32-NEXT: lw $16, 20($sp) # 4-byte Folded Reload273; MIPS32-NEXT: lw $17, 24($sp) # 4-byte Folded Reload274; MIPS32-NEXT: lw $ra, 28($sp) # 4-byte Folded Reload275; MIPS32-NEXT: ldc1 $f20, 32($sp) # 8-byte Folded Reload276; MIPS32-NEXT: jr $ra277; MIPS32-NEXT: addiu $sp, $sp, 40278;279; MIPS64-LABEL: test_vec_fpext_double:280; MIPS64: # %bb.0:281; MIPS64-NEXT: daddiu $sp, $sp, -32282; MIPS64-NEXT: sdc1 $f24, 24($sp) # 8-byte Folded Spill283; MIPS64-NEXT: sd $ra, 16($sp) # 8-byte Folded Spill284; MIPS64-NEXT: sd $17, 8($sp) # 8-byte Folded Spill285; MIPS64-NEXT: sd $16, 0($sp) # 8-byte Folded Spill286; MIPS64-NEXT: move $17, $4287; MIPS64-NEXT: lhu $4, 6($5)288; MIPS64-NEXT: jal __extendhfsf2289; MIPS64-NEXT: move $16, $5290; MIPS64-NEXT: lhu $4, 4($16)291; MIPS64-NEXT: jal __extendhfsf2292; MIPS64-NEXT: mov.s $f24, $f0293; MIPS64-NEXT: lhu $4, 2($16)294; MIPS64-NEXT: cvt.d.s $f0, $f0295; MIPS64-NEXT: cvt.d.s $f1, $f24296; MIPS64-NEXT: sdc1 $f1, 24($17)297; MIPS64-NEXT: jal __extendhfsf2298; MIPS64-NEXT: sdc1 $f0, 16($17)299; MIPS64-NEXT: cvt.d.s $f0, $f0300; MIPS64-NEXT: sdc1 $f0, 8($17)301; MIPS64-NEXT: lhu $4, 0($16)302; MIPS64-NEXT: jal __extendhfsf2303; MIPS64-NEXT: nop304; MIPS64-NEXT: cvt.d.s $f0, $f0305; MIPS64-NEXT: sdc1 $f0, 0($17)306; MIPS64-NEXT: ld $16, 0($sp) # 8-byte Folded Reload307; MIPS64-NEXT: ld $17, 8($sp) # 8-byte Folded Reload308; MIPS64-NEXT: ld $ra, 16($sp) # 8-byte Folded Reload309; MIPS64-NEXT: ldc1 $f24, 24($sp) # 8-byte Folded Reload310; MIPS64-NEXT: jr $ra311; MIPS64-NEXT: daddiu $sp, $sp, 32312 %a = load <4 x half>, ptr %p, align 8313 %b = fpext <4 x half> %a to <4 x double>314 ret <4 x double> %b315}316 317define void @test_vec_fptrunc_float(<4 x float> %a, ptr %p) nounwind {318; MIPS32-LABEL: test_vec_fptrunc_float:319; MIPS32: # %bb.0:320; MIPS32-NEXT: addiu $sp, $sp, -40321; MIPS32-NEXT: sw $ra, 36($sp) # 4-byte Folded Spill322; MIPS32-NEXT: sw $19, 32($sp) # 4-byte Folded Spill323; MIPS32-NEXT: sw $18, 28($sp) # 4-byte Folded Spill324; MIPS32-NEXT: sw $17, 24($sp) # 4-byte Folded Spill325; MIPS32-NEXT: sw $16, 20($sp) # 4-byte Folded Spill326; MIPS32-NEXT: move $16, $7327; MIPS32-NEXT: move $17, $5328; MIPS32-NEXT: move $18, $4329; MIPS32-NEXT: jal __truncsfhf2330; MIPS32-NEXT: mtc1 $6, $f12331; MIPS32-NEXT: move $19, $2332; MIPS32-NEXT: jal __truncsfhf2333; MIPS32-NEXT: mtc1 $16, $f12334; MIPS32-NEXT: mtc1 $17, $f12335; MIPS32-NEXT: lw $16, 56($sp)336; MIPS32-NEXT: sh $2, 6($16)337; MIPS32-NEXT: jal __truncsfhf2338; MIPS32-NEXT: sh $19, 4($16)339; MIPS32-NEXT: sh $2, 2($16)340; MIPS32-NEXT: jal __truncsfhf2341; MIPS32-NEXT: mtc1 $18, $f12342; MIPS32-NEXT: sh $2, 0($16)343; MIPS32-NEXT: lw $16, 20($sp) # 4-byte Folded Reload344; MIPS32-NEXT: lw $17, 24($sp) # 4-byte Folded Reload345; MIPS32-NEXT: lw $18, 28($sp) # 4-byte Folded Reload346; MIPS32-NEXT: lw $19, 32($sp) # 4-byte Folded Reload347; MIPS32-NEXT: lw $ra, 36($sp) # 4-byte Folded Reload348; MIPS32-NEXT: jr $ra349; MIPS32-NEXT: addiu $sp, $sp, 40350;351; MIPS64-LABEL: test_vec_fptrunc_float:352; MIPS64: # %bb.0:353; MIPS64-NEXT: daddiu $sp, $sp, -48354; MIPS64-NEXT: sd $ra, 40($sp) # 8-byte Folded Spill355; MIPS64-NEXT: sd $19, 32($sp) # 8-byte Folded Spill356; MIPS64-NEXT: sd $18, 24($sp) # 8-byte Folded Spill357; MIPS64-NEXT: sd $17, 16($sp) # 8-byte Folded Spill358; MIPS64-NEXT: sd $16, 8($sp) # 8-byte Folded Spill359; MIPS64-NEXT: move $16, $6360; MIPS64-NEXT: move $17, $5361; MIPS64-NEXT: move $18, $4362; MIPS64-NEXT: sll $1, $18, 0363; MIPS64-NEXT: jal __truncsfhf2364; MIPS64-NEXT: mtc1 $1, $f12365; MIPS64-NEXT: move $19, $2366; MIPS64-NEXT: sll $1, $17, 0367; MIPS64-NEXT: jal __truncsfhf2368; MIPS64-NEXT: mtc1 $1, $f12369; MIPS64-NEXT: dsrl $1, $17, 32370; MIPS64-NEXT: sll $1, $1, 0371; MIPS64-NEXT: mtc1 $1, $f12372; MIPS64-NEXT: sh $2, 4($16)373; MIPS64-NEXT: jal __truncsfhf2374; MIPS64-NEXT: sh $19, 0($16)375; MIPS64-NEXT: sh $2, 6($16)376; MIPS64-NEXT: dsrl $1, $18, 32377; MIPS64-NEXT: sll $1, $1, 0378; MIPS64-NEXT: jal __truncsfhf2379; MIPS64-NEXT: mtc1 $1, $f12380; MIPS64-NEXT: sh $2, 2($16)381; MIPS64-NEXT: ld $16, 8($sp) # 8-byte Folded Reload382; MIPS64-NEXT: ld $17, 16($sp) # 8-byte Folded Reload383; MIPS64-NEXT: ld $18, 24($sp) # 8-byte Folded Reload384; MIPS64-NEXT: ld $19, 32($sp) # 8-byte Folded Reload385; MIPS64-NEXT: ld $ra, 40($sp) # 8-byte Folded Reload386; MIPS64-NEXT: jr $ra387; MIPS64-NEXT: daddiu $sp, $sp, 48388 %b = fptrunc <4 x float> %a to <4 x half>389 store <4 x half> %b, ptr %p, align 8390 ret void391}392 393define void @test_vec_fptrunc_double(<4 x double> %a, ptr %p) nounwind {394; MIPS32-LABEL: test_vec_fptrunc_double:395; MIPS32: # %bb.0:396; MIPS32-NEXT: addiu $sp, $sp, -72397; MIPS32-NEXT: sw $ra, 68($sp) # 4-byte Folded Spill398; MIPS32-NEXT: sw $19, 64($sp) # 4-byte Folded Spill399; MIPS32-NEXT: sw $18, 60($sp) # 4-byte Folded Spill400; MIPS32-NEXT: sw $17, 56($sp) # 4-byte Folded Spill401; MIPS32-NEXT: sw $16, 52($sp) # 4-byte Folded Spill402; MIPS32-NEXT: move $16, $5403; MIPS32-NEXT: move $17, $4404; MIPS32-NEXT: lw $1, 92($sp)405; MIPS32-NEXT: sw $1, 36($sp)406; MIPS32-NEXT: lw $1, 88($sp)407; MIPS32-NEXT: sw $1, 32($sp)408; MIPS32-NEXT: lw $1, 96($sp)409; MIPS32-NEXT: lw $2, 100($sp)410; MIPS32-NEXT: sw $2, 44($sp)411; MIPS32-NEXT: sw $1, 40($sp)412; MIPS32-NEXT: ldc1 $f12, 32($sp)413; MIPS32-NEXT: sw $7, 28($sp)414; MIPS32-NEXT: jal __truncdfhf2415; MIPS32-NEXT: sw $6, 24($sp)416; MIPS32-NEXT: move $18, $2417; MIPS32-NEXT: jal __truncdfhf2418; MIPS32-NEXT: ldc1 $f12, 40($sp)419; MIPS32-NEXT: ldc1 $f12, 24($sp)420; MIPS32-NEXT: lw $19, 104($sp)421; MIPS32-NEXT: sh $2, 6($19)422; MIPS32-NEXT: jal __truncdfhf2423; MIPS32-NEXT: sh $18, 4($19)424; MIPS32-NEXT: sh $2, 2($19)425; MIPS32-NEXT: sw $16, 20($sp)426; MIPS32-NEXT: sw $17, 16($sp)427; MIPS32-NEXT: jal __truncdfhf2428; MIPS32-NEXT: ldc1 $f12, 16($sp)429; MIPS32-NEXT: sh $2, 0($19)430; MIPS32-NEXT: lw $16, 52($sp) # 4-byte Folded Reload431; MIPS32-NEXT: lw $17, 56($sp) # 4-byte Folded Reload432; MIPS32-NEXT: lw $18, 60($sp) # 4-byte Folded Reload433; MIPS32-NEXT: lw $19, 64($sp) # 4-byte Folded Reload434; MIPS32-NEXT: lw $ra, 68($sp) # 4-byte Folded Reload435; MIPS32-NEXT: jr $ra436; MIPS32-NEXT: addiu $sp, $sp, 72437;438; MIPS64-LABEL: test_vec_fptrunc_double:439; MIPS64: # %bb.0:440; MIPS64-NEXT: daddiu $sp, $sp, -48441; MIPS64-NEXT: sd $ra, 40($sp) # 8-byte Folded Spill442; MIPS64-NEXT: sd $20, 32($sp) # 8-byte Folded Spill443; MIPS64-NEXT: sd $19, 24($sp) # 8-byte Folded Spill444; MIPS64-NEXT: sd $18, 16($sp) # 8-byte Folded Spill445; MIPS64-NEXT: sd $17, 8($sp) # 8-byte Folded Spill446; MIPS64-NEXT: sd $16, 0($sp) # 8-byte Folded Spill447; MIPS64-NEXT: move $16, $8448; MIPS64-NEXT: move $17, $7449; MIPS64-NEXT: move $18, $5450; MIPS64-NEXT: move $19, $4451; MIPS64-NEXT: jal __truncdfhf2452; MIPS64-NEXT: dmtc1 $6, $f12453; MIPS64-NEXT: move $20, $2454; MIPS64-NEXT: jal __truncdfhf2455; MIPS64-NEXT: dmtc1 $17, $f12456; MIPS64-NEXT: dmtc1 $18, $f12457; MIPS64-NEXT: sh $2, 6($16)458; MIPS64-NEXT: jal __truncdfhf2459; MIPS64-NEXT: sh $20, 4($16)460; MIPS64-NEXT: sh $2, 2($16)461; MIPS64-NEXT: jal __truncdfhf2462; MIPS64-NEXT: dmtc1 $19, $f12463; MIPS64-NEXT: sh $2, 0($16)464; MIPS64-NEXT: ld $16, 0($sp) # 8-byte Folded Reload465; MIPS64-NEXT: ld $17, 8($sp) # 8-byte Folded Reload466; MIPS64-NEXT: ld $18, 16($sp) # 8-byte Folded Reload467; MIPS64-NEXT: ld $19, 24($sp) # 8-byte Folded Reload468; MIPS64-NEXT: ld $20, 32($sp) # 8-byte Folded Reload469; MIPS64-NEXT: ld $ra, 40($sp) # 8-byte Folded Reload470; MIPS64-NEXT: jr $ra471; MIPS64-NEXT: daddiu $sp, $sp, 48472 %b = fptrunc <4 x double> %a to <4 x half>473 store <4 x half> %b, ptr %p, align 8474 ret void475}476 477define half @test_fadd_fadd(half %a, half %b, half %c) nounwind {478; MIPS32-LABEL: test_fadd_fadd:479; MIPS32: # %bb.0:480; MIPS32-NEXT: addiu $sp, $sp, -40481; MIPS32-NEXT: sdc1 $f20, 32($sp) # 8-byte Folded Spill482; MIPS32-NEXT: sw $ra, 28($sp) # 4-byte Folded Spill483; MIPS32-NEXT: sw $17, 24($sp) # 4-byte Folded Spill484; MIPS32-NEXT: sw $16, 20($sp) # 4-byte Folded Spill485; MIPS32-NEXT: move $16, $6486; MIPS32-NEXT: move $17, $4487; MIPS32-NEXT: jal __extendhfsf2488; MIPS32-NEXT: move $4, $5489; MIPS32-NEXT: mov.s $f20, $f0490; MIPS32-NEXT: jal __extendhfsf2491; MIPS32-NEXT: move $4, $17492; MIPS32-NEXT: jal __truncsfhf2493; MIPS32-NEXT: add.s $f12, $f0, $f20494; MIPS32-NEXT: jal __extendhfsf2495; MIPS32-NEXT: move $4, $2496; MIPS32-NEXT: mov.s $f20, $f0497; MIPS32-NEXT: jal __extendhfsf2498; MIPS32-NEXT: move $4, $16499; MIPS32-NEXT: jal __truncsfhf2500; MIPS32-NEXT: add.s $f12, $f20, $f0501; MIPS32-NEXT: lw $16, 20($sp) # 4-byte Folded Reload502; MIPS32-NEXT: lw $17, 24($sp) # 4-byte Folded Reload503; MIPS32-NEXT: lw $ra, 28($sp) # 4-byte Folded Reload504; MIPS32-NEXT: ldc1 $f20, 32($sp) # 8-byte Folded Reload505; MIPS32-NEXT: jr $ra506; MIPS32-NEXT: addiu $sp, $sp, 40507;508; MIPS64-LABEL: test_fadd_fadd:509; MIPS64: # %bb.0:510; MIPS64-NEXT: daddiu $sp, $sp, -32511; MIPS64-NEXT: sdc1 $f24, 24($sp) # 8-byte Folded Spill512; MIPS64-NEXT: sd $ra, 16($sp) # 8-byte Folded Spill513; MIPS64-NEXT: sd $17, 8($sp) # 8-byte Folded Spill514; MIPS64-NEXT: sd $16, 0($sp) # 8-byte Folded Spill515; MIPS64-NEXT: move $16, $6516; MIPS64-NEXT: move $17, $4517; MIPS64-NEXT: jal __extendhfsf2518; MIPS64-NEXT: sll $4, $5, 0519; MIPS64-NEXT: mov.s $f24, $f0520; MIPS64-NEXT: jal __extendhfsf2521; MIPS64-NEXT: sll $4, $17, 0522; MIPS64-NEXT: jal __truncsfhf2523; MIPS64-NEXT: add.s $f12, $f0, $f24524; MIPS64-NEXT: jal __extendhfsf2525; MIPS64-NEXT: sll $4, $2, 0526; MIPS64-NEXT: mov.s $f24, $f0527; MIPS64-NEXT: jal __extendhfsf2528; MIPS64-NEXT: sll $4, $16, 0529; MIPS64-NEXT: jal __truncsfhf2530; MIPS64-NEXT: add.s $f12, $f24, $f0531; MIPS64-NEXT: ld $16, 0($sp) # 8-byte Folded Reload532; MIPS64-NEXT: ld $17, 8($sp) # 8-byte Folded Reload533; MIPS64-NEXT: ld $ra, 16($sp) # 8-byte Folded Reload534; MIPS64-NEXT: ldc1 $f24, 24($sp) # 8-byte Folded Reload535; MIPS64-NEXT: jr $ra536; MIPS64-NEXT: daddiu $sp, $sp, 32537 %d = fadd half %a, %b538 %e = fadd half %d, %c539 ret half %e540}541 542define half @to_half(i16 %bits) nounwind {543; MIPS32-LABEL: to_half:544; MIPS32: # %bb.0:545; MIPS32-NEXT: jr $ra546; MIPS32-NEXT: move $2, $4547;548; MIPS64-LABEL: to_half:549; MIPS64: # %bb.0:550; MIPS64-NEXT: jr $ra551; MIPS64-NEXT: sll $2, $4, 0552 %f = bitcast i16 %bits to half553 ret half %f554}555 556define i16 @from_half(half %f) nounwind {557; MIPS32-LABEL: from_half:558; MIPS32: # %bb.0:559; MIPS32-NEXT: jr $ra560; MIPS32-NEXT: move $2, $4561;562; MIPS64-LABEL: from_half:563; MIPS64: # %bb.0:564; MIPS64-NEXT: jr $ra565; MIPS64-NEXT: sll $2, $4, 0566 %bits = bitcast half %f to i16567 ret i16 %bits568}569