1/* 2 * Copyright (c) 2023 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16// DEF_MIR_INTRINSIC(STR, NAME, INTRN_CLASS, RETURN_TYPE, 17// ARG0, ARG1, ARG2, ARG3, ARG4, ARG5) 18 19// vecTy vector_abs(vecTy src) 20// Create a vector by getting the absolute value of the elements in src. 21DEF_MIR_INTRINSIC(vector_abs_v8i8, "vector_abs_v8i8", 22 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8I8, 23 kArgTyV8I8) 24DEF_MIR_INTRINSIC(vector_abs_v4i16, "vector_abs_v4i16", 25 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4I16, 26 kArgTyV4I16) 27DEF_MIR_INTRINSIC(vector_abs_v2i32, "vector_abs_v2i32", 28 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2I32, 29 kArgTyV2I32) 30DEF_MIR_INTRINSIC(vector_abs_v1i64, "vector_abs_v1i64", 31 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV1I64, 32 kArgTyV1I64) 33DEF_MIR_INTRINSIC(vector_abs_v2f32, "vector_abs_v2f32", 34 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2F32, 35 kArgTyV2F32) 36DEF_MIR_INTRINSIC(vector_abs_v1f64, "vector_abs_v1f64", 37 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV1F64, 38 kArgTyV1F64) 39DEF_MIR_INTRINSIC(vector_abs_v16i8, "vector_abs_v16i8", 40 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV16I8, 41 kArgTyV16I8) 42DEF_MIR_INTRINSIC(vector_abs_v8i16, "vector_abs_v8i16", 43 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8I16, 44 kArgTyV8I16) 45DEF_MIR_INTRINSIC(vector_abs_v4i32, "vector_abs_v4i32", 46 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4I32, 47 kArgTyV4I32) 48DEF_MIR_INTRINSIC(vector_abs_v2i64, "vector_abs_v2i64", 49 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2I64, 50 kArgTyV2I64) 51DEF_MIR_INTRINSIC(vector_abs_v4f32, "vector_abs_v4f32", 52 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4F32, 53 kArgTyV4F32) 54DEF_MIR_INTRINSIC(vector_abs_v2f64, "vector_abs_v2f64", 55 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2F64, 56 kArgTyV2F64) 57 58// vecTy vector_addl_low(vecTy src1, vecTy src2) 59// Add each element of the source vector to second source 60// put the result into the destination vector. 61DEF_MIR_INTRINSIC(vector_addl_low_v8i8, "vector_addl_low_v8i8", 62 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8I16, 63 kArgTyV8I8, kArgTyV8I8) 64DEF_MIR_INTRINSIC(vector_addl_low_v4i16, "vector_addl_low_v4i16", 65 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4I32, 66 kArgTyV4I16, kArgTyV4I16) 67DEF_MIR_INTRINSIC(vector_addl_low_v2i32, "vector_addl_low_v2i32", 68 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2I64, 69 kArgTyV2I32, kArgTyV2I32) 70DEF_MIR_INTRINSIC(vector_addl_low_v8u8, "vector_addl_low_v8u8", 71 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8U16, 72 kArgTyV8U8, kArgTyV8U8) 73DEF_MIR_INTRINSIC(vector_addl_low_v4u16, "vector_addl_low_v4u16", 74 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4U32, 75 kArgTyV4U16, kArgTyV4U16) 76DEF_MIR_INTRINSIC(vector_addl_low_v2u32, "vector_addl_low_v2u32", 77 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2U64, 78 kArgTyV2U32, kArgTyV2U32) 79 80// vecTy vector_addl_high(vecTy src1, vecTy src2) 81// Add each element of the source vector to upper half of second source 82// put the result into the destination vector. 83DEF_MIR_INTRINSIC(vector_addl_high_v8i8, "vector_addl_high_v8i8", 84 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8I16, 85 kArgTyV16I8, kArgTyV16I8) 86DEF_MIR_INTRINSIC(vector_addl_high_v4i16, "vector_addl_high_v4i16", 87 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4I32, 88 kArgTyV8I16, kArgTyV8I16) 89DEF_MIR_INTRINSIC(vector_addl_high_v2i32, "vector_addl_high_v2i32", 90 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2I64, 91 kArgTyV4I32, kArgTyV4I32) 92DEF_MIR_INTRINSIC(vector_addl_high_v8u8, "vector_addl_high_v8u8", 93 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8U16, 94 kArgTyV16U8, kArgTyV16U8) 95DEF_MIR_INTRINSIC(vector_addl_high_v4u16, "vector_addl_high_v4u16", 96 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4U32, 97 kArgTyV8U16, kArgTyV8U16) 98DEF_MIR_INTRINSIC(vector_addl_high_v2u32, "vector_addl_high_v2u32", 99 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2U64, 100 kArgTyV4U32, kArgTyV4U32) 101 102// vecTy vector_addw_low(vecTy src1, vecTy src2) 103// Add each element of the source vector to second source 104// widen the result into the destination vector. 105DEF_MIR_INTRINSIC(vector_addw_low_v8i8, "vector_addw_low_v8i8", 106 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8I16, 107 kArgTyV8I16, kArgTyV8I8) 108DEF_MIR_INTRINSIC(vector_addw_low_v4i16, "vector_addw_low_v4i16", 109 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4I32, 110 kArgTyV4I32, kArgTyV4I16) 111DEF_MIR_INTRINSIC(vector_addw_low_v2i32, "vector_addw_low_v2i32", 112 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2I64, 113 kArgTyV2I64, kArgTyV2I32) 114DEF_MIR_INTRINSIC(vector_addw_low_v8u8, "vector_addw_low_v8u8", 115 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8U16, 116 kArgTyV8U16, kArgTyV8U8) 117DEF_MIR_INTRINSIC(vector_addw_low_v4u16, "vector_addw_low_v4u16", 118 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4U32, 119 kArgTyV4U32, kArgTyV4U16) 120DEF_MIR_INTRINSIC(vector_addw_low_v2u32, "vector_addw_low_v2u32", 121 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2U64, 122 kArgTyV2U64, kArgTyV2U32) 123 124// vecTy vector_addw_high(vecTy src1, vecTy src2) 125// Add each element of the source vector to upper half of second source 126// widen the result into the destination vector. 127DEF_MIR_INTRINSIC(vector_addw_high_v8i8, "vector_addw_high_v8i8", 128 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8I16, 129 kArgTyV8I16, kArgTyV16I8) 130DEF_MIR_INTRINSIC(vector_addw_high_v4i16, "vector_addw_high_v4i16", 131 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4I32, 132 kArgTyV4I32, kArgTyV8I16) 133DEF_MIR_INTRINSIC(vector_addw_high_v2i32, "vector_addw_high_v2i32", 134 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2I64, 135 kArgTyV2I64, kArgTyV4I32) 136DEF_MIR_INTRINSIC(vector_addw_high_v8u8, "vector_addw_high_v8u8", 137 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8U16, 138 kArgTyV8U16, kArgTyV16U8) 139DEF_MIR_INTRINSIC(vector_addw_high_v4u16, "vector_addw_high_v4u16", 140 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4U32, 141 kArgTyV4U32, kArgTyV8U16) 142DEF_MIR_INTRINSIC(vector_addw_high_v2u32, "vector_addw_high_v2u32", 143 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2U64, 144 kArgTyV2U64, kArgTyV4U32) 145 146// vecTy vector_from_scalar(scalarTy value) 147// Create a vector by repeating the scalar value for each element in the 148// vector. 149DEF_MIR_INTRINSIC(vector_from_scalar_v2i64, "vector_from_scalar_v2i64", 150 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2I64, 151 kArgTyI64) 152DEF_MIR_INTRINSIC(vector_from_scalar_v4i32, "vector_from_scalar_v4i32", 153 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4I32, 154 kArgTyI32) 155DEF_MIR_INTRINSIC(vector_from_scalar_v8i16, "vector_from_scalar_v8i16", 156 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8I16, 157 kArgTyI16) 158DEF_MIR_INTRINSIC(vector_from_scalar_v16i8, "vector_from_scalar_v16i8", 159 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV16I8, 160 kArgTyI8) 161DEF_MIR_INTRINSIC(vector_from_scalar_v2u64, "vector_from_scalar_v2u64", 162 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2U64, 163 kArgTyU64) 164DEF_MIR_INTRINSIC(vector_from_scalar_v4u32, "vector_from_scalar_v4u32", 165 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4U32, 166 kArgTyU32) 167DEF_MIR_INTRINSIC(vector_from_scalar_v8u16, "vector_from_scalar_v8u16", 168 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8U16, 169 kArgTyU16) 170DEF_MIR_INTRINSIC(vector_from_scalar_v16u8, "vector_from_scalar_v16u8", 171 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV16U8, 172 kArgTyU8) 173DEF_MIR_INTRINSIC(vector_from_scalar_v2f64, "vector_from_scalar_v2f64", 174 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2F64, 175 kArgTyF64) 176DEF_MIR_INTRINSIC(vector_from_scalar_v4f32, "vector_from_scalar_v4f32", 177 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4F32, 178 kArgTyF32) 179DEF_MIR_INTRINSIC(vector_from_scalar_v1i64, "vector_from_scalar_v1i64", 180 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV1I64, 181 kArgTyI64) 182DEF_MIR_INTRINSIC(vector_from_scalar_v2i32, "vector_from_scalar_v2i32", 183 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2I32, 184 kArgTyI32) 185DEF_MIR_INTRINSIC(vector_from_scalar_v4i16, "vector_from_scalar_v4i16", 186 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4I16, 187 kArgTyI16) 188DEF_MIR_INTRINSIC(vector_from_scalar_v8i8, "vector_from_scalar_v8i8", 189 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8I8, 190 kArgTyI8) 191DEF_MIR_INTRINSIC(vector_from_scalar_v1u64, "vector_from_scalar_v1u64", 192 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV1U64, 193 kArgTyU64) 194DEF_MIR_INTRINSIC(vector_from_scalar_v2u32, "vector_from_scalar_v2u32", 195 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2U32, 196 kArgTyU32) 197DEF_MIR_INTRINSIC(vector_from_scalar_v4u16, "vector_from_scalar_v4u16", 198 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4U16, 199 kArgTyU16) 200DEF_MIR_INTRINSIC(vector_from_scalar_v8u8, "vector_from_scalar_v8u8", 201 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8U8, 202 kArgTyU8) 203DEF_MIR_INTRINSIC(vector_from_scalar_v1f64, "vector_from_scalar_v1f64", 204 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV1F64, 205 kArgTyF64) 206DEF_MIR_INTRINSIC(vector_from_scalar_v2f32, "vector_from_scalar_v2f32", 207 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2F32, 208 kArgTyF32) 209 210// vecTy2 vector_labssub(vectTy1 src2, vectTy2 src2) 211// Create a widened vector by getting the abs value of subtracted arguments. 212DEF_MIR_INTRINSIC(vector_labssub_low_v8i8, "vector_labssub_low_v8i8", 213 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8I16, 214 kArgTyV8I8, kArgTyV8I8) 215DEF_MIR_INTRINSIC(vector_labssub_low_v4i16, "vector_labssub_low_v4i16", 216 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4I32, 217 kArgTyV4I16, kArgTyV4I16) 218DEF_MIR_INTRINSIC(vector_labssub_low_v2i32, "vector_labssub_low_v2i32", 219 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2I64, 220 kArgTyV2I32, kArgTyV2I32) 221DEF_MIR_INTRINSIC(vector_labssub_low_v8u8, "vector_labssub_low_v8u8", 222 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8U16, 223 kArgTyV8U8, kArgTyV8U8) 224DEF_MIR_INTRINSIC(vector_labssub_low_v4u16, "vector_labssub_low_v4u16", 225 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4U32, 226 kArgTyV4U16, kArgTyV4U16) 227DEF_MIR_INTRINSIC(vector_labssub_low_v2u32, "vector_labssub_low_v2u32", 228 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2U64, 229 kArgTyV2U32, kArgTyV2U32) 230 231// vecTy2 vector_labssub_high(vectTy1 src2, vectTy2 src2) 232// Create a widened vector by getting the abs value of subtracted high args. 233DEF_MIR_INTRINSIC(vector_labssub_high_v8i8, "vector_labssub_high_v8i8", 234 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8I16, 235 kArgTyV16I8, kArgTyV16I8) 236DEF_MIR_INTRINSIC(vector_labssub_high_v4i16, "vector_labssub_high_v4i16", 237 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4I32, 238 kArgTyV8I16, kArgTyV8I16) 239DEF_MIR_INTRINSIC(vector_labssub_high_v2i32, "vector_labssub_high_v2i32", 240 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2I64, 241 kArgTyV4I32, kArgTyV4I32) 242DEF_MIR_INTRINSIC(vector_labssub_high_v8u8, "vector_labssub_high_v8u8", 243 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8U16, 244 kArgTyV16U8, kArgTyV16U8) 245DEF_MIR_INTRINSIC(vector_labssub_high_v4u16, "vector_labssub_high_v4u16", 246 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4U32, 247 kArgTyV8U16, kArgTyV8U16) 248DEF_MIR_INTRINSIC(vector_labssub_high_v2u32, "vector_labssub_high_v2u32", 249 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2U64, 250 kArgTyV4U32, kArgTyV4U32) 251 252// vecTy2 vector_madd(vecTy2 accum, vecTy1 src1, vecTy1 src2) 253// Multiply the elements of src1 and src2, then accumulate into accum. 254// Elements of vecTy2 are twice as long as elements of vecTy1. 255DEF_MIR_INTRINSIC(vector_madd_v2i32, "vector_madd_v2i32", 256 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2I64, 257 kArgTyV2I64, kArgTyV2I32, kArgTyV2I32) 258DEF_MIR_INTRINSIC(vector_madd_v4i16, "vector_madd_v4i16", 259 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4I32, 260 kArgTyV4I32, kArgTyV4I16, kArgTyV4I16) 261DEF_MIR_INTRINSIC(vector_madd_v8i8, "vector_madd_v8i8", 262 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8I16, 263 kArgTyV8I16, kArgTyV8I8, kArgTyV8I8) 264DEF_MIR_INTRINSIC(vector_madd_v2u32, "vector_madd_v2u32", 265 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2U64, 266 kArgTyV2U64, kArgTyV2U32, kArgTyV2U32) 267DEF_MIR_INTRINSIC(vector_madd_v4u16, "vector_madd_v4u16", 268 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4U32, 269 kArgTyV4U32, kArgTyV4U16, kArgTyV4U16) 270DEF_MIR_INTRINSIC(vector_madd_v8u8, "vector_madd_v8u8", 271 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8U16, 272 kArgTyV8U16, kArgTyV8U8, kArgTyV8U8) 273 274// vecTy2 vector_mull_low(vecTy1 src1, vecTy1 src2) 275// Multiply the elements of src1 and src2. Elements of vecTy2 are twice as 276// long as elements of vecTy1. 277DEF_MIR_INTRINSIC(vector_mull_low_v2i32, "vector_mull_low_v2i32", 278 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2I64, 279 kArgTyV2I32, kArgTyV2I32) 280DEF_MIR_INTRINSIC(vector_mull_low_v4i16, "vector_mull_low_v4i16", 281 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4I32, 282 kArgTyV4I16, kArgTyV4I16) 283DEF_MIR_INTRINSIC(vector_mull_low_v8i8, "vector_mull_low_v8i8", 284 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8I16, 285 kArgTyV8I8, kArgTyV8I8) 286DEF_MIR_INTRINSIC(vector_mull_low_v2u32, "vector_mull_low_v2u32", 287 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2U64, 288 kArgTyV2U32, kArgTyV2U32) 289DEF_MIR_INTRINSIC(vector_mull_low_v4u16, "vector_mull_low_v4u16", 290 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4U32, 291 kArgTyV4U16, kArgTyV4U16) 292DEF_MIR_INTRINSIC(vector_mull_low_v8u8, "vector_mull_low_v8u8", 293 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8U16, 294 kArgTyV8U8, kArgTyV8U8) 295 296// vecTy2 vector_mull_high(vecTy1 src1, vecTy1 src2) 297// Multiply the upper elements of src1 and src2. Elements of vecTy2 are twice 298// as long as elements of vecTy1. 299DEF_MIR_INTRINSIC(vector_mull_high_v2i32, "vector_mull_high_v2i32", 300 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2I64, 301 kArgTyV2I32, kArgTyV2I32) 302DEF_MIR_INTRINSIC(vector_mull_high_v4i16, "vector_mull_high_v4i16", 303 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4I32, 304 kArgTyV4I16, kArgTyV4I16) 305DEF_MIR_INTRINSIC(vector_mull_high_v8i8, "vector_mull_high_v8i8", 306 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8I16, 307 kArgTyV8I8, kArgTyV8I8) 308DEF_MIR_INTRINSIC(vector_mull_high_v2u32, "vector_mull_high_v2u32", 309 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2U64, 310 kArgTyV2U32, kArgTyV2U32) 311DEF_MIR_INTRINSIC(vector_mull_high_v4u16, "vector_mull_high_v4u16", 312 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4U32, 313 kArgTyV4U16, kArgTyV4U16) 314DEF_MIR_INTRINSIC(vector_mull_high_v8u8, "vector_mull_high_v8u8", 315 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8U16, 316 kArgTyV8U8, kArgTyV8U8) 317 318// vecTy vector_merge(vecTy src1, vecTy src2, int n) 319// Create a vector by concatenating the high elements of src1, starting 320// with the nth element, followed by the low elements of src2. 321DEF_MIR_INTRINSIC(vector_merge_v2i64, "vector_merge_v2i64", 322 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2I64, 323 kArgTyV2I64, kArgTyV2I64, kArgTyI32) 324DEF_MIR_INTRINSIC(vector_merge_v4i32, "vector_merge_v4i32", 325 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4I32, 326 kArgTyV4I32, kArgTyV4I32, kArgTyI32) 327DEF_MIR_INTRINSIC(vector_merge_v8i16, "vector_merge_v8i16", 328 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8I16, 329 kArgTyV8I16, kArgTyV8I16, kArgTyI32) 330DEF_MIR_INTRINSIC(vector_merge_v16i8, "vector_merge_v16i8", 331 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV16I8, 332 kArgTyV16I8, kArgTyV16I8, kArgTyI32) 333DEF_MIR_INTRINSIC(vector_merge_v2u64, "vector_merge_v2u64", 334 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2U64, 335 kArgTyV2U64, kArgTyV2U64, kArgTyI32) 336DEF_MIR_INTRINSIC(vector_merge_v4u32, "vector_merge_v4u32", 337 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4U32, 338 kArgTyV4U32, kArgTyV4U32, kArgTyI32) 339DEF_MIR_INTRINSIC(vector_merge_v8u16, "vector_merge_v8u16", 340 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8U16, 341 kArgTyV8U16, kArgTyV8U16, kArgTyI32) 342DEF_MIR_INTRINSIC(vector_merge_v16u8, "vector_merge_v16u8", 343 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV16U8, 344 kArgTyV16U8, kArgTyV16U8, kArgTyI32) 345DEF_MIR_INTRINSIC(vector_merge_v2f64, "vector_merge_v2f64", 346 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2F64, 347 kArgTyV2F64, kArgTyV2F64, kArgTyI32) 348DEF_MIR_INTRINSIC(vector_merge_v4f32, "vector_merge_v4f32", 349 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4F32, 350 kArgTyV4F32, kArgTyV4F32, kArgTyI32) 351DEF_MIR_INTRINSIC(vector_merge_v1i64, "vector_merge_v1i64", 352 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV1I64, 353 kArgTyV1I64, kArgTyV1I64, kArgTyI32) 354DEF_MIR_INTRINSIC(vector_merge_v2i32, "vector_merge_v2i32", 355 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2I32, 356 kArgTyV2I32, kArgTyV2I32, kArgTyI32) 357DEF_MIR_INTRINSIC(vector_merge_v4i16, "vector_merge_v4i16", 358 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4I16, 359 kArgTyV4I16, kArgTyV4I16, kArgTyI32) 360DEF_MIR_INTRINSIC(vector_merge_v8i8, "vector_merge_v8i8", 361 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8I8, 362 kArgTyV8I8, kArgTyV8I8, kArgTyI32) 363DEF_MIR_INTRINSIC(vector_merge_v1u64, "vector_merge_v1u64", 364 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV1U64, 365 kArgTyV1U64, kArgTyV1U64, kArgTyI32) 366DEF_MIR_INTRINSIC(vector_merge_v2u32, "vector_merge_v2u32", 367 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2U32, 368 kArgTyV2U32, kArgTyV2U32, kArgTyI32) 369DEF_MIR_INTRINSIC(vector_merge_v4u16, "vector_merge_v4u16", 370 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4U16, 371 kArgTyV4U16, kArgTyV4U16, kArgTyI32) 372DEF_MIR_INTRINSIC(vector_merge_v8u8, "vector_merge_v8u8", 373 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8U8, 374 kArgTyV8U8, kArgTyV8U8, kArgTyI32) 375DEF_MIR_INTRINSIC(vector_merge_v1f64, "vector_merge_v1f64", 376 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV1F64, 377 kArgTyV1F64, kArgTyV1F64, kArgTyI32) 378DEF_MIR_INTRINSIC(vector_merge_v2f32, "vector_merge_v2f32", 379 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2F32, 380 kArgTyV2F32, kArgTyV2F32, kArgTyI32) 381 382// vecTy2 vector_get_low(vecTy1 src) 383// Create a vector from the low part of the source vector. 384DEF_MIR_INTRINSIC(vector_get_low_v2i64, "vector_get_low_v2i64", 385 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV1I64, 386 kArgTyV2I64) 387DEF_MIR_INTRINSIC(vector_get_low_v4i32, "vector_get_low_v4i32", 388 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2I32, 389 kArgTyV4I32) 390DEF_MIR_INTRINSIC(vector_get_low_v8i16, "vector_get_low_v8i16", 391 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4I16, 392 kArgTyV8I16) 393DEF_MIR_INTRINSIC(vector_get_low_v16i8, "vector_get_low_v16i8", 394 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8I8, 395 kArgTyV16I8) 396DEF_MIR_INTRINSIC(vector_get_low_v2u64, "vector_get_low_v2u64", 397 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV1U64, 398 kArgTyV2U64) 399DEF_MIR_INTRINSIC(vector_get_low_v4u32, "vector_get_low_v4u32", 400 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2U32, 401 kArgTyV4U32) 402DEF_MIR_INTRINSIC(vector_get_low_v8u16, "vector_get_low_v8u16", 403 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4U16, 404 kArgTyV8U16) 405DEF_MIR_INTRINSIC(vector_get_low_v16u8, "vector_get_low_v16u8", 406 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8U8, 407 kArgTyV16U8) 408DEF_MIR_INTRINSIC(vector_get_low_v2f64, "vector_get_low_v2f64", 409 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV1F64, 410 kArgTyV2F64) 411DEF_MIR_INTRINSIC(vector_get_low_v4f32, "vector_get_low_v4f32", 412 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2F32, 413 kArgTyV4F32) 414 415// vecTy2 vector_get_low(vecTy1 src) 416// Create a vector from the high part of the source vector. 417DEF_MIR_INTRINSIC(vector_get_high_v2i64, "vector_get_high_v2i64", 418 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV1I64, 419 kArgTyV2I64) 420DEF_MIR_INTRINSIC(vector_get_high_v4i32, "vector_get_high_v4i32", 421 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2I32, 422 kArgTyV4I32) 423DEF_MIR_INTRINSIC(vector_get_high_v8i16, "vector_get_high_v8i16", 424 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4I16, 425 kArgTyV8I16) 426DEF_MIR_INTRINSIC(vector_get_high_v16i8, "vector_get_high_v16i8", 427 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8I8, 428 kArgTyV16I8) 429DEF_MIR_INTRINSIC(vector_get_high_v2u64, "vector_get_high_v2u64", 430 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV1U64, 431 kArgTyV2U64) 432DEF_MIR_INTRINSIC(vector_get_high_v4u32, "vector_get_high_v4u32", 433 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2U32, 434 kArgTyV4U32) 435DEF_MIR_INTRINSIC(vector_get_high_v8u16, "vector_get_high_v8u16", 436 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4U16, 437 kArgTyV8U16) 438DEF_MIR_INTRINSIC(vector_get_high_v16u8, "vector_get_high_v16u8", 439 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8U8, 440 kArgTyV16U8) 441DEF_MIR_INTRINSIC(vector_get_high_v2f64, "vector_get_high_v2f64", 442 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV1F64, 443 kArgTyV2F64) 444DEF_MIR_INTRINSIC(vector_get_high_v4f32, "vector_get_high_v4f32", 445 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2F32, 446 kArgTyV4F32) 447 448// scalarTy vector_get_element(vecTy src, int n) 449// Get the nth element of the source vector. 450DEF_MIR_INTRINSIC(vector_get_element_v2i64, "vector_get_element_v2i64", 451 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyI64, 452 kArgTyV2I64, kArgTyI32) 453DEF_MIR_INTRINSIC(vector_get_element_v4i32, "vector_get_element_v4i32", 454 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyI32, 455 kArgTyV4I32, kArgTyI32) 456DEF_MIR_INTRINSIC(vector_get_element_v8i16, "vector_get_element_v8i16", 457 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyI16, 458 kArgTyV8I16, kArgTyI32) 459DEF_MIR_INTRINSIC(vector_get_element_v16i8, "vector_get_element_v16i8", 460 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyI8, 461 kArgTyV16I8, kArgTyI32) 462DEF_MIR_INTRINSIC(vector_get_element_v2u64, "vector_get_element_v2u64", 463 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyU64, 464 kArgTyV2U64, kArgTyI32) 465DEF_MIR_INTRINSIC(vector_get_element_v4u32, "vector_get_element_v4u32", 466 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyU32, 467 kArgTyV4U32, kArgTyI32) 468DEF_MIR_INTRINSIC(vector_get_element_v8u16, "vector_get_element_v8u16", 469 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyU16, 470 kArgTyV8U16, kArgTyI32) 471DEF_MIR_INTRINSIC(vector_get_element_v16u8, "vector_get_element_v16u8", 472 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyU8, 473 kArgTyV16U8, kArgTyI32) 474DEF_MIR_INTRINSIC(vector_get_element_v2f64, "vector_get_element_v2f64", 475 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyF64, 476 kArgTyV2F64, kArgTyI32) 477DEF_MIR_INTRINSIC(vector_get_element_v4f32, "vector_get_element_v4f32", 478 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyF32, 479 kArgTyV4F32, kArgTyI32) 480DEF_MIR_INTRINSIC(vector_get_element_v1i64, "vector_get_element_v1i64", 481 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyI64, 482 kArgTyV1I64, kArgTyI32) 483DEF_MIR_INTRINSIC(vector_get_element_v2i32, "vector_get_element_v2i32", 484 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyI32, 485 kArgTyV2I32, kArgTyI32) 486DEF_MIR_INTRINSIC(vector_get_element_v4i16, "vector_get_element_v4i16", 487 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyI16, 488 kArgTyV4I16, kArgTyI32) 489DEF_MIR_INTRINSIC(vector_get_element_v8i8, "vector_get_element_v8i8", 490 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyI8, 491 kArgTyV8I8, kArgTyI32) 492DEF_MIR_INTRINSIC(vector_get_element_v1u64, "vector_get_element_v1u64", 493 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyU64, 494 kArgTyV1U64, kArgTyI32) 495DEF_MIR_INTRINSIC(vector_get_element_v2u32, "vector_get_element_v2u32", 496 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyU32, 497 kArgTyV2U32, kArgTyI32) 498DEF_MIR_INTRINSIC(vector_get_element_v4u16, "vector_get_element_v4u16", 499 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyU16, 500 kArgTyV4U16, kArgTyI32) 501DEF_MIR_INTRINSIC(vector_get_element_v8u8, "vector_get_element_v8u8", 502 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyU8, 503 kArgTyV8U8, kArgTyI32) 504DEF_MIR_INTRINSIC(vector_get_element_v1f64, "vector_get_element_v1f64", 505 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyF64, 506 kArgTyV1F64, kArgTyI32) 507DEF_MIR_INTRINSIC(vector_get_element_v2f32, "vector_get_element_v2f32", 508 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyF32, 509 kArgTyV2F32, kArgTyI32) 510 511// vecTy vector_set_element(ScalarTy value, VecTy vec, int n) 512// Set the nth element of the source vector to value. 513DEF_MIR_INTRINSIC(vector_set_element_v2i64, "vector_set_element_v2i64", 514 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2I64, 515 kArgTyI64, kArgTyV2I64, kArgTyI32) 516DEF_MIR_INTRINSIC(vector_set_element_v4i32, "vector_set_element_v4i32", 517 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4I32, 518 kArgTyI32, kArgTyV4I32, kArgTyI32) 519DEF_MIR_INTRINSIC(vector_set_element_v8i16, "vector_set_element_v8i16", 520 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8I16, 521 kArgTyI16, kArgTyV8I16, kArgTyI32) 522DEF_MIR_INTRINSIC(vector_set_element_v16i8, "vector_set_element_v16i8", 523 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV16I8, 524 kArgTyI8, kArgTyV16I8, kArgTyI32) 525DEF_MIR_INTRINSIC(vector_set_element_v2u64, "vector_set_element_v2u64", 526 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2U64, 527 kArgTyU64, kArgTyV2U64, kArgTyI32) 528DEF_MIR_INTRINSIC(vector_set_element_v4u32, "vector_set_element_v4u32", 529 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4U32, 530 kArgTyU32, kArgTyV4U32, kArgTyI32) 531DEF_MIR_INTRINSIC(vector_set_element_v8u16, "vector_set_element_v8u16", 532 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8U16, 533 kArgTyU16, kArgTyV8U16, kArgTyI32) 534DEF_MIR_INTRINSIC(vector_set_element_v16u8, "vector_set_element_v16u8", 535 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV16U8, 536 kArgTyU8, kArgTyV16U8, kArgTyI32) 537DEF_MIR_INTRINSIC(vector_set_element_v2f64, "vector_set_element_v2f64", 538 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2F64, 539 kArgTyF64, kArgTyV2F64, kArgTyI32) 540DEF_MIR_INTRINSIC(vector_set_element_v4f32, "vector_set_element_v4f32", 541 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4F32, 542 kArgTyF32, kArgTyV4F32, kArgTyI32) 543DEF_MIR_INTRINSIC(vector_set_element_v1i64, "vector_set_element_v1i64", 544 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV1I64, 545 kArgTyI64, kArgTyV1I64, kArgTyI32) 546DEF_MIR_INTRINSIC(vector_set_element_v2i32, "vector_set_element_v2i32", 547 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2I32, 548 kArgTyI32, kArgTyV2I32, kArgTyI32) 549DEF_MIR_INTRINSIC(vector_set_element_v4i16, "vector_set_element_v4i16", 550 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4I16, 551 kArgTyI16, kArgTyV4I16, kArgTyI32) 552DEF_MIR_INTRINSIC(vector_set_element_v8i8, "vector_set_element_v8i8", 553 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8I8, 554 kArgTyI8, kArgTyV8I8, kArgTyI32) 555DEF_MIR_INTRINSIC(vector_set_element_v1u64, "vector_set_element_v1u64", 556 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV1U64, 557 kArgTyU64, kArgTyV1U64, kArgTyI32) 558DEF_MIR_INTRINSIC(vector_set_element_v2u32, "vector_set_element_v2u32", 559 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2U32, 560 kArgTyU32, kArgTyV2U32, kArgTyI32) 561DEF_MIR_INTRINSIC(vector_set_element_v4u16, "vector_set_element_v4u16", 562 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4U16, 563 kArgTyU16, kArgTyV4U16, kArgTyI32) 564DEF_MIR_INTRINSIC(vector_set_element_v8u8, "vector_set_element_v8u8", 565 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8U8, 566 kArgTyU8, kArgTyV8U8, kArgTyI32) 567DEF_MIR_INTRINSIC(vector_set_element_v1f64, "vector_set_element_v1f64", 568 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV1F64, 569 kArgTyF64, kArgTyV1F64, kArgTyI32) 570DEF_MIR_INTRINSIC(vector_set_element_v2f32, "vector_set_element_v2f32", 571 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2F32, 572 kArgTyF32, kArgTyV2F32, kArgTyI32) 573 574// vecTy2 vector_widen_low(vecTy1 src) 575// Widen each element of the 64-bit argument to double size of the 576// original width to a 128-bit destination vector. 577DEF_MIR_INTRINSIC(vector_widen_low_v2i32, "vector_widen_low_v2i32", 578 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2I64, 579 kArgTyV2I32) 580DEF_MIR_INTRINSIC(vector_widen_low_v4i16, "vector_widen_low_v4i16", 581 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4I32, 582 kArgTyV4I16) 583DEF_MIR_INTRINSIC(vector_widen_low_v8i8, "vector_widen_low_v8i8", 584 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8I16, 585 kArgTyV8I8) 586DEF_MIR_INTRINSIC(vector_widen_low_v2u32, "vector_widen_low_v2u32", 587 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2U64, 588 kArgTyV2U32) 589DEF_MIR_INTRINSIC(vector_widen_low_v4u16, "vector_widen_low_v4u16", 590 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4U32, 591 kArgTyV4U16) 592DEF_MIR_INTRINSIC(vector_widen_low_v8u8, "vector_widen_low_v8u8", 593 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8U16, 594 kArgTyV8U8) 595 596// vecTy2 vector_widen_high(vecTy1 src) 597// Widen each upper element of the 128-bit source vector to double size of 598// the original width into a 128-bit destination vector. 599DEF_MIR_INTRINSIC(vector_widen_high_v2i32, "vector_widen_high_v2i32", 600 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2I64, 601 kArgTyV4I32) 602DEF_MIR_INTRINSIC(vector_widen_high_v4i16, "vector_widen_high_v4i16", 603 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4I32, 604 kArgTyV8I16) 605DEF_MIR_INTRINSIC(vector_widen_high_v8i8, "vector_widen_high_v8i8", 606 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8I16, 607 kArgTyV16I8) 608DEF_MIR_INTRINSIC(vector_widen_high_v2u32, "vector_widen_high_v2u32", 609 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2U64, 610 kArgTyV4U32) 611DEF_MIR_INTRINSIC(vector_widen_high_v4u16, "vector_widen_high_v4u16", 612 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4U32, 613 kArgTyV8U16) 614DEF_MIR_INTRINSIC(vector_widen_high_v8u8, "vector_widen_high_v8u8", 615 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8U16, 616 kArgTyV16U8) 617 618// vecTy2 vector_narrow_low(vecTy1 src) 619// Narrow each element of the 128-bit source vector to half of the original width, 620// then write it to the lower half of the destination vector. 621DEF_MIR_INTRINSIC(vector_narrow_low_v2i64, "vector_narrow_low_v2i64", 622 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2I32, 623 kArgTyV2I64) 624DEF_MIR_INTRINSIC(vector_narrow_low_v4i32, "vector_narrow_low_v4i32", 625 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4I16, 626 kArgTyV4I32) 627DEF_MIR_INTRINSIC(vector_narrow_low_v8i16, "vector_narrow_low_v8i16", 628 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8I8, 629 kArgTyV8I16) 630DEF_MIR_INTRINSIC(vector_narrow_low_v2u64, "vector_narrow_low_v2u64", 631 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2U32, 632 kArgTyV2U64) 633DEF_MIR_INTRINSIC(vector_narrow_low_v4u32, "vector_narrow_low_v4u32", 634 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4U16, 635 kArgTyV4U32) 636DEF_MIR_INTRINSIC(vector_narrow_low_v8u16, "vector_narrow_low_v8u16", 637 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8U8, 638 kArgTyV8U16) 639 640// vecTy2 vector_narrow_high(vecTy1 src) 641// Narrow each element of the upper source vector to half of the original width, 642// concatenate with the first 64-bit arg into a 128-bit destination vector. 643DEF_MIR_INTRINSIC(vector_narrow_high_v2i64, "vector_narrow_high_v2i64", 644 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4I32, 645 kArgTyV2I32, kArgTyV2I64) 646DEF_MIR_INTRINSIC(vector_narrow_high_v4i32, "vector_narrow_high_v4i32", 647 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8I16, 648 kArgTyV4I16, kArgTyV4I32) 649DEF_MIR_INTRINSIC(vector_narrow_high_v8i16, "vector_narrow_high_v8i16", 650 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV16I8, 651 kArgTyV8I8, kArgTyV8I16) 652DEF_MIR_INTRINSIC(vector_narrow_high_v2u64, "vector_narrow_high_v2u64", 653 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4U32, 654 kArgTyV2U32, kArgTyV2U64) 655DEF_MIR_INTRINSIC(vector_narrow_high_v4u32, "vector_narrow_high_v4u32", 656 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8U16, 657 kArgTyV4U16, kArgTyV4U32) 658DEF_MIR_INTRINSIC(vector_narrow_high_v8u16, "vector_narrow_high_v8u16", 659 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV16U8, 660 kArgTyV8U8, kArgTyV8U16) 661 662// vecTy vector_pairwise_adalp(vecTy src1, vecTy2 src2) 663// Pairwise add of src2 then accumulate into src1 as dest 664DEF_MIR_INTRINSIC(vector_pairwise_adalp_v8i8, "vector_pairwise_adalp_v8i8", 665 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4I16, 666 kArgTyV4I16, kArgTyV8I8) 667DEF_MIR_INTRINSIC(vector_pairwise_adalp_v4i16, "vector_pairwise_adalp_v4i16", 668 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2I32, 669 kArgTyV2I32, kArgTyV4I16) 670DEF_MIR_INTRINSIC(vector_pairwise_adalp_v2i32, "vector_pairwise_adalp_v2i32", 671 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV1I64, 672 kArgTyV1I64, kArgTyV2I32) 673DEF_MIR_INTRINSIC(vector_pairwise_adalp_v8u8, "vector_pairwise_adalp_v8u8", 674 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4U16, 675 kArgTyV4U16, kArgTyV8U8) 676DEF_MIR_INTRINSIC(vector_pairwise_adalp_v4u16, "vector_pairwise_adalp_v4u16", 677 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2U32, 678 kArgTyV2U32, kArgTyV4U16) 679DEF_MIR_INTRINSIC(vector_pairwise_adalp_v2u32, "vector_pairwise_adalp_v2u32", 680 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV1U64, 681 kArgTyV1U64, kArgTyV2U32) 682DEF_MIR_INTRINSIC(vector_pairwise_adalp_v16i8, "vector_pairwise_adalp_v16i8", 683 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8I16, 684 kArgTyV8I16, kArgTyV16I8) 685DEF_MIR_INTRINSIC(vector_pairwise_adalp_v8i16, "vector_pairwise_adalp_v8i16", 686 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4I32, 687 kArgTyV4I32, kArgTyV8I16) 688DEF_MIR_INTRINSIC(vector_pairwise_adalp_v4i32, "vector_pairwise_adalp_v4i32", 689 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2I64, 690 kArgTyV2I64, kArgTyV4I32) 691DEF_MIR_INTRINSIC(vector_pairwise_adalp_v16u8, "vector_pairwise_adalp_v16u8", 692 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8U16, 693 kArgTyV8U16, kArgTyV16U8) 694DEF_MIR_INTRINSIC(vector_pairwise_adalp_v8u16, "vector_pairwise_adalp_v8u16", 695 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4U32, 696 kArgTyV4U32, kArgTyV8U16) 697DEF_MIR_INTRINSIC(vector_pairwise_adalp_v4u32, "vector_pairwise_adalp_v4u32", 698 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2U64, 699 kArgTyV2U64, kArgTyV4U32) 700 701// vecTy2 vector_pairwise_add(vecTy1 src) 702// Add pairs of elements from the source vector and put the result into the 703// destination vector, whose element size is twice and the number of 704// elements is half of the source vector type. 705DEF_MIR_INTRINSIC(vector_pairwise_add_v4i32, "vector_pairwise_add_v4i32", 706 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2I64, 707 kArgTyV4I32) 708DEF_MIR_INTRINSIC(vector_pairwise_add_v8i16, "vector_pairwise_add_v8i16", 709 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4I32, 710 kArgTyV8I16) 711DEF_MIR_INTRINSIC(vector_pairwise_add_v16i8, "vector_pairwise_add_v16i8", 712 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8I16, 713 kArgTyV16I8) 714DEF_MIR_INTRINSIC(vector_pairwise_add_v4u32, "vector_pairwise_add_v4u32", 715 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2U64, 716 kArgTyV4U32) 717DEF_MIR_INTRINSIC(vector_pairwise_add_v8u16, "vector_pairwise_add_v8u16", 718 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4U32, 719 kArgTyV8U16) 720DEF_MIR_INTRINSIC(vector_pairwise_add_v16u8, "vector_pairwise_add_v16u8", 721 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8U16, 722 kArgTyV16U8) 723DEF_MIR_INTRINSIC(vector_pairwise_add_v2i32, "vector_pairwise_add_v2i32", 724 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV1I64, 725 kArgTyV2I32) 726DEF_MIR_INTRINSIC(vector_pairwise_add_v4i16, "vector_pairwise_add_v4i16", 727 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2I32, 728 kArgTyV4I16) 729DEF_MIR_INTRINSIC(vector_pairwise_add_v8i8, "vector_pairwise_add_v8i8", 730 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4I16, 731 kArgTyV8I8) 732DEF_MIR_INTRINSIC(vector_pairwise_add_v2u32, "vector_pairwise_add_v2u32", 733 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV1U64, 734 kArgTyV2U32) 735DEF_MIR_INTRINSIC(vector_pairwise_add_v4u16, "vector_pairwise_add_v4u16", 736 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2U32, 737 kArgTyV4U16) 738DEF_MIR_INTRINSIC(vector_pairwise_add_v8u8, "vector_pairwise_add_v8u8", 739 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4U16, 740 kArgTyV8U8) 741 742// vecTy vector_reverse(vecTy src) 743// Create a vector by reversing the order of the elements in src. 744DEF_MIR_INTRINSIC(vector_reverse_v2i64, "vector_reverse_v2i64", 745 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2I64, 746 kArgTyV2I64) 747DEF_MIR_INTRINSIC(vector_reverse_v4i32, "vector_reverse_v4i32", 748 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4I32, 749 kArgTyV4I32) 750DEF_MIR_INTRINSIC(vector_reverse_v8i16, "vector_reverse_v8i16", 751 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8I16, 752 kArgTyV8I16) 753DEF_MIR_INTRINSIC(vector_reverse_v16i8, "vector_reverse_v16i8", 754 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV16I8, 755 kArgTyV16I8) 756DEF_MIR_INTRINSIC(vector_reverse_v2u64, "vector_reverse_v2u64", 757 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2U64, 758 kArgTyV2U64) 759DEF_MIR_INTRINSIC(vector_reverse_v4u32, "vector_reverse_v4u32", 760 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4U32, 761 kArgTyV4U32) 762DEF_MIR_INTRINSIC(vector_reverse_v8u16, "vector_reverse_v8u16", 763 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8U16, 764 kArgTyV8U16) 765DEF_MIR_INTRINSIC(vector_reverse_v16u8, "vector_reverse_v16u8", 766 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV16U8, 767 kArgTyV16U8) 768DEF_MIR_INTRINSIC(vector_reverse_v2f64, "vector_reverse_v2f64", 769 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2F64, 770 kArgTyV2F64) 771DEF_MIR_INTRINSIC(vector_reverse_v4f32, "vector_reverse_v4f32", 772 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4F32, 773 kArgTyV4F32) 774DEF_MIR_INTRINSIC(vector_reverse_v1i64, "vector_reverse_v1i64", 775 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV1I64, 776 kArgTyV1I64) 777DEF_MIR_INTRINSIC(vector_reverse_v2i32, "vector_reverse_v2i32", 778 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2I32, 779 kArgTyV2I32) 780DEF_MIR_INTRINSIC(vector_reverse_v4i16, "vector_reverse_v4i16", 781 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4I16, 782 kArgTyV4I16) 783DEF_MIR_INTRINSIC(vector_reverse_v8i8, "vector_reverse_v8i8", 784 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8I8, 785 kArgTyV8I8) 786DEF_MIR_INTRINSIC(vector_reverse_v1u64, "vector_reverse_v1u64", 787 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV1U64, 788 kArgTyV1U64) 789DEF_MIR_INTRINSIC(vector_reverse_v2u32, "vector_reverse_v2u32", 790 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2U32, 791 kArgTyV2U32) 792DEF_MIR_INTRINSIC(vector_reverse_v4u16, "vector_reverse_v4u16", 793 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4U16, 794 kArgTyV4U16) 795DEF_MIR_INTRINSIC(vector_reverse_v8u8, "vector_reverse_v8u8", 796 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8U8, 797 kArgTyV8U8) 798DEF_MIR_INTRINSIC(vector_reverse_v1f64, "vector_reverse_v1f64", 799 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV1F64, 800 kArgTyV1F64) 801DEF_MIR_INTRINSIC(vector_reverse_v2f32, "vector_reverse_v2f32", 802 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2F32, 803 kArgTyV2F32) 804 805// vector_reverse16 with 8-bit elements 806DEF_MIR_INTRINSIC(vector_reverse16_v16u8, "vector_reverse16_v16u8", 807 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV16U8, 808 kArgTyV16U8) 809DEF_MIR_INTRINSIC(vector_reverse16_v16i8, "vector_reverse16_v16i8", 810 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV16I8, 811 kArgTyV16I8) 812DEF_MIR_INTRINSIC(vector_reverse16_v8u8, "vector_reverse16_v8u8", 813 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8U8, 814 kArgTyV8U8) 815DEF_MIR_INTRINSIC(vector_reverse16_v8i8, "vector_reverse16_v8i8", 816 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8I8, 817 kArgTyV8I8) 818 819// vector_reverse64 with 8-bit elements 820DEF_MIR_INTRINSIC(vector_reverse64_v16u8, "vector_reverse64_v16u8", 821 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV16U8, 822 kArgTyV16U8) 823DEF_MIR_INTRINSIC(vector_reverse64_v16i8, "vector_reverse64_v16i8", 824 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV16I8, 825 kArgTyV16I8) 826DEF_MIR_INTRINSIC(vector_reverse64_v8u8, "vector_reverse64_v8u8", 827 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8U8, 828 kArgTyV8U8) 829DEF_MIR_INTRINSIC(vector_reverse64_v8i8, "vector_reverse64_v8i8", 830 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8I8, 831 kArgTyV8I8) 832 833// vector_reverse64 with 16-bit elements 834DEF_MIR_INTRINSIC(vector_reverse64_v8u16, "vector_reverse64_v8u16", 835 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8U16, 836 kArgTyV8U16) 837DEF_MIR_INTRINSIC(vector_reverse64_v8i16, "vector_reverse64_v8i16", 838 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8I16, 839 kArgTyV8I16) 840DEF_MIR_INTRINSIC(vector_reverse64_v4u16, "vector_reverse64_v4u16", 841 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4U16, 842 kArgTyV4U16) 843DEF_MIR_INTRINSIC(vector_reverse64_v4i16, "vector_reverse64_v4i16", 844 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4I16, 845 kArgTyV4I16) 846 847// vector_reverse64 with 32-bit elements 848DEF_MIR_INTRINSIC(vector_reverse64_v4u32, "vector_reverse64_v4u32", 849 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4U32, 850 kArgTyV4U32) 851DEF_MIR_INTRINSIC(vector_reverse64_v4i32, "vector_reverse64_v4i32", 852 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4I32, 853 kArgTyV4I32) 854DEF_MIR_INTRINSIC(vector_reverse64_v2u32, "vector_reverse64_v2u32", 855 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2U32, 856 kArgTyV2U32) 857DEF_MIR_INTRINSIC(vector_reverse64_v2i32, "vector_reverse64_v2i32", 858 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2I32, 859 kArgTyV2I32) 860 861// vecTy2 vector_shift_narrow_low(vecTy1 src, const int n) 862// Shift each element in the vector right by n, narrow each element to half 863// of the original width (truncating), then write the result to the lower 864// half of the destination vector. 865DEF_MIR_INTRINSIC(vector_shr_narrow_low_v2i64, "vector_shr_narrow_low_v2i64", 866 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2I32, 867 kArgTyV2I64, kArgTyI32) 868DEF_MIR_INTRINSIC(vector_shr_narrow_low_v4i32, "vector_shr_narrow_low_v4i32", 869 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4I16, 870 kArgTyV4I32, kArgTyI32) 871DEF_MIR_INTRINSIC(vector_shr_narrow_low_v8i16, "vector_shr_narrow_low_v8i16", 872 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8I8, 873 kArgTyV8I16, kArgTyI32) 874DEF_MIR_INTRINSIC(vector_shr_narrow_low_v2u64, "vector_shr_narrow_low_v2u64", 875 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2U32, 876 kArgTyV2U64, kArgTyI32) 877DEF_MIR_INTRINSIC(vector_shr_narrow_low_v4u32, "vector_shr_narrow_low_v4u32", 878 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4U16, 879 kArgTyV4U32, kArgTyI32) 880DEF_MIR_INTRINSIC(vector_shr_narrow_low_v8u16, "vector_shr_narrow_low_v8u16", 881 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8U8, 882 kArgTyV8U16, kArgTyI32) 883 884// scalarTy vector_sum(vecTy src) 885// Sum all of the elements in the vector into a scalar. 886DEF_MIR_INTRINSIC(vector_sum_v2i64, "vector_sum_v2i64", 887 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyI64, 888 kArgTyV2I64) 889DEF_MIR_INTRINSIC(vector_sum_v4i32, "vector_sum_v4i32", 890 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyI32, 891 kArgTyV4I32) 892DEF_MIR_INTRINSIC(vector_sum_v8i16, "vector_sum_v8i16", 893 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyI16, 894 kArgTyV8I16) 895DEF_MIR_INTRINSIC(vector_sum_v16i8, "vector_sum_v16i8", 896 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyI8, 897 kArgTyV16I8) 898DEF_MIR_INTRINSIC(vector_sum_v2u64, "vector_sum_v2u64", 899 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyU64, 900 kArgTyV2U64) 901DEF_MIR_INTRINSIC(vector_sum_v4u32, "vector_sum_v4u32", 902 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyU32, 903 kArgTyV4U32) 904DEF_MIR_INTRINSIC(vector_sum_v8u16, "vector_sum_v8u16", 905 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyU16, 906 kArgTyV8U16) 907DEF_MIR_INTRINSIC(vector_sum_v16u8, "vector_sum_v16u8", 908 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyU8, 909 kArgTyV16U8) 910DEF_MIR_INTRINSIC(vector_sum_v2f64, "vector_sum_v2f64", 911 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyF64, 912 kArgTyV2F64) 913DEF_MIR_INTRINSIC(vector_sum_v4f32, "vector_sum_v4f32", 914 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyF32, 915 kArgTyV4F32) 916DEF_MIR_INTRINSIC(vector_sum_v1i64, "vector_sum_v1i64", 917 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyI64, 918 kArgTyV1I64) 919DEF_MIR_INTRINSIC(vector_sum_v2i32, "vector_sum_v2i32", 920 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyI32, 921 kArgTyV2I32) 922DEF_MIR_INTRINSIC(vector_sum_v4i16, "vector_sum_v4i16", 923 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyI16, 924 kArgTyV4I16) 925DEF_MIR_INTRINSIC(vector_sum_v8i8, "vector_sum_v8i8", 926 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyI8, 927 kArgTyV8I8) 928DEF_MIR_INTRINSIC(vector_sum_v1u64, "vector_sum_v1u64", 929 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyU64, 930 kArgTyV1U64) 931DEF_MIR_INTRINSIC(vector_sum_v2u32, "vector_sum_v2u32", 932 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyU32, 933 kArgTyV2U32) 934DEF_MIR_INTRINSIC(vector_sum_v4u16, "vector_sum_v4u16", 935 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyU16, 936 kArgTyV4U16) 937DEF_MIR_INTRINSIC(vector_sum_v8u8, "vector_sum_v8u8", 938 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyU8, 939 kArgTyV8U8) 940DEF_MIR_INTRINSIC(vector_sum_v1f64, "vector_sum_v1f64", 941 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyF64, 942 kArgTyV1F64) 943DEF_MIR_INTRINSIC(vector_sum_v2f32, "vector_sum_v2f32", 944 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyF32, 945 kArgTyV2F32) 946 947// vecTy table_lookup(vecTy tbl, vecTy idx) 948// Performs a table vector lookup. 949DEF_MIR_INTRINSIC(vector_table_lookup_v2i64, "vector_table_lookup_v2i64", 950 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2I64, 951 kArgTyV2I64, kArgTyV2I64) 952DEF_MIR_INTRINSIC(vector_table_lookup_v4i32, "vector_table_lookup_v4i32", 953 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4I32, 954 kArgTyV4I32, kArgTyV4I32) 955DEF_MIR_INTRINSIC(vector_table_lookup_v8i16, "vector_table_lookup_v8i16", 956 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8I16, 957 kArgTyV8I16, kArgTyV8I16) 958DEF_MIR_INTRINSIC(vector_table_lookup_v16i8, "vector_table_lookup_v16i8", 959 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV16I8, 960 kArgTyV16I8, kArgTyV16I8) 961DEF_MIR_INTRINSIC(vector_table_lookup_v2u64, "vector_table_lookup_v2u64", 962 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2U64, 963 kArgTyV2U64, kArgTyV2U64) 964DEF_MIR_INTRINSIC(vector_table_lookup_v4u32, "vector_table_lookup_v4u32", 965 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4U32, 966 kArgTyV4U32, kArgTyV4U32) 967DEF_MIR_INTRINSIC(vector_table_lookup_v8u16, "vector_table_lookup_v8u16", 968 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8U16, 969 kArgTyV8U16, kArgTyV8U16) 970DEF_MIR_INTRINSIC(vector_table_lookup_v16u8, "vector_table_lookup_v16u8", 971 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV16U8, 972 kArgTyV16U8, kArgTyV16U8) 973DEF_MIR_INTRINSIC(vector_table_lookup_v2f64, "vector_table_lookup_v2f64", 974 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2F64, 975 kArgTyV2F64, kArgTyV2F64) 976DEF_MIR_INTRINSIC(vector_table_lookup_v4f32, "vector_table_lookup_v4f32", 977 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4F32, 978 kArgTyV4F32, kArgTyV4F32) 979DEF_MIR_INTRINSIC(vector_table_lookup_v1i64, "vector_table_lookup_v1i64", 980 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV1I64, 981 kArgTyV1I64, kArgTyV1I64) 982DEF_MIR_INTRINSIC(vector_table_lookup_v2i32, "vector_table_lookup_v2i32", 983 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2I32, 984 kArgTyV2I32, kArgTyV2I32) 985DEF_MIR_INTRINSIC(vector_table_lookup_v4i16, "vector_table_lookup_v4i16", 986 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4I16, 987 kArgTyV4I16, kArgTyV4I16) 988DEF_MIR_INTRINSIC(vector_table_lookup_v8i8, "vector_table_lookup_v8i8", 989 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8I8, 990 kArgTyV8I8, kArgTyV8I8) 991DEF_MIR_INTRINSIC(vector_table_lookup_v1u64, "vector_table_lookup_v1u64", 992 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV1U64, 993 kArgTyV1U64, kArgTyV1U64) 994DEF_MIR_INTRINSIC(vector_table_lookup_v2u32, "vector_table_lookup_v2u32", 995 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2U32, 996 kArgTyV2U32, kArgTyV2U32) 997DEF_MIR_INTRINSIC(vector_table_lookup_v4u16, "vector_table_lookup_v4u16", 998 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4U16, 999 kArgTyV4U16, kArgTyV4U16) 1000DEF_MIR_INTRINSIC(vector_table_lookup_v8u8, "vector_table_lookup_v8u8", 1001 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8U8, 1002 kArgTyV8U8, kArgTyV8U8) 1003DEF_MIR_INTRINSIC(vector_table_lookup_v1f64, "vector_table_lookup_v1f64", 1004 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV1F64, 1005 kArgTyV1F64, kArgTyV1F64) 1006DEF_MIR_INTRINSIC(vector_table_lookup_v2f32, "vector_table_lookup_v2f32", 1007 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2F32, 1008 kArgTyV2F32, kArgTyV2F32) 1009 1010// vecArrTy vector_zip(vecTy a, vecTy b) 1011// Interleave the upper half of elements from a and b into the destination 1012// vector. 1013DEF_MIR_INTRINSIC(vector_zip_v2i32, "vector_zip_v2i32", 1014 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT | INTRNISSPECIAL, 1015 kArgTyAgg, kArgTyV2I32, kArgTyV2I32) 1016DEF_MIR_INTRINSIC(vector_zip_v4i16, "vector_zip_v4i16", 1017 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT | INTRNISSPECIAL, 1018 kArgTyAgg, kArgTyV4I16, kArgTyV4I16) 1019DEF_MIR_INTRINSIC(vector_zip_v8i8, "vector_zip_v8i8", 1020 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT | INTRNISSPECIAL, 1021 kArgTyAgg, kArgTyV8I8, kArgTyV8I8) 1022DEF_MIR_INTRINSIC(vector_zip_v2u32, "vector_zip_v2u32", 1023 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT | INTRNISSPECIAL, 1024 kArgTyAgg, kArgTyV2U32, kArgTyV2U32) 1025DEF_MIR_INTRINSIC(vector_zip_v4u16, "vector_zip_v4u16", 1026 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT | INTRNISSPECIAL, 1027 kArgTyAgg, kArgTyV4U16, kArgTyV4U16) 1028DEF_MIR_INTRINSIC(vector_zip_v8u8, "vector_zip_v8u8", 1029 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT | INTRNISSPECIAL, 1030 kArgTyAgg, kArgTyV8U8, kArgTyV8U8) 1031DEF_MIR_INTRINSIC(vector_zip_v2f32, "vector_zip_v2f32", 1032 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT | INTRNISSPECIAL, 1033 kArgTyAgg, kArgTyV2F32, kArgTyV2F32) 1034 1035// vecTy vector_load(scalarTy *ptr) 1036// Load the elements pointed to by ptr into a vector. 1037DEF_MIR_INTRINSIC(vector_load_v2i64, "vector_load_v2i64", 1038 INTRNISVECTOR | INTRNLOADMEM | INTRNNOSIDEEFFECT, kArgTyV2I64, 1039 kArgTyPtr) 1040DEF_MIR_INTRINSIC(vector_load_v4i32, "vector_load_v4i32", 1041 INTRNISVECTOR | INTRNLOADMEM | INTRNNOSIDEEFFECT, kArgTyV4I32, 1042 kArgTyPtr) 1043DEF_MIR_INTRINSIC(vector_load_v8i16, "vector_load_v8i16", 1044 INTRNISVECTOR | INTRNLOADMEM | INTRNNOSIDEEFFECT, kArgTyV8I16, 1045 kArgTyPtr) 1046DEF_MIR_INTRINSIC(vector_load_v16i8, "vector_load_v16i8", 1047 INTRNISVECTOR | INTRNLOADMEM | INTRNNOSIDEEFFECT, kArgTyV16I8, 1048 kArgTyPtr) 1049DEF_MIR_INTRINSIC(vector_load_v2u64, "vector_load_v2u64", 1050 INTRNISVECTOR | INTRNLOADMEM | INTRNNOSIDEEFFECT, kArgTyV2U64, 1051 kArgTyPtr) 1052DEF_MIR_INTRINSIC(vector_load_v4u32, "vector_load_v4u32", 1053 INTRNISVECTOR | INTRNLOADMEM | INTRNNOSIDEEFFECT, kArgTyV4U32, 1054 kArgTyPtr) 1055DEF_MIR_INTRINSIC(vector_load_v8u16, "vector_load_v8u16", 1056 INTRNISVECTOR | INTRNLOADMEM | INTRNNOSIDEEFFECT, kArgTyV8U16, 1057 kArgTyPtr) 1058DEF_MIR_INTRINSIC(vector_load_v16u8, "vector_load_v16u8", 1059 INTRNISVECTOR | INTRNLOADMEM | INTRNNOSIDEEFFECT, kArgTyV16U8, 1060 kArgTyPtr) 1061DEF_MIR_INTRINSIC(vector_load_v2f64, "vector_load_v2f64", 1062 INTRNISVECTOR | INTRNLOADMEM | INTRNNOSIDEEFFECT, kArgTyV2F64, 1063 kArgTyPtr) 1064DEF_MIR_INTRINSIC(vector_load_v4f32, "vector_load_v4f32", 1065 INTRNISVECTOR | INTRNLOADMEM | INTRNNOSIDEEFFECT, kArgTyV4F32, 1066 kArgTyPtr) 1067DEF_MIR_INTRINSIC(vector_load_v1i64, "vector_load_v1i64", 1068 INTRNISVECTOR | INTRNLOADMEM | INTRNNOSIDEEFFECT, kArgTyV1I64, 1069 kArgTyPtr) 1070DEF_MIR_INTRINSIC(vector_load_v2i32, "vector_load_v2i32", 1071 INTRNISVECTOR | INTRNLOADMEM | INTRNNOSIDEEFFECT, kArgTyV2I32, 1072 kArgTyPtr) 1073DEF_MIR_INTRINSIC(vector_load_v4i16, "vector_load_v4i16", 1074 INTRNISVECTOR | INTRNLOADMEM | INTRNNOSIDEEFFECT, kArgTyV4I16, 1075 kArgTyPtr) 1076DEF_MIR_INTRINSIC(vector_load_v8i8, "vector_load_v8i8", 1077 INTRNISVECTOR | INTRNLOADMEM | INTRNNOSIDEEFFECT, kArgTyV8I8, 1078 kArgTyPtr) 1079DEF_MIR_INTRINSIC(vector_load_v1u64, "vector_load_v1u64", 1080 INTRNISVECTOR | INTRNLOADMEM | INTRNNOSIDEEFFECT, kArgTyV1U64, 1081 kArgTyPtr) 1082DEF_MIR_INTRINSIC(vector_load_v2u32, "vector_load_v2u32", 1083 INTRNISVECTOR | INTRNLOADMEM | INTRNNOSIDEEFFECT, kArgTyV2U32, 1084 kArgTyPtr) 1085DEF_MIR_INTRINSIC(vector_load_v4u16, "vector_load_v4u16", 1086 INTRNISVECTOR | INTRNLOADMEM | INTRNNOSIDEEFFECT, kArgTyV4U16, 1087 kArgTyPtr) 1088DEF_MIR_INTRINSIC(vector_load_v8u8, "vector_load_v8u8", 1089 INTRNISVECTOR | INTRNLOADMEM | INTRNNOSIDEEFFECT, kArgTyV8U8, 1090 kArgTyPtr) 1091DEF_MIR_INTRINSIC(vector_load_v1f64, "vector_load_v1f64", 1092 INTRNISVECTOR | INTRNLOADMEM | INTRNNOSIDEEFFECT, kArgTyV1F64, 1093 kArgTyPtr) 1094DEF_MIR_INTRINSIC(vector_load_v2f32, "vector_load_v2f32", 1095 INTRNISVECTOR | INTRNLOADMEM | INTRNNOSIDEEFFECT, kArgTyV2F32, 1096 kArgTyPtr) 1097 1098// void vector_store(scalarTy *ptr, vecTy src) 1099// Store the elements from src into the memory pointed to by ptr. 1100DEF_MIR_INTRINSIC(vector_store_v2i64, "vector_store_v2i64", INTRNISVECTOR, 1101 kArgTyVoid, kArgTyPtr, kArgTyV2I64) 1102DEF_MIR_INTRINSIC(vector_store_v4i32, "vector_store_v4i32", INTRNISVECTOR, 1103 kArgTyVoid, kArgTyPtr, kArgTyV4I32) 1104DEF_MIR_INTRINSIC(vector_store_v8i16, "vector_store_v8i16", INTRNISVECTOR, 1105 kArgTyVoid, kArgTyPtr, kArgTyV8I16) 1106DEF_MIR_INTRINSIC(vector_store_v16i8, "vector_store_v16i8", INTRNISVECTOR, 1107 kArgTyVoid, kArgTyPtr, kArgTyV16I8) 1108DEF_MIR_INTRINSIC(vector_store_v2u64, "vector_store_v2u64", INTRNISVECTOR, 1109 kArgTyVoid, kArgTyPtr, kArgTyV2U64) 1110DEF_MIR_INTRINSIC(vector_store_v4u32, "vector_store_v4u32", INTRNISVECTOR, 1111 kArgTyVoid, kArgTyPtr, kArgTyV4U32) 1112DEF_MIR_INTRINSIC(vector_store_v8u16, "vector_store_v8u16", INTRNISVECTOR, 1113 kArgTyVoid, kArgTyPtr, kArgTyV8U16) 1114DEF_MIR_INTRINSIC(vector_store_v16u8, "vector_store_v16u8", INTRNISVECTOR, 1115 kArgTyVoid, kArgTyPtr, kArgTyV16U8) 1116DEF_MIR_INTRINSIC(vector_store_v2f64, "vector_store_v2f64", INTRNISVECTOR, 1117 kArgTyVoid, kArgTyPtr, kArgTyV2F64) 1118DEF_MIR_INTRINSIC(vector_store_v4f32, "vector_store_v4f32", INTRNISVECTOR, 1119 kArgTyVoid, kArgTyPtr, kArgTyV4F32) 1120DEF_MIR_INTRINSIC(vector_store_v1i64, "vector_store_v1i64", INTRNISVECTOR, 1121 kArgTyVoid, kArgTyPtr, kArgTyV1I64) 1122DEF_MIR_INTRINSIC(vector_store_v2i32, "vector_store_v2i32", INTRNISVECTOR, 1123 kArgTyVoid, kArgTyPtr, kArgTyV2I32) 1124DEF_MIR_INTRINSIC(vector_store_v4i16, "vector_store_v4i16", INTRNISVECTOR, 1125 kArgTyVoid, kArgTyPtr, kArgTyV4I16) 1126DEF_MIR_INTRINSIC(vector_store_v8i8, "vector_store_v8i8", INTRNISVECTOR, 1127 kArgTyVoid, kArgTyPtr, kArgTyV8I8) 1128DEF_MIR_INTRINSIC(vector_store_v1u64, "vector_store_v1u64", INTRNISVECTOR, 1129 kArgTyVoid, kArgTyPtr, kArgTyV1U64) 1130DEF_MIR_INTRINSIC(vector_store_v2u32, "vector_store_v2u32", INTRNISVECTOR, 1131 kArgTyVoid, kArgTyPtr, kArgTyV2U32) 1132DEF_MIR_INTRINSIC(vector_store_v4u16, "vector_store_v4u16", INTRNISVECTOR, 1133 kArgTyVoid, kArgTyPtr, kArgTyV4U16) 1134DEF_MIR_INTRINSIC(vector_store_v8u8, "vector_store_v8u8", INTRNISVECTOR, 1135 kArgTyVoid, kArgTyPtr, kArgTyV8U8) 1136DEF_MIR_INTRINSIC(vector_store_v1f64, "vector_store_v1f64", INTRNISVECTOR, 1137 kArgTyVoid, kArgTyPtr, kArgTyV1F64) 1138DEF_MIR_INTRINSIC(vector_store_v2f32, "vector_store_v2f32", INTRNISVECTOR, 1139 kArgTyVoid, kArgTyPtr, kArgTyV2F32) 1140 1141// vecTy vector_subl_low(vecTy src1, vecTy src2) 1142// Subtract each element of the source vector to second source 1143// widen the result into the destination vector. 1144DEF_MIR_INTRINSIC(vector_subl_low_v8i8, "vector_subl_low_v8i8", 1145 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8I16, 1146 kArgTyV8I8, kArgTyV8I8) 1147DEF_MIR_INTRINSIC(vector_subl_low_v4i16, "vector_subl_low_v4i16", 1148 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4I32, 1149 kArgTyV4I16, kArgTyV4I16) 1150DEF_MIR_INTRINSIC(vector_subl_low_v2i32, "vector_subl_low_v2i32", 1151 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2I64, 1152 kArgTyV2I32, kArgTyV2I32) 1153DEF_MIR_INTRINSIC(vector_subl_low_v8u8, "vector_subl_low_v8u8", 1154 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8U16, 1155 kArgTyV8U8, kArgTyV8U8) 1156DEF_MIR_INTRINSIC(vector_subl_low_v4u16, "vector_subl_low_v4u16", 1157 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4U32, 1158 kArgTyV4U16, kArgTyV4U16) 1159DEF_MIR_INTRINSIC(vector_subl_low_v2u32, "vector_subl_low_v2u32", 1160 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2U64, 1161 kArgTyV2U32, kArgTyV2U32) 1162 1163// vecTy vector_subl_high(vecTy src1, vecTy src2) 1164// Subtract each element of the source vector to upper half of second source 1165// widen the result into the destination vector. 1166DEF_MIR_INTRINSIC(vector_subl_high_v8i8, "vector_subl_high_v8i8", 1167 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8I16, 1168 kArgTyV16I8, kArgTyV16I8) 1169DEF_MIR_INTRINSIC(vector_subl_high_v4i16, "vector_subl_high_v4i16", 1170 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4I32, 1171 kArgTyV8I16, kArgTyV8I16) 1172DEF_MIR_INTRINSIC(vector_subl_high_v2i32, "vector_subl_high_v2i32", 1173 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2I64, 1174 kArgTyV4I32, kArgTyV4I32) 1175DEF_MIR_INTRINSIC(vector_subl_high_v8u8, "vector_subl_high_v8u8", 1176 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8U16, 1177 kArgTyV16U8, kArgTyV16U8) 1178DEF_MIR_INTRINSIC(vector_subl_high_v4u16, "vector_subl_high_v4u16", 1179 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4U32, 1180 kArgTyV8U16, kArgTyV8U16) 1181DEF_MIR_INTRINSIC(vector_subl_high_v2u32, "vector_subl_high_v2u32", 1182 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2U64, 1183 kArgTyV4U32, kArgTyV4U32) 1184 1185// vecTy vector_subw_low(vecTy src1, vecTy src2) 1186// Subtract each element of the source vector to second source 1187// widen the result into the destination vector. 1188DEF_MIR_INTRINSIC(vector_subw_low_v8i8, "vector_subw_low_v8i8", 1189 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8I16, 1190 kArgTyV8I16, kArgTyV8I8) 1191DEF_MIR_INTRINSIC(vector_subw_low_v4i16, "vector_subw_low_v4i16", 1192 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4I32, 1193 kArgTyV4I32, kArgTyV4I16) 1194DEF_MIR_INTRINSIC(vector_subw_low_v2i32, "vector_subw_low_v2i32", 1195 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2I64, 1196 kArgTyV2I64, kArgTyV2I32) 1197DEF_MIR_INTRINSIC(vector_subw_low_v8u8, "vector_subw_low_v8u8", 1198 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8U16, 1199 kArgTyV8U16, kArgTyV8U8) 1200DEF_MIR_INTRINSIC(vector_subw_low_v4u16, "vector_subw_low_v4u16", 1201 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4U32, 1202 kArgTyV4U32, kArgTyV4U16) 1203DEF_MIR_INTRINSIC(vector_subw_low_v2u32, "vector_subw_low_v2u32", 1204 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2U64, 1205 kArgTyV2U64, kArgTyV2U32) 1206 1207// vecTy vector_subw_high(vecTy src1, vecTy src2) 1208// Subtract each element of the source vector to upper half of second source 1209// widen the result into the destination vector. 1210DEF_MIR_INTRINSIC(vector_subw_high_v8i8, "vector_subw_high_v8i8", 1211 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8I16, 1212 kArgTyV8I16, kArgTyV16I8) 1213DEF_MIR_INTRINSIC(vector_subw_high_v4i16, "vector_subw_high_v4i16", 1214 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4I32, 1215 kArgTyV4I32, kArgTyV8I16) 1216DEF_MIR_INTRINSIC(vector_subw_high_v2i32, "vector_subw_high_v2i32", 1217 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2I64, 1218 kArgTyV2I64, kArgTyV4I32) 1219DEF_MIR_INTRINSIC(vector_subw_high_v8u8, "vector_subw_high_v8u8", 1220 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8U16, 1221 kArgTyV8U16, kArgTyV16U8) 1222DEF_MIR_INTRINSIC(vector_subw_high_v4u16, "vector_subw_high_v4u16", 1223 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4U32, 1224 kArgTyV4U32, kArgTyV8U16) 1225DEF_MIR_INTRINSIC(vector_subw_high_v2u32, "vector_subw_high_v2u32", 1226 INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2U64, 1227 kArgTyV2U64, kArgTyV4U32) 1228