IntrinsicsPowerPC.td 48 KB

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