f49995e0eb1b6c4120a6589bf966124276e7b952
[oota-llvm.git] / include / llvm / IR / IntrinsicsMips.td
1 //===- IntrinsicsMips.td - Defines Mips intrinsics ---------*- tablegen -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file defines all of the MIPS-specific intrinsics.
11 //
12 //===----------------------------------------------------------------------===//
13
14 //===----------------------------------------------------------------------===//
15 // MIPS DSP data types
16 def mips_v2q15_ty: LLVMType<v2i16>;
17 def mips_v4q7_ty: LLVMType<v4i8>;
18 def mips_q31_ty: LLVMType<i32>;
19
20 let TargetPrefix = "mips" in {  // All intrinsics start with "llvm.mips.".
21
22 //===----------------------------------------------------------------------===//
23 // MIPS DSP Rev 1
24
25 //===----------------------------------------------------------------------===//
26 // Addition/subtraction
27
28 def int_mips_addu_qb : GCCBuiltin<"__builtin_mips_addu_qb">,
29   Intrinsic<[llvm_v4i8_ty], [llvm_v4i8_ty, llvm_v4i8_ty], [Commutative]>;
30 def int_mips_addu_s_qb : GCCBuiltin<"__builtin_mips_addu_s_qb">,
31   Intrinsic<[llvm_v4i8_ty], [llvm_v4i8_ty, llvm_v4i8_ty], [Commutative]>;
32 def int_mips_subu_qb : GCCBuiltin<"__builtin_mips_subu_qb">,
33   Intrinsic<[llvm_v4i8_ty], [llvm_v4i8_ty, llvm_v4i8_ty], []>;
34 def int_mips_subu_s_qb : GCCBuiltin<"__builtin_mips_subu_s_qb">,
35   Intrinsic<[llvm_v4i8_ty], [llvm_v4i8_ty, llvm_v4i8_ty], []>;
36
37 def int_mips_addq_ph : GCCBuiltin<"__builtin_mips_addq_ph">,
38   Intrinsic<[mips_v2q15_ty], [mips_v2q15_ty, mips_v2q15_ty], [Commutative]>;
39 def int_mips_addq_s_ph : GCCBuiltin<"__builtin_mips_addq_s_ph">,
40   Intrinsic<[mips_v2q15_ty], [mips_v2q15_ty, mips_v2q15_ty], [Commutative]>;
41 def int_mips_subq_ph : GCCBuiltin<"__builtin_mips_subq_ph">,
42   Intrinsic<[mips_v2q15_ty], [mips_v2q15_ty, mips_v2q15_ty], []>;
43 def int_mips_subq_s_ph : GCCBuiltin<"__builtin_mips_subq_s_ph">,
44   Intrinsic<[mips_v2q15_ty], [mips_v2q15_ty, mips_v2q15_ty], []>;
45
46 def int_mips_madd: GCCBuiltin<"__builtin_mips_madd">,
47   Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty],
48             [IntrNoMem, Commutative]>;
49 def int_mips_maddu: GCCBuiltin<"__builtin_mips_maddu">,
50   Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty],
51             [IntrNoMem, Commutative]>;
52
53 def int_mips_msub: GCCBuiltin<"__builtin_mips_msub">,
54   Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty],
55             [IntrNoMem]>;
56 def int_mips_msubu: GCCBuiltin<"__builtin_mips_msubu">,
57   Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty],
58             [IntrNoMem]>;
59
60 def int_mips_addq_s_w: GCCBuiltin<"__builtin_mips_addq_s_w">,
61   Intrinsic<[mips_q31_ty], [mips_q31_ty, mips_q31_ty], [Commutative]>;
62 def int_mips_subq_s_w: GCCBuiltin<"__builtin_mips_subq_s_w">,
63   Intrinsic<[mips_q31_ty], [mips_q31_ty, mips_q31_ty], []>;
64
65 def int_mips_addsc: GCCBuiltin<"__builtin_mips_addsc">,
66   Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty], [Commutative]>;
67 def int_mips_addwc: GCCBuiltin<"__builtin_mips_addwc">,
68   Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty], [Commutative]>;
69
70 def int_mips_modsub: GCCBuiltin<"__builtin_mips_modsub">,
71   Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>;
72
73 def int_mips_raddu_w_qb: GCCBuiltin<"__builtin_mips_raddu_w_qb">,
74   Intrinsic<[llvm_i32_ty], [llvm_v4i8_ty], [IntrNoMem]>;
75
76 //===----------------------------------------------------------------------===//
77 // Absolute value
78
79 def int_mips_absq_s_ph: GCCBuiltin<"__builtin_mips_absq_s_ph">,
80   Intrinsic<[mips_v2q15_ty], [mips_v2q15_ty], []>;
81 def int_mips_absq_s_w: GCCBuiltin<"__builtin_mips_absq_s_w">,
82   Intrinsic<[mips_q31_ty], [mips_q31_ty], []>;
83
84 //===----------------------------------------------------------------------===//
85 // Precision reduce/expand
86
87 def int_mips_precrq_qb_ph: GCCBuiltin<"__builtin_mips_precrq_qb_ph">,
88   Intrinsic<[llvm_v4i8_ty], [mips_v2q15_ty, mips_v2q15_ty], [IntrNoMem]>;
89 def int_mips_precrqu_s_qb_ph: GCCBuiltin<"__builtin_mips_precrqu_s_qb_ph">,
90   Intrinsic<[llvm_v4i8_ty], [mips_v2q15_ty, mips_v2q15_ty], []>;
91 def int_mips_precrq_ph_w: GCCBuiltin<"__builtin_mips_precrq_ph_w">,
92   Intrinsic<[mips_v2q15_ty], [mips_q31_ty, mips_q31_ty], [IntrNoMem]>;
93 def int_mips_precrq_rs_ph_w: GCCBuiltin<"__builtin_mips_precrq_rs_ph_w">,
94   Intrinsic<[mips_v2q15_ty], [mips_q31_ty, mips_q31_ty], []>;
95 def int_mips_preceq_w_phl: GCCBuiltin<"__builtin_mips_preceq_w_phl">,
96   Intrinsic<[mips_q31_ty], [mips_v2q15_ty], [IntrNoMem]>;
97 def int_mips_preceq_w_phr: GCCBuiltin<"__builtin_mips_preceq_w_phr">,
98   Intrinsic<[mips_q31_ty], [mips_v2q15_ty], [IntrNoMem]>;
99 def int_mips_precequ_ph_qbl: GCCBuiltin<"__builtin_mips_precequ_ph_qbl">,
100   Intrinsic<[mips_v2q15_ty], [llvm_v4i8_ty], [IntrNoMem]>;
101 def int_mips_precequ_ph_qbr: GCCBuiltin<"__builtin_mips_precequ_ph_qbr">,
102   Intrinsic<[mips_v2q15_ty], [llvm_v4i8_ty], [IntrNoMem]>;
103 def int_mips_precequ_ph_qbla: GCCBuiltin<"__builtin_mips_precequ_ph_qbla">,
104   Intrinsic<[mips_v2q15_ty], [llvm_v4i8_ty], [IntrNoMem]>;
105 def int_mips_precequ_ph_qbra: GCCBuiltin<"__builtin_mips_precequ_ph_qbra">,
106   Intrinsic<[mips_v2q15_ty], [llvm_v4i8_ty], [IntrNoMem]>;
107 def int_mips_preceu_ph_qbl: GCCBuiltin<"__builtin_mips_preceu_ph_qbl">,
108   Intrinsic<[mips_v2q15_ty], [llvm_v4i8_ty], [IntrNoMem]>;
109 def int_mips_preceu_ph_qbr: GCCBuiltin<"__builtin_mips_preceu_ph_qbr">,
110   Intrinsic<[mips_v2q15_ty], [llvm_v4i8_ty], [IntrNoMem]>;
111 def int_mips_preceu_ph_qbla: GCCBuiltin<"__builtin_mips_preceu_ph_qbla">,
112   Intrinsic<[mips_v2q15_ty], [llvm_v4i8_ty], [IntrNoMem]>;
113 def int_mips_preceu_ph_qbra: GCCBuiltin<"__builtin_mips_preceu_ph_qbra">,
114   Intrinsic<[mips_v2q15_ty], [llvm_v4i8_ty], [IntrNoMem]>;
115
116 //===----------------------------------------------------------------------===//
117 // Shift
118
119 def int_mips_shll_qb: GCCBuiltin<"__builtin_mips_shll_qb">,
120   Intrinsic<[llvm_v4i8_ty], [llvm_v4i8_ty, llvm_i32_ty], []>;
121 def int_mips_shrl_qb: GCCBuiltin<"__builtin_mips_shrl_qb">,
122   Intrinsic<[llvm_v4i8_ty], [llvm_v4i8_ty, llvm_i32_ty], [IntrNoMem]>;
123 def int_mips_shll_ph: GCCBuiltin<"__builtin_mips_shll_ph">,
124   Intrinsic<[mips_v2q15_ty], [mips_v2q15_ty, llvm_i32_ty], []>;
125 def int_mips_shll_s_ph: GCCBuiltin<"__builtin_mips_shll_s_ph">,
126   Intrinsic<[mips_v2q15_ty], [mips_v2q15_ty, llvm_i32_ty], []>;
127 def int_mips_shra_ph: GCCBuiltin<"__builtin_mips_shra_ph">,
128   Intrinsic<[mips_v2q15_ty], [mips_v2q15_ty, llvm_i32_ty], [IntrNoMem]>;
129 def int_mips_shra_r_ph: GCCBuiltin<"__builtin_mips_shra_r_ph">,
130   Intrinsic<[mips_v2q15_ty], [mips_v2q15_ty, llvm_i32_ty], [IntrNoMem]>;
131 def int_mips_shll_s_w: GCCBuiltin<"__builtin_mips_shll_s_w">,
132   Intrinsic<[mips_q31_ty], [mips_q31_ty, llvm_i32_ty], []>;
133 def int_mips_shra_r_w: GCCBuiltin<"__builtin_mips_shra_r_w">,
134   Intrinsic<[mips_q31_ty], [mips_q31_ty, llvm_i32_ty], [IntrNoMem]>;
135 def int_mips_shilo: GCCBuiltin<"__builtin_mips_shilo">,
136   Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i32_ty], [IntrNoMem]>;
137
138 //===----------------------------------------------------------------------===//
139 // Multiplication
140
141 def int_mips_muleu_s_ph_qbl: GCCBuiltin<"__builtin_mips_muleu_s_ph_qbl">,
142   Intrinsic<[mips_v2q15_ty], [llvm_v4i8_ty, mips_v2q15_ty], []>;
143 def int_mips_muleu_s_ph_qbr: GCCBuiltin<"__builtin_mips_muleu_s_ph_qbr">,
144   Intrinsic<[mips_v2q15_ty], [llvm_v4i8_ty, mips_v2q15_ty], []>;
145 def int_mips_mulq_rs_ph: GCCBuiltin<"__builtin_mips_mulq_rs_ph">,
146   Intrinsic<[mips_v2q15_ty], [mips_v2q15_ty, mips_v2q15_ty], [Commutative]>;
147 def int_mips_muleq_s_w_phl: GCCBuiltin<"__builtin_mips_muleq_s_w_phl">,
148   Intrinsic<[mips_q31_ty], [mips_v2q15_ty, mips_v2q15_ty], [Commutative]>;
149 def int_mips_muleq_s_w_phr: GCCBuiltin<"__builtin_mips_muleq_s_w_phr">,
150   Intrinsic<[mips_q31_ty], [mips_v2q15_ty, mips_v2q15_ty], [Commutative]>;
151 def int_mips_mulsaq_s_w_ph: GCCBuiltin<"__builtin_mips_mulsaq_s_w_ph">,
152   Intrinsic<[llvm_i64_ty], [llvm_i64_ty, mips_v2q15_ty, mips_v2q15_ty], []>;
153 def int_mips_maq_s_w_phl: GCCBuiltin<"__builtin_mips_maq_s_w_phl">,
154   Intrinsic<[llvm_i64_ty], [llvm_i64_ty, mips_v2q15_ty, mips_v2q15_ty], []>;
155 def int_mips_maq_s_w_phr: GCCBuiltin<"__builtin_mips_maq_s_w_phr">,
156   Intrinsic<[llvm_i64_ty], [llvm_i64_ty, mips_v2q15_ty, mips_v2q15_ty], []>;
157 def int_mips_maq_sa_w_phl: GCCBuiltin<"__builtin_mips_maq_sa_w_phl">,
158   Intrinsic<[llvm_i64_ty], [llvm_i64_ty, mips_v2q15_ty, mips_v2q15_ty], []>;
159 def int_mips_maq_sa_w_phr: GCCBuiltin<"__builtin_mips_maq_sa_w_phr">,
160   Intrinsic<[llvm_i64_ty], [llvm_i64_ty, mips_v2q15_ty, mips_v2q15_ty], []>;
161 def int_mips_mult: GCCBuiltin<"__builtin_mips_mult">,
162   Intrinsic<[llvm_i64_ty], [llvm_i32_ty, llvm_i32_ty],
163             [IntrNoMem, Commutative]>;
164 def int_mips_multu: GCCBuiltin<"__builtin_mips_multu">,
165   Intrinsic<[llvm_i64_ty], [llvm_i32_ty, llvm_i32_ty],
166             [IntrNoMem, Commutative]>;
167
168 //===----------------------------------------------------------------------===//
169 // Dot product with accumulate/subtract
170
171 def int_mips_dpau_h_qbl: GCCBuiltin<"__builtin_mips_dpau_h_qbl">,
172   Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_v4i8_ty, llvm_v4i8_ty],
173             [IntrNoMem]>;
174 def int_mips_dpau_h_qbr: GCCBuiltin<"__builtin_mips_dpau_h_qbr">,
175   Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_v4i8_ty, llvm_v4i8_ty],
176             [IntrNoMem]>;
177 def int_mips_dpsu_h_qbl: GCCBuiltin<"__builtin_mips_dpsu_h_qbl">,
178   Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_v4i8_ty, llvm_v4i8_ty],
179             [IntrNoMem]>;
180 def int_mips_dpsu_h_qbr: GCCBuiltin<"__builtin_mips_dpsu_h_qbr">,
181   Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_v4i8_ty, llvm_v4i8_ty],
182             [IntrNoMem]>;
183 def int_mips_dpaq_s_w_ph: GCCBuiltin<"__builtin_mips_dpaq_s_w_ph">,
184   Intrinsic<[llvm_i64_ty], [llvm_i64_ty, mips_v2q15_ty, mips_v2q15_ty], []>;
185 def int_mips_dpsq_s_w_ph: GCCBuiltin<"__builtin_mips_dpsq_s_w_ph">,
186   Intrinsic<[llvm_i64_ty], [llvm_i64_ty, mips_v2q15_ty, mips_v2q15_ty], []>;
187 def int_mips_dpaq_sa_l_w: GCCBuiltin<"__builtin_mips_dpaq_sa_l_w">,
188   Intrinsic<[llvm_i64_ty], [llvm_i64_ty, mips_q31_ty, mips_q31_ty], []>;
189 def int_mips_dpsq_sa_l_w: GCCBuiltin<"__builtin_mips_dpsq_sa_l_w">,
190   Intrinsic<[llvm_i64_ty], [llvm_i64_ty, mips_q31_ty, mips_q31_ty], []>;
191
192 //===----------------------------------------------------------------------===//
193 // Comparison
194
195 def int_mips_cmpu_eq_qb: GCCBuiltin<"__builtin_mips_cmpu_eq_qb">,
196   Intrinsic<[], [llvm_v4i8_ty, llvm_v4i8_ty], [Commutative]>;
197 def int_mips_cmpu_lt_qb: GCCBuiltin<"__builtin_mips_cmpu_lt_qb">,
198   Intrinsic<[], [llvm_v4i8_ty, llvm_v4i8_ty], []>;
199 def int_mips_cmpu_le_qb: GCCBuiltin<"__builtin_mips_cmpu_le_qb">,
200   Intrinsic<[], [llvm_v4i8_ty, llvm_v4i8_ty], []>;
201 def int_mips_cmpgu_eq_qb: GCCBuiltin<"__builtin_mips_cmpgu_eq_qb">,
202   Intrinsic<[llvm_i32_ty], [llvm_v4i8_ty, llvm_v4i8_ty], [Commutative]>;
203 def int_mips_cmpgu_lt_qb: GCCBuiltin<"__builtin_mips_cmpgu_lt_qb">,
204   Intrinsic<[llvm_i32_ty], [llvm_v4i8_ty, llvm_v4i8_ty], []>;
205 def int_mips_cmpgu_le_qb: GCCBuiltin<"__builtin_mips_cmpgu_le_qb">,
206   Intrinsic<[llvm_i32_ty], [llvm_v4i8_ty, llvm_v4i8_ty], []>;
207 def int_mips_cmp_eq_ph: GCCBuiltin<"__builtin_mips_cmp_eq_ph">,
208   Intrinsic<[], [mips_v2q15_ty, mips_v2q15_ty], [Commutative]>;
209 def int_mips_cmp_lt_ph: GCCBuiltin<"__builtin_mips_cmp_lt_ph">,
210   Intrinsic<[], [mips_v2q15_ty, mips_v2q15_ty], []>;
211 def int_mips_cmp_le_ph: GCCBuiltin<"__builtin_mips_cmp_le_ph">,
212   Intrinsic<[], [mips_v2q15_ty, mips_v2q15_ty], []>;
213
214 //===----------------------------------------------------------------------===//
215 // Extracting
216
217 def int_mips_extr_s_h: GCCBuiltin<"__builtin_mips_extr_s_h">,
218   Intrinsic<[llvm_i32_ty], [llvm_i64_ty, llvm_i32_ty], []>;
219 def int_mips_extr_w: GCCBuiltin<"__builtin_mips_extr_w">,
220   Intrinsic<[llvm_i32_ty], [llvm_i64_ty, llvm_i32_ty], []>;
221 def int_mips_extr_rs_w: GCCBuiltin<"__builtin_mips_extr_rs_w">,
222   Intrinsic<[llvm_i32_ty], [llvm_i64_ty, llvm_i32_ty], []>;
223 def int_mips_extr_r_w: GCCBuiltin<"__builtin_mips_extr_r_w">,
224   Intrinsic<[llvm_i32_ty], [llvm_i64_ty, llvm_i32_ty], []>;
225 def int_mips_extp: GCCBuiltin<"__builtin_mips_extp">,
226   Intrinsic<[llvm_i32_ty], [llvm_i64_ty, llvm_i32_ty], []>;
227 def int_mips_extpdp: GCCBuiltin<"__builtin_mips_extpdp">,
228   Intrinsic<[llvm_i32_ty], [llvm_i64_ty, llvm_i32_ty], []>;
229
230 //===----------------------------------------------------------------------===//
231 // Misc
232
233 def int_mips_wrdsp: GCCBuiltin<"__builtin_mips_wrdsp">,
234   Intrinsic<[], [llvm_i32_ty, llvm_i32_ty], []>;
235 def int_mips_rddsp: GCCBuiltin<"__builtin_mips_rddsp">,
236   Intrinsic<[llvm_i32_ty], [llvm_i32_ty], [IntrReadMem]>;
237
238 def int_mips_insv: GCCBuiltin<"__builtin_mips_insv">,
239   Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty], [IntrReadMem]>;
240 def int_mips_bitrev: GCCBuiltin<"__builtin_mips_bitrev">,
241   Intrinsic<[llvm_i32_ty], [llvm_i32_ty], [IntrNoMem]>;
242
243 def int_mips_packrl_ph: GCCBuiltin<"__builtin_mips_packrl_ph">,
244   Intrinsic<[mips_v2q15_ty], [mips_v2q15_ty, mips_v2q15_ty], [IntrNoMem]>;
245
246 def int_mips_repl_qb: GCCBuiltin<"__builtin_mips_repl_qb">,
247   Intrinsic<[llvm_v4i8_ty], [llvm_i32_ty], [IntrNoMem]>;
248 def int_mips_repl_ph: GCCBuiltin<"__builtin_mips_repl_ph">,
249   Intrinsic<[mips_v2q15_ty], [llvm_i32_ty], [IntrNoMem]>;
250
251 def int_mips_pick_qb: GCCBuiltin<"__builtin_mips_pick_qb">,
252   Intrinsic<[llvm_v4i8_ty], [llvm_v4i8_ty, llvm_v4i8_ty], [IntrReadMem]>;
253 def int_mips_pick_ph: GCCBuiltin<"__builtin_mips_pick_ph">,
254   Intrinsic<[mips_v2q15_ty], [mips_v2q15_ty, mips_v2q15_ty], [IntrReadMem]>;
255
256 def int_mips_mthlip: GCCBuiltin<"__builtin_mips_mthlip">,
257   Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i32_ty], []>;
258
259 def int_mips_bposge32: GCCBuiltin<"__builtin_mips_bposge32">,
260   Intrinsic<[llvm_i32_ty], [], [IntrReadMem]>;
261
262 def int_mips_lbux: GCCBuiltin<"__builtin_mips_lbux">,
263   Intrinsic<[llvm_i32_ty], [llvm_ptr_ty, llvm_i32_ty], [IntrReadArgMem]>;
264 def int_mips_lhx: GCCBuiltin<"__builtin_mips_lhx">,
265   Intrinsic<[llvm_i32_ty], [llvm_ptr_ty, llvm_i32_ty], [IntrReadArgMem]>;
266 def int_mips_lwx: GCCBuiltin<"__builtin_mips_lwx">,
267   Intrinsic<[llvm_i32_ty], [llvm_ptr_ty, llvm_i32_ty], [IntrReadArgMem]>;
268
269 //===----------------------------------------------------------------------===//
270 // MIPS DSP Rev 2
271
272 def int_mips_absq_s_qb: GCCBuiltin<"__builtin_mips_absq_s_qb">,
273   Intrinsic<[mips_v4q7_ty], [mips_v4q7_ty], []>;
274
275 def int_mips_addqh_ph: GCCBuiltin<"__builtin_mips_addqh_ph">,
276   Intrinsic<[mips_v2q15_ty], [mips_v2q15_ty, mips_v2q15_ty],
277             [IntrNoMem, Commutative]>;
278 def int_mips_addqh_r_ph: GCCBuiltin<"__builtin_mips_addqh_r_ph">,
279   Intrinsic<[mips_v2q15_ty], [mips_v2q15_ty, mips_v2q15_ty],
280             [IntrNoMem, Commutative]>;
281 def int_mips_addqh_w: GCCBuiltin<"__builtin_mips_addqh_w">,
282   Intrinsic<[mips_q31_ty], [mips_q31_ty, mips_q31_ty],
283             [IntrNoMem, Commutative]>;
284 def int_mips_addqh_r_w: GCCBuiltin<"__builtin_mips_addqh_r_w">,
285   Intrinsic<[mips_q31_ty], [mips_q31_ty, mips_q31_ty],
286             [IntrNoMem, Commutative]>;
287
288 def int_mips_addu_ph: GCCBuiltin<"__builtin_mips_addu_ph">,
289   Intrinsic<[llvm_v2i16_ty], [llvm_v2i16_ty, llvm_v2i16_ty], [Commutative]>;
290 def int_mips_addu_s_ph: GCCBuiltin<"__builtin_mips_addu_s_ph">,
291   Intrinsic<[llvm_v2i16_ty], [llvm_v2i16_ty, llvm_v2i16_ty], [Commutative]>;
292
293 def int_mips_adduh_qb: GCCBuiltin<"__builtin_mips_adduh_qb">,
294   Intrinsic<[llvm_v4i8_ty], [llvm_v4i8_ty, llvm_v4i8_ty],
295             [IntrNoMem, Commutative]>;
296 def int_mips_adduh_r_qb: GCCBuiltin<"__builtin_mips_adduh_r_qb">,
297   Intrinsic<[llvm_v4i8_ty], [llvm_v4i8_ty, llvm_v4i8_ty],
298             [IntrNoMem, Commutative]>;
299
300 def int_mips_append: GCCBuiltin<"__builtin_mips_append">,
301   Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
302   [IntrNoMem]>;
303 def int_mips_balign: GCCBuiltin<"__builtin_mips_balign">,
304   Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
305   [IntrNoMem]>;
306
307 def int_mips_cmpgdu_eq_qb: GCCBuiltin<"__builtin_mips_cmpgdu_eq_qb">,
308   Intrinsic<[llvm_i32_ty], [llvm_v4i8_ty, llvm_v4i8_ty], [Commutative]>;
309 def int_mips_cmpgdu_lt_qb: GCCBuiltin<"__builtin_mips_cmpgdu_lt_qb">,
310   Intrinsic<[llvm_i32_ty], [llvm_v4i8_ty, llvm_v4i8_ty], []>;
311 def int_mips_cmpgdu_le_qb: GCCBuiltin<"__builtin_mips_cmpgdu_le_qb">,
312   Intrinsic<[llvm_i32_ty], [llvm_v4i8_ty, llvm_v4i8_ty], []>;
313
314 def int_mips_dpa_w_ph: GCCBuiltin<"__builtin_mips_dpa_w_ph">,
315   Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_v2i16_ty, llvm_v2i16_ty],
316             [IntrNoMem]>;
317 def int_mips_dps_w_ph: GCCBuiltin<"__builtin_mips_dps_w_ph">,
318   Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_v2i16_ty, llvm_v2i16_ty],
319             [IntrNoMem]>;
320
321 def int_mips_dpaqx_s_w_ph: GCCBuiltin<"__builtin_mips_dpaqx_s_w_ph">,
322   Intrinsic<[llvm_i64_ty], [llvm_i64_ty, mips_v2q15_ty, mips_v2q15_ty], []>;
323 def int_mips_dpaqx_sa_w_ph: GCCBuiltin<"__builtin_mips_dpaqx_sa_w_ph">,
324   Intrinsic<[llvm_i64_ty], [llvm_i64_ty, mips_v2q15_ty, mips_v2q15_ty], []>;
325 def int_mips_dpax_w_ph: GCCBuiltin<"__builtin_mips_dpax_w_ph">,
326   Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_v2i16_ty, llvm_v2i16_ty],
327             [IntrNoMem]>;
328 def int_mips_dpsx_w_ph: GCCBuiltin<"__builtin_mips_dpsx_w_ph">,
329   Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_v2i16_ty, llvm_v2i16_ty],
330             [IntrNoMem]>;
331 def int_mips_dpsqx_s_w_ph: GCCBuiltin<"__builtin_mips_dpsqx_s_w_ph">,
332   Intrinsic<[llvm_i64_ty], [llvm_i64_ty, mips_v2q15_ty, mips_v2q15_ty], []>;
333 def int_mips_dpsqx_sa_w_ph: GCCBuiltin<"__builtin_mips_dpsqx_sa_w_ph">,
334   Intrinsic<[llvm_i64_ty], [llvm_i64_ty, mips_v2q15_ty, mips_v2q15_ty], []>;
335
336 def int_mips_mul_ph: GCCBuiltin<"__builtin_mips_mul_ph">,
337   Intrinsic<[llvm_v2i16_ty], [llvm_v2i16_ty, llvm_v2i16_ty], [Commutative]>;
338 def int_mips_mul_s_ph: GCCBuiltin<"__builtin_mips_mul_s_ph">,
339   Intrinsic<[llvm_v2i16_ty], [llvm_v2i16_ty, llvm_v2i16_ty], [Commutative]>;
340
341 def int_mips_mulq_rs_w: GCCBuiltin<"__builtin_mips_mulq_rs_w">,
342   Intrinsic<[mips_q31_ty], [mips_q31_ty, mips_q31_ty], [Commutative]>;
343 def int_mips_mulq_s_ph: GCCBuiltin<"__builtin_mips_mulq_s_ph">,
344   Intrinsic<[mips_v2q15_ty], [mips_v2q15_ty, mips_v2q15_ty], [Commutative]>;
345 def int_mips_mulq_s_w: GCCBuiltin<"__builtin_mips_mulq_s_w">,
346   Intrinsic<[mips_q31_ty], [mips_q31_ty, mips_q31_ty], [Commutative]>;
347 def int_mips_mulsa_w_ph: GCCBuiltin<"__builtin_mips_mulsa_w_ph">,
348   Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_v2i16_ty, llvm_v2i16_ty],
349             [IntrNoMem]>;
350
351 def int_mips_precr_qb_ph: GCCBuiltin<"__builtin_mips_precr_qb_ph">,
352   Intrinsic<[llvm_v4i8_ty], [llvm_v2i16_ty, llvm_v2i16_ty], []>;
353 def int_mips_precr_sra_ph_w: GCCBuiltin<"__builtin_mips_precr_sra_ph_w">,
354   Intrinsic<[llvm_v2i16_ty], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
355             [IntrNoMem]>;
356 def int_mips_precr_sra_r_ph_w: GCCBuiltin<"__builtin_mips_precr_sra_r_ph_w">,
357   Intrinsic<[llvm_v2i16_ty], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
358             [IntrNoMem]>;
359
360 def int_mips_prepend: GCCBuiltin<"__builtin_mips_prepend">,
361   Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
362   [IntrNoMem]>;
363
364 def int_mips_shra_qb: GCCBuiltin<"__builtin_mips_shra_qb">,
365   Intrinsic<[llvm_v4i8_ty], [llvm_v4i8_ty, llvm_i32_ty], [IntrNoMem]>;
366 def int_mips_shra_r_qb: GCCBuiltin<"__builtin_mips_shra_r_qb">,
367   Intrinsic<[llvm_v4i8_ty], [llvm_v4i8_ty, llvm_i32_ty], [IntrNoMem]>;
368 def int_mips_shrl_ph: GCCBuiltin<"__builtin_mips_shrl_ph">,
369   Intrinsic<[llvm_v2i16_ty], [llvm_v2i16_ty, llvm_i32_ty], [IntrNoMem]>;
370
371 def int_mips_subqh_ph: GCCBuiltin<"__builtin_mips_subqh_ph">,
372   Intrinsic<[mips_v2q15_ty], [mips_v2q15_ty, mips_v2q15_ty], [IntrNoMem]>;
373 def int_mips_subqh_r_ph: GCCBuiltin<"__builtin_mips_subqh_r_ph">,
374   Intrinsic<[mips_v2q15_ty], [mips_v2q15_ty, mips_v2q15_ty], [IntrNoMem]>;
375 def int_mips_subqh_w: GCCBuiltin<"__builtin_mips_subqh_w">,
376   Intrinsic<[mips_q31_ty], [mips_q31_ty, mips_q31_ty], [IntrNoMem]>;
377 def int_mips_subqh_r_w: GCCBuiltin<"__builtin_mips_subqh_r_w">,
378   Intrinsic<[mips_q31_ty], [mips_q31_ty, mips_q31_ty], [IntrNoMem]>;
379
380 def int_mips_subu_ph: GCCBuiltin<"__builtin_mips_subu_ph">,
381   Intrinsic<[llvm_v2i16_ty], [llvm_v2i16_ty, llvm_v2i16_ty], []>;
382 def int_mips_subu_s_ph: GCCBuiltin<"__builtin_mips_subu_s_ph">,
383   Intrinsic<[llvm_v2i16_ty], [llvm_v2i16_ty, llvm_v2i16_ty], []>;
384
385 def int_mips_subuh_qb: GCCBuiltin<"__builtin_mips_subuh_qb">,
386   Intrinsic<[llvm_v4i8_ty], [llvm_v4i8_ty, llvm_v4i8_ty], [IntrNoMem]>;
387 def int_mips_subuh_r_qb: GCCBuiltin<"__builtin_mips_subuh_r_qb">,
388   Intrinsic<[llvm_v4i8_ty], [llvm_v4i8_ty, llvm_v4i8_ty], [IntrNoMem]>;
389
390 //===----------------------------------------------------------------------===//
391 // MIPS MSA
392
393 //===----------------------------------------------------------------------===//
394 // Addition/subtraction
395
396 def int_mips_add_a_b : GCCBuiltin<"__builtin_msa_add_a_b">,
397   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty], [Commutative]>;
398 def int_mips_add_a_h : GCCBuiltin<"__builtin_msa_add_a_h">,
399   Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty], [Commutative]>;
400 def int_mips_add_a_w : GCCBuiltin<"__builtin_msa_add_a_w">,
401   Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], [Commutative]>;
402 def int_mips_add_a_d : GCCBuiltin<"__builtin_msa_add_a_d">,
403   Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], [Commutative]>;
404
405 def int_mips_adds_a_b : GCCBuiltin<"__builtin_msa_adds_a_b">,
406   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty], [Commutative]>;
407 def int_mips_adds_a_h : GCCBuiltin<"__builtin_msa_adds_a_h">,
408   Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty], [Commutative]>;
409 def int_mips_adds_a_w : GCCBuiltin<"__builtin_msa_adds_a_w">,
410   Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], [Commutative]>;
411 def int_mips_adds_a_d : GCCBuiltin<"__builtin_msa_adds_a_d">,
412   Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], [Commutative]>;
413
414 def int_mips_adds_s_b : GCCBuiltin<"__builtin_msa_adds_s_b">,
415   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty], [Commutative]>;
416 def int_mips_adds_s_h : GCCBuiltin<"__builtin_msa_adds_s_h">,
417   Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty], [Commutative]>;
418 def int_mips_adds_s_w : GCCBuiltin<"__builtin_msa_adds_s_w">,
419   Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], [Commutative]>;
420 def int_mips_adds_s_d : GCCBuiltin<"__builtin_msa_adds_s_d">,
421   Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], [Commutative]>;
422
423 def int_mips_adds_u_b : GCCBuiltin<"__builtin_msa_adds_u_b">,
424   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty], [Commutative]>;
425 def int_mips_adds_u_h : GCCBuiltin<"__builtin_msa_adds_u_h">,
426   Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty], [Commutative]>;
427 def int_mips_adds_u_w : GCCBuiltin<"__builtin_msa_adds_u_w">,
428   Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], [Commutative]>;
429 def int_mips_adds_u_d : GCCBuiltin<"__builtin_msa_adds_u_d">,
430   Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], [Commutative]>;
431
432 def int_mips_addv_b : GCCBuiltin<"__builtin_msa_addv_b">,
433   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty], [Commutative]>;
434 def int_mips_addv_h : GCCBuiltin<"__builtin_msa_addv_h">,
435   Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty], [Commutative]>;
436 def int_mips_addv_w : GCCBuiltin<"__builtin_msa_addv_w">,
437   Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], [Commutative]>;
438 def int_mips_addv_d : GCCBuiltin<"__builtin_msa_addv_d">,
439   Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], [Commutative]>;
440
441 def int_mips_addvi_b : GCCBuiltin<"__builtin_msa_addvi_b">,
442   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty], [Commutative]>;
443 def int_mips_addvi_h : GCCBuiltin<"__builtin_msa_addvi_h">,
444   Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i32_ty], [Commutative]>;
445 def int_mips_addvi_w : GCCBuiltin<"__builtin_msa_addvi_w">,
446   Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i32_ty], [Commutative]>;
447 def int_mips_addvi_d : GCCBuiltin<"__builtin_msa_addvi_d">,
448   Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i32_ty], [Commutative]>;
449
450 def int_mips_andi_b : GCCBuiltin<"__builtin_msa_andi_b">,
451   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty], []>;
452
453 def int_mips_asub_s_b : GCCBuiltin<"__builtin_msa_asub_s_b">,
454   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty], []>;
455 def int_mips_asub_s_h : GCCBuiltin<"__builtin_msa_asub_s_h">,
456   Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty], []>;
457 def int_mips_asub_s_w : GCCBuiltin<"__builtin_msa_asub_s_w">,
458   Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], []>;
459 def int_mips_asub_s_d : GCCBuiltin<"__builtin_msa_asub_s_d">,
460   Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], []>;
461
462 def int_mips_asub_u_b : GCCBuiltin<"__builtin_msa_asub_u_b">,
463   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty], []>;
464 def int_mips_asub_u_h : GCCBuiltin<"__builtin_msa_asub_u_h">,
465   Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty], []>;
466 def int_mips_asub_u_w : GCCBuiltin<"__builtin_msa_asub_u_w">,
467   Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], []>;
468 def int_mips_asub_u_d : GCCBuiltin<"__builtin_msa_asub_u_d">,
469   Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], []>;
470
471 def int_mips_ave_s_b : GCCBuiltin<"__builtin_msa_ave_s_b">,
472   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty], [Commutative]>;
473 def int_mips_ave_s_h : GCCBuiltin<"__builtin_msa_ave_s_h">,
474   Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty], [Commutative]>;
475 def int_mips_ave_s_w : GCCBuiltin<"__builtin_msa_ave_s_w">,
476   Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], [Commutative]>;
477 def int_mips_ave_s_d : GCCBuiltin<"__builtin_msa_ave_s_d">,
478   Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], [Commutative]>;
479
480 def int_mips_ave_u_b : GCCBuiltin<"__builtin_msa_ave_u_b">,
481   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty], [Commutative]>;
482 def int_mips_ave_u_h : GCCBuiltin<"__builtin_msa_ave_u_h">,
483   Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty], [Commutative]>;
484 def int_mips_ave_u_w : GCCBuiltin<"__builtin_msa_ave_u_w">,
485   Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], [Commutative]>;
486 def int_mips_ave_u_d : GCCBuiltin<"__builtin_msa_ave_u_d">,
487   Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], [Commutative]>;
488
489 def int_mips_aver_s_b : GCCBuiltin<"__builtin_msa_aver_s_b">,
490   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty], [Commutative]>;
491 def int_mips_aver_s_h : GCCBuiltin<"__builtin_msa_aver_s_h">,
492   Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty], [Commutative]>;
493 def int_mips_aver_s_w : GCCBuiltin<"__builtin_msa_aver_s_w">,
494   Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], [Commutative]>;
495 def int_mips_aver_s_d : GCCBuiltin<"__builtin_msa_aver_s_d">,
496   Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], [Commutative]>;
497
498 def int_mips_aver_u_b : GCCBuiltin<"__builtin_msa_aver_u_b">,
499   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty], [Commutative]>;
500 def int_mips_aver_u_h : GCCBuiltin<"__builtin_msa_aver_u_h">,
501   Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty], [Commutative]>;
502 def int_mips_aver_u_w : GCCBuiltin<"__builtin_msa_aver_u_w">,
503   Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], [Commutative]>;
504 def int_mips_aver_u_d : GCCBuiltin<"__builtin_msa_aver_u_d">,
505   Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], [Commutative]>;
506
507 def int_mips_bclr_b : GCCBuiltin<"__builtin_msa_bclr_b">,
508   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty], []>;
509 def int_mips_bclr_h : GCCBuiltin<"__builtin_msa_bclr_h">,
510   Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty], []>;
511 def int_mips_bclr_w : GCCBuiltin<"__builtin_msa_bclr_w">,
512   Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], []>;
513 def int_mips_bclr_d : GCCBuiltin<"__builtin_msa_bclr_d">,
514   Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], []>;
515
516 def int_mips_bclri_b : GCCBuiltin<"__builtin_msa_bclri_b">,
517   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty], []>;
518 def int_mips_bclri_h : GCCBuiltin<"__builtin_msa_bclri_h">,
519   Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i32_ty], []>;
520 def int_mips_bclri_w : GCCBuiltin<"__builtin_msa_bclri_w">,
521   Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i32_ty], []>;
522 def int_mips_bclri_d : GCCBuiltin<"__builtin_msa_bclri_d">,
523   Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i32_ty], []>;
524
525 def int_mips_binsl_b : GCCBuiltin<"__builtin_msa_binsl_b">,
526   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty], []>;
527 def int_mips_binsl_h : GCCBuiltin<"__builtin_msa_binsl_h">,
528   Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty], []>;
529 def int_mips_binsl_w : GCCBuiltin<"__builtin_msa_binsl_w">,
530   Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], []>;
531 def int_mips_binsl_d : GCCBuiltin<"__builtin_msa_binsl_d">,
532   Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], []>;
533
534 def int_mips_binsli_b : GCCBuiltin<"__builtin_msa_binsli_b">,
535   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty], []>;
536 def int_mips_binsli_h : GCCBuiltin<"__builtin_msa_binsli_h">,
537   Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i32_ty], []>;
538 def int_mips_binsli_w : GCCBuiltin<"__builtin_msa_binsli_w">,
539   Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i32_ty], []>;
540 def int_mips_binsli_d : GCCBuiltin<"__builtin_msa_binsli_d">,
541   Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i32_ty], []>;
542
543 def int_mips_binsr_b : GCCBuiltin<"__builtin_msa_binsr_b">,
544   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty], []>;
545 def int_mips_binsr_h : GCCBuiltin<"__builtin_msa_binsr_h">,
546   Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty], []>;
547 def int_mips_binsr_w : GCCBuiltin<"__builtin_msa_binsr_w">,
548   Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], []>;
549 def int_mips_binsr_d : GCCBuiltin<"__builtin_msa_binsr_d">,
550   Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], []>;
551
552 def int_mips_binsri_b : GCCBuiltin<"__builtin_msa_binsri_b">,
553   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty], []>;
554 def int_mips_binsri_h : GCCBuiltin<"__builtin_msa_binsri_h">,
555   Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i32_ty], []>;
556 def int_mips_binsri_w : GCCBuiltin<"__builtin_msa_binsri_w">,
557   Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i32_ty], []>;
558 def int_mips_binsri_d : GCCBuiltin<"__builtin_msa_binsri_d">,
559   Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i32_ty], []>;
560
561 def int_mips_bmnzi_b : GCCBuiltin<"__builtin_msa_bmnzi_b">,
562   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty], []>;
563
564 def int_mips_bmzi_b : GCCBuiltin<"__builtin_msa_bmzi_b">,
565   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty], []>;
566
567 def int_mips_bneg_b : GCCBuiltin<"__builtin_msa_bneg_b">,
568   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty], []>;
569 def int_mips_bneg_h : GCCBuiltin<"__builtin_msa_bneg_h">,
570   Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty], []>;
571 def int_mips_bneg_w : GCCBuiltin<"__builtin_msa_bneg_w">,
572   Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], []>;
573 def int_mips_bneg_d : GCCBuiltin<"__builtin_msa_bneg_d">,
574   Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], []>;
575
576 def int_mips_bnegi_b : GCCBuiltin<"__builtin_msa_bnegi_b">,
577   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty], []>;
578 def int_mips_bnegi_h : GCCBuiltin<"__builtin_msa_bnegi_h">,
579   Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i32_ty], []>;
580 def int_mips_bnegi_w : GCCBuiltin<"__builtin_msa_bnegi_w">,
581   Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i32_ty], []>;
582 def int_mips_bnegi_d : GCCBuiltin<"__builtin_msa_bnegi_d">,
583   Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i32_ty], []>;
584
585 def int_mips_bseli_b : GCCBuiltin<"__builtin_msa_bseli_b">,
586   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty], []>;
587 def int_mips_bseli_h : GCCBuiltin<"__builtin_msa_bseli_h">,
588   Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i32_ty], []>;
589 def int_mips_bseli_w : GCCBuiltin<"__builtin_msa_bseli_w">,
590   Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i32_ty], []>;
591 def int_mips_bseli_d : GCCBuiltin<"__builtin_msa_bseli_d">,
592   Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i32_ty], []>;
593
594 def int_mips_bset_b : GCCBuiltin<"__builtin_msa_bset_b">,
595   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty], []>;
596 def int_mips_bset_h : GCCBuiltin<"__builtin_msa_bset_h">,
597   Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty], []>;
598 def int_mips_bset_w : GCCBuiltin<"__builtin_msa_bset_w">,
599   Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], []>;
600 def int_mips_bset_d : GCCBuiltin<"__builtin_msa_bset_d">,
601   Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], []>;
602
603 def int_mips_bseti_b : GCCBuiltin<"__builtin_msa_bseti_b">,
604   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty], []>;
605 def int_mips_bseti_h : GCCBuiltin<"__builtin_msa_bseti_h">,
606   Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i32_ty], []>;
607 def int_mips_bseti_w : GCCBuiltin<"__builtin_msa_bseti_w">,
608   Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i32_ty], []>;
609 def int_mips_bseti_d : GCCBuiltin<"__builtin_msa_bseti_d">,
610   Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i32_ty], []>;
611
612 def int_mips_ceq_b : GCCBuiltin<"__builtin_msa_ceq_b">,
613   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty], []>;
614 def int_mips_ceq_h : GCCBuiltin<"__builtin_msa_ceq_h">,
615   Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty], []>;
616 def int_mips_ceq_w : GCCBuiltin<"__builtin_msa_ceq_w">,
617   Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], []>;
618 def int_mips_ceq_d : GCCBuiltin<"__builtin_msa_ceq_d">,
619   Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], []>;
620
621 def int_mips_ceqi_b : GCCBuiltin<"__builtin_msa_ceqi_b">,
622   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty], []>;
623 def int_mips_ceqi_h : GCCBuiltin<"__builtin_msa_ceqi_h">,
624   Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i32_ty], []>;
625 def int_mips_ceqi_w : GCCBuiltin<"__builtin_msa_ceqi_w">,
626   Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i32_ty], []>;
627 def int_mips_ceqi_d : GCCBuiltin<"__builtin_msa_ceqi_d">,
628   Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i32_ty], []>;
629
630 def int_mips_cle_s_b : GCCBuiltin<"__builtin_msa_cle_s_b">,
631   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty], []>;
632 def int_mips_cle_s_h : GCCBuiltin<"__builtin_msa_cle_s_h">,
633   Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty], []>;
634 def int_mips_cle_s_w : GCCBuiltin<"__builtin_msa_cle_s_w">,
635   Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], []>;
636 def int_mips_cle_s_d : GCCBuiltin<"__builtin_msa_cle_s_d">,
637   Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], []>;
638
639 def int_mips_cle_u_b : GCCBuiltin<"__builtin_msa_cle_u_b">,
640   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty], []>;
641 def int_mips_cle_u_h : GCCBuiltin<"__builtin_msa_cle_u_h">,
642   Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty], []>;
643 def int_mips_cle_u_w : GCCBuiltin<"__builtin_msa_cle_u_w">,
644   Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], []>;
645 def int_mips_cle_u_d : GCCBuiltin<"__builtin_msa_cle_u_d">,
646   Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], []>;
647
648 def int_mips_clei_s_b : GCCBuiltin<"__builtin_msa_clei_s_b">,
649   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty], []>;
650 def int_mips_clei_s_h : GCCBuiltin<"__builtin_msa_clei_s_h">,
651   Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i32_ty], []>;
652 def int_mips_clei_s_w : GCCBuiltin<"__builtin_msa_clei_s_w">,
653   Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i32_ty], []>;
654 def int_mips_clei_s_d : GCCBuiltin<"__builtin_msa_clei_s_d">,
655   Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i32_ty], []>;
656
657 def int_mips_clei_u_b : GCCBuiltin<"__builtin_msa_clei_u_b">,
658   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty], []>;
659 def int_mips_clei_u_h : GCCBuiltin<"__builtin_msa_clei_u_h">,
660   Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i32_ty], []>;
661 def int_mips_clei_u_w : GCCBuiltin<"__builtin_msa_clei_u_w">,
662   Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i32_ty], []>;
663 def int_mips_clei_u_d : GCCBuiltin<"__builtin_msa_clei_u_d">,
664   Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i32_ty], []>;
665
666 def int_mips_clt_s_b : GCCBuiltin<"__builtin_msa_clt_s_b">,
667   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty], []>;
668 def int_mips_clt_s_h : GCCBuiltin<"__builtin_msa_clt_s_h">,
669   Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty], []>;
670 def int_mips_clt_s_w : GCCBuiltin<"__builtin_msa_clt_s_w">,
671   Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], []>;
672 def int_mips_clt_s_d : GCCBuiltin<"__builtin_msa_clt_s_d">,
673   Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], []>;
674
675 def int_mips_clt_u_b : GCCBuiltin<"__builtin_msa_clt_u_b">,
676   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty], []>;
677 def int_mips_clt_u_h : GCCBuiltin<"__builtin_msa_clt_u_h">,
678   Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty], []>;
679 def int_mips_clt_u_w : GCCBuiltin<"__builtin_msa_clt_u_w">,
680   Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], []>;
681 def int_mips_clt_u_d : GCCBuiltin<"__builtin_msa_clt_u_d">,
682   Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], []>;
683
684 def int_mips_clti_s_b : GCCBuiltin<"__builtin_msa_clti_s_b">,
685   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty], []>;
686 def int_mips_clti_s_h : GCCBuiltin<"__builtin_msa_clti_s_h">,
687   Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i32_ty], []>;
688 def int_mips_clti_s_w : GCCBuiltin<"__builtin_msa_clti_s_w">,
689   Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i32_ty], []>;
690 def int_mips_clti_s_d : GCCBuiltin<"__builtin_msa_clti_s_d">,
691   Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i32_ty], []>;
692
693 def int_mips_clti_u_b : GCCBuiltin<"__builtin_msa_clti_u_b">,
694   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty], []>;
695 def int_mips_clti_u_h : GCCBuiltin<"__builtin_msa_clti_u_h">,
696   Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i32_ty], []>;
697 def int_mips_clti_u_w : GCCBuiltin<"__builtin_msa_clti_u_w">,
698   Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i32_ty], []>;
699 def int_mips_clti_u_d : GCCBuiltin<"__builtin_msa_clti_u_d">,
700   Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i32_ty], []>;
701
702 def int_mips_copy_s_b : GCCBuiltin<"__builtin_msa_copy_s_b">,
703   Intrinsic<[llvm_i32_ty], [llvm_v16i8_ty, llvm_i32_ty], []>;
704 def int_mips_copy_s_h : GCCBuiltin<"__builtin_msa_copy_s_h">,
705   Intrinsic<[llvm_i32_ty], [llvm_v8i16_ty, llvm_i32_ty], []>;
706 def int_mips_copy_s_w : GCCBuiltin<"__builtin_msa_copy_s_w">,
707   Intrinsic<[llvm_i32_ty], [llvm_v4i32_ty, llvm_i32_ty], []>;
708
709 def int_mips_copy_u_b : GCCBuiltin<"__builtin_msa_copy_u_b">,
710   Intrinsic<[llvm_i32_ty], [llvm_v16i8_ty, llvm_i32_ty], []>;
711 def int_mips_copy_u_h : GCCBuiltin<"__builtin_msa_copy_u_h">,
712   Intrinsic<[llvm_i32_ty], [llvm_v8i16_ty, llvm_i32_ty], []>;
713 def int_mips_copy_u_w : GCCBuiltin<"__builtin_msa_copy_u_w">,
714   Intrinsic<[llvm_i32_ty], [llvm_v4i32_ty, llvm_i32_ty], []>;
715
716 def int_mips_div_s_b : GCCBuiltin<"__builtin_msa_div_s_b">,
717   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty], []>;
718 def int_mips_div_s_h : GCCBuiltin<"__builtin_msa_div_s_h">,
719   Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty], []>;
720 def int_mips_div_s_w : GCCBuiltin<"__builtin_msa_div_s_w">,
721   Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], []>;
722 def int_mips_div_s_d : GCCBuiltin<"__builtin_msa_div_s_d">,
723   Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], []>;
724
725 def int_mips_div_u_b : GCCBuiltin<"__builtin_msa_div_u_b">,
726   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty], []>;
727 def int_mips_div_u_h : GCCBuiltin<"__builtin_msa_div_u_h">,
728   Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty], []>;
729 def int_mips_div_u_w : GCCBuiltin<"__builtin_msa_div_u_w">,
730   Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], []>;
731 def int_mips_div_u_d : GCCBuiltin<"__builtin_msa_div_u_d">,
732   Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], []>;
733
734 def int_mips_dotp_s_b : GCCBuiltin<"__builtin_msa_dotp_s_b">,
735   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty], []>;
736 def int_mips_dotp_s_h : GCCBuiltin<"__builtin_msa_dotp_s_h">,
737   Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty], []>;
738 def int_mips_dotp_s_w : GCCBuiltin<"__builtin_msa_dotp_s_w">,
739   Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], []>;
740 def int_mips_dotp_s_d : GCCBuiltin<"__builtin_msa_dotp_s_d">,
741   Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], []>;
742
743 def int_mips_dotp_u_b : GCCBuiltin<"__builtin_msa_dotp_u_b">,
744   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty], []>;
745 def int_mips_dotp_u_h : GCCBuiltin<"__builtin_msa_dotp_u_h">,
746   Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty], []>;
747 def int_mips_dotp_u_w : GCCBuiltin<"__builtin_msa_dotp_u_w">,
748   Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], []>;
749 def int_mips_dotp_u_d : GCCBuiltin<"__builtin_msa_dotp_u_d">,
750   Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], []>;
751
752 def int_mips_dpadd_s_h : GCCBuiltin<"__builtin_msa_dpadd_s_h">,
753   Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v16i8_ty, llvm_v16i8_ty], []>;
754 def int_mips_dpadd_s_w : GCCBuiltin<"__builtin_msa_dpadd_s_w">,
755   Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v8i16_ty, llvm_v8i16_ty], []>;
756 def int_mips_dpadd_s_d : GCCBuiltin<"__builtin_msa_dpadd_s_d">,
757   Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v4i32_ty, llvm_v4i32_ty], []>;
758
759 def int_mips_dpadd_u_h : GCCBuiltin<"__builtin_msa_dpadd_u_h">,
760   Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v16i8_ty, llvm_v16i8_ty], []>;
761 def int_mips_dpadd_u_w : GCCBuiltin<"__builtin_msa_dpadd_u_w">,
762   Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v8i16_ty, llvm_v8i16_ty], []>;
763 def int_mips_dpadd_u_d : GCCBuiltin<"__builtin_msa_dpadd_u_d">,
764   Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v4i32_ty, llvm_v4i32_ty], []>;
765
766 def int_mips_dpsub_s_h : GCCBuiltin<"__builtin_msa_dpsub_s_h">,
767   Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v16i8_ty, llvm_v16i8_ty], []>;
768 def int_mips_dpsub_s_w : GCCBuiltin<"__builtin_msa_dpsub_s_w">,
769   Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v8i16_ty, llvm_v8i16_ty], []>;
770 def int_mips_dpsub_s_d : GCCBuiltin<"__builtin_msa_dpsub_s_d">,
771   Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v4i32_ty, llvm_v4i32_ty], []>;
772
773 def int_mips_dpsub_u_h : GCCBuiltin<"__builtin_msa_dpsub_u_h">,
774   Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v16i8_ty, llvm_v16i8_ty], []>;
775 def int_mips_dpsub_u_w : GCCBuiltin<"__builtin_msa_dpsub_u_w">,
776   Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v8i16_ty, llvm_v8i16_ty], []>;
777 def int_mips_dpsub_u_d : GCCBuiltin<"__builtin_msa_dpsub_u_d">,
778   Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v4i32_ty, llvm_v4i32_ty], []>;
779
780 def int_mips_fadd_w : GCCBuiltin<"__builtin_msa_fadd_w">,
781   Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty], []>;
782 def int_mips_fadd_d : GCCBuiltin<"__builtin_msa_fadd_d">,
783   Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty], []>;
784
785 def int_mips_fceq_w : GCCBuiltin<"__builtin_msa_fceq_w">,
786   Intrinsic<[llvm_v4i32_ty], [llvm_v4f32_ty, llvm_v4f32_ty], []>;
787 def int_mips_fceq_d : GCCBuiltin<"__builtin_msa_fceq_d">,
788   Intrinsic<[llvm_v2i64_ty], [llvm_v2f64_ty, llvm_v2f64_ty], []>;
789
790 def int_mips_fcle_w : GCCBuiltin<"__builtin_msa_fcle_w">,
791   Intrinsic<[llvm_v4i32_ty], [llvm_v4f32_ty, llvm_v4f32_ty], []>;
792 def int_mips_fcle_d : GCCBuiltin<"__builtin_msa_fcle_d">,
793   Intrinsic<[llvm_v2i64_ty], [llvm_v2f64_ty, llvm_v2f64_ty], []>;
794
795 def int_mips_fclt_w : GCCBuiltin<"__builtin_msa_fclt_w">,
796   Intrinsic<[llvm_v4i32_ty], [llvm_v4f32_ty, llvm_v4f32_ty], []>;
797 def int_mips_fclt_d : GCCBuiltin<"__builtin_msa_fclt_d">,
798   Intrinsic<[llvm_v2i64_ty], [llvm_v2f64_ty, llvm_v2f64_ty], []>;
799
800 def int_mips_fclass_w : GCCBuiltin<"__builtin_msa_fclass_w">,
801   Intrinsic<[llvm_v4i32_ty], [llvm_v4f32_ty], []>;
802 def int_mips_fclass_d : GCCBuiltin<"__builtin_msa_fclass_d">,
803   Intrinsic<[llvm_v2i64_ty], [llvm_v2f64_ty], []>;
804
805 def int_mips_fcge_w : GCCBuiltin<"__builtin_msa_fcge_w">,
806   Intrinsic<[llvm_v4i32_ty], [llvm_v4f32_ty, llvm_v4f32_ty], []>;
807 def int_mips_fcge_d : GCCBuiltin<"__builtin_msa_fcge_d">,
808   Intrinsic<[llvm_v2i64_ty], [llvm_v2f64_ty, llvm_v2f64_ty], []>;
809
810 def int_mips_fcgt_w : GCCBuiltin<"__builtin_msa_fcgt_w">,
811   Intrinsic<[llvm_v4i32_ty], [llvm_v4f32_ty, llvm_v4f32_ty], []>;
812 def int_mips_fcgt_d : GCCBuiltin<"__builtin_msa_fcgt_d">,
813   Intrinsic<[llvm_v2i64_ty], [llvm_v2f64_ty, llvm_v2f64_ty], []>;
814
815 def int_mips_fcne_w : GCCBuiltin<"__builtin_msa_fcne_w">,
816   Intrinsic<[llvm_v4i32_ty], [llvm_v4f32_ty, llvm_v4f32_ty], []>;
817 def int_mips_fcne_d : GCCBuiltin<"__builtin_msa_fcne_d">,
818   Intrinsic<[llvm_v2i64_ty], [llvm_v2f64_ty, llvm_v2f64_ty], []>;
819
820 def int_mips_fcun_w : GCCBuiltin<"__builtin_msa_fcun_w">,
821   Intrinsic<[llvm_v4i32_ty], [llvm_v4f32_ty, llvm_v4f32_ty], []>;
822 def int_mips_fcun_d : GCCBuiltin<"__builtin_msa_fcun_d">,
823   Intrinsic<[llvm_v2i64_ty], [llvm_v2f64_ty, llvm_v2f64_ty], []>;
824
825 def int_mips_fdiv_w : GCCBuiltin<"__builtin_msa_fdiv_w">,
826   Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty], []>;
827 def int_mips_fdiv_d : GCCBuiltin<"__builtin_msa_fdiv_d">,
828   Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty], []>;
829
830 def int_mips_fexdo_h : GCCBuiltin<"__builtin_msa_fexdo_h">,
831   Intrinsic<[llvm_v8f16_ty], [llvm_v4f32_ty, llvm_v4f32_ty], []>;
832 def int_mips_fexdo_w : GCCBuiltin<"__builtin_msa_fexdo_w">,
833   Intrinsic<[llvm_v4f32_ty], [llvm_v2f64_ty, llvm_v2f64_ty], []>;
834
835 def int_mips_fexp2_w : GCCBuiltin<"__builtin_msa_fexp2_w">,
836   Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4i32_ty], []>;
837 def int_mips_fexp2_d : GCCBuiltin<"__builtin_msa_fexp2_d">,
838   Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2i64_ty], []>;
839
840 def int_mips_fexupl_w : GCCBuiltin<"__builtin_msa_fexupl_w">,
841   Intrinsic<[llvm_v4f32_ty], [llvm_v8f16_ty], []>;
842 def int_mips_fexupl_d : GCCBuiltin<"__builtin_msa_fexupl_d">,
843   Intrinsic<[llvm_v2f64_ty], [llvm_v4f32_ty], []>;
844
845 def int_mips_fexupr_w : GCCBuiltin<"__builtin_msa_fexupr_w">,
846   Intrinsic<[llvm_v4f32_ty], [llvm_v8f16_ty], []>;
847 def int_mips_fexupr_d : GCCBuiltin<"__builtin_msa_fexupr_d">,
848   Intrinsic<[llvm_v2f64_ty], [llvm_v4f32_ty], []>;
849
850 def int_mips_ffint_s_w : GCCBuiltin<"__builtin_msa_ffint_s_w">,
851   Intrinsic<[llvm_v4f32_ty], [llvm_v4i32_ty], []>;
852 def int_mips_ffint_s_d : GCCBuiltin<"__builtin_msa_ffint_s_d">,
853   Intrinsic<[llvm_v2f64_ty], [llvm_v2i64_ty], []>;
854
855 def int_mips_ffint_u_w : GCCBuiltin<"__builtin_msa_ffint_u_w">,
856   Intrinsic<[llvm_v4f32_ty], [llvm_v4i32_ty], []>;
857 def int_mips_ffint_u_d : GCCBuiltin<"__builtin_msa_ffint_u_d">,
858   Intrinsic<[llvm_v2f64_ty], [llvm_v2i64_ty], []>;
859
860 def int_mips_ffql_w : GCCBuiltin<"__builtin_msa_ffql_w">,
861   Intrinsic<[llvm_v4f32_ty], [llvm_v8i16_ty], []>;
862 def int_mips_ffql_d : GCCBuiltin<"__builtin_msa_ffql_d">,
863   Intrinsic<[llvm_v2f64_ty], [llvm_v4i32_ty], []>;
864
865 def int_mips_ffqr_w : GCCBuiltin<"__builtin_msa_ffqr_w">,
866   Intrinsic<[llvm_v4f32_ty], [llvm_v8i16_ty], []>;
867 def int_mips_ffqr_d : GCCBuiltin<"__builtin_msa_ffqr_d">,
868   Intrinsic<[llvm_v2f64_ty], [llvm_v4i32_ty], []>;
869
870 def int_mips_fill_b : GCCBuiltin<"__builtin_msa_fill_b">,
871   Intrinsic<[llvm_v16i8_ty], [llvm_i32_ty], []>;
872 def int_mips_fill_h : GCCBuiltin<"__builtin_msa_fill_h">,
873   Intrinsic<[llvm_v8i16_ty], [llvm_i32_ty], []>;
874 def int_mips_fill_w : GCCBuiltin<"__builtin_msa_fill_w">,
875   Intrinsic<[llvm_v4i32_ty], [llvm_i32_ty], []>;
876
877 def int_mips_flog2_w : GCCBuiltin<"__builtin_msa_flog2_w">,
878   Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty], []>;
879 def int_mips_flog2_d : GCCBuiltin<"__builtin_msa_flog2_d">,
880   Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty], []>;
881
882 def int_mips_fmadd_w : GCCBuiltin<"__builtin_msa_fmadd_w">,
883   Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty], []>;
884 def int_mips_fmadd_d : GCCBuiltin<"__builtin_msa_fmadd_d">,
885   Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty], []>;
886
887 def int_mips_fmax_w : GCCBuiltin<"__builtin_msa_fmax_w">,
888   Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty], []>;
889 def int_mips_fmax_d : GCCBuiltin<"__builtin_msa_fmax_d">,
890   Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty], []>;
891
892 def int_mips_fmax_a_w : GCCBuiltin<"__builtin_msa_fmax_a_w">,
893   Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty], []>;
894 def int_mips_fmax_a_d : GCCBuiltin<"__builtin_msa_fmax_a_d">,
895   Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty], []>;
896
897 def int_mips_fmin_w : GCCBuiltin<"__builtin_msa_fmin_w">,
898   Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty], []>;
899 def int_mips_fmin_d : GCCBuiltin<"__builtin_msa_fmin_d">,
900   Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty], []>;
901
902 def int_mips_fmin_a_w : GCCBuiltin<"__builtin_msa_fmin_a_w">,
903   Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty], []>;
904 def int_mips_fmin_a_d : GCCBuiltin<"__builtin_msa_fmin_a_d">,
905   Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty], []>;
906
907 def int_mips_fmsub_w : GCCBuiltin<"__builtin_msa_fmsub_w">,
908   Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty], []>;
909 def int_mips_fmsub_d : GCCBuiltin<"__builtin_msa_fmsub_d">,
910   Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty], []>;
911
912 def int_mips_fmul_w : GCCBuiltin<"__builtin_msa_fmul_w">,
913   Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty], []>;
914 def int_mips_fmul_d : GCCBuiltin<"__builtin_msa_fmul_d">,
915   Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty], []>;
916
917 def int_mips_frint_w : GCCBuiltin<"__builtin_msa_frint_w">,
918   Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty], []>;
919 def int_mips_frint_d : GCCBuiltin<"__builtin_msa_frint_d">,
920   Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty], []>;
921
922 def int_mips_frcp_w : GCCBuiltin<"__builtin_msa_frcp_w">,
923   Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty], []>;
924 def int_mips_frcp_d : GCCBuiltin<"__builtin_msa_frcp_d">,
925   Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty], []>;
926
927 def int_mips_frsqrt_w : GCCBuiltin<"__builtin_msa_frsqrt_w">,
928   Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty], []>;
929 def int_mips_frsqrt_d : GCCBuiltin<"__builtin_msa_frsqrt_d">,
930   Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty], []>;
931
932 def int_mips_fseq_w : GCCBuiltin<"__builtin_msa_fseq_w">,
933   Intrinsic<[llvm_v4i32_ty], [llvm_v4f32_ty, llvm_v4f32_ty], []>;
934 def int_mips_fseq_d : GCCBuiltin<"__builtin_msa_fseq_d">,
935   Intrinsic<[llvm_v2i64_ty], [llvm_v2f64_ty, llvm_v2f64_ty], []>;
936
937 def int_mips_fsle_w : GCCBuiltin<"__builtin_msa_fsle_w">,
938   Intrinsic<[llvm_v4i32_ty], [llvm_v4f32_ty, llvm_v4f32_ty], []>;
939 def int_mips_fsle_d : GCCBuiltin<"__builtin_msa_fsle_d">,
940   Intrinsic<[llvm_v2i64_ty], [llvm_v2f64_ty, llvm_v2f64_ty], []>;
941
942 def int_mips_fslt_w : GCCBuiltin<"__builtin_msa_fslt_w">,
943   Intrinsic<[llvm_v4i32_ty], [llvm_v4f32_ty, llvm_v4f32_ty], []>;
944 def int_mips_fslt_d : GCCBuiltin<"__builtin_msa_fslt_d">,
945   Intrinsic<[llvm_v2i64_ty], [llvm_v2f64_ty, llvm_v2f64_ty], []>;
946
947 def int_mips_fsge_w : GCCBuiltin<"__builtin_msa_fsge_w">,
948   Intrinsic<[llvm_v4i32_ty], [llvm_v4f32_ty, llvm_v4f32_ty], []>;
949 def int_mips_fsge_d : GCCBuiltin<"__builtin_msa_fsge_d">,
950   Intrinsic<[llvm_v2i64_ty], [llvm_v2f64_ty, llvm_v2f64_ty], []>;
951
952 def int_mips_fsgt_w : GCCBuiltin<"__builtin_msa_fsgt_w">,
953   Intrinsic<[llvm_v4i32_ty], [llvm_v4f32_ty, llvm_v4f32_ty], []>;
954 def int_mips_fsgt_d : GCCBuiltin<"__builtin_msa_fsgt_d">,
955   Intrinsic<[llvm_v2i64_ty], [llvm_v2f64_ty, llvm_v2f64_ty], []>;
956
957 def int_mips_fsne_w : GCCBuiltin<"__builtin_msa_fsne_w">,
958   Intrinsic<[llvm_v4i32_ty], [llvm_v4f32_ty, llvm_v4f32_ty], []>;
959 def int_mips_fsne_d : GCCBuiltin<"__builtin_msa_fsne_d">,
960   Intrinsic<[llvm_v2i64_ty], [llvm_v2f64_ty, llvm_v2f64_ty], []>;
961
962 def int_mips_fsqrt_w : GCCBuiltin<"__builtin_msa_fsqrt_w">,
963   Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty], []>;
964 def int_mips_fsqrt_d : GCCBuiltin<"__builtin_msa_fsqrt_d">,
965   Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty], []>;
966
967 def int_mips_fsub_w : GCCBuiltin<"__builtin_msa_fsub_w">,
968   Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty], []>;
969 def int_mips_fsub_d : GCCBuiltin<"__builtin_msa_fsub_d">,
970   Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty], []>;
971
972 def int_mips_ftint_s_w : GCCBuiltin<"__builtin_msa_ftint_s_w">,
973   Intrinsic<[llvm_v4i32_ty], [llvm_v4f32_ty], []>;
974 def int_mips_ftint_s_d : GCCBuiltin<"__builtin_msa_ftint_s_d">,
975   Intrinsic<[llvm_v2i64_ty], [llvm_v2f64_ty], []>;
976
977 def int_mips_ftint_u_w : GCCBuiltin<"__builtin_msa_ftint_u_w">,
978   Intrinsic<[llvm_v4i32_ty], [llvm_v4f32_ty], []>;
979 def int_mips_ftint_u_d : GCCBuiltin<"__builtin_msa_ftint_u_d">,
980   Intrinsic<[llvm_v2i64_ty], [llvm_v2f64_ty], []>;
981
982 def int_mips_ftq_h : GCCBuiltin<"__builtin_msa_ftq_h">,
983   Intrinsic<[llvm_v8i16_ty], [llvm_v4f32_ty, llvm_v4f32_ty], []>;
984 def int_mips_ftq_w : GCCBuiltin<"__builtin_msa_ftq_w">,
985   Intrinsic<[llvm_v4i32_ty], [llvm_v2f64_ty, llvm_v2f64_ty], []>;
986
987 def int_mips_ilvev_b : GCCBuiltin<"__builtin_msa_ilvev_b">,
988   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty], []>;
989 def int_mips_ilvev_h : GCCBuiltin<"__builtin_msa_ilvev_h">,
990   Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty], []>;
991 def int_mips_ilvev_w : GCCBuiltin<"__builtin_msa_ilvev_w">,
992   Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], []>;
993 def int_mips_ilvev_d : GCCBuiltin<"__builtin_msa_ilvev_d">,
994   Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], []>;
995
996 def int_mips_ilvl_b : GCCBuiltin<"__builtin_msa_ilvl_b">,
997   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty], []>;
998 def int_mips_ilvl_h : GCCBuiltin<"__builtin_msa_ilvl_h">,
999   Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty], []>;
1000 def int_mips_ilvl_w : GCCBuiltin<"__builtin_msa_ilvl_w">,
1001   Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], []>;
1002 def int_mips_ilvl_d : GCCBuiltin<"__builtin_msa_ilvl_d">,
1003   Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], []>;
1004
1005 def int_mips_ilvod_b : GCCBuiltin<"__builtin_msa_ilvod_b">,
1006   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty], []>;
1007 def int_mips_ilvod_h : GCCBuiltin<"__builtin_msa_ilvod_h">,
1008   Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty], []>;
1009 def int_mips_ilvod_w : GCCBuiltin<"__builtin_msa_ilvod_w">,
1010   Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], []>;
1011 def int_mips_ilvod_d : GCCBuiltin<"__builtin_msa_ilvod_d">,
1012   Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], []>;
1013
1014 def int_mips_ilvr_b : GCCBuiltin<"__builtin_msa_ilvr_b">,
1015   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty], []>;
1016 def int_mips_ilvr_h : GCCBuiltin<"__builtin_msa_ilvr_h">,
1017   Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty], []>;
1018 def int_mips_ilvr_w : GCCBuiltin<"__builtin_msa_ilvr_w">,
1019   Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], []>;
1020 def int_mips_ilvr_d : GCCBuiltin<"__builtin_msa_ilvr_d">,
1021   Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], []>;
1022
1023 def int_mips_insert_b : GCCBuiltin<"__builtin_msa_insert_b">,
1024   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty, llvm_i32_ty], []>;
1025 def int_mips_insert_h : GCCBuiltin<"__builtin_msa_insert_h">,
1026   Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i32_ty, llvm_i32_ty], []>;
1027 def int_mips_insert_w : GCCBuiltin<"__builtin_msa_insert_w">,
1028   Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i32_ty, llvm_i32_ty], []>;
1029
1030 def int_mips_ldi_b : GCCBuiltin<"__builtin_msa_ldi_b">,
1031   Intrinsic<[llvm_v16i8_ty], [llvm_i32_ty], []>;
1032 def int_mips_ldi_h : GCCBuiltin<"__builtin_msa_ldi_h">,
1033   Intrinsic<[llvm_v8i16_ty], [llvm_i32_ty], []>;
1034 def int_mips_ldi_w : GCCBuiltin<"__builtin_msa_ldi_w">,
1035   Intrinsic<[llvm_v4i32_ty], [llvm_i32_ty], []>;
1036 def int_mips_ldi_d : GCCBuiltin<"__builtin_msa_ldi_d">,
1037   Intrinsic<[llvm_v2i64_ty], [llvm_i32_ty], []>;
1038
1039 }