4505 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2 3; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=armv7-unknown-none-eabihf | FileCheck %s --check-prefixes=LE-I324; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=armv7-unknown-none-eabihf | FileCheck %s --check-prefixes=LE-I645; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=armv7-unknown-none-eabihf -mattr=+neon | FileCheck %s --check-prefixes=LE-I326; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=armv7-unknown-none-eabihf -mattr=+neon | FileCheck %s --check-prefixes=LE-I647; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=armebv7-unknown-none-eabihf | FileCheck %s --check-prefixes=BE-I328; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=armebv7-unknown-none-eabihf | FileCheck %s --check-prefixes=BE-I649; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=armebv7-unknown-none-eabihf -mattr=+neon | FileCheck %s --check-prefixes=BE-I3210; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=armebv7-unknown-none-eabihf -mattr=+neon | FileCheck %s --check-prefixes=BE-I6411 12define <1 x iXLen> @lrint_v1f16(<1 x half> %x) {13; LE-I32-LABEL: lrint_v1f16:14; LE-I32: @ %bb.0:15; LE-I32-NEXT: .save {r11, lr}16; LE-I32-NEXT: push {r11, lr}17; LE-I32-NEXT: vmov r0, s018; LE-I32-NEXT: bl __aeabi_f2h19; LE-I32-NEXT: bl __aeabi_h2f20; LE-I32-NEXT: vmov s0, r021; LE-I32-NEXT: bl lrintf22; LE-I32-NEXT: pop {r11, pc}23;24; LE-I64-LABEL: lrint_v1f16:25; LE-I64: @ %bb.0:26; LE-I64-NEXT: .save {r11, lr}27; LE-I64-NEXT: push {r11, lr}28; LE-I64-NEXT: vmov r0, s029; LE-I64-NEXT: bl __aeabi_f2h30; LE-I64-NEXT: bl __aeabi_h2f31; LE-I64-NEXT: vmov s0, r032; LE-I64-NEXT: bl lrintf33; LE-I64-NEXT: vmov.32 d0[0], r034; LE-I64-NEXT: vmov.32 d0[1], r135; LE-I64-NEXT: pop {r11, pc}36;37; BE-I32-LABEL: lrint_v1f16:38; BE-I32: @ %bb.0:39; BE-I32-NEXT: .save {r11, lr}40; BE-I32-NEXT: push {r11, lr}41; BE-I32-NEXT: vmov r0, s042; BE-I32-NEXT: bl __aeabi_f2h43; BE-I32-NEXT: bl __aeabi_h2f44; BE-I32-NEXT: vmov s0, r045; BE-I32-NEXT: bl lrintf46; BE-I32-NEXT: pop {r11, pc}47;48; BE-I64-LABEL: lrint_v1f16:49; BE-I64: @ %bb.0:50; BE-I64-NEXT: .save {r11, lr}51; BE-I64-NEXT: push {r11, lr}52; BE-I64-NEXT: vmov r0, s053; BE-I64-NEXT: bl __aeabi_f2h54; BE-I64-NEXT: bl __aeabi_h2f55; BE-I64-NEXT: vmov s0, r056; BE-I64-NEXT: bl lrintf57; BE-I64-NEXT: vmov.32 d16[0], r058; BE-I64-NEXT: vmov.32 d16[1], r159; BE-I64-NEXT: vrev64.32 d0, d1660; BE-I64-NEXT: pop {r11, pc}61 %a = call <1 x iXLen> @llvm.lrint.v1iXLen.v1f16(<1 x half> %x)62 ret <1 x iXLen> %a63}64 65define <2 x iXLen> @lrint_v2f16(<2 x half> %x) {66; LE-I32-LABEL: lrint_v2f16:67; LE-I32: @ %bb.0:68; LE-I32-NEXT: .save {r11, lr}69; LE-I32-NEXT: push {r11, lr}70; LE-I32-NEXT: .vsave {d8}71; LE-I32-NEXT: vpush {d8}72; LE-I32-NEXT: vmov r0, s073; LE-I32-NEXT: vmov.f32 s16, s174; LE-I32-NEXT: bl __aeabi_h2f75; LE-I32-NEXT: vmov s0, r076; LE-I32-NEXT: bl lrintf77; LE-I32-NEXT: vmov r1, s1678; LE-I32-NEXT: vmov.32 d8[0], r079; LE-I32-NEXT: mov r0, r180; LE-I32-NEXT: bl __aeabi_h2f81; LE-I32-NEXT: vmov s0, r082; LE-I32-NEXT: bl lrintf83; LE-I32-NEXT: vmov.32 d8[1], r084; LE-I32-NEXT: vorr d0, d8, d885; LE-I32-NEXT: vpop {d8}86; LE-I32-NEXT: pop {r11, pc}87;88; LE-I64-LABEL: lrint_v2f16:89; LE-I64: @ %bb.0:90; LE-I64-NEXT: .save {r4, r5, r11, lr}91; LE-I64-NEXT: push {r4, r5, r11, lr}92; LE-I64-NEXT: .vsave {d8, d9}93; LE-I64-NEXT: vpush {d8, d9}94; LE-I64-NEXT: vmov r0, s195; LE-I64-NEXT: vmov.f32 s16, s096; LE-I64-NEXT: bl __aeabi_h2f97; LE-I64-NEXT: vmov s0, r098; LE-I64-NEXT: bl lrintf99; LE-I64-NEXT: mov r4, r0100; LE-I64-NEXT: vmov r0, s16101; LE-I64-NEXT: mov r5, r1102; LE-I64-NEXT: bl __aeabi_h2f103; LE-I64-NEXT: vmov s0, r0104; LE-I64-NEXT: vmov.32 d9[0], r4105; LE-I64-NEXT: bl lrintf106; LE-I64-NEXT: vmov.32 d8[0], r0107; LE-I64-NEXT: vmov.32 d9[1], r5108; LE-I64-NEXT: vmov.32 d8[1], r1109; LE-I64-NEXT: vorr q0, q4, q4110; LE-I64-NEXT: vpop {d8, d9}111; LE-I64-NEXT: pop {r4, r5, r11, pc}112;113; BE-I32-LABEL: lrint_v2f16:114; BE-I32: @ %bb.0:115; BE-I32-NEXT: .save {r11, lr}116; BE-I32-NEXT: push {r11, lr}117; BE-I32-NEXT: .vsave {d8}118; BE-I32-NEXT: vpush {d8}119; BE-I32-NEXT: vmov r0, s0120; BE-I32-NEXT: vmov.f32 s16, s1121; BE-I32-NEXT: bl __aeabi_h2f122; BE-I32-NEXT: vmov s0, r0123; BE-I32-NEXT: bl lrintf124; BE-I32-NEXT: vmov r1, s16125; BE-I32-NEXT: vmov.32 d8[0], r0126; BE-I32-NEXT: mov r0, r1127; BE-I32-NEXT: bl __aeabi_h2f128; BE-I32-NEXT: vmov s0, r0129; BE-I32-NEXT: bl lrintf130; BE-I32-NEXT: vmov.32 d8[1], r0131; BE-I32-NEXT: vrev64.32 d0, d8132; BE-I32-NEXT: vpop {d8}133; BE-I32-NEXT: pop {r11, pc}134;135; BE-I64-LABEL: lrint_v2f16:136; BE-I64: @ %bb.0:137; BE-I64-NEXT: .save {r4, r5, r11, lr}138; BE-I64-NEXT: push {r4, r5, r11, lr}139; BE-I64-NEXT: .vsave {d8}140; BE-I64-NEXT: vpush {d8}141; BE-I64-NEXT: vmov r0, s1142; BE-I64-NEXT: vmov.f32 s16, s0143; BE-I64-NEXT: bl __aeabi_h2f144; BE-I64-NEXT: vmov s0, r0145; BE-I64-NEXT: bl lrintf146; BE-I64-NEXT: mov r4, r0147; BE-I64-NEXT: vmov r0, s16148; BE-I64-NEXT: mov r5, r1149; BE-I64-NEXT: bl __aeabi_h2f150; BE-I64-NEXT: vmov s0, r0151; BE-I64-NEXT: vmov.32 d8[0], r4152; BE-I64-NEXT: bl lrintf153; BE-I64-NEXT: vmov.32 d16[0], r0154; BE-I64-NEXT: vmov.32 d8[1], r5155; BE-I64-NEXT: vmov.32 d16[1], r1156; BE-I64-NEXT: vrev64.32 d1, d8157; BE-I64-NEXT: vrev64.32 d0, d16158; BE-I64-NEXT: vpop {d8}159; BE-I64-NEXT: pop {r4, r5, r11, pc}160 %a = call <2 x iXLen> @llvm.lrint.v2iXLen.v2f16(<2 x half> %x)161 ret <2 x iXLen> %a162}163 164define <4 x iXLen> @lrint_v4f16(<4 x half> %x) {165; LE-I32-LABEL: lrint_v4f16:166; LE-I32: @ %bb.0:167; LE-I32-NEXT: .save {r4, r5, r11, lr}168; LE-I32-NEXT: push {r4, r5, r11, lr}169; LE-I32-NEXT: .vsave {d8, d9, d10, d11}170; LE-I32-NEXT: vpush {d8, d9, d10, d11}171; LE-I32-NEXT: vmov r0, s3172; LE-I32-NEXT: vmov.f32 s16, s2173; LE-I32-NEXT: vmov.f32 s18, s1174; LE-I32-NEXT: vmov.f32 s20, s0175; LE-I32-NEXT: bl __aeabi_h2f176; LE-I32-NEXT: vmov s0, r0177; LE-I32-NEXT: bl lrintf178; LE-I32-NEXT: mov r4, r0179; LE-I32-NEXT: vmov r0, s16180; LE-I32-NEXT: bl __aeabi_h2f181; LE-I32-NEXT: mov r5, r0182; LE-I32-NEXT: vmov r0, s20183; LE-I32-NEXT: bl __aeabi_h2f184; LE-I32-NEXT: vmov s0, r0185; LE-I32-NEXT: bl lrintf186; LE-I32-NEXT: vmov s0, r5187; LE-I32-NEXT: vmov.32 d10[0], r0188; LE-I32-NEXT: bl lrintf189; LE-I32-NEXT: vmov.32 d11[0], r0190; LE-I32-NEXT: vmov r0, s18191; LE-I32-NEXT: bl __aeabi_h2f192; LE-I32-NEXT: vmov s0, r0193; LE-I32-NEXT: vmov.32 d11[1], r4194; LE-I32-NEXT: bl lrintf195; LE-I32-NEXT: vmov.32 d10[1], r0196; LE-I32-NEXT: vorr q0, q5, q5197; LE-I32-NEXT: vpop {d8, d9, d10, d11}198; LE-I32-NEXT: pop {r4, r5, r11, pc}199;200; LE-I64-LABEL: lrint_v4f16:201; LE-I64: @ %bb.0:202; LE-I64-NEXT: .save {r4, r5, r6, r7, r11, lr}203; LE-I64-NEXT: push {r4, r5, r6, r7, r11, lr}204; LE-I64-NEXT: .vsave {d12, d13}205; LE-I64-NEXT: vpush {d12, d13}206; LE-I64-NEXT: .vsave {d8, d9, d10}207; LE-I64-NEXT: vpush {d8, d9, d10}208; LE-I64-NEXT: vmov r0, s1209; LE-I64-NEXT: vmov.f32 s16, s3210; LE-I64-NEXT: vmov.f32 s20, s2211; LE-I64-NEXT: vmov.f32 s18, s0212; LE-I64-NEXT: bl __aeabi_h2f213; LE-I64-NEXT: vmov s0, r0214; LE-I64-NEXT: bl lrintf215; LE-I64-NEXT: mov r5, r0216; LE-I64-NEXT: vmov r0, s18217; LE-I64-NEXT: mov r4, r1218; LE-I64-NEXT: bl __aeabi_h2f219; LE-I64-NEXT: mov r7, r0220; LE-I64-NEXT: vmov r0, s16221; LE-I64-NEXT: bl __aeabi_h2f222; LE-I64-NEXT: vmov s0, r0223; LE-I64-NEXT: bl lrintf224; LE-I64-NEXT: vmov s0, r7225; LE-I64-NEXT: mov r6, r1226; LE-I64-NEXT: vmov.32 d9[0], r0227; LE-I64-NEXT: bl lrintf228; LE-I64-NEXT: vmov.32 d12[0], r0229; LE-I64-NEXT: vmov r0, s20230; LE-I64-NEXT: mov r7, r1231; LE-I64-NEXT: bl __aeabi_h2f232; LE-I64-NEXT: vmov s0, r0233; LE-I64-NEXT: vmov.32 d13[0], r5234; LE-I64-NEXT: bl lrintf235; LE-I64-NEXT: vmov.32 d8[0], r0236; LE-I64-NEXT: vmov.32 d13[1], r4237; LE-I64-NEXT: vmov.32 d9[1], r6238; LE-I64-NEXT: vmov.32 d12[1], r7239; LE-I64-NEXT: vmov.32 d8[1], r1240; LE-I64-NEXT: vorr q0, q6, q6241; LE-I64-NEXT: vorr q1, q4, q4242; LE-I64-NEXT: vpop {d8, d9, d10}243; LE-I64-NEXT: vpop {d12, d13}244; LE-I64-NEXT: pop {r4, r5, r6, r7, r11, pc}245;246; BE-I32-LABEL: lrint_v4f16:247; BE-I32: @ %bb.0:248; BE-I32-NEXT: .save {r4, r5, r11, lr}249; BE-I32-NEXT: push {r4, r5, r11, lr}250; BE-I32-NEXT: .vsave {d8, d9, d10, d11}251; BE-I32-NEXT: vpush {d8, d9, d10, d11}252; BE-I32-NEXT: vmov r0, s3253; BE-I32-NEXT: vmov.f32 s16, s2254; BE-I32-NEXT: vmov.f32 s18, s1255; BE-I32-NEXT: vmov.f32 s20, s0256; BE-I32-NEXT: bl __aeabi_h2f257; BE-I32-NEXT: vmov s0, r0258; BE-I32-NEXT: bl lrintf259; BE-I32-NEXT: mov r4, r0260; BE-I32-NEXT: vmov r0, s16261; BE-I32-NEXT: bl __aeabi_h2f262; BE-I32-NEXT: mov r5, r0263; BE-I32-NEXT: vmov r0, s20264; BE-I32-NEXT: bl __aeabi_h2f265; BE-I32-NEXT: vmov s0, r0266; BE-I32-NEXT: bl lrintf267; BE-I32-NEXT: vmov s0, r5268; BE-I32-NEXT: vmov.32 d10[0], r0269; BE-I32-NEXT: bl lrintf270; BE-I32-NEXT: vmov.32 d11[0], r0271; BE-I32-NEXT: vmov r0, s18272; BE-I32-NEXT: bl __aeabi_h2f273; BE-I32-NEXT: vmov s0, r0274; BE-I32-NEXT: vmov.32 d11[1], r4275; BE-I32-NEXT: bl lrintf276; BE-I32-NEXT: vmov.32 d10[1], r0277; BE-I32-NEXT: vrev64.32 q0, q5278; BE-I32-NEXT: vpop {d8, d9, d10, d11}279; BE-I32-NEXT: pop {r4, r5, r11, pc}280;281; BE-I64-LABEL: lrint_v4f16:282; BE-I64: @ %bb.0:283; BE-I64-NEXT: .save {r4, r5, r6, r7, r11, lr}284; BE-I64-NEXT: push {r4, r5, r6, r7, r11, lr}285; BE-I64-NEXT: .vsave {d8, d9, d10}286; BE-I64-NEXT: vpush {d8, d9, d10}287; BE-I64-NEXT: vmov r0, s1288; BE-I64-NEXT: vmov.f32 s16, s3289; BE-I64-NEXT: vmov.f32 s18, s2290; BE-I64-NEXT: vmov.f32 s20, s0291; BE-I64-NEXT: bl __aeabi_h2f292; BE-I64-NEXT: vmov s0, r0293; BE-I64-NEXT: bl lrintf294; BE-I64-NEXT: mov r5, r0295; BE-I64-NEXT: vmov r0, s20296; BE-I64-NEXT: mov r4, r1297; BE-I64-NEXT: bl __aeabi_h2f298; BE-I64-NEXT: mov r7, r0299; BE-I64-NEXT: vmov r0, s16300; BE-I64-NEXT: bl __aeabi_h2f301; BE-I64-NEXT: vmov s0, r0302; BE-I64-NEXT: bl lrintf303; BE-I64-NEXT: vmov s0, r7304; BE-I64-NEXT: mov r6, r1305; BE-I64-NEXT: vmov.32 d8[0], r0306; BE-I64-NEXT: bl lrintf307; BE-I64-NEXT: vmov.32 d10[0], r0308; BE-I64-NEXT: vmov r0, s18309; BE-I64-NEXT: mov r7, r1310; BE-I64-NEXT: bl __aeabi_h2f311; BE-I64-NEXT: vmov s0, r0312; BE-I64-NEXT: vmov.32 d9[0], r5313; BE-I64-NEXT: bl lrintf314; BE-I64-NEXT: vmov.32 d16[0], r0315; BE-I64-NEXT: vmov.32 d9[1], r4316; BE-I64-NEXT: vmov.32 d8[1], r6317; BE-I64-NEXT: vmov.32 d10[1], r7318; BE-I64-NEXT: vmov.32 d16[1], r1319; BE-I64-NEXT: vrev64.32 d1, d9320; BE-I64-NEXT: vrev64.32 d3, d8321; BE-I64-NEXT: vrev64.32 d0, d10322; BE-I64-NEXT: vrev64.32 d2, d16323; BE-I64-NEXT: vpop {d8, d9, d10}324; BE-I64-NEXT: pop {r4, r5, r6, r7, r11, pc}325 %a = call <4 x iXLen> @llvm.lrint.v4iXLen.v4f16(<4 x half> %x)326 ret <4 x iXLen> %a327}328 329define <8 x iXLen> @lrint_v8f16(<8 x half> %x) {330; LE-I32-LABEL: lrint_v8f16:331; LE-I32: @ %bb.0:332; LE-I32-NEXT: .save {r4, r5, r6, r7, r8, r9, r11, lr}333; LE-I32-NEXT: push {r4, r5, r6, r7, r8, r9, r11, lr}334; LE-I32-NEXT: .vsave {d8, d9, d10, d11, d12, d13, d14}335; LE-I32-NEXT: vpush {d8, d9, d10, d11, d12, d13, d14}336; LE-I32-NEXT: vmov r0, s7337; LE-I32-NEXT: vmov.f32 s18, s6338; LE-I32-NEXT: vmov.f32 s16, s5339; LE-I32-NEXT: vmov.f32 s20, s4340; LE-I32-NEXT: vmov.f32 s22, s3341; LE-I32-NEXT: vmov.f32 s24, s2342; LE-I32-NEXT: vmov.f32 s26, s1343; LE-I32-NEXT: vmov.f32 s28, s0344; LE-I32-NEXT: bl __aeabi_h2f345; LE-I32-NEXT: vmov s0, r0346; LE-I32-NEXT: bl lrintf347; LE-I32-NEXT: mov r8, r0348; LE-I32-NEXT: vmov r0, s26349; LE-I32-NEXT: bl __aeabi_h2f350; LE-I32-NEXT: mov r9, r0351; LE-I32-NEXT: vmov r0, s22352; LE-I32-NEXT: bl __aeabi_h2f353; LE-I32-NEXT: mov r6, r0354; LE-I32-NEXT: vmov r0, s28355; LE-I32-NEXT: bl __aeabi_h2f356; LE-I32-NEXT: mov r7, r0357; LE-I32-NEXT: vmov r0, s24358; LE-I32-NEXT: bl __aeabi_h2f359; LE-I32-NEXT: mov r4, r0360; LE-I32-NEXT: vmov r0, s18361; LE-I32-NEXT: bl __aeabi_h2f362; LE-I32-NEXT: mov r5, r0363; LE-I32-NEXT: vmov r0, s20364; LE-I32-NEXT: bl __aeabi_h2f365; LE-I32-NEXT: vmov s0, r0366; LE-I32-NEXT: bl lrintf367; LE-I32-NEXT: vmov s0, r5368; LE-I32-NEXT: vmov.32 d10[0], r0369; LE-I32-NEXT: bl lrintf370; LE-I32-NEXT: vmov s0, r4371; LE-I32-NEXT: vmov.32 d11[0], r0372; LE-I32-NEXT: bl lrintf373; LE-I32-NEXT: vmov s0, r7374; LE-I32-NEXT: vmov.32 d13[0], r0375; LE-I32-NEXT: bl lrintf376; LE-I32-NEXT: vmov s0, r6377; LE-I32-NEXT: vmov.32 d12[0], r0378; LE-I32-NEXT: bl lrintf379; LE-I32-NEXT: vmov s0, r9380; LE-I32-NEXT: vmov.32 d13[1], r0381; LE-I32-NEXT: bl lrintf382; LE-I32-NEXT: vmov.32 d12[1], r0383; LE-I32-NEXT: vmov r0, s16384; LE-I32-NEXT: bl __aeabi_h2f385; LE-I32-NEXT: vmov s0, r0386; LE-I32-NEXT: vmov.32 d11[1], r8387; LE-I32-NEXT: bl lrintf388; LE-I32-NEXT: vmov.32 d10[1], r0389; LE-I32-NEXT: vorr q0, q6, q6390; LE-I32-NEXT: vorr q1, q5, q5391; LE-I32-NEXT: vpop {d8, d9, d10, d11, d12, d13, d14}392; LE-I32-NEXT: pop {r4, r5, r6, r7, r8, r9, r11, pc}393;394; LE-I64-LABEL: lrint_v8f16:395; LE-I64: @ %bb.0:396; LE-I64-NEXT: .save {r4, r5, r6, r7, r8, r9, r10, r11, lr}397; LE-I64-NEXT: push {r4, r5, r6, r7, r8, r9, r10, r11, lr}398; LE-I64-NEXT: .pad #4399; LE-I64-NEXT: sub sp, sp, #4400; LE-I64-NEXT: .vsave {d8, d9, d10, d11, d12, d13, d14, d15}401; LE-I64-NEXT: vpush {d8, d9, d10, d11, d12, d13, d14, d15}402; LE-I64-NEXT: .pad #8403; LE-I64-NEXT: sub sp, sp, #8404; LE-I64-NEXT: vmov r0, s1405; LE-I64-NEXT: vstr s6, [sp, #4] @ 4-byte Spill406; LE-I64-NEXT: vmov.f32 s16, s7407; LE-I64-NEXT: vmov.f32 s18, s5408; LE-I64-NEXT: vmov.f32 s20, s4409; LE-I64-NEXT: vmov.f32 s22, s3410; LE-I64-NEXT: vmov.f32 s24, s2411; LE-I64-NEXT: vmov.f32 s26, s0412; LE-I64-NEXT: bl __aeabi_h2f413; LE-I64-NEXT: vmov s0, r0414; LE-I64-NEXT: bl lrintf415; LE-I64-NEXT: mov r9, r0416; LE-I64-NEXT: vmov r0, s26417; LE-I64-NEXT: str r1, [sp] @ 4-byte Spill418; LE-I64-NEXT: bl __aeabi_h2f419; LE-I64-NEXT: mov r10, r0420; LE-I64-NEXT: vmov r0, s22421; LE-I64-NEXT: bl __aeabi_h2f422; LE-I64-NEXT: mov r5, r0423; LE-I64-NEXT: vmov r0, s24424; LE-I64-NEXT: bl __aeabi_h2f425; LE-I64-NEXT: mov r7, r0426; LE-I64-NEXT: vmov r0, s18427; LE-I64-NEXT: bl __aeabi_h2f428; LE-I64-NEXT: mov r6, r0429; LE-I64-NEXT: vmov r0, s20430; LE-I64-NEXT: bl __aeabi_h2f431; LE-I64-NEXT: mov r4, r0432; LE-I64-NEXT: vmov r0, s16433; LE-I64-NEXT: bl __aeabi_h2f434; LE-I64-NEXT: vmov s0, r0435; LE-I64-NEXT: bl lrintf436; LE-I64-NEXT: vmov s0, r4437; LE-I64-NEXT: mov r11, r1438; LE-I64-NEXT: vmov.32 d11[0], r0439; LE-I64-NEXT: bl lrintf440; LE-I64-NEXT: vmov s0, r6441; LE-I64-NEXT: mov r8, r1442; LE-I64-NEXT: vmov.32 d12[0], r0443; LE-I64-NEXT: bl lrintf444; LE-I64-NEXT: vmov s0, r7445; LE-I64-NEXT: mov r6, r1446; LE-I64-NEXT: vmov.32 d13[0], r0447; LE-I64-NEXT: bl lrintf448; LE-I64-NEXT: vmov s0, r5449; LE-I64-NEXT: mov r7, r1450; LE-I64-NEXT: vmov.32 d14[0], r0451; LE-I64-NEXT: bl lrintf452; LE-I64-NEXT: vmov s0, r10453; LE-I64-NEXT: mov r5, r1454; LE-I64-NEXT: vmov.32 d15[0], r0455; LE-I64-NEXT: bl lrintf456; LE-I64-NEXT: vldr s0, [sp, #4] @ 4-byte Reload457; LE-I64-NEXT: mov r4, r1458; LE-I64-NEXT: vmov.32 d8[0], r0459; LE-I64-NEXT: vmov r0, s0460; LE-I64-NEXT: bl __aeabi_h2f461; LE-I64-NEXT: vmov s0, r0462; LE-I64-NEXT: vmov.32 d9[0], r9463; LE-I64-NEXT: bl lrintf464; LE-I64-NEXT: vmov.32 d10[0], r0465; LE-I64-NEXT: ldr r0, [sp] @ 4-byte Reload466; LE-I64-NEXT: vmov.32 d15[1], r5467; LE-I64-NEXT: vmov.32 d9[1], r0468; LE-I64-NEXT: vmov.32 d13[1], r6469; LE-I64-NEXT: vmov.32 d11[1], r11470; LE-I64-NEXT: vmov.32 d8[1], r4471; LE-I64-NEXT: vmov.32 d14[1], r7472; LE-I64-NEXT: vorr q0, q4, q4473; LE-I64-NEXT: vmov.32 d12[1], r8474; LE-I64-NEXT: vorr q1, q7, q7475; LE-I64-NEXT: vmov.32 d10[1], r1476; LE-I64-NEXT: vorr q2, q6, q6477; LE-I64-NEXT: vorr q3, q5, q5478; LE-I64-NEXT: add sp, sp, #8479; LE-I64-NEXT: vpop {d8, d9, d10, d11, d12, d13, d14, d15}480; LE-I64-NEXT: add sp, sp, #4481; LE-I64-NEXT: pop {r4, r5, r6, r7, r8, r9, r10, r11, pc}482;483; BE-I32-LABEL: lrint_v8f16:484; BE-I32: @ %bb.0:485; BE-I32-NEXT: .save {r4, r5, r6, r7, r8, r9, r11, lr}486; BE-I32-NEXT: push {r4, r5, r6, r7, r8, r9, r11, lr}487; BE-I32-NEXT: .vsave {d8, d9, d10, d11, d12, d13, d14}488; BE-I32-NEXT: vpush {d8, d9, d10, d11, d12, d13, d14}489; BE-I32-NEXT: vmov r0, s1490; BE-I32-NEXT: vmov.f32 s18, s7491; BE-I32-NEXT: vmov.f32 s20, s6492; BE-I32-NEXT: vmov.f32 s16, s5493; BE-I32-NEXT: vmov.f32 s22, s4494; BE-I32-NEXT: vmov.f32 s24, s3495; BE-I32-NEXT: vmov.f32 s26, s2496; BE-I32-NEXT: vmov.f32 s28, s0497; BE-I32-NEXT: bl __aeabi_h2f498; BE-I32-NEXT: vmov s0, r0499; BE-I32-NEXT: bl lrintf500; BE-I32-NEXT: mov r8, r0501; BE-I32-NEXT: vmov r0, s24502; BE-I32-NEXT: bl __aeabi_h2f503; BE-I32-NEXT: mov r9, r0504; BE-I32-NEXT: vmov r0, s18505; BE-I32-NEXT: bl __aeabi_h2f506; BE-I32-NEXT: mov r6, r0507; BE-I32-NEXT: vmov r0, s26508; BE-I32-NEXT: bl __aeabi_h2f509; BE-I32-NEXT: mov r7, r0510; BE-I32-NEXT: vmov r0, s20511; BE-I32-NEXT: bl __aeabi_h2f512; BE-I32-NEXT: mov r4, r0513; BE-I32-NEXT: vmov r0, s28514; BE-I32-NEXT: bl __aeabi_h2f515; BE-I32-NEXT: mov r5, r0516; BE-I32-NEXT: vmov r0, s22517; BE-I32-NEXT: bl __aeabi_h2f518; BE-I32-NEXT: vmov s0, r0519; BE-I32-NEXT: bl lrintf520; BE-I32-NEXT: vmov s0, r5521; BE-I32-NEXT: vmov.32 d10[0], r0522; BE-I32-NEXT: bl lrintf523; BE-I32-NEXT: vmov s0, r4524; BE-I32-NEXT: vmov.32 d12[0], r0525; BE-I32-NEXT: bl lrintf526; BE-I32-NEXT: vmov s0, r7527; BE-I32-NEXT: vmov.32 d11[0], r0528; BE-I32-NEXT: bl lrintf529; BE-I32-NEXT: vmov s0, r6530; BE-I32-NEXT: vmov.32 d13[0], r0531; BE-I32-NEXT: bl lrintf532; BE-I32-NEXT: vmov s0, r9533; BE-I32-NEXT: vmov.32 d11[1], r0534; BE-I32-NEXT: bl lrintf535; BE-I32-NEXT: vmov.32 d13[1], r0536; BE-I32-NEXT: vmov r0, s16537; BE-I32-NEXT: bl __aeabi_h2f538; BE-I32-NEXT: vmov s0, r0539; BE-I32-NEXT: vmov.32 d12[1], r8540; BE-I32-NEXT: bl lrintf541; BE-I32-NEXT: vmov.32 d10[1], r0542; BE-I32-NEXT: vrev64.32 q0, q6543; BE-I32-NEXT: vrev64.32 q1, q5544; BE-I32-NEXT: vpop {d8, d9, d10, d11, d12, d13, d14}545; BE-I32-NEXT: pop {r4, r5, r6, r7, r8, r9, r11, pc}546;547; BE-I64-LABEL: lrint_v8f16:548; BE-I64: @ %bb.0:549; BE-I64-NEXT: .save {r4, r5, r6, r7, r8, r9, r10, r11, lr}550; BE-I64-NEXT: push {r4, r5, r6, r7, r8, r9, r10, r11, lr}551; BE-I64-NEXT: .pad #4552; BE-I64-NEXT: sub sp, sp, #4553; BE-I64-NEXT: .vsave {d8, d9, d10, d11, d12, d13, d14}554; BE-I64-NEXT: vpush {d8, d9, d10, d11, d12, d13, d14}555; BE-I64-NEXT: .pad #8556; BE-I64-NEXT: sub sp, sp, #8557; BE-I64-NEXT: vmov r0, s1558; BE-I64-NEXT: vmov.f32 s18, s7559; BE-I64-NEXT: vmov.f32 s16, s6560; BE-I64-NEXT: vmov.f32 s20, s5561; BE-I64-NEXT: vmov.f32 s22, s4562; BE-I64-NEXT: vmov.f32 s24, s3563; BE-I64-NEXT: vmov.f32 s26, s2564; BE-I64-NEXT: vmov.f32 s28, s0565; BE-I64-NEXT: bl __aeabi_h2f566; BE-I64-NEXT: vmov s0, r0567; BE-I64-NEXT: bl lrintf568; BE-I64-NEXT: mov r9, r0569; BE-I64-NEXT: vmov r0, s28570; BE-I64-NEXT: str r1, [sp, #4] @ 4-byte Spill571; BE-I64-NEXT: bl __aeabi_h2f572; BE-I64-NEXT: mov r10, r0573; BE-I64-NEXT: vmov r0, s24574; BE-I64-NEXT: bl __aeabi_h2f575; BE-I64-NEXT: mov r5, r0576; BE-I64-NEXT: vmov r0, s26577; BE-I64-NEXT: bl __aeabi_h2f578; BE-I64-NEXT: mov r7, r0579; BE-I64-NEXT: vmov r0, s20580; BE-I64-NEXT: bl __aeabi_h2f581; BE-I64-NEXT: mov r6, r0582; BE-I64-NEXT: vmov r0, s22583; BE-I64-NEXT: bl __aeabi_h2f584; BE-I64-NEXT: mov r4, r0585; BE-I64-NEXT: vmov r0, s18586; BE-I64-NEXT: bl __aeabi_h2f587; BE-I64-NEXT: vmov s0, r0588; BE-I64-NEXT: bl lrintf589; BE-I64-NEXT: vmov s0, r4590; BE-I64-NEXT: mov r11, r1591; BE-I64-NEXT: vmov.32 d9[0], r0592; BE-I64-NEXT: bl lrintf593; BE-I64-NEXT: vmov s0, r6594; BE-I64-NEXT: mov r8, r1595; BE-I64-NEXT: vmov.32 d10[0], r0596; BE-I64-NEXT: bl lrintf597; BE-I64-NEXT: vmov s0, r7598; BE-I64-NEXT: mov r6, r1599; BE-I64-NEXT: vmov.32 d11[0], r0600; BE-I64-NEXT: bl lrintf601; BE-I64-NEXT: vmov s0, r5602; BE-I64-NEXT: mov r7, r1603; BE-I64-NEXT: vmov.32 d12[0], r0604; BE-I64-NEXT: bl lrintf605; BE-I64-NEXT: vmov s0, r10606; BE-I64-NEXT: mov r5, r1607; BE-I64-NEXT: vmov.32 d13[0], r0608; BE-I64-NEXT: bl lrintf609; BE-I64-NEXT: vmov.32 d14[0], r0610; BE-I64-NEXT: vmov r0, s16611; BE-I64-NEXT: mov r4, r1612; BE-I64-NEXT: bl __aeabi_h2f613; BE-I64-NEXT: vmov s0, r0614; BE-I64-NEXT: vmov.32 d8[0], r9615; BE-I64-NEXT: bl lrintf616; BE-I64-NEXT: vmov.32 d16[0], r0617; BE-I64-NEXT: ldr r0, [sp, #4] @ 4-byte Reload618; BE-I64-NEXT: vmov.32 d13[1], r5619; BE-I64-NEXT: vmov.32 d8[1], r0620; BE-I64-NEXT: vmov.32 d11[1], r6621; BE-I64-NEXT: vmov.32 d9[1], r11622; BE-I64-NEXT: vmov.32 d14[1], r4623; BE-I64-NEXT: vmov.32 d12[1], r7624; BE-I64-NEXT: vmov.32 d10[1], r8625; BE-I64-NEXT: vmov.32 d16[1], r1626; BE-I64-NEXT: vrev64.32 d1, d8627; BE-I64-NEXT: vrev64.32 d3, d13628; BE-I64-NEXT: vrev64.32 d5, d11629; BE-I64-NEXT: vrev64.32 d7, d9630; BE-I64-NEXT: vrev64.32 d0, d14631; BE-I64-NEXT: vrev64.32 d2, d12632; BE-I64-NEXT: vrev64.32 d4, d10633; BE-I64-NEXT: vrev64.32 d6, d16634; BE-I64-NEXT: add sp, sp, #8635; BE-I64-NEXT: vpop {d8, d9, d10, d11, d12, d13, d14}636; BE-I64-NEXT: add sp, sp, #4637; BE-I64-NEXT: pop {r4, r5, r6, r7, r8, r9, r10, r11, pc}638 %a = call <8 x iXLen> @llvm.lrint.v8iXLen.v8f16(<8 x half> %x)639 ret <8 x iXLen> %a640}641 642define <16 x iXLen> @lrint_v16f16(<16 x half> %x) {643; LE-I32-LABEL: lrint_v16f16:644; LE-I32: @ %bb.0:645; LE-I32-NEXT: .save {r4, r5, r6, r7, r8, r9, r10, lr}646; LE-I32-NEXT: push {r4, r5, r6, r7, r8, r9, r10, lr}647; LE-I32-NEXT: .vsave {d8, d9, d10, d11, d12, d13, d14, d15}648; LE-I32-NEXT: vpush {d8, d9, d10, d11, d12, d13, d14, d15}649; LE-I32-NEXT: .pad #8650; LE-I32-NEXT: sub sp, sp, #8651; LE-I32-NEXT: vmov r0, s15652; LE-I32-NEXT: vstr s13, [sp, #4] @ 4-byte Spill653; LE-I32-NEXT: vmov.f32 s26, s14654; LE-I32-NEXT: vstr s0, [sp] @ 4-byte Spill655; LE-I32-NEXT: vmov.f32 s20, s12656; LE-I32-NEXT: vmov.f32 s22, s11657; LE-I32-NEXT: vmov.f32 s18, s10658; LE-I32-NEXT: vmov.f32 s17, s9659; LE-I32-NEXT: vmov.f32 s24, s8660; LE-I32-NEXT: vmov.f32 s19, s7661; LE-I32-NEXT: vmov.f32 s30, s6662; LE-I32-NEXT: vmov.f32 s21, s5663; LE-I32-NEXT: vmov.f32 s16, s4664; LE-I32-NEXT: vmov.f32 s23, s3665; LE-I32-NEXT: vmov.f32 s28, s2666; LE-I32-NEXT: vmov.f32 s25, s1667; LE-I32-NEXT: bl __aeabi_h2f668; LE-I32-NEXT: vmov s0, r0669; LE-I32-NEXT: bl lrintf670; LE-I32-NEXT: mov r8, r0671; LE-I32-NEXT: vmov r0, s17672; LE-I32-NEXT: bl __aeabi_h2f673; LE-I32-NEXT: mov r9, r0674; LE-I32-NEXT: vmov r0, s22675; LE-I32-NEXT: bl __aeabi_h2f676; LE-I32-NEXT: mov r10, r0677; LE-I32-NEXT: vmov r0, s21678; LE-I32-NEXT: bl __aeabi_h2f679; LE-I32-NEXT: mov r7, r0680; LE-I32-NEXT: vmov r0, s19681; LE-I32-NEXT: bl __aeabi_h2f682; LE-I32-NEXT: mov r4, r0683; LE-I32-NEXT: vmov r0, s25684; LE-I32-NEXT: bl __aeabi_h2f685; LE-I32-NEXT: mov r5, r0686; LE-I32-NEXT: vmov r0, s23687; LE-I32-NEXT: bl __aeabi_h2f688; LE-I32-NEXT: mov r6, r0689; LE-I32-NEXT: vmov r0, s20690; LE-I32-NEXT: bl __aeabi_h2f691; LE-I32-NEXT: vmov s0, r0692; LE-I32-NEXT: bl lrintf693; LE-I32-NEXT: vmov.32 d10[0], r0694; LE-I32-NEXT: vmov r0, s26695; LE-I32-NEXT: bl __aeabi_h2f696; LE-I32-NEXT: vmov s0, r0697; LE-I32-NEXT: bl lrintf698; LE-I32-NEXT: vmov.32 d11[0], r0699; LE-I32-NEXT: vmov r0, s24700; LE-I32-NEXT: bl __aeabi_h2f701; LE-I32-NEXT: vmov s0, r0702; LE-I32-NEXT: bl lrintf703; LE-I32-NEXT: vmov.32 d12[0], r0704; LE-I32-NEXT: vmov r0, s18705; LE-I32-NEXT: bl __aeabi_h2f706; LE-I32-NEXT: vmov s0, r0707; LE-I32-NEXT: bl lrintf708; LE-I32-NEXT: vmov.32 d13[0], r0709; LE-I32-NEXT: vmov r0, s16710; LE-I32-NEXT: bl __aeabi_h2f711; LE-I32-NEXT: vmov s0, r0712; LE-I32-NEXT: bl lrintf713; LE-I32-NEXT: vmov.32 d8[0], r0714; LE-I32-NEXT: vmov r0, s30715; LE-I32-NEXT: bl __aeabi_h2f716; LE-I32-NEXT: vmov s0, r0717; LE-I32-NEXT: bl lrintf718; LE-I32-NEXT: vmov.32 d9[0], r0719; LE-I32-NEXT: vmov r0, s28720; LE-I32-NEXT: bl __aeabi_h2f721; LE-I32-NEXT: vmov s0, r0722; LE-I32-NEXT: bl lrintf723; LE-I32-NEXT: vldr s0, [sp] @ 4-byte Reload724; LE-I32-NEXT: vmov.32 d15[0], r0725; LE-I32-NEXT: vmov r0, s0726; LE-I32-NEXT: bl __aeabi_h2f727; LE-I32-NEXT: vmov s0, r0728; LE-I32-NEXT: bl lrintf729; LE-I32-NEXT: vmov s0, r6730; LE-I32-NEXT: vmov.32 d14[0], r0731; LE-I32-NEXT: bl lrintf732; LE-I32-NEXT: vmov s0, r5733; LE-I32-NEXT: vmov.32 d15[1], r0734; LE-I32-NEXT: bl lrintf735; LE-I32-NEXT: vmov s0, r4736; LE-I32-NEXT: vmov.32 d14[1], r0737; LE-I32-NEXT: bl lrintf738; LE-I32-NEXT: vmov s0, r7739; LE-I32-NEXT: vmov.32 d9[1], r0740; LE-I32-NEXT: bl lrintf741; LE-I32-NEXT: vmov s0, r10742; LE-I32-NEXT: vmov.32 d8[1], r0743; LE-I32-NEXT: bl lrintf744; LE-I32-NEXT: vmov s0, r9745; LE-I32-NEXT: vmov.32 d13[1], r0746; LE-I32-NEXT: bl lrintf747; LE-I32-NEXT: vldr s0, [sp, #4] @ 4-byte Reload748; LE-I32-NEXT: vmov.32 d12[1], r0749; LE-I32-NEXT: vmov r0, s0750; LE-I32-NEXT: bl __aeabi_h2f751; LE-I32-NEXT: vmov s0, r0752; LE-I32-NEXT: vmov.32 d11[1], r8753; LE-I32-NEXT: bl lrintf754; LE-I32-NEXT: vmov.32 d10[1], r0755; LE-I32-NEXT: vorr q0, q7, q7756; LE-I32-NEXT: vorr q1, q4, q4757; LE-I32-NEXT: vorr q2, q6, q6758; LE-I32-NEXT: vorr q3, q5, q5759; LE-I32-NEXT: add sp, sp, #8760; LE-I32-NEXT: vpop {d8, d9, d10, d11, d12, d13, d14, d15}761; LE-I32-NEXT: pop {r4, r5, r6, r7, r8, r9, r10, pc}762;763; LE-I64-LABEL: lrint_v16f16:764; LE-I64: @ %bb.0:765; LE-I64-NEXT: .save {r4, r5, r6, r7, r8, r9, r10, r11, lr}766; LE-I64-NEXT: push {r4, r5, r6, r7, r8, r9, r10, r11, lr}767; LE-I64-NEXT: .pad #4768; LE-I64-NEXT: sub sp, sp, #4769; LE-I64-NEXT: .vsave {d8, d9, d10, d11, d12, d13, d14, d15}770; LE-I64-NEXT: vpush {d8, d9, d10, d11, d12, d13, d14, d15}771; LE-I64-NEXT: .pad #120772; LE-I64-NEXT: sub sp, sp, #120773; LE-I64-NEXT: mov r11, r0774; LE-I64-NEXT: vmov r0, s7775; LE-I64-NEXT: vstr s15, [sp, #24] @ 4-byte Spill776; LE-I64-NEXT: vmov.f32 s23, s13777; LE-I64-NEXT: vstr s14, [sp, #100] @ 4-byte Spill778; LE-I64-NEXT: vmov.f32 s25, s12779; LE-I64-NEXT: vmov.f32 s27, s11780; LE-I64-NEXT: vstr s10, [sp, #104] @ 4-byte Spill781; LE-I64-NEXT: vstr s9, [sp, #108] @ 4-byte Spill782; LE-I64-NEXT: vmov.f32 s24, s8783; LE-I64-NEXT: vmov.f32 s19, s6784; LE-I64-NEXT: vmov.f32 s29, s5785; LE-I64-NEXT: vmov.f32 s17, s4786; LE-I64-NEXT: vmov.f32 s16, s3787; LE-I64-NEXT: vmov.f32 s21, s2788; LE-I64-NEXT: vmov.f32 s26, s1789; LE-I64-NEXT: vmov.f32 s18, s0790; LE-I64-NEXT: bl __aeabi_h2f791; LE-I64-NEXT: vmov s0, r0792; LE-I64-NEXT: bl lrintf793; LE-I64-NEXT: mov r7, r0794; LE-I64-NEXT: vmov r0, s25795; LE-I64-NEXT: str r1, [sp, #56] @ 4-byte Spill796; LE-I64-NEXT: bl __aeabi_h2f797; LE-I64-NEXT: vmov s0, r0798; LE-I64-NEXT: bl lrintf799; LE-I64-NEXT: mov r5, r0800; LE-I64-NEXT: vmov r0, s27801; LE-I64-NEXT: str r1, [sp, #116] @ 4-byte Spill802; LE-I64-NEXT: bl __aeabi_h2f803; LE-I64-NEXT: vmov s0, r0804; LE-I64-NEXT: bl lrintf805; LE-I64-NEXT: mov r6, r0806; LE-I64-NEXT: vmov r0, s29807; LE-I64-NEXT: str r1, [sp, #112] @ 4-byte Spill808; LE-I64-NEXT: bl __aeabi_h2f809; LE-I64-NEXT: vmov s0, r0810; LE-I64-NEXT: bl lrintf811; LE-I64-NEXT: vmov.32 d15[0], r0812; LE-I64-NEXT: vmov r0, s23813; LE-I64-NEXT: mov r4, r1814; LE-I64-NEXT: bl __aeabi_h2f815; LE-I64-NEXT: vmov s0, r0816; LE-I64-NEXT: add lr, sp, #80817; LE-I64-NEXT: vmov.32 d17[0], r6818; LE-I64-NEXT: vstmia lr, {d16, d17} @ 16-byte Spill819; LE-I64-NEXT: bl lrintf820; LE-I64-NEXT: mov r6, r0821; LE-I64-NEXT: vmov r0, s17822; LE-I64-NEXT: vmov r8, s21823; LE-I64-NEXT: str r1, [sp, #76] @ 4-byte Spill824; LE-I64-NEXT: vmov r10, s19825; LE-I64-NEXT: vmov.32 d10[0], r5826; LE-I64-NEXT: bl __aeabi_h2f827; LE-I64-NEXT: vmov s0, r0828; LE-I64-NEXT: add lr, sp, #40829; LE-I64-NEXT: vmov.32 d11[0], r6830; LE-I64-NEXT: vstmia lr, {d10, d11} @ 16-byte Spill831; LE-I64-NEXT: bl lrintf832; LE-I64-NEXT: vmov.32 d14[0], r0833; LE-I64-NEXT: mov r0, r10834; LE-I64-NEXT: mov r9, r1835; LE-I64-NEXT: bl __aeabi_h2f836; LE-I64-NEXT: vmov s0, r0837; LE-I64-NEXT: vmov.32 d11[0], r7838; LE-I64-NEXT: bl lrintf839; LE-I64-NEXT: vmov.32 d10[0], r0840; LE-I64-NEXT: mov r0, r8841; LE-I64-NEXT: mov r7, r1842; LE-I64-NEXT: bl __aeabi_h2f843; LE-I64-NEXT: mov r6, r0844; LE-I64-NEXT: ldr r0, [sp, #56] @ 4-byte Reload845; LE-I64-NEXT: vmov.32 d11[1], r0846; LE-I64-NEXT: vmov r0, s18847; LE-I64-NEXT: bl __aeabi_h2f848; LE-I64-NEXT: mov r5, r0849; LE-I64-NEXT: vmov r0, s16850; LE-I64-NEXT: vmov.32 d10[1], r7851; LE-I64-NEXT: add lr, sp, #56852; LE-I64-NEXT: vstmia lr, {d10, d11} @ 16-byte Spill853; LE-I64-NEXT: bl __aeabi_h2f854; LE-I64-NEXT: vmov s0, r0855; LE-I64-NEXT: vmov.32 d15[1], r4856; LE-I64-NEXT: bl lrintf857; LE-I64-NEXT: vmov.32 d9[0], r0858; LE-I64-NEXT: vmov r0, s26859; LE-I64-NEXT: add lr, sp, #24860; LE-I64-NEXT: vmov r8, s24861; LE-I64-NEXT: vmov.32 d14[1], r9862; LE-I64-NEXT: mov r10, r1863; LE-I64-NEXT: vmov s24, r5864; LE-I64-NEXT: vldr s0, [sp, #24] @ 4-byte Reload865; LE-I64-NEXT: vstmia lr, {d14, d15} @ 16-byte Spill866; LE-I64-NEXT: vmov r7, s0867; LE-I64-NEXT: bl __aeabi_h2f868; LE-I64-NEXT: vmov.f32 s0, s24869; LE-I64-NEXT: vmov s22, r0870; LE-I64-NEXT: bl lrintf871; LE-I64-NEXT: vmov.f32 s0, s22872; LE-I64-NEXT: mov r5, r1873; LE-I64-NEXT: vmov.32 d14[0], r0874; LE-I64-NEXT: vmov s24, r6875; LE-I64-NEXT: bl lrintf876; LE-I64-NEXT: vmov.32 d15[0], r0877; LE-I64-NEXT: mov r0, r7878; LE-I64-NEXT: mov r6, r1879; LE-I64-NEXT: bl __aeabi_h2f880; LE-I64-NEXT: vmov.f32 s0, s24881; LE-I64-NEXT: vmov s22, r0882; LE-I64-NEXT: bl lrintf883; LE-I64-NEXT: vmov.f32 s0, s22884; LE-I64-NEXT: vmov.32 d8[0], r0885; LE-I64-NEXT: add lr, sp, #8886; LE-I64-NEXT: mov r9, r1887; LE-I64-NEXT: vmov.32 d15[1], r6888; LE-I64-NEXT: vstmia lr, {d8, d9} @ 16-byte Spill889; LE-I64-NEXT: bl lrintf890; LE-I64-NEXT: vmov.32 d13[0], r0891; LE-I64-NEXT: mov r0, r8892; LE-I64-NEXT: mov r6, r1893; LE-I64-NEXT: bl __aeabi_h2f894; LE-I64-NEXT: vldr s0, [sp, #100] @ 4-byte Reload895; LE-I64-NEXT: mov r7, r0896; LE-I64-NEXT: vmov.32 d14[1], r5897; LE-I64-NEXT: vmov r0, s0898; LE-I64-NEXT: bl __aeabi_h2f899; LE-I64-NEXT: vldr s0, [sp, #104] @ 4-byte Reload900; LE-I64-NEXT: vmov s20, r0901; LE-I64-NEXT: vmov.32 d13[1], r6902; LE-I64-NEXT: vmov r4, s0903; LE-I64-NEXT: vldr s0, [sp, #108] @ 4-byte Reload904; LE-I64-NEXT: vmov r0, s0905; LE-I64-NEXT: bl __aeabi_h2f906; LE-I64-NEXT: vmov.f32 s0, s20907; LE-I64-NEXT: vmov s16, r0908; LE-I64-NEXT: bl lrintf909; LE-I64-NEXT: vmov.f32 s0, s16910; LE-I64-NEXT: mov r5, r1911; LE-I64-NEXT: vmov.32 d12[0], r0912; LE-I64-NEXT: vmov s18, r7913; LE-I64-NEXT: bl lrintf914; LE-I64-NEXT: vmov.32 d11[0], r0915; LE-I64-NEXT: mov r0, r4916; LE-I64-NEXT: mov r6, r1917; LE-I64-NEXT: bl __aeabi_h2f918; LE-I64-NEXT: vmov.f32 s0, s18919; LE-I64-NEXT: vmov s16, r0920; LE-I64-NEXT: bl lrintf921; LE-I64-NEXT: vmov.f32 s0, s16922; LE-I64-NEXT: vmov.32 d10[0], r0923; LE-I64-NEXT: mov r4, r1924; LE-I64-NEXT: vmov.32 d11[1], r6925; LE-I64-NEXT: bl lrintf926; LE-I64-NEXT: add lr, sp, #80927; LE-I64-NEXT: vmov.32 d10[1], r4928; LE-I64-NEXT: vldmia lr, {d16, d17} @ 16-byte Reload929; LE-I64-NEXT: add lr, sp, #40930; LE-I64-NEXT: vldmia lr, {d18, d19} @ 16-byte Reload931; LE-I64-NEXT: add lr, sp, #8932; LE-I64-NEXT: vmov.32 d16[0], r0933; LE-I64-NEXT: ldr r0, [sp, #76] @ 4-byte Reload934; LE-I64-NEXT: vldmia lr, {d20, d21} @ 16-byte Reload935; LE-I64-NEXT: add lr, sp, #24936; LE-I64-NEXT: vmov.32 d19[1], r0937; LE-I64-NEXT: ldr r0, [sp, #116] @ 4-byte Reload938; LE-I64-NEXT: vmov.32 d21[1], r10939; LE-I64-NEXT: vmov.32 d18[1], r0940; LE-I64-NEXT: ldr r0, [sp, #112] @ 4-byte Reload941; LE-I64-NEXT: vmov.32 d12[1], r5942; LE-I64-NEXT: vmov.32 d17[1], r0943; LE-I64-NEXT: add r0, r11, #64944; LE-I64-NEXT: vmov.32 d16[1], r1945; LE-I64-NEXT: vst1.64 {d10, d11}, [r0:128]!946; LE-I64-NEXT: vst1.64 {d16, d17}, [r0:128]!947; LE-I64-NEXT: vst1.64 {d18, d19}, [r0:128]!948; LE-I64-NEXT: vmov.32 d20[1], r9949; LE-I64-NEXT: vst1.64 {d12, d13}, [r0:128]950; LE-I64-NEXT: vst1.64 {d14, d15}, [r11:128]!951; LE-I64-NEXT: vst1.64 {d20, d21}, [r11:128]!952; LE-I64-NEXT: vldmia lr, {d16, d17} @ 16-byte Reload953; LE-I64-NEXT: add lr, sp, #56954; LE-I64-NEXT: vst1.64 {d16, d17}, [r11:128]!955; LE-I64-NEXT: vldmia lr, {d16, d17} @ 16-byte Reload956; LE-I64-NEXT: vst1.64 {d16, d17}, [r11:128]957; LE-I64-NEXT: add sp, sp, #120958; LE-I64-NEXT: vpop {d8, d9, d10, d11, d12, d13, d14, d15}959; LE-I64-NEXT: add sp, sp, #4960; LE-I64-NEXT: pop {r4, r5, r6, r7, r8, r9, r10, r11, pc}961;962; BE-I32-LABEL: lrint_v16f16:963; BE-I32: @ %bb.0:964; BE-I32-NEXT: .save {r4, r5, r6, r7, r8, r9, r10, lr}965; BE-I32-NEXT: push {r4, r5, r6, r7, r8, r9, r10, lr}966; BE-I32-NEXT: .vsave {d8, d9, d10, d11, d12, d13, d14, d15}967; BE-I32-NEXT: vpush {d8, d9, d10, d11, d12, d13, d14, d15}968; BE-I32-NEXT: .pad #16969; BE-I32-NEXT: sub sp, sp, #16970; BE-I32-NEXT: vmov r0, s1971; BE-I32-NEXT: vstr s14, [sp, #4] @ 4-byte Spill972; BE-I32-NEXT: vmov.f32 s30, s15973; BE-I32-NEXT: vstr s13, [sp, #12] @ 4-byte Spill974; BE-I32-NEXT: vmov.f32 s17, s12975; BE-I32-NEXT: vstr s10, [sp, #8] @ 4-byte Spill976; BE-I32-NEXT: vmov.f32 s19, s11977; BE-I32-NEXT: vstr s8, [sp] @ 4-byte Spill978; BE-I32-NEXT: vmov.f32 s21, s9979; BE-I32-NEXT: vmov.f32 s23, s7980; BE-I32-NEXT: vmov.f32 s24, s6981; BE-I32-NEXT: vmov.f32 s25, s5982; BE-I32-NEXT: vmov.f32 s26, s4983; BE-I32-NEXT: vmov.f32 s27, s3984; BE-I32-NEXT: vmov.f32 s28, s2985; BE-I32-NEXT: vmov.f32 s29, s0986; BE-I32-NEXT: bl __aeabi_h2f987; BE-I32-NEXT: vmov s0, r0988; BE-I32-NEXT: bl lrintf989; BE-I32-NEXT: mov r8, r0990; BE-I32-NEXT: vmov r0, s27991; BE-I32-NEXT: bl __aeabi_h2f992; BE-I32-NEXT: mov r9, r0993; BE-I32-NEXT: vmov r0, s25994; BE-I32-NEXT: bl __aeabi_h2f995; BE-I32-NEXT: mov r10, r0996; BE-I32-NEXT: vmov r0, s23997; BE-I32-NEXT: bl __aeabi_h2f998; BE-I32-NEXT: mov r7, r0999; BE-I32-NEXT: vmov r0, s211000; BE-I32-NEXT: bl __aeabi_h2f1001; BE-I32-NEXT: mov r4, r01002; BE-I32-NEXT: vmov r0, s191003; BE-I32-NEXT: bl __aeabi_h2f1004; BE-I32-NEXT: mov r5, r01005; BE-I32-NEXT: vmov r0, s301006; BE-I32-NEXT: bl __aeabi_h2f1007; BE-I32-NEXT: mov r6, r01008; BE-I32-NEXT: vmov r0, s171009; BE-I32-NEXT: bl __aeabi_h2f1010; BE-I32-NEXT: vmov s0, r01011; BE-I32-NEXT: bl lrintf1012; BE-I32-NEXT: vmov.32 d8[0], r01013; BE-I32-NEXT: vmov r0, s291014; BE-I32-NEXT: bl __aeabi_h2f1015; BE-I32-NEXT: vmov s0, r01016; BE-I32-NEXT: bl lrintf1017; BE-I32-NEXT: vmov.32 d10[0], r01018; BE-I32-NEXT: vmov r0, s281019; BE-I32-NEXT: bl __aeabi_h2f1020; BE-I32-NEXT: vmov s0, r01021; BE-I32-NEXT: bl lrintf1022; BE-I32-NEXT: vmov.32 d11[0], r01023; BE-I32-NEXT: vmov r0, s261024; BE-I32-NEXT: bl __aeabi_h2f1025; BE-I32-NEXT: vmov s0, r01026; BE-I32-NEXT: bl lrintf1027; BE-I32-NEXT: vmov.32 d14[0], r01028; BE-I32-NEXT: vmov r0, s241029; BE-I32-NEXT: bl __aeabi_h2f1030; BE-I32-NEXT: vmov s0, r01031; BE-I32-NEXT: bl lrintf1032; BE-I32-NEXT: vldr s0, [sp] @ 4-byte Reload1033; BE-I32-NEXT: vmov.32 d15[0], r01034; BE-I32-NEXT: vmov r0, s01035; BE-I32-NEXT: bl __aeabi_h2f1036; BE-I32-NEXT: vmov s0, r01037; BE-I32-NEXT: bl lrintf1038; BE-I32-NEXT: vldr s0, [sp, #4] @ 4-byte Reload1039; BE-I32-NEXT: vmov.32 d12[0], r01040; BE-I32-NEXT: vmov r0, s01041; BE-I32-NEXT: bl __aeabi_h2f1042; BE-I32-NEXT: vmov s0, r01043; BE-I32-NEXT: bl lrintf1044; BE-I32-NEXT: vldr s0, [sp, #8] @ 4-byte Reload1045; BE-I32-NEXT: vmov.32 d9[0], r01046; BE-I32-NEXT: vmov r0, s01047; BE-I32-NEXT: bl __aeabi_h2f1048; BE-I32-NEXT: vmov s0, r01049; BE-I32-NEXT: bl lrintf1050; BE-I32-NEXT: vmov s0, r61051; BE-I32-NEXT: vmov.32 d13[0], r01052; BE-I32-NEXT: bl lrintf1053; BE-I32-NEXT: vmov s0, r51054; BE-I32-NEXT: vmov.32 d9[1], r01055; BE-I32-NEXT: bl lrintf1056; BE-I32-NEXT: vmov s0, r41057; BE-I32-NEXT: vmov.32 d13[1], r01058; BE-I32-NEXT: bl lrintf1059; BE-I32-NEXT: vmov s0, r71060; BE-I32-NEXT: vmov.32 d12[1], r01061; BE-I32-NEXT: bl lrintf1062; BE-I32-NEXT: vmov s0, r101063; BE-I32-NEXT: vmov.32 d15[1], r01064; BE-I32-NEXT: bl lrintf1065; BE-I32-NEXT: vmov s0, r91066; BE-I32-NEXT: vmov.32 d14[1], r01067; BE-I32-NEXT: bl lrintf1068; BE-I32-NEXT: vldr s0, [sp, #12] @ 4-byte Reload1069; BE-I32-NEXT: vmov.32 d11[1], r01070; BE-I32-NEXT: vmov r0, s01071; BE-I32-NEXT: bl __aeabi_h2f1072; BE-I32-NEXT: vmov s0, r01073; BE-I32-NEXT: vmov.32 d10[1], r81074; BE-I32-NEXT: bl lrintf1075; BE-I32-NEXT: vmov.32 d8[1], r01076; BE-I32-NEXT: vrev64.32 q0, q51077; BE-I32-NEXT: vrev64.32 q1, q71078; BE-I32-NEXT: vrev64.32 q2, q61079; BE-I32-NEXT: vrev64.32 q3, q41080; BE-I32-NEXT: add sp, sp, #161081; BE-I32-NEXT: vpop {d8, d9, d10, d11, d12, d13, d14, d15}1082; BE-I32-NEXT: pop {r4, r5, r6, r7, r8, r9, r10, pc}1083;1084; BE-I64-LABEL: lrint_v16f16:1085; BE-I64: @ %bb.0:1086; BE-I64-NEXT: .save {r4, r5, r6, r7, r8, r9, r10, r11, lr}1087; BE-I64-NEXT: push {r4, r5, r6, r7, r8, r9, r10, r11, lr}1088; BE-I64-NEXT: .pad #41089; BE-I64-NEXT: sub sp, sp, #41090; BE-I64-NEXT: .vsave {d8, d9, d10, d11, d12, d13, d14, d15}1091; BE-I64-NEXT: vpush {d8, d9, d10, d11, d12, d13, d14, d15}1092; BE-I64-NEXT: .pad #1121093; BE-I64-NEXT: sub sp, sp, #1121094; BE-I64-NEXT: mov r11, r01095; BE-I64-NEXT: vmov r0, s141096; BE-I64-NEXT: vmov.f32 s17, s151097; BE-I64-NEXT: vstr s13, [sp, #52] @ 4-byte Spill1098; BE-I64-NEXT: vmov.f32 s21, s121099; BE-I64-NEXT: vstr s10, [sp, #68] @ 4-byte Spill1100; BE-I64-NEXT: vmov.f32 s23, s111101; BE-I64-NEXT: vstr s7, [sp, #72] @ 4-byte Spill1102; BE-I64-NEXT: vmov.f32 s19, s91103; BE-I64-NEXT: vstr s4, [sp, #28] @ 4-byte Spill1104; BE-I64-NEXT: vmov.f32 s26, s81105; BE-I64-NEXT: vmov.f32 s24, s61106; BE-I64-NEXT: vmov.f32 s18, s51107; BE-I64-NEXT: vmov.f32 s25, s31108; BE-I64-NEXT: vmov.f32 s16, s21109; BE-I64-NEXT: vmov.f32 s27, s11110; BE-I64-NEXT: vmov.f32 s29, s01111; BE-I64-NEXT: bl __aeabi_h2f1112; BE-I64-NEXT: vmov s0, r01113; BE-I64-NEXT: bl lrintf1114; BE-I64-NEXT: mov r8, r01115; BE-I64-NEXT: vmov r0, s291116; BE-I64-NEXT: mov r4, r11117; BE-I64-NEXT: bl __aeabi_h2f1118; BE-I64-NEXT: mov r9, r01119; BE-I64-NEXT: vmov r0, s271120; BE-I64-NEXT: bl __aeabi_h2f1121; BE-I64-NEXT: mov r7, r01122; BE-I64-NEXT: vmov r0, s211123; BE-I64-NEXT: bl __aeabi_h2f1124; BE-I64-NEXT: mov r6, r01125; BE-I64-NEXT: vmov r0, s251126; BE-I64-NEXT: bl __aeabi_h2f1127; BE-I64-NEXT: mov r5, r01128; BE-I64-NEXT: vmov r0, s231129; BE-I64-NEXT: bl __aeabi_h2f1130; BE-I64-NEXT: vmov s0, r01131; BE-I64-NEXT: bl lrintf1132; BE-I64-NEXT: vmov.32 d16[0], r01133; BE-I64-NEXT: vmov s0, r51134; BE-I64-NEXT: str r1, [sp, #108] @ 4-byte Spill1135; BE-I64-NEXT: vstr d16, [sp, #96] @ 8-byte Spill1136; BE-I64-NEXT: bl lrintf1137; BE-I64-NEXT: vmov.32 d16[0], r01138; BE-I64-NEXT: vmov s0, r61139; BE-I64-NEXT: str r1, [sp, #92] @ 4-byte Spill1140; BE-I64-NEXT: vstr d16, [sp, #80] @ 8-byte Spill1141; BE-I64-NEXT: bl lrintf1142; BE-I64-NEXT: vmov.32 d16[0], r01143; BE-I64-NEXT: vmov s0, r71144; BE-I64-NEXT: str r1, [sp, #76] @ 4-byte Spill1145; BE-I64-NEXT: vstr d16, [sp, #56] @ 8-byte Spill1146; BE-I64-NEXT: bl lrintf1147; BE-I64-NEXT: vmov s0, r91148; BE-I64-NEXT: mov r10, r11149; BE-I64-NEXT: vmov.32 d14[0], r01150; BE-I64-NEXT: bl lrintf1151; BE-I64-NEXT: vmov.32 d15[0], r01152; BE-I64-NEXT: vmov r0, s171153; BE-I64-NEXT: mov r5, r11154; BE-I64-NEXT: bl __aeabi_h2f1155; BE-I64-NEXT: vmov s0, r01156; BE-I64-NEXT: vmov.32 d10[0], r81157; BE-I64-NEXT: vmov r6, s191158; BE-I64-NEXT: bl lrintf1159; BE-I64-NEXT: vmov.32 d11[0], r01160; BE-I64-NEXT: mov r0, r61161; BE-I64-NEXT: mov r7, r11162; BE-I64-NEXT: bl __aeabi_h2f1163; BE-I64-NEXT: mov r6, r01164; BE-I64-NEXT: vmov r0, s181165; BE-I64-NEXT: vmov.32 d10[1], r41166; BE-I64-NEXT: vstr d10, [sp, #40] @ 8-byte Spill1167; BE-I64-NEXT: bl __aeabi_h2f1168; BE-I64-NEXT: mov r4, r01169; BE-I64-NEXT: vmov r0, s161170; BE-I64-NEXT: vmov.32 d11[1], r71171; BE-I64-NEXT: vstr d11, [sp, #32] @ 8-byte Spill1172; BE-I64-NEXT: bl __aeabi_h2f1173; BE-I64-NEXT: vmov.32 d15[1], r51174; BE-I64-NEXT: vmov s0, r01175; BE-I64-NEXT: vstr d15, [sp, #16] @ 8-byte Spill1176; BE-I64-NEXT: bl lrintf1177; BE-I64-NEXT: vldr s0, [sp, #28] @ 4-byte Reload1178; BE-I64-NEXT: vmov r5, s261179; BE-I64-NEXT: vmov.32 d16[0], r01180; BE-I64-NEXT: vmov s26, r41181; BE-I64-NEXT: vmov r0, s01182; BE-I64-NEXT: mov r8, r11183; BE-I64-NEXT: vmov.32 d14[1], r101184; BE-I64-NEXT: vmov r4, s241185; BE-I64-NEXT: vstr d16, [sp] @ 8-byte Spill1186; BE-I64-NEXT: vstr d14, [sp, #8] @ 8-byte Spill1187; BE-I64-NEXT: bl __aeabi_h2f1188; BE-I64-NEXT: vmov.f32 s0, s261189; BE-I64-NEXT: vmov s22, r01190; BE-I64-NEXT: bl lrintf1191; BE-I64-NEXT: vmov.f32 s0, s221192; BE-I64-NEXT: mov r7, r11193; BE-I64-NEXT: vmov.32 d13[0], r01194; BE-I64-NEXT: vmov s24, r61195; BE-I64-NEXT: bl lrintf1196; BE-I64-NEXT: vmov.32 d14[0], r01197; BE-I64-NEXT: mov r0, r41198; BE-I64-NEXT: mov r6, r11199; BE-I64-NEXT: bl __aeabi_h2f1200; BE-I64-NEXT: vmov.f32 s0, s241201; BE-I64-NEXT: vmov s22, r01202; BE-I64-NEXT: bl lrintf1203; BE-I64-NEXT: vmov.f32 s0, s221204; BE-I64-NEXT: mov r9, r11205; BE-I64-NEXT: vmov.32 d12[0], r01206; BE-I64-NEXT: vmov.32 d14[1], r61207; BE-I64-NEXT: bl lrintf1208; BE-I64-NEXT: vmov.32 d11[0], r01209; BE-I64-NEXT: mov r0, r51210; BE-I64-NEXT: mov r6, r11211; BE-I64-NEXT: bl __aeabi_h2f1212; BE-I64-NEXT: vldr s0, [sp, #52] @ 4-byte Reload1213; BE-I64-NEXT: mov r4, r01214; BE-I64-NEXT: vmov.32 d13[1], r71215; BE-I64-NEXT: vmov r0, s01216; BE-I64-NEXT: bl __aeabi_h2f1217; BE-I64-NEXT: vldr s0, [sp, #68] @ 4-byte Reload1218; BE-I64-NEXT: vmov s20, r01219; BE-I64-NEXT: vmov.32 d11[1], r61220; BE-I64-NEXT: vmov r7, s01221; BE-I64-NEXT: vldr s0, [sp, #72] @ 4-byte Reload1222; BE-I64-NEXT: vmov r0, s01223; BE-I64-NEXT: bl __aeabi_h2f1224; BE-I64-NEXT: vmov.f32 s0, s201225; BE-I64-NEXT: vmov s16, r01226; BE-I64-NEXT: bl lrintf1227; BE-I64-NEXT: vmov.f32 s0, s161228; BE-I64-NEXT: mov r5, r11229; BE-I64-NEXT: vmov.32 d10[0], r01230; BE-I64-NEXT: vmov s18, r41231; BE-I64-NEXT: bl lrintf1232; BE-I64-NEXT: vmov.32 d15[0], r01233; BE-I64-NEXT: mov r0, r71234; BE-I64-NEXT: mov r4, r11235; BE-I64-NEXT: bl __aeabi_h2f1236; BE-I64-NEXT: vmov.f32 s0, s181237; BE-I64-NEXT: vmov s16, r01238; BE-I64-NEXT: bl lrintf1239; BE-I64-NEXT: vmov.f32 s0, s161240; BE-I64-NEXT: mov r6, r11241; BE-I64-NEXT: vmov.32 d9[0], r01242; BE-I64-NEXT: vmov.32 d15[1], r41243; BE-I64-NEXT: bl lrintf1244; BE-I64-NEXT: vmov.32 d24[0], r01245; BE-I64-NEXT: ldr r0, [sp, #76] @ 4-byte Reload1246; BE-I64-NEXT: vldr d23, [sp, #56] @ 8-byte Reload1247; BE-I64-NEXT: vldr d20, [sp, #8] @ 8-byte Reload1248; BE-I64-NEXT: vmov.32 d23[1], r01249; BE-I64-NEXT: ldr r0, [sp, #92] @ 4-byte Reload1250; BE-I64-NEXT: vldr d22, [sp, #80] @ 8-byte Reload1251; BE-I64-NEXT: vldr d26, [sp, #16] @ 8-byte Reload1252; BE-I64-NEXT: vrev64.32 d21, d201253; BE-I64-NEXT: vmov.32 d22[1], r01254; BE-I64-NEXT: ldr r0, [sp, #108] @ 4-byte Reload1255; BE-I64-NEXT: vldr d30, [sp] @ 8-byte Reload1256; BE-I64-NEXT: vldr d25, [sp, #96] @ 8-byte Reload1257; BE-I64-NEXT: vrev64.32 d20, d261258; BE-I64-NEXT: vldr d26, [sp, #32] @ 8-byte Reload1259; BE-I64-NEXT: vmov.32 d10[1], r51260; BE-I64-NEXT: vmov.32 d12[1], r91261; BE-I64-NEXT: vldr d28, [sp, #40] @ 8-byte Reload1262; BE-I64-NEXT: vrev64.32 d27, d261263; BE-I64-NEXT: vmov.32 d25[1], r01264; BE-I64-NEXT: add r0, r11, #641265; BE-I64-NEXT: vmov.32 d30[1], r81266; BE-I64-NEXT: vmov.32 d9[1], r61267; BE-I64-NEXT: vrev64.32 d26, d281268; BE-I64-NEXT: vrev64.32 d29, d101269; BE-I64-NEXT: vmov.32 d24[1], r11270; BE-I64-NEXT: vrev64.32 d1, d121271; BE-I64-NEXT: vrev64.32 d28, d231272; BE-I64-NEXT: vrev64.32 d23, d221273; BE-I64-NEXT: vrev64.32 d22, d301274; BE-I64-NEXT: vrev64.32 d31, d251275; BE-I64-NEXT: vrev64.32 d0, d91276; BE-I64-NEXT: vrev64.32 d30, d241277; BE-I64-NEXT: vst1.64 {d0, d1}, [r0:128]!1278; BE-I64-NEXT: vst1.64 {d30, d31}, [r0:128]!1279; BE-I64-NEXT: vst1.64 {d28, d29}, [r0:128]!1280; BE-I64-NEXT: vrev64.32 d19, d131281; BE-I64-NEXT: vst1.64 {d26, d27}, [r0:128]1282; BE-I64-NEXT: vst1.64 {d20, d21}, [r11:128]!1283; BE-I64-NEXT: vrev64.32 d18, d141284; BE-I64-NEXT: vst1.64 {d22, d23}, [r11:128]!1285; BE-I64-NEXT: vrev64.32 d17, d151286; BE-I64-NEXT: vrev64.32 d16, d111287; BE-I64-NEXT: vst1.64 {d18, d19}, [r11:128]!1288; BE-I64-NEXT: vst1.64 {d16, d17}, [r11:128]1289; BE-I64-NEXT: add sp, sp, #1121290; BE-I64-NEXT: vpop {d8, d9, d10, d11, d12, d13, d14, d15}1291; BE-I64-NEXT: add sp, sp, #41292; BE-I64-NEXT: pop {r4, r5, r6, r7, r8, r9, r10, r11, pc}1293 %a = call <16 x iXLen> @llvm.lrint.v16iXLen.v16f16(<16 x half> %x)1294 ret <16 x iXLen> %a1295}1296 1297define <1 x iXLen> @lrint_v1f32(<1 x float> %x) {1298; LE-I32-LABEL: lrint_v1f32:1299; LE-I32: @ %bb.0:1300; LE-I32-NEXT: .save {r11, lr}1301; LE-I32-NEXT: push {r11, lr}1302; LE-I32-NEXT: bl lrintf1303; LE-I32-NEXT: pop {r11, pc}1304;1305; LE-I64-LABEL: lrint_v1f32:1306; LE-I64: @ %bb.0:1307; LE-I64-NEXT: .save {r11, lr}1308; LE-I64-NEXT: push {r11, lr}1309; LE-I64-NEXT: bl lrintf1310; LE-I64-NEXT: vmov.32 d0[0], r01311; LE-I64-NEXT: vmov.32 d0[1], r11312; LE-I64-NEXT: pop {r11, pc}1313;1314; BE-I32-LABEL: lrint_v1f32:1315; BE-I32: @ %bb.0:1316; BE-I32-NEXT: .save {r11, lr}1317; BE-I32-NEXT: push {r11, lr}1318; BE-I32-NEXT: bl lrintf1319; BE-I32-NEXT: pop {r11, pc}1320;1321; BE-I64-LABEL: lrint_v1f32:1322; BE-I64: @ %bb.0:1323; BE-I64-NEXT: .save {r11, lr}1324; BE-I64-NEXT: push {r11, lr}1325; BE-I64-NEXT: bl lrintf1326; BE-I64-NEXT: vmov.32 d16[0], r01327; BE-I64-NEXT: vmov.32 d16[1], r11328; BE-I64-NEXT: vrev64.32 d0, d161329; BE-I64-NEXT: pop {r11, pc}1330 %a = call <1 x iXLen> @llvm.lrint.v1iXLen.v1f32(<1 x float> %x)1331 ret <1 x iXLen> %a1332}1333 1334define <2 x iXLen> @lrint_v2f32(<2 x float> %x) {1335; LE-I32-LABEL: lrint_v2f32:1336; LE-I32: @ %bb.0:1337; LE-I32-NEXT: .save {r11, lr}1338; LE-I32-NEXT: push {r11, lr}1339; LE-I32-NEXT: .vsave {d8, d9}1340; LE-I32-NEXT: vpush {d8, d9}1341; LE-I32-NEXT: vmov.f64 d8, d01342; LE-I32-NEXT: bl lrintf1343; LE-I32-NEXT: vmov.f32 s0, s171344; LE-I32-NEXT: vmov.32 d9[0], r01345; LE-I32-NEXT: bl lrintf1346; LE-I32-NEXT: vmov.32 d9[1], r01347; LE-I32-NEXT: vorr d0, d9, d91348; LE-I32-NEXT: vpop {d8, d9}1349; LE-I32-NEXT: pop {r11, pc}1350;1351; LE-I64-LABEL: lrint_v2f32:1352; LE-I64: @ %bb.0:1353; LE-I64-NEXT: .save {r4, lr}1354; LE-I64-NEXT: push {r4, lr}1355; LE-I64-NEXT: .vsave {d10, d11}1356; LE-I64-NEXT: vpush {d10, d11}1357; LE-I64-NEXT: .vsave {d8}1358; LE-I64-NEXT: vpush {d8}1359; LE-I64-NEXT: vmov.f64 d8, d01360; LE-I64-NEXT: vmov.f32 s0, s171361; LE-I64-NEXT: bl lrintf1362; LE-I64-NEXT: vmov.f32 s0, s161363; LE-I64-NEXT: mov r4, r11364; LE-I64-NEXT: vmov.32 d11[0], r01365; LE-I64-NEXT: bl lrintf1366; LE-I64-NEXT: vmov.32 d10[0], r01367; LE-I64-NEXT: vmov.32 d11[1], r41368; LE-I64-NEXT: vmov.32 d10[1], r11369; LE-I64-NEXT: vorr q0, q5, q51370; LE-I64-NEXT: vpop {d8}1371; LE-I64-NEXT: vpop {d10, d11}1372; LE-I64-NEXT: pop {r4, pc}1373;1374; BE-I32-LABEL: lrint_v2f32:1375; BE-I32: @ %bb.0:1376; BE-I32-NEXT: .save {r11, lr}1377; BE-I32-NEXT: push {r11, lr}1378; BE-I32-NEXT: .vsave {d8, d9}1379; BE-I32-NEXT: vpush {d8, d9}1380; BE-I32-NEXT: vrev64.32 d8, d01381; BE-I32-NEXT: vmov.f32 s0, s161382; BE-I32-NEXT: bl lrintf1383; BE-I32-NEXT: vmov.f32 s0, s171384; BE-I32-NEXT: vmov.32 d9[0], r01385; BE-I32-NEXT: bl lrintf1386; BE-I32-NEXT: vmov.32 d9[1], r01387; BE-I32-NEXT: vrev64.32 d0, d91388; BE-I32-NEXT: vpop {d8, d9}1389; BE-I32-NEXT: pop {r11, pc}1390;1391; BE-I64-LABEL: lrint_v2f32:1392; BE-I64: @ %bb.0:1393; BE-I64-NEXT: .save {r4, lr}1394; BE-I64-NEXT: push {r4, lr}1395; BE-I64-NEXT: .vsave {d10, d11}1396; BE-I64-NEXT: vpush {d10, d11}1397; BE-I64-NEXT: .vsave {d8}1398; BE-I64-NEXT: vpush {d8}1399; BE-I64-NEXT: vrev64.32 d8, d01400; BE-I64-NEXT: vmov.f32 s0, s171401; BE-I64-NEXT: bl lrintf1402; BE-I64-NEXT: vmov.f32 s0, s161403; BE-I64-NEXT: mov r4, r11404; BE-I64-NEXT: vmov.32 d11[0], r01405; BE-I64-NEXT: bl lrintf1406; BE-I64-NEXT: vmov.32 d10[0], r01407; BE-I64-NEXT: vmov.32 d11[1], r41408; BE-I64-NEXT: vmov.32 d10[1], r11409; BE-I64-NEXT: vrev64.32 q0, q51410; BE-I64-NEXT: vpop {d8}1411; BE-I64-NEXT: vpop {d10, d11}1412; BE-I64-NEXT: pop {r4, pc}1413 %a = call <2 x iXLen> @llvm.lrint.v2iXLen.v2f32(<2 x float> %x)1414 ret <2 x iXLen> %a1415}1416 1417define <4 x iXLen> @lrint_v4f32(<4 x float> %x) {1418; LE-I32-LABEL: lrint_v4f32:1419; LE-I32: @ %bb.0:1420; LE-I32-NEXT: .save {r11, lr}1421; LE-I32-NEXT: push {r11, lr}1422; LE-I32-NEXT: .vsave {d8, d9, d10, d11}1423; LE-I32-NEXT: vpush {d8, d9, d10, d11}1424; LE-I32-NEXT: vorr q4, q0, q01425; LE-I32-NEXT: vmov.f32 s0, s181426; LE-I32-NEXT: bl lrintf1427; LE-I32-NEXT: vmov.f32 s0, s161428; LE-I32-NEXT: vmov.32 d11[0], r01429; LE-I32-NEXT: bl lrintf1430; LE-I32-NEXT: vmov.f32 s0, s191431; LE-I32-NEXT: vmov.32 d10[0], r01432; LE-I32-NEXT: bl lrintf1433; LE-I32-NEXT: vmov.f32 s0, s171434; LE-I32-NEXT: vmov.32 d11[1], r01435; LE-I32-NEXT: bl lrintf1436; LE-I32-NEXT: vmov.32 d10[1], r01437; LE-I32-NEXT: vorr q0, q5, q51438; LE-I32-NEXT: vpop {d8, d9, d10, d11}1439; LE-I32-NEXT: pop {r11, pc}1440;1441; LE-I64-LABEL: lrint_v4f32:1442; LE-I64: @ %bb.0:1443; LE-I64-NEXT: .save {r4, r5, r6, lr}1444; LE-I64-NEXT: push {r4, r5, r6, lr}1445; LE-I64-NEXT: .vsave {d8, d9, d10, d11, d12, d13}1446; LE-I64-NEXT: vpush {d8, d9, d10, d11, d12, d13}1447; LE-I64-NEXT: vorr q5, q0, q01448; LE-I64-NEXT: vmov.f32 s0, s231449; LE-I64-NEXT: bl lrintf1450; LE-I64-NEXT: vmov.f32 s0, s201451; LE-I64-NEXT: mov r4, r11452; LE-I64-NEXT: vmov.32 d9[0], r01453; LE-I64-NEXT: bl lrintf1454; LE-I64-NEXT: vmov.f32 s0, s211455; LE-I64-NEXT: mov r5, r11456; LE-I64-NEXT: vmov.32 d12[0], r01457; LE-I64-NEXT: bl lrintf1458; LE-I64-NEXT: vmov.f32 s0, s221459; LE-I64-NEXT: mov r6, r11460; LE-I64-NEXT: vmov.32 d13[0], r01461; LE-I64-NEXT: bl lrintf1462; LE-I64-NEXT: vmov.32 d8[0], r01463; LE-I64-NEXT: vmov.32 d13[1], r61464; LE-I64-NEXT: vmov.32 d9[1], r41465; LE-I64-NEXT: vmov.32 d12[1], r51466; LE-I64-NEXT: vmov.32 d8[1], r11467; LE-I64-NEXT: vorr q0, q6, q61468; LE-I64-NEXT: vorr q1, q4, q41469; LE-I64-NEXT: vpop {d8, d9, d10, d11, d12, d13}1470; LE-I64-NEXT: pop {r4, r5, r6, pc}1471;1472; BE-I32-LABEL: lrint_v4f32:1473; BE-I32: @ %bb.0:1474; BE-I32-NEXT: .save {r11, lr}1475; BE-I32-NEXT: push {r11, lr}1476; BE-I32-NEXT: .vsave {d8, d9, d10, d11}1477; BE-I32-NEXT: vpush {d8, d9, d10, d11}1478; BE-I32-NEXT: vrev64.32 q4, q01479; BE-I32-NEXT: vmov.f32 s0, s181480; BE-I32-NEXT: bl lrintf1481; BE-I32-NEXT: vmov.f32 s0, s161482; BE-I32-NEXT: vmov.32 d11[0], r01483; BE-I32-NEXT: bl lrintf1484; BE-I32-NEXT: vmov.f32 s0, s191485; BE-I32-NEXT: vmov.32 d10[0], r01486; BE-I32-NEXT: bl lrintf1487; BE-I32-NEXT: vmov.f32 s0, s171488; BE-I32-NEXT: vmov.32 d11[1], r01489; BE-I32-NEXT: bl lrintf1490; BE-I32-NEXT: vmov.32 d10[1], r01491; BE-I32-NEXT: vrev64.32 q0, q51492; BE-I32-NEXT: vpop {d8, d9, d10, d11}1493; BE-I32-NEXT: pop {r11, pc}1494;1495; BE-I64-LABEL: lrint_v4f32:1496; BE-I64: @ %bb.0:1497; BE-I64-NEXT: .save {r4, r5, r6, lr}1498; BE-I64-NEXT: push {r4, r5, r6, lr}1499; BE-I64-NEXT: .vsave {d8, d9, d10, d11, d12, d13}1500; BE-I64-NEXT: vpush {d8, d9, d10, d11, d12, d13}1501; BE-I64-NEXT: vrev64.32 d8, d11502; BE-I64-NEXT: vrev64.32 d9, d01503; BE-I64-NEXT: vmov.f32 s0, s171504; BE-I64-NEXT: bl lrintf1505; BE-I64-NEXT: vmov.f32 s0, s181506; BE-I64-NEXT: mov r4, r11507; BE-I64-NEXT: vmov.32 d11[0], r01508; BE-I64-NEXT: bl lrintf1509; BE-I64-NEXT: vmov.f32 s0, s191510; BE-I64-NEXT: mov r5, r11511; BE-I64-NEXT: vmov.32 d12[0], r01512; BE-I64-NEXT: bl lrintf1513; BE-I64-NEXT: vmov.f32 s0, s161514; BE-I64-NEXT: mov r6, r11515; BE-I64-NEXT: vmov.32 d13[0], r01516; BE-I64-NEXT: bl lrintf1517; BE-I64-NEXT: vmov.32 d10[0], r01518; BE-I64-NEXT: vmov.32 d13[1], r61519; BE-I64-NEXT: vmov.32 d11[1], r41520; BE-I64-NEXT: vmov.32 d12[1], r51521; BE-I64-NEXT: vmov.32 d10[1], r11522; BE-I64-NEXT: vrev64.32 q0, q61523; BE-I64-NEXT: vrev64.32 q1, q51524; BE-I64-NEXT: vpop {d8, d9, d10, d11, d12, d13}1525; BE-I64-NEXT: pop {r4, r5, r6, pc}1526 %a = call <4 x iXLen> @llvm.lrint.v4iXLen.v4f32(<4 x float> %x)1527 ret <4 x iXLen> %a1528}1529 1530define <8 x iXLen> @lrint_v8f32(<8 x float> %x) {1531; LE-I32-LABEL: lrint_v8f32:1532; LE-I32: @ %bb.0:1533; LE-I32-NEXT: .save {r11, lr}1534; LE-I32-NEXT: push {r11, lr}1535; LE-I32-NEXT: .vsave {d8, d9, d10, d11, d12, d13, d14, d15}1536; LE-I32-NEXT: vpush {d8, d9, d10, d11, d12, d13, d14, d15}1537; LE-I32-NEXT: vorr q5, q1, q11538; LE-I32-NEXT: vorr q7, q0, q01539; LE-I32-NEXT: vmov.f32 s0, s201540; LE-I32-NEXT: bl lrintf1541; LE-I32-NEXT: vmov.f32 s0, s221542; LE-I32-NEXT: vmov.32 d8[0], r01543; LE-I32-NEXT: bl lrintf1544; LE-I32-NEXT: vmov.f32 s0, s301545; LE-I32-NEXT: vmov.32 d9[0], r01546; LE-I32-NEXT: bl lrintf1547; LE-I32-NEXT: vmov.f32 s0, s281548; LE-I32-NEXT: vmov.32 d13[0], r01549; LE-I32-NEXT: bl lrintf1550; LE-I32-NEXT: vmov.f32 s0, s311551; LE-I32-NEXT: vmov.32 d12[0], r01552; LE-I32-NEXT: bl lrintf1553; LE-I32-NEXT: vmov.f32 s0, s291554; LE-I32-NEXT: vmov.32 d13[1], r01555; LE-I32-NEXT: bl lrintf1556; LE-I32-NEXT: vmov.f32 s0, s231557; LE-I32-NEXT: vmov.32 d12[1], r01558; LE-I32-NEXT: bl lrintf1559; LE-I32-NEXT: vmov.f32 s0, s211560; LE-I32-NEXT: vmov.32 d9[1], r01561; LE-I32-NEXT: bl lrintf1562; LE-I32-NEXT: vmov.32 d8[1], r01563; LE-I32-NEXT: vorr q0, q6, q61564; LE-I32-NEXT: vorr q1, q4, q41565; LE-I32-NEXT: vpop {d8, d9, d10, d11, d12, d13, d14, d15}1566; LE-I32-NEXT: pop {r11, pc}1567;1568; LE-I64-LABEL: lrint_v8f32:1569; LE-I64: @ %bb.0:1570; LE-I64-NEXT: .save {r4, r5, r6, r7, r8, r9, r10, lr}1571; LE-I64-NEXT: push {r4, r5, r6, r7, r8, r9, r10, lr}1572; LE-I64-NEXT: .vsave {d8, d9, d10, d11, d12, d13, d14, d15}1573; LE-I64-NEXT: vpush {d8, d9, d10, d11, d12, d13, d14, d15}1574; LE-I64-NEXT: .pad #401575; LE-I64-NEXT: sub sp, sp, #401576; LE-I64-NEXT: vorr q6, q1, q11577; LE-I64-NEXT: add lr, sp, #241578; LE-I64-NEXT: vorr q7, q0, q01579; LE-I64-NEXT: vstmia lr, {d2, d3} @ 16-byte Spill1580; LE-I64-NEXT: vmov.f32 s0, s271581; LE-I64-NEXT: bl lrintf1582; LE-I64-NEXT: vmov.f32 s0, s241583; LE-I64-NEXT: mov r8, r11584; LE-I64-NEXT: vmov.32 d9[0], r01585; LE-I64-NEXT: bl lrintf1586; LE-I64-NEXT: vmov.f32 s0, s251587; LE-I64-NEXT: mov r9, r11588; LE-I64-NEXT: vmov.32 d10[0], r01589; LE-I64-NEXT: bl lrintf1590; LE-I64-NEXT: vorr q6, q7, q71591; LE-I64-NEXT: add lr, sp, #81592; LE-I64-NEXT: mov r10, r11593; LE-I64-NEXT: vmov.32 d11[0], r01594; LE-I64-NEXT: vmov.f32 s0, s261595; LE-I64-NEXT: vstmia lr, {d14, d15} @ 16-byte Spill1596; LE-I64-NEXT: bl lrintf1597; LE-I64-NEXT: vmov.f32 s0, s271598; LE-I64-NEXT: mov r7, r11599; LE-I64-NEXT: vmov.32 d14[0], r01600; LE-I64-NEXT: bl lrintf1601; LE-I64-NEXT: vmov.f32 s0, s241602; LE-I64-NEXT: mov r4, r11603; LE-I64-NEXT: vmov.32 d15[0], r01604; LE-I64-NEXT: bl lrintf1605; LE-I64-NEXT: add lr, sp, #81606; LE-I64-NEXT: mov r5, r11607; LE-I64-NEXT: vmov.32 d12[0], r01608; LE-I64-NEXT: vldmia lr, {d0, d1} @ 16-byte Reload1609; LE-I64-NEXT: vmov.f32 s0, s11610; LE-I64-NEXT: bl lrintf1611; LE-I64-NEXT: add lr, sp, #241612; LE-I64-NEXT: mov r6, r11613; LE-I64-NEXT: vmov.32 d13[0], r01614; LE-I64-NEXT: vldmia lr, {d0, d1} @ 16-byte Reload1615; LE-I64-NEXT: vmov.f32 s0, s21616; LE-I64-NEXT: bl lrintf1617; LE-I64-NEXT: vmov.32 d8[0], r01618; LE-I64-NEXT: vmov.32 d13[1], r61619; LE-I64-NEXT: vmov.32 d15[1], r41620; LE-I64-NEXT: vmov.32 d11[1], r101621; LE-I64-NEXT: vmov.32 d9[1], r81622; LE-I64-NEXT: vmov.32 d12[1], r51623; LE-I64-NEXT: vmov.32 d14[1], r71624; LE-I64-NEXT: vorr q0, q6, q61625; LE-I64-NEXT: vmov.32 d10[1], r91626; LE-I64-NEXT: vorr q1, q7, q71627; LE-I64-NEXT: vmov.32 d8[1], r11628; LE-I64-NEXT: vorr q2, q5, q51629; LE-I64-NEXT: vorr q3, q4, q41630; LE-I64-NEXT: add sp, sp, #401631; LE-I64-NEXT: vpop {d8, d9, d10, d11, d12, d13, d14, d15}1632; LE-I64-NEXT: pop {r4, r5, r6, r7, r8, r9, r10, pc}1633;1634; BE-I32-LABEL: lrint_v8f32:1635; BE-I32: @ %bb.0:1636; BE-I32-NEXT: .save {r11, lr}1637; BE-I32-NEXT: push {r11, lr}1638; BE-I32-NEXT: .vsave {d8, d9, d10, d11, d12, d13, d14, d15}1639; BE-I32-NEXT: vpush {d8, d9, d10, d11, d12, d13, d14, d15}1640; BE-I32-NEXT: vrev64.32 q4, q11641; BE-I32-NEXT: vrev64.32 q5, q01642; BE-I32-NEXT: vmov.f32 s0, s161643; BE-I32-NEXT: bl lrintf1644; BE-I32-NEXT: vmov.f32 s0, s201645; BE-I32-NEXT: vmov.32 d12[0], r01646; BE-I32-NEXT: bl lrintf1647; BE-I32-NEXT: vmov.f32 s0, s181648; BE-I32-NEXT: vmov.32 d14[0], r01649; BE-I32-NEXT: bl lrintf1650; BE-I32-NEXT: vmov.f32 s0, s221651; BE-I32-NEXT: vmov.32 d13[0], r01652; BE-I32-NEXT: bl lrintf1653; BE-I32-NEXT: vmov.f32 s0, s191654; BE-I32-NEXT: vmov.32 d15[0], r01655; BE-I32-NEXT: bl lrintf1656; BE-I32-NEXT: vmov.f32 s0, s231657; BE-I32-NEXT: vmov.32 d13[1], r01658; BE-I32-NEXT: bl lrintf1659; BE-I32-NEXT: vmov.f32 s0, s211660; BE-I32-NEXT: vmov.32 d15[1], r01661; BE-I32-NEXT: bl lrintf1662; BE-I32-NEXT: vmov.f32 s0, s171663; BE-I32-NEXT: vmov.32 d14[1], r01664; BE-I32-NEXT: bl lrintf1665; BE-I32-NEXT: vmov.32 d12[1], r01666; BE-I32-NEXT: vrev64.32 q0, q71667; BE-I32-NEXT: vrev64.32 q1, q61668; BE-I32-NEXT: vpop {d8, d9, d10, d11, d12, d13, d14, d15}1669; BE-I32-NEXT: pop {r11, pc}1670;1671; BE-I64-LABEL: lrint_v8f32:1672; BE-I64: @ %bb.0:1673; BE-I64-NEXT: .save {r4, r5, r6, r7, r8, r9, r10, lr}1674; BE-I64-NEXT: push {r4, r5, r6, r7, r8, r9, r10, lr}1675; BE-I64-NEXT: .vsave {d8, d9, d10, d11, d12, d13, d14, d15}1676; BE-I64-NEXT: vpush {d8, d9, d10, d11, d12, d13, d14, d15}1677; BE-I64-NEXT: .pad #321678; BE-I64-NEXT: sub sp, sp, #321679; BE-I64-NEXT: vorr q4, q1, q11680; BE-I64-NEXT: add lr, sp, #81681; BE-I64-NEXT: vorr q5, q0, q01682; BE-I64-NEXT: vstmia lr, {d0, d1} @ 16-byte Spill1683; BE-I64-NEXT: vrev64.32 d12, d81684; BE-I64-NEXT: vmov.f32 s0, s251685; BE-I64-NEXT: bl lrintf1686; BE-I64-NEXT: vmov.f32 s0, s241687; BE-I64-NEXT: mov r8, r11688; BE-I64-NEXT: vmov.32 d15[0], r01689; BE-I64-NEXT: bl lrintf1690; BE-I64-NEXT: vrev64.32 d0, d111691; BE-I64-NEXT: mov r9, r11692; BE-I64-NEXT: vrev64.32 d8, d91693; BE-I64-NEXT: vorr d9, d0, d01694; BE-I64-NEXT: vmov.32 d14[0], r01695; BE-I64-NEXT: vstr d8, [sp, #24] @ 8-byte Spill1696; BE-I64-NEXT: bl lrintf1697; BE-I64-NEXT: vmov.f32 s0, s171698; BE-I64-NEXT: mov r10, r11699; BE-I64-NEXT: vmov.32 d10[0], r01700; BE-I64-NEXT: bl lrintf1701; BE-I64-NEXT: add lr, sp, #81702; BE-I64-NEXT: vmov.f32 s0, s191703; BE-I64-NEXT: mov r7, r11704; BE-I64-NEXT: vmov.32 d13[0], r01705; BE-I64-NEXT: vldmia lr, {d16, d17} @ 16-byte Reload1706; BE-I64-NEXT: vrev64.32 d8, d161707; BE-I64-NEXT: vstr d8, [sp, #8] @ 8-byte Spill1708; BE-I64-NEXT: bl lrintf1709; BE-I64-NEXT: vmov.f32 s0, s161710; BE-I64-NEXT: mov r4, r11711; BE-I64-NEXT: vmov.32 d11[0], r01712; BE-I64-NEXT: bl lrintf1713; BE-I64-NEXT: vldr d0, [sp, #8] @ 8-byte Reload1714; BE-I64-NEXT: mov r5, r11715; BE-I64-NEXT: vmov.32 d8[0], r01716; BE-I64-NEXT: vmov.f32 s0, s11717; BE-I64-NEXT: bl lrintf1718; BE-I64-NEXT: vldr d0, [sp, #24] @ 8-byte Reload1719; BE-I64-NEXT: mov r6, r11720; BE-I64-NEXT: @ kill: def $s0 killed $s0 killed $d01721; BE-I64-NEXT: vmov.32 d9[0], r01722; BE-I64-NEXT: bl lrintf1723; BE-I64-NEXT: vmov.32 d12[0], r01724; BE-I64-NEXT: vmov.32 d9[1], r61725; BE-I64-NEXT: vmov.32 d11[1], r41726; BE-I64-NEXT: vmov.32 d15[1], r81727; BE-I64-NEXT: vmov.32 d13[1], r71728; BE-I64-NEXT: vmov.32 d8[1], r51729; BE-I64-NEXT: vmov.32 d10[1], r101730; BE-I64-NEXT: vmov.32 d14[1], r91731; BE-I64-NEXT: vmov.32 d12[1], r11732; BE-I64-NEXT: vrev64.32 q0, q41733; BE-I64-NEXT: vrev64.32 q1, q51734; BE-I64-NEXT: vrev64.32 q2, q71735; BE-I64-NEXT: vrev64.32 q3, q61736; BE-I64-NEXT: add sp, sp, #321737; BE-I64-NEXT: vpop {d8, d9, d10, d11, d12, d13, d14, d15}1738; BE-I64-NEXT: pop {r4, r5, r6, r7, r8, r9, r10, pc}1739 %a = call <8 x iXLen> @llvm.lrint.v8iXLen.v8f32(<8 x float> %x)1740 ret <8 x iXLen> %a1741}1742 1743define <16 x iXLen> @lrint_v16f32(<16 x float> %x) {1744; LE-I32-LABEL: lrint_v16f32:1745; LE-I32: @ %bb.0:1746; LE-I32-NEXT: .save {r11, lr}1747; LE-I32-NEXT: push {r11, lr}1748; LE-I32-NEXT: .vsave {d8, d9, d10, d11, d12, d13, d14, d15}1749; LE-I32-NEXT: vpush {d8, d9, d10, d11, d12, d13, d14, d15}1750; LE-I32-NEXT: .pad #801751; LE-I32-NEXT: sub sp, sp, #801752; LE-I32-NEXT: vorr q5, q3, q31753; LE-I32-NEXT: vstmia sp, {d0, d1} @ 16-byte Spill1754; LE-I32-NEXT: add lr, sp, #321755; LE-I32-NEXT: vorr q6, q2, q21756; LE-I32-NEXT: vorr q7, q1, q11757; LE-I32-NEXT: vmov.f32 s0, s201758; LE-I32-NEXT: vstmia lr, {d6, d7} @ 16-byte Spill1759; LE-I32-NEXT: bl lrintf1760; LE-I32-NEXT: vmov.f32 s0, s221761; LE-I32-NEXT: vmov.32 d8[0], r01762; LE-I32-NEXT: bl lrintf1763; LE-I32-NEXT: vmov.f32 s0, s241764; LE-I32-NEXT: add lr, sp, #481765; LE-I32-NEXT: vmov.32 d9[0], r01766; LE-I32-NEXT: vstmia lr, {d8, d9} @ 16-byte Spill1767; LE-I32-NEXT: add lr, sp, #161768; LE-I32-NEXT: vstmia lr, {d12, d13} @ 16-byte Spill1769; LE-I32-NEXT: bl lrintf1770; LE-I32-NEXT: vmov.f32 s0, s261771; LE-I32-NEXT: vmov.32 d8[0], r01772; LE-I32-NEXT: bl lrintf1773; LE-I32-NEXT: add lr, sp, #641774; LE-I32-NEXT: vmov.32 d9[0], r01775; LE-I32-NEXT: vstmia lr, {d8, d9} @ 16-byte Spill1776; LE-I32-NEXT: vorr q4, q7, q71777; LE-I32-NEXT: vmov.f32 s0, s161778; LE-I32-NEXT: bl lrintf1779; LE-I32-NEXT: vmov.f32 s0, s181780; LE-I32-NEXT: vmov.32 d10[0], r01781; LE-I32-NEXT: bl lrintf1782; LE-I32-NEXT: vldmia sp, {d12, d13} @ 16-byte Reload1783; LE-I32-NEXT: vmov.f32 s0, s261784; LE-I32-NEXT: vmov.32 d11[0], r01785; LE-I32-NEXT: bl lrintf1786; LE-I32-NEXT: vmov.f32 s0, s241787; LE-I32-NEXT: vmov.32 d15[0], r01788; LE-I32-NEXT: bl lrintf1789; LE-I32-NEXT: vmov.f32 s0, s271790; LE-I32-NEXT: vmov.32 d14[0], r01791; LE-I32-NEXT: bl lrintf1792; LE-I32-NEXT: vmov.f32 s0, s251793; LE-I32-NEXT: vmov.32 d15[1], r01794; LE-I32-NEXT: bl lrintf1795; LE-I32-NEXT: vmov.f32 s0, s191796; LE-I32-NEXT: vmov.32 d14[1], r01797; LE-I32-NEXT: bl lrintf1798; LE-I32-NEXT: vmov.f32 s0, s171799; LE-I32-NEXT: vmov.32 d11[1], r01800; LE-I32-NEXT: bl lrintf1801; LE-I32-NEXT: add lr, sp, #161802; LE-I32-NEXT: vmov.32 d10[1], r01803; LE-I32-NEXT: vldmia lr, {d12, d13} @ 16-byte Reload1804; LE-I32-NEXT: vmov.f32 s0, s271805; LE-I32-NEXT: bl lrintf1806; LE-I32-NEXT: vmov.f32 s0, s251807; LE-I32-NEXT: add lr, sp, #641808; LE-I32-NEXT: vldmia lr, {d8, d9} @ 16-byte Reload1809; LE-I32-NEXT: vmov.32 d9[1], r01810; LE-I32-NEXT: bl lrintf1811; LE-I32-NEXT: vmov.32 d8[1], r01812; LE-I32-NEXT: add lr, sp, #641813; LE-I32-NEXT: vstmia lr, {d8, d9} @ 16-byte Spill1814; LE-I32-NEXT: add lr, sp, #321815; LE-I32-NEXT: vldmia lr, {d8, d9} @ 16-byte Reload1816; LE-I32-NEXT: vmov.f32 s0, s191817; LE-I32-NEXT: bl lrintf1818; LE-I32-NEXT: vmov.f32 s0, s171819; LE-I32-NEXT: add lr, sp, #481820; LE-I32-NEXT: vldmia lr, {d12, d13} @ 16-byte Reload1821; LE-I32-NEXT: vmov.32 d13[1], r01822; LE-I32-NEXT: bl lrintf1823; LE-I32-NEXT: add lr, sp, #641824; LE-I32-NEXT: vmov.32 d12[1], r01825; LE-I32-NEXT: vorr q0, q7, q71826; LE-I32-NEXT: vldmia lr, {d4, d5} @ 16-byte Reload1827; LE-I32-NEXT: vorr q1, q5, q51828; LE-I32-NEXT: vorr q3, q6, q61829; LE-I32-NEXT: add sp, sp, #801830; LE-I32-NEXT: vpop {d8, d9, d10, d11, d12, d13, d14, d15}1831; LE-I32-NEXT: pop {r11, pc}1832;1833; LE-I64-LABEL: lrint_v16f32:1834; LE-I64: @ %bb.0:1835; LE-I64-NEXT: .save {r4, r5, r6, r7, r8, r9, r10, r11, lr}1836; LE-I64-NEXT: push {r4, r5, r6, r7, r8, r9, r10, r11, lr}1837; LE-I64-NEXT: .pad #41838; LE-I64-NEXT: sub sp, sp, #41839; LE-I64-NEXT: .vsave {d8, d9, d10, d11, d12, d13, d14, d15}1840; LE-I64-NEXT: vpush {d8, d9, d10, d11, d12, d13, d14, d15}1841; LE-I64-NEXT: .pad #1601842; LE-I64-NEXT: sub sp, sp, #1601843; LE-I64-NEXT: add lr, sp, #1121844; LE-I64-NEXT: vorr q5, q3, q31845; LE-I64-NEXT: vorr q6, q0, q01846; LE-I64-NEXT: mov r4, r01847; LE-I64-NEXT: vstmia lr, {d4, d5} @ 16-byte Spill1848; LE-I64-NEXT: add lr, sp, #481849; LE-I64-NEXT: vorr q7, q1, q11850; LE-I64-NEXT: vstmia lr, {d0, d1} @ 16-byte Spill1851; LE-I64-NEXT: vmov.f32 s0, s231852; LE-I64-NEXT: bl lrintf1853; LE-I64-NEXT: vmov.f32 s0, s241854; LE-I64-NEXT: add lr, sp, #1441855; LE-I64-NEXT: vmov.32 d17[0], r01856; LE-I64-NEXT: str r1, [sp, #108] @ 4-byte Spill1857; LE-I64-NEXT: vstmia lr, {d16, d17} @ 16-byte Spill1858; LE-I64-NEXT: bl lrintf1859; LE-I64-NEXT: vmov.f32 s0, s251860; LE-I64-NEXT: str r1, [sp, #84] @ 4-byte Spill1861; LE-I64-NEXT: vmov.32 d8[0], r01862; LE-I64-NEXT: bl lrintf1863; LE-I64-NEXT: vmov.f32 s0, s281864; LE-I64-NEXT: add lr, sp, #1281865; LE-I64-NEXT: vmov.32 d9[0], r01866; LE-I64-NEXT: str r1, [sp, #44] @ 4-byte Spill1867; LE-I64-NEXT: vstmia lr, {d8, d9} @ 16-byte Spill1868; LE-I64-NEXT: bl lrintf1869; LE-I64-NEXT: vmov.f32 s0, s291870; LE-I64-NEXT: mov r9, r11871; LE-I64-NEXT: vmov.32 d8[0], r01872; LE-I64-NEXT: bl lrintf1873; LE-I64-NEXT: vmov.f32 s0, s301874; LE-I64-NEXT: mov r6, r11875; LE-I64-NEXT: vmov.32 d9[0], r01876; LE-I64-NEXT: bl lrintf1877; LE-I64-NEXT: vmov.f32 s0, s311878; LE-I64-NEXT: mov r5, r11879; LE-I64-NEXT: vmov.32 d12[0], r01880; LE-I64-NEXT: bl lrintf1881; LE-I64-NEXT: add lr, sp, #1121882; LE-I64-NEXT: mov r7, r11883; LE-I64-NEXT: vmov.32 d13[0], r01884; LE-I64-NEXT: vldmia lr, {d14, d15} @ 16-byte Reload1885; LE-I64-NEXT: vmov.f32 s0, s291886; LE-I64-NEXT: bl lrintf1887; LE-I64-NEXT: vmov.f32 s0, s221888; LE-I64-NEXT: add lr, sp, #241889; LE-I64-NEXT: vmov.32 d17[0], r01890; LE-I64-NEXT: mov r11, r11891; LE-I64-NEXT: vstmia lr, {d16, d17} @ 16-byte Spill1892; LE-I64-NEXT: vmov.32 d13[1], r71893; LE-I64-NEXT: bl lrintf1894; LE-I64-NEXT: add lr, sp, #1441895; LE-I64-NEXT: vmov.f32 s0, s211896; LE-I64-NEXT: vmov.32 d12[1], r51897; LE-I64-NEXT: str r1, [sp, #40] @ 4-byte Spill1898; LE-I64-NEXT: vldmia lr, {d16, d17} @ 16-byte Reload1899; LE-I64-NEXT: vmov.32 d16[0], r01900; LE-I64-NEXT: vstmia lr, {d16, d17} @ 16-byte Spill1901; LE-I64-NEXT: add lr, sp, #881902; LE-I64-NEXT: vstmia lr, {d12, d13} @ 16-byte Spill1903; LE-I64-NEXT: bl lrintf1904; LE-I64-NEXT: vmov.f32 s0, s201905; LE-I64-NEXT: mov r10, r11906; LE-I64-NEXT: vmov.32 d13[0], r01907; LE-I64-NEXT: vmov.32 d9[1], r61908; LE-I64-NEXT: bl lrintf1909; LE-I64-NEXT: vmov.f32 s0, s311910; LE-I64-NEXT: vmov.32 d12[0], r01911; LE-I64-NEXT: add lr, sp, #81912; LE-I64-NEXT: mov r8, r11913; LE-I64-NEXT: vmov.32 d8[1], r91914; LE-I64-NEXT: vstmia lr, {d12, d13} @ 16-byte Spill1915; LE-I64-NEXT: add lr, sp, #641916; LE-I64-NEXT: vstmia lr, {d8, d9} @ 16-byte Spill1917; LE-I64-NEXT: bl lrintf1918; LE-I64-NEXT: add lr, sp, #1281919; LE-I64-NEXT: vmov.32 d9[0], r01920; LE-I64-NEXT: ldr r0, [sp, #44] @ 4-byte Reload1921; LE-I64-NEXT: mov r9, r11922; LE-I64-NEXT: vldmia lr, {d10, d11} @ 16-byte Reload1923; LE-I64-NEXT: add lr, sp, #481924; LE-I64-NEXT: vldmia lr, {d12, d13} @ 16-byte Reload1925; LE-I64-NEXT: vmov.f32 s0, s271926; LE-I64-NEXT: vmov.32 d11[1], r01927; LE-I64-NEXT: bl lrintf1928; LE-I64-NEXT: vmov.f32 s0, s261929; LE-I64-NEXT: vmov.32 d15[0], r01930; LE-I64-NEXT: ldr r0, [sp, #84] @ 4-byte Reload1931; LE-I64-NEXT: add lr, sp, #1281932; LE-I64-NEXT: mov r7, r11933; LE-I64-NEXT: vmov.32 d10[1], r01934; LE-I64-NEXT: vstmia lr, {d10, d11} @ 16-byte Spill1935; LE-I64-NEXT: bl lrintf1936; LE-I64-NEXT: vmov.32 d14[0], r01937; LE-I64-NEXT: add lr, sp, #1441938; LE-I64-NEXT: ldr r0, [sp, #108] @ 4-byte Reload1939; LE-I64-NEXT: mov r5, r11940; LE-I64-NEXT: vldmia lr, {d16, d17} @ 16-byte Reload1941; LE-I64-NEXT: vmov.32 d17[1], r01942; LE-I64-NEXT: vstmia lr, {d16, d17} @ 16-byte Spill1943; LE-I64-NEXT: add lr, sp, #1121944; LE-I64-NEXT: vldmia lr, {d10, d11} @ 16-byte Reload1945; LE-I64-NEXT: vmov.f32 s0, s201946; LE-I64-NEXT: bl lrintf1947; LE-I64-NEXT: add lr, sp, #241948; LE-I64-NEXT: vmov.f32 s0, s221949; LE-I64-NEXT: mov r6, r11950; LE-I64-NEXT: vldmia lr, {d16, d17} @ 16-byte Reload1951; LE-I64-NEXT: vmov.32 d16[0], r01952; LE-I64-NEXT: vmov.32 d17[1], r111953; LE-I64-NEXT: vorr q6, q8, q81954; LE-I64-NEXT: bl lrintf1955; LE-I64-NEXT: add lr, sp, #1441956; LE-I64-NEXT: vmov.32 d8[0], r01957; LE-I64-NEXT: ldr r0, [sp, #40] @ 4-byte Reload1958; LE-I64-NEXT: vldmia lr, {d16, d17} @ 16-byte Reload1959; LE-I64-NEXT: add lr, sp, #81960; LE-I64-NEXT: vldmia lr, {d18, d19} @ 16-byte Reload1961; LE-I64-NEXT: add lr, sp, #1281962; LE-I64-NEXT: vmov.32 d9[1], r91963; LE-I64-NEXT: vmov.32 d12[1], r61964; LE-I64-NEXT: vmov.32 d19[1], r101965; LE-I64-NEXT: vmov.32 d8[1], r11966; LE-I64-NEXT: vmov.32 d16[1], r01967; LE-I64-NEXT: add r0, r4, #641968; LE-I64-NEXT: vmov.32 d18[1], r81969; LE-I64-NEXT: vst1.64 {d12, d13}, [r0:128]!1970; LE-I64-NEXT: vst1.64 {d8, d9}, [r0:128]!1971; LE-I64-NEXT: vst1.64 {d18, d19}, [r0:128]!1972; LE-I64-NEXT: vst1.64 {d16, d17}, [r0:128]1973; LE-I64-NEXT: vmov.32 d15[1], r71974; LE-I64-NEXT: vldmia lr, {d16, d17} @ 16-byte Reload1975; LE-I64-NEXT: add lr, sp, #641976; LE-I64-NEXT: vmov.32 d14[1], r51977; LE-I64-NEXT: vst1.64 {d16, d17}, [r4:128]!1978; LE-I64-NEXT: vst1.64 {d14, d15}, [r4:128]!1979; LE-I64-NEXT: vldmia lr, {d16, d17} @ 16-byte Reload1980; LE-I64-NEXT: add lr, sp, #881981; LE-I64-NEXT: vst1.64 {d16, d17}, [r4:128]!1982; LE-I64-NEXT: vldmia lr, {d16, d17} @ 16-byte Reload1983; LE-I64-NEXT: vst1.64 {d16, d17}, [r4:128]1984; LE-I64-NEXT: add sp, sp, #1601985; LE-I64-NEXT: vpop {d8, d9, d10, d11, d12, d13, d14, d15}1986; LE-I64-NEXT: add sp, sp, #41987; LE-I64-NEXT: pop {r4, r5, r6, r7, r8, r9, r10, r11, pc}1988;1989; BE-I32-LABEL: lrint_v16f32:1990; BE-I32: @ %bb.0:1991; BE-I32-NEXT: .save {r11, lr}1992; BE-I32-NEXT: push {r11, lr}1993; BE-I32-NEXT: .vsave {d8, d9, d10, d11, d12, d13, d14, d15}1994; BE-I32-NEXT: vpush {d8, d9, d10, d11, d12, d13, d14, d15}1995; BE-I32-NEXT: .pad #961996; BE-I32-NEXT: sub sp, sp, #961997; BE-I32-NEXT: vrev64.32 q3, q31998; BE-I32-NEXT: add lr, sp, #641999; BE-I32-NEXT: vrev64.32 q4, q02000; BE-I32-NEXT: vmov.f32 s0, s122001; BE-I32-NEXT: vstmia lr, {d6, d7} @ 16-byte Spill2002; BE-I32-NEXT: add lr, sp, #322003; BE-I32-NEXT: vrev64.32 q5, q12004; BE-I32-NEXT: vrev64.32 q7, q22005; BE-I32-NEXT: vstmia lr, {d8, d9} @ 16-byte Spill2006; BE-I32-NEXT: bl lrintf2007; BE-I32-NEXT: vmov.f32 s0, s162008; BE-I32-NEXT: vmov.32 d16[0], r02009; BE-I32-NEXT: add lr, sp, #802010; BE-I32-NEXT: vstmia lr, {d16, d17} @ 16-byte Spill2011; BE-I32-NEXT: bl lrintf2012; BE-I32-NEXT: vmov.f32 s0, s182013; BE-I32-NEXT: vmov.32 d12[0], r02014; BE-I32-NEXT: bl lrintf2015; BE-I32-NEXT: vmov.f32 s0, s202016; BE-I32-NEXT: add lr, sp, #482017; BE-I32-NEXT: vmov.32 d13[0], r02018; BE-I32-NEXT: vstmia lr, {d12, d13} @ 16-byte Spill2019; BE-I32-NEXT: add lr, sp, #162020; BE-I32-NEXT: vstmia lr, {d10, d11} @ 16-byte Spill2021; BE-I32-NEXT: bl lrintf2022; BE-I32-NEXT: vmov.f32 s0, s222023; BE-I32-NEXT: vmov.32 d8[0], r02024; BE-I32-NEXT: bl lrintf2025; BE-I32-NEXT: vmov.f32 s0, s282026; BE-I32-NEXT: vmov.32 d9[0], r02027; BE-I32-NEXT: vstmia sp, {d8, d9} @ 16-byte Spill2028; BE-I32-NEXT: bl lrintf2029; BE-I32-NEXT: add lr, sp, #642030; BE-I32-NEXT: vmov.32 d12[0], r02031; BE-I32-NEXT: vldmia lr, {d10, d11} @ 16-byte Reload2032; BE-I32-NEXT: vmov.f32 s0, s222033; BE-I32-NEXT: bl lrintf2034; BE-I32-NEXT: vmov.f32 s0, s302035; BE-I32-NEXT: add lr, sp, #802036; BE-I32-NEXT: vldmia lr, {d8, d9} @ 16-byte Reload2037; BE-I32-NEXT: vmov.32 d9[0], r02038; BE-I32-NEXT: bl lrintf2039; BE-I32-NEXT: vmov.f32 s0, s232040; BE-I32-NEXT: vmov.32 d13[0], r02041; BE-I32-NEXT: bl lrintf2042; BE-I32-NEXT: vmov.f32 s0, s312043; BE-I32-NEXT: add lr, sp, #802044; BE-I32-NEXT: vmov.32 d9[1], r02045; BE-I32-NEXT: vstmia lr, {d8, d9} @ 16-byte Spill2046; BE-I32-NEXT: bl lrintf2047; BE-I32-NEXT: vmov.f32 s0, s292048; BE-I32-NEXT: vmov.32 d13[1], r02049; BE-I32-NEXT: bl lrintf2050; BE-I32-NEXT: add lr, sp, #162051; BE-I32-NEXT: vmov.32 d12[1], r02052; BE-I32-NEXT: vldmia lr, {d8, d9} @ 16-byte Reload2053; BE-I32-NEXT: vmov.f32 s0, s192054; BE-I32-NEXT: bl lrintf2055; BE-I32-NEXT: vmov.f32 s0, s172056; BE-I32-NEXT: vldmia sp, {d10, d11} @ 16-byte Reload2057; BE-I32-NEXT: vmov.32 d11[1], r02058; BE-I32-NEXT: bl lrintf2059; BE-I32-NEXT: add lr, sp, #322060; BE-I32-NEXT: vmov.32 d10[1], r02061; BE-I32-NEXT: vldmia lr, {d8, d9} @ 16-byte Reload2062; BE-I32-NEXT: vmov.f32 s0, s192063; BE-I32-NEXT: vorr q7, q5, q52064; BE-I32-NEXT: bl lrintf2065; BE-I32-NEXT: vmov.f32 s0, s172066; BE-I32-NEXT: add lr, sp, #482067; BE-I32-NEXT: vldmia lr, {d10, d11} @ 16-byte Reload2068; BE-I32-NEXT: vmov.32 d11[1], r02069; BE-I32-NEXT: bl lrintf2070; BE-I32-NEXT: add lr, sp, #642071; BE-I32-NEXT: vmov.32 d10[1], r02072; BE-I32-NEXT: vldmia lr, {d0, d1} @ 16-byte Reload2073; BE-I32-NEXT: vmov.f32 s0, s12074; BE-I32-NEXT: bl lrintf2075; BE-I32-NEXT: add lr, sp, #802076; BE-I32-NEXT: vrev64.32 q0, q52077; BE-I32-NEXT: vldmia lr, {d16, d17} @ 16-byte Reload2078; BE-I32-NEXT: vrev64.32 q1, q72079; BE-I32-NEXT: vmov.32 d16[1], r02080; BE-I32-NEXT: vrev64.32 q2, q62081; BE-I32-NEXT: vrev64.32 q3, q82082; BE-I32-NEXT: add sp, sp, #962083; BE-I32-NEXT: vpop {d8, d9, d10, d11, d12, d13, d14, d15}2084; BE-I32-NEXT: pop {r11, pc}2085;2086; BE-I64-LABEL: lrint_v16f32:2087; BE-I64: @ %bb.0:2088; BE-I64-NEXT: .save {r4, r5, r6, r7, r8, r9, r10, r11, lr}2089; BE-I64-NEXT: push {r4, r5, r6, r7, r8, r9, r10, r11, lr}2090; BE-I64-NEXT: .pad #42091; BE-I64-NEXT: sub sp, sp, #42092; BE-I64-NEXT: .vsave {d8, d9, d10, d11, d12, d13, d14, d15}2093; BE-I64-NEXT: vpush {d8, d9, d10, d11, d12, d13, d14, d15}2094; BE-I64-NEXT: .pad #1442095; BE-I64-NEXT: sub sp, sp, #1442096; BE-I64-NEXT: vorr q6, q3, q32097; BE-I64-NEXT: add lr, sp, #1122098; BE-I64-NEXT: vorr q7, q0, q02099; BE-I64-NEXT: mov r4, r02100; BE-I64-NEXT: vstmia lr, {d4, d5} @ 16-byte Spill2101; BE-I64-NEXT: add lr, sp, #962102; BE-I64-NEXT: vrev64.32 d8, d132103; BE-I64-NEXT: vstmia lr, {d2, d3} @ 16-byte Spill2104; BE-I64-NEXT: vmov.f32 s0, s172105; BE-I64-NEXT: bl lrintf2106; BE-I64-NEXT: vmov.f32 s0, s162107; BE-I64-NEXT: str r1, [sp, #88] @ 4-byte Spill2108; BE-I64-NEXT: vmov.32 d11[0], r02109; BE-I64-NEXT: bl lrintf2110; BE-I64-NEXT: vrev64.32 d8, d142111; BE-I64-NEXT: add lr, sp, #1282112; BE-I64-NEXT: vmov.32 d10[0], r02113; BE-I64-NEXT: str r1, [sp, #92] @ 4-byte Spill2114; BE-I64-NEXT: vmov.f32 s0, s162115; BE-I64-NEXT: vrev64.32 d9, d122116; BE-I64-NEXT: vstmia lr, {d10, d11} @ 16-byte Spill2117; BE-I64-NEXT: vstr d9, [sp, #64] @ 8-byte Spill2118; BE-I64-NEXT: bl lrintf2119; BE-I64-NEXT: vmov.f32 s0, s192120; BE-I64-NEXT: mov r9, r12121; BE-I64-NEXT: vmov.32 d12[0], r02122; BE-I64-NEXT: bl lrintf2123; BE-I64-NEXT: vmov.f32 s0, s172124; BE-I64-NEXT: str r1, [sp, #84] @ 4-byte Spill2125; BE-I64-NEXT: vmov.32 d11[0], r02126; BE-I64-NEXT: vrev64.32 d9, d152127; BE-I64-NEXT: bl lrintf2128; BE-I64-NEXT: vmov.f32 s0, s182129; BE-I64-NEXT: mov r6, r12130; BE-I64-NEXT: vmov.32 d13[0], r02131; BE-I64-NEXT: bl lrintf2132; BE-I64-NEXT: vmov.f32 s0, s192133; BE-I64-NEXT: mov r5, r12134; BE-I64-NEXT: vmov.32 d14[0], r02135; BE-I64-NEXT: bl lrintf2136; BE-I64-NEXT: vldr d0, [sp, #64] @ 8-byte Reload2137; BE-I64-NEXT: mov r7, r12138; BE-I64-NEXT: @ kill: def $s0 killed $s0 killed $d02139; BE-I64-NEXT: vmov.32 d15[0], r02140; BE-I64-NEXT: bl lrintf2141; BE-I64-NEXT: vmov.32 d10[0], r02142; BE-I64-NEXT: add lr, sp, #402143; BE-I64-NEXT: str r1, [sp, #60] @ 4-byte Spill2144; BE-I64-NEXT: vmov.32 d15[1], r72145; BE-I64-NEXT: vstmia lr, {d10, d11} @ 16-byte Spill2146; BE-I64-NEXT: add lr, sp, #962147; BE-I64-NEXT: vldmia lr, {d16, d17} @ 16-byte Reload2148; BE-I64-NEXT: vrev64.32 d8, d162149; BE-I64-NEXT: vmov.f32 s0, s172150; BE-I64-NEXT: bl lrintf2151; BE-I64-NEXT: vmov.f32 s0, s162152; BE-I64-NEXT: vmov.32 d14[1], r52153; BE-I64-NEXT: add lr, sp, #642154; BE-I64-NEXT: mov r10, r12155; BE-I64-NEXT: vmov.32 d11[0], r02156; BE-I64-NEXT: vstmia lr, {d14, d15} @ 16-byte Spill2157; BE-I64-NEXT: bl lrintf2158; BE-I64-NEXT: vmov.32 d10[0], r02159; BE-I64-NEXT: add lr, sp, #242160; BE-I64-NEXT: mov r11, r12161; BE-I64-NEXT: vmov.32 d13[1], r62162; BE-I64-NEXT: vstmia lr, {d10, d11} @ 16-byte Spill2163; BE-I64-NEXT: add lr, sp, #962164; BE-I64-NEXT: vldmia lr, {d16, d17} @ 16-byte Reload2165; BE-I64-NEXT: vrev64.32 d8, d172166; BE-I64-NEXT: vmov.f32 s0, s172167; BE-I64-NEXT: bl lrintf2168; BE-I64-NEXT: vmov.f32 s0, s162169; BE-I64-NEXT: vmov.32 d12[1], r92170; BE-I64-NEXT: add lr, sp, #962171; BE-I64-NEXT: mov r8, r12172; BE-I64-NEXT: vmov.32 d11[0], r02173; BE-I64-NEXT: vstmia lr, {d12, d13} @ 16-byte Spill2174; BE-I64-NEXT: bl lrintf2175; BE-I64-NEXT: vmov.32 d10[0], r02176; BE-I64-NEXT: add lr, sp, #82177; BE-I64-NEXT: ldr r0, [sp, #88] @ 4-byte Reload2178; BE-I64-NEXT: mov r9, r12179; BE-I64-NEXT: vstmia lr, {d10, d11} @ 16-byte Spill2180; BE-I64-NEXT: add lr, sp, #1122181; BE-I64-NEXT: vldmia lr, {d16, d17} @ 16-byte Reload2182; BE-I64-NEXT: add lr, sp, #1282183; BE-I64-NEXT: vldmia lr, {d10, d11} @ 16-byte Reload2184; BE-I64-NEXT: vrev64.32 d8, d162185; BE-I64-NEXT: vmov.32 d11[1], r02186; BE-I64-NEXT: vmov.f32 s0, s172187; BE-I64-NEXT: bl lrintf2188; BE-I64-NEXT: vmov.f32 s0, s162189; BE-I64-NEXT: vmov.32 d15[0], r02190; BE-I64-NEXT: ldr r0, [sp, #92] @ 4-byte Reload2191; BE-I64-NEXT: add lr, sp, #1282192; BE-I64-NEXT: mov r7, r12193; BE-I64-NEXT: vmov.32 d10[1], r02194; BE-I64-NEXT: vstmia lr, {d10, d11} @ 16-byte Spill2195; BE-I64-NEXT: bl lrintf2196; BE-I64-NEXT: add lr, sp, #1122197; BE-I64-NEXT: vmov.32 d14[0], r02198; BE-I64-NEXT: ldr r0, [sp, #84] @ 4-byte Reload2199; BE-I64-NEXT: mov r5, r12200; BE-I64-NEXT: vldmia lr, {d16, d17} @ 16-byte Reload2201; BE-I64-NEXT: add lr, sp, #402202; BE-I64-NEXT: vrev64.32 d8, d172203; BE-I64-NEXT: vldmia lr, {d12, d13} @ 16-byte Reload2204; BE-I64-NEXT: vmov.f32 s0, s172205; BE-I64-NEXT: vmov.32 d13[1], r02206; BE-I64-NEXT: bl lrintf2207; BE-I64-NEXT: vmov.f32 s0, s162208; BE-I64-NEXT: vmov.32 d11[0], r02209; BE-I64-NEXT: ldr r0, [sp, #60] @ 4-byte Reload2210; BE-I64-NEXT: mov r6, r12211; BE-I64-NEXT: vmov.32 d12[1], r02212; BE-I64-NEXT: bl lrintf2213; BE-I64-NEXT: add lr, sp, #242214; BE-I64-NEXT: vmov.32 d10[0], r02215; BE-I64-NEXT: add r0, r4, #642216; BE-I64-NEXT: vldmia lr, {d16, d17} @ 16-byte Reload2217; BE-I64-NEXT: add lr, sp, #82218; BE-I64-NEXT: vmov.32 d17[1], r102219; BE-I64-NEXT: vmov.32 d16[1], r112220; BE-I64-NEXT: vorr q12, q8, q82221; BE-I64-NEXT: vldmia lr, {d16, d17} @ 16-byte Reload2222; BE-I64-NEXT: add lr, sp, #1282223; BE-I64-NEXT: vmov.32 d15[1], r72224; BE-I64-NEXT: vmov.32 d11[1], r62225; BE-I64-NEXT: vmov.32 d14[1], r52226; BE-I64-NEXT: vldmia lr, {d18, d19} @ 16-byte Reload2227; BE-I64-NEXT: add lr, sp, #962228; BE-I64-NEXT: vmov.32 d10[1], r12229; BE-I64-NEXT: vmov.32 d17[1], r82230; BE-I64-NEXT: vldmia lr, {d20, d21} @ 16-byte Reload2231; BE-I64-NEXT: add lr, sp, #642232; BE-I64-NEXT: vmov.32 d16[1], r92233; BE-I64-NEXT: vrev64.32 q14, q72234; BE-I64-NEXT: vorr q13, q8, q82235; BE-I64-NEXT: vrev64.32 q15, q52236; BE-I64-NEXT: vldmia lr, {d22, d23} @ 16-byte Reload2237; BE-I64-NEXT: vrev64.32 q8, q62238; BE-I64-NEXT: vst1.64 {d28, d29}, [r0:128]!2239; BE-I64-NEXT: vst1.64 {d30, d31}, [r0:128]!2240; BE-I64-NEXT: vrev64.32 q9, q92241; BE-I64-NEXT: vrev64.32 q10, q102242; BE-I64-NEXT: vst1.64 {d16, d17}, [r0:128]!2243; BE-I64-NEXT: vrev64.32 q11, q112244; BE-I64-NEXT: vrev64.32 q12, q122245; BE-I64-NEXT: vst1.64 {d18, d19}, [r0:128]2246; BE-I64-NEXT: vst1.64 {d20, d21}, [r4:128]!2247; BE-I64-NEXT: vst1.64 {d22, d23}, [r4:128]!2248; BE-I64-NEXT: vrev64.32 q13, q132249; BE-I64-NEXT: vst1.64 {d24, d25}, [r4:128]!2250; BE-I64-NEXT: vst1.64 {d26, d27}, [r4:128]2251; BE-I64-NEXT: add sp, sp, #1442252; BE-I64-NEXT: vpop {d8, d9, d10, d11, d12, d13, d14, d15}2253; BE-I64-NEXT: add sp, sp, #42254; BE-I64-NEXT: pop {r4, r5, r6, r7, r8, r9, r10, r11, pc}2255 %a = call <16 x iXLen> @llvm.lrint.v16iXLen.v16f32(<16 x float> %x)2256 ret <16 x iXLen> %a2257}2258 2259define <1 x iXLen> @lrint_v1f64(<1 x double> %x) {2260; LE-I32-LABEL: lrint_v1f64:2261; LE-I32: @ %bb.0:2262; LE-I32-NEXT: .save {r11, lr}2263; LE-I32-NEXT: push {r11, lr}2264; LE-I32-NEXT: bl lrint2265; LE-I32-NEXT: pop {r11, pc}2266;2267; LE-I64-LABEL: lrint_v1f64:2268; LE-I64: @ %bb.0:2269; LE-I64-NEXT: .save {r11, lr}2270; LE-I64-NEXT: push {r11, lr}2271; LE-I64-NEXT: bl lrint2272; LE-I64-NEXT: vmov.32 d0[0], r02273; LE-I64-NEXT: vmov.32 d0[1], r12274; LE-I64-NEXT: pop {r11, pc}2275;2276; BE-I32-LABEL: lrint_v1f64:2277; BE-I32: @ %bb.0:2278; BE-I32-NEXT: .save {r11, lr}2279; BE-I32-NEXT: push {r11, lr}2280; BE-I32-NEXT: bl lrint2281; BE-I32-NEXT: pop {r11, pc}2282;2283; BE-I64-LABEL: lrint_v1f64:2284; BE-I64: @ %bb.0:2285; BE-I64-NEXT: .save {r11, lr}2286; BE-I64-NEXT: push {r11, lr}2287; BE-I64-NEXT: bl lrint2288; BE-I64-NEXT: vmov.32 d16[0], r02289; BE-I64-NEXT: vmov.32 d16[1], r12290; BE-I64-NEXT: vrev64.32 d0, d162291; BE-I64-NEXT: pop {r11, pc}2292 %a = call <1 x iXLen> @llvm.lrint.v1iXLen.v1f64(<1 x double> %x)2293 ret <1 x iXLen> %a2294}2295 2296define <2 x iXLen> @lrint_v2f64(<2 x double> %x) {2297; LE-I32-LABEL: lrint_v2f64:2298; LE-I32: @ %bb.0:2299; LE-I32-NEXT: .save {r11, lr}2300; LE-I32-NEXT: push {r11, lr}2301; LE-I32-NEXT: .vsave {d8, d9, d10}2302; LE-I32-NEXT: vpush {d8, d9, d10}2303; LE-I32-NEXT: vorr q4, q0, q02304; LE-I32-NEXT: bl lrint2305; LE-I32-NEXT: vorr d0, d9, d92306; LE-I32-NEXT: vmov.32 d10[0], r02307; LE-I32-NEXT: bl lrint2308; LE-I32-NEXT: vmov.32 d10[1], r02309; LE-I32-NEXT: vorr d0, d10, d102310; LE-I32-NEXT: vpop {d8, d9, d10}2311; LE-I32-NEXT: pop {r11, pc}2312;2313; LE-I64-LABEL: lrint_v2f64:2314; LE-I64: @ %bb.0:2315; LE-I64-NEXT: .save {r4, lr}2316; LE-I64-NEXT: push {r4, lr}2317; LE-I64-NEXT: .vsave {d8, d9, d10, d11}2318; LE-I64-NEXT: vpush {d8, d9, d10, d11}2319; LE-I64-NEXT: vorr q4, q0, q02320; LE-I64-NEXT: vorr d0, d9, d92321; LE-I64-NEXT: bl lrint2322; LE-I64-NEXT: vorr d0, d8, d82323; LE-I64-NEXT: mov r4, r12324; LE-I64-NEXT: vmov.32 d11[0], r02325; LE-I64-NEXT: bl lrint2326; LE-I64-NEXT: vmov.32 d10[0], r02327; LE-I64-NEXT: vmov.32 d11[1], r42328; LE-I64-NEXT: vmov.32 d10[1], r12329; LE-I64-NEXT: vorr q0, q5, q52330; LE-I64-NEXT: vpop {d8, d9, d10, d11}2331; LE-I64-NEXT: pop {r4, pc}2332;2333; BE-I32-LABEL: lrint_v2f64:2334; BE-I32: @ %bb.0:2335; BE-I32-NEXT: .save {r11, lr}2336; BE-I32-NEXT: push {r11, lr}2337; BE-I32-NEXT: .vsave {d8, d9, d10}2338; BE-I32-NEXT: vpush {d8, d9, d10}2339; BE-I32-NEXT: vorr q4, q0, q02340; BE-I32-NEXT: bl lrint2341; BE-I32-NEXT: vorr d0, d9, d92342; BE-I32-NEXT: vmov.32 d10[0], r02343; BE-I32-NEXT: bl lrint2344; BE-I32-NEXT: vmov.32 d10[1], r02345; BE-I32-NEXT: vrev64.32 d0, d102346; BE-I32-NEXT: vpop {d8, d9, d10}2347; BE-I32-NEXT: pop {r11, pc}2348;2349; BE-I64-LABEL: lrint_v2f64:2350; BE-I64: @ %bb.0:2351; BE-I64-NEXT: .save {r4, lr}2352; BE-I64-NEXT: push {r4, lr}2353; BE-I64-NEXT: .vsave {d8, d9, d10, d11}2354; BE-I64-NEXT: vpush {d8, d9, d10, d11}2355; BE-I64-NEXT: vorr q4, q0, q02356; BE-I64-NEXT: vorr d0, d9, d92357; BE-I64-NEXT: bl lrint2358; BE-I64-NEXT: vorr d0, d8, d82359; BE-I64-NEXT: mov r4, r12360; BE-I64-NEXT: vmov.32 d11[0], r02361; BE-I64-NEXT: bl lrint2362; BE-I64-NEXT: vmov.32 d10[0], r02363; BE-I64-NEXT: vmov.32 d11[1], r42364; BE-I64-NEXT: vmov.32 d10[1], r12365; BE-I64-NEXT: vrev64.32 q0, q52366; BE-I64-NEXT: vpop {d8, d9, d10, d11}2367; BE-I64-NEXT: pop {r4, pc}2368 %a = call <2 x iXLen> @llvm.lrint.v2iXLen.v2f64(<2 x double> %x)2369 ret <2 x iXLen> %a2370}2371 2372define <4 x iXLen> @lrint_v4f64(<4 x double> %x) {2373; LE-I32-LABEL: lrint_v4f64:2374; LE-I32: @ %bb.0:2375; LE-I32-NEXT: .save {r11, lr}2376; LE-I32-NEXT: push {r11, lr}2377; LE-I32-NEXT: .vsave {d8, d9, d10, d11, d12, d13}2378; LE-I32-NEXT: vpush {d8, d9, d10, d11, d12, d13}2379; LE-I32-NEXT: vorr q4, q1, q12380; LE-I32-NEXT: vorr q5, q0, q02381; LE-I32-NEXT: vorr d0, d8, d82382; LE-I32-NEXT: bl lrint2383; LE-I32-NEXT: vorr d0, d10, d102384; LE-I32-NEXT: vmov.32 d13[0], r02385; LE-I32-NEXT: bl lrint2386; LE-I32-NEXT: vorr d0, d9, d92387; LE-I32-NEXT: vmov.32 d12[0], r02388; LE-I32-NEXT: bl lrint2389; LE-I32-NEXT: vorr d0, d11, d112390; LE-I32-NEXT: vmov.32 d13[1], r02391; LE-I32-NEXT: bl lrint2392; LE-I32-NEXT: vmov.32 d12[1], r02393; LE-I32-NEXT: vorr q0, q6, q62394; LE-I32-NEXT: vpop {d8, d9, d10, d11, d12, d13}2395; LE-I32-NEXT: pop {r11, pc}2396;2397; LE-I64-LABEL: lrint_v4f64:2398; LE-I64: @ %bb.0:2399; LE-I64-NEXT: .save {r4, r5, r6, lr}2400; LE-I64-NEXT: push {r4, r5, r6, lr}2401; LE-I64-NEXT: .vsave {d8, d9, d10, d11, d12, d13, d14, d15}2402; LE-I64-NEXT: vpush {d8, d9, d10, d11, d12, d13, d14, d15}2403; LE-I64-NEXT: vorr q5, q1, q12404; LE-I64-NEXT: vorr q6, q0, q02405; LE-I64-NEXT: vorr d0, d11, d112406; LE-I64-NEXT: bl lrint2407; LE-I64-NEXT: vorr d0, d12, d122408; LE-I64-NEXT: mov r4, r12409; LE-I64-NEXT: vmov.32 d9[0], r02410; LE-I64-NEXT: bl lrint2411; LE-I64-NEXT: vorr d0, d13, d132412; LE-I64-NEXT: mov r5, r12413; LE-I64-NEXT: vmov.32 d14[0], r02414; LE-I64-NEXT: bl lrint2415; LE-I64-NEXT: vorr d0, d10, d102416; LE-I64-NEXT: mov r6, r12417; LE-I64-NEXT: vmov.32 d15[0], r02418; LE-I64-NEXT: bl lrint2419; LE-I64-NEXT: vmov.32 d8[0], r02420; LE-I64-NEXT: vmov.32 d15[1], r62421; LE-I64-NEXT: vmov.32 d9[1], r42422; LE-I64-NEXT: vmov.32 d14[1], r52423; LE-I64-NEXT: vmov.32 d8[1], r12424; LE-I64-NEXT: vorr q0, q7, q72425; LE-I64-NEXT: vorr q1, q4, q42426; LE-I64-NEXT: vpop {d8, d9, d10, d11, d12, d13, d14, d15}2427; LE-I64-NEXT: pop {r4, r5, r6, pc}2428;2429; BE-I32-LABEL: lrint_v4f64:2430; BE-I32: @ %bb.0:2431; BE-I32-NEXT: .save {r11, lr}2432; BE-I32-NEXT: push {r11, lr}2433; BE-I32-NEXT: .vsave {d8, d9, d10, d11, d12, d13}2434; BE-I32-NEXT: vpush {d8, d9, d10, d11, d12, d13}2435; BE-I32-NEXT: vorr q4, q1, q12436; BE-I32-NEXT: vorr q5, q0, q02437; BE-I32-NEXT: vorr d0, d8, d82438; BE-I32-NEXT: bl lrint2439; BE-I32-NEXT: vorr d0, d10, d102440; BE-I32-NEXT: vmov.32 d13[0], r02441; BE-I32-NEXT: bl lrint2442; BE-I32-NEXT: vorr d0, d9, d92443; BE-I32-NEXT: vmov.32 d12[0], r02444; BE-I32-NEXT: bl lrint2445; BE-I32-NEXT: vorr d0, d11, d112446; BE-I32-NEXT: vmov.32 d13[1], r02447; BE-I32-NEXT: bl lrint2448; BE-I32-NEXT: vmov.32 d12[1], r02449; BE-I32-NEXT: vrev64.32 q0, q62450; BE-I32-NEXT: vpop {d8, d9, d10, d11, d12, d13}2451; BE-I32-NEXT: pop {r11, pc}2452;2453; BE-I64-LABEL: lrint_v4f64:2454; BE-I64: @ %bb.0:2455; BE-I64-NEXT: .save {r4, r5, r6, lr}2456; BE-I64-NEXT: push {r4, r5, r6, lr}2457; BE-I64-NEXT: .vsave {d8, d9, d10, d11, d12, d13, d14, d15}2458; BE-I64-NEXT: vpush {d8, d9, d10, d11, d12, d13, d14, d15}2459; BE-I64-NEXT: vorr q4, q1, q12460; BE-I64-NEXT: vorr q5, q0, q02461; BE-I64-NEXT: vorr d0, d9, d92462; BE-I64-NEXT: bl lrint2463; BE-I64-NEXT: vorr d0, d10, d102464; BE-I64-NEXT: mov r4, r12465; BE-I64-NEXT: vmov.32 d13[0], r02466; BE-I64-NEXT: bl lrint2467; BE-I64-NEXT: vorr d0, d11, d112468; BE-I64-NEXT: mov r5, r12469; BE-I64-NEXT: vmov.32 d14[0], r02470; BE-I64-NEXT: bl lrint2471; BE-I64-NEXT: vorr d0, d8, d82472; BE-I64-NEXT: mov r6, r12473; BE-I64-NEXT: vmov.32 d15[0], r02474; BE-I64-NEXT: bl lrint2475; BE-I64-NEXT: vmov.32 d12[0], r02476; BE-I64-NEXT: vmov.32 d15[1], r62477; BE-I64-NEXT: vmov.32 d13[1], r42478; BE-I64-NEXT: vmov.32 d14[1], r52479; BE-I64-NEXT: vmov.32 d12[1], r12480; BE-I64-NEXT: vrev64.32 q0, q72481; BE-I64-NEXT: vrev64.32 q1, q62482; BE-I64-NEXT: vpop {d8, d9, d10, d11, d12, d13, d14, d15}2483; BE-I64-NEXT: pop {r4, r5, r6, pc}2484 %a = call <4 x iXLen> @llvm.lrint.v4iXLen.v4f64(<4 x double> %x)2485 ret <4 x iXLen> %a2486}2487 2488define <8 x iXLen> @lrint_v8f64(<8 x double> %x) {2489; LE-I32-LABEL: lrint_v8f64:2490; LE-I32: @ %bb.0:2491; LE-I32-NEXT: .save {r11, lr}2492; LE-I32-NEXT: push {r11, lr}2493; LE-I32-NEXT: .vsave {d8, d9, d10, d11, d12, d13, d14, d15}2494; LE-I32-NEXT: vpush {d8, d9, d10, d11, d12, d13, d14, d15}2495; LE-I32-NEXT: .pad #322496; LE-I32-NEXT: sub sp, sp, #322497; LE-I32-NEXT: vorr q5, q0, q02498; LE-I32-NEXT: add lr, sp, #162499; LE-I32-NEXT: vorr d0, d4, d42500; LE-I32-NEXT: vstmia sp, {d6, d7} @ 16-byte Spill2501; LE-I32-NEXT: vorr q7, q3, q32502; LE-I32-NEXT: vstmia lr, {d4, d5} @ 16-byte Spill2503; LE-I32-NEXT: vorr q6, q1, q12504; LE-I32-NEXT: bl lrint2505; LE-I32-NEXT: vorr d0, d14, d142506; LE-I32-NEXT: vmov.32 d8[0], r02507; LE-I32-NEXT: bl lrint2508; LE-I32-NEXT: vorr d0, d12, d122509; LE-I32-NEXT: vmov.32 d9[0], r02510; LE-I32-NEXT: bl lrint2511; LE-I32-NEXT: vorr d0, d10, d102512; LE-I32-NEXT: vmov.32 d15[0], r02513; LE-I32-NEXT: bl lrint2514; LE-I32-NEXT: vorr d0, d13, d132515; LE-I32-NEXT: vmov.32 d14[0], r02516; LE-I32-NEXT: bl lrint2517; LE-I32-NEXT: vorr d0, d11, d112518; LE-I32-NEXT: vmov.32 d15[1], r02519; LE-I32-NEXT: bl lrint2520; LE-I32-NEXT: vldmia sp, {d16, d17} @ 16-byte Reload2521; LE-I32-NEXT: vorr d0, d17, d172522; LE-I32-NEXT: vmov.32 d14[1], r02523; LE-I32-NEXT: bl lrint2524; LE-I32-NEXT: add lr, sp, #162525; LE-I32-NEXT: vmov.32 d9[1], r02526; LE-I32-NEXT: vldmia lr, {d16, d17} @ 16-byte Reload2527; LE-I32-NEXT: vorr d0, d17, d172528; LE-I32-NEXT: bl lrint2529; LE-I32-NEXT: vmov.32 d8[1], r02530; LE-I32-NEXT: vorr q0, q7, q72531; LE-I32-NEXT: vorr q1, q4, q42532; LE-I32-NEXT: add sp, sp, #322533; LE-I32-NEXT: vpop {d8, d9, d10, d11, d12, d13, d14, d15}2534; LE-I32-NEXT: pop {r11, pc}2535;2536; LE-I64-LABEL: lrint_v8f64:2537; LE-I64: @ %bb.0:2538; LE-I64-NEXT: .save {r4, r5, r6, r7, r8, r9, r10, lr}2539; LE-I64-NEXT: push {r4, r5, r6, r7, r8, r9, r10, lr}2540; LE-I64-NEXT: .vsave {d8, d9, d10, d11, d12, d13, d14, d15}2541; LE-I64-NEXT: vpush {d8, d9, d10, d11, d12, d13, d14, d15}2542; LE-I64-NEXT: .pad #402543; LE-I64-NEXT: sub sp, sp, #402544; LE-I64-NEXT: vorr q4, q0, q02545; LE-I64-NEXT: add lr, sp, #242546; LE-I64-NEXT: vorr d0, d7, d72547; LE-I64-NEXT: vstmia lr, {d6, d7} @ 16-byte Spill2548; LE-I64-NEXT: vorr q7, q2, q22549; LE-I64-NEXT: vorr q6, q1, q12550; LE-I64-NEXT: bl lrint2551; LE-I64-NEXT: vorr d0, d14, d142552; LE-I64-NEXT: add lr, sp, #82553; LE-I64-NEXT: vmov.32 d17[0], r02554; LE-I64-NEXT: mov r8, r12555; LE-I64-NEXT: vstmia lr, {d16, d17} @ 16-byte Spill2556; LE-I64-NEXT: bl lrint2557; LE-I64-NEXT: vorr d0, d15, d152558; LE-I64-NEXT: mov r9, r12559; LE-I64-NEXT: vmov.32 d10[0], r02560; LE-I64-NEXT: bl lrint2561; LE-I64-NEXT: vorr d0, d12, d122562; LE-I64-NEXT: mov r10, r12563; LE-I64-NEXT: vmov.32 d11[0], r02564; LE-I64-NEXT: bl lrint2565; LE-I64-NEXT: vorr d0, d13, d132566; LE-I64-NEXT: mov r7, r12567; LE-I64-NEXT: vmov.32 d14[0], r02568; LE-I64-NEXT: bl lrint2569; LE-I64-NEXT: vorr d0, d8, d82570; LE-I64-NEXT: mov r4, r12571; LE-I64-NEXT: vmov.32 d15[0], r02572; LE-I64-NEXT: bl lrint2573; LE-I64-NEXT: vorr d0, d9, d92574; LE-I64-NEXT: mov r5, r12575; LE-I64-NEXT: vmov.32 d12[0], r02576; LE-I64-NEXT: bl lrint2577; LE-I64-NEXT: add lr, sp, #242578; LE-I64-NEXT: mov r6, r12579; LE-I64-NEXT: vmov.32 d13[0], r02580; LE-I64-NEXT: vldmia lr, {d0, d1} @ 16-byte Reload2581; LE-I64-NEXT: @ kill: def $d0 killed $d0 killed $q02582; LE-I64-NEXT: bl lrint2583; LE-I64-NEXT: add lr, sp, #82584; LE-I64-NEXT: vmov.32 d13[1], r62585; LE-I64-NEXT: vldmia lr, {d6, d7} @ 16-byte Reload2586; LE-I64-NEXT: vmov.32 d15[1], r42587; LE-I64-NEXT: vmov.32 d11[1], r102588; LE-I64-NEXT: vmov.32 d6[0], r02589; LE-I64-NEXT: vmov.32 d12[1], r52590; LE-I64-NEXT: vmov.32 d14[1], r72591; LE-I64-NEXT: vorr q0, q6, q62592; LE-I64-NEXT: vmov.32 d10[1], r92593; LE-I64-NEXT: vorr q1, q7, q72594; LE-I64-NEXT: vmov.32 d7[1], r82595; LE-I64-NEXT: vorr q2, q5, q52596; LE-I64-NEXT: vmov.32 d6[1], r12597; LE-I64-NEXT: add sp, sp, #402598; LE-I64-NEXT: vpop {d8, d9, d10, d11, d12, d13, d14, d15}2599; LE-I64-NEXT: pop {r4, r5, r6, r7, r8, r9, r10, pc}2600;2601; BE-I32-LABEL: lrint_v8f64:2602; BE-I32: @ %bb.0:2603; BE-I32-NEXT: .save {r11, lr}2604; BE-I32-NEXT: push {r11, lr}2605; BE-I32-NEXT: .vsave {d8, d9, d10, d11, d12, d13, d14, d15}2606; BE-I32-NEXT: vpush {d8, d9, d10, d11, d12, d13, d14, d15}2607; BE-I32-NEXT: .pad #322608; BE-I32-NEXT: sub sp, sp, #322609; BE-I32-NEXT: vorr q5, q0, q02610; BE-I32-NEXT: vstmia sp, {d0, d1} @ 16-byte Spill2611; BE-I32-NEXT: vorr d0, d4, d42612; BE-I32-NEXT: add lr, sp, #162613; BE-I32-NEXT: vorr q7, q3, q32614; BE-I32-NEXT: vstmia lr, {d4, d5} @ 16-byte Spill2615; BE-I32-NEXT: vorr q6, q1, q12616; BE-I32-NEXT: bl lrint2617; BE-I32-NEXT: vorr d0, d10, d102618; BE-I32-NEXT: vmov.32 d8[0], r02619; BE-I32-NEXT: bl lrint2620; BE-I32-NEXT: vorr d0, d14, d142621; BE-I32-NEXT: vmov.32 d10[0], r02622; BE-I32-NEXT: bl lrint2623; BE-I32-NEXT: vorr d0, d12, d122624; BE-I32-NEXT: vmov.32 d9[0], r02625; BE-I32-NEXT: bl lrint2626; BE-I32-NEXT: vorr d0, d15, d152627; BE-I32-NEXT: vmov.32 d11[0], r02628; BE-I32-NEXT: bl lrint2629; BE-I32-NEXT: vorr d0, d13, d132630; BE-I32-NEXT: vmov.32 d9[1], r02631; BE-I32-NEXT: bl lrint2632; BE-I32-NEXT: vldmia sp, {d16, d17} @ 16-byte Reload2633; BE-I32-NEXT: vorr d0, d17, d172634; BE-I32-NEXT: vmov.32 d11[1], r02635; BE-I32-NEXT: bl lrint2636; BE-I32-NEXT: add lr, sp, #162637; BE-I32-NEXT: vmov.32 d10[1], r02638; BE-I32-NEXT: vldmia lr, {d16, d17} @ 16-byte Reload2639; BE-I32-NEXT: vorr d0, d17, d172640; BE-I32-NEXT: bl lrint2641; BE-I32-NEXT: vmov.32 d8[1], r02642; BE-I32-NEXT: vrev64.32 q0, q52643; BE-I32-NEXT: vrev64.32 q1, q42644; BE-I32-NEXT: add sp, sp, #322645; BE-I32-NEXT: vpop {d8, d9, d10, d11, d12, d13, d14, d15}2646; BE-I32-NEXT: pop {r11, pc}2647;2648; BE-I64-LABEL: lrint_v8f64:2649; BE-I64: @ %bb.0:2650; BE-I64-NEXT: .save {r4, r5, r6, r7, r8, r9, r10, lr}2651; BE-I64-NEXT: push {r4, r5, r6, r7, r8, r9, r10, lr}2652; BE-I64-NEXT: .vsave {d8, d9, d10, d11, d12, d13, d14, d15}2653; BE-I64-NEXT: vpush {d8, d9, d10, d11, d12, d13, d14, d15}2654; BE-I64-NEXT: .pad #402655; BE-I64-NEXT: sub sp, sp, #402656; BE-I64-NEXT: vorr q4, q0, q02657; BE-I64-NEXT: add lr, sp, #242658; BE-I64-NEXT: vorr d0, d7, d72659; BE-I64-NEXT: vstmia lr, {d6, d7} @ 16-byte Spill2660; BE-I64-NEXT: vorr q7, q2, q22661; BE-I64-NEXT: vorr q6, q1, q12662; BE-I64-NEXT: bl lrint2663; BE-I64-NEXT: vorr d0, d14, d142664; BE-I64-NEXT: add lr, sp, #82665; BE-I64-NEXT: vmov.32 d17[0], r02666; BE-I64-NEXT: mov r8, r12667; BE-I64-NEXT: vstmia lr, {d16, d17} @ 16-byte Spill2668; BE-I64-NEXT: bl lrint2669; BE-I64-NEXT: vorr d0, d15, d152670; BE-I64-NEXT: mov r9, r12671; BE-I64-NEXT: vmov.32 d10[0], r02672; BE-I64-NEXT: bl lrint2673; BE-I64-NEXT: vorr d0, d12, d122674; BE-I64-NEXT: mov r10, r12675; BE-I64-NEXT: vmov.32 d11[0], r02676; BE-I64-NEXT: bl lrint2677; BE-I64-NEXT: vorr d0, d13, d132678; BE-I64-NEXT: mov r7, r12679; BE-I64-NEXT: vmov.32 d14[0], r02680; BE-I64-NEXT: bl lrint2681; BE-I64-NEXT: vorr d0, d8, d82682; BE-I64-NEXT: mov r4, r12683; BE-I64-NEXT: vmov.32 d15[0], r02684; BE-I64-NEXT: bl lrint2685; BE-I64-NEXT: vorr d0, d9, d92686; BE-I64-NEXT: mov r5, r12687; BE-I64-NEXT: vmov.32 d12[0], r02688; BE-I64-NEXT: bl lrint2689; BE-I64-NEXT: add lr, sp, #242690; BE-I64-NEXT: mov r6, r12691; BE-I64-NEXT: vmov.32 d13[0], r02692; BE-I64-NEXT: vldmia lr, {d0, d1} @ 16-byte Reload2693; BE-I64-NEXT: @ kill: def $d0 killed $d0 killed $q02694; BE-I64-NEXT: bl lrint2695; BE-I64-NEXT: add lr, sp, #82696; BE-I64-NEXT: vmov.32 d13[1], r62697; BE-I64-NEXT: vldmia lr, {d16, d17} @ 16-byte Reload2698; BE-I64-NEXT: vmov.32 d15[1], r42699; BE-I64-NEXT: vmov.32 d16[0], r02700; BE-I64-NEXT: vmov.32 d11[1], r102701; BE-I64-NEXT: vmov.32 d17[1], r82702; BE-I64-NEXT: vmov.32 d12[1], r52703; BE-I64-NEXT: vmov.32 d14[1], r72704; BE-I64-NEXT: vmov.32 d10[1], r92705; BE-I64-NEXT: vmov.32 d16[1], r12706; BE-I64-NEXT: vrev64.32 q0, q62707; BE-I64-NEXT: vrev64.32 q1, q72708; BE-I64-NEXT: vrev64.32 q2, q52709; BE-I64-NEXT: vrev64.32 q3, q82710; BE-I64-NEXT: add sp, sp, #402711; BE-I64-NEXT: vpop {d8, d9, d10, d11, d12, d13, d14, d15}2712; BE-I64-NEXT: pop {r4, r5, r6, r7, r8, r9, r10, pc}2713 %a = call <8 x iXLen> @llvm.lrint.v8iXLen.v8f64(<8 x double> %x)2714 ret <8 x iXLen> %a2715}2716 2717define <16 x iXLen> @lrint_v16f64(<16 x double> %x) {2718; LE-I32-LABEL: lrint_v16f64:2719; LE-I32: @ %bb.0:2720; LE-I32-NEXT: .save {r4, r5, r6, lr}2721; LE-I32-NEXT: push {r4, r5, r6, lr}2722; LE-I32-NEXT: .vsave {d8, d9, d10, d11, d12, d13, d14, d15}2723; LE-I32-NEXT: vpush {d8, d9, d10, d11, d12, d13, d14, d15}2724; LE-I32-NEXT: .pad #1282725; LE-I32-NEXT: sub sp, sp, #1282726; LE-I32-NEXT: add lr, sp, #802727; LE-I32-NEXT: add r0, sp, #2402728; LE-I32-NEXT: vld1.64 {d16, d17}, [r0]2729; LE-I32-NEXT: add r0, sp, #2082730; LE-I32-NEXT: vorr q6, q0, q02731; LE-I32-NEXT: vstmia lr, {d6, d7} @ 16-byte Spill2732; LE-I32-NEXT: add lr, sp, #322733; LE-I32-NEXT: vorr q5, q1, q12734; LE-I32-NEXT: vstmia lr, {d4, d5} @ 16-byte Spill2735; LE-I32-NEXT: add lr, sp, #162736; LE-I32-NEXT: vstmia lr, {d0, d1} @ 16-byte Spill2737; LE-I32-NEXT: add lr, sp, #642738; LE-I32-NEXT: vorr d0, d4, d42739; LE-I32-NEXT: vstmia lr, {d16, d17} @ 16-byte Spill2740; LE-I32-NEXT: add lr, sp, #1122741; LE-I32-NEXT: vld1.64 {d16, d17}, [r0]2742; LE-I32-NEXT: add r0, sp, #2242743; LE-I32-NEXT: vstmia lr, {d16, d17} @ 16-byte Spill2744; LE-I32-NEXT: add lr, sp, #962745; LE-I32-NEXT: vld1.64 {d16, d17}, [r0]2746; LE-I32-NEXT: add r0, sp, #2562747; LE-I32-NEXT: vstmia lr, {d16, d17} @ 16-byte Spill2748; LE-I32-NEXT: add lr, sp, #482749; LE-I32-NEXT: vld1.64 {d14, d15}, [r0]2750; LE-I32-NEXT: vstmia sp, {d2, d3} @ 16-byte Spill2751; LE-I32-NEXT: vstmia lr, {d14, d15} @ 16-byte Spill2752; LE-I32-NEXT: bl lrint2753; LE-I32-NEXT: vorr d0, d12, d122754; LE-I32-NEXT: vmov.32 d8[0], r02755; LE-I32-NEXT: bl lrint2756; LE-I32-NEXT: vorr d0, d10, d102757; LE-I32-NEXT: vmov.32 d12[0], r02758; LE-I32-NEXT: bl lrint2759; LE-I32-NEXT: vorr d0, d14, d142760; LE-I32-NEXT: vmov.32 d13[0], r02761; LE-I32-NEXT: bl lrint2762; LE-I32-NEXT: add lr, sp, #642763; LE-I32-NEXT: mov r4, r02764; LE-I32-NEXT: vldmia lr, {d0, d1} @ 16-byte Reload2765; LE-I32-NEXT: @ kill: def $d0 killed $d0 killed $q02766; LE-I32-NEXT: bl lrint2767; LE-I32-NEXT: add lr, sp, #802768; LE-I32-NEXT: vmov.32 d14[0], r02769; LE-I32-NEXT: vldmia lr, {d0, d1} @ 16-byte Reload2770; LE-I32-NEXT: @ kill: def $d0 killed $d0 killed $q02771; LE-I32-NEXT: bl lrint2772; LE-I32-NEXT: add lr, sp, #1122773; LE-I32-NEXT: vmov.32 d9[0], r02774; LE-I32-NEXT: vldmia lr, {d0, d1} @ 16-byte Reload2775; LE-I32-NEXT: @ kill: def $d0 killed $d0 killed $q02776; LE-I32-NEXT: vmov.32 d15[0], r42777; LE-I32-NEXT: bl lrint2778; LE-I32-NEXT: vldmia sp, {d16, d17} @ 16-byte Reload2779; LE-I32-NEXT: vorr d0, d17, d172780; LE-I32-NEXT: vmov.32 d10[0], r02781; LE-I32-NEXT: bl lrint2782; LE-I32-NEXT: add lr, sp, #962783; LE-I32-NEXT: vmov.32 d13[1], r02784; LE-I32-NEXT: vldmia lr, {d0, d1} @ 16-byte Reload2785; LE-I32-NEXT: @ kill: def $d0 killed $d0 killed $q02786; LE-I32-NEXT: bl lrint2787; LE-I32-NEXT: add lr, sp, #162788; LE-I32-NEXT: vmov.32 d11[0], r02789; LE-I32-NEXT: vldmia lr, {d16, d17} @ 16-byte Reload2790; LE-I32-NEXT: vorr d0, d17, d172791; LE-I32-NEXT: bl lrint2792; LE-I32-NEXT: add lr, sp, #802793; LE-I32-NEXT: vmov.32 d12[1], r02794; LE-I32-NEXT: vldmia lr, {d16, d17} @ 16-byte Reload2795; LE-I32-NEXT: vorr d0, d17, d172796; LE-I32-NEXT: bl lrint2797; LE-I32-NEXT: add lr, sp, #322798; LE-I32-NEXT: vmov.32 d9[1], r02799; LE-I32-NEXT: vldmia lr, {d16, d17} @ 16-byte Reload2800; LE-I32-NEXT: vorr d0, d17, d172801; LE-I32-NEXT: bl lrint2802; LE-I32-NEXT: add lr, sp, #962803; LE-I32-NEXT: vmov.32 d8[1], r02804; LE-I32-NEXT: vldmia lr, {d16, d17} @ 16-byte Reload2805; LE-I32-NEXT: vorr d0, d17, d172806; LE-I32-NEXT: bl lrint2807; LE-I32-NEXT: add lr, sp, #1122808; LE-I32-NEXT: vmov.32 d11[1], r02809; LE-I32-NEXT: vldmia lr, {d16, d17} @ 16-byte Reload2810; LE-I32-NEXT: vorr d0, d17, d172811; LE-I32-NEXT: bl lrint2812; LE-I32-NEXT: add lr, sp, #482813; LE-I32-NEXT: vmov.32 d10[1], r02814; LE-I32-NEXT: vldmia lr, {d16, d17} @ 16-byte Reload2815; LE-I32-NEXT: vorr d0, d17, d172816; LE-I32-NEXT: bl lrint2817; LE-I32-NEXT: add lr, sp, #642818; LE-I32-NEXT: vmov.32 d15[1], r02819; LE-I32-NEXT: vldmia lr, {d16, d17} @ 16-byte Reload2820; LE-I32-NEXT: vorr d0, d17, d172821; LE-I32-NEXT: bl lrint2822; LE-I32-NEXT: vmov.32 d14[1], r02823; LE-I32-NEXT: vorr q0, q6, q62824; LE-I32-NEXT: vorr q1, q4, q42825; LE-I32-NEXT: vorr q2, q5, q52826; LE-I32-NEXT: vorr q3, q7, q72827; LE-I32-NEXT: add sp, sp, #1282828; LE-I32-NEXT: vpop {d8, d9, d10, d11, d12, d13, d14, d15}2829; LE-I32-NEXT: pop {r4, r5, r6, pc}2830;2831; LE-I64-LABEL: lrint_v16f64:2832; LE-I64: @ %bb.0:2833; LE-I64-NEXT: .save {r4, r5, r6, r7, r8, r9, r10, r11, lr}2834; LE-I64-NEXT: push {r4, r5, r6, r7, r8, r9, r10, r11, lr}2835; LE-I64-NEXT: .pad #42836; LE-I64-NEXT: sub sp, sp, #42837; LE-I64-NEXT: .vsave {d8, d9, d10, d11, d12, d13, d14, d15}2838; LE-I64-NEXT: vpush {d8, d9, d10, d11, d12, d13, d14, d15}2839; LE-I64-NEXT: .pad #1762840; LE-I64-NEXT: sub sp, sp, #1762841; LE-I64-NEXT: add lr, sp, #402842; LE-I64-NEXT: str r0, [sp, #140] @ 4-byte Spill2843; LE-I64-NEXT: add r0, sp, #3122844; LE-I64-NEXT: vorr q6, q2, q22845; LE-I64-NEXT: vstmia lr, {d6, d7} @ 16-byte Spill2846; LE-I64-NEXT: add lr, sp, #962847; LE-I64-NEXT: vorr q7, q1, q12848; LE-I64-NEXT: vstmia lr, {d0, d1} @ 16-byte Spill2849; LE-I64-NEXT: add lr, sp, #1442850; LE-I64-NEXT: vorr d0, d1, d12851; LE-I64-NEXT: vld1.64 {d16, d17}, [r0]2852; LE-I64-NEXT: add r0, sp, #2802853; LE-I64-NEXT: vstmia lr, {d16, d17} @ 16-byte Spill2854; LE-I64-NEXT: add lr, sp, #802855; LE-I64-NEXT: vld1.64 {d16, d17}, [r0]2856; LE-I64-NEXT: add r0, sp, #2962857; LE-I64-NEXT: vstmia lr, {d16, d17} @ 16-byte Spill2858; LE-I64-NEXT: add lr, sp, #1202859; LE-I64-NEXT: vld1.64 {d16, d17}, [r0]2860; LE-I64-NEXT: add r0, sp, #3282861; LE-I64-NEXT: vstmia lr, {d16, d17} @ 16-byte Spill2862; LE-I64-NEXT: add lr, sp, #562863; LE-I64-NEXT: vld1.64 {d16, d17}, [r0]2864; LE-I64-NEXT: vstmia lr, {d16, d17} @ 16-byte Spill2865; LE-I64-NEXT: bl lrint2866; LE-I64-NEXT: vorr d0, d14, d142867; LE-I64-NEXT: str r1, [sp, #116] @ 4-byte Spill2868; LE-I64-NEXT: vmov.32 d11[0], r02869; LE-I64-NEXT: bl lrint2870; LE-I64-NEXT: vorr d0, d15, d152871; LE-I64-NEXT: str r1, [sp, #76] @ 4-byte Spill2872; LE-I64-NEXT: vmov.32 d8[0], r02873; LE-I64-NEXT: bl lrint2874; LE-I64-NEXT: vorr d0, d12, d122875; LE-I64-NEXT: add lr, sp, #1602876; LE-I64-NEXT: vmov.32 d9[0], r02877; LE-I64-NEXT: str r1, [sp, #72] @ 4-byte Spill2878; LE-I64-NEXT: vstmia lr, {d8, d9} @ 16-byte Spill2879; LE-I64-NEXT: bl lrint2880; LE-I64-NEXT: vorr d0, d13, d132881; LE-I64-NEXT: mov r6, r12882; LE-I64-NEXT: vmov.32 d14[0], r02883; LE-I64-NEXT: bl lrint2884; LE-I64-NEXT: add lr, sp, #402885; LE-I64-NEXT: mov r4, r12886; LE-I64-NEXT: vmov.32 d15[0], r02887; LE-I64-NEXT: vldmia lr, {d8, d9} @ 16-byte Reload2888; LE-I64-NEXT: vorr d0, d8, d82889; LE-I64-NEXT: bl lrint2890; LE-I64-NEXT: vorr d0, d9, d92891; LE-I64-NEXT: mov r7, r12892; LE-I64-NEXT: vmov.32 d12[0], r02893; LE-I64-NEXT: bl lrint2894; LE-I64-NEXT: add lr, sp, #962895; LE-I64-NEXT: mov r5, r12896; LE-I64-NEXT: vmov.32 d13[0], r02897; LE-I64-NEXT: vldmia lr, {d0, d1} @ 16-byte Reload2898; LE-I64-NEXT: @ kill: def $d0 killed $d0 killed $q02899; LE-I64-NEXT: bl lrint2900; LE-I64-NEXT: vmov.32 d10[0], r02901; LE-I64-NEXT: add lr, sp, #402902; LE-I64-NEXT: mov r10, r12903; LE-I64-NEXT: vmov.32 d13[1], r52904; LE-I64-NEXT: vstmia lr, {d10, d11} @ 16-byte Spill2905; LE-I64-NEXT: add lr, sp, #562906; LE-I64-NEXT: vldmia lr, {d8, d9} @ 16-byte Reload2907; LE-I64-NEXT: vorr d0, d9, d92908; LE-I64-NEXT: bl lrint2909; LE-I64-NEXT: vorr d0, d8, d82910; LE-I64-NEXT: vmov.32 d12[1], r72911; LE-I64-NEXT: add lr, sp, #962912; LE-I64-NEXT: mov r9, r12913; LE-I64-NEXT: vmov.32 d11[0], r02914; LE-I64-NEXT: vstmia lr, {d12, d13} @ 16-byte Spill2915; LE-I64-NEXT: bl lrint2916; LE-I64-NEXT: vmov.32 d10[0], r02917; LE-I64-NEXT: add lr, sp, #242918; LE-I64-NEXT: mov r11, r12919; LE-I64-NEXT: vmov.32 d15[1], r42920; LE-I64-NEXT: vstmia lr, {d10, d11} @ 16-byte Spill2921; LE-I64-NEXT: add lr, sp, #1442922; LE-I64-NEXT: vldmia lr, {d16, d17} @ 16-byte Reload2923; LE-I64-NEXT: vorr d0, d17, d172924; LE-I64-NEXT: bl lrint2925; LE-I64-NEXT: add lr, sp, #82926; LE-I64-NEXT: vmov.32 d14[1], r62927; LE-I64-NEXT: mov r8, r12928; LE-I64-NEXT: vmov.32 d17[0], r02929; LE-I64-NEXT: vstmia lr, {d16, d17} @ 16-byte Spill2930; LE-I64-NEXT: add lr, sp, #562931; LE-I64-NEXT: vstmia lr, {d14, d15} @ 16-byte Spill2932; LE-I64-NEXT: add lr, sp, #802933; LE-I64-NEXT: vldmia lr, {d10, d11} @ 16-byte Reload2934; LE-I64-NEXT: vorr d0, d11, d112935; LE-I64-NEXT: bl lrint2936; LE-I64-NEXT: vmov.32 d15[0], r02937; LE-I64-NEXT: add lr, sp, #1602938; LE-I64-NEXT: vorr d0, d10, d102939; LE-I64-NEXT: ldr r0, [sp, #72] @ 4-byte Reload2940; LE-I64-NEXT: vldmia lr, {d8, d9} @ 16-byte Reload2941; LE-I64-NEXT: mov r6, r12942; LE-I64-NEXT: vmov.32 d9[1], r02943; LE-I64-NEXT: bl lrint2944; LE-I64-NEXT: vmov.32 d14[0], r02945; LE-I64-NEXT: ldr r0, [sp, #76] @ 4-byte Reload2946; LE-I64-NEXT: add lr, sp, #1602947; LE-I64-NEXT: mov r4, r12948; LE-I64-NEXT: vmov.32 d8[1], r02949; LE-I64-NEXT: vstmia lr, {d8, d9} @ 16-byte Spill2950; LE-I64-NEXT: add lr, sp, #1202951; LE-I64-NEXT: vldmia lr, {d10, d11} @ 16-byte Reload2952; LE-I64-NEXT: vorr d0, d11, d112953; LE-I64-NEXT: bl lrint2954; LE-I64-NEXT: vmov.32 d13[0], r02955; LE-I64-NEXT: add lr, sp, #402956; LE-I64-NEXT: vorr d0, d10, d102957; LE-I64-NEXT: ldr r0, [sp, #116] @ 4-byte Reload2958; LE-I64-NEXT: vldmia lr, {d8, d9} @ 16-byte Reload2959; LE-I64-NEXT: mov r5, r12960; LE-I64-NEXT: vmov.32 d9[1], r02961; LE-I64-NEXT: bl lrint2962; LE-I64-NEXT: add lr, sp, #1442963; LE-I64-NEXT: mov r7, r12964; LE-I64-NEXT: vmov.32 d12[0], r02965; LE-I64-NEXT: vldmia lr, {d0, d1} @ 16-byte Reload2966; LE-I64-NEXT: @ kill: def $d0 killed $d0 killed $q02967; LE-I64-NEXT: vmov.32 d8[1], r102968; LE-I64-NEXT: bl lrint2969; LE-I64-NEXT: add lr, sp, #82970; LE-I64-NEXT: vmov.32 d15[1], r62971; LE-I64-NEXT: vldmia lr, {d20, d21} @ 16-byte Reload2972; LE-I64-NEXT: add lr, sp, #242973; LE-I64-NEXT: vldmia lr, {d16, d17} @ 16-byte Reload2974; LE-I64-NEXT: add lr, sp, #1602975; LE-I64-NEXT: vmov.32 d20[0], r02976; LE-I64-NEXT: vmov.32 d21[1], r82977; LE-I64-NEXT: vmov.32 d20[1], r12978; LE-I64-NEXT: ldr r1, [sp, #140] @ 4-byte Reload2979; LE-I64-NEXT: vmov.32 d13[1], r52980; LE-I64-NEXT: mov r0, r12981; LE-I64-NEXT: vst1.64 {d8, d9}, [r0:128]!2982; LE-I64-NEXT: vldmia lr, {d18, d19} @ 16-byte Reload2983; LE-I64-NEXT: add lr, sp, #562984; LE-I64-NEXT: vmov.32 d14[1], r42985; LE-I64-NEXT: vst1.64 {d18, d19}, [r0:128]!2986; LE-I64-NEXT: vldmia lr, {d18, d19} @ 16-byte Reload2987; LE-I64-NEXT: add lr, sp, #962988; LE-I64-NEXT: vmov.32 d12[1], r72989; LE-I64-NEXT: vst1.64 {d18, d19}, [r0:128]!2990; LE-I64-NEXT: vldmia lr, {d18, d19} @ 16-byte Reload2991; LE-I64-NEXT: vmov.32 d17[1], r92992; LE-I64-NEXT: vst1.64 {d18, d19}, [r0:128]2993; LE-I64-NEXT: add r0, r1, #642994; LE-I64-NEXT: vst1.64 {d14, d15}, [r0:128]!2995; LE-I64-NEXT: vst1.64 {d12, d13}, [r0:128]!2996; LE-I64-NEXT: vmov.32 d16[1], r112997; LE-I64-NEXT: vst1.64 {d20, d21}, [r0:128]!2998; LE-I64-NEXT: vst1.64 {d16, d17}, [r0:128]2999; LE-I64-NEXT: add sp, sp, #1763000; LE-I64-NEXT: vpop {d8, d9, d10, d11, d12, d13, d14, d15}3001; LE-I64-NEXT: add sp, sp, #43002; LE-I64-NEXT: pop {r4, r5, r6, r7, r8, r9, r10, r11, pc}3003;3004; BE-I32-LABEL: lrint_v16f64:3005; BE-I32: @ %bb.0:3006; BE-I32-NEXT: .save {r4, r5, r6, lr}3007; BE-I32-NEXT: push {r4, r5, r6, lr}3008; BE-I32-NEXT: .vsave {d8, d9, d10, d11, d12, d13, d14, d15}3009; BE-I32-NEXT: vpush {d8, d9, d10, d11, d12, d13, d14, d15}3010; BE-I32-NEXT: .pad #1283011; BE-I32-NEXT: sub sp, sp, #1283012; BE-I32-NEXT: add lr, sp, #643013; BE-I32-NEXT: add r0, sp, #2403014; BE-I32-NEXT: vld1.64 {d16, d17}, [r0]3015; BE-I32-NEXT: add r0, sp, #2243016; BE-I32-NEXT: vorr q6, q3, q33017; BE-I32-NEXT: vstmia lr, {d4, d5} @ 16-byte Spill3018; BE-I32-NEXT: add lr, sp, #163019; BE-I32-NEXT: vorr q5, q1, q13020; BE-I32-NEXT: vstmia lr, {d2, d3} @ 16-byte Spill3021; BE-I32-NEXT: add lr, sp, #323022; BE-I32-NEXT: vstmia lr, {d0, d1} @ 16-byte Spill3023; BE-I32-NEXT: add lr, sp, #803024; BE-I32-NEXT: @ kill: def $d0 killed $d0 killed $q03025; BE-I32-NEXT: vstmia lr, {d16, d17} @ 16-byte Spill3026; BE-I32-NEXT: add lr, sp, #1123027; BE-I32-NEXT: vld1.64 {d16, d17}, [r0]3028; BE-I32-NEXT: add r0, sp, #2563029; BE-I32-NEXT: vstmia lr, {d16, d17} @ 16-byte Spill3030; BE-I32-NEXT: add lr, sp, #963031; BE-I32-NEXT: vld1.64 {d16, d17}, [r0]3032; BE-I32-NEXT: add r0, sp, #2083033; BE-I32-NEXT: vstmia lr, {d16, d17} @ 16-byte Spill3034; BE-I32-NEXT: add lr, sp, #483035; BE-I32-NEXT: vld1.64 {d14, d15}, [r0]3036; BE-I32-NEXT: vstmia sp, {d6, d7} @ 16-byte Spill3037; BE-I32-NEXT: vstmia lr, {d14, d15} @ 16-byte Spill3038; BE-I32-NEXT: bl lrint3039; BE-I32-NEXT: vorr d0, d10, d103040; BE-I32-NEXT: vmov.32 d8[0], r03041; BE-I32-NEXT: bl lrint3042; BE-I32-NEXT: vorr d0, d12, d123043; BE-I32-NEXT: vmov.32 d9[0], r03044; BE-I32-NEXT: bl lrint3045; BE-I32-NEXT: vorr d0, d14, d143046; BE-I32-NEXT: vmov.32 d11[0], r03047; BE-I32-NEXT: bl lrint3048; BE-I32-NEXT: add lr, sp, #803049; BE-I32-NEXT: mov r4, r03050; BE-I32-NEXT: vldmia lr, {d0, d1} @ 16-byte Reload3051; BE-I32-NEXT: @ kill: def $d0 killed $d0 killed $q03052; BE-I32-NEXT: bl lrint3053; BE-I32-NEXT: add lr, sp, #643054; BE-I32-NEXT: vmov.32 d12[0], r03055; BE-I32-NEXT: vldmia lr, {d0, d1} @ 16-byte Reload3056; BE-I32-NEXT: @ kill: def $d0 killed $d0 killed $q03057; BE-I32-NEXT: bl lrint3058; BE-I32-NEXT: add lr, sp, #1123059; BE-I32-NEXT: vmov.32 d10[0], r03060; BE-I32-NEXT: vldmia lr, {d0, d1} @ 16-byte Reload3061; BE-I32-NEXT: @ kill: def $d0 killed $d0 killed $q03062; BE-I32-NEXT: vmov.32 d14[0], r43063; BE-I32-NEXT: bl lrint3064; BE-I32-NEXT: vldmia sp, {d16, d17} @ 16-byte Reload3065; BE-I32-NEXT: vorr d0, d17, d173066; BE-I32-NEXT: vmov.32 d15[0], r03067; BE-I32-NEXT: bl lrint3068; BE-I32-NEXT: add lr, sp, #963069; BE-I32-NEXT: vmov.32 d11[1], r03070; BE-I32-NEXT: vldmia lr, {d0, d1} @ 16-byte Reload3071; BE-I32-NEXT: @ kill: def $d0 killed $d0 killed $q03072; BE-I32-NEXT: bl lrint3073; BE-I32-NEXT: add lr, sp, #643074; BE-I32-NEXT: vmov.32 d13[0], r03075; BE-I32-NEXT: vldmia lr, {d16, d17} @ 16-byte Reload3076; BE-I32-NEXT: vorr d0, d17, d173077; BE-I32-NEXT: bl lrint3078; BE-I32-NEXT: add lr, sp, #163079; BE-I32-NEXT: vmov.32 d10[1], r03080; BE-I32-NEXT: vldmia lr, {d16, d17} @ 16-byte Reload3081; BE-I32-NEXT: vorr d0, d17, d173082; BE-I32-NEXT: bl lrint3083; BE-I32-NEXT: add lr, sp, #323084; BE-I32-NEXT: vmov.32 d9[1], r03085; BE-I32-NEXT: vldmia lr, {d16, d17} @ 16-byte Reload3086; BE-I32-NEXT: vorr d0, d17, d173087; BE-I32-NEXT: bl lrint3088; BE-I32-NEXT: add lr, sp, #963089; BE-I32-NEXT: vmov.32 d8[1], r03090; BE-I32-NEXT: vldmia lr, {d16, d17} @ 16-byte Reload3091; BE-I32-NEXT: vorr d0, d17, d173092; BE-I32-NEXT: bl lrint3093; BE-I32-NEXT: add lr, sp, #1123094; BE-I32-NEXT: vmov.32 d13[1], r03095; BE-I32-NEXT: vldmia lr, {d16, d17} @ 16-byte Reload3096; BE-I32-NEXT: vorr d0, d17, d173097; BE-I32-NEXT: bl lrint3098; BE-I32-NEXT: add lr, sp, #483099; BE-I32-NEXT: vmov.32 d15[1], r03100; BE-I32-NEXT: vldmia lr, {d16, d17} @ 16-byte Reload3101; BE-I32-NEXT: vorr d0, d17, d173102; BE-I32-NEXT: bl lrint3103; BE-I32-NEXT: add lr, sp, #803104; BE-I32-NEXT: vmov.32 d14[1], r03105; BE-I32-NEXT: vldmia lr, {d16, d17} @ 16-byte Reload3106; BE-I32-NEXT: vorr d0, d17, d173107; BE-I32-NEXT: bl lrint3108; BE-I32-NEXT: vmov.32 d12[1], r03109; BE-I32-NEXT: vrev64.32 q0, q43110; BE-I32-NEXT: vrev64.32 q1, q53111; BE-I32-NEXT: vrev64.32 q2, q73112; BE-I32-NEXT: vrev64.32 q3, q63113; BE-I32-NEXT: add sp, sp, #1283114; BE-I32-NEXT: vpop {d8, d9, d10, d11, d12, d13, d14, d15}3115; BE-I32-NEXT: pop {r4, r5, r6, pc}3116;3117; BE-I64-LABEL: lrint_v16f64:3118; BE-I64: @ %bb.0:3119; BE-I64-NEXT: .save {r4, r5, r6, r7, r8, r9, r10, r11, lr}3120; BE-I64-NEXT: push {r4, r5, r6, r7, r8, r9, r10, r11, lr}3121; BE-I64-NEXT: .pad #43122; BE-I64-NEXT: sub sp, sp, #43123; BE-I64-NEXT: .vsave {d8, d9, d10, d11, d12, d13, d14, d15}3124; BE-I64-NEXT: vpush {d8, d9, d10, d11, d12, d13, d14, d15}3125; BE-I64-NEXT: .pad #1683126; BE-I64-NEXT: sub sp, sp, #1683127; BE-I64-NEXT: add lr, sp, #643128; BE-I64-NEXT: str r0, [sp, #132] @ 4-byte Spill3129; BE-I64-NEXT: add r0, sp, #3043130; BE-I64-NEXT: vorr q4, q3, q33131; BE-I64-NEXT: vstmia lr, {d0, d1} @ 16-byte Spill3132; BE-I64-NEXT: add lr, sp, #483133; BE-I64-NEXT: vorr d0, d1, d13134; BE-I64-NEXT: vld1.64 {d16, d17}, [r0]3135; BE-I64-NEXT: add r0, sp, #3203136; BE-I64-NEXT: vorr q6, q2, q23137; BE-I64-NEXT: vstmia lr, {d16, d17} @ 16-byte Spill3138; BE-I64-NEXT: add lr, sp, #883139; BE-I64-NEXT: vorr q7, q1, q13140; BE-I64-NEXT: vld1.64 {d16, d17}, [r0]3141; BE-I64-NEXT: add r0, sp, #2723142; BE-I64-NEXT: vstmia lr, {d16, d17} @ 16-byte Spill3143; BE-I64-NEXT: add lr, sp, #1123144; BE-I64-NEXT: vld1.64 {d16, d17}, [r0]3145; BE-I64-NEXT: add r0, sp, #2883146; BE-I64-NEXT: vstmia lr, {d16, d17} @ 16-byte Spill3147; BE-I64-NEXT: add lr, sp, #243148; BE-I64-NEXT: vld1.64 {d16, d17}, [r0]3149; BE-I64-NEXT: vstmia lr, {d16, d17} @ 16-byte Spill3150; BE-I64-NEXT: bl lrint3151; BE-I64-NEXT: vorr d0, d14, d143152; BE-I64-NEXT: add lr, sp, #1363153; BE-I64-NEXT: vmov.32 d17[0], r03154; BE-I64-NEXT: str r1, [sp, #108] @ 4-byte Spill3155; BE-I64-NEXT: vstmia lr, {d16, d17} @ 16-byte Spill3156; BE-I64-NEXT: bl lrint3157; BE-I64-NEXT: vorr d0, d15, d153158; BE-I64-NEXT: str r1, [sp, #84] @ 4-byte Spill3159; BE-I64-NEXT: vmov.32 d10[0], r03160; BE-I64-NEXT: bl lrint3161; BE-I64-NEXT: vorr d0, d12, d123162; BE-I64-NEXT: add lr, sp, #1523163; BE-I64-NEXT: vmov.32 d11[0], r03164; BE-I64-NEXT: str r1, [sp, #44] @ 4-byte Spill3165; BE-I64-NEXT: vstmia lr, {d10, d11} @ 16-byte Spill3166; BE-I64-NEXT: bl lrint3167; BE-I64-NEXT: vorr d0, d13, d133168; BE-I64-NEXT: mov r6, r13169; BE-I64-NEXT: vmov.32 d10[0], r03170; BE-I64-NEXT: bl lrint3171; BE-I64-NEXT: vorr d0, d8, d83172; BE-I64-NEXT: mov r4, r13173; BE-I64-NEXT: vmov.32 d11[0], r03174; BE-I64-NEXT: bl lrint3175; BE-I64-NEXT: vorr d0, d9, d93176; BE-I64-NEXT: mov r7, r13177; BE-I64-NEXT: vmov.32 d12[0], r03178; BE-I64-NEXT: bl lrint3179; BE-I64-NEXT: add lr, sp, #643180; BE-I64-NEXT: mov r5, r13181; BE-I64-NEXT: vmov.32 d13[0], r03182; BE-I64-NEXT: vldmia lr, {d0, d1} @ 16-byte Reload3183; BE-I64-NEXT: @ kill: def $d0 killed $d0 killed $q03184; BE-I64-NEXT: bl lrint3185; BE-I64-NEXT: add lr, sp, #1363186; BE-I64-NEXT: mov r9, r13187; BE-I64-NEXT: vmov.32 d13[1], r53188; BE-I64-NEXT: vldmia lr, {d16, d17} @ 16-byte Reload3189; BE-I64-NEXT: vmov.32 d16[0], r03190; BE-I64-NEXT: vstmia lr, {d16, d17} @ 16-byte Spill3191; BE-I64-NEXT: add lr, sp, #243192; BE-I64-NEXT: vldmia lr, {d8, d9} @ 16-byte Reload3193; BE-I64-NEXT: vorr d0, d9, d93194; BE-I64-NEXT: bl lrint3195; BE-I64-NEXT: vorr d0, d8, d83196; BE-I64-NEXT: vmov.32 d12[1], r73197; BE-I64-NEXT: add lr, sp, #643198; BE-I64-NEXT: mov r10, r13199; BE-I64-NEXT: vmov.32 d15[0], r03200; BE-I64-NEXT: vstmia lr, {d12, d13} @ 16-byte Spill3201; BE-I64-NEXT: bl lrint3202; BE-I64-NEXT: vmov.32 d14[0], r03203; BE-I64-NEXT: add lr, sp, #83204; BE-I64-NEXT: mov r11, r13205; BE-I64-NEXT: vmov.32 d11[1], r43206; BE-I64-NEXT: vstmia lr, {d14, d15} @ 16-byte Spill3207; BE-I64-NEXT: add lr, sp, #483208; BE-I64-NEXT: vorr q6, q5, q53209; BE-I64-NEXT: vldmia lr, {d8, d9} @ 16-byte Reload3210; BE-I64-NEXT: vorr d0, d9, d93211; BE-I64-NEXT: bl lrint3212; BE-I64-NEXT: vorr d0, d8, d83213; BE-I64-NEXT: vmov.32 d12[1], r63214; BE-I64-NEXT: add lr, sp, #243215; BE-I64-NEXT: mov r8, r13216; BE-I64-NEXT: vmov.32 d11[0], r03217; BE-I64-NEXT: vstmia lr, {d12, d13} @ 16-byte Spill3218; BE-I64-NEXT: bl lrint3219; BE-I64-NEXT: vmov.32 d10[0], r03220; BE-I64-NEXT: add lr, sp, #483221; BE-I64-NEXT: ldr r0, [sp, #44] @ 4-byte Reload3222; BE-I64-NEXT: mov r6, r13223; BE-I64-NEXT: vstmia lr, {d10, d11} @ 16-byte Spill3224; BE-I64-NEXT: add lr, sp, #1523225; BE-I64-NEXT: vldmia lr, {d8, d9} @ 16-byte Reload3226; BE-I64-NEXT: add lr, sp, #883227; BE-I64-NEXT: vldmia lr, {d12, d13} @ 16-byte Reload3228; BE-I64-NEXT: vorr d0, d13, d133229; BE-I64-NEXT: vmov.32 d9[1], r03230; BE-I64-NEXT: bl lrint3231; BE-I64-NEXT: vmov.32 d15[0], r03232; BE-I64-NEXT: ldr r0, [sp, #84] @ 4-byte Reload3233; BE-I64-NEXT: vorr d0, d12, d123234; BE-I64-NEXT: add lr, sp, #1523235; BE-I64-NEXT: mov r4, r13236; BE-I64-NEXT: vmov.32 d8[1], r03237; BE-I64-NEXT: vstmia lr, {d8, d9} @ 16-byte Spill3238; BE-I64-NEXT: bl lrint3239; BE-I64-NEXT: add lr, sp, #1363240; BE-I64-NEXT: vmov.32 d14[0], r03241; BE-I64-NEXT: ldr r0, [sp, #108] @ 4-byte Reload3242; BE-I64-NEXT: mov r5, r13243; BE-I64-NEXT: vldmia lr, {d10, d11} @ 16-byte Reload3244; BE-I64-NEXT: add lr, sp, #1123245; BE-I64-NEXT: vldmia lr, {d8, d9} @ 16-byte Reload3246; BE-I64-NEXT: vorr d0, d9, d93247; BE-I64-NEXT: vmov.32 d11[1], r03248; BE-I64-NEXT: bl lrint3249; BE-I64-NEXT: vorr d0, d8, d83250; BE-I64-NEXT: mov r7, r13251; BE-I64-NEXT: vmov.32 d13[0], r03252; BE-I64-NEXT: vmov.32 d10[1], r93253; BE-I64-NEXT: bl lrint3254; BE-I64-NEXT: add lr, sp, #83255; BE-I64-NEXT: vmov.32 d12[0], r03256; BE-I64-NEXT: vldmia lr, {d16, d17} @ 16-byte Reload3257; BE-I64-NEXT: add lr, sp, #483258; BE-I64-NEXT: vmov.32 d17[1], r103259; BE-I64-NEXT: vmov.32 d16[1], r113260; BE-I64-NEXT: vorr q12, q8, q83261; BE-I64-NEXT: vldmia lr, {d16, d17} @ 16-byte Reload3262; BE-I64-NEXT: add lr, sp, #1523263; BE-I64-NEXT: vmov.32 d17[1], r83264; BE-I64-NEXT: vldmia lr, {d18, d19} @ 16-byte Reload3265; BE-I64-NEXT: add lr, sp, #243266; BE-I64-NEXT: vmov.32 d13[1], r73267; BE-I64-NEXT: vmov.32 d16[1], r63268; BE-I64-NEXT: vldmia lr, {d20, d21} @ 16-byte Reload3269; BE-I64-NEXT: add lr, sp, #643270; BE-I64-NEXT: vorr q13, q8, q83271; BE-I64-NEXT: vmov.32 d12[1], r13272; BE-I64-NEXT: ldr r1, [sp, #132] @ 4-byte Reload3273; BE-I64-NEXT: vrev64.32 q8, q53274; BE-I64-NEXT: mov r0, r13275; BE-I64-NEXT: vldmia lr, {d22, d23} @ 16-byte Reload3276; BE-I64-NEXT: vrev64.32 q9, q93277; BE-I64-NEXT: vrev64.32 q10, q103278; BE-I64-NEXT: vst1.64 {d16, d17}, [r0:128]!3279; BE-I64-NEXT: vst1.64 {d18, d19}, [r0:128]!3280; BE-I64-NEXT: vrev64.32 q11, q113281; BE-I64-NEXT: vmov.32 d15[1], r43282; BE-I64-NEXT: vst1.64 {d20, d21}, [r0:128]!3283; BE-I64-NEXT: vrev64.32 q15, q63284; BE-I64-NEXT: vmov.32 d14[1], r53285; BE-I64-NEXT: vrev64.32 q12, q123286; BE-I64-NEXT: vst1.64 {d22, d23}, [r0:128]3287; BE-I64-NEXT: add r0, r1, #643288; BE-I64-NEXT: vrev64.32 q13, q133289; BE-I64-NEXT: vst1.64 {d30, d31}, [r0:128]!3290; BE-I64-NEXT: vst1.64 {d24, d25}, [r0:128]!3291; BE-I64-NEXT: vrev64.32 q14, q73292; BE-I64-NEXT: vst1.64 {d26, d27}, [r0:128]!3293; BE-I64-NEXT: vst1.64 {d28, d29}, [r0:128]3294; BE-I64-NEXT: add sp, sp, #1683295; BE-I64-NEXT: vpop {d8, d9, d10, d11, d12, d13, d14, d15}3296; BE-I64-NEXT: add sp, sp, #43297; BE-I64-NEXT: pop {r4, r5, r6, r7, r8, r9, r10, r11, pc}3298 %a = call <16 x iXLen> @llvm.lrint.v16iXLen.v16f64(<16 x double> %x)3299 ret <16 x iXLen> %a3300}3301 3302define <1 x iXLen> @lrint_v1fp128(<1 x fp128> %x) {3303; LE-I32-LABEL: lrint_v1fp128:3304; LE-I32: @ %bb.0:3305; LE-I32-NEXT: .save {r11, lr}3306; LE-I32-NEXT: push {r11, lr}3307; LE-I32-NEXT: bl lrintl3308; LE-I32-NEXT: pop {r11, pc}3309;3310; LE-I64-LABEL: lrint_v1fp128:3311; LE-I64: @ %bb.0:3312; LE-I64-NEXT: .save {r11, lr}3313; LE-I64-NEXT: push {r11, lr}3314; LE-I64-NEXT: bl lrintl3315; LE-I64-NEXT: vmov.32 d0[0], r03316; LE-I64-NEXT: vmov.32 d0[1], r13317; LE-I64-NEXT: pop {r11, pc}3318;3319; BE-I32-LABEL: lrint_v1fp128:3320; BE-I32: @ %bb.0:3321; BE-I32-NEXT: .save {r11, lr}3322; BE-I32-NEXT: push {r11, lr}3323; BE-I32-NEXT: bl lrintl3324; BE-I32-NEXT: pop {r11, pc}3325;3326; BE-I64-LABEL: lrint_v1fp128:3327; BE-I64: @ %bb.0:3328; BE-I64-NEXT: .save {r11, lr}3329; BE-I64-NEXT: push {r11, lr}3330; BE-I64-NEXT: bl lrintl3331; BE-I64-NEXT: vmov.32 d16[0], r03332; BE-I64-NEXT: vmov.32 d16[1], r13333; BE-I64-NEXT: vrev64.32 d0, d163334; BE-I64-NEXT: pop {r11, pc}3335 %a = call <1 x iXLen> @llvm.lrint.v1iXLen.v1fp128(<1 x fp128> %x)3336 ret <1 x iXLen> %a3337}3338 3339define <2 x iXLen> @lrint_v2fp128(<2 x fp128> %x) {3340; LE-I32-LABEL: lrint_v2fp128:3341; LE-I32: @ %bb.0:3342; LE-I32-NEXT: .save {r4, r5, r6, r7, r8, lr}3343; LE-I32-NEXT: push {r4, r5, r6, r7, r8, lr}3344; LE-I32-NEXT: mov r8, r33345; LE-I32-NEXT: add r3, sp, #243346; LE-I32-NEXT: mov r5, r23347; LE-I32-NEXT: mov r6, r13348; LE-I32-NEXT: mov r7, r03349; LE-I32-NEXT: ldm r3, {r0, r1, r2, r3}3350; LE-I32-NEXT: bl lrintl3351; LE-I32-NEXT: mov r4, r03352; LE-I32-NEXT: mov r0, r73353; LE-I32-NEXT: mov r1, r63354; LE-I32-NEXT: mov r2, r53355; LE-I32-NEXT: mov r3, r83356; LE-I32-NEXT: bl lrintl3357; LE-I32-NEXT: vmov.32 d0[0], r03358; LE-I32-NEXT: vmov.32 d0[1], r43359; LE-I32-NEXT: pop {r4, r5, r6, r7, r8, pc}3360;3361; LE-I64-LABEL: lrint_v2fp128:3362; LE-I64: @ %bb.0:3363; LE-I64-NEXT: .save {r4, r5, r6, r7, r8, lr}3364; LE-I64-NEXT: push {r4, r5, r6, r7, r8, lr}3365; LE-I64-NEXT: .vsave {d8, d9}3366; LE-I64-NEXT: vpush {d8, d9}3367; LE-I64-NEXT: mov r8, r33368; LE-I64-NEXT: add r3, sp, #403369; LE-I64-NEXT: mov r5, r23370; LE-I64-NEXT: mov r6, r13371; LE-I64-NEXT: mov r7, r03372; LE-I64-NEXT: ldm r3, {r0, r1, r2, r3}3373; LE-I64-NEXT: bl lrintl3374; LE-I64-NEXT: mov r4, r13375; LE-I64-NEXT: vmov.32 d9[0], r03376; LE-I64-NEXT: mov r0, r73377; LE-I64-NEXT: mov r1, r63378; LE-I64-NEXT: mov r2, r53379; LE-I64-NEXT: mov r3, r83380; LE-I64-NEXT: bl lrintl3381; LE-I64-NEXT: vmov.32 d8[0], r03382; LE-I64-NEXT: vmov.32 d9[1], r43383; LE-I64-NEXT: vmov.32 d8[1], r13384; LE-I64-NEXT: vorr q0, q4, q43385; LE-I64-NEXT: vpop {d8, d9}3386; LE-I64-NEXT: pop {r4, r5, r6, r7, r8, pc}3387;3388; BE-I32-LABEL: lrint_v2fp128:3389; BE-I32: @ %bb.0:3390; BE-I32-NEXT: .save {r4, r5, r6, r7, r8, lr}3391; BE-I32-NEXT: push {r4, r5, r6, r7, r8, lr}3392; BE-I32-NEXT: mov r8, r33393; BE-I32-NEXT: add r3, sp, #243394; BE-I32-NEXT: mov r5, r23395; BE-I32-NEXT: mov r6, r13396; BE-I32-NEXT: mov r7, r03397; BE-I32-NEXT: ldm r3, {r0, r1, r2, r3}3398; BE-I32-NEXT: bl lrintl3399; BE-I32-NEXT: mov r4, r03400; BE-I32-NEXT: mov r0, r73401; BE-I32-NEXT: mov r1, r63402; BE-I32-NEXT: mov r2, r53403; BE-I32-NEXT: mov r3, r83404; BE-I32-NEXT: bl lrintl3405; BE-I32-NEXT: vmov.32 d16[0], r03406; BE-I32-NEXT: vmov.32 d16[1], r43407; BE-I32-NEXT: vrev64.32 d0, d163408; BE-I32-NEXT: pop {r4, r5, r6, r7, r8, pc}3409;3410; BE-I64-LABEL: lrint_v2fp128:3411; BE-I64: @ %bb.0:3412; BE-I64-NEXT: .save {r4, r5, r6, r7, r8, lr}3413; BE-I64-NEXT: push {r4, r5, r6, r7, r8, lr}3414; BE-I64-NEXT: .vsave {d8}3415; BE-I64-NEXT: vpush {d8}3416; BE-I64-NEXT: mov r8, r33417; BE-I64-NEXT: add r3, sp, #323418; BE-I64-NEXT: mov r5, r23419; BE-I64-NEXT: mov r6, r13420; BE-I64-NEXT: mov r7, r03421; BE-I64-NEXT: ldm r3, {r0, r1, r2, r3}3422; BE-I64-NEXT: bl lrintl3423; BE-I64-NEXT: mov r4, r13424; BE-I64-NEXT: vmov.32 d8[0], r03425; BE-I64-NEXT: mov r0, r73426; BE-I64-NEXT: mov r1, r63427; BE-I64-NEXT: mov r2, r53428; BE-I64-NEXT: mov r3, r83429; BE-I64-NEXT: bl lrintl3430; BE-I64-NEXT: vmov.32 d16[0], r03431; BE-I64-NEXT: vmov.32 d8[1], r43432; BE-I64-NEXT: vmov.32 d16[1], r13433; BE-I64-NEXT: vrev64.32 d1, d83434; BE-I64-NEXT: vrev64.32 d0, d163435; BE-I64-NEXT: vpop {d8}3436; BE-I64-NEXT: pop {r4, r5, r6, r7, r8, pc}3437 %a = call <2 x iXLen> @llvm.lrint.v2iXLen.v2fp128(<2 x fp128> %x)3438 ret <2 x iXLen> %a3439}3440 3441define <4 x iXLen> @lrint_v4fp128(<4 x fp128> %x) {3442; LE-I32-LABEL: lrint_v4fp128:3443; LE-I32: @ %bb.0:3444; LE-I32-NEXT: .save {r4, lr}3445; LE-I32-NEXT: push {r4, lr}3446; LE-I32-NEXT: .vsave {d8, d9}3447; LE-I32-NEXT: vpush {d8, d9}3448; LE-I32-NEXT: bl lrintl3449; LE-I32-NEXT: add r3, sp, #603450; LE-I32-NEXT: ldr r12, [sp, #56]3451; LE-I32-NEXT: vmov.32 d8[0], r03452; LE-I32-NEXT: ldm r3, {r1, r2, r3}3453; LE-I32-NEXT: mov r0, r123454; LE-I32-NEXT: bl lrintl3455; LE-I32-NEXT: add r3, sp, #403456; LE-I32-NEXT: mov r4, r03457; LE-I32-NEXT: ldm r3, {r0, r1, r2, r3}3458; LE-I32-NEXT: bl lrintl3459; LE-I32-NEXT: add r3, sp, #283460; LE-I32-NEXT: ldr r12, [sp, #24]3461; LE-I32-NEXT: vmov.32 d9[0], r03462; LE-I32-NEXT: ldm r3, {r1, r2, r3}3463; LE-I32-NEXT: mov r0, r123464; LE-I32-NEXT: vmov.32 d9[1], r43465; LE-I32-NEXT: bl lrintl3466; LE-I32-NEXT: vmov.32 d8[1], r03467; LE-I32-NEXT: vorr q0, q4, q43468; LE-I32-NEXT: vpop {d8, d9}3469; LE-I32-NEXT: pop {r4, pc}3470;3471; LE-I64-LABEL: lrint_v4fp128:3472; LE-I64: @ %bb.0:3473; LE-I64-NEXT: .save {r4, r5, r6, r7, r8, r9, r10, lr}3474; LE-I64-NEXT: push {r4, r5, r6, r7, r8, r9, r10, lr}3475; LE-I64-NEXT: .vsave {d8, d9, d10, d11}3476; LE-I64-NEXT: vpush {d8, d9, d10, d11}3477; LE-I64-NEXT: mov r5, r33478; LE-I64-NEXT: add r3, sp, #963479; LE-I64-NEXT: mov r7, r23480; LE-I64-NEXT: mov r6, r13481; LE-I64-NEXT: mov r4, r03482; LE-I64-NEXT: ldm r3, {r0, r1, r2, r3}3483; LE-I64-NEXT: bl lrintl3484; LE-I64-NEXT: mov r9, r13485; LE-I64-NEXT: vmov.32 d9[0], r03486; LE-I64-NEXT: mov r0, r43487; LE-I64-NEXT: mov r1, r63488; LE-I64-NEXT: mov r2, r73489; LE-I64-NEXT: mov r3, r53490; LE-I64-NEXT: ldr r8, [sp, #80]3491; LE-I64-NEXT: ldr r10, [sp, #64]3492; LE-I64-NEXT: bl lrintl3493; LE-I64-NEXT: add r3, sp, #683494; LE-I64-NEXT: mov r5, r13495; LE-I64-NEXT: vmov.32 d10[0], r03496; LE-I64-NEXT: mov r0, r103497; LE-I64-NEXT: ldm r3, {r1, r2, r3}3498; LE-I64-NEXT: bl lrintl3499; LE-I64-NEXT: add r3, sp, #843500; LE-I64-NEXT: mov r4, r13501; LE-I64-NEXT: vmov.32 d11[0], r03502; LE-I64-NEXT: mov r0, r83503; LE-I64-NEXT: ldm r3, {r1, r2, r3}3504; LE-I64-NEXT: bl lrintl3505; LE-I64-NEXT: vmov.32 d8[0], r03506; LE-I64-NEXT: vmov.32 d11[1], r43507; LE-I64-NEXT: vmov.32 d9[1], r93508; LE-I64-NEXT: vmov.32 d10[1], r53509; LE-I64-NEXT: vmov.32 d8[1], r13510; LE-I64-NEXT: vorr q0, q5, q53511; LE-I64-NEXT: vorr q1, q4, q43512; LE-I64-NEXT: vpop {d8, d9, d10, d11}3513; LE-I64-NEXT: pop {r4, r5, r6, r7, r8, r9, r10, pc}3514;3515; BE-I32-LABEL: lrint_v4fp128:3516; BE-I32: @ %bb.0:3517; BE-I32-NEXT: .save {r4, lr}3518; BE-I32-NEXT: push {r4, lr}3519; BE-I32-NEXT: .vsave {d8, d9}3520; BE-I32-NEXT: vpush {d8, d9}3521; BE-I32-NEXT: bl lrintl3522; BE-I32-NEXT: add r3, sp, #603523; BE-I32-NEXT: ldr r12, [sp, #56]3524; BE-I32-NEXT: vmov.32 d8[0], r03525; BE-I32-NEXT: ldm r3, {r1, r2, r3}3526; BE-I32-NEXT: mov r0, r123527; BE-I32-NEXT: bl lrintl3528; BE-I32-NEXT: add r3, sp, #403529; BE-I32-NEXT: mov r4, r03530; BE-I32-NEXT: ldm r3, {r0, r1, r2, r3}3531; BE-I32-NEXT: bl lrintl3532; BE-I32-NEXT: add r3, sp, #283533; BE-I32-NEXT: ldr r12, [sp, #24]3534; BE-I32-NEXT: vmov.32 d9[0], r03535; BE-I32-NEXT: ldm r3, {r1, r2, r3}3536; BE-I32-NEXT: mov r0, r123537; BE-I32-NEXT: vmov.32 d9[1], r43538; BE-I32-NEXT: bl lrintl3539; BE-I32-NEXT: vmov.32 d8[1], r03540; BE-I32-NEXT: vrev64.32 q0, q43541; BE-I32-NEXT: vpop {d8, d9}3542; BE-I32-NEXT: pop {r4, pc}3543;3544; BE-I64-LABEL: lrint_v4fp128:3545; BE-I64: @ %bb.0:3546; BE-I64-NEXT: .save {r4, r5, r6, r7, r8, r9, r10, lr}3547; BE-I64-NEXT: push {r4, r5, r6, r7, r8, r9, r10, lr}3548; BE-I64-NEXT: .vsave {d8, d9, d10}3549; BE-I64-NEXT: vpush {d8, d9, d10}3550; BE-I64-NEXT: mov r5, r33551; BE-I64-NEXT: add r3, sp, #883552; BE-I64-NEXT: mov r7, r23553; BE-I64-NEXT: mov r6, r13554; BE-I64-NEXT: mov r4, r03555; BE-I64-NEXT: ldm r3, {r0, r1, r2, r3}3556; BE-I64-NEXT: bl lrintl3557; BE-I64-NEXT: mov r9, r13558; BE-I64-NEXT: vmov.32 d8[0], r03559; BE-I64-NEXT: mov r0, r43560; BE-I64-NEXT: mov r1, r63561; BE-I64-NEXT: mov r2, r73562; BE-I64-NEXT: mov r3, r53563; BE-I64-NEXT: ldr r8, [sp, #72]3564; BE-I64-NEXT: ldr r10, [sp, #56]3565; BE-I64-NEXT: bl lrintl3566; BE-I64-NEXT: add r3, sp, #603567; BE-I64-NEXT: mov r5, r13568; BE-I64-NEXT: vmov.32 d9[0], r03569; BE-I64-NEXT: mov r0, r103570; BE-I64-NEXT: ldm r3, {r1, r2, r3}3571; BE-I64-NEXT: bl lrintl3572; BE-I64-NEXT: add r3, sp, #763573; BE-I64-NEXT: mov r4, r13574; BE-I64-NEXT: vmov.32 d10[0], r03575; BE-I64-NEXT: mov r0, r83576; BE-I64-NEXT: ldm r3, {r1, r2, r3}3577; BE-I64-NEXT: bl lrintl3578; BE-I64-NEXT: vmov.32 d16[0], r03579; BE-I64-NEXT: vmov.32 d10[1], r43580; BE-I64-NEXT: vmov.32 d8[1], r93581; BE-I64-NEXT: vmov.32 d9[1], r53582; BE-I64-NEXT: vmov.32 d16[1], r13583; BE-I64-NEXT: vrev64.32 d1, d103584; BE-I64-NEXT: vrev64.32 d3, d83585; BE-I64-NEXT: vrev64.32 d0, d93586; BE-I64-NEXT: vrev64.32 d2, d163587; BE-I64-NEXT: vpop {d8, d9, d10}3588; BE-I64-NEXT: pop {r4, r5, r6, r7, r8, r9, r10, pc}3589 %a = call <4 x iXLen> @llvm.lrint.v4iXLen.v4fp128(<4 x fp128> %x)3590 ret <4 x iXLen> %a3591}3592 3593define <8 x iXLen> @lrint_v8fp128(<8 x fp128> %x) {3594; LE-I32-LABEL: lrint_v8fp128:3595; LE-I32: @ %bb.0:3596; LE-I32-NEXT: .save {r4, r5, r6, r7, r8, r9, r10, lr}3597; LE-I32-NEXT: push {r4, r5, r6, r7, r8, r9, r10, lr}3598; LE-I32-NEXT: .vsave {d8, d9, d10, d11}3599; LE-I32-NEXT: vpush {d8, d9, d10, d11}3600; LE-I32-NEXT: mov r6, r33601; LE-I32-NEXT: add r3, sp, #1123602; LE-I32-NEXT: mov r7, r23603; LE-I32-NEXT: mov r4, r13604; LE-I32-NEXT: mov r5, r03605; LE-I32-NEXT: ldm r3, {r0, r1, r2, r3}3606; LE-I32-NEXT: bl lrintl3607; LE-I32-NEXT: vmov.32 d8[0], r03608; LE-I32-NEXT: mov r0, r53609; LE-I32-NEXT: mov r1, r43610; LE-I32-NEXT: mov r2, r73611; LE-I32-NEXT: mov r3, r63612; LE-I32-NEXT: ldr r8, [sp, #160]3613; LE-I32-NEXT: ldr r9, [sp, #64]3614; LE-I32-NEXT: ldr r10, [sp, #80]3615; LE-I32-NEXT: bl lrintl3616; LE-I32-NEXT: add r3, sp, #843617; LE-I32-NEXT: vmov.32 d10[0], r03618; LE-I32-NEXT: mov r0, r103619; LE-I32-NEXT: ldm r3, {r1, r2, r3}3620; LE-I32-NEXT: bl lrintl3621; LE-I32-NEXT: ldr r6, [sp, #96]3622; LE-I32-NEXT: vmov.32 d11[0], r03623; LE-I32-NEXT: ldr r1, [sp, #100]3624; LE-I32-NEXT: ldr r2, [sp, #104]3625; LE-I32-NEXT: ldr r3, [sp, #108]3626; LE-I32-NEXT: mov r0, r63627; LE-I32-NEXT: ldr r4, [sp, #68]3628; LE-I32-NEXT: ldr r5, [sp, #72]3629; LE-I32-NEXT: ldr r10, [sp, #164]3630; LE-I32-NEXT: ldr r7, [sp, #168]3631; LE-I32-NEXT: bl lrintl3632; LE-I32-NEXT: ldr r3, [sp, #76]3633; LE-I32-NEXT: vmov.32 d11[1], r03634; LE-I32-NEXT: mov r0, r93635; LE-I32-NEXT: mov r1, r43636; LE-I32-NEXT: mov r2, r53637; LE-I32-NEXT: bl lrintl3638; LE-I32-NEXT: ldr r3, [sp, #172]3639; LE-I32-NEXT: vmov.32 d10[1], r03640; LE-I32-NEXT: mov r0, r83641; LE-I32-NEXT: mov r1, r103642; LE-I32-NEXT: mov r2, r73643; LE-I32-NEXT: bl lrintl3644; LE-I32-NEXT: add r3, sp, #1443645; LE-I32-NEXT: mov r4, r03646; LE-I32-NEXT: ldm r3, {r0, r1, r2, r3}3647; LE-I32-NEXT: bl lrintl3648; LE-I32-NEXT: add r3, sp, #1323649; LE-I32-NEXT: ldr r7, [sp, #128]3650; LE-I32-NEXT: vmov.32 d9[0], r03651; LE-I32-NEXT: ldm r3, {r1, r2, r3}3652; LE-I32-NEXT: mov r0, r73653; LE-I32-NEXT: vmov.32 d9[1], r43654; LE-I32-NEXT: bl lrintl3655; LE-I32-NEXT: vmov.32 d8[1], r03656; LE-I32-NEXT: vorr q0, q5, q53657; LE-I32-NEXT: vorr q1, q4, q43658; LE-I32-NEXT: vpop {d8, d9, d10, d11}3659; LE-I32-NEXT: pop {r4, r5, r6, r7, r8, r9, r10, pc}3660;3661; LE-I64-LABEL: lrint_v8fp128:3662; LE-I64: @ %bb.0:3663; LE-I64-NEXT: .save {r4, r5, r6, r7, r8, r9, r10, r11, lr}3664; LE-I64-NEXT: push {r4, r5, r6, r7, r8, r9, r10, r11, lr}3665; LE-I64-NEXT: .pad #43666; LE-I64-NEXT: sub sp, sp, #43667; LE-I64-NEXT: .vsave {d8, d9, d10, d11, d12, d13, d14, d15}3668; LE-I64-NEXT: vpush {d8, d9, d10, d11, d12, d13, d14, d15}3669; LE-I64-NEXT: .pad #83670; LE-I64-NEXT: sub sp, sp, #83671; LE-I64-NEXT: mov r11, r33672; LE-I64-NEXT: add r3, sp, #2083673; LE-I64-NEXT: mov r10, r23674; LE-I64-NEXT: mov r4, r13675; LE-I64-NEXT: mov r5, r03676; LE-I64-NEXT: ldm r3, {r0, r1, r2, r3}3677; LE-I64-NEXT: bl lrintl3678; LE-I64-NEXT: add r7, sp, #1643679; LE-I64-NEXT: ldr r6, [sp, #160]3680; LE-I64-NEXT: str r1, [sp, #4] @ 4-byte Spill3681; LE-I64-NEXT: vmov.32 d9[0], r03682; LE-I64-NEXT: ldm r7, {r1, r2, r3, r7}3683; LE-I64-NEXT: mov r0, r63684; LE-I64-NEXT: ldr r8, [sp, #128]3685; LE-I64-NEXT: ldr r9, [sp, #144]3686; LE-I64-NEXT: bl lrintl3687; LE-I64-NEXT: add r3, sp, #1803688; LE-I64-NEXT: str r1, [sp] @ 4-byte Spill3689; LE-I64-NEXT: vmov.32 d10[0], r03690; LE-I64-NEXT: mov r0, r73691; LE-I64-NEXT: ldm r3, {r1, r2, r3}3692; LE-I64-NEXT: bl lrintl3693; LE-I64-NEXT: add r3, sp, #1323694; LE-I64-NEXT: mov r7, r13695; LE-I64-NEXT: vmov.32 d11[0], r03696; LE-I64-NEXT: mov r0, r83697; LE-I64-NEXT: ldm r3, {r1, r2, r3}3698; LE-I64-NEXT: bl lrintl3699; LE-I64-NEXT: add r3, sp, #1483700; LE-I64-NEXT: mov r8, r13701; LE-I64-NEXT: vmov.32 d12[0], r03702; LE-I64-NEXT: mov r0, r93703; LE-I64-NEXT: ldm r3, {r1, r2, r3}3704; LE-I64-NEXT: bl lrintl3705; LE-I64-NEXT: mov r9, r13706; LE-I64-NEXT: vmov.32 d13[0], r03707; LE-I64-NEXT: mov r0, r53708; LE-I64-NEXT: mov r1, r43709; LE-I64-NEXT: mov r2, r103710; LE-I64-NEXT: mov r3, r113711; LE-I64-NEXT: ldr r6, [sp, #112]3712; LE-I64-NEXT: bl lrintl3713; LE-I64-NEXT: add r3, sp, #1163714; LE-I64-NEXT: mov r4, r13715; LE-I64-NEXT: vmov.32 d14[0], r03716; LE-I64-NEXT: mov r0, r63717; LE-I64-NEXT: ldm r3, {r1, r2, r3}3718; LE-I64-NEXT: bl lrintl3719; LE-I64-NEXT: add r3, sp, #1963720; LE-I64-NEXT: vmov.32 d15[0], r03721; LE-I64-NEXT: ldr r0, [sp, #192]3722; LE-I64-NEXT: mov r5, r13723; LE-I64-NEXT: ldm r3, {r1, r2, r3}3724; LE-I64-NEXT: bl lrintl3725; LE-I64-NEXT: vmov.32 d8[0], r03726; LE-I64-NEXT: ldr r0, [sp] @ 4-byte Reload3727; LE-I64-NEXT: vmov.32 d11[1], r73728; LE-I64-NEXT: vmov.32 d10[1], r03729; LE-I64-NEXT: ldr r0, [sp, #4] @ 4-byte Reload3730; LE-I64-NEXT: vmov.32 d15[1], r53731; LE-I64-NEXT: vorr q2, q5, q53732; LE-I64-NEXT: vmov.32 d13[1], r93733; LE-I64-NEXT: vmov.32 d9[1], r03734; LE-I64-NEXT: vmov.32 d14[1], r43735; LE-I64-NEXT: vmov.32 d12[1], r83736; LE-I64-NEXT: vorr q0, q7, q73737; LE-I64-NEXT: vmov.32 d8[1], r13738; LE-I64-NEXT: vorr q1, q6, q63739; LE-I64-NEXT: vorr q3, q4, q43740; LE-I64-NEXT: add sp, sp, #83741; LE-I64-NEXT: vpop {d8, d9, d10, d11, d12, d13, d14, d15}3742; LE-I64-NEXT: add sp, sp, #43743; LE-I64-NEXT: pop {r4, r5, r6, r7, r8, r9, r10, r11, pc}3744;3745; BE-I32-LABEL: lrint_v8fp128:3746; BE-I32: @ %bb.0:3747; BE-I32-NEXT: .save {r4, r5, r6, r7, r8, r9, r10, r11, lr}3748; BE-I32-NEXT: push {r4, r5, r6, r7, r8, r9, r10, r11, lr}3749; BE-I32-NEXT: .pad #43750; BE-I32-NEXT: sub sp, sp, #43751; BE-I32-NEXT: .vsave {d8, d9, d10, d11}3752; BE-I32-NEXT: vpush {d8, d9, d10, d11}3753; BE-I32-NEXT: .pad #83754; BE-I32-NEXT: sub sp, sp, #83755; BE-I32-NEXT: str r3, [sp, #4] @ 4-byte Spill3756; BE-I32-NEXT: add r3, sp, #1283757; BE-I32-NEXT: mov r11, r23758; BE-I32-NEXT: mov r6, r13759; BE-I32-NEXT: mov r7, r03760; BE-I32-NEXT: ldm r3, {r0, r1, r2, r3}3761; BE-I32-NEXT: bl lrintl3762; BE-I32-NEXT: add r3, sp, #1003763; BE-I32-NEXT: ldr r5, [sp, #96]3764; BE-I32-NEXT: vmov.32 d8[0], r03765; BE-I32-NEXT: ldr r4, [sp, #160]3766; BE-I32-NEXT: ldm r3, {r1, r2, r3}3767; BE-I32-NEXT: mov r0, r53768; BE-I32-NEXT: bl lrintl3769; BE-I32-NEXT: add r3, sp, #1643770; BE-I32-NEXT: vmov.32 d11[0], r03771; BE-I32-NEXT: mov r0, r43772; BE-I32-NEXT: ldm r3, {r1, r2, r3}3773; BE-I32-NEXT: bl lrintl3774; BE-I32-NEXT: ldr r4, [sp, #176]3775; BE-I32-NEXT: vmov.32 d9[0], r03776; BE-I32-NEXT: ldr r1, [sp, #180]3777; BE-I32-NEXT: ldr r2, [sp, #184]3778; BE-I32-NEXT: ldr r3, [sp, #188]3779; BE-I32-NEXT: mov r0, r43780; BE-I32-NEXT: ldr r5, [sp, #116]3781; BE-I32-NEXT: ldr r8, [sp, #120]3782; BE-I32-NEXT: ldr r10, [sp, #84]3783; BE-I32-NEXT: ldr r9, [sp, #88]3784; BE-I32-NEXT: bl lrintl3785; BE-I32-NEXT: vmov.32 d9[1], r03786; BE-I32-NEXT: ldr r3, [sp, #124]3787; BE-I32-NEXT: ldr r0, [sp, #112]3788; BE-I32-NEXT: mov r1, r53789; BE-I32-NEXT: mov r2, r83790; BE-I32-NEXT: bl lrintl3791; BE-I32-NEXT: vmov.32 d11[1], r03792; BE-I32-NEXT: ldr r3, [sp, #92]3793; BE-I32-NEXT: ldr r0, [sp, #80]3794; BE-I32-NEXT: mov r1, r103795; BE-I32-NEXT: mov r2, r93796; BE-I32-NEXT: bl lrintl3797; BE-I32-NEXT: ldr r3, [sp, #4] @ 4-byte Reload3798; BE-I32-NEXT: mov r4, r03799; BE-I32-NEXT: mov r0, r73800; BE-I32-NEXT: mov r1, r63801; BE-I32-NEXT: mov r2, r113802; BE-I32-NEXT: bl lrintl3803; BE-I32-NEXT: add r3, sp, #1483804; BE-I32-NEXT: ldr r7, [sp, #144]3805; BE-I32-NEXT: vmov.32 d10[0], r03806; BE-I32-NEXT: ldm r3, {r1, r2, r3}3807; BE-I32-NEXT: mov r0, r73808; BE-I32-NEXT: vmov.32 d10[1], r43809; BE-I32-NEXT: bl lrintl3810; BE-I32-NEXT: vmov.32 d8[1], r03811; BE-I32-NEXT: vrev64.32 q0, q53812; BE-I32-NEXT: vrev64.32 q1, q43813; BE-I32-NEXT: add sp, sp, #83814; BE-I32-NEXT: vpop {d8, d9, d10, d11}3815; BE-I32-NEXT: add sp, sp, #43816; BE-I32-NEXT: pop {r4, r5, r6, r7, r8, r9, r10, r11, pc}3817;3818; BE-I64-LABEL: lrint_v8fp128:3819; BE-I64: @ %bb.0:3820; BE-I64-NEXT: .save {r4, r5, r6, r7, r8, r9, r10, r11, lr}3821; BE-I64-NEXT: push {r4, r5, r6, r7, r8, r9, r10, r11, lr}3822; BE-I64-NEXT: .pad #43823; BE-I64-NEXT: sub sp, sp, #43824; BE-I64-NEXT: .vsave {d8, d9, d10, d11, d12, d13, d14}3825; BE-I64-NEXT: vpush {d8, d9, d10, d11, d12, d13, d14}3826; BE-I64-NEXT: .pad #163827; BE-I64-NEXT: sub sp, sp, #163828; BE-I64-NEXT: str r3, [sp, #4] @ 4-byte Spill3829; BE-I64-NEXT: add r3, sp, #2083830; BE-I64-NEXT: mov r11, r23831; BE-I64-NEXT: mov r4, r13832; BE-I64-NEXT: mov r5, r03833; BE-I64-NEXT: ldm r3, {r0, r1, r2, r3}3834; BE-I64-NEXT: bl lrintl3835; BE-I64-NEXT: ldr r7, [sp, #176]3836; BE-I64-NEXT: add r3, sp, #1803837; BE-I64-NEXT: str r1, [sp, #12] @ 4-byte Spill3838; BE-I64-NEXT: vmov.32 d8[0], r03839; BE-I64-NEXT: ldm r3, {r1, r2, r3}3840; BE-I64-NEXT: mov r0, r73841; BE-I64-NEXT: ldr r6, [sp, #128]3842; BE-I64-NEXT: ldr r8, [sp, #144]3843; BE-I64-NEXT: bl lrintl3844; BE-I64-NEXT: add r3, sp, #1323845; BE-I64-NEXT: str r1, [sp, #8] @ 4-byte Spill3846; BE-I64-NEXT: vmov.32 d9[0], r03847; BE-I64-NEXT: mov r0, r63848; BE-I64-NEXT: ldm r3, {r1, r2, r3}3849; BE-I64-NEXT: bl lrintl3850; BE-I64-NEXT: add r3, sp, #1483851; BE-I64-NEXT: mov r6, r13852; BE-I64-NEXT: vmov.32 d10[0], r03853; BE-I64-NEXT: mov r0, r83854; BE-I64-NEXT: ldm r3, {r1, r2, r3}3855; BE-I64-NEXT: bl lrintl3856; BE-I64-NEXT: add r3, sp, #1603857; BE-I64-NEXT: mov r9, r03858; BE-I64-NEXT: mov r7, r13859; BE-I64-NEXT: ldm r3, {r0, r1, r2, r3}3860; BE-I64-NEXT: bl lrintl3861; BE-I64-NEXT: ldr r3, [sp, #4] @ 4-byte Reload3862; BE-I64-NEXT: mov r8, r13863; BE-I64-NEXT: vmov.32 d11[0], r03864; BE-I64-NEXT: mov r0, r53865; BE-I64-NEXT: mov r1, r43866; BE-I64-NEXT: mov r2, r113867; BE-I64-NEXT: ldr r10, [sp, #112]3868; BE-I64-NEXT: vmov.32 d12[0], r93869; BE-I64-NEXT: bl lrintl3870; BE-I64-NEXT: add r3, sp, #1163871; BE-I64-NEXT: mov r4, r13872; BE-I64-NEXT: vmov.32 d13[0], r03873; BE-I64-NEXT: mov r0, r103874; BE-I64-NEXT: ldm r3, {r1, r2, r3}3875; BE-I64-NEXT: bl lrintl3876; BE-I64-NEXT: add r3, sp, #1963877; BE-I64-NEXT: vmov.32 d14[0], r03878; BE-I64-NEXT: ldr r0, [sp, #192]3879; BE-I64-NEXT: mov r5, r13880; BE-I64-NEXT: ldm r3, {r1, r2, r3}3881; BE-I64-NEXT: bl lrintl3882; BE-I64-NEXT: vmov.32 d16[0], r03883; BE-I64-NEXT: ldr r0, [sp, #8] @ 4-byte Reload3884; BE-I64-NEXT: vmov.32 d14[1], r53885; BE-I64-NEXT: vmov.32 d9[1], r03886; BE-I64-NEXT: ldr r0, [sp, #12] @ 4-byte Reload3887; BE-I64-NEXT: vmov.32 d12[1], r73888; BE-I64-NEXT: vmov.32 d8[1], r03889; BE-I64-NEXT: vmov.32 d13[1], r43890; BE-I64-NEXT: vmov.32 d10[1], r63891; BE-I64-NEXT: vmov.32 d11[1], r83892; BE-I64-NEXT: vmov.32 d16[1], r13893; BE-I64-NEXT: vrev64.32 d1, d143894; BE-I64-NEXT: vrev64.32 d3, d123895; BE-I64-NEXT: vrev64.32 d5, d93896; BE-I64-NEXT: vrev64.32 d7, d83897; BE-I64-NEXT: vrev64.32 d0, d133898; BE-I64-NEXT: vrev64.32 d2, d103899; BE-I64-NEXT: vrev64.32 d4, d113900; BE-I64-NEXT: vrev64.32 d6, d163901; BE-I64-NEXT: add sp, sp, #163902; BE-I64-NEXT: vpop {d8, d9, d10, d11, d12, d13, d14}3903; BE-I64-NEXT: add sp, sp, #43904; BE-I64-NEXT: pop {r4, r5, r6, r7, r8, r9, r10, r11, pc}3905 %a = call <8 x iXLen> @llvm.lrint.v8iXLen.v8fp128(<8 x fp128> %x)3906 ret <8 x iXLen> %a3907}3908 3909define <16 x iXLen> @lrint_v16fp128(<16 x fp128> %x) {3910; LE-I32-LABEL: lrint_v16fp128:3911; LE-I32: @ %bb.0:3912; LE-I32-NEXT: .save {r4, r5, r6, r7, r8, r9, r10, r11, lr}3913; LE-I32-NEXT: push {r4, r5, r6, r7, r8, r9, r10, r11, lr}3914; LE-I32-NEXT: .pad #43915; LE-I32-NEXT: sub sp, sp, #43916; LE-I32-NEXT: .vsave {d8, d9, d10, d11, d12, d13, d14, d15}3917; LE-I32-NEXT: vpush {d8, d9, d10, d11, d12, d13, d14, d15}3918; LE-I32-NEXT: mov r8, r33919; LE-I32-NEXT: add r3, sp, #2803920; LE-I32-NEXT: mov r9, r23921; LE-I32-NEXT: mov r10, r13922; LE-I32-NEXT: mov r6, r03923; LE-I32-NEXT: ldm r3, {r0, r1, r2, r3}3924; LE-I32-NEXT: bl lrintl3925; LE-I32-NEXT: ldr r4, [sp, #216]3926; LE-I32-NEXT: vmov.32 d8[0], r03927; LE-I32-NEXT: ldr r1, [sp, #220]3928; LE-I32-NEXT: ldr r2, [sp, #224]3929; LE-I32-NEXT: ldr r3, [sp, #228]3930; LE-I32-NEXT: mov r0, r43931; LE-I32-NEXT: ldr r7, [sp, #152]3932; LE-I32-NEXT: ldr r11, [sp, #104]3933; LE-I32-NEXT: bl lrintl3934; LE-I32-NEXT: add r3, sp, #1563935; LE-I32-NEXT: vmov.32 d10[0], r03936; LE-I32-NEXT: mov r0, r73937; LE-I32-NEXT: ldm r3, {r1, r2, r3}3938; LE-I32-NEXT: bl lrintl3939; LE-I32-NEXT: ldr r7, [sp, #184]3940; LE-I32-NEXT: vmov.32 d12[0], r03941; LE-I32-NEXT: ldr r1, [sp, #188]3942; LE-I32-NEXT: ldr r2, [sp, #192]3943; LE-I32-NEXT: ldr r3, [sp, #196]3944; LE-I32-NEXT: mov r0, r73945; LE-I32-NEXT: ldr r4, [sp, #120]3946; LE-I32-NEXT: bl lrintl3947; LE-I32-NEXT: add r3, sp, #1243948; LE-I32-NEXT: vmov.32 d13[0], r03949; LE-I32-NEXT: mov r0, r43950; LE-I32-NEXT: ldm r3, {r1, r2, r3}3951; LE-I32-NEXT: bl lrintl3952; LE-I32-NEXT: ldr r5, [sp, #136]3953; LE-I32-NEXT: vmov.32 d15[0], r03954; LE-I32-NEXT: ldr r1, [sp, #140]3955; LE-I32-NEXT: ldr r2, [sp, #144]3956; LE-I32-NEXT: ldr r3, [sp, #148]3957; LE-I32-NEXT: mov r0, r53958; LE-I32-NEXT: ldr r4, [sp, #108]3959; LE-I32-NEXT: ldr r7, [sp, #112]3960; LE-I32-NEXT: bl lrintl3961; LE-I32-NEXT: ldr r3, [sp, #116]3962; LE-I32-NEXT: vmov.32 d15[1], r03963; LE-I32-NEXT: mov r0, r113964; LE-I32-NEXT: mov r1, r43965; LE-I32-NEXT: mov r2, r73966; LE-I32-NEXT: bl lrintl3967; LE-I32-NEXT: mov r4, r03968; LE-I32-NEXT: mov r0, r63969; LE-I32-NEXT: mov r1, r103970; LE-I32-NEXT: mov r2, r93971; LE-I32-NEXT: mov r3, r83972; LE-I32-NEXT: bl lrintl3973; LE-I32-NEXT: ldr r7, [sp, #200]3974; LE-I32-NEXT: vmov.32 d14[0], r03975; LE-I32-NEXT: ldr r1, [sp, #204]3976; LE-I32-NEXT: ldr r2, [sp, #208]3977; LE-I32-NEXT: ldr r3, [sp, #212]3978; LE-I32-NEXT: mov r0, r73979; LE-I32-NEXT: ldr r5, [sp, #172]3980; LE-I32-NEXT: vmov.32 d14[1], r43981; LE-I32-NEXT: ldr r6, [sp, #176]3982; LE-I32-NEXT: bl lrintl3983; LE-I32-NEXT: vmov.32 d13[1], r03984; LE-I32-NEXT: ldr r3, [sp, #180]3985; LE-I32-NEXT: ldr r0, [sp, #168]3986; LE-I32-NEXT: mov r1, r53987; LE-I32-NEXT: mov r2, r63988; LE-I32-NEXT: bl lrintl3989; LE-I32-NEXT: add r3, sp, #2483990; LE-I32-NEXT: mov r5, r03991; LE-I32-NEXT: ldm r3, {r0, r1, r2, r3}3992; LE-I32-NEXT: bl lrintl3993; LE-I32-NEXT: ldr r4, [sp, #264]3994; LE-I32-NEXT: vmov.32 d11[0], r03995; LE-I32-NEXT: ldr r1, [sp, #268]3996; LE-I32-NEXT: ldr r2, [sp, #272]3997; LE-I32-NEXT: vmov.32 d12[1], r53998; LE-I32-NEXT: ldr r3, [sp, #276]3999; LE-I32-NEXT: mov r0, r44000; LE-I32-NEXT: ldr r6, [sp, #236]4001; LE-I32-NEXT: ldr r7, [sp, #240]4002; LE-I32-NEXT: ldr r8, [sp, #332]4003; LE-I32-NEXT: ldr r5, [sp, #336]4004; LE-I32-NEXT: bl lrintl4005; LE-I32-NEXT: vmov.32 d11[1], r04006; LE-I32-NEXT: ldr r3, [sp, #244]4007; LE-I32-NEXT: ldr r0, [sp, #232]4008; LE-I32-NEXT: mov r1, r64009; LE-I32-NEXT: mov r2, r74010; LE-I32-NEXT: bl lrintl4011; LE-I32-NEXT: vmov.32 d10[1], r04012; LE-I32-NEXT: ldr r3, [sp, #340]4013; LE-I32-NEXT: ldr r0, [sp, #328]4014; LE-I32-NEXT: mov r1, r84015; LE-I32-NEXT: mov r2, r54016; LE-I32-NEXT: bl lrintl4017; LE-I32-NEXT: add r3, sp, #3124018; LE-I32-NEXT: mov r4, r04019; LE-I32-NEXT: ldm r3, {r0, r1, r2, r3}4020; LE-I32-NEXT: bl lrintl4021; LE-I32-NEXT: add r3, sp, #3004022; LE-I32-NEXT: ldr r7, [sp, #296]4023; LE-I32-NEXT: vmov.32 d9[0], r04024; LE-I32-NEXT: ldm r3, {r1, r2, r3}4025; LE-I32-NEXT: mov r0, r74026; LE-I32-NEXT: vmov.32 d9[1], r44027; LE-I32-NEXT: bl lrintl4028; LE-I32-NEXT: vmov.32 d8[1], r04029; LE-I32-NEXT: vorr q0, q7, q74030; LE-I32-NEXT: vorr q1, q6, q64031; LE-I32-NEXT: vorr q2, q5, q54032; LE-I32-NEXT: vorr q3, q4, q44033; LE-I32-NEXT: vpop {d8, d9, d10, d11, d12, d13, d14, d15}4034; LE-I32-NEXT: add sp, sp, #44035; LE-I32-NEXT: pop {r4, r5, r6, r7, r8, r9, r10, r11, pc}4036;4037; LE-I64-LABEL: lrint_v16fp128:4038; LE-I64: @ %bb.0:4039; LE-I64-NEXT: .save {r4, r5, r6, r7, r8, r9, r10, r11, lr}4040; LE-I64-NEXT: push {r4, r5, r6, r7, r8, r9, r10, r11, lr}4041; LE-I64-NEXT: .pad #44042; LE-I64-NEXT: sub sp, sp, #44043; LE-I64-NEXT: .vsave {d8, d9, d10, d11, d12, d13, d14, d15}4044; LE-I64-NEXT: vpush {d8, d9, d10, d11, d12, d13, d14, d15}4045; LE-I64-NEXT: .pad #724046; LE-I64-NEXT: sub sp, sp, #724047; LE-I64-NEXT: mov r6, r34048; LE-I64-NEXT: add r3, sp, #4084049; LE-I64-NEXT: mov r7, r24050; LE-I64-NEXT: mov r4, r04051; LE-I64-NEXT: ldm r3, {r0, r1, r2, r3}4052; LE-I64-NEXT: bl lrintl4053; LE-I64-NEXT: add r5, sp, #1764054; LE-I64-NEXT: mov r10, r14055; LE-I64-NEXT: vmov.32 d13[0], r04056; LE-I64-NEXT: mov r0, r74057; LE-I64-NEXT: ldm r5, {r2, r3, r5}4058; LE-I64-NEXT: mov r1, r64059; LE-I64-NEXT: ldr r8, [sp, #232]4060; LE-I64-NEXT: bl lrintl4061; LE-I64-NEXT: add r3, sp, #1884062; LE-I64-NEXT: mov r9, r14063; LE-I64-NEXT: vmov.32 d8[0], r04064; LE-I64-NEXT: mov r0, r54065; LE-I64-NEXT: ldm r3, {r1, r2, r3}4066; LE-I64-NEXT: bl lrintl4067; LE-I64-NEXT: add r3, sp, #2364068; LE-I64-NEXT: mov r11, r14069; LE-I64-NEXT: vmov.32 d9[0], r04070; LE-I64-NEXT: mov r0, r84071; LE-I64-NEXT: ldm r3, {r1, r2, r3}4072; LE-I64-NEXT: bl lrintl4073; LE-I64-NEXT: add r3, sp, #2524074; LE-I64-NEXT: vmov.32 d10[0], r04075; LE-I64-NEXT: ldr r0, [sp, #248]4076; LE-I64-NEXT: mov r8, r14077; LE-I64-NEXT: ldm r3, {r1, r2, r3}4078; LE-I64-NEXT: bl lrintl4079; LE-I64-NEXT: add r3, sp, #2684080; LE-I64-NEXT: vmov.32 d11[0], r04081; LE-I64-NEXT: ldr r0, [sp, #264]4082; LE-I64-NEXT: mov r6, r14083; LE-I64-NEXT: ldm r3, {r1, r2, r3}4084; LE-I64-NEXT: bl lrintl4085; LE-I64-NEXT: add r3, sp, #2844086; LE-I64-NEXT: vmov.32 d14[0], r04087; LE-I64-NEXT: ldr r0, [sp, #280]4088; LE-I64-NEXT: mov r7, r14089; LE-I64-NEXT: ldm r3, {r1, r2, r3}4090; LE-I64-NEXT: bl lrintl4091; LE-I64-NEXT: add r3, sp, #3164092; LE-I64-NEXT: vmov.32 d15[0], r04093; LE-I64-NEXT: ldr r0, [sp, #312]4094; LE-I64-NEXT: mov r5, r14095; LE-I64-NEXT: ldm r3, {r1, r2, r3}4096; LE-I64-NEXT: bl lrintl4097; LE-I64-NEXT: vmov.32 d15[1], r54098; LE-I64-NEXT: add lr, sp, #564099; LE-I64-NEXT: ldr r5, [sp, #300]4100; LE-I64-NEXT: vmov.32 d14[1], r74101; LE-I64-NEXT: ldr r2, [sp, #304]4102; LE-I64-NEXT: ldr r3, [sp, #308]4103; LE-I64-NEXT: vmov.32 d11[1], r64104; LE-I64-NEXT: ldr r6, [sp, #200]4105; LE-I64-NEXT: ldr r7, [sp, #204]4106; LE-I64-NEXT: vmov.32 d10[1], r84107; LE-I64-NEXT: ldr r8, [sp, #344]4108; LE-I64-NEXT: vmov.32 d9[1], r114109; LE-I64-NEXT: ldr r11, [sp, #216]4110; LE-I64-NEXT: vstmia lr, {d14, d15} @ 16-byte Spill4111; LE-I64-NEXT: add lr, sp, #404112; LE-I64-NEXT: vmov.32 d17[0], r04113; LE-I64-NEXT: ldr r0, [sp, #296]4114; LE-I64-NEXT: vmov.32 d8[1], r94115; LE-I64-NEXT: vstmia lr, {d10, d11} @ 16-byte Spill4116; LE-I64-NEXT: add lr, sp, #244117; LE-I64-NEXT: vorr q5, q8, q84118; LE-I64-NEXT: vstmia lr, {d8, d9} @ 16-byte Spill4119; LE-I64-NEXT: vorr q4, q6, q64120; LE-I64-NEXT: vmov.32 d11[1], r14121; LE-I64-NEXT: mov r1, r54122; LE-I64-NEXT: vmov.32 d9[1], r104123; LE-I64-NEXT: bl lrintl4124; LE-I64-NEXT: vmov.32 d10[0], r04125; LE-I64-NEXT: ldr r2, [sp, #208]4126; LE-I64-NEXT: ldr r3, [sp, #212]4127; LE-I64-NEXT: add lr, sp, #84128; LE-I64-NEXT: mov r9, r14129; LE-I64-NEXT: mov r0, r64130; LE-I64-NEXT: mov r1, r74131; LE-I64-NEXT: vstmia lr, {d10, d11} @ 16-byte Spill4132; LE-I64-NEXT: bl lrintl4133; LE-I64-NEXT: add r3, sp, #2204134; LE-I64-NEXT: mov r10, r14135; LE-I64-NEXT: vmov.32 d10[0], r04136; LE-I64-NEXT: mov r0, r114137; LE-I64-NEXT: ldm r3, {r1, r2, r3}4138; LE-I64-NEXT: bl lrintl4139; LE-I64-NEXT: add r3, sp, #3484140; LE-I64-NEXT: mov r11, r14141; LE-I64-NEXT: vmov.32 d11[0], r04142; LE-I64-NEXT: mov r0, r84143; LE-I64-NEXT: ldm r3, {r1, r2, r3}4144; LE-I64-NEXT: bl lrintl4145; LE-I64-NEXT: add r3, sp, #3644146; LE-I64-NEXT: vmov.32 d13[0], r04147; LE-I64-NEXT: ldr r0, [sp, #360]4148; LE-I64-NEXT: mov r8, r14149; LE-I64-NEXT: ldm r3, {r1, r2, r3}4150; LE-I64-NEXT: bl lrintl4151; LE-I64-NEXT: add r3, sp, #3804152; LE-I64-NEXT: vmov.32 d14[0], r04153; LE-I64-NEXT: ldr r0, [sp, #376]4154; LE-I64-NEXT: mov r5, r14155; LE-I64-NEXT: ldm r3, {r1, r2, r3}4156; LE-I64-NEXT: bl lrintl4157; LE-I64-NEXT: add r3, sp, #3964158; LE-I64-NEXT: vmov.32 d15[0], r04159; LE-I64-NEXT: ldr r0, [sp, #392]4160; LE-I64-NEXT: mov r6, r14161; LE-I64-NEXT: ldm r3, {r1, r2, r3}4162; LE-I64-NEXT: bl lrintl4163; LE-I64-NEXT: add r3, sp, #3324164; LE-I64-NEXT: vmov.32 d8[0], r04165; LE-I64-NEXT: ldr r0, [sp, #328]4166; LE-I64-NEXT: mov r7, r14167; LE-I64-NEXT: ldm r3, {r1, r2, r3}4168; LE-I64-NEXT: bl lrintl4169; LE-I64-NEXT: add lr, sp, #84170; LE-I64-NEXT: vmov.32 d12[0], r04171; LE-I64-NEXT: add r0, r4, #644172; LE-I64-NEXT: vldmia lr, {d18, d19} @ 16-byte Reload4173; LE-I64-NEXT: add lr, sp, #244174; LE-I64-NEXT: vmov.32 d13[1], r84175; LE-I64-NEXT: vmov.32 d18[1], r94176; LE-I64-NEXT: vmov.32 d15[1], r64177; LE-I64-NEXT: vmov.32 d12[1], r14178; LE-I64-NEXT: vmov.32 d14[1], r54179; LE-I64-NEXT: vst1.64 {d18, d19}, [r0:128]!4180; LE-I64-NEXT: vst1.64 {d12, d13}, [r0:128]!4181; LE-I64-NEXT: vmov.32 d8[1], r74182; LE-I64-NEXT: vst1.64 {d14, d15}, [r0:128]!4183; LE-I64-NEXT: vst1.64 {d8, d9}, [r0:128]4184; LE-I64-NEXT: vmov.32 d11[1], r114185; LE-I64-NEXT: vldmia lr, {d16, d17} @ 16-byte Reload4186; LE-I64-NEXT: add lr, sp, #404187; LE-I64-NEXT: vmov.32 d10[1], r104188; LE-I64-NEXT: vst1.64 {d16, d17}, [r4:128]!4189; LE-I64-NEXT: vst1.64 {d10, d11}, [r4:128]!4190; LE-I64-NEXT: vldmia lr, {d16, d17} @ 16-byte Reload4191; LE-I64-NEXT: add lr, sp, #564192; LE-I64-NEXT: vst1.64 {d16, d17}, [r4:128]!4193; LE-I64-NEXT: vldmia lr, {d16, d17} @ 16-byte Reload4194; LE-I64-NEXT: vst1.64 {d16, d17}, [r4:128]4195; LE-I64-NEXT: add sp, sp, #724196; LE-I64-NEXT: vpop {d8, d9, d10, d11, d12, d13, d14, d15}4197; LE-I64-NEXT: add sp, sp, #44198; LE-I64-NEXT: pop {r4, r5, r6, r7, r8, r9, r10, r11, pc}4199;4200; BE-I32-LABEL: lrint_v16fp128:4201; BE-I32: @ %bb.0:4202; BE-I32-NEXT: .save {r4, r5, r6, r7, r8, r9, r10, r11, lr}4203; BE-I32-NEXT: push {r4, r5, r6, r7, r8, r9, r10, r11, lr}4204; BE-I32-NEXT: .pad #44205; BE-I32-NEXT: sub sp, sp, #44206; BE-I32-NEXT: .vsave {d8, d9, d10, d11, d12, d13, d14, d15}4207; BE-I32-NEXT: vpush {d8, d9, d10, d11, d12, d13, d14, d15}4208; BE-I32-NEXT: .pad #164209; BE-I32-NEXT: sub sp, sp, #164210; BE-I32-NEXT: stm sp, {r0, r1, r2, r3} @ 16-byte Folded Spill4211; BE-I32-NEXT: add r3, sp, #2644212; BE-I32-NEXT: ldm r3, {r0, r1, r2, r3}4213; BE-I32-NEXT: bl lrintl4214; BE-I32-NEXT: add r3, sp, #3324215; BE-I32-NEXT: ldr r7, [sp, #328]4216; BE-I32-NEXT: vmov.32 d9[0], r04217; BE-I32-NEXT: ldr r10, [sp, #280]4218; BE-I32-NEXT: ldm r3, {r1, r2, r3}4219; BE-I32-NEXT: mov r0, r74220; BE-I32-NEXT: ldr r8, [sp, #168]4221; BE-I32-NEXT: bl lrintl4222; BE-I32-NEXT: ldr r5, [sp, #344]4223; BE-I32-NEXT: vmov.32 d11[0], r04224; BE-I32-NEXT: ldr r1, [sp, #348]4225; BE-I32-NEXT: ldr r2, [sp, #352]4226; BE-I32-NEXT: ldr r3, [sp, #356]4227; BE-I32-NEXT: mov r0, r54228; BE-I32-NEXT: ldr r7, [sp, #284]4229; BE-I32-NEXT: ldr r4, [sp, #288]4230; BE-I32-NEXT: ldr r6, [sp, #172]4231; BE-I32-NEXT: ldr r9, [sp, #176]4232; BE-I32-NEXT: bl lrintl4233; BE-I32-NEXT: ldr r3, [sp, #292]4234; BE-I32-NEXT: vmov.32 d11[1], r04235; BE-I32-NEXT: mov r0, r104236; BE-I32-NEXT: mov r1, r74237; BE-I32-NEXT: mov r2, r44238; BE-I32-NEXT: bl lrintl4239; BE-I32-NEXT: ldr r3, [sp, #180]4240; BE-I32-NEXT: vmov.32 d9[1], r04241; BE-I32-NEXT: mov r0, r84242; BE-I32-NEXT: mov r1, r64243; BE-I32-NEXT: mov r2, r94244; BE-I32-NEXT: bl lrintl4245; BE-I32-NEXT: add r3, sp, #2324246; BE-I32-NEXT: mov r4, r04247; BE-I32-NEXT: ldm r3, {r0, r1, r2, r3}4248; BE-I32-NEXT: bl lrintl4249; BE-I32-NEXT: add r3, sp, #1364250; BE-I32-NEXT: mov r6, r04251; BE-I32-NEXT: ldm r3, {r0, r1, r2, r3}4252; BE-I32-NEXT: bl lrintl4253; BE-I32-NEXT: ldr r5, [sp, #296]4254; BE-I32-NEXT: vmov.32 d13[0], r04255; BE-I32-NEXT: ldr r1, [sp, #300]4256; BE-I32-NEXT: ldr r2, [sp, #304]4257; BE-I32-NEXT: ldr r3, [sp, #308]4258; BE-I32-NEXT: mov r0, r54259; BE-I32-NEXT: ldr r10, [sp, #216]4260; BE-I32-NEXT: ldr r8, [sp, #220]4261; BE-I32-NEXT: ldr r9, [sp, #152]4262; BE-I32-NEXT: bl lrintl4263; BE-I32-NEXT: ldr r7, [sp, #248]4264; BE-I32-NEXT: vmov.32 d10[0], r04265; BE-I32-NEXT: ldr r1, [sp, #252]4266; BE-I32-NEXT: ldr r2, [sp, #256]4267; BE-I32-NEXT: vmov.32 d8[0], r64268; BE-I32-NEXT: ldr r3, [sp, #260]4269; BE-I32-NEXT: mov r0, r74270; BE-I32-NEXT: ldr r5, [sp, #224]4271; BE-I32-NEXT: ldr r11, [sp, #120]4272; BE-I32-NEXT: bl lrintl4273; BE-I32-NEXT: ldr r3, [sp, #228]4274; BE-I32-NEXT: vmov.32 d8[1], r04275; BE-I32-NEXT: mov r0, r104276; BE-I32-NEXT: mov r1, r84277; BE-I32-NEXT: mov r2, r54278; BE-I32-NEXT: bl lrintl4279; BE-I32-NEXT: add r3, sp, #2004280; BE-I32-NEXT: mov r5, r04281; BE-I32-NEXT: ldm r3, {r0, r1, r2, r3}4282; BE-I32-NEXT: bl lrintl4283; BE-I32-NEXT: vmov.32 d15[0], r04284; BE-I32-NEXT: ldr r0, [sp, #184]4285; BE-I32-NEXT: ldr r1, [sp, #188]4286; BE-I32-NEXT: ldr r2, [sp, #192]4287; BE-I32-NEXT: vmov.32 d14[0], r44288; BE-I32-NEXT: ldr r3, [sp, #196]4289; BE-I32-NEXT: vmov.32 d15[1], r54290; BE-I32-NEXT: ldr r7, [sp, #156]4291; BE-I32-NEXT: ldr r6, [sp, #160]4292; BE-I32-NEXT: ldr r4, [sp, #124]4293; BE-I32-NEXT: ldr r5, [sp, #128]4294; BE-I32-NEXT: bl lrintl4295; BE-I32-NEXT: ldr r3, [sp, #164]4296; BE-I32-NEXT: vmov.32 d14[1], r04297; BE-I32-NEXT: mov r0, r94298; BE-I32-NEXT: mov r1, r74299; BE-I32-NEXT: mov r2, r64300; BE-I32-NEXT: bl lrintl4301; BE-I32-NEXT: ldr r3, [sp, #132]4302; BE-I32-NEXT: vmov.32 d13[1], r04303; BE-I32-NEXT: mov r0, r114304; BE-I32-NEXT: mov r1, r44305; BE-I32-NEXT: mov r2, r54306; BE-I32-NEXT: bl lrintl4307; BE-I32-NEXT: mov r4, r04308; BE-I32-NEXT: ldm sp, {r0, r1, r2, r3} @ 16-byte Folded Reload4309; BE-I32-NEXT: bl lrintl4310; BE-I32-NEXT: add r3, sp, #3164311; BE-I32-NEXT: ldr r7, [sp, #312]4312; BE-I32-NEXT: vmov.32 d12[0], r04313; BE-I32-NEXT: ldm r3, {r1, r2, r3}4314; BE-I32-NEXT: mov r0, r74315; BE-I32-NEXT: vmov.32 d12[1], r44316; BE-I32-NEXT: bl lrintl4317; BE-I32-NEXT: vmov.32 d10[1], r04318; BE-I32-NEXT: vrev64.32 q0, q64319; BE-I32-NEXT: vrev64.32 q1, q74320; BE-I32-NEXT: vrev64.32 q2, q44321; BE-I32-NEXT: vrev64.32 q3, q54322; BE-I32-NEXT: add sp, sp, #164323; BE-I32-NEXT: vpop {d8, d9, d10, d11, d12, d13, d14, d15}4324; BE-I32-NEXT: add sp, sp, #44325; BE-I32-NEXT: pop {r4, r5, r6, r7, r8, r9, r10, r11, pc}4326;4327; BE-I64-LABEL: lrint_v16fp128:4328; BE-I64: @ %bb.0:4329; BE-I64-NEXT: .save {r4, r5, r6, r7, r8, r9, r10, r11, lr}4330; BE-I64-NEXT: push {r4, r5, r6, r7, r8, r9, r10, r11, lr}4331; BE-I64-NEXT: .pad #44332; BE-I64-NEXT: sub sp, sp, #44333; BE-I64-NEXT: .vsave {d8, d9, d10, d11, d12, d13, d14, d15}4334; BE-I64-NEXT: vpush {d8, d9, d10, d11, d12, d13, d14, d15}4335; BE-I64-NEXT: .pad #564336; BE-I64-NEXT: sub sp, sp, #564337; BE-I64-NEXT: mov r5, r34338; BE-I64-NEXT: add r3, sp, #3764339; BE-I64-NEXT: mov r6, r24340; BE-I64-NEXT: mov r4, r04341; BE-I64-NEXT: ldm r3, {r0, r1, r2, r3}4342; BE-I64-NEXT: bl lrintl4343; BE-I64-NEXT: ldr r7, [sp, #392]4344; BE-I64-NEXT: add r3, sp, #3964345; BE-I64-NEXT: mov r9, r14346; BE-I64-NEXT: vmov.32 d8[0], r04347; BE-I64-NEXT: ldm r3, {r1, r2, r3}4348; BE-I64-NEXT: mov r0, r74349; BE-I64-NEXT: ldr r11, [sp, #168]4350; BE-I64-NEXT: bl lrintl4351; BE-I64-NEXT: ldr r2, [sp, #160]4352; BE-I64-NEXT: mov r10, r14353; BE-I64-NEXT: ldr r3, [sp, #164]4354; BE-I64-NEXT: vmov.32 d9[0], r04355; BE-I64-NEXT: mov r0, r64356; BE-I64-NEXT: mov r1, r54357; BE-I64-NEXT: bl lrintl4358; BE-I64-NEXT: add r3, sp, #1724359; BE-I64-NEXT: mov r8, r14360; BE-I64-NEXT: vmov.32 d10[0], r04361; BE-I64-NEXT: mov r0, r114362; BE-I64-NEXT: ldm r3, {r1, r2, r3}4363; BE-I64-NEXT: bl lrintl4364; BE-I64-NEXT: add r3, sp, #2204365; BE-I64-NEXT: vmov.32 d11[0], r04366; BE-I64-NEXT: ldr r0, [sp, #216]4367; BE-I64-NEXT: mov r11, r14368; BE-I64-NEXT: ldm r3, {r1, r2, r3}4369; BE-I64-NEXT: bl lrintl4370; BE-I64-NEXT: add r3, sp, #2364371; BE-I64-NEXT: vmov.32 d12[0], r04372; BE-I64-NEXT: ldr r0, [sp, #232]4373; BE-I64-NEXT: mov r6, r14374; BE-I64-NEXT: ldm r3, {r1, r2, r3}4375; BE-I64-NEXT: bl lrintl4376; BE-I64-NEXT: add r3, sp, #2524377; BE-I64-NEXT: vmov.32 d13[0], r04378; BE-I64-NEXT: ldr r0, [sp, #248]4379; BE-I64-NEXT: mov r7, r14380; BE-I64-NEXT: ldm r3, {r1, r2, r3}4381; BE-I64-NEXT: bl lrintl4382; BE-I64-NEXT: add r3, sp, #2684383; BE-I64-NEXT: vmov.32 d14[0], r04384; BE-I64-NEXT: ldr r0, [sp, #264]4385; BE-I64-NEXT: mov r5, r14386; BE-I64-NEXT: ldm r3, {r1, r2, r3}4387; BE-I64-NEXT: bl lrintl4388; BE-I64-NEXT: vmov.32 d15[0], r04389; BE-I64-NEXT: ldr r0, [sp, #280]4390; BE-I64-NEXT: ldr r2, [sp, #288]4391; BE-I64-NEXT: vmov.32 d13[1], r74392; BE-I64-NEXT: ldr r7, [sp, #284]4393; BE-I64-NEXT: ldr r3, [sp, #292]4394; BE-I64-NEXT: vmov.32 d14[1], r54395; BE-I64-NEXT: ldr r5, [sp, #328]4396; BE-I64-NEXT: vmov.32 d12[1], r64397; BE-I64-NEXT: ldr r6, [sp, #300]4398; BE-I64-NEXT: vmov.32 d10[1], r84399; BE-I64-NEXT: ldr r8, [sp, #184]4400; BE-I64-NEXT: vmov.32 d11[1], r114401; BE-I64-NEXT: vmov.32 d9[1], r104402; BE-I64-NEXT: vmov.32 d8[1], r94403; BE-I64-NEXT: vmov.32 d15[1], r14404; BE-I64-NEXT: mov r1, r74405; BE-I64-NEXT: vstr d14, [sp, #48] @ 8-byte Spill4406; BE-I64-NEXT: vstr d13, [sp, #40] @ 8-byte Spill4407; BE-I64-NEXT: vstr d12, [sp, #32] @ 8-byte Spill4408; BE-I64-NEXT: vstr d11, [sp, #24] @ 8-byte Spill4409; BE-I64-NEXT: vstr d10, [sp, #16] @ 8-byte Spill4410; BE-I64-NEXT: vstr d9, [sp, #8] @ 8-byte Spill4411; BE-I64-NEXT: vstr d8, [sp] @ 8-byte Spill4412; BE-I64-NEXT: bl lrintl4413; BE-I64-NEXT: mov r10, r14414; BE-I64-NEXT: ldr r1, [sp, #296]4415; BE-I64-NEXT: ldr r2, [sp, #304]4416; BE-I64-NEXT: vmov.32 d8[0], r04417; BE-I64-NEXT: ldr r3, [sp, #308]4418; BE-I64-NEXT: mov r0, r14419; BE-I64-NEXT: mov r1, r64420; BE-I64-NEXT: bl lrintl4421; BE-I64-NEXT: add r3, sp, #3324422; BE-I64-NEXT: mov r11, r14423; BE-I64-NEXT: vmov.32 d9[0], r04424; BE-I64-NEXT: mov r0, r54425; BE-I64-NEXT: ldm r3, {r1, r2, r3}4426; BE-I64-NEXT: bl lrintl4427; BE-I64-NEXT: add r3, sp, #1884428; BE-I64-NEXT: mov r7, r14429; BE-I64-NEXT: vmov.32 d10[0], r04430; BE-I64-NEXT: mov r0, r84431; BE-I64-NEXT: ldm r3, {r1, r2, r3}4432; BE-I64-NEXT: bl lrintl4433; BE-I64-NEXT: add r3, sp, #2044434; BE-I64-NEXT: vmov.32 d11[0], r04435; BE-I64-NEXT: ldr r0, [sp, #200]4436; BE-I64-NEXT: mov r8, r14437; BE-I64-NEXT: ldm r3, {r1, r2, r3}4438; BE-I64-NEXT: bl lrintl4439; BE-I64-NEXT: add r3, sp, #3484440; BE-I64-NEXT: vmov.32 d12[0], r04441; BE-I64-NEXT: ldr r0, [sp, #344]4442; BE-I64-NEXT: mov r5, r14443; BE-I64-NEXT: ldm r3, {r1, r2, r3}4444; BE-I64-NEXT: bl lrintl4445; BE-I64-NEXT: add r3, sp, #3644446; BE-I64-NEXT: vmov.32 d13[0], r04447; BE-I64-NEXT: ldr r0, [sp, #360]4448; BE-I64-NEXT: mov r9, r14449; BE-I64-NEXT: ldm r3, {r1, r2, r3}4450; BE-I64-NEXT: bl lrintl4451; BE-I64-NEXT: add r3, sp, #3164452; BE-I64-NEXT: vmov.32 d14[0], r04453; BE-I64-NEXT: ldr r0, [sp, #312]4454; BE-I64-NEXT: mov r6, r14455; BE-I64-NEXT: ldm r3, {r1, r2, r3}4456; BE-I64-NEXT: bl lrintl4457; BE-I64-NEXT: vldr d18, [sp, #48] @ 8-byte Reload4458; BE-I64-NEXT: vrev64.32 d17, d154459; BE-I64-NEXT: vrev64.32 d16, d184460; BE-I64-NEXT: vldr d18, [sp, #40] @ 8-byte Reload4461; BE-I64-NEXT: vmov.32 d24[0], r04462; BE-I64-NEXT: add r0, r4, #644463; BE-I64-NEXT: vldr d20, [sp, #32] @ 8-byte Reload4464; BE-I64-NEXT: vrev64.32 d19, d184465; BE-I64-NEXT: vmov.32 d9[1], r114466; BE-I64-NEXT: vmov.32 d10[1], r74467; BE-I64-NEXT: vrev64.32 d18, d204468; BE-I64-NEXT: vldr d20, [sp, #24] @ 8-byte Reload4469; BE-I64-NEXT: vmov.32 d8[1], r104470; BE-I64-NEXT: vmov.32 d14[1], r64471; BE-I64-NEXT: vmov.32 d24[1], r14472; BE-I64-NEXT: vldr d22, [sp, #16] @ 8-byte Reload4473; BE-I64-NEXT: vrev64.32 d21, d204474; BE-I64-NEXT: vrev64.32 d1, d94475; BE-I64-NEXT: vmov.32 d13[1], r94476; BE-I64-NEXT: vrev64.32 d31, d104477; BE-I64-NEXT: vrev64.32 d20, d224478; BE-I64-NEXT: vldr d22, [sp, #8] @ 8-byte Reload4479; BE-I64-NEXT: vrev64.32 d0, d84480; BE-I64-NEXT: vrev64.32 d29, d144481; BE-I64-NEXT: vmov.32 d12[1], r54482; BE-I64-NEXT: vrev64.32 d30, d244483; BE-I64-NEXT: vrev64.32 d27, d224484; BE-I64-NEXT: vldr d22, [sp] @ 8-byte Reload4485; BE-I64-NEXT: vst1.64 {d0, d1}, [r0:128]!4486; BE-I64-NEXT: vmov.32 d11[1], r84487; BE-I64-NEXT: vrev64.32 d28, d134488; BE-I64-NEXT: vst1.64 {d30, d31}, [r0:128]!4489; BE-I64-NEXT: vrev64.32 d26, d224490; BE-I64-NEXT: vrev64.32 d23, d124491; BE-I64-NEXT: vst1.64 {d28, d29}, [r0:128]!4492; BE-I64-NEXT: vrev64.32 d22, d114493; BE-I64-NEXT: vst1.64 {d26, d27}, [r0:128]4494; BE-I64-NEXT: vst1.64 {d20, d21}, [r4:128]!4495; BE-I64-NEXT: vst1.64 {d22, d23}, [r4:128]!4496; BE-I64-NEXT: vst1.64 {d18, d19}, [r4:128]!4497; BE-I64-NEXT: vst1.64 {d16, d17}, [r4:128]4498; BE-I64-NEXT: add sp, sp, #564499; BE-I64-NEXT: vpop {d8, d9, d10, d11, d12, d13, d14, d15}4500; BE-I64-NEXT: add sp, sp, #44501; BE-I64-NEXT: pop {r4, r5, r6, r7, r8, r9, r10, r11, pc}4502 %a = call <16 x iXLen> @llvm.lrint.v16iXLen.v16fp128(<16 x fp128> %x)4503 ret <16 x iXLen> %a4504}4505