• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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