1*9880d681SAndroid Build Coastguard Worker; Test the MSA intrinsics that are encoded with the 2RF instruction format. 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=mips -mattr=+msa,+fp64 -relocation-model=pic < %s | FileCheck %s 4*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=mipsel -mattr=+msa,+fp64 -relocation-model=pic < %s | FileCheck %s 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Worker@llvm_mips_flog2_w_ARG1 = global <4 x float> <float 0.000000e+00, float 1.000000e+00, float 2.000000e+00, float 3.000000e+00>, align 16 7*9880d681SAndroid Build Coastguard Worker@llvm_mips_flog2_w_RES = global <4 x float> <float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00>, align 16 8*9880d681SAndroid Build Coastguard Worker 9*9880d681SAndroid Build Coastguard Workerdefine void @llvm_mips_flog2_w_test() nounwind { 10*9880d681SAndroid Build Coastguard Workerentry: 11*9880d681SAndroid Build Coastguard Worker %0 = load <4 x float>, <4 x float>* @llvm_mips_flog2_w_ARG1 12*9880d681SAndroid Build Coastguard Worker %1 = tail call <4 x float> @llvm.mips.flog2.w(<4 x float> %0) 13*9880d681SAndroid Build Coastguard Worker store <4 x float> %1, <4 x float>* @llvm_mips_flog2_w_RES 14*9880d681SAndroid Build Coastguard Worker ret void 15*9880d681SAndroid Build Coastguard Worker} 16*9880d681SAndroid Build Coastguard Worker 17*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.mips.flog2.w(<4 x float>) nounwind 18*9880d681SAndroid Build Coastguard Worker 19*9880d681SAndroid Build Coastguard Worker; CHECK: llvm_mips_flog2_w_test: 20*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_flog2_w_ARG1) 21*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]]) 22*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: flog2.w [[WD:\$w[0-9]+]], [[WS]] 23*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_flog2_w_RES) 24*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: st.w [[WD]], 0([[R2]]) 25*9880d681SAndroid Build Coastguard Worker; CHECK: .size llvm_mips_flog2_w_test 26*9880d681SAndroid Build Coastguard Worker; 27*9880d681SAndroid Build Coastguard Worker@llvm_mips_flog2_d_ARG1 = global <2 x double> <double 0.000000e+00, double 1.000000e+00>, align 16 28*9880d681SAndroid Build Coastguard Worker@llvm_mips_flog2_d_RES = global <2 x double> <double 0.000000e+00, double 0.000000e+00>, align 16 29*9880d681SAndroid Build Coastguard Worker 30*9880d681SAndroid Build Coastguard Workerdefine void @llvm_mips_flog2_d_test() nounwind { 31*9880d681SAndroid Build Coastguard Workerentry: 32*9880d681SAndroid Build Coastguard Worker %0 = load <2 x double>, <2 x double>* @llvm_mips_flog2_d_ARG1 33*9880d681SAndroid Build Coastguard Worker %1 = tail call <2 x double> @llvm.mips.flog2.d(<2 x double> %0) 34*9880d681SAndroid Build Coastguard Worker store <2 x double> %1, <2 x double>* @llvm_mips_flog2_d_RES 35*9880d681SAndroid Build Coastguard Worker ret void 36*9880d681SAndroid Build Coastguard Worker} 37*9880d681SAndroid Build Coastguard Worker 38*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.mips.flog2.d(<2 x double>) nounwind 39*9880d681SAndroid Build Coastguard Worker 40*9880d681SAndroid Build Coastguard Worker; CHECK: llvm_mips_flog2_d_test: 41*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_flog2_d_ARG1) 42*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]]) 43*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: flog2.d [[WD:\$w[0-9]+]], [[WS]] 44*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_flog2_d_RES) 45*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: st.d [[WD]], 0([[R2]]) 46*9880d681SAndroid Build Coastguard Worker; CHECK: .size llvm_mips_flog2_d_test 47*9880d681SAndroid Build Coastguard Worker 48*9880d681SAndroid Build Coastguard Workerdefine void @flog2_w_test() nounwind { 49*9880d681SAndroid Build Coastguard Workerentry: 50*9880d681SAndroid Build Coastguard Worker %0 = load <4 x float>, <4 x float>* @llvm_mips_flog2_w_ARG1 51*9880d681SAndroid Build Coastguard Worker %1 = tail call <4 x float> @llvm.log2.v4f32(<4 x float> %0) 52*9880d681SAndroid Build Coastguard Worker store <4 x float> %1, <4 x float>* @llvm_mips_flog2_w_RES 53*9880d681SAndroid Build Coastguard Worker ret void 54*9880d681SAndroid Build Coastguard Worker} 55*9880d681SAndroid Build Coastguard Worker 56*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.log2.v4f32(<4 x float> %val) 57*9880d681SAndroid Build Coastguard Worker 58*9880d681SAndroid Build Coastguard Worker; CHECK: flog2_w_test: 59*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_flog2_w_ARG1) 60*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]]) 61*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: flog2.w [[WD:\$w[0-9]+]], [[WS]] 62*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_flog2_w_RES) 63*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: st.w [[WD]], 0([[R2]]) 64*9880d681SAndroid Build Coastguard Worker; CHECK: .size flog2_w_test 65*9880d681SAndroid Build Coastguard Worker 66*9880d681SAndroid Build Coastguard Workerdefine void @flog2_d_test() nounwind { 67*9880d681SAndroid Build Coastguard Workerentry: 68*9880d681SAndroid Build Coastguard Worker %0 = load <2 x double>, <2 x double>* @llvm_mips_flog2_d_ARG1 69*9880d681SAndroid Build Coastguard Worker %1 = tail call <2 x double> @llvm.log2.v2f64(<2 x double> %0) 70*9880d681SAndroid Build Coastguard Worker store <2 x double> %1, <2 x double>* @llvm_mips_flog2_d_RES 71*9880d681SAndroid Build Coastguard Worker ret void 72*9880d681SAndroid Build Coastguard Worker} 73*9880d681SAndroid Build Coastguard Worker 74*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.log2.v2f64(<2 x double> %val) 75*9880d681SAndroid Build Coastguard Worker 76*9880d681SAndroid Build Coastguard Worker; CHECK: flog2_d_test: 77*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_flog2_d_ARG1) 78*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]]) 79*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: flog2.d [[WD:\$w[0-9]+]], [[WS]] 80*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_flog2_d_RES) 81*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: st.d [[WD]], 0([[R2]]) 82*9880d681SAndroid Build Coastguard Worker; CHECK: .size flog2_d_test 83*9880d681SAndroid Build Coastguard Worker; 84*9880d681SAndroid Build Coastguard Worker@llvm_mips_frint_w_ARG1 = global <4 x float> <float 0.000000e+00, float 1.000000e+00, float 2.000000e+00, float 3.000000e+00>, align 16 85*9880d681SAndroid Build Coastguard Worker@llvm_mips_frint_w_RES = global <4 x float> <float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00>, align 16 86*9880d681SAndroid Build Coastguard Worker 87*9880d681SAndroid Build Coastguard Workerdefine void @llvm_mips_frint_w_test() nounwind { 88*9880d681SAndroid Build Coastguard Workerentry: 89*9880d681SAndroid Build Coastguard Worker %0 = load <4 x float>, <4 x float>* @llvm_mips_frint_w_ARG1 90*9880d681SAndroid Build Coastguard Worker %1 = tail call <4 x float> @llvm.mips.frint.w(<4 x float> %0) 91*9880d681SAndroid Build Coastguard Worker store <4 x float> %1, <4 x float>* @llvm_mips_frint_w_RES 92*9880d681SAndroid Build Coastguard Worker ret void 93*9880d681SAndroid Build Coastguard Worker} 94*9880d681SAndroid Build Coastguard Worker 95*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.mips.frint.w(<4 x float>) nounwind 96*9880d681SAndroid Build Coastguard Worker 97*9880d681SAndroid Build Coastguard Worker; CHECK: llvm_mips_frint_w_test: 98*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_frint_w_ARG1) 99*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]]) 100*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: frint.w [[WD:\$w[0-9]+]], [[WS]] 101*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_frint_w_RES) 102*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: st.w [[WD]], 0([[R2]]) 103*9880d681SAndroid Build Coastguard Worker; CHECK: .size llvm_mips_frint_w_test 104*9880d681SAndroid Build Coastguard Worker; 105*9880d681SAndroid Build Coastguard Worker@llvm_mips_frint_d_ARG1 = global <2 x double> <double 0.000000e+00, double 1.000000e+00>, align 16 106*9880d681SAndroid Build Coastguard Worker@llvm_mips_frint_d_RES = global <2 x double> <double 0.000000e+00, double 0.000000e+00>, align 16 107*9880d681SAndroid Build Coastguard Worker 108*9880d681SAndroid Build Coastguard Workerdefine void @llvm_mips_frint_d_test() nounwind { 109*9880d681SAndroid Build Coastguard Workerentry: 110*9880d681SAndroid Build Coastguard Worker %0 = load <2 x double>, <2 x double>* @llvm_mips_frint_d_ARG1 111*9880d681SAndroid Build Coastguard Worker %1 = tail call <2 x double> @llvm.mips.frint.d(<2 x double> %0) 112*9880d681SAndroid Build Coastguard Worker store <2 x double> %1, <2 x double>* @llvm_mips_frint_d_RES 113*9880d681SAndroid Build Coastguard Worker ret void 114*9880d681SAndroid Build Coastguard Worker} 115*9880d681SAndroid Build Coastguard Worker 116*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.mips.frint.d(<2 x double>) nounwind 117*9880d681SAndroid Build Coastguard Worker 118*9880d681SAndroid Build Coastguard Worker; CHECK: llvm_mips_frint_d_test: 119*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_frint_d_ARG1) 120*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]]) 121*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: frint.d [[WD:\$w[0-9]+]], [[WS]] 122*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_frint_d_RES) 123*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: st.d [[WD]], 0([[R2]]) 124*9880d681SAndroid Build Coastguard Worker; CHECK: .size llvm_mips_frint_d_test 125*9880d681SAndroid Build Coastguard Worker 126*9880d681SAndroid Build Coastguard Workerdefine void @frint_w_test() nounwind { 127*9880d681SAndroid Build Coastguard Workerentry: 128*9880d681SAndroid Build Coastguard Worker %0 = load <4 x float>, <4 x float>* @llvm_mips_frint_w_ARG1 129*9880d681SAndroid Build Coastguard Worker %1 = tail call <4 x float> @llvm.rint.v4f32(<4 x float> %0) 130*9880d681SAndroid Build Coastguard Worker store <4 x float> %1, <4 x float>* @llvm_mips_frint_w_RES 131*9880d681SAndroid Build Coastguard Worker ret void 132*9880d681SAndroid Build Coastguard Worker} 133*9880d681SAndroid Build Coastguard Worker 134*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.rint.v4f32(<4 x float>) nounwind 135*9880d681SAndroid Build Coastguard Worker 136*9880d681SAndroid Build Coastguard Worker; CHECK: frint_w_test: 137*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_frint_w_ARG1) 138*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]]) 139*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: frint.w [[WD:\$w[0-9]+]], [[WS]] 140*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_frint_w_RES) 141*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: st.w [[WD]], 0([[R2]]) 142*9880d681SAndroid Build Coastguard Worker; CHECK: .size frint_w_test 143*9880d681SAndroid Build Coastguard Worker 144*9880d681SAndroid Build Coastguard Workerdefine void @frint_d_test() nounwind { 145*9880d681SAndroid Build Coastguard Workerentry: 146*9880d681SAndroid Build Coastguard Worker %0 = load <2 x double>, <2 x double>* @llvm_mips_frint_d_ARG1 147*9880d681SAndroid Build Coastguard Worker %1 = tail call <2 x double> @llvm.rint.v2f64(<2 x double> %0) 148*9880d681SAndroid Build Coastguard Worker store <2 x double> %1, <2 x double>* @llvm_mips_frint_d_RES 149*9880d681SAndroid Build Coastguard Worker ret void 150*9880d681SAndroid Build Coastguard Worker} 151*9880d681SAndroid Build Coastguard Worker 152*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.rint.v2f64(<2 x double>) nounwind 153*9880d681SAndroid Build Coastguard Worker 154*9880d681SAndroid Build Coastguard Worker; CHECK: frint_d_test: 155*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_frint_d_ARG1) 156*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]]) 157*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: frint.d [[WD:\$w[0-9]+]], [[WS]] 158*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_frint_d_RES) 159*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: st.d [[WD]], 0([[R2]]) 160*9880d681SAndroid Build Coastguard Worker; CHECK: .size frint_d_test 161*9880d681SAndroid Build Coastguard Worker; 162*9880d681SAndroid Build Coastguard Worker@llvm_mips_frcp_w_ARG1 = global <4 x float> <float 0.000000e+00, float 1.000000e+00, float 2.000000e+00, float 3.000000e+00>, align 16 163*9880d681SAndroid Build Coastguard Worker@llvm_mips_frcp_w_RES = global <4 x float> <float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00>, align 16 164*9880d681SAndroid Build Coastguard Worker 165*9880d681SAndroid Build Coastguard Workerdefine void @llvm_mips_frcp_w_test() nounwind { 166*9880d681SAndroid Build Coastguard Workerentry: 167*9880d681SAndroid Build Coastguard Worker %0 = load <4 x float>, <4 x float>* @llvm_mips_frcp_w_ARG1 168*9880d681SAndroid Build Coastguard Worker %1 = tail call <4 x float> @llvm.mips.frcp.w(<4 x float> %0) 169*9880d681SAndroid Build Coastguard Worker store <4 x float> %1, <4 x float>* @llvm_mips_frcp_w_RES 170*9880d681SAndroid Build Coastguard Worker ret void 171*9880d681SAndroid Build Coastguard Worker} 172*9880d681SAndroid Build Coastguard Worker 173*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.mips.frcp.w(<4 x float>) nounwind 174*9880d681SAndroid Build Coastguard Worker 175*9880d681SAndroid Build Coastguard Worker; CHECK: llvm_mips_frcp_w_test: 176*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_frcp_w_ARG1) 177*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]]) 178*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: frcp.w [[WD:\$w[0-9]+]], [[WS]] 179*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_frcp_w_RES) 180*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: st.w [[WD]], 0([[R2]]) 181*9880d681SAndroid Build Coastguard Worker; CHECK: .size llvm_mips_frcp_w_test 182*9880d681SAndroid Build Coastguard Worker; 183*9880d681SAndroid Build Coastguard Worker@llvm_mips_frcp_d_ARG1 = global <2 x double> <double 0.000000e+00, double 1.000000e+00>, align 16 184*9880d681SAndroid Build Coastguard Worker@llvm_mips_frcp_d_RES = global <2 x double> <double 0.000000e+00, double 0.000000e+00>, align 16 185*9880d681SAndroid Build Coastguard Worker 186*9880d681SAndroid Build Coastguard Workerdefine void @llvm_mips_frcp_d_test() nounwind { 187*9880d681SAndroid Build Coastguard Workerentry: 188*9880d681SAndroid Build Coastguard Worker %0 = load <2 x double>, <2 x double>* @llvm_mips_frcp_d_ARG1 189*9880d681SAndroid Build Coastguard Worker %1 = tail call <2 x double> @llvm.mips.frcp.d(<2 x double> %0) 190*9880d681SAndroid Build Coastguard Worker store <2 x double> %1, <2 x double>* @llvm_mips_frcp_d_RES 191*9880d681SAndroid Build Coastguard Worker ret void 192*9880d681SAndroid Build Coastguard Worker} 193*9880d681SAndroid Build Coastguard Worker 194*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.mips.frcp.d(<2 x double>) nounwind 195*9880d681SAndroid Build Coastguard Worker 196*9880d681SAndroid Build Coastguard Worker; CHECK: llvm_mips_frcp_d_test: 197*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_frcp_d_ARG1) 198*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]]) 199*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: frcp.d [[WD:\$w[0-9]+]], [[WS]] 200*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_frcp_d_RES) 201*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: st.d [[WD]], 0([[R2]]) 202*9880d681SAndroid Build Coastguard Worker; CHECK: .size llvm_mips_frcp_d_test 203*9880d681SAndroid Build Coastguard Worker; 204*9880d681SAndroid Build Coastguard Worker@llvm_mips_frsqrt_w_ARG1 = global <4 x float> <float 0.000000e+00, float 1.000000e+00, float 2.000000e+00, float 3.000000e+00>, align 16 205*9880d681SAndroid Build Coastguard Worker@llvm_mips_frsqrt_w_RES = global <4 x float> <float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00>, align 16 206*9880d681SAndroid Build Coastguard Worker 207*9880d681SAndroid Build Coastguard Workerdefine void @llvm_mips_frsqrt_w_test() nounwind { 208*9880d681SAndroid Build Coastguard Workerentry: 209*9880d681SAndroid Build Coastguard Worker %0 = load <4 x float>, <4 x float>* @llvm_mips_frsqrt_w_ARG1 210*9880d681SAndroid Build Coastguard Worker %1 = tail call <4 x float> @llvm.mips.frsqrt.w(<4 x float> %0) 211*9880d681SAndroid Build Coastguard Worker store <4 x float> %1, <4 x float>* @llvm_mips_frsqrt_w_RES 212*9880d681SAndroid Build Coastguard Worker ret void 213*9880d681SAndroid Build Coastguard Worker} 214*9880d681SAndroid Build Coastguard Worker 215*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.mips.frsqrt.w(<4 x float>) nounwind 216*9880d681SAndroid Build Coastguard Worker 217*9880d681SAndroid Build Coastguard Worker; CHECK: llvm_mips_frsqrt_w_test: 218*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_frsqrt_w_ARG1) 219*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]]) 220*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: frsqrt.w [[WD:\$w[0-9]+]], [[WS]] 221*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_frsqrt_w_RES) 222*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: st.w [[WD]], 0([[R2]]) 223*9880d681SAndroid Build Coastguard Worker; CHECK: .size llvm_mips_frsqrt_w_test 224*9880d681SAndroid Build Coastguard Worker; 225*9880d681SAndroid Build Coastguard Worker@llvm_mips_frsqrt_d_ARG1 = global <2 x double> <double 0.000000e+00, double 1.000000e+00>, align 16 226*9880d681SAndroid Build Coastguard Worker@llvm_mips_frsqrt_d_RES = global <2 x double> <double 0.000000e+00, double 0.000000e+00>, align 16 227*9880d681SAndroid Build Coastguard Worker 228*9880d681SAndroid Build Coastguard Workerdefine void @llvm_mips_frsqrt_d_test() nounwind { 229*9880d681SAndroid Build Coastguard Workerentry: 230*9880d681SAndroid Build Coastguard Worker %0 = load <2 x double>, <2 x double>* @llvm_mips_frsqrt_d_ARG1 231*9880d681SAndroid Build Coastguard Worker %1 = tail call <2 x double> @llvm.mips.frsqrt.d(<2 x double> %0) 232*9880d681SAndroid Build Coastguard Worker store <2 x double> %1, <2 x double>* @llvm_mips_frsqrt_d_RES 233*9880d681SAndroid Build Coastguard Worker ret void 234*9880d681SAndroid Build Coastguard Worker} 235*9880d681SAndroid Build Coastguard Worker 236*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.mips.frsqrt.d(<2 x double>) nounwind 237*9880d681SAndroid Build Coastguard Worker 238*9880d681SAndroid Build Coastguard Worker; CHECK: llvm_mips_frsqrt_d_test: 239*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_frsqrt_d_ARG1) 240*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]]) 241*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: frsqrt.d [[WD:\$w[0-9]+]], [[WS]] 242*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_frsqrt_d_RES) 243*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: st.d [[WD]], 0([[R2]]) 244*9880d681SAndroid Build Coastguard Worker; CHECK: .size llvm_mips_frsqrt_d_test 245*9880d681SAndroid Build Coastguard Worker; 246*9880d681SAndroid Build Coastguard Worker@llvm_mips_fsqrt_w_ARG1 = global <4 x float> <float 0.000000e+00, float 1.000000e+00, float 2.000000e+00, float 3.000000e+00>, align 16 247*9880d681SAndroid Build Coastguard Worker@llvm_mips_fsqrt_w_RES = global <4 x float> <float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00>, align 16 248*9880d681SAndroid Build Coastguard Worker 249*9880d681SAndroid Build Coastguard Workerdefine void @llvm_mips_fsqrt_w_test() nounwind { 250*9880d681SAndroid Build Coastguard Workerentry: 251*9880d681SAndroid Build Coastguard Worker %0 = load <4 x float>, <4 x float>* @llvm_mips_fsqrt_w_ARG1 252*9880d681SAndroid Build Coastguard Worker %1 = tail call <4 x float> @llvm.mips.fsqrt.w(<4 x float> %0) 253*9880d681SAndroid Build Coastguard Worker store <4 x float> %1, <4 x float>* @llvm_mips_fsqrt_w_RES 254*9880d681SAndroid Build Coastguard Worker ret void 255*9880d681SAndroid Build Coastguard Worker} 256*9880d681SAndroid Build Coastguard Worker 257*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.mips.fsqrt.w(<4 x float>) nounwind 258*9880d681SAndroid Build Coastguard Worker 259*9880d681SAndroid Build Coastguard Worker; CHECK: llvm_mips_fsqrt_w_test: 260*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_fsqrt_w_ARG1) 261*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]]) 262*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fsqrt.w [[WD:\$w[0-9]+]], [[WS]] 263*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_fsqrt_w_RES) 264*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: st.w [[WD]], 0([[R2]]) 265*9880d681SAndroid Build Coastguard Worker; CHECK: .size llvm_mips_fsqrt_w_test 266*9880d681SAndroid Build Coastguard Worker; 267*9880d681SAndroid Build Coastguard Worker@llvm_mips_fsqrt_d_ARG1 = global <2 x double> <double 0.000000e+00, double 1.000000e+00>, align 16 268*9880d681SAndroid Build Coastguard Worker@llvm_mips_fsqrt_d_RES = global <2 x double> <double 0.000000e+00, double 0.000000e+00>, align 16 269*9880d681SAndroid Build Coastguard Worker 270*9880d681SAndroid Build Coastguard Workerdefine void @llvm_mips_fsqrt_d_test() nounwind { 271*9880d681SAndroid Build Coastguard Workerentry: 272*9880d681SAndroid Build Coastguard Worker %0 = load <2 x double>, <2 x double>* @llvm_mips_fsqrt_d_ARG1 273*9880d681SAndroid Build Coastguard Worker %1 = tail call <2 x double> @llvm.mips.fsqrt.d(<2 x double> %0) 274*9880d681SAndroid Build Coastguard Worker store <2 x double> %1, <2 x double>* @llvm_mips_fsqrt_d_RES 275*9880d681SAndroid Build Coastguard Worker ret void 276*9880d681SAndroid Build Coastguard Worker} 277*9880d681SAndroid Build Coastguard Worker 278*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.mips.fsqrt.d(<2 x double>) nounwind 279*9880d681SAndroid Build Coastguard Worker 280*9880d681SAndroid Build Coastguard Worker; CHECK: llvm_mips_fsqrt_d_test: 281*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_fsqrt_d_ARG1) 282*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]]) 283*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fsqrt.d [[WD:\$w[0-9]+]], [[WS]] 284*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_fsqrt_d_RES) 285*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: st.d [[WD]], 0([[R2]]) 286*9880d681SAndroid Build Coastguard Worker; CHECK: .size llvm_mips_fsqrt_d_test 287*9880d681SAndroid Build Coastguard Worker 288*9880d681SAndroid Build Coastguard Workerdefine void @fsqrt_w_test() nounwind { 289*9880d681SAndroid Build Coastguard Workerentry: 290*9880d681SAndroid Build Coastguard Worker %0 = load <4 x float>, <4 x float>* @llvm_mips_fsqrt_w_ARG1 291*9880d681SAndroid Build Coastguard Worker %1 = tail call <4 x float> @llvm.sqrt.v4f32(<4 x float> %0) 292*9880d681SAndroid Build Coastguard Worker store <4 x float> %1, <4 x float>* @llvm_mips_fsqrt_w_RES 293*9880d681SAndroid Build Coastguard Worker ret void 294*9880d681SAndroid Build Coastguard Worker} 295*9880d681SAndroid Build Coastguard Worker 296*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.sqrt.v4f32(<4 x float>) nounwind 297*9880d681SAndroid Build Coastguard Worker 298*9880d681SAndroid Build Coastguard Worker; CHECK: fsqrt_w_test: 299*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_fsqrt_w_ARG1) 300*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]]) 301*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fsqrt.w [[WD:\$w[0-9]+]], [[WS]] 302*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_fsqrt_w_RES) 303*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: st.w [[WD]], 0([[R2]]) 304*9880d681SAndroid Build Coastguard Worker; CHECK: .size fsqrt_w_test 305*9880d681SAndroid Build Coastguard Worker 306*9880d681SAndroid Build Coastguard Workerdefine void @fsqrt_d_test() nounwind { 307*9880d681SAndroid Build Coastguard Workerentry: 308*9880d681SAndroid Build Coastguard Worker %0 = load <2 x double>, <2 x double>* @llvm_mips_fsqrt_d_ARG1 309*9880d681SAndroid Build Coastguard Worker %1 = tail call <2 x double> @llvm.sqrt.v2f64(<2 x double> %0) 310*9880d681SAndroid Build Coastguard Worker store <2 x double> %1, <2 x double>* @llvm_mips_fsqrt_d_RES 311*9880d681SAndroid Build Coastguard Worker ret void 312*9880d681SAndroid Build Coastguard Worker} 313*9880d681SAndroid Build Coastguard Worker 314*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.sqrt.v2f64(<2 x double>) nounwind 315*9880d681SAndroid Build Coastguard Worker 316*9880d681SAndroid Build Coastguard Worker; CHECK: fsqrt_d_test: 317*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_fsqrt_d_ARG1) 318*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]]) 319*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: fsqrt.d [[WD:\$w[0-9]+]], [[WS]] 320*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_fsqrt_d_RES) 321*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: st.d [[WD]], 0([[R2]]) 322*9880d681SAndroid Build Coastguard Worker; CHECK: .size fsqrt_d_test 323*9880d681SAndroid Build Coastguard Worker; 324