1*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=mips -mattr=+msa,+fp64 < %s | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=mipsel -mattr=+msa,+fp64 < %s | FileCheck %s 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Workerdefine void @add_v16i8(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind { 5*9880d681SAndroid Build Coastguard Worker ; CHECK: add_v16i8: 6*9880d681SAndroid Build Coastguard Worker 7*9880d681SAndroid Build Coastguard Worker %1 = load <16 x i8>, <16 x i8>* %a 8*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 9*9880d681SAndroid Build Coastguard Worker %2 = load <16 x i8>, <16 x i8>* %b 10*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6) 11*9880d681SAndroid Build Coastguard Worker %3 = add <16 x i8> %1, %2 12*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: addv.b [[R3:\$w[0-9]+]], [[R1]], [[R2]] 13*9880d681SAndroid Build Coastguard Worker store <16 x i8> %3, <16 x i8>* %c 14*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.b [[R3]], 0($4) 15*9880d681SAndroid Build Coastguard Worker 16*9880d681SAndroid Build Coastguard Worker ret void 17*9880d681SAndroid Build Coastguard Worker ; CHECK: .size add_v16i8 18*9880d681SAndroid Build Coastguard Worker} 19*9880d681SAndroid Build Coastguard Worker 20*9880d681SAndroid Build Coastguard Workerdefine void @add_v8i16(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind { 21*9880d681SAndroid Build Coastguard Worker ; CHECK: add_v8i16: 22*9880d681SAndroid Build Coastguard Worker 23*9880d681SAndroid Build Coastguard Worker %1 = load <8 x i16>, <8 x i16>* %a 24*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 25*9880d681SAndroid Build Coastguard Worker %2 = load <8 x i16>, <8 x i16>* %b 26*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6) 27*9880d681SAndroid Build Coastguard Worker %3 = add <8 x i16> %1, %2 28*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: addv.h [[R3:\$w[0-9]+]], [[R1]], [[R2]] 29*9880d681SAndroid Build Coastguard Worker store <8 x i16> %3, <8 x i16>* %c 30*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.h [[R3]], 0($4) 31*9880d681SAndroid Build Coastguard Worker 32*9880d681SAndroid Build Coastguard Worker ret void 33*9880d681SAndroid Build Coastguard Worker ; CHECK: .size add_v8i16 34*9880d681SAndroid Build Coastguard Worker} 35*9880d681SAndroid Build Coastguard Worker 36*9880d681SAndroid Build Coastguard Workerdefine void @add_v4i32(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind { 37*9880d681SAndroid Build Coastguard Worker ; CHECK: add_v4i32: 38*9880d681SAndroid Build Coastguard Worker 39*9880d681SAndroid Build Coastguard Worker %1 = load <4 x i32>, <4 x i32>* %a 40*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 41*9880d681SAndroid Build Coastguard Worker %2 = load <4 x i32>, <4 x i32>* %b 42*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6) 43*9880d681SAndroid Build Coastguard Worker %3 = add <4 x i32> %1, %2 44*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: addv.w [[R3:\$w[0-9]+]], [[R1]], [[R2]] 45*9880d681SAndroid Build Coastguard Worker store <4 x i32> %3, <4 x i32>* %c 46*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.w [[R3]], 0($4) 47*9880d681SAndroid Build Coastguard Worker 48*9880d681SAndroid Build Coastguard Worker ret void 49*9880d681SAndroid Build Coastguard Worker ; CHECK: .size add_v4i32 50*9880d681SAndroid Build Coastguard Worker} 51*9880d681SAndroid Build Coastguard Worker 52*9880d681SAndroid Build Coastguard Workerdefine void @add_v2i64(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind { 53*9880d681SAndroid Build Coastguard Worker ; CHECK: add_v2i64: 54*9880d681SAndroid Build Coastguard Worker 55*9880d681SAndroid Build Coastguard Worker %1 = load <2 x i64>, <2 x i64>* %a 56*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 57*9880d681SAndroid Build Coastguard Worker %2 = load <2 x i64>, <2 x i64>* %b 58*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6) 59*9880d681SAndroid Build Coastguard Worker %3 = add <2 x i64> %1, %2 60*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: addv.d [[R3:\$w[0-9]+]], [[R1]], [[R2]] 61*9880d681SAndroid Build Coastguard Worker store <2 x i64> %3, <2 x i64>* %c 62*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.d [[R3]], 0($4) 63*9880d681SAndroid Build Coastguard Worker 64*9880d681SAndroid Build Coastguard Worker ret void 65*9880d681SAndroid Build Coastguard Worker ; CHECK: .size add_v2i64 66*9880d681SAndroid Build Coastguard Worker} 67*9880d681SAndroid Build Coastguard Worker 68*9880d681SAndroid Build Coastguard Workerdefine void @add_v16i8_i(<16 x i8>* %c, <16 x i8>* %a) nounwind { 69*9880d681SAndroid Build Coastguard Worker ; CHECK: add_v16i8_i: 70*9880d681SAndroid Build Coastguard Worker 71*9880d681SAndroid Build Coastguard Worker %1 = load <16 x i8>, <16 x i8>* %a 72*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 73*9880d681SAndroid Build Coastguard Worker %2 = add <16 x i8> %1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, 74*9880d681SAndroid Build Coastguard Worker i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 75*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: addvi.b [[R3:\$w[0-9]+]], [[R1]], 1 76*9880d681SAndroid Build Coastguard Worker store <16 x i8> %2, <16 x i8>* %c 77*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.b [[R3]], 0($4) 78*9880d681SAndroid Build Coastguard Worker 79*9880d681SAndroid Build Coastguard Worker ret void 80*9880d681SAndroid Build Coastguard Worker ; CHECK: .size add_v16i8_i 81*9880d681SAndroid Build Coastguard Worker} 82*9880d681SAndroid Build Coastguard Worker 83*9880d681SAndroid Build Coastguard Workerdefine void @add_v8i16_i(<8 x i16>* %c, <8 x i16>* %a) nounwind { 84*9880d681SAndroid Build Coastguard Worker ; CHECK: add_v8i16_i: 85*9880d681SAndroid Build Coastguard Worker 86*9880d681SAndroid Build Coastguard Worker %1 = load <8 x i16>, <8 x i16>* %a 87*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 88*9880d681SAndroid Build Coastguard Worker %2 = add <8 x i16> %1, <i16 1, i16 1, i16 1, i16 1, 89*9880d681SAndroid Build Coastguard Worker i16 1, i16 1, i16 1, i16 1> 90*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: addvi.h [[R3:\$w[0-9]+]], [[R1]], 1 91*9880d681SAndroid Build Coastguard Worker store <8 x i16> %2, <8 x i16>* %c 92*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.h [[R3]], 0($4) 93*9880d681SAndroid Build Coastguard Worker 94*9880d681SAndroid Build Coastguard Worker ret void 95*9880d681SAndroid Build Coastguard Worker ; CHECK: .size add_v8i16_i 96*9880d681SAndroid Build Coastguard Worker} 97*9880d681SAndroid Build Coastguard Worker 98*9880d681SAndroid Build Coastguard Workerdefine void @add_v4i32_i(<4 x i32>* %c, <4 x i32>* %a) nounwind { 99*9880d681SAndroid Build Coastguard Worker ; CHECK: add_v4i32_i: 100*9880d681SAndroid Build Coastguard Worker 101*9880d681SAndroid Build Coastguard Worker %1 = load <4 x i32>, <4 x i32>* %a 102*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 103*9880d681SAndroid Build Coastguard Worker %2 = add <4 x i32> %1, <i32 1, i32 1, i32 1, i32 1> 104*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: addvi.w [[R3:\$w[0-9]+]], [[R1]], 1 105*9880d681SAndroid Build Coastguard Worker store <4 x i32> %2, <4 x i32>* %c 106*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.w [[R3]], 0($4) 107*9880d681SAndroid Build Coastguard Worker 108*9880d681SAndroid Build Coastguard Worker ret void 109*9880d681SAndroid Build Coastguard Worker ; CHECK: .size add_v4i32_i 110*9880d681SAndroid Build Coastguard Worker} 111*9880d681SAndroid Build Coastguard Worker 112*9880d681SAndroid Build Coastguard Workerdefine void @add_v2i64_i(<2 x i64>* %c, <2 x i64>* %a) nounwind { 113*9880d681SAndroid Build Coastguard Worker ; CHECK: add_v2i64_i: 114*9880d681SAndroid Build Coastguard Worker 115*9880d681SAndroid Build Coastguard Worker %1 = load <2 x i64>, <2 x i64>* %a 116*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 117*9880d681SAndroid Build Coastguard Worker %2 = add <2 x i64> %1, <i64 1, i64 1> 118*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: addvi.d [[R3:\$w[0-9]+]], [[R1]], 1 119*9880d681SAndroid Build Coastguard Worker store <2 x i64> %2, <2 x i64>* %c 120*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.d [[R3]], 0($4) 121*9880d681SAndroid Build Coastguard Worker 122*9880d681SAndroid Build Coastguard Worker ret void 123*9880d681SAndroid Build Coastguard Worker ; CHECK: .size add_v2i64_i 124*9880d681SAndroid Build Coastguard Worker} 125*9880d681SAndroid Build Coastguard Worker 126*9880d681SAndroid Build Coastguard Workerdefine void @sub_v16i8(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind { 127*9880d681SAndroid Build Coastguard Worker ; CHECK: sub_v16i8: 128*9880d681SAndroid Build Coastguard Worker 129*9880d681SAndroid Build Coastguard Worker %1 = load <16 x i8>, <16 x i8>* %a 130*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 131*9880d681SAndroid Build Coastguard Worker %2 = load <16 x i8>, <16 x i8>* %b 132*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6) 133*9880d681SAndroid Build Coastguard Worker %3 = sub <16 x i8> %1, %2 134*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: subv.b [[R3:\$w[0-9]+]], [[R1]], [[R2]] 135*9880d681SAndroid Build Coastguard Worker store <16 x i8> %3, <16 x i8>* %c 136*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.b [[R3]], 0($4) 137*9880d681SAndroid Build Coastguard Worker 138*9880d681SAndroid Build Coastguard Worker ret void 139*9880d681SAndroid Build Coastguard Worker ; CHECK: .size sub_v16i8 140*9880d681SAndroid Build Coastguard Worker} 141*9880d681SAndroid Build Coastguard Worker 142*9880d681SAndroid Build Coastguard Workerdefine void @sub_v8i16(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind { 143*9880d681SAndroid Build Coastguard Worker ; CHECK: sub_v8i16: 144*9880d681SAndroid Build Coastguard Worker 145*9880d681SAndroid Build Coastguard Worker %1 = load <8 x i16>, <8 x i16>* %a 146*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 147*9880d681SAndroid Build Coastguard Worker %2 = load <8 x i16>, <8 x i16>* %b 148*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6) 149*9880d681SAndroid Build Coastguard Worker %3 = sub <8 x i16> %1, %2 150*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: subv.h [[R3:\$w[0-9]+]], [[R1]], [[R2]] 151*9880d681SAndroid Build Coastguard Worker store <8 x i16> %3, <8 x i16>* %c 152*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.h [[R3]], 0($4) 153*9880d681SAndroid Build Coastguard Worker 154*9880d681SAndroid Build Coastguard Worker ret void 155*9880d681SAndroid Build Coastguard Worker ; CHECK: .size sub_v8i16 156*9880d681SAndroid Build Coastguard Worker} 157*9880d681SAndroid Build Coastguard Worker 158*9880d681SAndroid Build Coastguard Workerdefine void @sub_v4i32(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind { 159*9880d681SAndroid Build Coastguard Worker ; CHECK: sub_v4i32: 160*9880d681SAndroid Build Coastguard Worker 161*9880d681SAndroid Build Coastguard Worker %1 = load <4 x i32>, <4 x i32>* %a 162*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 163*9880d681SAndroid Build Coastguard Worker %2 = load <4 x i32>, <4 x i32>* %b 164*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6) 165*9880d681SAndroid Build Coastguard Worker %3 = sub <4 x i32> %1, %2 166*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: subv.w [[R3:\$w[0-9]+]], [[R1]], [[R2]] 167*9880d681SAndroid Build Coastguard Worker store <4 x i32> %3, <4 x i32>* %c 168*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.w [[R3]], 0($4) 169*9880d681SAndroid Build Coastguard Worker 170*9880d681SAndroid Build Coastguard Worker ret void 171*9880d681SAndroid Build Coastguard Worker ; CHECK: .size sub_v4i32 172*9880d681SAndroid Build Coastguard Worker} 173*9880d681SAndroid Build Coastguard Worker 174*9880d681SAndroid Build Coastguard Workerdefine void @sub_v2i64(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind { 175*9880d681SAndroid Build Coastguard Worker ; CHECK: sub_v2i64: 176*9880d681SAndroid Build Coastguard Worker 177*9880d681SAndroid Build Coastguard Worker %1 = load <2 x i64>, <2 x i64>* %a 178*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 179*9880d681SAndroid Build Coastguard Worker %2 = load <2 x i64>, <2 x i64>* %b 180*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6) 181*9880d681SAndroid Build Coastguard Worker %3 = sub <2 x i64> %1, %2 182*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: subv.d [[R3:\$w[0-9]+]], [[R1]], [[R2]] 183*9880d681SAndroid Build Coastguard Worker store <2 x i64> %3, <2 x i64>* %c 184*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.d [[R3]], 0($4) 185*9880d681SAndroid Build Coastguard Worker 186*9880d681SAndroid Build Coastguard Worker ret void 187*9880d681SAndroid Build Coastguard Worker ; CHECK: .size sub_v2i64 188*9880d681SAndroid Build Coastguard Worker} 189*9880d681SAndroid Build Coastguard Worker 190*9880d681SAndroid Build Coastguard Workerdefine void @sub_v16i8_i(<16 x i8>* %c, <16 x i8>* %a) nounwind { 191*9880d681SAndroid Build Coastguard Worker ; CHECK: sub_v16i8_i: 192*9880d681SAndroid Build Coastguard Worker 193*9880d681SAndroid Build Coastguard Worker %1 = load <16 x i8>, <16 x i8>* %a 194*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 195*9880d681SAndroid Build Coastguard Worker %2 = sub <16 x i8> %1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, 196*9880d681SAndroid Build Coastguard Worker i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 197*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: subvi.b [[R3:\$w[0-9]+]], [[R1]], 1 198*9880d681SAndroid Build Coastguard Worker store <16 x i8> %2, <16 x i8>* %c 199*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.b [[R3]], 0($4) 200*9880d681SAndroid Build Coastguard Worker 201*9880d681SAndroid Build Coastguard Worker ret void 202*9880d681SAndroid Build Coastguard Worker ; CHECK: .size sub_v16i8_i 203*9880d681SAndroid Build Coastguard Worker} 204*9880d681SAndroid Build Coastguard Worker 205*9880d681SAndroid Build Coastguard Workerdefine void @sub_v8i16_i(<8 x i16>* %c, <8 x i16>* %a) nounwind { 206*9880d681SAndroid Build Coastguard Worker ; CHECK: sub_v8i16_i: 207*9880d681SAndroid Build Coastguard Worker 208*9880d681SAndroid Build Coastguard Worker %1 = load <8 x i16>, <8 x i16>* %a 209*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 210*9880d681SAndroid Build Coastguard Worker %2 = sub <8 x i16> %1, <i16 1, i16 1, i16 1, i16 1, 211*9880d681SAndroid Build Coastguard Worker i16 1, i16 1, i16 1, i16 1> 212*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: subvi.h [[R3:\$w[0-9]+]], [[R1]], 1 213*9880d681SAndroid Build Coastguard Worker store <8 x i16> %2, <8 x i16>* %c 214*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.h [[R3]], 0($4) 215*9880d681SAndroid Build Coastguard Worker 216*9880d681SAndroid Build Coastguard Worker ret void 217*9880d681SAndroid Build Coastguard Worker ; CHECK: .size sub_v8i16_i 218*9880d681SAndroid Build Coastguard Worker} 219*9880d681SAndroid Build Coastguard Worker 220*9880d681SAndroid Build Coastguard Workerdefine void @sub_v4i32_i(<4 x i32>* %c, <4 x i32>* %a) nounwind { 221*9880d681SAndroid Build Coastguard Worker ; CHECK: sub_v4i32_i: 222*9880d681SAndroid Build Coastguard Worker 223*9880d681SAndroid Build Coastguard Worker %1 = load <4 x i32>, <4 x i32>* %a 224*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 225*9880d681SAndroid Build Coastguard Worker %2 = sub <4 x i32> %1, <i32 1, i32 1, i32 1, i32 1> 226*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: subvi.w [[R3:\$w[0-9]+]], [[R1]], 1 227*9880d681SAndroid Build Coastguard Worker store <4 x i32> %2, <4 x i32>* %c 228*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.w [[R3]], 0($4) 229*9880d681SAndroid Build Coastguard Worker 230*9880d681SAndroid Build Coastguard Worker ret void 231*9880d681SAndroid Build Coastguard Worker ; CHECK: .size sub_v4i32_i 232*9880d681SAndroid Build Coastguard Worker} 233*9880d681SAndroid Build Coastguard Worker 234*9880d681SAndroid Build Coastguard Workerdefine void @sub_v2i64_i(<2 x i64>* %c, <2 x i64>* %a) nounwind { 235*9880d681SAndroid Build Coastguard Worker ; CHECK: sub_v2i64_i: 236*9880d681SAndroid Build Coastguard Worker 237*9880d681SAndroid Build Coastguard Worker %1 = load <2 x i64>, <2 x i64>* %a 238*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 239*9880d681SAndroid Build Coastguard Worker %2 = sub <2 x i64> %1, <i64 1, i64 1> 240*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: subvi.d [[R3:\$w[0-9]+]], [[R1]], 1 241*9880d681SAndroid Build Coastguard Worker store <2 x i64> %2, <2 x i64>* %c 242*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.d [[R3]], 0($4) 243*9880d681SAndroid Build Coastguard Worker 244*9880d681SAndroid Build Coastguard Worker ret void 245*9880d681SAndroid Build Coastguard Worker ; CHECK: .size sub_v2i64_i 246*9880d681SAndroid Build Coastguard Worker} 247*9880d681SAndroid Build Coastguard Worker 248*9880d681SAndroid Build Coastguard Workerdefine void @mul_v16i8(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind { 249*9880d681SAndroid Build Coastguard Worker ; CHECK: mul_v16i8: 250*9880d681SAndroid Build Coastguard Worker 251*9880d681SAndroid Build Coastguard Worker %1 = load <16 x i8>, <16 x i8>* %a 252*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 253*9880d681SAndroid Build Coastguard Worker %2 = load <16 x i8>, <16 x i8>* %b 254*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6) 255*9880d681SAndroid Build Coastguard Worker %3 = mul <16 x i8> %1, %2 256*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: mulv.b [[R3:\$w[0-9]+]], [[R1]], [[R2]] 257*9880d681SAndroid Build Coastguard Worker store <16 x i8> %3, <16 x i8>* %c 258*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.b [[R3]], 0($4) 259*9880d681SAndroid Build Coastguard Worker 260*9880d681SAndroid Build Coastguard Worker ret void 261*9880d681SAndroid Build Coastguard Worker ; CHECK: .size mul_v16i8 262*9880d681SAndroid Build Coastguard Worker} 263*9880d681SAndroid Build Coastguard Worker 264*9880d681SAndroid Build Coastguard Workerdefine void @mul_v8i16(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind { 265*9880d681SAndroid Build Coastguard Worker ; CHECK: mul_v8i16: 266*9880d681SAndroid Build Coastguard Worker 267*9880d681SAndroid Build Coastguard Worker %1 = load <8 x i16>, <8 x i16>* %a 268*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 269*9880d681SAndroid Build Coastguard Worker %2 = load <8 x i16>, <8 x i16>* %b 270*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6) 271*9880d681SAndroid Build Coastguard Worker %3 = mul <8 x i16> %1, %2 272*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: mulv.h [[R3:\$w[0-9]+]], [[R1]], [[R2]] 273*9880d681SAndroid Build Coastguard Worker store <8 x i16> %3, <8 x i16>* %c 274*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.h [[R3]], 0($4) 275*9880d681SAndroid Build Coastguard Worker 276*9880d681SAndroid Build Coastguard Worker ret void 277*9880d681SAndroid Build Coastguard Worker ; CHECK: .size mul_v8i16 278*9880d681SAndroid Build Coastguard Worker} 279*9880d681SAndroid Build Coastguard Worker 280*9880d681SAndroid Build Coastguard Workerdefine void @mul_v4i32(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind { 281*9880d681SAndroid Build Coastguard Worker ; CHECK: mul_v4i32: 282*9880d681SAndroid Build Coastguard Worker 283*9880d681SAndroid Build Coastguard Worker %1 = load <4 x i32>, <4 x i32>* %a 284*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 285*9880d681SAndroid Build Coastguard Worker %2 = load <4 x i32>, <4 x i32>* %b 286*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6) 287*9880d681SAndroid Build Coastguard Worker %3 = mul <4 x i32> %1, %2 288*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: mulv.w [[R3:\$w[0-9]+]], [[R1]], [[R2]] 289*9880d681SAndroid Build Coastguard Worker store <4 x i32> %3, <4 x i32>* %c 290*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.w [[R3]], 0($4) 291*9880d681SAndroid Build Coastguard Worker 292*9880d681SAndroid Build Coastguard Worker ret void 293*9880d681SAndroid Build Coastguard Worker ; CHECK: .size mul_v4i32 294*9880d681SAndroid Build Coastguard Worker} 295*9880d681SAndroid Build Coastguard Worker 296*9880d681SAndroid Build Coastguard Workerdefine void @mul_v2i64(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind { 297*9880d681SAndroid Build Coastguard Worker ; CHECK: mul_v2i64: 298*9880d681SAndroid Build Coastguard Worker 299*9880d681SAndroid Build Coastguard Worker %1 = load <2 x i64>, <2 x i64>* %a 300*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 301*9880d681SAndroid Build Coastguard Worker %2 = load <2 x i64>, <2 x i64>* %b 302*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6) 303*9880d681SAndroid Build Coastguard Worker %3 = mul <2 x i64> %1, %2 304*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: mulv.d [[R3:\$w[0-9]+]], [[R1]], [[R2]] 305*9880d681SAndroid Build Coastguard Worker store <2 x i64> %3, <2 x i64>* %c 306*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.d [[R3]], 0($4) 307*9880d681SAndroid Build Coastguard Worker 308*9880d681SAndroid Build Coastguard Worker ret void 309*9880d681SAndroid Build Coastguard Worker ; CHECK: .size mul_v2i64 310*9880d681SAndroid Build Coastguard Worker} 311*9880d681SAndroid Build Coastguard Worker 312*9880d681SAndroid Build Coastguard Workerdefine void @maddv_v16i8(<16 x i8>* %d, <16 x i8>* %a, <16 x i8>* %b, 313*9880d681SAndroid Build Coastguard Worker <16 x i8>* %c) nounwind { 314*9880d681SAndroid Build Coastguard Worker ; CHECK: maddv_v16i8: 315*9880d681SAndroid Build Coastguard Worker 316*9880d681SAndroid Build Coastguard Worker %1 = load <16 x i8>, <16 x i8>* %a 317*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 318*9880d681SAndroid Build Coastguard Worker %2 = load <16 x i8>, <16 x i8>* %b 319*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6) 320*9880d681SAndroid Build Coastguard Worker %3 = load <16 x i8>, <16 x i8>* %c 321*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R3:\$w[0-9]+]], 0($7) 322*9880d681SAndroid Build Coastguard Worker %4 = mul <16 x i8> %2, %3 323*9880d681SAndroid Build Coastguard Worker %5 = add <16 x i8> %4, %1 324*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: maddv.b [[R1]], [[R2]], [[R3]] 325*9880d681SAndroid Build Coastguard Worker store <16 x i8> %5, <16 x i8>* %d 326*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.b [[R1]], 0($4) 327*9880d681SAndroid Build Coastguard Worker 328*9880d681SAndroid Build Coastguard Worker ret void 329*9880d681SAndroid Build Coastguard Worker ; CHECK: .size maddv_v16i8 330*9880d681SAndroid Build Coastguard Worker} 331*9880d681SAndroid Build Coastguard Worker 332*9880d681SAndroid Build Coastguard Workerdefine void @maddv_v8i16(<8 x i16>* %d, <8 x i16>* %a, <8 x i16>* %b, 333*9880d681SAndroid Build Coastguard Worker <8 x i16>* %c) nounwind { 334*9880d681SAndroid Build Coastguard Worker ; CHECK: maddv_v8i16: 335*9880d681SAndroid Build Coastguard Worker 336*9880d681SAndroid Build Coastguard Worker %1 = load <8 x i16>, <8 x i16>* %a 337*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 338*9880d681SAndroid Build Coastguard Worker %2 = load <8 x i16>, <8 x i16>* %b 339*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6) 340*9880d681SAndroid Build Coastguard Worker %3 = load <8 x i16>, <8 x i16>* %c 341*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R3:\$w[0-9]+]], 0($7) 342*9880d681SAndroid Build Coastguard Worker %4 = mul <8 x i16> %2, %3 343*9880d681SAndroid Build Coastguard Worker %5 = add <8 x i16> %4, %1 344*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: maddv.h [[R1]], [[R2]], [[R3]] 345*9880d681SAndroid Build Coastguard Worker store <8 x i16> %5, <8 x i16>* %d 346*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.h [[R1]], 0($4) 347*9880d681SAndroid Build Coastguard Worker 348*9880d681SAndroid Build Coastguard Worker ret void 349*9880d681SAndroid Build Coastguard Worker ; CHECK: .size maddv_v8i16 350*9880d681SAndroid Build Coastguard Worker} 351*9880d681SAndroid Build Coastguard Worker 352*9880d681SAndroid Build Coastguard Workerdefine void @maddv_v4i32(<4 x i32>* %d, <4 x i32>* %a, <4 x i32>* %b, 353*9880d681SAndroid Build Coastguard Worker <4 x i32>* %c) nounwind { 354*9880d681SAndroid Build Coastguard Worker ; CHECK: maddv_v4i32: 355*9880d681SAndroid Build Coastguard Worker 356*9880d681SAndroid Build Coastguard Worker %1 = load <4 x i32>, <4 x i32>* %a 357*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 358*9880d681SAndroid Build Coastguard Worker %2 = load <4 x i32>, <4 x i32>* %b 359*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6) 360*9880d681SAndroid Build Coastguard Worker %3 = load <4 x i32>, <4 x i32>* %c 361*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R3:\$w[0-9]+]], 0($7) 362*9880d681SAndroid Build Coastguard Worker %4 = mul <4 x i32> %2, %3 363*9880d681SAndroid Build Coastguard Worker %5 = add <4 x i32> %4, %1 364*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: maddv.w [[R1]], [[R2]], [[R3]] 365*9880d681SAndroid Build Coastguard Worker store <4 x i32> %5, <4 x i32>* %d 366*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.w [[R1]], 0($4) 367*9880d681SAndroid Build Coastguard Worker 368*9880d681SAndroid Build Coastguard Worker ret void 369*9880d681SAndroid Build Coastguard Worker ; CHECK: .size maddv_v4i32 370*9880d681SAndroid Build Coastguard Worker} 371*9880d681SAndroid Build Coastguard Worker 372*9880d681SAndroid Build Coastguard Workerdefine void @maddv_v2i64(<2 x i64>* %d, <2 x i64>* %a, <2 x i64>* %b, 373*9880d681SAndroid Build Coastguard Worker <2 x i64>* %c) nounwind { 374*9880d681SAndroid Build Coastguard Worker ; CHECK: maddv_v2i64: 375*9880d681SAndroid Build Coastguard Worker 376*9880d681SAndroid Build Coastguard Worker %1 = load <2 x i64>, <2 x i64>* %a 377*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 378*9880d681SAndroid Build Coastguard Worker %2 = load <2 x i64>, <2 x i64>* %b 379*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6) 380*9880d681SAndroid Build Coastguard Worker %3 = load <2 x i64>, <2 x i64>* %c 381*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R3:\$w[0-9]+]], 0($7) 382*9880d681SAndroid Build Coastguard Worker %4 = mul <2 x i64> %2, %3 383*9880d681SAndroid Build Coastguard Worker %5 = add <2 x i64> %4, %1 384*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: maddv.d [[R1]], [[R2]], [[R3]] 385*9880d681SAndroid Build Coastguard Worker store <2 x i64> %5, <2 x i64>* %d 386*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.d [[R1]], 0($4) 387*9880d681SAndroid Build Coastguard Worker 388*9880d681SAndroid Build Coastguard Worker ret void 389*9880d681SAndroid Build Coastguard Worker ; CHECK: .size maddv_v2i64 390*9880d681SAndroid Build Coastguard Worker} 391*9880d681SAndroid Build Coastguard Worker 392*9880d681SAndroid Build Coastguard Workerdefine void @msubv_v16i8(<16 x i8>* %d, <16 x i8>* %a, <16 x i8>* %b, 393*9880d681SAndroid Build Coastguard Worker <16 x i8>* %c) nounwind { 394*9880d681SAndroid Build Coastguard Worker ; CHECK: msubv_v16i8: 395*9880d681SAndroid Build Coastguard Worker 396*9880d681SAndroid Build Coastguard Worker %1 = load <16 x i8>, <16 x i8>* %a 397*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 398*9880d681SAndroid Build Coastguard Worker %2 = load <16 x i8>, <16 x i8>* %b 399*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6) 400*9880d681SAndroid Build Coastguard Worker %3 = load <16 x i8>, <16 x i8>* %c 401*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R3:\$w[0-9]+]], 0($7) 402*9880d681SAndroid Build Coastguard Worker %4 = mul <16 x i8> %2, %3 403*9880d681SAndroid Build Coastguard Worker %5 = sub <16 x i8> %1, %4 404*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: msubv.b [[R1]], [[R2]], [[R3]] 405*9880d681SAndroid Build Coastguard Worker store <16 x i8> %5, <16 x i8>* %d 406*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.b [[R1]], 0($4) 407*9880d681SAndroid Build Coastguard Worker 408*9880d681SAndroid Build Coastguard Worker ret void 409*9880d681SAndroid Build Coastguard Worker ; CHECK: .size msubv_v16i8 410*9880d681SAndroid Build Coastguard Worker} 411*9880d681SAndroid Build Coastguard Worker 412*9880d681SAndroid Build Coastguard Workerdefine void @msubv_v8i16(<8 x i16>* %d, <8 x i16>* %a, <8 x i16>* %b, 413*9880d681SAndroid Build Coastguard Worker <8 x i16>* %c) nounwind { 414*9880d681SAndroid Build Coastguard Worker ; CHECK: msubv_v8i16: 415*9880d681SAndroid Build Coastguard Worker 416*9880d681SAndroid Build Coastguard Worker %1 = load <8 x i16>, <8 x i16>* %a 417*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 418*9880d681SAndroid Build Coastguard Worker %2 = load <8 x i16>, <8 x i16>* %b 419*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6) 420*9880d681SAndroid Build Coastguard Worker %3 = load <8 x i16>, <8 x i16>* %c 421*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R3:\$w[0-9]+]], 0($7) 422*9880d681SAndroid Build Coastguard Worker %4 = mul <8 x i16> %2, %3 423*9880d681SAndroid Build Coastguard Worker %5 = sub <8 x i16> %1, %4 424*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: msubv.h [[R1]], [[R2]], [[R3]] 425*9880d681SAndroid Build Coastguard Worker store <8 x i16> %5, <8 x i16>* %d 426*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.h [[R1]], 0($4) 427*9880d681SAndroid Build Coastguard Worker 428*9880d681SAndroid Build Coastguard Worker ret void 429*9880d681SAndroid Build Coastguard Worker ; CHECK: .size msubv_v8i16 430*9880d681SAndroid Build Coastguard Worker} 431*9880d681SAndroid Build Coastguard Worker 432*9880d681SAndroid Build Coastguard Workerdefine void @msubv_v4i32(<4 x i32>* %d, <4 x i32>* %a, <4 x i32>* %b, 433*9880d681SAndroid Build Coastguard Worker <4 x i32>* %c) nounwind { 434*9880d681SAndroid Build Coastguard Worker ; CHECK: msubv_v4i32: 435*9880d681SAndroid Build Coastguard Worker 436*9880d681SAndroid Build Coastguard Worker %1 = load <4 x i32>, <4 x i32>* %a 437*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 438*9880d681SAndroid Build Coastguard Worker %2 = load <4 x i32>, <4 x i32>* %b 439*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6) 440*9880d681SAndroid Build Coastguard Worker %3 = load <4 x i32>, <4 x i32>* %c 441*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R3:\$w[0-9]+]], 0($7) 442*9880d681SAndroid Build Coastguard Worker %4 = mul <4 x i32> %2, %3 443*9880d681SAndroid Build Coastguard Worker %5 = sub <4 x i32> %1, %4 444*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: msubv.w [[R1]], [[R2]], [[R3]] 445*9880d681SAndroid Build Coastguard Worker store <4 x i32> %5, <4 x i32>* %d 446*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.w [[R1]], 0($4) 447*9880d681SAndroid Build Coastguard Worker 448*9880d681SAndroid Build Coastguard Worker ret void 449*9880d681SAndroid Build Coastguard Worker ; CHECK: .size msubv_v4i32 450*9880d681SAndroid Build Coastguard Worker} 451*9880d681SAndroid Build Coastguard Worker 452*9880d681SAndroid Build Coastguard Workerdefine void @msubv_v2i64(<2 x i64>* %d, <2 x i64>* %a, <2 x i64>* %b, 453*9880d681SAndroid Build Coastguard Worker <2 x i64>* %c) nounwind { 454*9880d681SAndroid Build Coastguard Worker ; CHECK: msubv_v2i64: 455*9880d681SAndroid Build Coastguard Worker 456*9880d681SAndroid Build Coastguard Worker %1 = load <2 x i64>, <2 x i64>* %a 457*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 458*9880d681SAndroid Build Coastguard Worker %2 = load <2 x i64>, <2 x i64>* %b 459*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6) 460*9880d681SAndroid Build Coastguard Worker %3 = load <2 x i64>, <2 x i64>* %c 461*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R3:\$w[0-9]+]], 0($7) 462*9880d681SAndroid Build Coastguard Worker %4 = mul <2 x i64> %2, %3 463*9880d681SAndroid Build Coastguard Worker %5 = sub <2 x i64> %1, %4 464*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: msubv.d [[R1]], [[R2]], [[R3]] 465*9880d681SAndroid Build Coastguard Worker store <2 x i64> %5, <2 x i64>* %d 466*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.d [[R1]], 0($4) 467*9880d681SAndroid Build Coastguard Worker 468*9880d681SAndroid Build Coastguard Worker ret void 469*9880d681SAndroid Build Coastguard Worker ; CHECK: .size msubv_v2i64 470*9880d681SAndroid Build Coastguard Worker} 471*9880d681SAndroid Build Coastguard Worker 472*9880d681SAndroid Build Coastguard Workerdefine void @div_s_v16i8(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind { 473*9880d681SAndroid Build Coastguard Worker ; CHECK: div_s_v16i8: 474*9880d681SAndroid Build Coastguard Worker 475*9880d681SAndroid Build Coastguard Worker %1 = load <16 x i8>, <16 x i8>* %a 476*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 477*9880d681SAndroid Build Coastguard Worker %2 = load <16 x i8>, <16 x i8>* %b 478*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6) 479*9880d681SAndroid Build Coastguard Worker %3 = sdiv <16 x i8> %1, %2 480*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: div_s.b [[R3:\$w[0-9]+]], [[R1]], [[R2]] 481*9880d681SAndroid Build Coastguard Worker store <16 x i8> %3, <16 x i8>* %c 482*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.b [[R3]], 0($4) 483*9880d681SAndroid Build Coastguard Worker 484*9880d681SAndroid Build Coastguard Worker ret void 485*9880d681SAndroid Build Coastguard Worker ; CHECK: .size div_s_v16i8 486*9880d681SAndroid Build Coastguard Worker} 487*9880d681SAndroid Build Coastguard Worker 488*9880d681SAndroid Build Coastguard Workerdefine void @div_s_v8i16(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind { 489*9880d681SAndroid Build Coastguard Worker ; CHECK: div_s_v8i16: 490*9880d681SAndroid Build Coastguard Worker 491*9880d681SAndroid Build Coastguard Worker %1 = load <8 x i16>, <8 x i16>* %a 492*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 493*9880d681SAndroid Build Coastguard Worker %2 = load <8 x i16>, <8 x i16>* %b 494*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6) 495*9880d681SAndroid Build Coastguard Worker %3 = sdiv <8 x i16> %1, %2 496*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: div_s.h [[R3:\$w[0-9]+]], [[R1]], [[R2]] 497*9880d681SAndroid Build Coastguard Worker store <8 x i16> %3, <8 x i16>* %c 498*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.h [[R3]], 0($4) 499*9880d681SAndroid Build Coastguard Worker 500*9880d681SAndroid Build Coastguard Worker ret void 501*9880d681SAndroid Build Coastguard Worker ; CHECK: .size div_s_v8i16 502*9880d681SAndroid Build Coastguard Worker} 503*9880d681SAndroid Build Coastguard Worker 504*9880d681SAndroid Build Coastguard Workerdefine void @div_s_v4i32(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind { 505*9880d681SAndroid Build Coastguard Worker ; CHECK: div_s_v4i32: 506*9880d681SAndroid Build Coastguard Worker 507*9880d681SAndroid Build Coastguard Worker %1 = load <4 x i32>, <4 x i32>* %a 508*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 509*9880d681SAndroid Build Coastguard Worker %2 = load <4 x i32>, <4 x i32>* %b 510*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6) 511*9880d681SAndroid Build Coastguard Worker %3 = sdiv <4 x i32> %1, %2 512*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: div_s.w [[R3:\$w[0-9]+]], [[R1]], [[R2]] 513*9880d681SAndroid Build Coastguard Worker store <4 x i32> %3, <4 x i32>* %c 514*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.w [[R3]], 0($4) 515*9880d681SAndroid Build Coastguard Worker 516*9880d681SAndroid Build Coastguard Worker ret void 517*9880d681SAndroid Build Coastguard Worker ; CHECK: .size div_s_v4i32 518*9880d681SAndroid Build Coastguard Worker} 519*9880d681SAndroid Build Coastguard Worker 520*9880d681SAndroid Build Coastguard Workerdefine void @div_s_v2i64(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind { 521*9880d681SAndroid Build Coastguard Worker ; CHECK: div_s_v2i64: 522*9880d681SAndroid Build Coastguard Worker 523*9880d681SAndroid Build Coastguard Worker %1 = load <2 x i64>, <2 x i64>* %a 524*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 525*9880d681SAndroid Build Coastguard Worker %2 = load <2 x i64>, <2 x i64>* %b 526*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6) 527*9880d681SAndroid Build Coastguard Worker %3 = sdiv <2 x i64> %1, %2 528*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: div_s.d [[R3:\$w[0-9]+]], [[R1]], [[R2]] 529*9880d681SAndroid Build Coastguard Worker store <2 x i64> %3, <2 x i64>* %c 530*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.d [[R3]], 0($4) 531*9880d681SAndroid Build Coastguard Worker 532*9880d681SAndroid Build Coastguard Worker ret void 533*9880d681SAndroid Build Coastguard Worker ; CHECK: .size div_s_v2i64 534*9880d681SAndroid Build Coastguard Worker} 535*9880d681SAndroid Build Coastguard Worker 536*9880d681SAndroid Build Coastguard Workerdefine void @div_u_v16i8(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind { 537*9880d681SAndroid Build Coastguard Worker ; CHECK: div_u_v16i8: 538*9880d681SAndroid Build Coastguard Worker 539*9880d681SAndroid Build Coastguard Worker %1 = load <16 x i8>, <16 x i8>* %a 540*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 541*9880d681SAndroid Build Coastguard Worker %2 = load <16 x i8>, <16 x i8>* %b 542*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6) 543*9880d681SAndroid Build Coastguard Worker %3 = udiv <16 x i8> %1, %2 544*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: div_u.b [[R3:\$w[0-9]+]], [[R1]], [[R2]] 545*9880d681SAndroid Build Coastguard Worker store <16 x i8> %3, <16 x i8>* %c 546*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.b [[R3]], 0($4) 547*9880d681SAndroid Build Coastguard Worker 548*9880d681SAndroid Build Coastguard Worker ret void 549*9880d681SAndroid Build Coastguard Worker ; CHECK: .size div_u_v16i8 550*9880d681SAndroid Build Coastguard Worker} 551*9880d681SAndroid Build Coastguard Worker 552*9880d681SAndroid Build Coastguard Workerdefine void @div_u_v8i16(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind { 553*9880d681SAndroid Build Coastguard Worker ; CHECK: div_u_v8i16: 554*9880d681SAndroid Build Coastguard Worker 555*9880d681SAndroid Build Coastguard Worker %1 = load <8 x i16>, <8 x i16>* %a 556*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 557*9880d681SAndroid Build Coastguard Worker %2 = load <8 x i16>, <8 x i16>* %b 558*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6) 559*9880d681SAndroid Build Coastguard Worker %3 = udiv <8 x i16> %1, %2 560*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: div_u.h [[R3:\$w[0-9]+]], [[R1]], [[R2]] 561*9880d681SAndroid Build Coastguard Worker store <8 x i16> %3, <8 x i16>* %c 562*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.h [[R3]], 0($4) 563*9880d681SAndroid Build Coastguard Worker 564*9880d681SAndroid Build Coastguard Worker ret void 565*9880d681SAndroid Build Coastguard Worker ; CHECK: .size div_u_v8i16 566*9880d681SAndroid Build Coastguard Worker} 567*9880d681SAndroid Build Coastguard Worker 568*9880d681SAndroid Build Coastguard Workerdefine void @div_u_v4i32(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind { 569*9880d681SAndroid Build Coastguard Worker ; CHECK: div_u_v4i32: 570*9880d681SAndroid Build Coastguard Worker 571*9880d681SAndroid Build Coastguard Worker %1 = load <4 x i32>, <4 x i32>* %a 572*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 573*9880d681SAndroid Build Coastguard Worker %2 = load <4 x i32>, <4 x i32>* %b 574*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6) 575*9880d681SAndroid Build Coastguard Worker %3 = udiv <4 x i32> %1, %2 576*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: div_u.w [[R3:\$w[0-9]+]], [[R1]], [[R2]] 577*9880d681SAndroid Build Coastguard Worker store <4 x i32> %3, <4 x i32>* %c 578*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.w [[R3]], 0($4) 579*9880d681SAndroid Build Coastguard Worker 580*9880d681SAndroid Build Coastguard Worker ret void 581*9880d681SAndroid Build Coastguard Worker ; CHECK: .size div_u_v4i32 582*9880d681SAndroid Build Coastguard Worker} 583*9880d681SAndroid Build Coastguard Worker 584*9880d681SAndroid Build Coastguard Workerdefine void @div_u_v2i64(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind { 585*9880d681SAndroid Build Coastguard Worker ; CHECK: div_u_v2i64: 586*9880d681SAndroid Build Coastguard Worker 587*9880d681SAndroid Build Coastguard Worker %1 = load <2 x i64>, <2 x i64>* %a 588*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 589*9880d681SAndroid Build Coastguard Worker %2 = load <2 x i64>, <2 x i64>* %b 590*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6) 591*9880d681SAndroid Build Coastguard Worker %3 = udiv <2 x i64> %1, %2 592*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: div_u.d [[R3:\$w[0-9]+]], [[R1]], [[R2]] 593*9880d681SAndroid Build Coastguard Worker store <2 x i64> %3, <2 x i64>* %c 594*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.d [[R3]], 0($4) 595*9880d681SAndroid Build Coastguard Worker 596*9880d681SAndroid Build Coastguard Worker ret void 597*9880d681SAndroid Build Coastguard Worker ; CHECK: .size div_u_v2i64 598*9880d681SAndroid Build Coastguard Worker} 599*9880d681SAndroid Build Coastguard Worker 600*9880d681SAndroid Build Coastguard Workerdefine void @mod_s_v16i8(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind { 601*9880d681SAndroid Build Coastguard Worker ; CHECK: mod_s_v16i8: 602*9880d681SAndroid Build Coastguard Worker 603*9880d681SAndroid Build Coastguard Worker %1 = load <16 x i8>, <16 x i8>* %a 604*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 605*9880d681SAndroid Build Coastguard Worker %2 = load <16 x i8>, <16 x i8>* %b 606*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6) 607*9880d681SAndroid Build Coastguard Worker %3 = srem <16 x i8> %1, %2 608*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: mod_s.b [[R3:\$w[0-9]+]], [[R1]], [[R2]] 609*9880d681SAndroid Build Coastguard Worker store <16 x i8> %3, <16 x i8>* %c 610*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.b [[R3]], 0($4) 611*9880d681SAndroid Build Coastguard Worker 612*9880d681SAndroid Build Coastguard Worker ret void 613*9880d681SAndroid Build Coastguard Worker ; CHECK: .size mod_s_v16i8 614*9880d681SAndroid Build Coastguard Worker} 615*9880d681SAndroid Build Coastguard Worker 616*9880d681SAndroid Build Coastguard Workerdefine void @mod_s_v8i16(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind { 617*9880d681SAndroid Build Coastguard Worker ; CHECK: mod_s_v8i16: 618*9880d681SAndroid Build Coastguard Worker 619*9880d681SAndroid Build Coastguard Worker %1 = load <8 x i16>, <8 x i16>* %a 620*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 621*9880d681SAndroid Build Coastguard Worker %2 = load <8 x i16>, <8 x i16>* %b 622*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6) 623*9880d681SAndroid Build Coastguard Worker %3 = srem <8 x i16> %1, %2 624*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: mod_s.h [[R3:\$w[0-9]+]], [[R1]], [[R2]] 625*9880d681SAndroid Build Coastguard Worker store <8 x i16> %3, <8 x i16>* %c 626*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.h [[R3]], 0($4) 627*9880d681SAndroid Build Coastguard Worker 628*9880d681SAndroid Build Coastguard Worker ret void 629*9880d681SAndroid Build Coastguard Worker ; CHECK: .size mod_s_v8i16 630*9880d681SAndroid Build Coastguard Worker} 631*9880d681SAndroid Build Coastguard Worker 632*9880d681SAndroid Build Coastguard Workerdefine void @mod_s_v4i32(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind { 633*9880d681SAndroid Build Coastguard Worker ; CHECK: mod_s_v4i32: 634*9880d681SAndroid Build Coastguard Worker 635*9880d681SAndroid Build Coastguard Worker %1 = load <4 x i32>, <4 x i32>* %a 636*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 637*9880d681SAndroid Build Coastguard Worker %2 = load <4 x i32>, <4 x i32>* %b 638*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6) 639*9880d681SAndroid Build Coastguard Worker %3 = srem <4 x i32> %1, %2 640*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: mod_s.w [[R3:\$w[0-9]+]], [[R1]], [[R2]] 641*9880d681SAndroid Build Coastguard Worker store <4 x i32> %3, <4 x i32>* %c 642*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.w [[R3]], 0($4) 643*9880d681SAndroid Build Coastguard Worker 644*9880d681SAndroid Build Coastguard Worker ret void 645*9880d681SAndroid Build Coastguard Worker ; CHECK: .size mod_s_v4i32 646*9880d681SAndroid Build Coastguard Worker} 647*9880d681SAndroid Build Coastguard Worker 648*9880d681SAndroid Build Coastguard Workerdefine void @mod_s_v2i64(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind { 649*9880d681SAndroid Build Coastguard Worker ; CHECK: mod_s_v2i64: 650*9880d681SAndroid Build Coastguard Worker 651*9880d681SAndroid Build Coastguard Worker %1 = load <2 x i64>, <2 x i64>* %a 652*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 653*9880d681SAndroid Build Coastguard Worker %2 = load <2 x i64>, <2 x i64>* %b 654*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6) 655*9880d681SAndroid Build Coastguard Worker %3 = srem <2 x i64> %1, %2 656*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: mod_s.d [[R3:\$w[0-9]+]], [[R1]], [[R2]] 657*9880d681SAndroid Build Coastguard Worker store <2 x i64> %3, <2 x i64>* %c 658*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.d [[R3]], 0($4) 659*9880d681SAndroid Build Coastguard Worker 660*9880d681SAndroid Build Coastguard Worker ret void 661*9880d681SAndroid Build Coastguard Worker ; CHECK: .size mod_s_v2i64 662*9880d681SAndroid Build Coastguard Worker} 663*9880d681SAndroid Build Coastguard Worker 664*9880d681SAndroid Build Coastguard Workerdefine void @mod_u_v16i8(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind { 665*9880d681SAndroid Build Coastguard Worker ; CHECK: mod_u_v16i8: 666*9880d681SAndroid Build Coastguard Worker 667*9880d681SAndroid Build Coastguard Worker %1 = load <16 x i8>, <16 x i8>* %a 668*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 669*9880d681SAndroid Build Coastguard Worker %2 = load <16 x i8>, <16 x i8>* %b 670*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6) 671*9880d681SAndroid Build Coastguard Worker %3 = urem <16 x i8> %1, %2 672*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: mod_u.b [[R3:\$w[0-9]+]], [[R1]], [[R2]] 673*9880d681SAndroid Build Coastguard Worker store <16 x i8> %3, <16 x i8>* %c 674*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.b [[R3]], 0($4) 675*9880d681SAndroid Build Coastguard Worker 676*9880d681SAndroid Build Coastguard Worker ret void 677*9880d681SAndroid Build Coastguard Worker ; CHECK: .size mod_u_v16i8 678*9880d681SAndroid Build Coastguard Worker} 679*9880d681SAndroid Build Coastguard Worker 680*9880d681SAndroid Build Coastguard Workerdefine void @mod_u_v8i16(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind { 681*9880d681SAndroid Build Coastguard Worker ; CHECK: mod_u_v8i16: 682*9880d681SAndroid Build Coastguard Worker 683*9880d681SAndroid Build Coastguard Worker %1 = load <8 x i16>, <8 x i16>* %a 684*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 685*9880d681SAndroid Build Coastguard Worker %2 = load <8 x i16>, <8 x i16>* %b 686*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6) 687*9880d681SAndroid Build Coastguard Worker %3 = urem <8 x i16> %1, %2 688*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: mod_u.h [[R3:\$w[0-9]+]], [[R1]], [[R2]] 689*9880d681SAndroid Build Coastguard Worker store <8 x i16> %3, <8 x i16>* %c 690*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.h [[R3]], 0($4) 691*9880d681SAndroid Build Coastguard Worker 692*9880d681SAndroid Build Coastguard Worker ret void 693*9880d681SAndroid Build Coastguard Worker ; CHECK: .size mod_u_v8i16 694*9880d681SAndroid Build Coastguard Worker} 695*9880d681SAndroid Build Coastguard Worker 696*9880d681SAndroid Build Coastguard Workerdefine void @mod_u_v4i32(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind { 697*9880d681SAndroid Build Coastguard Worker ; CHECK: mod_u_v4i32: 698*9880d681SAndroid Build Coastguard Worker 699*9880d681SAndroid Build Coastguard Worker %1 = load <4 x i32>, <4 x i32>* %a 700*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 701*9880d681SAndroid Build Coastguard Worker %2 = load <4 x i32>, <4 x i32>* %b 702*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6) 703*9880d681SAndroid Build Coastguard Worker %3 = urem <4 x i32> %1, %2 704*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: mod_u.w [[R3:\$w[0-9]+]], [[R1]], [[R2]] 705*9880d681SAndroid Build Coastguard Worker store <4 x i32> %3, <4 x i32>* %c 706*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.w [[R3]], 0($4) 707*9880d681SAndroid Build Coastguard Worker 708*9880d681SAndroid Build Coastguard Worker ret void 709*9880d681SAndroid Build Coastguard Worker ; CHECK: .size mod_u_v4i32 710*9880d681SAndroid Build Coastguard Worker} 711*9880d681SAndroid Build Coastguard Worker 712*9880d681SAndroid Build Coastguard Workerdefine void @mod_u_v2i64(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind { 713*9880d681SAndroid Build Coastguard Worker ; CHECK: mod_u_v2i64: 714*9880d681SAndroid Build Coastguard Worker 715*9880d681SAndroid Build Coastguard Worker %1 = load <2 x i64>, <2 x i64>* %a 716*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 717*9880d681SAndroid Build Coastguard Worker %2 = load <2 x i64>, <2 x i64>* %b 718*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6) 719*9880d681SAndroid Build Coastguard Worker %3 = urem <2 x i64> %1, %2 720*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: mod_u.d [[R3:\$w[0-9]+]], [[R1]], [[R2]] 721*9880d681SAndroid Build Coastguard Worker store <2 x i64> %3, <2 x i64>* %c 722*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.d [[R3]], 0($4) 723*9880d681SAndroid Build Coastguard Worker 724*9880d681SAndroid Build Coastguard Worker ret void 725*9880d681SAndroid Build Coastguard Worker ; CHECK: .size mod_u_v2i64 726*9880d681SAndroid Build Coastguard Worker} 727