1//===- IntrinsicsPowerPC.td - Defines PowerPC intrinsics ---*- tablegen -*-===// 2// 3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4// See https://llvm.org/LICENSE.txt for license information. 5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6// 7//===----------------------------------------------------------------------===// 8// 9// This file defines all of the PowerPC-specific intrinsics. 10// 11//===----------------------------------------------------------------------===// 12 13//===----------------------------------------------------------------------===// 14// Definitions for all PowerPC intrinsics. 15// 16 17// Non-altivec intrinsics. 18let TargetPrefix = "ppc" in { // All intrinsics start with "llvm.ppc.". 19 // dcba/dcbf/dcbi/dcbst/dcbt/dcbz/dcbzl(PPC970) instructions. 20 def int_ppc_dcba : Intrinsic<[], [llvm_ptr_ty], []>; 21 def int_ppc_dcbf : GCCBuiltin<"__builtin_dcbf">, 22 Intrinsic<[], [llvm_ptr_ty], []>; 23 def int_ppc_dcbfl : Intrinsic<[], [llvm_ptr_ty], []>; 24 def int_ppc_dcbflp: Intrinsic<[], [llvm_ptr_ty], []>; 25 def int_ppc_dcbi : Intrinsic<[], [llvm_ptr_ty], []>; 26 def int_ppc_dcbst : Intrinsic<[], [llvm_ptr_ty], []>; 27 def int_ppc_dcbt : Intrinsic<[], [llvm_ptr_ty], 28 [IntrArgMemOnly, NoCapture<ArgIndex<0>>]>; 29 def int_ppc_dcbtst: Intrinsic<[], [llvm_ptr_ty], 30 [IntrArgMemOnly, NoCapture<ArgIndex<0>>]>; 31 def int_ppc_dcbt_with_hint: Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty], 32 [IntrArgMemOnly, NoCapture<ArgIndex<0>>, ImmArg<ArgIndex<1>>]>; 33 def int_ppc_dcbtst_with_hint: Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty], 34 [IntrArgMemOnly, NoCapture<ArgIndex<0>>, ImmArg<ArgIndex<1>>]>; 35 def int_ppc_dcbz : Intrinsic<[], [llvm_ptr_ty], []>; 36 def int_ppc_dcbzl : Intrinsic<[], [llvm_ptr_ty], []>; 37 38 // Population Count in each Byte. 39 def int_ppc_popcntb : Intrinsic<[llvm_i64_ty], [llvm_i64_ty], [IntrNoMem]>; 40 41 // sync instruction (i.e. sync 0, a.k.a hwsync) 42 def int_ppc_sync : Intrinsic<[], [], []>; 43 // isync instruction 44 def int_ppc_isync : Intrinsic<[], [], []>; 45 // lwsync is sync 1 46 def int_ppc_lwsync : Intrinsic<[], [], []>; 47 // eieio instruction 48 def int_ppc_eieio : Intrinsic<[],[],[]>; 49 50 // Intrinsics for [double]word extended forms of divide instructions 51 def int_ppc_divwe : GCCBuiltin<"__builtin_divwe">, 52 Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty], 53 [IntrNoMem]>; 54 def int_ppc_divweu : GCCBuiltin<"__builtin_divweu">, 55 Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty], 56 [IntrNoMem]>; 57 def int_ppc_divde : GCCBuiltin<"__builtin_divde">, 58 Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], 59 [IntrNoMem]>; 60 def int_ppc_divdeu : GCCBuiltin<"__builtin_divdeu">, 61 Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], 62 [IntrNoMem]>; 63 64 // Bit permute doubleword 65 def int_ppc_bpermd : GCCBuiltin<"__builtin_bpermd">, 66 Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], 67 [IntrNoMem]>; 68 69 // Parallel Bits Deposit/Extract Doubleword Builtins. 70 def int_ppc_pdepd 71 : GCCBuiltin<"__builtin_pdepd">, 72 Intrinsic <[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], [IntrNoMem]>; 73 def int_ppc_pextd 74 : GCCBuiltin<"__builtin_pextd">, 75 Intrinsic <[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], [IntrNoMem]>; 76 77 // Centrifuge Doubleword Builtin. 78 def int_ppc_cfuged 79 : GCCBuiltin<"__builtin_cfuged">, 80 Intrinsic <[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], [IntrNoMem]>; 81 82 // Count Leading / Trailing Zeroes under bit Mask Builtins. 83 def int_ppc_cntlzdm 84 : GCCBuiltin<"__builtin_cntlzdm">, 85 Intrinsic <[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], [IntrNoMem]>; 86 def int_ppc_cnttzdm 87 : GCCBuiltin<"__builtin_cnttzdm">, 88 Intrinsic <[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], [IntrNoMem]>; 89 90 def int_ppc_truncf128_round_to_odd 91 : GCCBuiltin<"__builtin_truncf128_round_to_odd">, 92 Intrinsic <[llvm_double_ty], [llvm_f128_ty], [IntrNoMem]>; 93 def int_ppc_sqrtf128_round_to_odd 94 : GCCBuiltin<"__builtin_sqrtf128_round_to_odd">, 95 Intrinsic <[llvm_f128_ty], [llvm_f128_ty], [IntrNoMem]>; 96 def int_ppc_addf128_round_to_odd 97 : GCCBuiltin<"__builtin_addf128_round_to_odd">, 98 Intrinsic <[llvm_f128_ty], [llvm_f128_ty,llvm_f128_ty], [IntrNoMem]>; 99 def int_ppc_subf128_round_to_odd 100 : GCCBuiltin<"__builtin_subf128_round_to_odd">, 101 Intrinsic <[llvm_f128_ty], [llvm_f128_ty,llvm_f128_ty], [IntrNoMem]>; 102 def int_ppc_mulf128_round_to_odd 103 : GCCBuiltin<"__builtin_mulf128_round_to_odd">, 104 Intrinsic <[llvm_f128_ty], [llvm_f128_ty,llvm_f128_ty], [IntrNoMem]>; 105 def int_ppc_divf128_round_to_odd 106 : GCCBuiltin<"__builtin_divf128_round_to_odd">, 107 Intrinsic <[llvm_f128_ty], [llvm_f128_ty,llvm_f128_ty], [IntrNoMem]>; 108 def int_ppc_fmaf128_round_to_odd 109 : GCCBuiltin<"__builtin_fmaf128_round_to_odd">, 110 Intrinsic <[llvm_f128_ty], [llvm_f128_ty,llvm_f128_ty,llvm_f128_ty], [IntrNoMem]>; 111 def int_ppc_scalar_extract_expq 112 : GCCBuiltin<"__builtin_vsx_scalar_extract_expq">, 113 Intrinsic <[llvm_i64_ty], [llvm_f128_ty], [IntrNoMem]>; 114 def int_ppc_scalar_insert_exp_qp 115 : GCCBuiltin<"__builtin_vsx_scalar_insert_exp_qp">, 116 Intrinsic <[llvm_f128_ty], [llvm_f128_ty, llvm_i64_ty], [IntrNoMem]>; 117 118} 119 120 121let TargetPrefix = "ppc" in { // All PPC intrinsics start with "llvm.ppc.". 122 /// PowerPC_Vec_Intrinsic - Base class for all altivec intrinsics. 123 class PowerPC_Vec_Intrinsic<string GCCIntSuffix, list<LLVMType> ret_types, 124 list<LLVMType> param_types, 125 list<IntrinsicProperty> properties> 126 : GCCBuiltin<!strconcat("__builtin_altivec_", GCCIntSuffix)>, 127 Intrinsic<ret_types, param_types, properties>; 128 129 /// PowerPC_VSX_Intrinsic - Base class for all VSX intrinsics. 130 class PowerPC_VSX_Intrinsic<string GCCIntSuffix, list<LLVMType> ret_types, 131 list<LLVMType> param_types, 132 list<IntrinsicProperty> properties> 133 : GCCBuiltin<!strconcat("__builtin_vsx_", GCCIntSuffix)>, 134 Intrinsic<ret_types, param_types, properties>; 135} 136 137//===----------------------------------------------------------------------===// 138// PowerPC Altivec Intrinsic Class Definitions. 139// 140 141/// PowerPC_Vec_FF_Intrinsic - A PowerPC intrinsic that takes one v4f32 142/// vector and returns one. These intrinsics have no side effects. 143class PowerPC_Vec_FF_Intrinsic<string GCCIntSuffix> 144 : PowerPC_Vec_Intrinsic<GCCIntSuffix, 145 [llvm_v4f32_ty], [llvm_v4f32_ty], [IntrNoMem]>; 146 147/// PowerPC_Vec_FFF_Intrinsic - A PowerPC intrinsic that takes two v4f32 148/// vectors and returns one. These intrinsics have no side effects. 149class PowerPC_Vec_FFF_Intrinsic<string GCCIntSuffix> 150 : PowerPC_Vec_Intrinsic<GCCIntSuffix, 151 [llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty], 152 [IntrNoMem]>; 153 154/// PowerPC_Vec_BBB_Intrinsic - A PowerPC intrinsic that takes two v16i8 155/// vectors and returns one. These intrinsics have no side effects. 156class PowerPC_Vec_BBB_Intrinsic<string GCCIntSuffix> 157 : PowerPC_Vec_Intrinsic<GCCIntSuffix, 158 [llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty], 159 [IntrNoMem]>; 160 161/// PowerPC_Vec_HHH_Intrinsic - A PowerPC intrinsic that takes two v8i16 162/// vectors and returns one. These intrinsics have no side effects. 163class PowerPC_Vec_HHH_Intrinsic<string GCCIntSuffix> 164 : PowerPC_Vec_Intrinsic<GCCIntSuffix, 165 [llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty], 166 [IntrNoMem]>; 167 168/// PowerPC_Vec_WWW_Intrinsic - A PowerPC intrinsic that takes two v4i32 169/// vectors and returns one. These intrinsics have no side effects. 170class PowerPC_Vec_WWW_Intrinsic<string GCCIntSuffix> 171 : PowerPC_Vec_Intrinsic<GCCIntSuffix, 172 [llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], 173 [IntrNoMem]>; 174 175/// PowerPC_Vec_DDD_Intrinsic - A PowerPC intrinsic that takes two v2i64 176/// vectors and returns one. These intrinsics have no side effects. 177class PowerPC_Vec_DDD_Intrinsic<string GCCIntSuffix> 178 : PowerPC_Vec_Intrinsic<GCCIntSuffix, 179 [llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], 180 [IntrNoMem]>; 181 182/// PowerPC_Vec_QQQ_Intrinsic - A PowerPC intrinsic that takes two v1i128 183/// vectors and returns one. These intrinsics have no side effects. 184class PowerPC_Vec_QQQ_Intrinsic<string GCCIntSuffix> 185 : PowerPC_Vec_Intrinsic<GCCIntSuffix, 186 [llvm_v1i128_ty], [llvm_v1i128_ty, llvm_v1i128_ty], 187 [IntrNoMem]>; 188 189//===----------------------------------------------------------------------===// 190// PowerPC VSX Intrinsic Class Definitions. 191// 192 193/// PowerPC_VSX_Vec_DDD_Intrinsic - A PowerPC intrinsic that takes two v2f64 194/// vectors and returns one. These intrinsics have no side effects. 195class PowerPC_VSX_Vec_DDD_Intrinsic<string GCCIntSuffix> 196 : PowerPC_VSX_Intrinsic<GCCIntSuffix, 197 [llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty], 198 [IntrNoMem]>; 199 200/// PowerPC_VSX_Vec_FFF_Intrinsic - A PowerPC intrinsic that takes two v4f32 201/// vectors and returns one. These intrinsics have no side effects. 202class PowerPC_VSX_Vec_FFF_Intrinsic<string GCCIntSuffix> 203 : PowerPC_VSX_Intrinsic<GCCIntSuffix, 204 [llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty], 205 [IntrNoMem]>; 206 207/// PowerPC_VSX_Sca_DDD_Intrinsic - A PowerPC intrinsic that takes two f64 208/// scalars and returns one. These intrinsics have no side effects. 209class PowerPC_VSX_Sca_DDD_Intrinsic<string GCCIntSuffix> 210 : PowerPC_VSX_Intrinsic<GCCIntSuffix, 211 [llvm_double_ty], [llvm_double_ty, llvm_double_ty], 212 [IntrNoMem]>; 213 214//===----------------------------------------------------------------------===// 215// PowerPC Altivec Intrinsic Definitions. 216 217let TargetPrefix = "ppc" in { // All intrinsics start with "llvm.ppc.". 218 // Data Stream Control. 219 def int_ppc_altivec_dss : GCCBuiltin<"__builtin_altivec_dss">, 220 Intrinsic<[], [llvm_i32_ty], []>; 221 def int_ppc_altivec_dssall : GCCBuiltin<"__builtin_altivec_dssall">, 222 Intrinsic<[], [], []>; 223 def int_ppc_altivec_dst : GCCBuiltin<"__builtin_altivec_dst">, 224 Intrinsic<[], 225 [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], 226 []>; 227 def int_ppc_altivec_dstt : GCCBuiltin<"__builtin_altivec_dstt">, 228 Intrinsic<[], 229 [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], 230 []>; 231 def int_ppc_altivec_dstst : GCCBuiltin<"__builtin_altivec_dstst">, 232 Intrinsic<[], 233 [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], 234 []>; 235 def int_ppc_altivec_dststt : GCCBuiltin<"__builtin_altivec_dststt">, 236 Intrinsic<[], 237 [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], 238 []>; 239 240 // VSCR access. 241 def int_ppc_altivec_mfvscr : GCCBuiltin<"__builtin_altivec_mfvscr">, 242 Intrinsic<[llvm_v8i16_ty], [], [IntrReadMem]>; 243 def int_ppc_altivec_mtvscr : GCCBuiltin<"__builtin_altivec_mtvscr">, 244 Intrinsic<[], [llvm_v4i32_ty], []>; 245 246 247 // Loads. These don't map directly to GCC builtins because they represent the 248 // source address with a single pointer. 249 def int_ppc_altivec_lvx : 250 Intrinsic<[llvm_v4i32_ty], [llvm_ptr_ty], [IntrReadMem, IntrArgMemOnly]>; 251 def int_ppc_altivec_lvxl : 252 Intrinsic<[llvm_v4i32_ty], [llvm_ptr_ty], [IntrReadMem, IntrArgMemOnly]>; 253 def int_ppc_altivec_lvebx : 254 Intrinsic<[llvm_v16i8_ty], [llvm_ptr_ty], [IntrReadMem, IntrArgMemOnly]>; 255 def int_ppc_altivec_lvehx : 256 Intrinsic<[llvm_v8i16_ty], [llvm_ptr_ty], [IntrReadMem, IntrArgMemOnly]>; 257 def int_ppc_altivec_lvewx : 258 Intrinsic<[llvm_v4i32_ty], [llvm_ptr_ty], [IntrReadMem, IntrArgMemOnly]>; 259 260 // Stores. These don't map directly to GCC builtins because they represent the 261 // source address with a single pointer. 262 def int_ppc_altivec_stvx : 263 Intrinsic<[], [llvm_v4i32_ty, llvm_ptr_ty], 264 [IntrWriteMem, IntrArgMemOnly]>; 265 def int_ppc_altivec_stvxl : 266 Intrinsic<[], [llvm_v4i32_ty, llvm_ptr_ty], 267 [IntrWriteMem, IntrArgMemOnly]>; 268 def int_ppc_altivec_stvebx : 269 Intrinsic<[], [llvm_v16i8_ty, llvm_ptr_ty], 270 [IntrWriteMem, IntrArgMemOnly]>; 271 def int_ppc_altivec_stvehx : 272 Intrinsic<[], [llvm_v8i16_ty, llvm_ptr_ty], 273 [IntrWriteMem, IntrArgMemOnly]>; 274 def int_ppc_altivec_stvewx : 275 Intrinsic<[], [llvm_v4i32_ty, llvm_ptr_ty], 276 [IntrWriteMem, IntrArgMemOnly]>; 277 278 // Comparisons setting a vector. 279 def int_ppc_altivec_vcmpbfp : GCCBuiltin<"__builtin_altivec_vcmpbfp">, 280 Intrinsic<[llvm_v4i32_ty], [llvm_v4f32_ty, llvm_v4f32_ty], 281 [IntrNoMem]>; 282 def int_ppc_altivec_vcmpeqfp : GCCBuiltin<"__builtin_altivec_vcmpeqfp">, 283 Intrinsic<[llvm_v4i32_ty], [llvm_v4f32_ty, llvm_v4f32_ty], 284 [IntrNoMem]>; 285 def int_ppc_altivec_vcmpgefp : GCCBuiltin<"__builtin_altivec_vcmpgefp">, 286 Intrinsic<[llvm_v4i32_ty], [llvm_v4f32_ty, llvm_v4f32_ty], 287 [IntrNoMem]>; 288 def int_ppc_altivec_vcmpgtfp : GCCBuiltin<"__builtin_altivec_vcmpgtfp">, 289 Intrinsic<[llvm_v4i32_ty], [llvm_v4f32_ty, llvm_v4f32_ty], 290 [IntrNoMem]>; 291 292 def int_ppc_altivec_vcmpequd : GCCBuiltin<"__builtin_altivec_vcmpequd">, 293 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], 294 [IntrNoMem]>; 295 def int_ppc_altivec_vcmpgtsd : GCCBuiltin<"__builtin_altivec_vcmpgtsd">, 296 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], 297 [IntrNoMem]>; 298 def int_ppc_altivec_vcmpgtud : GCCBuiltin<"__builtin_altivec_vcmpgtud">, 299 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], 300 [IntrNoMem]>; 301 302 def int_ppc_altivec_vcmpequw : GCCBuiltin<"__builtin_altivec_vcmpequw">, 303 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], 304 [IntrNoMem]>; 305 def int_ppc_altivec_vcmpgtsw : GCCBuiltin<"__builtin_altivec_vcmpgtsw">, 306 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], 307 [IntrNoMem]>; 308 def int_ppc_altivec_vcmpgtuw : GCCBuiltin<"__builtin_altivec_vcmpgtuw">, 309 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], 310 [IntrNoMem]>; 311 def int_ppc_altivec_vcmpnew : GCCBuiltin<"__builtin_altivec_vcmpnew">, 312 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], 313 [IntrNoMem]>; 314 def int_ppc_altivec_vcmpnezw : GCCBuiltin<"__builtin_altivec_vcmpnezw">, 315 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], 316 [IntrNoMem]>; 317 318 def int_ppc_altivec_vcmpequh : GCCBuiltin<"__builtin_altivec_vcmpequh">, 319 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty], 320 [IntrNoMem]>; 321 def int_ppc_altivec_vcmpgtsh : GCCBuiltin<"__builtin_altivec_vcmpgtsh">, 322 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty], 323 [IntrNoMem]>; 324 def int_ppc_altivec_vcmpgtuh : GCCBuiltin<"__builtin_altivec_vcmpgtuh">, 325 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty], 326 [IntrNoMem]>; 327 def int_ppc_altivec_vcmpneh : GCCBuiltin<"__builtin_altivec_vcmpneh">, 328 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty], 329 [IntrNoMem]>; 330 def int_ppc_altivec_vcmpnezh : GCCBuiltin<"__builtin_altivec_vcmpnezh">, 331 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty], 332 [IntrNoMem]>; 333 334 def int_ppc_altivec_vcmpequb : GCCBuiltin<"__builtin_altivec_vcmpequb">, 335 Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty], 336 [IntrNoMem]>; 337 def int_ppc_altivec_vcmpgtsb : GCCBuiltin<"__builtin_altivec_vcmpgtsb">, 338 Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty], 339 [IntrNoMem]>; 340 def int_ppc_altivec_vcmpgtub : GCCBuiltin<"__builtin_altivec_vcmpgtub">, 341 Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty], 342 [IntrNoMem]>; 343 def int_ppc_altivec_vcmpneb : GCCBuiltin<"__builtin_altivec_vcmpneb">, 344 Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty], 345 [IntrNoMem]>; 346 def int_ppc_altivec_vcmpnezb : GCCBuiltin<"__builtin_altivec_vcmpnezb">, 347 Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty], 348 [IntrNoMem]>; 349 350 // Predicate Comparisons. The first operand specifies interpretation of CR6. 351 def int_ppc_altivec_vcmpbfp_p : GCCBuiltin<"__builtin_altivec_vcmpbfp_p">, 352 Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v4f32_ty,llvm_v4f32_ty], 353 [IntrNoMem]>; 354 def int_ppc_altivec_vcmpeqfp_p : GCCBuiltin<"__builtin_altivec_vcmpeqfp_p">, 355 Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v4f32_ty,llvm_v4f32_ty], 356 [IntrNoMem]>; 357 def int_ppc_altivec_vcmpgefp_p : GCCBuiltin<"__builtin_altivec_vcmpgefp_p">, 358 Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v4f32_ty,llvm_v4f32_ty], 359 [IntrNoMem]>; 360 def int_ppc_altivec_vcmpgtfp_p : GCCBuiltin<"__builtin_altivec_vcmpgtfp_p">, 361 Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v4f32_ty,llvm_v4f32_ty], 362 [IntrNoMem]>; 363 364 def int_ppc_altivec_vcmpequd_p : GCCBuiltin<"__builtin_altivec_vcmpequd_p">, 365 Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v2i64_ty,llvm_v2i64_ty], 366 [IntrNoMem]>; 367 def int_ppc_altivec_vcmpgtsd_p : GCCBuiltin<"__builtin_altivec_vcmpgtsd_p">, 368 Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v2i64_ty,llvm_v2i64_ty], 369 [IntrNoMem]>; 370 def int_ppc_altivec_vcmpgtud_p : GCCBuiltin<"__builtin_altivec_vcmpgtud_p">, 371 Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v2i64_ty,llvm_v2i64_ty], 372 [IntrNoMem]>; 373 374 def int_ppc_altivec_vcmpequw_p : GCCBuiltin<"__builtin_altivec_vcmpequw_p">, 375 Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v4i32_ty,llvm_v4i32_ty], 376 [IntrNoMem]>; 377 def int_ppc_altivec_vcmpgtsw_p : GCCBuiltin<"__builtin_altivec_vcmpgtsw_p">, 378 Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v4i32_ty,llvm_v4i32_ty], 379 [IntrNoMem]>; 380 def int_ppc_altivec_vcmpgtuw_p : GCCBuiltin<"__builtin_altivec_vcmpgtuw_p">, 381 Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v4i32_ty,llvm_v4i32_ty], 382 [IntrNoMem]>; 383 def int_ppc_altivec_vcmpnew_p : GCCBuiltin<"__builtin_altivec_vcmpnew_p">, 384 Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v4i32_ty,llvm_v4i32_ty], 385 [IntrNoMem]>; 386 def int_ppc_altivec_vcmpnezw_p : GCCBuiltin<"__builtin_altivec_vcmpnezw_p">, 387 Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v4i32_ty,llvm_v4i32_ty], 388 [IntrNoMem]>; 389 390 def int_ppc_altivec_vcmpequh_p : GCCBuiltin<"__builtin_altivec_vcmpequh_p">, 391 Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v8i16_ty,llvm_v8i16_ty], 392 [IntrNoMem]>; 393 def int_ppc_altivec_vcmpgtsh_p : GCCBuiltin<"__builtin_altivec_vcmpgtsh_p">, 394 Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v8i16_ty,llvm_v8i16_ty], 395 [IntrNoMem]>; 396 def int_ppc_altivec_vcmpgtuh_p : GCCBuiltin<"__builtin_altivec_vcmpgtuh_p">, 397 Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v8i16_ty,llvm_v8i16_ty], 398 [IntrNoMem]>; 399 def int_ppc_altivec_vcmpneh_p : GCCBuiltin<"__builtin_altivec_vcmpneh_p">, 400 Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v8i16_ty,llvm_v8i16_ty], 401 [IntrNoMem]>; 402 def int_ppc_altivec_vcmpnezh_p : GCCBuiltin<"__builtin_altivec_vcmpnezh_p">, 403 Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v8i16_ty,llvm_v8i16_ty], 404 [IntrNoMem]>; 405 406 def int_ppc_altivec_vcmpequb_p : GCCBuiltin<"__builtin_altivec_vcmpequb_p">, 407 Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v16i8_ty,llvm_v16i8_ty], 408 [IntrNoMem]>; 409 def int_ppc_altivec_vcmpgtsb_p : GCCBuiltin<"__builtin_altivec_vcmpgtsb_p">, 410 Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v16i8_ty,llvm_v16i8_ty], 411 [IntrNoMem]>; 412 def int_ppc_altivec_vcmpgtub_p : GCCBuiltin<"__builtin_altivec_vcmpgtub_p">, 413 Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v16i8_ty,llvm_v16i8_ty], 414 [IntrNoMem]>; 415 def int_ppc_altivec_vcmpneb_p : GCCBuiltin<"__builtin_altivec_vcmpneb_p">, 416 Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v16i8_ty,llvm_v16i8_ty], 417 [IntrNoMem]>; 418 def int_ppc_altivec_vcmpnezb_p : GCCBuiltin<"__builtin_altivec_vcmpnezb_p">, 419 Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v16i8_ty,llvm_v16i8_ty], 420 [IntrNoMem]>; 421 def int_ppc_altivec_vclzlsbb : GCCBuiltin<"__builtin_altivec_vclzlsbb">, 422 Intrinsic<[llvm_i32_ty],[llvm_v16i8_ty],[IntrNoMem]>; 423 def int_ppc_altivec_vctzlsbb : GCCBuiltin<"__builtin_altivec_vctzlsbb">, 424 Intrinsic<[llvm_i32_ty],[llvm_v16i8_ty],[IntrNoMem]>; 425 def int_ppc_altivec_vprtybw : GCCBuiltin<"__builtin_altivec_vprtybw">, 426 Intrinsic<[llvm_v4i32_ty],[llvm_v4i32_ty],[IntrNoMem]>; 427 def int_ppc_altivec_vprtybd : GCCBuiltin<"__builtin_altivec_vprtybd">, 428 Intrinsic<[llvm_v2i64_ty],[llvm_v2i64_ty],[IntrNoMem]>; 429 def int_ppc_altivec_vprtybq : GCCBuiltin<"__builtin_altivec_vprtybq">, 430 Intrinsic<[llvm_v1i128_ty],[llvm_v1i128_ty],[IntrNoMem]>; 431 432 // P10 Vector Parallel Bits Deposit/Extract Doubleword Builtins. 433 def int_ppc_altivec_vpdepd : GCCBuiltin<"__builtin_altivec_vpdepd">, 434 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], 435 [IntrNoMem]>; 436 def int_ppc_altivec_vpextd : GCCBuiltin<"__builtin_altivec_vpextd">, 437 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], 438 [IntrNoMem]>; 439 440 // P10 Vector Centrifuge Builtin. 441 def int_ppc_altivec_vcfuged : GCCBuiltin<"__builtin_altivec_vcfuged">, 442 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], 443 [IntrNoMem]>; 444 445 // P10 Vector Gather Every Nth Bit Builtin. 446 def int_ppc_altivec_vgnb : GCCBuiltin<"__builtin_altivec_vgnb">, 447 Intrinsic<[llvm_i64_ty], [llvm_v1i128_ty, llvm_i32_ty], 448 [IntrNoMem, ImmArg<ArgIndex<1>>]>; 449 450 // P10 Vector Clear Bytes 451 def int_ppc_altivec_vclrlb : GCCBuiltin<"__builtin_altivec_vclrlb">, 452 Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty], 453 [IntrNoMem]>; 454 def int_ppc_altivec_vclrrb : GCCBuiltin<"__builtin_altivec_vclrrb">, 455 Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty], 456 [IntrNoMem]>; 457 458 // P10 Vector Shift Double Bit Immediate. 459 def int_ppc_altivec_vsldbi : GCCBuiltin<"__builtin_altivec_vsldbi">, 460 Intrinsic<[llvm_v16i8_ty], 461 [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i32_ty], 462 [IntrNoMem, ImmArg<ArgIndex<2>>]>; 463 def int_ppc_altivec_vsrdbi : GCCBuiltin<"__builtin_altivec_vsrdbi">, 464 Intrinsic<[llvm_v16i8_ty], 465 [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i32_ty], 466 [IntrNoMem, ImmArg<ArgIndex<2>>]>; 467 468 // P10 Vector Insert. 469 def int_ppc_altivec_vinsblx : GCCBuiltin<"__builtin_altivec_vinsblx">, 470 Intrinsic<[llvm_v16i8_ty], 471 [llvm_v16i8_ty, llvm_i64_ty, llvm_i64_ty], 472 [IntrNoMem]>; 473 def int_ppc_altivec_vinsbrx : GCCBuiltin<"__builtin_altivec_vinsbrx">, 474 Intrinsic<[llvm_v16i8_ty], 475 [llvm_v16i8_ty, llvm_i64_ty, llvm_i64_ty], 476 [IntrNoMem]>; 477 def int_ppc_altivec_vinshlx : GCCBuiltin<"__builtin_altivec_vinshlx">, 478 Intrinsic<[llvm_v8i16_ty], 479 [llvm_v8i16_ty, llvm_i64_ty, llvm_i64_ty], 480 [IntrNoMem]>; 481 def int_ppc_altivec_vinshrx : GCCBuiltin<"__builtin_altivec_vinshrx">, 482 Intrinsic<[llvm_v8i16_ty], 483 [llvm_v8i16_ty, llvm_i64_ty, llvm_i64_ty], 484 [IntrNoMem]>; 485 def int_ppc_altivec_vinswlx : GCCBuiltin<"__builtin_altivec_vinswlx">, 486 Intrinsic<[llvm_v4i32_ty], 487 [llvm_v4i32_ty, llvm_i64_ty, llvm_i64_ty], 488 [IntrNoMem]>; 489 def int_ppc_altivec_vinswrx : GCCBuiltin<"__builtin_altivec_vinswrx">, 490 Intrinsic<[llvm_v4i32_ty], 491 [llvm_v4i32_ty, llvm_i64_ty, llvm_i64_ty], 492 [IntrNoMem]>; 493 def int_ppc_altivec_vinsdlx : GCCBuiltin<"__builtin_altivec_vinsdlx">, 494 Intrinsic<[llvm_v2i64_ty], 495 [llvm_v2i64_ty, llvm_i64_ty, llvm_i64_ty], 496 [IntrNoMem]>; 497 def int_ppc_altivec_vinsdrx : GCCBuiltin<"__builtin_altivec_vinsdrx">, 498 Intrinsic<[llvm_v2i64_ty], 499 [llvm_v2i64_ty, llvm_i64_ty, llvm_i64_ty], 500 [IntrNoMem]>; 501 def int_ppc_altivec_vinsbvlx : GCCBuiltin<"__builtin_altivec_vinsbvlx">, 502 Intrinsic<[llvm_v16i8_ty], 503 [llvm_v16i8_ty, llvm_i64_ty, llvm_v16i8_ty], 504 [IntrNoMem]>; 505 def int_ppc_altivec_vinsbvrx : GCCBuiltin<"__builtin_altivec_vinsbvrx">, 506 Intrinsic<[llvm_v16i8_ty], 507 [llvm_v16i8_ty, llvm_i64_ty, llvm_v16i8_ty], 508 [IntrNoMem]>; 509 def int_ppc_altivec_vinshvlx : GCCBuiltin<"__builtin_altivec_vinshvlx">, 510 Intrinsic<[llvm_v8i16_ty], 511 [llvm_v8i16_ty, llvm_i64_ty, llvm_v8i16_ty], 512 [IntrNoMem]>; 513 def int_ppc_altivec_vinshvrx : GCCBuiltin<"__builtin_altivec_vinshvrx">, 514 Intrinsic<[llvm_v8i16_ty], 515 [llvm_v8i16_ty, llvm_i64_ty, llvm_v8i16_ty], 516 [IntrNoMem]>; 517 def int_ppc_altivec_vinswvlx : GCCBuiltin<"__builtin_altivec_vinswvlx">, 518 Intrinsic<[llvm_v4i32_ty], 519 [llvm_v4i32_ty, llvm_i64_ty, llvm_v4i32_ty], 520 [IntrNoMem]>; 521 def int_ppc_altivec_vinswvrx : GCCBuiltin<"__builtin_altivec_vinswvrx">, 522 Intrinsic<[llvm_v4i32_ty], 523 [llvm_v4i32_ty, llvm_i64_ty, llvm_v4i32_ty], 524 [IntrNoMem]>; 525 // P10 Vector Insert with immediate. 526 def int_ppc_altivec_vinsw : 527 Intrinsic<[llvm_v4i32_ty], 528 [llvm_v4i32_ty, llvm_i64_ty, llvm_i32_ty], 529 [IntrNoMem, ImmArg<ArgIndex<2>>]>; 530 def int_ppc_altivec_vinsd : 531 Intrinsic<[llvm_v2i64_ty], 532 [llvm_v2i64_ty, llvm_i64_ty, llvm_i32_ty], 533 [IntrNoMem, ImmArg<ArgIndex<2>>]>; 534} 535 536// Vector average. 537def int_ppc_altivec_vavgsb : PowerPC_Vec_BBB_Intrinsic<"vavgsb">; 538def int_ppc_altivec_vavgsh : PowerPC_Vec_HHH_Intrinsic<"vavgsh">; 539def int_ppc_altivec_vavgsw : PowerPC_Vec_WWW_Intrinsic<"vavgsw">; 540def int_ppc_altivec_vavgub : PowerPC_Vec_BBB_Intrinsic<"vavgub">; 541def int_ppc_altivec_vavguh : PowerPC_Vec_HHH_Intrinsic<"vavguh">; 542def int_ppc_altivec_vavguw : PowerPC_Vec_WWW_Intrinsic<"vavguw">; 543 544// Vector maximum. 545def int_ppc_altivec_vmaxfp : PowerPC_Vec_FFF_Intrinsic<"vmaxfp">; 546def int_ppc_altivec_vmaxsb : PowerPC_Vec_BBB_Intrinsic<"vmaxsb">; 547def int_ppc_altivec_vmaxsh : PowerPC_Vec_HHH_Intrinsic<"vmaxsh">; 548def int_ppc_altivec_vmaxsw : PowerPC_Vec_WWW_Intrinsic<"vmaxsw">; 549def int_ppc_altivec_vmaxsd : PowerPC_Vec_DDD_Intrinsic<"vmaxsd">; 550def int_ppc_altivec_vmaxub : PowerPC_Vec_BBB_Intrinsic<"vmaxub">; 551def int_ppc_altivec_vmaxuh : PowerPC_Vec_HHH_Intrinsic<"vmaxuh">; 552def int_ppc_altivec_vmaxuw : PowerPC_Vec_WWW_Intrinsic<"vmaxuw">; 553def int_ppc_altivec_vmaxud : PowerPC_Vec_DDD_Intrinsic<"vmaxud">; 554 555// Vector minimum. 556def int_ppc_altivec_vminfp : PowerPC_Vec_FFF_Intrinsic<"vminfp">; 557def int_ppc_altivec_vminsb : PowerPC_Vec_BBB_Intrinsic<"vminsb">; 558def int_ppc_altivec_vminsh : PowerPC_Vec_HHH_Intrinsic<"vminsh">; 559def int_ppc_altivec_vminsw : PowerPC_Vec_WWW_Intrinsic<"vminsw">; 560def int_ppc_altivec_vminsd : PowerPC_Vec_DDD_Intrinsic<"vminsd">; 561def int_ppc_altivec_vminub : PowerPC_Vec_BBB_Intrinsic<"vminub">; 562def int_ppc_altivec_vminuh : PowerPC_Vec_HHH_Intrinsic<"vminuh">; 563def int_ppc_altivec_vminuw : PowerPC_Vec_WWW_Intrinsic<"vminuw">; 564def int_ppc_altivec_vminud : PowerPC_Vec_DDD_Intrinsic<"vminud">; 565 566// Saturating adds. 567def int_ppc_altivec_vaddubs : PowerPC_Vec_BBB_Intrinsic<"vaddubs">; 568def int_ppc_altivec_vaddsbs : PowerPC_Vec_BBB_Intrinsic<"vaddsbs">; 569def int_ppc_altivec_vadduhs : PowerPC_Vec_HHH_Intrinsic<"vadduhs">; 570def int_ppc_altivec_vaddshs : PowerPC_Vec_HHH_Intrinsic<"vaddshs">; 571def int_ppc_altivec_vadduws : PowerPC_Vec_WWW_Intrinsic<"vadduws">; 572def int_ppc_altivec_vaddsws : PowerPC_Vec_WWW_Intrinsic<"vaddsws">; 573def int_ppc_altivec_vaddcuw : PowerPC_Vec_WWW_Intrinsic<"vaddcuw">; 574def int_ppc_altivec_vaddcuq : PowerPC_Vec_QQQ_Intrinsic<"vaddcuq">; 575 576// Saturating subs. 577def int_ppc_altivec_vsububs : PowerPC_Vec_BBB_Intrinsic<"vsububs">; 578def int_ppc_altivec_vsubsbs : PowerPC_Vec_BBB_Intrinsic<"vsubsbs">; 579def int_ppc_altivec_vsubuhs : PowerPC_Vec_HHH_Intrinsic<"vsubuhs">; 580def int_ppc_altivec_vsubshs : PowerPC_Vec_HHH_Intrinsic<"vsubshs">; 581def int_ppc_altivec_vsubuws : PowerPC_Vec_WWW_Intrinsic<"vsubuws">; 582def int_ppc_altivec_vsubsws : PowerPC_Vec_WWW_Intrinsic<"vsubsws">; 583def int_ppc_altivec_vsubcuw : PowerPC_Vec_WWW_Intrinsic<"vsubcuw">; 584def int_ppc_altivec_vsubcuq : PowerPC_Vec_QQQ_Intrinsic<"vsubcuq">; 585 586let TargetPrefix = "ppc" in { // All PPC intrinsics start with "llvm.ppc.". 587 // Saturating multiply-adds. 588 def int_ppc_altivec_vmhaddshs : GCCBuiltin<"__builtin_altivec_vmhaddshs">, 589 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, 590 llvm_v8i16_ty, llvm_v8i16_ty], [IntrNoMem]>; 591 def int_ppc_altivec_vmhraddshs : GCCBuiltin<"__builtin_altivec_vmhraddshs">, 592 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, 593 llvm_v8i16_ty, llvm_v8i16_ty], [IntrNoMem]>; 594 595 def int_ppc_altivec_vmaddfp : GCCBuiltin<"__builtin_altivec_vmaddfp">, 596 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, 597 llvm_v4f32_ty, llvm_v4f32_ty], [IntrNoMem]>; 598 def int_ppc_altivec_vnmsubfp : GCCBuiltin<"__builtin_altivec_vnmsubfp">, 599 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, 600 llvm_v4f32_ty, llvm_v4f32_ty], [IntrNoMem]>; 601 602 // Vector Multiply Sum Instructions. 603 def int_ppc_altivec_vmsummbm : GCCBuiltin<"__builtin_altivec_vmsummbm">, 604 Intrinsic<[llvm_v4i32_ty], [llvm_v16i8_ty, llvm_v16i8_ty, 605 llvm_v4i32_ty], [IntrNoMem]>; 606 def int_ppc_altivec_vmsumshm : GCCBuiltin<"__builtin_altivec_vmsumshm">, 607 Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty, llvm_v8i16_ty, 608 llvm_v4i32_ty], [IntrNoMem]>; 609 def int_ppc_altivec_vmsumshs : GCCBuiltin<"__builtin_altivec_vmsumshs">, 610 Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty, llvm_v8i16_ty, 611 llvm_v4i32_ty], [IntrNoMem]>; 612 def int_ppc_altivec_vmsumubm : GCCBuiltin<"__builtin_altivec_vmsumubm">, 613 Intrinsic<[llvm_v4i32_ty], [llvm_v16i8_ty, llvm_v16i8_ty, 614 llvm_v4i32_ty], [IntrNoMem]>; 615 def int_ppc_altivec_vmsumuhm : GCCBuiltin<"__builtin_altivec_vmsumuhm">, 616 Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty, llvm_v8i16_ty, 617 llvm_v4i32_ty], [IntrNoMem]>; 618 def int_ppc_altivec_vmsumudm : GCCBuiltin<"__builtin_altivec_vmsumudm">, 619 Intrinsic<[llvm_v1i128_ty], [llvm_v2i64_ty, llvm_v2i64_ty, 620 llvm_v1i128_ty], [IntrNoMem]>; 621 def int_ppc_altivec_vmsumuhs : GCCBuiltin<"__builtin_altivec_vmsumuhs">, 622 Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty, llvm_v8i16_ty, 623 llvm_v4i32_ty], [IntrNoMem]>; 624 625 // Vector Multiply Instructions. 626 def int_ppc_altivec_vmulesb : GCCBuiltin<"__builtin_altivec_vmulesb">, 627 Intrinsic<[llvm_v8i16_ty], [llvm_v16i8_ty, llvm_v16i8_ty], 628 [IntrNoMem]>; 629 def int_ppc_altivec_vmulesh : GCCBuiltin<"__builtin_altivec_vmulesh">, 630 Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty, llvm_v8i16_ty], 631 [IntrNoMem]>; 632 def int_ppc_altivec_vmulesw : GCCBuiltin<"__builtin_altivec_vmulesw">, 633 Intrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty, llvm_v4i32_ty], 634 [IntrNoMem]>; 635 def int_ppc_altivec_vmuleub : GCCBuiltin<"__builtin_altivec_vmuleub">, 636 Intrinsic<[llvm_v8i16_ty], [llvm_v16i8_ty, llvm_v16i8_ty], 637 [IntrNoMem]>; 638 def int_ppc_altivec_vmuleuh : GCCBuiltin<"__builtin_altivec_vmuleuh">, 639 Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty, llvm_v8i16_ty], 640 [IntrNoMem]>; 641 def int_ppc_altivec_vmuleuw : GCCBuiltin<"__builtin_altivec_vmuleuw">, 642 Intrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty, llvm_v4i32_ty], 643 [IntrNoMem]>; 644 645 def int_ppc_altivec_vmulosb : GCCBuiltin<"__builtin_altivec_vmulosb">, 646 Intrinsic<[llvm_v8i16_ty], [llvm_v16i8_ty, llvm_v16i8_ty], 647 [IntrNoMem]>; 648 def int_ppc_altivec_vmulosh : GCCBuiltin<"__builtin_altivec_vmulosh">, 649 Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty, llvm_v8i16_ty], 650 [IntrNoMem]>; 651 def int_ppc_altivec_vmulosw : GCCBuiltin<"__builtin_altivec_vmulosw">, 652 Intrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty, llvm_v4i32_ty], 653 [IntrNoMem]>; 654 def int_ppc_altivec_vmuloub : GCCBuiltin<"__builtin_altivec_vmuloub">, 655 Intrinsic<[llvm_v8i16_ty], [llvm_v16i8_ty, llvm_v16i8_ty], 656 [IntrNoMem]>; 657 def int_ppc_altivec_vmulouh : GCCBuiltin<"__builtin_altivec_vmulouh">, 658 Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty, llvm_v8i16_ty], 659 [IntrNoMem]>; 660 def int_ppc_altivec_vmulouw : GCCBuiltin<"__builtin_altivec_vmulouw">, 661 Intrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty, llvm_v4i32_ty], 662 [IntrNoMem]>; 663 664 // Vector Sum Instructions. 665 def int_ppc_altivec_vsumsws : GCCBuiltin<"__builtin_altivec_vsumsws">, 666 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], 667 [IntrNoMem]>; 668 def int_ppc_altivec_vsum2sws : GCCBuiltin<"__builtin_altivec_vsum2sws">, 669 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], 670 [IntrNoMem]>; 671 def int_ppc_altivec_vsum4sbs : GCCBuiltin<"__builtin_altivec_vsum4sbs">, 672 Intrinsic<[llvm_v4i32_ty], [llvm_v16i8_ty, llvm_v4i32_ty], 673 [IntrNoMem]>; 674 def int_ppc_altivec_vsum4shs : GCCBuiltin<"__builtin_altivec_vsum4shs">, 675 Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty, llvm_v4i32_ty], 676 [IntrNoMem]>; 677 def int_ppc_altivec_vsum4ubs : GCCBuiltin<"__builtin_altivec_vsum4ubs">, 678 Intrinsic<[llvm_v4i32_ty], [llvm_v16i8_ty, llvm_v4i32_ty], 679 [IntrNoMem]>; 680 681 // Other multiplies. 682 def int_ppc_altivec_vmladduhm : GCCBuiltin<"__builtin_altivec_vmladduhm">, 683 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty, 684 llvm_v8i16_ty], [IntrNoMem]>; 685 686 // Packs. 687 def int_ppc_altivec_vpkpx : GCCBuiltin<"__builtin_altivec_vpkpx">, 688 Intrinsic<[llvm_v8i16_ty], [llvm_v4i32_ty, llvm_v4i32_ty], 689 [IntrNoMem]>; 690 def int_ppc_altivec_vpkshss : GCCBuiltin<"__builtin_altivec_vpkshss">, 691 Intrinsic<[llvm_v16i8_ty], [llvm_v8i16_ty, llvm_v8i16_ty], 692 [IntrNoMem]>; 693 def int_ppc_altivec_vpkshus : GCCBuiltin<"__builtin_altivec_vpkshus">, 694 Intrinsic<[llvm_v16i8_ty], [llvm_v8i16_ty, llvm_v8i16_ty], 695 [IntrNoMem]>; 696 def int_ppc_altivec_vpkswss : GCCBuiltin<"__builtin_altivec_vpkswss">, 697 Intrinsic<[llvm_v8i16_ty], [llvm_v4i32_ty, llvm_v4i32_ty], 698 [IntrNoMem]>; 699 def int_ppc_altivec_vpkswus : GCCBuiltin<"__builtin_altivec_vpkswus">, 700 Intrinsic<[llvm_v8i16_ty], [llvm_v4i32_ty, llvm_v4i32_ty], 701 [IntrNoMem]>; 702 def int_ppc_altivec_vpksdss : GCCBuiltin<"__builtin_altivec_vpksdss">, 703 Intrinsic<[llvm_v4i32_ty], [llvm_v2i64_ty, llvm_v2i64_ty], 704 [IntrNoMem]>; 705 def int_ppc_altivec_vpksdus : GCCBuiltin<"__builtin_altivec_vpksdus">, 706 Intrinsic<[llvm_v4i32_ty], [llvm_v2i64_ty, llvm_v2i64_ty], 707 [IntrNoMem]>; 708 // vpkuhum is lowered to a shuffle. 709 def int_ppc_altivec_vpkuhus : GCCBuiltin<"__builtin_altivec_vpkuhus">, 710 Intrinsic<[llvm_v16i8_ty], [llvm_v8i16_ty, llvm_v8i16_ty], 711 [IntrNoMem]>; 712 // vpkuwum is lowered to a shuffle. 713 def int_ppc_altivec_vpkuwus : GCCBuiltin<"__builtin_altivec_vpkuwus">, 714 Intrinsic<[llvm_v8i16_ty], [llvm_v4i32_ty, llvm_v4i32_ty], 715 [IntrNoMem]>; 716 // vpkudum is lowered to a shuffle. 717 def int_ppc_altivec_vpkudus : GCCBuiltin<"__builtin_altivec_vpkudus">, 718 Intrinsic<[llvm_v4i32_ty], [llvm_v2i64_ty, llvm_v2i64_ty], 719 [IntrNoMem]>; 720 721 // Unpacks. 722 def int_ppc_altivec_vupkhpx : GCCBuiltin<"__builtin_altivec_vupkhpx">, 723 Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty], [IntrNoMem]>; 724 def int_ppc_altivec_vupkhsb : GCCBuiltin<"__builtin_altivec_vupkhsb">, 725 Intrinsic<[llvm_v8i16_ty], [llvm_v16i8_ty], [IntrNoMem]>; 726 def int_ppc_altivec_vupkhsh : GCCBuiltin<"__builtin_altivec_vupkhsh">, 727 Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty], [IntrNoMem]>; 728 def int_ppc_altivec_vupkhsw : GCCBuiltin<"__builtin_altivec_vupkhsw">, 729 Intrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty], [IntrNoMem]>; 730 def int_ppc_altivec_vupklpx : GCCBuiltin<"__builtin_altivec_vupklpx">, 731 Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty], [IntrNoMem]>; 732 def int_ppc_altivec_vupklsb : GCCBuiltin<"__builtin_altivec_vupklsb">, 733 Intrinsic<[llvm_v8i16_ty], [llvm_v16i8_ty], [IntrNoMem]>; 734 def int_ppc_altivec_vupklsh : GCCBuiltin<"__builtin_altivec_vupklsh">, 735 Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty], [IntrNoMem]>; 736 def int_ppc_altivec_vupklsw : GCCBuiltin<"__builtin_altivec_vupklsw">, 737 Intrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty], [IntrNoMem]>; 738 739 740 // FP <-> integer conversion. 741 def int_ppc_altivec_vcfsx : GCCBuiltin<"__builtin_altivec_vcfsx">, 742 Intrinsic<[llvm_v4f32_ty], [llvm_v4i32_ty, llvm_i32_ty], 743 [IntrNoMem, ImmArg<ArgIndex<1>>]>; 744 def int_ppc_altivec_vcfux : GCCBuiltin<"__builtin_altivec_vcfux">, 745 Intrinsic<[llvm_v4f32_ty], [llvm_v4i32_ty, llvm_i32_ty], 746 [IntrNoMem, ImmArg<ArgIndex<1>>]>; 747 def int_ppc_altivec_vctsxs : GCCBuiltin<"__builtin_altivec_vctsxs">, 748 Intrinsic<[llvm_v4i32_ty], [llvm_v4f32_ty, llvm_i32_ty], 749 [IntrNoMem, ImmArg<ArgIndex<1>>]>; 750 def int_ppc_altivec_vctuxs : GCCBuiltin<"__builtin_altivec_vctuxs">, 751 Intrinsic<[llvm_v4i32_ty], [llvm_v4f32_ty, llvm_i32_ty], 752 [IntrNoMem, ImmArg<ArgIndex<1>>]>; 753 754 def int_ppc_altivec_vrfim : GCCBuiltin<"__builtin_altivec_vrfim">, 755 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty], [IntrNoMem]>; 756 def int_ppc_altivec_vrfin : GCCBuiltin<"__builtin_altivec_vrfin">, 757 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty], [IntrNoMem]>; 758 def int_ppc_altivec_vrfip : GCCBuiltin<"__builtin_altivec_vrfip">, 759 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty], [IntrNoMem]>; 760 def int_ppc_altivec_vrfiz : GCCBuiltin<"__builtin_altivec_vrfiz">, 761 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty], [IntrNoMem]>; 762 763 // Add Extended Quadword 764 def int_ppc_altivec_vaddeuqm : GCCBuiltin<"__builtin_altivec_vaddeuqm">, 765 Intrinsic<[llvm_v1i128_ty], 766 [llvm_v1i128_ty, llvm_v1i128_ty, llvm_v1i128_ty], 767 [IntrNoMem]>; 768 def int_ppc_altivec_vaddecuq : GCCBuiltin<"__builtin_altivec_vaddecuq">, 769 Intrinsic<[llvm_v1i128_ty], 770 [llvm_v1i128_ty, llvm_v1i128_ty, llvm_v1i128_ty], 771 [IntrNoMem]>; 772 773 // Sub Extended Quadword 774 def int_ppc_altivec_vsubeuqm : GCCBuiltin<"__builtin_altivec_vsubeuqm">, 775 Intrinsic<[llvm_v1i128_ty], 776 [llvm_v1i128_ty, llvm_v1i128_ty, llvm_v1i128_ty], 777 [IntrNoMem]>; 778 def int_ppc_altivec_vsubecuq : GCCBuiltin<"__builtin_altivec_vsubecuq">, 779 Intrinsic<[llvm_v1i128_ty], 780 [llvm_v1i128_ty, llvm_v1i128_ty, llvm_v1i128_ty], 781 [IntrNoMem]>; 782 783 // P10 Vector Count Leading / Trailing Zeroes under bit Mask Builtins. 784 def int_ppc_altivec_vclzdm : GCCBuiltin<"__builtin_altivec_vclzdm">, 785 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], 786 [IntrNoMem]>; 787 def int_ppc_altivec_vctzdm : GCCBuiltin<"__builtin_altivec_vctzdm">, 788 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], 789 [IntrNoMem]>; 790} 791 792def int_ppc_altivec_vsl : PowerPC_Vec_WWW_Intrinsic<"vsl">; 793def int_ppc_altivec_vslo : PowerPC_Vec_WWW_Intrinsic<"vslo">; 794 795def int_ppc_altivec_vslb : PowerPC_Vec_BBB_Intrinsic<"vslb">; 796def int_ppc_altivec_vslv : PowerPC_Vec_BBB_Intrinsic<"vslv">; 797def int_ppc_altivec_vsrv : PowerPC_Vec_BBB_Intrinsic<"vsrv">; 798def int_ppc_altivec_vslh : PowerPC_Vec_HHH_Intrinsic<"vslh">; 799def int_ppc_altivec_vslw : PowerPC_Vec_WWW_Intrinsic<"vslw">; 800 801// Right Shifts. 802def int_ppc_altivec_vsr : PowerPC_Vec_WWW_Intrinsic<"vsr">; 803def int_ppc_altivec_vsro : PowerPC_Vec_WWW_Intrinsic<"vsro">; 804 805def int_ppc_altivec_vsrb : PowerPC_Vec_BBB_Intrinsic<"vsrb">; 806def int_ppc_altivec_vsrh : PowerPC_Vec_HHH_Intrinsic<"vsrh">; 807def int_ppc_altivec_vsrw : PowerPC_Vec_WWW_Intrinsic<"vsrw">; 808def int_ppc_altivec_vsrab : PowerPC_Vec_BBB_Intrinsic<"vsrab">; 809def int_ppc_altivec_vsrah : PowerPC_Vec_HHH_Intrinsic<"vsrah">; 810def int_ppc_altivec_vsraw : PowerPC_Vec_WWW_Intrinsic<"vsraw">; 811 812// Rotates. 813def int_ppc_altivec_vrlb : PowerPC_Vec_BBB_Intrinsic<"vrlb">; 814def int_ppc_altivec_vrlh : PowerPC_Vec_HHH_Intrinsic<"vrlh">; 815def int_ppc_altivec_vrlw : PowerPC_Vec_WWW_Intrinsic<"vrlw">; 816def int_ppc_altivec_vrld : PowerPC_Vec_DDD_Intrinsic<"vrld">; 817 818let TargetPrefix = "ppc" in { // All PPC intrinsics start with "llvm.ppc.". 819 // Miscellaneous. 820 def int_ppc_altivec_lvsl : 821 Intrinsic<[llvm_v16i8_ty], [llvm_ptr_ty], [IntrNoMem]>; 822 def int_ppc_altivec_lvsr : 823 Intrinsic<[llvm_v16i8_ty], [llvm_ptr_ty], [IntrNoMem]>; 824 825 def int_ppc_altivec_vperm : GCCBuiltin<"__builtin_altivec_vperm_4si">, 826 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, 827 llvm_v4i32_ty, llvm_v16i8_ty], [IntrNoMem]>; 828 def int_ppc_altivec_vsel : GCCBuiltin<"__builtin_altivec_vsel_4si">, 829 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, 830 llvm_v4i32_ty, llvm_v4i32_ty], [IntrNoMem]>; 831 def int_ppc_altivec_vgbbd : GCCBuiltin<"__builtin_altivec_vgbbd">, 832 Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty], [IntrNoMem]>; 833 def int_ppc_altivec_vbpermq : GCCBuiltin<"__builtin_altivec_vbpermq">, 834 Intrinsic<[llvm_v2i64_ty], [llvm_v16i8_ty, llvm_v16i8_ty], 835 [IntrNoMem]>; 836} 837 838def int_ppc_altivec_vexptefp : PowerPC_Vec_FF_Intrinsic<"vexptefp">; 839def int_ppc_altivec_vlogefp : PowerPC_Vec_FF_Intrinsic<"vlogefp">; 840def int_ppc_altivec_vrefp : PowerPC_Vec_FF_Intrinsic<"vrefp">; 841def int_ppc_altivec_vrsqrtefp : PowerPC_Vec_FF_Intrinsic<"vrsqrtefp">; 842 843// Power8 Intrinsics 844// Crypto 845let TargetPrefix = "ppc" in { // All PPC intrinsics start with "llvm.ppc.". 846 def int_ppc_altivec_crypto_vsbox : 847 GCCBuiltin<"__builtin_altivec_crypto_vsbox">, 848 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty], [IntrNoMem]>; 849 def int_ppc_altivec_crypto_vpermxor : 850 GCCBuiltin<"__builtin_altivec_crypto_vpermxor">, 851 Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, 852 llvm_v16i8_ty, llvm_v16i8_ty], [IntrNoMem]>; 853 854def int_ppc_altivec_crypto_vshasigmad : 855 GCCBuiltin<"__builtin_altivec_crypto_vshasigmad">, 856 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, 857 llvm_i32_ty, llvm_i32_ty], [IntrNoMem, ImmArg<ArgIndex<1>>, ImmArg<ArgIndex<2>>]>; 858def int_ppc_altivec_crypto_vshasigmaw : 859 GCCBuiltin<"__builtin_altivec_crypto_vshasigmaw">, 860 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, 861 llvm_i32_ty, llvm_i32_ty], [IntrNoMem, ImmArg<ArgIndex<1>>, ImmArg<ArgIndex<2>>]>; 862} 863def int_ppc_altivec_crypto_vcipher : 864 PowerPC_Vec_DDD_Intrinsic<"crypto_vcipher">; 865def int_ppc_altivec_crypto_vcipherlast : 866 PowerPC_Vec_DDD_Intrinsic<"crypto_vcipherlast">; 867def int_ppc_altivec_crypto_vncipher : 868 PowerPC_Vec_DDD_Intrinsic<"crypto_vncipher">; 869def int_ppc_altivec_crypto_vncipherlast : 870 PowerPC_Vec_DDD_Intrinsic<"crypto_vncipherlast">; 871def int_ppc_altivec_crypto_vpmsumb : 872 PowerPC_Vec_BBB_Intrinsic<"crypto_vpmsumb">; 873def int_ppc_altivec_crypto_vpmsumh : 874 PowerPC_Vec_HHH_Intrinsic<"crypto_vpmsumh">; 875def int_ppc_altivec_crypto_vpmsumw : 876 PowerPC_Vec_WWW_Intrinsic<"crypto_vpmsumw">; 877def int_ppc_altivec_crypto_vpmsumd : 878 PowerPC_Vec_DDD_Intrinsic<"crypto_vpmsumd">; 879 880// Absolute Difference intrinsics 881def int_ppc_altivec_vabsdub : PowerPC_Vec_BBB_Intrinsic<"vabsdub">; 882def int_ppc_altivec_vabsduh : PowerPC_Vec_HHH_Intrinsic<"vabsduh">; 883def int_ppc_altivec_vabsduw : PowerPC_Vec_WWW_Intrinsic<"vabsduw">; 884 885// Vector rotates 886def int_ppc_altivec_vrlwnm : 887 PowerPC_Vec_Intrinsic<"vrlwnm", [llvm_v4i32_ty], 888 [llvm_v4i32_ty, llvm_v4i32_ty], [IntrNoMem]>; 889def int_ppc_altivec_vrlwmi : 890 PowerPC_Vec_Intrinsic<"vrlwmi", [llvm_v4i32_ty], 891 [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v4i32_ty], 892 [IntrNoMem]>; 893def int_ppc_altivec_vrldnm : 894 PowerPC_Vec_Intrinsic<"vrldnm", [llvm_v2i64_ty], 895 [llvm_v2i64_ty, llvm_v2i64_ty], [IntrNoMem]>; 896def int_ppc_altivec_vrldmi : 897 PowerPC_Vec_Intrinsic<"vrldmi", [llvm_v2i64_ty], 898 [llvm_v2i64_ty, llvm_v2i64_ty, llvm_v2i64_ty], 899 [IntrNoMem]>; 900 901//===----------------------------------------------------------------------===// 902// PowerPC VSX Intrinsic Definitions. 903 904let TargetPrefix = "ppc" in { // All intrinsics start with "llvm.ppc.". 905 906// Vector load. 907def int_ppc_vsx_lxvw4x : 908 Intrinsic<[llvm_v4i32_ty], [llvm_ptr_ty], [IntrReadMem, IntrArgMemOnly]>; 909def int_ppc_vsx_lxvd2x : 910 Intrinsic<[llvm_v2f64_ty], [llvm_ptr_ty], [IntrReadMem, IntrArgMemOnly]>; 911def int_ppc_vsx_lxvw4x_be : 912 Intrinsic<[llvm_v4i32_ty], [llvm_ptr_ty], [IntrReadMem, IntrArgMemOnly]>; 913def int_ppc_vsx_lxvd2x_be : 914 Intrinsic<[llvm_v2f64_ty], [llvm_ptr_ty], [IntrReadMem, IntrArgMemOnly]>; 915def int_ppc_vsx_lxvl : 916 Intrinsic<[llvm_v4i32_ty], [llvm_ptr_ty, llvm_i64_ty], [IntrReadMem, 917 IntrArgMemOnly]>; 918def int_ppc_vsx_lxvll : 919 Intrinsic<[llvm_v4i32_ty], [llvm_ptr_ty, llvm_i64_ty], [IntrReadMem, 920 IntrArgMemOnly]>; 921def int_ppc_vsx_stxvl : 922 Intrinsic<[], [llvm_v4i32_ty, llvm_ptr_ty, llvm_i64_ty], 923 [IntrWriteMem, IntrArgMemOnly]>; 924def int_ppc_vsx_stxvll : 925 Intrinsic<[], [llvm_v4i32_ty, llvm_ptr_ty, llvm_i64_ty], 926 [IntrWriteMem, IntrArgMemOnly]>; 927 928// Vector store. 929def int_ppc_vsx_stxvw4x : Intrinsic<[], [llvm_v4i32_ty, llvm_ptr_ty], 930 [IntrWriteMem, IntrArgMemOnly]>; 931def int_ppc_vsx_stxvd2x : Intrinsic<[], [llvm_v2f64_ty, llvm_ptr_ty], 932 [IntrWriteMem, IntrArgMemOnly]>; 933def int_ppc_vsx_stxvw4x_be : Intrinsic<[], [llvm_v4i32_ty, llvm_ptr_ty], 934 [IntrWriteMem, IntrArgMemOnly]>; 935def int_ppc_vsx_stxvd2x_be : Intrinsic<[], [llvm_v2f64_ty, llvm_ptr_ty], 936 [IntrWriteMem, IntrArgMemOnly]>; 937// Vector and scalar maximum. 938def int_ppc_vsx_xvmaxdp : PowerPC_VSX_Vec_DDD_Intrinsic<"xvmaxdp">; 939def int_ppc_vsx_xvmaxsp : PowerPC_VSX_Vec_FFF_Intrinsic<"xvmaxsp">; 940def int_ppc_vsx_xsmaxdp : PowerPC_VSX_Sca_DDD_Intrinsic<"xsmaxdp">; 941 942// Vector and scalar minimum. 943def int_ppc_vsx_xvmindp : PowerPC_VSX_Vec_DDD_Intrinsic<"xvmindp">; 944def int_ppc_vsx_xvminsp : PowerPC_VSX_Vec_FFF_Intrinsic<"xvminsp">; 945def int_ppc_vsx_xsmindp : PowerPC_VSX_Sca_DDD_Intrinsic<"xsmindp">; 946 947// Vector divide. 948def int_ppc_vsx_xvdivdp : PowerPC_VSX_Vec_DDD_Intrinsic<"xvdivdp">; 949def int_ppc_vsx_xvdivsp : PowerPC_VSX_Vec_FFF_Intrinsic<"xvdivsp">; 950 951// Vector round-to-infinity (ceil) 952def int_ppc_vsx_xvrspip : 953 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty], [IntrNoMem]>; 954def int_ppc_vsx_xvrdpip : 955 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty], [IntrNoMem]>; 956 957// Vector reciprocal estimate 958def int_ppc_vsx_xvresp : GCCBuiltin<"__builtin_vsx_xvresp">, 959 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty], [IntrNoMem]>; 960def int_ppc_vsx_xvredp : GCCBuiltin<"__builtin_vsx_xvredp">, 961 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty], [IntrNoMem]>; 962 963// Vector rsqrte 964def int_ppc_vsx_xvrsqrtesp : GCCBuiltin<"__builtin_vsx_xvrsqrtesp">, 965 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty], [IntrNoMem]>; 966def int_ppc_vsx_xvrsqrtedp : GCCBuiltin<"__builtin_vsx_xvrsqrtedp">, 967 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty], [IntrNoMem]>; 968 969// Vector compare 970def int_ppc_vsx_xvcmpeqdp : 971 PowerPC_VSX_Intrinsic<"xvcmpeqdp", [llvm_v2i64_ty], 972 [llvm_v2f64_ty, llvm_v2f64_ty], [IntrNoMem]>; 973def int_ppc_vsx_xvcmpeqdp_p : GCCBuiltin<"__builtin_vsx_xvcmpeqdp_p">, 974 Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v2f64_ty,llvm_v2f64_ty], 975 [IntrNoMem]>; 976def int_ppc_vsx_xvcmpeqsp : 977 PowerPC_VSX_Intrinsic<"xvcmpeqsp", [llvm_v4i32_ty], 978 [llvm_v4f32_ty, llvm_v4f32_ty], [IntrNoMem]>; 979def int_ppc_vsx_xvcmpeqsp_p : GCCBuiltin<"__builtin_vsx_xvcmpeqsp_p">, 980 Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v4f32_ty,llvm_v4f32_ty], 981 [IntrNoMem]>; 982def int_ppc_vsx_xvcmpgedp : 983 PowerPC_VSX_Intrinsic<"xvcmpgedp", [llvm_v2i64_ty], 984 [llvm_v2f64_ty, llvm_v2f64_ty], [IntrNoMem]>; 985def int_ppc_vsx_xvcmpgedp_p : GCCBuiltin<"__builtin_vsx_xvcmpgedp_p">, 986 Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v2f64_ty,llvm_v2f64_ty], 987 [IntrNoMem]>; 988def int_ppc_vsx_xvcmpgesp : 989 PowerPC_VSX_Intrinsic<"xvcmpgesp", [llvm_v4i32_ty], 990 [llvm_v4f32_ty, llvm_v4f32_ty], [IntrNoMem]>; 991def int_ppc_vsx_xvcmpgesp_p : GCCBuiltin<"__builtin_vsx_xvcmpgesp_p">, 992 Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v4f32_ty,llvm_v4f32_ty], 993 [IntrNoMem]>; 994def int_ppc_vsx_xvcmpgtdp : 995 PowerPC_VSX_Intrinsic<"xvcmpgtdp", [llvm_v2i64_ty], 996 [llvm_v2f64_ty, llvm_v2f64_ty], [IntrNoMem]>; 997def int_ppc_vsx_xvcmpgtdp_p : GCCBuiltin<"__builtin_vsx_xvcmpgtdp_p">, 998 Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v2f64_ty,llvm_v2f64_ty], 999 [IntrNoMem]>; 1000def int_ppc_vsx_xvcmpgtsp : 1001 PowerPC_VSX_Intrinsic<"xvcmpgtsp", [llvm_v4i32_ty], 1002 [llvm_v4f32_ty, llvm_v4f32_ty], [IntrNoMem]>; 1003def int_ppc_vsx_xvcmpgtsp_p : GCCBuiltin<"__builtin_vsx_xvcmpgtsp_p">, 1004 Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v4f32_ty,llvm_v4f32_ty], 1005 [IntrNoMem]>; 1006def int_ppc_vsx_xxleqv : 1007 PowerPC_VSX_Intrinsic<"xxleqv", [llvm_v4i32_ty], 1008 [llvm_v4i32_ty, llvm_v4i32_ty], [IntrNoMem]>; 1009def int_ppc_vsx_xviexpdp : 1010 PowerPC_VSX_Intrinsic<"xviexpdp",[llvm_v2f64_ty], 1011 [llvm_v2i64_ty, llvm_v2i64_ty],[IntrNoMem]>; 1012def int_ppc_vsx_xviexpsp : 1013 PowerPC_VSX_Intrinsic<"xviexpsp",[llvm_v4f32_ty], 1014 [llvm_v4i32_ty, llvm_v4i32_ty],[IntrNoMem]>; 1015def int_ppc_vsx_xvcvdpsxws : 1016 PowerPC_VSX_Intrinsic<"xvcvdpsxws", [llvm_v4i32_ty], 1017 [llvm_v2f64_ty], [IntrNoMem]>; 1018def int_ppc_vsx_xvcvdpuxws : 1019 PowerPC_VSX_Intrinsic<"xvcvdpuxws", [llvm_v4i32_ty], 1020 [llvm_v2f64_ty], [IntrNoMem]>; 1021def int_ppc_vsx_xvcvsxwdp : 1022 PowerPC_VSX_Intrinsic<"xvcvsxwdp", [llvm_v2f64_ty], 1023 [llvm_v4i32_ty], [IntrNoMem]>; 1024def int_ppc_vsx_xvcvuxwdp : 1025 PowerPC_VSX_Intrinsic<"xvcvuxwdp", [llvm_v2f64_ty], 1026 [llvm_v4i32_ty], [IntrNoMem]>; 1027def int_ppc_vsx_xvcvspdp : 1028 PowerPC_VSX_Intrinsic<"xvcvspdp", [llvm_v2f64_ty], 1029 [llvm_v4f32_ty], [IntrNoMem]>; 1030def int_ppc_vsx_xvcvsxdsp : 1031 PowerPC_VSX_Intrinsic<"xvcvsxdsp", [llvm_v4f32_ty], 1032 [llvm_v2i64_ty], [IntrNoMem]>; 1033def int_ppc_vsx_xvcvuxdsp : 1034 PowerPC_VSX_Intrinsic<"xvcvuxdsp", [llvm_v4f32_ty], 1035 [llvm_v2i64_ty], [IntrNoMem]>; 1036def int_ppc_vsx_xvcvdpsp : 1037 PowerPC_VSX_Intrinsic<"xvcvdpsp", [llvm_v4f32_ty], 1038 [llvm_v2f64_ty], [IntrNoMem]>; 1039def int_ppc_vsx_xvcvsphp : 1040 PowerPC_VSX_Intrinsic<"xvcvsphp", [llvm_v4f32_ty], 1041 [llvm_v4f32_ty], [IntrNoMem]>; 1042def int_ppc_vsx_xvxexpdp : 1043 PowerPC_VSX_Intrinsic<"xvxexpdp", [llvm_v2i64_ty], 1044 [llvm_v2f64_ty], [IntrNoMem]>; 1045def int_ppc_vsx_xvxexpsp : 1046 PowerPC_VSX_Intrinsic<"xvxexpsp", [llvm_v4i32_ty], 1047 [llvm_v4f32_ty], [IntrNoMem]>; 1048def int_ppc_vsx_xvxsigdp : 1049 PowerPC_VSX_Intrinsic<"xvxsigdp", [llvm_v2i64_ty], 1050 [llvm_v2f64_ty], [IntrNoMem]>; 1051def int_ppc_vsx_xvxsigsp : 1052 PowerPC_VSX_Intrinsic<"xvxsigsp", [llvm_v4i32_ty], 1053 [llvm_v4f32_ty], [IntrNoMem]>; 1054def int_ppc_vsx_xvtstdcdp : 1055 PowerPC_VSX_Intrinsic<"xvtstdcdp", [llvm_v2i64_ty], 1056 [llvm_v2f64_ty, llvm_i32_ty], [IntrNoMem, ImmArg<ArgIndex<1>>]>; 1057def int_ppc_vsx_xvtstdcsp : 1058 PowerPC_VSX_Intrinsic<"xvtstdcsp", [llvm_v4i32_ty], 1059 [llvm_v4f32_ty,llvm_i32_ty], [IntrNoMem, ImmArg<ArgIndex<1>>]>; 1060def int_ppc_vsx_xvcvhpsp : 1061 PowerPC_VSX_Intrinsic<"xvcvhpsp", [llvm_v4f32_ty], 1062 [llvm_v8i16_ty],[IntrNoMem]>; 1063def int_ppc_vsx_xxextractuw : 1064 PowerPC_VSX_Intrinsic<"xxextractuw",[llvm_v2i64_ty], 1065 [llvm_v2i64_ty,llvm_i32_ty], [IntrNoMem]>; 1066def int_ppc_vsx_xxinsertw : 1067 PowerPC_VSX_Intrinsic<"xxinsertw",[llvm_v4i32_ty], 1068 [llvm_v4i32_ty,llvm_v2i64_ty,llvm_i32_ty], 1069 [IntrNoMem]>; 1070def int_ppc_vsx_xvtlsbb : 1071 PowerPC_VSX_Intrinsic<"xvtlsbb", [llvm_i32_ty], 1072 [llvm_v16i8_ty, llvm_i1_ty], [IntrNoMem]>; 1073def int_ppc_vsx_xxeval : 1074 PowerPC_VSX_Intrinsic<"xxeval", [llvm_v2i64_ty], 1075 [llvm_v2i64_ty, llvm_v2i64_ty, 1076 llvm_v2i64_ty, llvm_i32_ty], 1077 [IntrNoMem, ImmArg<ArgIndex<3>>]>; 1078def int_ppc_vsx_xxgenpcvbm : 1079 PowerPC_VSX_Intrinsic<"xxgenpcvbm", [llvm_v16i8_ty], 1080 [llvm_v16i8_ty, llvm_i32_ty], [IntrNoMem]>; 1081def int_ppc_vsx_xxgenpcvhm : 1082 PowerPC_VSX_Intrinsic<"xxgenpcvhm", [llvm_v8i16_ty], 1083 [llvm_v8i16_ty, llvm_i32_ty], [IntrNoMem]>; 1084def int_ppc_vsx_xxgenpcvwm : 1085 PowerPC_VSX_Intrinsic<"xxgenpcvwm", [llvm_v4i32_ty], 1086 [llvm_v4i32_ty, llvm_i32_ty], [IntrNoMem]>; 1087def int_ppc_vsx_xxgenpcvdm : 1088 PowerPC_VSX_Intrinsic<"xxgenpcvdm", [llvm_v2i64_ty], 1089 [llvm_v2i64_ty, llvm_i32_ty], [IntrNoMem]>; 1090 1091// P10 VSX Vector permute extended. 1092def int_ppc_vsx_xxpermx : 1093 GCCBuiltin<"__builtin_vsx_xxpermx">, 1094 Intrinsic<[llvm_v16i8_ty], 1095 [llvm_v16i8_ty,llvm_v16i8_ty,llvm_v16i8_ty,llvm_i32_ty], 1096 [IntrNoMem, ImmArg<ArgIndex<3>>]>; 1097// P10 VSX Vector Blend Variable. 1098def int_ppc_vsx_xxblendvb: GCCBuiltin<"__builtin_vsx_xxblendvb">, 1099 Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty, llvm_v16i8_ty], 1100 [IntrNoMem]>; 1101def int_ppc_vsx_xxblendvh: GCCBuiltin<"__builtin_vsx_xxblendvh">, 1102 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty,llvm_v8i16_ty], 1103 [IntrNoMem]>; 1104def int_ppc_vsx_xxblendvw: GCCBuiltin<"__builtin_vsx_xxblendvw">, 1105 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v4i32_ty], 1106 [IntrNoMem]>; 1107def int_ppc_vsx_xxblendvd: GCCBuiltin<"__builtin_vsx_xxblendvd">, 1108 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty, llvm_v2i64_ty], 1109 [IntrNoMem]>; 1110} 1111 1112//===----------------------------------------------------------------------===// 1113// PowerPC QPX Intrinsics. 1114// 1115 1116let TargetPrefix = "ppc" in { // All PPC intrinsics start with "llvm.ppc.". 1117 /// PowerPC_QPX_Intrinsic - Base class for all QPX intrinsics. 1118 class PowerPC_QPX_Intrinsic<string GCCIntSuffix, list<LLVMType> ret_types, 1119 list<LLVMType> param_types, 1120 list<IntrinsicProperty> properties> 1121 : GCCBuiltin<!strconcat("__builtin_qpx_", GCCIntSuffix)>, 1122 Intrinsic<ret_types, param_types, properties>; 1123} 1124 1125//===----------------------------------------------------------------------===// 1126// PowerPC QPX Intrinsic Class Definitions. 1127// 1128 1129/// PowerPC_QPX_FF_Intrinsic - A PowerPC intrinsic that takes one v4f64 1130/// vector and returns one. These intrinsics have no side effects. 1131class PowerPC_QPX_FF_Intrinsic<string GCCIntSuffix> 1132 : PowerPC_QPX_Intrinsic<GCCIntSuffix, 1133 [llvm_v4f64_ty], [llvm_v4f64_ty], [IntrNoMem]>; 1134 1135/// PowerPC_QPX_FFF_Intrinsic - A PowerPC intrinsic that takes two v4f64 1136/// vectors and returns one. These intrinsics have no side effects. 1137class PowerPC_QPX_FFF_Intrinsic<string GCCIntSuffix> 1138 : PowerPC_QPX_Intrinsic<GCCIntSuffix, 1139 [llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty], 1140 [IntrNoMem]>; 1141 1142/// PowerPC_QPX_FFFF_Intrinsic - A PowerPC intrinsic that takes three v4f64 1143/// vectors and returns one. These intrinsics have no side effects. 1144class PowerPC_QPX_FFFF_Intrinsic<string GCCIntSuffix> 1145 : PowerPC_QPX_Intrinsic<GCCIntSuffix, 1146 [llvm_v4f64_ty], 1147 [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty], 1148 [IntrNoMem]>; 1149 1150/// PowerPC_QPX_Load_Intrinsic - A PowerPC intrinsic that takes a pointer 1151/// and returns a v4f64. 1152class PowerPC_QPX_Load_Intrinsic<string GCCIntSuffix> 1153 : PowerPC_QPX_Intrinsic<GCCIntSuffix, 1154 [llvm_v4f64_ty], [llvm_ptr_ty], [IntrReadMem, IntrArgMemOnly]>; 1155 1156/// PowerPC_QPX_LoadPerm_Intrinsic - A PowerPC intrinsic that takes a pointer 1157/// and returns a v4f64 permutation. 1158class PowerPC_QPX_LoadPerm_Intrinsic<string GCCIntSuffix> 1159 : PowerPC_QPX_Intrinsic<GCCIntSuffix, 1160 [llvm_v4f64_ty], [llvm_ptr_ty], [IntrNoMem]>; 1161 1162/// PowerPC_QPX_Store_Intrinsic - A PowerPC intrinsic that takes a pointer 1163/// and stores a v4f64. 1164class PowerPC_QPX_Store_Intrinsic<string GCCIntSuffix> 1165 : PowerPC_QPX_Intrinsic<GCCIntSuffix, 1166 [], [llvm_v4f64_ty, llvm_ptr_ty], 1167 [IntrWriteMem, IntrArgMemOnly]>; 1168 1169//===----------------------------------------------------------------------===// 1170// PowerPC QPX Intrinsic Definitions. 1171 1172let TargetPrefix = "ppc" in { // All intrinsics start with "llvm.ppc.". 1173 // Add Instructions 1174 def int_ppc_qpx_qvfadd : PowerPC_QPX_FFF_Intrinsic<"qvfadd">; 1175 def int_ppc_qpx_qvfadds : PowerPC_QPX_FFF_Intrinsic<"qvfadds">; 1176 def int_ppc_qpx_qvfsub : PowerPC_QPX_FFF_Intrinsic<"qvfsub">; 1177 def int_ppc_qpx_qvfsubs : PowerPC_QPX_FFF_Intrinsic<"qvfsubs">; 1178 1179 // Estimate Instructions 1180 def int_ppc_qpx_qvfre : PowerPC_QPX_FF_Intrinsic<"qvfre">; 1181 def int_ppc_qpx_qvfres : PowerPC_QPX_FF_Intrinsic<"qvfres">; 1182 def int_ppc_qpx_qvfrsqrte : PowerPC_QPX_FF_Intrinsic<"qvfrsqrte">; 1183 def int_ppc_qpx_qvfrsqrtes : PowerPC_QPX_FF_Intrinsic<"qvfrsqrtes">; 1184 1185 // Multiply Instructions 1186 def int_ppc_qpx_qvfmul : PowerPC_QPX_FFF_Intrinsic<"qvfmul">; 1187 def int_ppc_qpx_qvfmuls : PowerPC_QPX_FFF_Intrinsic<"qvfmuls">; 1188 def int_ppc_qpx_qvfxmul : PowerPC_QPX_FFF_Intrinsic<"qvfxmul">; 1189 def int_ppc_qpx_qvfxmuls : PowerPC_QPX_FFF_Intrinsic<"qvfxmuls">; 1190 1191 // Multiply-add instructions 1192 def int_ppc_qpx_qvfmadd : PowerPC_QPX_FFFF_Intrinsic<"qvfmadd">; 1193 def int_ppc_qpx_qvfmadds : PowerPC_QPX_FFFF_Intrinsic<"qvfmadds">; 1194 def int_ppc_qpx_qvfnmadd : PowerPC_QPX_FFFF_Intrinsic<"qvfnmadd">; 1195 def int_ppc_qpx_qvfnmadds : PowerPC_QPX_FFFF_Intrinsic<"qvfnmadds">; 1196 def int_ppc_qpx_qvfmsub : PowerPC_QPX_FFFF_Intrinsic<"qvfmsub">; 1197 def int_ppc_qpx_qvfmsubs : PowerPC_QPX_FFFF_Intrinsic<"qvfmsubs">; 1198 def int_ppc_qpx_qvfnmsub : PowerPC_QPX_FFFF_Intrinsic<"qvfnmsub">; 1199 def int_ppc_qpx_qvfnmsubs : PowerPC_QPX_FFFF_Intrinsic<"qvfnmsubs">; 1200 def int_ppc_qpx_qvfxmadd : PowerPC_QPX_FFFF_Intrinsic<"qvfxmadd">; 1201 def int_ppc_qpx_qvfxmadds : PowerPC_QPX_FFFF_Intrinsic<"qvfxmadds">; 1202 def int_ppc_qpx_qvfxxnpmadd : PowerPC_QPX_FFFF_Intrinsic<"qvfxxnpmadd">; 1203 def int_ppc_qpx_qvfxxnpmadds : PowerPC_QPX_FFFF_Intrinsic<"qvfxxnpmadds">; 1204 def int_ppc_qpx_qvfxxcpnmadd : PowerPC_QPX_FFFF_Intrinsic<"qvfxxcpnmadd">; 1205 def int_ppc_qpx_qvfxxcpnmadds : PowerPC_QPX_FFFF_Intrinsic<"qvfxxcpnmadds">; 1206 def int_ppc_qpx_qvfxxmadd : PowerPC_QPX_FFFF_Intrinsic<"qvfxxmadd">; 1207 def int_ppc_qpx_qvfxxmadds : PowerPC_QPX_FFFF_Intrinsic<"qvfxxmadds">; 1208 1209 // Select Instruction 1210 def int_ppc_qpx_qvfsel : PowerPC_QPX_FFFF_Intrinsic<"qvfsel">; 1211 1212 // Permute Instruction 1213 def int_ppc_qpx_qvfperm : PowerPC_QPX_FFFF_Intrinsic<"qvfperm">; 1214 1215 // Convert and Round Instructions 1216 def int_ppc_qpx_qvfctid : PowerPC_QPX_FF_Intrinsic<"qvfctid">; 1217 def int_ppc_qpx_qvfctidu : PowerPC_QPX_FF_Intrinsic<"qvfctidu">; 1218 def int_ppc_qpx_qvfctidz : PowerPC_QPX_FF_Intrinsic<"qvfctidz">; 1219 def int_ppc_qpx_qvfctiduz : PowerPC_QPX_FF_Intrinsic<"qvfctiduz">; 1220 def int_ppc_qpx_qvfctiw : PowerPC_QPX_FF_Intrinsic<"qvfctiw">; 1221 def int_ppc_qpx_qvfctiwu : PowerPC_QPX_FF_Intrinsic<"qvfctiwu">; 1222 def int_ppc_qpx_qvfctiwz : PowerPC_QPX_FF_Intrinsic<"qvfctiwz">; 1223 def int_ppc_qpx_qvfctiwuz : PowerPC_QPX_FF_Intrinsic<"qvfctiwuz">; 1224 def int_ppc_qpx_qvfcfid : PowerPC_QPX_FF_Intrinsic<"qvfcfid">; 1225 def int_ppc_qpx_qvfcfidu : PowerPC_QPX_FF_Intrinsic<"qvfcfidu">; 1226 def int_ppc_qpx_qvfcfids : PowerPC_QPX_FF_Intrinsic<"qvfcfids">; 1227 def int_ppc_qpx_qvfcfidus : PowerPC_QPX_FF_Intrinsic<"qvfcfidus">; 1228 def int_ppc_qpx_qvfrsp : PowerPC_QPX_FF_Intrinsic<"qvfrsp">; 1229 def int_ppc_qpx_qvfriz : PowerPC_QPX_FF_Intrinsic<"qvfriz">; 1230 def int_ppc_qpx_qvfrin : PowerPC_QPX_FF_Intrinsic<"qvfrin">; 1231 def int_ppc_qpx_qvfrip : PowerPC_QPX_FF_Intrinsic<"qvfrip">; 1232 def int_ppc_qpx_qvfrim : PowerPC_QPX_FF_Intrinsic<"qvfrim">; 1233 1234 // Move Instructions 1235 def int_ppc_qpx_qvfneg : PowerPC_QPX_FF_Intrinsic<"qvfneg">; 1236 def int_ppc_qpx_qvfabs : PowerPC_QPX_FF_Intrinsic<"qvfabs">; 1237 def int_ppc_qpx_qvfnabs : PowerPC_QPX_FF_Intrinsic<"qvfnabs">; 1238 def int_ppc_qpx_qvfcpsgn : PowerPC_QPX_FFF_Intrinsic<"qvfcpsgn">; 1239 1240 // Compare Instructions 1241 def int_ppc_qpx_qvftstnan : PowerPC_QPX_FFF_Intrinsic<"qvftstnan">; 1242 def int_ppc_qpx_qvfcmplt : PowerPC_QPX_FFF_Intrinsic<"qvfcmplt">; 1243 def int_ppc_qpx_qvfcmpgt : PowerPC_QPX_FFF_Intrinsic<"qvfcmpgt">; 1244 def int_ppc_qpx_qvfcmpeq : PowerPC_QPX_FFF_Intrinsic<"qvfcmpeq">; 1245 1246 // Load instructions 1247 def int_ppc_qpx_qvlfd : PowerPC_QPX_Load_Intrinsic<"qvlfd">; 1248 def int_ppc_qpx_qvlfda : PowerPC_QPX_Load_Intrinsic<"qvlfda">; 1249 def int_ppc_qpx_qvlfs : PowerPC_QPX_Load_Intrinsic<"qvlfs">; 1250 def int_ppc_qpx_qvlfsa : PowerPC_QPX_Load_Intrinsic<"qvlfsa">; 1251 1252 def int_ppc_qpx_qvlfcda : PowerPC_QPX_Load_Intrinsic<"qvlfcda">; 1253 def int_ppc_qpx_qvlfcd : PowerPC_QPX_Load_Intrinsic<"qvlfcd">; 1254 def int_ppc_qpx_qvlfcsa : PowerPC_QPX_Load_Intrinsic<"qvlfcsa">; 1255 def int_ppc_qpx_qvlfcs : PowerPC_QPX_Load_Intrinsic<"qvlfcs">; 1256 def int_ppc_qpx_qvlfiwaa : PowerPC_QPX_Load_Intrinsic<"qvlfiwaa">; 1257 def int_ppc_qpx_qvlfiwa : PowerPC_QPX_Load_Intrinsic<"qvlfiwa">; 1258 def int_ppc_qpx_qvlfiwza : PowerPC_QPX_Load_Intrinsic<"qvlfiwza">; 1259 def int_ppc_qpx_qvlfiwz : PowerPC_QPX_Load_Intrinsic<"qvlfiwz">; 1260 1261 def int_ppc_qpx_qvlpcld : PowerPC_QPX_LoadPerm_Intrinsic<"qvlpcld">; 1262 def int_ppc_qpx_qvlpcls : PowerPC_QPX_LoadPerm_Intrinsic<"qvlpcls">; 1263 def int_ppc_qpx_qvlpcrd : PowerPC_QPX_LoadPerm_Intrinsic<"qvlpcrd">; 1264 def int_ppc_qpx_qvlpcrs : PowerPC_QPX_LoadPerm_Intrinsic<"qvlpcrs">; 1265 1266 // Store instructions 1267 def int_ppc_qpx_qvstfd : PowerPC_QPX_Store_Intrinsic<"qvstfd">; 1268 def int_ppc_qpx_qvstfda : PowerPC_QPX_Store_Intrinsic<"qvstfda">; 1269 def int_ppc_qpx_qvstfs : PowerPC_QPX_Store_Intrinsic<"qvstfs">; 1270 def int_ppc_qpx_qvstfsa : PowerPC_QPX_Store_Intrinsic<"qvstfsa">; 1271 1272 def int_ppc_qpx_qvstfcda : PowerPC_QPX_Store_Intrinsic<"qvstfcda">; 1273 def int_ppc_qpx_qvstfcd : PowerPC_QPX_Store_Intrinsic<"qvstfcd">; 1274 def int_ppc_qpx_qvstfcsa : PowerPC_QPX_Store_Intrinsic<"qvstfcsa">; 1275 def int_ppc_qpx_qvstfcs : PowerPC_QPX_Store_Intrinsic<"qvstfcs">; 1276 def int_ppc_qpx_qvstfiwa : PowerPC_QPX_Store_Intrinsic<"qvstfiwa">; 1277 def int_ppc_qpx_qvstfiw : PowerPC_QPX_Store_Intrinsic<"qvstfiw">; 1278 1279 // Logical and permutation formation 1280 def int_ppc_qpx_qvflogical : PowerPC_QPX_Intrinsic<"qvflogical", 1281 [llvm_v4f64_ty], 1282 [llvm_v4f64_ty, llvm_v4f64_ty, llvm_i32_ty], 1283 [IntrNoMem]>; 1284 def int_ppc_qpx_qvgpci : PowerPC_QPX_Intrinsic<"qvgpci", 1285 [llvm_v4f64_ty], [llvm_i32_ty], [IntrNoMem]>; 1286} 1287 1288//===----------------------------------------------------------------------===// 1289// PowerPC HTM Intrinsic Definitions. 1290 1291let TargetPrefix = "ppc" in { // All intrinsics start with "llvm.ppc.". 1292 1293def int_ppc_tbegin : GCCBuiltin<"__builtin_tbegin">, 1294 Intrinsic<[llvm_i32_ty], [llvm_i32_ty], [ImmArg<ArgIndex<0>>]>; 1295def int_ppc_tend : GCCBuiltin<"__builtin_tend">, 1296 Intrinsic<[llvm_i32_ty], [llvm_i32_ty], [ImmArg<ArgIndex<0>>]>; 1297 1298def int_ppc_tabort : GCCBuiltin<"__builtin_tabort">, 1299 Intrinsic<[llvm_i32_ty], [llvm_i32_ty], []>; 1300def int_ppc_tabortwc : GCCBuiltin<"__builtin_tabortwc">, 1301 Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], []>; 1302def int_ppc_tabortwci : GCCBuiltin<"__builtin_tabortwci">, 1303 Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], []>; 1304def int_ppc_tabortdc : GCCBuiltin<"__builtin_tabortdc">, 1305 Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], []>; 1306def int_ppc_tabortdci : GCCBuiltin<"__builtin_tabortdci">, 1307 Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], []>; 1308 1309def int_ppc_tcheck : GCCBuiltin<"__builtin_tcheck">, 1310 Intrinsic<[llvm_i32_ty], [], []>; 1311def int_ppc_treclaim : GCCBuiltin<"__builtin_treclaim">, 1312 Intrinsic<[llvm_i32_ty], [llvm_i32_ty], []>; 1313def int_ppc_trechkpt : GCCBuiltin<"__builtin_trechkpt">, 1314 Intrinsic<[llvm_i32_ty], [], []>; 1315def int_ppc_tsr : GCCBuiltin<"__builtin_tsr">, 1316 Intrinsic<[llvm_i32_ty], [llvm_i32_ty], []>; 1317 1318def int_ppc_get_texasr : GCCBuiltin<"__builtin_get_texasr">, 1319 Intrinsic<[llvm_i64_ty], [], []>; 1320def int_ppc_get_texasru : GCCBuiltin<"__builtin_get_texasru">, 1321 Intrinsic<[llvm_i64_ty], [], []>; 1322def int_ppc_get_tfhar : GCCBuiltin<"__builtin_get_tfhar">, 1323 Intrinsic<[llvm_i64_ty], [], []>; 1324def int_ppc_get_tfiar : GCCBuiltin<"__builtin_get_tfiar">, 1325 Intrinsic<[llvm_i64_ty], [], []>; 1326 1327def int_ppc_set_texasr : GCCBuiltin<"__builtin_set_texasr">, 1328 Intrinsic<[], [llvm_i64_ty], []>; 1329def int_ppc_set_texasru : GCCBuiltin<"__builtin_set_texasru">, 1330 Intrinsic<[], [llvm_i64_ty], []>; 1331def int_ppc_set_tfhar : GCCBuiltin<"__builtin_set_tfhar">, 1332 Intrinsic<[], [llvm_i64_ty], []>; 1333def int_ppc_set_tfiar : GCCBuiltin<"__builtin_set_tfiar">, 1334 Intrinsic<[], [llvm_i64_ty], []>; 1335 1336// Extended mnemonics 1337def int_ppc_tendall : GCCBuiltin<"__builtin_tendall">, 1338 Intrinsic<[llvm_i32_ty], [], []>; 1339def int_ppc_tresume : GCCBuiltin<"__builtin_tresume">, 1340 Intrinsic<[llvm_i32_ty], [], []>; 1341def int_ppc_tsuspend : GCCBuiltin<"__builtin_tsuspend">, 1342 Intrinsic<[llvm_i32_ty], [], []>; 1343 1344def int_ppc_ttest : GCCBuiltin<"__builtin_ttest">, 1345 Intrinsic<[llvm_i64_ty], [], []>; 1346 1347def int_ppc_cfence : Intrinsic<[], [llvm_anyint_ty], []>; 1348 1349// PowerPC set FPSCR Intrinsic Definitions. 1350def int_ppc_setrnd : GCCBuiltin<"__builtin_setrnd">, 1351 Intrinsic<[llvm_double_ty], [llvm_i32_ty], []>; 1352 1353} 1354