1//===- IntrinsicsPowerPC.td - Defines PowerPC 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 PowerPC-specific intrinsics. 11// 12//===----------------------------------------------------------------------===// 13 14//===----------------------------------------------------------------------===// 15// Definitions for all PowerPC intrinsics. 16// 17 18// Non-altivec intrinsics. 19let TargetPrefix = "ppc" in { // All intrinsics start with "llvm.ppc.". 20 // dcba/dcbf/dcbi/dcbst/dcbt/dcbz/dcbzl(PPC970) instructions. 21 def int_ppc_dcba : Intrinsic<[], [llvm_ptr_ty], []>; 22 def int_ppc_dcbf : Intrinsic<[], [llvm_ptr_ty], []>; 23 def int_ppc_dcbi : Intrinsic<[], [llvm_ptr_ty], []>; 24 def int_ppc_dcbst : Intrinsic<[], [llvm_ptr_ty], []>; 25 def int_ppc_dcbt : Intrinsic<[], [llvm_ptr_ty], 26 [IntrReadWriteArgMem, NoCapture<0>]>; 27 def int_ppc_dcbtst: Intrinsic<[], [llvm_ptr_ty], 28 [IntrReadWriteArgMem, NoCapture<0>]>; 29 def int_ppc_dcbz : Intrinsic<[], [llvm_ptr_ty], []>; 30 def int_ppc_dcbzl : Intrinsic<[], [llvm_ptr_ty], []>; 31 32 // sync instruction (i.e. sync 0, a.k.a hwsync) 33 def int_ppc_sync : Intrinsic<[], [], []>; 34 // lwsync is sync 1 35 def int_ppc_lwsync : Intrinsic<[], [], []>; 36 37 // Intrinsics used to generate ctr-based loops. These should only be 38 // generated by the PowerPC backend! 39 def int_ppc_mtctr : Intrinsic<[], [llvm_anyint_ty], []>; 40 def int_ppc_is_decremented_ctr_nonzero : Intrinsic<[llvm_i1_ty], [], []>; 41 42 // Intrinsics for [double]word extended forms of divide instructions 43 def int_ppc_divwe : GCCBuiltin<"__builtin_divwe">, 44 Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty], 45 [IntrNoMem]>; 46 def int_ppc_divweu : GCCBuiltin<"__builtin_divweu">, 47 Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty], 48 [IntrNoMem]>; 49 def int_ppc_divde : GCCBuiltin<"__builtin_divde">, 50 Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], 51 [IntrNoMem]>; 52 def int_ppc_divdeu : GCCBuiltin<"__builtin_divdeu">, 53 Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], 54 [IntrNoMem]>; 55 56 // Bit permute doubleword 57 def int_ppc_bpermd : GCCBuiltin<"__builtin_bpermd">, 58 Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], 59 [IntrNoMem]>; 60} 61 62 63let TargetPrefix = "ppc" in { // All PPC intrinsics start with "llvm.ppc.". 64 /// PowerPC_Vec_Intrinsic - Base class for all altivec intrinsics. 65 class PowerPC_Vec_Intrinsic<string GCCIntSuffix, list<LLVMType> ret_types, 66 list<LLVMType> param_types, 67 list<IntrinsicProperty> properties> 68 : GCCBuiltin<!strconcat("__builtin_altivec_", GCCIntSuffix)>, 69 Intrinsic<ret_types, param_types, properties>; 70 71 /// PowerPC_VSX_Intrinsic - Base class for all VSX intrinsics. 72 class PowerPC_VSX_Intrinsic<string GCCIntSuffix, list<LLVMType> ret_types, 73 list<LLVMType> param_types, 74 list<IntrinsicProperty> properties> 75 : GCCBuiltin<!strconcat("__builtin_vsx_", GCCIntSuffix)>, 76 Intrinsic<ret_types, param_types, properties>; 77} 78 79//===----------------------------------------------------------------------===// 80// PowerPC Altivec Intrinsic Class Definitions. 81// 82 83/// PowerPC_Vec_FF_Intrinsic - A PowerPC intrinsic that takes one v4f32 84/// vector and returns one. These intrinsics have no side effects. 85class PowerPC_Vec_FF_Intrinsic<string GCCIntSuffix> 86 : PowerPC_Vec_Intrinsic<GCCIntSuffix, 87 [llvm_v4f32_ty], [llvm_v4f32_ty], [IntrNoMem]>; 88 89/// PowerPC_Vec_FFF_Intrinsic - A PowerPC intrinsic that takes two v4f32 90/// vectors and returns one. These intrinsics have no side effects. 91class PowerPC_Vec_FFF_Intrinsic<string GCCIntSuffix> 92 : PowerPC_Vec_Intrinsic<GCCIntSuffix, 93 [llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty], 94 [IntrNoMem]>; 95 96/// PowerPC_Vec_BBB_Intrinsic - A PowerPC intrinsic that takes two v16i8 97/// vectors and returns one. These intrinsics have no side effects. 98class PowerPC_Vec_BBB_Intrinsic<string GCCIntSuffix> 99 : PowerPC_Vec_Intrinsic<GCCIntSuffix, 100 [llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty], 101 [IntrNoMem]>; 102 103/// PowerPC_Vec_HHH_Intrinsic - A PowerPC intrinsic that takes two v8i16 104/// vectors and returns one. These intrinsics have no side effects. 105class PowerPC_Vec_HHH_Intrinsic<string GCCIntSuffix> 106 : PowerPC_Vec_Intrinsic<GCCIntSuffix, 107 [llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty], 108 [IntrNoMem]>; 109 110/// PowerPC_Vec_WWW_Intrinsic - A PowerPC intrinsic that takes two v4i32 111/// vectors and returns one. These intrinsics have no side effects. 112class PowerPC_Vec_WWW_Intrinsic<string GCCIntSuffix> 113 : PowerPC_Vec_Intrinsic<GCCIntSuffix, 114 [llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], 115 [IntrNoMem]>; 116 117/// PowerPC_Vec_DDD_Intrinsic - A PowerPC intrinsic that takes two v2i64 118/// vectors and returns one. These intrinsics have no side effects. 119class PowerPC_Vec_DDD_Intrinsic<string GCCIntSuffix> 120 : PowerPC_Vec_Intrinsic<GCCIntSuffix, 121 [llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], 122 [IntrNoMem]>; 123 124/// PowerPC_Vec_QQQ_Intrinsic - A PowerPC intrinsic that takes two v1i128 125/// vectors and returns one. These intrinsics have no side effects. 126class PowerPC_Vec_QQQ_Intrinsic<string GCCIntSuffix> 127 : PowerPC_Vec_Intrinsic<GCCIntSuffix, 128 [llvm_v1i128_ty], [llvm_v1i128_ty, llvm_v1i128_ty], 129 [IntrNoMem]>; 130 131//===----------------------------------------------------------------------===// 132// PowerPC VSX Intrinsic Class Definitions. 133// 134 135/// PowerPC_VSX_Vec_DDD_Intrinsic - A PowerPC intrinsic that takes two v2f64 136/// vectors and returns one. These intrinsics have no side effects. 137class PowerPC_VSX_Vec_DDD_Intrinsic<string GCCIntSuffix> 138 : PowerPC_VSX_Intrinsic<GCCIntSuffix, 139 [llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty], 140 [IntrNoMem]>; 141 142/// PowerPC_VSX_Vec_FFF_Intrinsic - A PowerPC intrinsic that takes two v4f32 143/// vectors and returns one. These intrinsics have no side effects. 144class PowerPC_VSX_Vec_FFF_Intrinsic<string GCCIntSuffix> 145 : PowerPC_VSX_Intrinsic<GCCIntSuffix, 146 [llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty], 147 [IntrNoMem]>; 148 149/// PowerPC_VSX_Sca_DDD_Intrinsic - A PowerPC intrinsic that takes two f64 150/// scalars and returns one. These intrinsics have no side effects. 151class PowerPC_VSX_Sca_DDD_Intrinsic<string GCCIntSuffix> 152 : PowerPC_VSX_Intrinsic<GCCIntSuffix, 153 [llvm_double_ty], [llvm_double_ty, llvm_double_ty], 154 [IntrNoMem]>; 155 156//===----------------------------------------------------------------------===// 157// PowerPC Altivec Intrinsic Definitions. 158 159let TargetPrefix = "ppc" in { // All intrinsics start with "llvm.ppc.". 160 // Data Stream Control. 161 def int_ppc_altivec_dss : GCCBuiltin<"__builtin_altivec_dss">, 162 Intrinsic<[], [llvm_i32_ty], []>; 163 def int_ppc_altivec_dssall : GCCBuiltin<"__builtin_altivec_dssall">, 164 Intrinsic<[], [], []>; 165 def int_ppc_altivec_dst : GCCBuiltin<"__builtin_altivec_dst">, 166 Intrinsic<[], 167 [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], 168 []>; 169 def int_ppc_altivec_dstt : GCCBuiltin<"__builtin_altivec_dstt">, 170 Intrinsic<[], 171 [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], 172 []>; 173 def int_ppc_altivec_dstst : GCCBuiltin<"__builtin_altivec_dstst">, 174 Intrinsic<[], 175 [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], 176 []>; 177 def int_ppc_altivec_dststt : GCCBuiltin<"__builtin_altivec_dststt">, 178 Intrinsic<[], 179 [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], 180 []>; 181 182 // VSCR access. 183 def int_ppc_altivec_mfvscr : GCCBuiltin<"__builtin_altivec_mfvscr">, 184 Intrinsic<[llvm_v8i16_ty], [], [IntrReadMem]>; 185 def int_ppc_altivec_mtvscr : GCCBuiltin<"__builtin_altivec_mtvscr">, 186 Intrinsic<[], [llvm_v4i32_ty], []>; 187 188 189 // Loads. These don't map directly to GCC builtins because they represent the 190 // source address with a single pointer. 191 def int_ppc_altivec_lvx : 192 Intrinsic<[llvm_v4i32_ty], [llvm_ptr_ty], [IntrReadArgMem]>; 193 def int_ppc_altivec_lvxl : 194 Intrinsic<[llvm_v4i32_ty], [llvm_ptr_ty], [IntrReadArgMem]>; 195 def int_ppc_altivec_lvebx : 196 Intrinsic<[llvm_v16i8_ty], [llvm_ptr_ty], [IntrReadArgMem]>; 197 def int_ppc_altivec_lvehx : 198 Intrinsic<[llvm_v8i16_ty], [llvm_ptr_ty], [IntrReadArgMem]>; 199 def int_ppc_altivec_lvewx : 200 Intrinsic<[llvm_v4i32_ty], [llvm_ptr_ty], [IntrReadArgMem]>; 201 202 // Stores. These don't map directly to GCC builtins because they represent the 203 // source address with a single pointer. 204 def int_ppc_altivec_stvx : 205 Intrinsic<[], [llvm_v4i32_ty, llvm_ptr_ty], 206 [IntrReadWriteArgMem]>; 207 def int_ppc_altivec_stvxl : 208 Intrinsic<[], [llvm_v4i32_ty, llvm_ptr_ty], 209 [IntrReadWriteArgMem]>; 210 def int_ppc_altivec_stvebx : 211 Intrinsic<[], [llvm_v16i8_ty, llvm_ptr_ty], 212 [IntrReadWriteArgMem]>; 213 def int_ppc_altivec_stvehx : 214 Intrinsic<[], [llvm_v8i16_ty, llvm_ptr_ty], 215 [IntrReadWriteArgMem]>; 216 def int_ppc_altivec_stvewx : 217 Intrinsic<[], [llvm_v4i32_ty, llvm_ptr_ty], 218 [IntrReadWriteArgMem]>; 219 220 // Comparisons setting a vector. 221 def int_ppc_altivec_vcmpbfp : GCCBuiltin<"__builtin_altivec_vcmpbfp">, 222 Intrinsic<[llvm_v4i32_ty], [llvm_v4f32_ty, llvm_v4f32_ty], 223 [IntrNoMem]>; 224 def int_ppc_altivec_vcmpeqfp : GCCBuiltin<"__builtin_altivec_vcmpeqfp">, 225 Intrinsic<[llvm_v4i32_ty], [llvm_v4f32_ty, llvm_v4f32_ty], 226 [IntrNoMem]>; 227 def int_ppc_altivec_vcmpgefp : GCCBuiltin<"__builtin_altivec_vcmpgefp">, 228 Intrinsic<[llvm_v4i32_ty], [llvm_v4f32_ty, llvm_v4f32_ty], 229 [IntrNoMem]>; 230 def int_ppc_altivec_vcmpgtfp : GCCBuiltin<"__builtin_altivec_vcmpgtfp">, 231 Intrinsic<[llvm_v4i32_ty], [llvm_v4f32_ty, llvm_v4f32_ty], 232 [IntrNoMem]>; 233 234 def int_ppc_altivec_vcmpequd : GCCBuiltin<"__builtin_altivec_vcmpequd">, 235 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], 236 [IntrNoMem]>; 237 def int_ppc_altivec_vcmpgtsd : GCCBuiltin<"__builtin_altivec_vcmpgtsd">, 238 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], 239 [IntrNoMem]>; 240 def int_ppc_altivec_vcmpgtud : GCCBuiltin<"__builtin_altivec_vcmpgtud">, 241 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], 242 [IntrNoMem]>; 243 244 def int_ppc_altivec_vcmpequw : GCCBuiltin<"__builtin_altivec_vcmpequw">, 245 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], 246 [IntrNoMem]>; 247 def int_ppc_altivec_vcmpgtsw : GCCBuiltin<"__builtin_altivec_vcmpgtsw">, 248 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], 249 [IntrNoMem]>; 250 def int_ppc_altivec_vcmpgtuw : GCCBuiltin<"__builtin_altivec_vcmpgtuw">, 251 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], 252 [IntrNoMem]>; 253 254 def int_ppc_altivec_vcmpequh : GCCBuiltin<"__builtin_altivec_vcmpequh">, 255 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty], 256 [IntrNoMem]>; 257 def int_ppc_altivec_vcmpgtsh : GCCBuiltin<"__builtin_altivec_vcmpgtsh">, 258 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty], 259 [IntrNoMem]>; 260 def int_ppc_altivec_vcmpgtuh : GCCBuiltin<"__builtin_altivec_vcmpgtuh">, 261 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty], 262 [IntrNoMem]>; 263 264 def int_ppc_altivec_vcmpequb : GCCBuiltin<"__builtin_altivec_vcmpequb">, 265 Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty], 266 [IntrNoMem]>; 267 def int_ppc_altivec_vcmpgtsb : GCCBuiltin<"__builtin_altivec_vcmpgtsb">, 268 Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty], 269 [IntrNoMem]>; 270 def int_ppc_altivec_vcmpgtub : GCCBuiltin<"__builtin_altivec_vcmpgtub">, 271 Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty], 272 [IntrNoMem]>; 273 274 // Predicate Comparisons. The first operand specifies interpretation of CR6. 275 def int_ppc_altivec_vcmpbfp_p : GCCBuiltin<"__builtin_altivec_vcmpbfp_p">, 276 Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v4f32_ty,llvm_v4f32_ty], 277 [IntrNoMem]>; 278 def int_ppc_altivec_vcmpeqfp_p : GCCBuiltin<"__builtin_altivec_vcmpeqfp_p">, 279 Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v4f32_ty,llvm_v4f32_ty], 280 [IntrNoMem]>; 281 def int_ppc_altivec_vcmpgefp_p : GCCBuiltin<"__builtin_altivec_vcmpgefp_p">, 282 Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v4f32_ty,llvm_v4f32_ty], 283 [IntrNoMem]>; 284 def int_ppc_altivec_vcmpgtfp_p : GCCBuiltin<"__builtin_altivec_vcmpgtfp_p">, 285 Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v4f32_ty,llvm_v4f32_ty], 286 [IntrNoMem]>; 287 288 def int_ppc_altivec_vcmpequd_p : GCCBuiltin<"__builtin_altivec_vcmpequd_p">, 289 Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v2i64_ty,llvm_v2i64_ty], 290 [IntrNoMem]>; 291 def int_ppc_altivec_vcmpgtsd_p : GCCBuiltin<"__builtin_altivec_vcmpgtsd_p">, 292 Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v2i64_ty,llvm_v2i64_ty], 293 [IntrNoMem]>; 294 def int_ppc_altivec_vcmpgtud_p : GCCBuiltin<"__builtin_altivec_vcmpgtud_p">, 295 Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v2i64_ty,llvm_v2i64_ty], 296 [IntrNoMem]>; 297 298 def int_ppc_altivec_vcmpequw_p : GCCBuiltin<"__builtin_altivec_vcmpequw_p">, 299 Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v4i32_ty,llvm_v4i32_ty], 300 [IntrNoMem]>; 301 def int_ppc_altivec_vcmpgtsw_p : GCCBuiltin<"__builtin_altivec_vcmpgtsw_p">, 302 Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v4i32_ty,llvm_v4i32_ty], 303 [IntrNoMem]>; 304 def int_ppc_altivec_vcmpgtuw_p : GCCBuiltin<"__builtin_altivec_vcmpgtuw_p">, 305 Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v4i32_ty,llvm_v4i32_ty], 306 [IntrNoMem]>; 307 308 def int_ppc_altivec_vcmpequh_p : GCCBuiltin<"__builtin_altivec_vcmpequh_p">, 309 Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v8i16_ty,llvm_v8i16_ty], 310 [IntrNoMem]>; 311 def int_ppc_altivec_vcmpgtsh_p : GCCBuiltin<"__builtin_altivec_vcmpgtsh_p">, 312 Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v8i16_ty,llvm_v8i16_ty], 313 [IntrNoMem]>; 314 def int_ppc_altivec_vcmpgtuh_p : GCCBuiltin<"__builtin_altivec_vcmpgtuh_p">, 315 Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v8i16_ty,llvm_v8i16_ty], 316 [IntrNoMem]>; 317 318 def int_ppc_altivec_vcmpequb_p : GCCBuiltin<"__builtin_altivec_vcmpequb_p">, 319 Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v16i8_ty,llvm_v16i8_ty], 320 [IntrNoMem]>; 321 def int_ppc_altivec_vcmpgtsb_p : GCCBuiltin<"__builtin_altivec_vcmpgtsb_p">, 322 Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v16i8_ty,llvm_v16i8_ty], 323 [IntrNoMem]>; 324 def int_ppc_altivec_vcmpgtub_p : GCCBuiltin<"__builtin_altivec_vcmpgtub_p">, 325 Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v16i8_ty,llvm_v16i8_ty], 326 [IntrNoMem]>; 327} 328 329// Vector average. 330def int_ppc_altivec_vavgsb : PowerPC_Vec_BBB_Intrinsic<"vavgsb">; 331def int_ppc_altivec_vavgsh : PowerPC_Vec_HHH_Intrinsic<"vavgsh">; 332def int_ppc_altivec_vavgsw : PowerPC_Vec_WWW_Intrinsic<"vavgsw">; 333def int_ppc_altivec_vavgub : PowerPC_Vec_BBB_Intrinsic<"vavgub">; 334def int_ppc_altivec_vavguh : PowerPC_Vec_HHH_Intrinsic<"vavguh">; 335def int_ppc_altivec_vavguw : PowerPC_Vec_WWW_Intrinsic<"vavguw">; 336 337// Vector maximum. 338def int_ppc_altivec_vmaxfp : PowerPC_Vec_FFF_Intrinsic<"vmaxfp">; 339def int_ppc_altivec_vmaxsb : PowerPC_Vec_BBB_Intrinsic<"vmaxsb">; 340def int_ppc_altivec_vmaxsh : PowerPC_Vec_HHH_Intrinsic<"vmaxsh">; 341def int_ppc_altivec_vmaxsw : PowerPC_Vec_WWW_Intrinsic<"vmaxsw">; 342def int_ppc_altivec_vmaxsd : PowerPC_Vec_DDD_Intrinsic<"vmaxsd">; 343def int_ppc_altivec_vmaxub : PowerPC_Vec_BBB_Intrinsic<"vmaxub">; 344def int_ppc_altivec_vmaxuh : PowerPC_Vec_HHH_Intrinsic<"vmaxuh">; 345def int_ppc_altivec_vmaxuw : PowerPC_Vec_WWW_Intrinsic<"vmaxuw">; 346def int_ppc_altivec_vmaxud : PowerPC_Vec_DDD_Intrinsic<"vmaxud">; 347 348// Vector minimum. 349def int_ppc_altivec_vminfp : PowerPC_Vec_FFF_Intrinsic<"vminfp">; 350def int_ppc_altivec_vminsb : PowerPC_Vec_BBB_Intrinsic<"vminsb">; 351def int_ppc_altivec_vminsh : PowerPC_Vec_HHH_Intrinsic<"vminsh">; 352def int_ppc_altivec_vminsw : PowerPC_Vec_WWW_Intrinsic<"vminsw">; 353def int_ppc_altivec_vminsd : PowerPC_Vec_DDD_Intrinsic<"vminsd">; 354def int_ppc_altivec_vminub : PowerPC_Vec_BBB_Intrinsic<"vminub">; 355def int_ppc_altivec_vminuh : PowerPC_Vec_HHH_Intrinsic<"vminuh">; 356def int_ppc_altivec_vminuw : PowerPC_Vec_WWW_Intrinsic<"vminuw">; 357def int_ppc_altivec_vminud : PowerPC_Vec_DDD_Intrinsic<"vminud">; 358 359// Saturating adds. 360def int_ppc_altivec_vaddubs : PowerPC_Vec_BBB_Intrinsic<"vaddubs">; 361def int_ppc_altivec_vaddsbs : PowerPC_Vec_BBB_Intrinsic<"vaddsbs">; 362def int_ppc_altivec_vadduhs : PowerPC_Vec_HHH_Intrinsic<"vadduhs">; 363def int_ppc_altivec_vaddshs : PowerPC_Vec_HHH_Intrinsic<"vaddshs">; 364def int_ppc_altivec_vadduws : PowerPC_Vec_WWW_Intrinsic<"vadduws">; 365def int_ppc_altivec_vaddsws : PowerPC_Vec_WWW_Intrinsic<"vaddsws">; 366def int_ppc_altivec_vaddcuw : PowerPC_Vec_WWW_Intrinsic<"vaddcuw">; 367def int_ppc_altivec_vaddcuq : PowerPC_Vec_QQQ_Intrinsic<"vaddcuq">; 368 369// Saturating subs. 370def int_ppc_altivec_vsububs : PowerPC_Vec_BBB_Intrinsic<"vsububs">; 371def int_ppc_altivec_vsubsbs : PowerPC_Vec_BBB_Intrinsic<"vsubsbs">; 372def int_ppc_altivec_vsubuhs : PowerPC_Vec_HHH_Intrinsic<"vsubuhs">; 373def int_ppc_altivec_vsubshs : PowerPC_Vec_HHH_Intrinsic<"vsubshs">; 374def int_ppc_altivec_vsubuws : PowerPC_Vec_WWW_Intrinsic<"vsubuws">; 375def int_ppc_altivec_vsubsws : PowerPC_Vec_WWW_Intrinsic<"vsubsws">; 376def int_ppc_altivec_vsubcuw : PowerPC_Vec_WWW_Intrinsic<"vsubcuw">; 377def int_ppc_altivec_vsubcuq : PowerPC_Vec_QQQ_Intrinsic<"vsubcuq">; 378 379let TargetPrefix = "ppc" in { // All PPC intrinsics start with "llvm.ppc.". 380 // Saturating multiply-adds. 381 def int_ppc_altivec_vmhaddshs : GCCBuiltin<"__builtin_altivec_vmhaddshs">, 382 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, 383 llvm_v8i16_ty, llvm_v8i16_ty], [IntrNoMem]>; 384 def int_ppc_altivec_vmhraddshs : GCCBuiltin<"__builtin_altivec_vmhraddshs">, 385 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, 386 llvm_v8i16_ty, llvm_v8i16_ty], [IntrNoMem]>; 387 388 def int_ppc_altivec_vmaddfp : GCCBuiltin<"__builtin_altivec_vmaddfp">, 389 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, 390 llvm_v4f32_ty, llvm_v4f32_ty], [IntrNoMem]>; 391 def int_ppc_altivec_vnmsubfp : GCCBuiltin<"__builtin_altivec_vnmsubfp">, 392 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, 393 llvm_v4f32_ty, llvm_v4f32_ty], [IntrNoMem]>; 394 395 // Vector Multiply Sum Intructions. 396 def int_ppc_altivec_vmsummbm : GCCBuiltin<"__builtin_altivec_vmsummbm">, 397 Intrinsic<[llvm_v4i32_ty], [llvm_v16i8_ty, llvm_v16i8_ty, 398 llvm_v4i32_ty], [IntrNoMem]>; 399 def int_ppc_altivec_vmsumshm : GCCBuiltin<"__builtin_altivec_vmsumshm">, 400 Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty, llvm_v8i16_ty, 401 llvm_v4i32_ty], [IntrNoMem]>; 402 def int_ppc_altivec_vmsumshs : GCCBuiltin<"__builtin_altivec_vmsumshs">, 403 Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty, llvm_v8i16_ty, 404 llvm_v4i32_ty], [IntrNoMem]>; 405 def int_ppc_altivec_vmsumubm : GCCBuiltin<"__builtin_altivec_vmsumubm">, 406 Intrinsic<[llvm_v4i32_ty], [llvm_v16i8_ty, llvm_v16i8_ty, 407 llvm_v4i32_ty], [IntrNoMem]>; 408 def int_ppc_altivec_vmsumuhm : GCCBuiltin<"__builtin_altivec_vmsumuhm">, 409 Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty, llvm_v8i16_ty, 410 llvm_v4i32_ty], [IntrNoMem]>; 411 def int_ppc_altivec_vmsumuhs : GCCBuiltin<"__builtin_altivec_vmsumuhs">, 412 Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty, llvm_v8i16_ty, 413 llvm_v4i32_ty], [IntrNoMem]>; 414 415 // Vector Multiply Intructions. 416 def int_ppc_altivec_vmulesb : GCCBuiltin<"__builtin_altivec_vmulesb">, 417 Intrinsic<[llvm_v8i16_ty], [llvm_v16i8_ty, llvm_v16i8_ty], 418 [IntrNoMem]>; 419 def int_ppc_altivec_vmulesh : GCCBuiltin<"__builtin_altivec_vmulesh">, 420 Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty, llvm_v8i16_ty], 421 [IntrNoMem]>; 422 def int_ppc_altivec_vmulesw : GCCBuiltin<"__builtin_altivec_vmulesw">, 423 Intrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty, llvm_v4i32_ty], 424 [IntrNoMem]>; 425 def int_ppc_altivec_vmuleub : GCCBuiltin<"__builtin_altivec_vmuleub">, 426 Intrinsic<[llvm_v8i16_ty], [llvm_v16i8_ty, llvm_v16i8_ty], 427 [IntrNoMem]>; 428 def int_ppc_altivec_vmuleuh : GCCBuiltin<"__builtin_altivec_vmuleuh">, 429 Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty, llvm_v8i16_ty], 430 [IntrNoMem]>; 431 def int_ppc_altivec_vmuleuw : GCCBuiltin<"__builtin_altivec_vmuleuw">, 432 Intrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty, llvm_v4i32_ty], 433 [IntrNoMem]>; 434 435 def int_ppc_altivec_vmulosb : GCCBuiltin<"__builtin_altivec_vmulosb">, 436 Intrinsic<[llvm_v8i16_ty], [llvm_v16i8_ty, llvm_v16i8_ty], 437 [IntrNoMem]>; 438 def int_ppc_altivec_vmulosh : GCCBuiltin<"__builtin_altivec_vmulosh">, 439 Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty, llvm_v8i16_ty], 440 [IntrNoMem]>; 441 def int_ppc_altivec_vmulosw : GCCBuiltin<"__builtin_altivec_vmulosw">, 442 Intrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty, llvm_v4i32_ty], 443 [IntrNoMem]>; 444 def int_ppc_altivec_vmuloub : GCCBuiltin<"__builtin_altivec_vmuloub">, 445 Intrinsic<[llvm_v8i16_ty], [llvm_v16i8_ty, llvm_v16i8_ty], 446 [IntrNoMem]>; 447 def int_ppc_altivec_vmulouh : GCCBuiltin<"__builtin_altivec_vmulouh">, 448 Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty, llvm_v8i16_ty], 449 [IntrNoMem]>; 450 def int_ppc_altivec_vmulouw : GCCBuiltin<"__builtin_altivec_vmulouw">, 451 Intrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty, llvm_v4i32_ty], 452 [IntrNoMem]>; 453 454 // Vector Sum Intructions. 455 def int_ppc_altivec_vsumsws : GCCBuiltin<"__builtin_altivec_vsumsws">, 456 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], 457 [IntrNoMem]>; 458 def int_ppc_altivec_vsum2sws : GCCBuiltin<"__builtin_altivec_vsum2sws">, 459 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], 460 [IntrNoMem]>; 461 def int_ppc_altivec_vsum4sbs : GCCBuiltin<"__builtin_altivec_vsum4sbs">, 462 Intrinsic<[llvm_v4i32_ty], [llvm_v16i8_ty, llvm_v4i32_ty], 463 [IntrNoMem]>; 464 def int_ppc_altivec_vsum4shs : GCCBuiltin<"__builtin_altivec_vsum4shs">, 465 Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty, llvm_v4i32_ty], 466 [IntrNoMem]>; 467 def int_ppc_altivec_vsum4ubs : GCCBuiltin<"__builtin_altivec_vsum4ubs">, 468 Intrinsic<[llvm_v4i32_ty], [llvm_v16i8_ty, llvm_v4i32_ty], 469 [IntrNoMem]>; 470 471 // Other multiplies. 472 def int_ppc_altivec_vmladduhm : GCCBuiltin<"__builtin_altivec_vmladduhm">, 473 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty, 474 llvm_v8i16_ty], [IntrNoMem]>; 475 476 // Packs. 477 def int_ppc_altivec_vpkpx : GCCBuiltin<"__builtin_altivec_vpkpx">, 478 Intrinsic<[llvm_v8i16_ty], [llvm_v4i32_ty, llvm_v4i32_ty], 479 [IntrNoMem]>; 480 def int_ppc_altivec_vpkshss : GCCBuiltin<"__builtin_altivec_vpkshss">, 481 Intrinsic<[llvm_v16i8_ty], [llvm_v8i16_ty, llvm_v8i16_ty], 482 [IntrNoMem]>; 483 def int_ppc_altivec_vpkshus : GCCBuiltin<"__builtin_altivec_vpkshus">, 484 Intrinsic<[llvm_v16i8_ty], [llvm_v8i16_ty, llvm_v8i16_ty], 485 [IntrNoMem]>; 486 def int_ppc_altivec_vpkswss : GCCBuiltin<"__builtin_altivec_vpkswss">, 487 Intrinsic<[llvm_v16i8_ty], [llvm_v4i32_ty, llvm_v4i32_ty], 488 [IntrNoMem]>; 489 def int_ppc_altivec_vpkswus : GCCBuiltin<"__builtin_altivec_vpkswus">, 490 Intrinsic<[llvm_v8i16_ty], [llvm_v4i32_ty, llvm_v4i32_ty], 491 [IntrNoMem]>; 492 def int_ppc_altivec_vpksdss : GCCBuiltin<"__builtin_altivec_vpksdss">, 493 Intrinsic<[llvm_v4i32_ty], [llvm_v2i64_ty, llvm_v2i64_ty], 494 [IntrNoMem]>; 495 def int_ppc_altivec_vpksdus : GCCBuiltin<"__builtin_altivec_vpksdus">, 496 Intrinsic<[llvm_v4i32_ty], [llvm_v2i64_ty, llvm_v2i64_ty], 497 [IntrNoMem]>; 498 // vpkuhum is lowered to a shuffle. 499 def int_ppc_altivec_vpkuhus : GCCBuiltin<"__builtin_altivec_vpkuhus">, 500 Intrinsic<[llvm_v16i8_ty], [llvm_v8i16_ty, llvm_v8i16_ty], 501 [IntrNoMem]>; 502 // vpkuwum is lowered to a shuffle. 503 def int_ppc_altivec_vpkuwus : GCCBuiltin<"__builtin_altivec_vpkuwus">, 504 Intrinsic<[llvm_v8i16_ty], [llvm_v4i32_ty, llvm_v4i32_ty], 505 [IntrNoMem]>; 506 // vpkudum is lowered to a shuffle. 507 def int_ppc_altivec_vpkudus : GCCBuiltin<"__builtin_altivec_vpkudus">, 508 Intrinsic<[llvm_v4i32_ty], [llvm_v2i64_ty, llvm_v2i64_ty], 509 [IntrNoMem]>; 510 511 // Unpacks. 512 def int_ppc_altivec_vupkhpx : GCCBuiltin<"__builtin_altivec_vupkhpx">, 513 Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty], [IntrNoMem]>; 514 def int_ppc_altivec_vupkhsb : GCCBuiltin<"__builtin_altivec_vupkhsb">, 515 Intrinsic<[llvm_v8i16_ty], [llvm_v16i8_ty], [IntrNoMem]>; 516 def int_ppc_altivec_vupkhsh : GCCBuiltin<"__builtin_altivec_vupkhsh">, 517 Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty], [IntrNoMem]>; 518 def int_ppc_altivec_vupkhsw : GCCBuiltin<"__builtin_altivec_vupkhsw">, 519 Intrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty], [IntrNoMem]>; 520 def int_ppc_altivec_vupklpx : GCCBuiltin<"__builtin_altivec_vupklpx">, 521 Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty], [IntrNoMem]>; 522 def int_ppc_altivec_vupklsb : GCCBuiltin<"__builtin_altivec_vupklsb">, 523 Intrinsic<[llvm_v8i16_ty], [llvm_v16i8_ty], [IntrNoMem]>; 524 def int_ppc_altivec_vupklsh : GCCBuiltin<"__builtin_altivec_vupklsh">, 525 Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty], [IntrNoMem]>; 526 def int_ppc_altivec_vupklsw : GCCBuiltin<"__builtin_altivec_vupklsw">, 527 Intrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty], [IntrNoMem]>; 528 529 530 // FP <-> integer conversion. 531 def int_ppc_altivec_vcfsx : GCCBuiltin<"__builtin_altivec_vcfsx">, 532 Intrinsic<[llvm_v4f32_ty], [llvm_v4i32_ty, llvm_i32_ty], 533 [IntrNoMem]>; 534 def int_ppc_altivec_vcfux : GCCBuiltin<"__builtin_altivec_vcfux">, 535 Intrinsic<[llvm_v4f32_ty], [llvm_v4i32_ty, llvm_i32_ty], 536 [IntrNoMem]>; 537 def int_ppc_altivec_vctsxs : GCCBuiltin<"__builtin_altivec_vctsxs">, 538 Intrinsic<[llvm_v4i32_ty], [llvm_v4f32_ty, llvm_i32_ty], 539 [IntrNoMem]>; 540 def int_ppc_altivec_vctuxs : GCCBuiltin<"__builtin_altivec_vctuxs">, 541 Intrinsic<[llvm_v4i32_ty], [llvm_v4f32_ty, llvm_i32_ty], 542 [IntrNoMem]>; 543 544 def int_ppc_altivec_vrfim : GCCBuiltin<"__builtin_altivec_vrfim">, 545 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty], [IntrNoMem]>; 546 def int_ppc_altivec_vrfin : GCCBuiltin<"__builtin_altivec_vrfin">, 547 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty], [IntrNoMem]>; 548 def int_ppc_altivec_vrfip : GCCBuiltin<"__builtin_altivec_vrfip">, 549 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty], [IntrNoMem]>; 550 def int_ppc_altivec_vrfiz : GCCBuiltin<"__builtin_altivec_vrfiz">, 551 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty], [IntrNoMem]>; 552 553 // Add Extended Quadword 554 def int_ppc_altivec_vaddeuqm : GCCBuiltin<"__builtin_altivec_vaddeuqm">, 555 Intrinsic<[llvm_v1i128_ty], 556 [llvm_v1i128_ty, llvm_v1i128_ty, llvm_v1i128_ty], 557 [IntrNoMem]>; 558 def int_ppc_altivec_vaddecuq : GCCBuiltin<"__builtin_altivec_vaddecuq">, 559 Intrinsic<[llvm_v1i128_ty], 560 [llvm_v1i128_ty, llvm_v1i128_ty, llvm_v1i128_ty], 561 [IntrNoMem]>; 562 563 // Sub Extended Quadword 564 def int_ppc_altivec_vsubeuqm : GCCBuiltin<"__builtin_altivec_vsubeuqm">, 565 Intrinsic<[llvm_v1i128_ty], 566 [llvm_v1i128_ty, llvm_v1i128_ty, llvm_v1i128_ty], 567 [IntrNoMem]>; 568 def int_ppc_altivec_vsubecuq : GCCBuiltin<"__builtin_altivec_vsubecuq">, 569 Intrinsic<[llvm_v1i128_ty], 570 [llvm_v1i128_ty, llvm_v1i128_ty, llvm_v1i128_ty], 571 [IntrNoMem]>; 572} 573 574def int_ppc_altivec_vsl : PowerPC_Vec_WWW_Intrinsic<"vsl">; 575def int_ppc_altivec_vslo : PowerPC_Vec_WWW_Intrinsic<"vslo">; 576 577def int_ppc_altivec_vslb : PowerPC_Vec_BBB_Intrinsic<"vslb">; 578def int_ppc_altivec_vslh : PowerPC_Vec_HHH_Intrinsic<"vslh">; 579def int_ppc_altivec_vslw : PowerPC_Vec_WWW_Intrinsic<"vslw">; 580 581// Right Shifts. 582def int_ppc_altivec_vsr : PowerPC_Vec_WWW_Intrinsic<"vsr">; 583def int_ppc_altivec_vsro : PowerPC_Vec_WWW_Intrinsic<"vsro">; 584 585def int_ppc_altivec_vsrb : PowerPC_Vec_BBB_Intrinsic<"vsrb">; 586def int_ppc_altivec_vsrh : PowerPC_Vec_HHH_Intrinsic<"vsrh">; 587def int_ppc_altivec_vsrw : PowerPC_Vec_WWW_Intrinsic<"vsrw">; 588def int_ppc_altivec_vsrab : PowerPC_Vec_BBB_Intrinsic<"vsrab">; 589def int_ppc_altivec_vsrah : PowerPC_Vec_HHH_Intrinsic<"vsrah">; 590def int_ppc_altivec_vsraw : PowerPC_Vec_WWW_Intrinsic<"vsraw">; 591 592// Rotates. 593def int_ppc_altivec_vrlb : PowerPC_Vec_BBB_Intrinsic<"vrlb">; 594def int_ppc_altivec_vrlh : PowerPC_Vec_HHH_Intrinsic<"vrlh">; 595def int_ppc_altivec_vrlw : PowerPC_Vec_WWW_Intrinsic<"vrlw">; 596def int_ppc_altivec_vrld : PowerPC_Vec_DDD_Intrinsic<"vrld">; 597 598let TargetPrefix = "ppc" in { // All PPC intrinsics start with "llvm.ppc.". 599 // Miscellaneous. 600 def int_ppc_altivec_lvsl : 601 Intrinsic<[llvm_v16i8_ty], [llvm_ptr_ty], [IntrNoMem]>; 602 def int_ppc_altivec_lvsr : 603 Intrinsic<[llvm_v16i8_ty], [llvm_ptr_ty], [IntrNoMem]>; 604 605 def int_ppc_altivec_vperm : GCCBuiltin<"__builtin_altivec_vperm_4si">, 606 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, 607 llvm_v4i32_ty, llvm_v16i8_ty], [IntrNoMem]>; 608 def int_ppc_altivec_vsel : GCCBuiltin<"__builtin_altivec_vsel_4si">, 609 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, 610 llvm_v4i32_ty, llvm_v4i32_ty], [IntrNoMem]>; 611 def int_ppc_altivec_vgbbd : GCCBuiltin<"__builtin_altivec_vgbbd">, 612 Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty], [IntrNoMem]>; 613 def int_ppc_altivec_vbpermq : GCCBuiltin<"__builtin_altivec_vbpermq">, 614 Intrinsic<[llvm_v2i64_ty], [llvm_v16i8_ty, llvm_v16i8_ty], 615 [IntrNoMem]>; 616} 617 618def int_ppc_altivec_vexptefp : PowerPC_Vec_FF_Intrinsic<"vexptefp">; 619def int_ppc_altivec_vlogefp : PowerPC_Vec_FF_Intrinsic<"vlogefp">; 620def int_ppc_altivec_vrefp : PowerPC_Vec_FF_Intrinsic<"vrefp">; 621def int_ppc_altivec_vrsqrtefp : PowerPC_Vec_FF_Intrinsic<"vrsqrtefp">; 622 623// Power8 Intrinsics 624// Crypto 625let TargetPrefix = "ppc" in { // All PPC intrinsics start with "llvm.ppc.". 626 def int_ppc_altivec_crypto_vsbox : 627 GCCBuiltin<"__builtin_altivec_crypto_vsbox">, 628 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty], [IntrNoMem]>; 629 def int_ppc_altivec_crypto_vpermxor : 630 GCCBuiltin<"__builtin_altivec_crypto_vpermxor">, 631 Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, 632 llvm_v16i8_ty, llvm_v16i8_ty], [IntrNoMem]>; 633 634def int_ppc_altivec_crypto_vshasigmad : 635 GCCBuiltin<"__builtin_altivec_crypto_vshasigmad">, 636 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, 637 llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>; 638def int_ppc_altivec_crypto_vshasigmaw : 639 GCCBuiltin<"__builtin_altivec_crypto_vshasigmaw">, 640 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, 641 llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>; 642} 643def int_ppc_altivec_crypto_vcipher : 644 PowerPC_Vec_DDD_Intrinsic<"crypto_vcipher">; 645def int_ppc_altivec_crypto_vcipherlast : 646 PowerPC_Vec_DDD_Intrinsic<"crypto_vcipherlast">; 647def int_ppc_altivec_crypto_vncipher : 648 PowerPC_Vec_DDD_Intrinsic<"crypto_vncipher">; 649def int_ppc_altivec_crypto_vncipherlast : 650 PowerPC_Vec_DDD_Intrinsic<"crypto_vncipherlast">; 651def int_ppc_altivec_crypto_vpmsumb : 652 PowerPC_Vec_BBB_Intrinsic<"crypto_vpmsumb">; 653def int_ppc_altivec_crypto_vpmsumh : 654 PowerPC_Vec_HHH_Intrinsic<"crypto_vpmsumh">; 655def int_ppc_altivec_crypto_vpmsumw : 656 PowerPC_Vec_WWW_Intrinsic<"crypto_vpmsumw">; 657def int_ppc_altivec_crypto_vpmsumd : 658 PowerPC_Vec_DDD_Intrinsic<"crypto_vpmsumd">; 659 660//===----------------------------------------------------------------------===// 661// PowerPC VSX Intrinsic Definitions. 662 663let TargetPrefix = "ppc" in { // All intrinsics start with "llvm.ppc.". 664 665// Vector load. 666def int_ppc_vsx_lxvw4x : 667 Intrinsic<[llvm_v4i32_ty], [llvm_ptr_ty], [IntrReadArgMem]>; 668def int_ppc_vsx_lxvd2x : 669 Intrinsic<[llvm_v2f64_ty], [llvm_ptr_ty], [IntrReadArgMem]>; 670 671// Vector store. 672def int_ppc_vsx_stxvw4x : 673 Intrinsic<[], [llvm_v4i32_ty, llvm_ptr_ty], [IntrReadWriteArgMem]>; 674def int_ppc_vsx_stxvd2x : 675 Intrinsic<[], [llvm_v2f64_ty, llvm_ptr_ty], [IntrReadWriteArgMem]>; 676 677// Vector and scalar maximum. 678def int_ppc_vsx_xvmaxdp : PowerPC_VSX_Vec_DDD_Intrinsic<"xvmaxdp">; 679def int_ppc_vsx_xvmaxsp : PowerPC_VSX_Vec_FFF_Intrinsic<"xvmaxsp">; 680def int_ppc_vsx_xsmaxdp : PowerPC_VSX_Sca_DDD_Intrinsic<"xsmaxdp">; 681 682// Vector and scalar minimum. 683def int_ppc_vsx_xvmindp : PowerPC_VSX_Vec_DDD_Intrinsic<"xvmindp">; 684def int_ppc_vsx_xvminsp : PowerPC_VSX_Vec_FFF_Intrinsic<"xvminsp">; 685def int_ppc_vsx_xsmindp : PowerPC_VSX_Sca_DDD_Intrinsic<"xsmindp">; 686 687// Vector divide. 688def int_ppc_vsx_xvdivdp : PowerPC_VSX_Vec_DDD_Intrinsic<"xvdivdp">; 689def int_ppc_vsx_xvdivsp : PowerPC_VSX_Vec_FFF_Intrinsic<"xvdivsp">; 690 691// Vector round-to-infinity (ceil) 692def int_ppc_vsx_xvrspip : 693 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty], [IntrNoMem]>; 694def int_ppc_vsx_xvrdpip : 695 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty], [IntrNoMem]>; 696 697// Vector reciprocal estimate 698def int_ppc_vsx_xvresp : GCCBuiltin<"__builtin_vsx_xvresp">, 699 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty], [IntrNoMem]>; 700def int_ppc_vsx_xvredp : GCCBuiltin<"__builtin_vsx_xvredp">, 701 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty], [IntrNoMem]>; 702 703// Vector rsqrte 704def int_ppc_vsx_xvrsqrtesp : GCCBuiltin<"__builtin_vsx_xvrsqrtesp">, 705 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty], [IntrNoMem]>; 706def int_ppc_vsx_xvrsqrtedp : GCCBuiltin<"__builtin_vsx_xvrsqrtedp">, 707 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty], [IntrNoMem]>; 708 709// Vector compare 710def int_ppc_vsx_xvcmpeqdp : 711 PowerPC_VSX_Intrinsic<"xvcmpeqdp", [llvm_v2i64_ty], 712 [llvm_v2f64_ty, llvm_v2f64_ty], [IntrNoMem]>; 713def int_ppc_vsx_xvcmpeqdp_p : GCCBuiltin<"__builtin_vsx_xvcmpeqdp_p">, 714 Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v2f64_ty,llvm_v2f64_ty], 715 [IntrNoMem]>; 716def int_ppc_vsx_xvcmpeqsp : 717 PowerPC_VSX_Intrinsic<"xvcmpeqsp", [llvm_v4i32_ty], 718 [llvm_v4f32_ty, llvm_v4f32_ty], [IntrNoMem]>; 719def int_ppc_vsx_xvcmpeqsp_p : GCCBuiltin<"__builtin_vsx_xvcmpeqsp_p">, 720 Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v4f32_ty,llvm_v4f32_ty], 721 [IntrNoMem]>; 722def int_ppc_vsx_xvcmpgedp : 723 PowerPC_VSX_Intrinsic<"xvcmpgedp", [llvm_v2i64_ty], 724 [llvm_v2f64_ty, llvm_v2f64_ty], [IntrNoMem]>; 725def int_ppc_vsx_xvcmpgedp_p : GCCBuiltin<"__builtin_vsx_xvcmpgedp_p">, 726 Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v2f64_ty,llvm_v2f64_ty], 727 [IntrNoMem]>; 728def int_ppc_vsx_xvcmpgesp : 729 PowerPC_VSX_Intrinsic<"xvcmpgesp", [llvm_v4i32_ty], 730 [llvm_v4f32_ty, llvm_v4f32_ty], [IntrNoMem]>; 731def int_ppc_vsx_xvcmpgesp_p : GCCBuiltin<"__builtin_vsx_xvcmpgesp_p">, 732 Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v4f32_ty,llvm_v4f32_ty], 733 [IntrNoMem]>; 734def int_ppc_vsx_xvcmpgtdp : 735 PowerPC_VSX_Intrinsic<"xvcmpgtdp", [llvm_v2i64_ty], 736 [llvm_v2f64_ty, llvm_v2f64_ty], [IntrNoMem]>; 737def int_ppc_vsx_xvcmpgtdp_p : GCCBuiltin<"__builtin_vsx_xvcmpgtdp_p">, 738 Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v2f64_ty,llvm_v2f64_ty], 739 [IntrNoMem]>; 740def int_ppc_vsx_xvcmpgtsp : 741 PowerPC_VSX_Intrinsic<"xvcmpgtsp", [llvm_v4i32_ty], 742 [llvm_v4f32_ty, llvm_v4f32_ty], [IntrNoMem]>; 743def int_ppc_vsx_xvcmpgtsp_p : GCCBuiltin<"__builtin_vsx_xvcmpgtsp_p">, 744 Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v4f32_ty,llvm_v4f32_ty], 745 [IntrNoMem]>; 746def int_ppc_vsx_xxleqv : 747 PowerPC_VSX_Intrinsic<"xxleqv", [llvm_v4i32_ty], 748 [llvm_v4i32_ty, llvm_v4i32_ty], [IntrNoMem]>; 749} 750 751//===----------------------------------------------------------------------===// 752// PowerPC QPX Intrinsics. 753// 754 755let TargetPrefix = "ppc" in { // All PPC intrinsics start with "llvm.ppc.". 756 /// PowerPC_QPX_Intrinsic - Base class for all QPX intrinsics. 757 class PowerPC_QPX_Intrinsic<string GCCIntSuffix, list<LLVMType> ret_types, 758 list<LLVMType> param_types, 759 list<IntrinsicProperty> properties> 760 : GCCBuiltin<!strconcat("__builtin_qpx_", GCCIntSuffix)>, 761 Intrinsic<ret_types, param_types, properties>; 762} 763 764//===----------------------------------------------------------------------===// 765// PowerPC QPX Intrinsic Class Definitions. 766// 767 768/// PowerPC_QPX_FF_Intrinsic - A PowerPC intrinsic that takes one v4f64 769/// vector and returns one. These intrinsics have no side effects. 770class PowerPC_QPX_FF_Intrinsic<string GCCIntSuffix> 771 : PowerPC_QPX_Intrinsic<GCCIntSuffix, 772 [llvm_v4f64_ty], [llvm_v4f64_ty], [IntrNoMem]>; 773 774/// PowerPC_QPX_FFF_Intrinsic - A PowerPC intrinsic that takes two v4f64 775/// vectors and returns one. These intrinsics have no side effects. 776class PowerPC_QPX_FFF_Intrinsic<string GCCIntSuffix> 777 : PowerPC_QPX_Intrinsic<GCCIntSuffix, 778 [llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty], 779 [IntrNoMem]>; 780 781/// PowerPC_QPX_FFFF_Intrinsic - A PowerPC intrinsic that takes three v4f64 782/// vectors and returns one. These intrinsics have no side effects. 783class PowerPC_QPX_FFFF_Intrinsic<string GCCIntSuffix> 784 : PowerPC_QPX_Intrinsic<GCCIntSuffix, 785 [llvm_v4f64_ty], 786 [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty], 787 [IntrNoMem]>; 788 789/// PowerPC_QPX_Load_Intrinsic - A PowerPC intrinsic that takes a pointer 790/// and returns a v4f64. 791class PowerPC_QPX_Load_Intrinsic<string GCCIntSuffix> 792 : PowerPC_QPX_Intrinsic<GCCIntSuffix, 793 [llvm_v4f64_ty], [llvm_ptr_ty], [IntrReadArgMem]>; 794 795/// PowerPC_QPX_LoadPerm_Intrinsic - A PowerPC intrinsic that takes a pointer 796/// and returns a v4f64 permutation. 797class PowerPC_QPX_LoadPerm_Intrinsic<string GCCIntSuffix> 798 : PowerPC_QPX_Intrinsic<GCCIntSuffix, 799 [llvm_v4f64_ty], [llvm_ptr_ty], [IntrNoMem]>; 800 801/// PowerPC_QPX_Store_Intrinsic - A PowerPC intrinsic that takes a pointer 802/// and stores a v4f64. 803class PowerPC_QPX_Store_Intrinsic<string GCCIntSuffix> 804 : PowerPC_QPX_Intrinsic<GCCIntSuffix, 805 [], [llvm_v4f64_ty, llvm_ptr_ty], 806 [IntrReadWriteArgMem]>; 807 808//===----------------------------------------------------------------------===// 809// PowerPC QPX Intrinsic Definitions. 810 811let TargetPrefix = "ppc" in { // All intrinsics start with "llvm.ppc.". 812 // Add Instructions 813 def int_ppc_qpx_qvfadd : PowerPC_QPX_FFF_Intrinsic<"qvfadd">; 814 def int_ppc_qpx_qvfadds : PowerPC_QPX_FFF_Intrinsic<"qvfadds">; 815 def int_ppc_qpx_qvfsub : PowerPC_QPX_FFF_Intrinsic<"qvfsub">; 816 def int_ppc_qpx_qvfsubs : PowerPC_QPX_FFF_Intrinsic<"qvfsubs">; 817 818 // Estimate Instructions 819 def int_ppc_qpx_qvfre : PowerPC_QPX_FF_Intrinsic<"qvfre">; 820 def int_ppc_qpx_qvfres : PowerPC_QPX_FF_Intrinsic<"qvfres">; 821 def int_ppc_qpx_qvfrsqrte : PowerPC_QPX_FF_Intrinsic<"qvfrsqrte">; 822 def int_ppc_qpx_qvfrsqrtes : PowerPC_QPX_FF_Intrinsic<"qvfrsqrtes">; 823 824 // Multiply Instructions 825 def int_ppc_qpx_qvfmul : PowerPC_QPX_FFF_Intrinsic<"qvfmul">; 826 def int_ppc_qpx_qvfmuls : PowerPC_QPX_FFF_Intrinsic<"qvfmuls">; 827 def int_ppc_qpx_qvfxmul : PowerPC_QPX_FFF_Intrinsic<"qvfxmul">; 828 def int_ppc_qpx_qvfxmuls : PowerPC_QPX_FFF_Intrinsic<"qvfxmuls">; 829 830 // Multiply-add instructions 831 def int_ppc_qpx_qvfmadd : PowerPC_QPX_FFFF_Intrinsic<"qvfmadd">; 832 def int_ppc_qpx_qvfmadds : PowerPC_QPX_FFFF_Intrinsic<"qvfmadds">; 833 def int_ppc_qpx_qvfnmadd : PowerPC_QPX_FFFF_Intrinsic<"qvfnmadd">; 834 def int_ppc_qpx_qvfnmadds : PowerPC_QPX_FFFF_Intrinsic<"qvfnmadds">; 835 def int_ppc_qpx_qvfmsub : PowerPC_QPX_FFFF_Intrinsic<"qvfmsub">; 836 def int_ppc_qpx_qvfmsubs : PowerPC_QPX_FFFF_Intrinsic<"qvfmsubs">; 837 def int_ppc_qpx_qvfnmsub : PowerPC_QPX_FFFF_Intrinsic<"qvfnmsub">; 838 def int_ppc_qpx_qvfnmsubs : PowerPC_QPX_FFFF_Intrinsic<"qvfnmsubs">; 839 def int_ppc_qpx_qvfxmadd : PowerPC_QPX_FFFF_Intrinsic<"qvfxmadd">; 840 def int_ppc_qpx_qvfxmadds : PowerPC_QPX_FFFF_Intrinsic<"qvfxmadds">; 841 def int_ppc_qpx_qvfxxnpmadd : PowerPC_QPX_FFFF_Intrinsic<"qvfxxnpmadd">; 842 def int_ppc_qpx_qvfxxnpmadds : PowerPC_QPX_FFFF_Intrinsic<"qvfxxnpmadds">; 843 def int_ppc_qpx_qvfxxcpnmadd : PowerPC_QPX_FFFF_Intrinsic<"qvfxxcpnmadd">; 844 def int_ppc_qpx_qvfxxcpnmadds : PowerPC_QPX_FFFF_Intrinsic<"qvfxxcpnmadds">; 845 def int_ppc_qpx_qvfxxmadd : PowerPC_QPX_FFFF_Intrinsic<"qvfxxmadd">; 846 def int_ppc_qpx_qvfxxmadds : PowerPC_QPX_FFFF_Intrinsic<"qvfxxmadds">; 847 848 // Select Instruction 849 def int_ppc_qpx_qvfsel : PowerPC_QPX_FFFF_Intrinsic<"qvfsel">; 850 851 // Permute Instruction 852 def int_ppc_qpx_qvfperm : PowerPC_QPX_FFFF_Intrinsic<"qvfperm">; 853 854 // Convert and Round Instructions 855 def int_ppc_qpx_qvfctid : PowerPC_QPX_FF_Intrinsic<"qvfctid">; 856 def int_ppc_qpx_qvfctidu : PowerPC_QPX_FF_Intrinsic<"qvfctidu">; 857 def int_ppc_qpx_qvfctidz : PowerPC_QPX_FF_Intrinsic<"qvfctidz">; 858 def int_ppc_qpx_qvfctiduz : PowerPC_QPX_FF_Intrinsic<"qvfctiduz">; 859 def int_ppc_qpx_qvfctiw : PowerPC_QPX_FF_Intrinsic<"qvfctiw">; 860 def int_ppc_qpx_qvfctiwu : PowerPC_QPX_FF_Intrinsic<"qvfctiwu">; 861 def int_ppc_qpx_qvfctiwz : PowerPC_QPX_FF_Intrinsic<"qvfctiwz">; 862 def int_ppc_qpx_qvfctiwuz : PowerPC_QPX_FF_Intrinsic<"qvfctiwuz">; 863 def int_ppc_qpx_qvfcfid : PowerPC_QPX_FF_Intrinsic<"qvfcfid">; 864 def int_ppc_qpx_qvfcfidu : PowerPC_QPX_FF_Intrinsic<"qvfcfidu">; 865 def int_ppc_qpx_qvfcfids : PowerPC_QPX_FF_Intrinsic<"qvfcfids">; 866 def int_ppc_qpx_qvfcfidus : PowerPC_QPX_FF_Intrinsic<"qvfcfidus">; 867 def int_ppc_qpx_qvfrsp : PowerPC_QPX_FF_Intrinsic<"qvfrsp">; 868 def int_ppc_qpx_qvfriz : PowerPC_QPX_FF_Intrinsic<"qvfriz">; 869 def int_ppc_qpx_qvfrin : PowerPC_QPX_FF_Intrinsic<"qvfrin">; 870 def int_ppc_qpx_qvfrip : PowerPC_QPX_FF_Intrinsic<"qvfrip">; 871 def int_ppc_qpx_qvfrim : PowerPC_QPX_FF_Intrinsic<"qvfrim">; 872 873 // Move Instructions 874 def int_ppc_qpx_qvfneg : PowerPC_QPX_FF_Intrinsic<"qvfneg">; 875 def int_ppc_qpx_qvfabs : PowerPC_QPX_FF_Intrinsic<"qvfabs">; 876 def int_ppc_qpx_qvfnabs : PowerPC_QPX_FF_Intrinsic<"qvfnabs">; 877 def int_ppc_qpx_qvfcpsgn : PowerPC_QPX_FFF_Intrinsic<"qvfcpsgn">; 878 879 // Compare Instructions 880 def int_ppc_qpx_qvftstnan : PowerPC_QPX_FFF_Intrinsic<"qvftstnan">; 881 def int_ppc_qpx_qvfcmplt : PowerPC_QPX_FFF_Intrinsic<"qvfcmplt">; 882 def int_ppc_qpx_qvfcmpgt : PowerPC_QPX_FFF_Intrinsic<"qvfcmpgt">; 883 def int_ppc_qpx_qvfcmpeq : PowerPC_QPX_FFF_Intrinsic<"qvfcmpeq">; 884 885 // Load instructions 886 def int_ppc_qpx_qvlfd : PowerPC_QPX_Load_Intrinsic<"qvlfd">; 887 def int_ppc_qpx_qvlfda : PowerPC_QPX_Load_Intrinsic<"qvlfda">; 888 def int_ppc_qpx_qvlfs : PowerPC_QPX_Load_Intrinsic<"qvlfs">; 889 def int_ppc_qpx_qvlfsa : PowerPC_QPX_Load_Intrinsic<"qvlfsa">; 890 891 def int_ppc_qpx_qvlfcda : PowerPC_QPX_Load_Intrinsic<"qvlfcda">; 892 def int_ppc_qpx_qvlfcd : PowerPC_QPX_Load_Intrinsic<"qvlfcd">; 893 def int_ppc_qpx_qvlfcsa : PowerPC_QPX_Load_Intrinsic<"qvlfcsa">; 894 def int_ppc_qpx_qvlfcs : PowerPC_QPX_Load_Intrinsic<"qvlfcs">; 895 def int_ppc_qpx_qvlfiwaa : PowerPC_QPX_Load_Intrinsic<"qvlfiwaa">; 896 def int_ppc_qpx_qvlfiwa : PowerPC_QPX_Load_Intrinsic<"qvlfiwa">; 897 def int_ppc_qpx_qvlfiwza : PowerPC_QPX_Load_Intrinsic<"qvlfiwza">; 898 def int_ppc_qpx_qvlfiwz : PowerPC_QPX_Load_Intrinsic<"qvlfiwz">; 899 900 def int_ppc_qpx_qvlpcld : PowerPC_QPX_LoadPerm_Intrinsic<"qvlpcld">; 901 def int_ppc_qpx_qvlpcls : PowerPC_QPX_LoadPerm_Intrinsic<"qvlpcls">; 902 def int_ppc_qpx_qvlpcrd : PowerPC_QPX_LoadPerm_Intrinsic<"qvlpcrd">; 903 def int_ppc_qpx_qvlpcrs : PowerPC_QPX_LoadPerm_Intrinsic<"qvlpcrs">; 904 905 // Store instructions 906 def int_ppc_qpx_qvstfd : PowerPC_QPX_Store_Intrinsic<"qvstfd">; 907 def int_ppc_qpx_qvstfda : PowerPC_QPX_Store_Intrinsic<"qvstfda">; 908 def int_ppc_qpx_qvstfs : PowerPC_QPX_Store_Intrinsic<"qvstfs">; 909 def int_ppc_qpx_qvstfsa : PowerPC_QPX_Store_Intrinsic<"qvstfsa">; 910 911 def int_ppc_qpx_qvstfcda : PowerPC_QPX_Store_Intrinsic<"qvstfcda">; 912 def int_ppc_qpx_qvstfcd : PowerPC_QPX_Store_Intrinsic<"qvstfcd">; 913 def int_ppc_qpx_qvstfcsa : PowerPC_QPX_Store_Intrinsic<"qvstfcsa">; 914 def int_ppc_qpx_qvstfcs : PowerPC_QPX_Store_Intrinsic<"qvstfcs">; 915 def int_ppc_qpx_qvstfiwa : PowerPC_QPX_Store_Intrinsic<"qvstfiwa">; 916 def int_ppc_qpx_qvstfiw : PowerPC_QPX_Store_Intrinsic<"qvstfiw">; 917 918 // Logical and permutation formation 919 def int_ppc_qpx_qvflogical : PowerPC_QPX_Intrinsic<"qvflogical", 920 [llvm_v4f64_ty], 921 [llvm_v4f64_ty, llvm_v4f64_ty, llvm_i32_ty], 922 [IntrNoMem]>; 923 def int_ppc_qpx_qvgpci : PowerPC_QPX_Intrinsic<"qvgpci", 924 [llvm_v4f64_ty], [llvm_i32_ty], [IntrNoMem]>; 925} 926 927//===----------------------------------------------------------------------===// 928// PowerPC HTM Intrinsic Definitions. 929 930let TargetPrefix = "ppc" in { // All intrinsics start with "llvm.ppc.". 931 932def int_ppc_tbegin : GCCBuiltin<"__builtin_tbegin">, 933 Intrinsic<[llvm_i32_ty], [llvm_i32_ty], []>; 934def int_ppc_tend : GCCBuiltin<"__builtin_tend">, 935 Intrinsic<[llvm_i32_ty], [llvm_i32_ty], []>; 936 937def int_ppc_tabort : GCCBuiltin<"__builtin_tabort">, 938 Intrinsic<[llvm_i32_ty], [llvm_i32_ty], []>; 939def int_ppc_tabortwc : GCCBuiltin<"__builtin_tabortwc">, 940 Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], []>; 941def int_ppc_tabortwci : GCCBuiltin<"__builtin_tabortwci">, 942 Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], []>; 943def int_ppc_tabortdc : GCCBuiltin<"__builtin_tabortdc">, 944 Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], []>; 945def int_ppc_tabortdci : GCCBuiltin<"__builtin_tabortdci">, 946 Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], []>; 947 948def int_ppc_tcheck : GCCBuiltin<"__builtin_tcheck">, 949 Intrinsic<[llvm_i32_ty], [], []>; 950def int_ppc_treclaim : GCCBuiltin<"__builtin_treclaim">, 951 Intrinsic<[llvm_i32_ty], [llvm_i32_ty], []>; 952def int_ppc_trechkpt : GCCBuiltin<"__builtin_trechkpt">, 953 Intrinsic<[llvm_i32_ty], [], []>; 954def int_ppc_tsr : GCCBuiltin<"__builtin_tsr">, 955 Intrinsic<[llvm_i32_ty], [llvm_i32_ty], []>; 956 957def int_ppc_get_texasr : GCCBuiltin<"__builtin_get_texasr">, 958 Intrinsic<[llvm_i64_ty], [], []>; 959def int_ppc_get_texasru : GCCBuiltin<"__builtin_get_texasru">, 960 Intrinsic<[llvm_i64_ty], [], []>; 961def int_ppc_get_tfhar : GCCBuiltin<"__builtin_get_tfhar">, 962 Intrinsic<[llvm_i64_ty], [], []>; 963def int_ppc_get_tfiar : GCCBuiltin<"__builtin_get_tfiar">, 964 Intrinsic<[llvm_i64_ty], [], []>; 965 966def int_ppc_set_texasr : GCCBuiltin<"__builtin_set_texasr">, 967 Intrinsic<[], [llvm_i64_ty], []>; 968def int_ppc_set_texasru : GCCBuiltin<"__builtin_set_texasru">, 969 Intrinsic<[], [llvm_i64_ty], []>; 970def int_ppc_set_tfhar : GCCBuiltin<"__builtin_set_tfhar">, 971 Intrinsic<[], [llvm_i64_ty], []>; 972def int_ppc_set_tfiar : GCCBuiltin<"__builtin_set_tfiar">, 973 Intrinsic<[], [llvm_i64_ty], []>; 974 975// Extended mnemonics 976def int_ppc_tendall : GCCBuiltin<"__builtin_tendall">, 977 Intrinsic<[llvm_i32_ty], [], []>; 978def int_ppc_tresume : GCCBuiltin<"__builtin_tresume">, 979 Intrinsic<[llvm_i32_ty], [], []>; 980def int_ppc_tsuspend : GCCBuiltin<"__builtin_tsuspend">, 981 Intrinsic<[llvm_i32_ty], [], []>; 982 983def int_ppc_ttest : GCCBuiltin<"__builtin_ttest">, 984 Intrinsic<[llvm_i64_ty], [], []>; 985} 986