aarch64-simd-builtins.def 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408
  1. /* Machine description for AArch64 architecture.
  2. Copyright (C) 2012-2015 Free Software Foundation, Inc.
  3. Contributed by ARM Ltd.
  4. This file is part of GCC.
  5. GCC is free software; you can redistribute it and/or modify it
  6. under the terms of the GNU General Public License as published by
  7. the Free Software Foundation; either version 3, or (at your option)
  8. any later version.
  9. GCC is distributed in the hope that it will be useful, but
  10. WITHOUT ANY WARRANTY; without even the implied warranty of
  11. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  12. General Public License for more details.
  13. You should have received a copy of the GNU General Public License
  14. along with GCC; see the file COPYING3. If not see
  15. <http://www.gnu.org/licenses/>. */
  16. /* In the list below, the BUILTIN_<ITERATOR> macros expand to create
  17. builtins for each of the modes described by <ITERATOR>. When adding
  18. new builtins to this list, a helpful idiom to follow is to add
  19. a line for each pattern in the md file. Thus, ADDP, which has one
  20. pattern defined for the VD_BHSI iterator, and one for DImode, has two
  21. entries below.
  22. Parameter 1 is the 'type' of the intrinsic. This is used to
  23. describe the type modifiers (for example; unsigned) applied to
  24. each of the parameters to the intrinsic function.
  25. Parameter 2 is the name of the intrinsic. This is appended
  26. to `__builtin_aarch64_<name><mode>` to give the intrinsic name
  27. as exported to the front-ends.
  28. Parameter 3 describes how to map from the name to the CODE_FOR_
  29. macro holding the RTL pattern for the intrinsic. This mapping is:
  30. 0 - CODE_FOR_aarch64_<name><mode>
  31. 1-9 - CODE_FOR_<name><mode><1-9>
  32. 10 - CODE_FOR_<name><mode>. */
  33. BUILTIN_VDC (COMBINE, combine, 0)
  34. BUILTIN_VB (BINOP, pmul, 0)
  35. BUILTIN_VDQF_DF (UNOP, sqrt, 2)
  36. BUILTIN_VD_BHSI (BINOP, addp, 0)
  37. VAR1 (UNOP, addp, 0, di)
  38. BUILTIN_VDQ_BHSI (UNOP, clrsb, 2)
  39. BUILTIN_VDQ_BHSI (UNOP, clz, 2)
  40. BUILTIN_VS (UNOP, ctz, 2)
  41. BUILTIN_VB (UNOP, popcount, 2)
  42. /* Implemented by aarch64_<sur>q<r>shl<mode>. */
  43. BUILTIN_VSDQ_I (BINOP, sqshl, 0)
  44. BUILTIN_VSDQ_I (BINOP_UUS, uqshl, 0)
  45. BUILTIN_VSDQ_I (BINOP, sqrshl, 0)
  46. BUILTIN_VSDQ_I (BINOP_UUS, uqrshl, 0)
  47. /* Implemented by aarch64_<su_optab><optab><mode>. */
  48. BUILTIN_VSDQ_I (BINOP, sqadd, 0)
  49. BUILTIN_VSDQ_I (BINOPU, uqadd, 0)
  50. BUILTIN_VSDQ_I (BINOP, sqsub, 0)
  51. BUILTIN_VSDQ_I (BINOPU, uqsub, 0)
  52. /* Implemented by aarch64_<sur>qadd<mode>. */
  53. BUILTIN_VSDQ_I (BINOP_SSU, suqadd, 0)
  54. BUILTIN_VSDQ_I (BINOP_UUS, usqadd, 0)
  55. /* Implemented by aarch64_get_dreg<VSTRUCT:mode><VDC:mode>. */
  56. BUILTIN_VDC (GETREG, get_dregoi, 0)
  57. BUILTIN_VDC (GETREG, get_dregci, 0)
  58. BUILTIN_VDC (GETREG, get_dregxi, 0)
  59. /* Implemented by aarch64_get_qreg<VSTRUCT:mode><VQ:mode>. */
  60. BUILTIN_VQ (GETREG, get_qregoi, 0)
  61. BUILTIN_VQ (GETREG, get_qregci, 0)
  62. BUILTIN_VQ (GETREG, get_qregxi, 0)
  63. /* Implemented by aarch64_set_qreg<VSTRUCT:mode><VQ:mode>. */
  64. BUILTIN_VQ (SETREG, set_qregoi, 0)
  65. BUILTIN_VQ (SETREG, set_qregci, 0)
  66. BUILTIN_VQ (SETREG, set_qregxi, 0)
  67. /* Implemented by aarch64_ld<VSTRUCT:nregs><VDC:mode>. */
  68. BUILTIN_VDC (LOADSTRUCT, ld2, 0)
  69. BUILTIN_VDC (LOADSTRUCT, ld3, 0)
  70. BUILTIN_VDC (LOADSTRUCT, ld4, 0)
  71. /* Implemented by aarch64_ld<VSTRUCT:nregs><VQ:mode>. */
  72. BUILTIN_VQ (LOADSTRUCT, ld2, 0)
  73. BUILTIN_VQ (LOADSTRUCT, ld3, 0)
  74. BUILTIN_VQ (LOADSTRUCT, ld4, 0)
  75. /* Implemented by aarch64_ld<VSTRUCT:nregs>r<VALLDIF:mode>. */
  76. BUILTIN_VALLDIF (LOADSTRUCT, ld2r, 0)
  77. BUILTIN_VALLDIF (LOADSTRUCT, ld3r, 0)
  78. BUILTIN_VALLDIF (LOADSTRUCT, ld4r, 0)
  79. /* Implemented by aarch64_ld<VSTRUCT:nregs>_lane<VQ:mode>. */
  80. BUILTIN_VQ (LOADSTRUCT_LANE, ld2_lane, 0)
  81. BUILTIN_VQ (LOADSTRUCT_LANE, ld3_lane, 0)
  82. BUILTIN_VQ (LOADSTRUCT_LANE, ld4_lane, 0)
  83. /* Implemented by aarch64_st<VSTRUCT:nregs><VDC:mode>. */
  84. BUILTIN_VDC (STORESTRUCT, st2, 0)
  85. BUILTIN_VDC (STORESTRUCT, st3, 0)
  86. BUILTIN_VDC (STORESTRUCT, st4, 0)
  87. /* Implemented by aarch64_st<VSTRUCT:nregs><VQ:mode>. */
  88. BUILTIN_VQ (STORESTRUCT, st2, 0)
  89. BUILTIN_VQ (STORESTRUCT, st3, 0)
  90. BUILTIN_VQ (STORESTRUCT, st4, 0)
  91. BUILTIN_VQ (STORESTRUCT_LANE, st2_lane, 0)
  92. BUILTIN_VQ (STORESTRUCT_LANE, st3_lane, 0)
  93. BUILTIN_VQ (STORESTRUCT_LANE, st4_lane, 0)
  94. BUILTIN_VQW (BINOP, saddl2, 0)
  95. BUILTIN_VQW (BINOP, uaddl2, 0)
  96. BUILTIN_VQW (BINOP, ssubl2, 0)
  97. BUILTIN_VQW (BINOP, usubl2, 0)
  98. BUILTIN_VQW (BINOP, saddw2, 0)
  99. BUILTIN_VQW (BINOP, uaddw2, 0)
  100. BUILTIN_VQW (BINOP, ssubw2, 0)
  101. BUILTIN_VQW (BINOP, usubw2, 0)
  102. /* Implemented by aarch64_<ANY_EXTEND:su><ADDSUB:optab>l<mode>. */
  103. BUILTIN_VD_BHSI (BINOP, saddl, 0)
  104. BUILTIN_VD_BHSI (BINOP, uaddl, 0)
  105. BUILTIN_VD_BHSI (BINOP, ssubl, 0)
  106. BUILTIN_VD_BHSI (BINOP, usubl, 0)
  107. /* Implemented by aarch64_<ANY_EXTEND:su><ADDSUB:optab>w<mode>. */
  108. BUILTIN_VD_BHSI (BINOP, saddw, 0)
  109. BUILTIN_VD_BHSI (BINOP, uaddw, 0)
  110. BUILTIN_VD_BHSI (BINOP, ssubw, 0)
  111. BUILTIN_VD_BHSI (BINOP, usubw, 0)
  112. /* Implemented by aarch64_<sur>h<addsub><mode>. */
  113. BUILTIN_VDQ_BHSI (BINOP, shadd, 0)
  114. BUILTIN_VDQ_BHSI (BINOP, shsub, 0)
  115. BUILTIN_VDQ_BHSI (BINOP, uhadd, 0)
  116. BUILTIN_VDQ_BHSI (BINOP, uhsub, 0)
  117. BUILTIN_VDQ_BHSI (BINOP, srhadd, 0)
  118. BUILTIN_VDQ_BHSI (BINOP, urhadd, 0)
  119. /* Implemented by aarch64_<sur><addsub>hn<mode>. */
  120. BUILTIN_VQN (BINOP, addhn, 0)
  121. BUILTIN_VQN (BINOP, subhn, 0)
  122. BUILTIN_VQN (BINOP, raddhn, 0)
  123. BUILTIN_VQN (BINOP, rsubhn, 0)
  124. /* Implemented by aarch64_<sur><addsub>hn2<mode>. */
  125. BUILTIN_VQN (TERNOP, addhn2, 0)
  126. BUILTIN_VQN (TERNOP, subhn2, 0)
  127. BUILTIN_VQN (TERNOP, raddhn2, 0)
  128. BUILTIN_VQN (TERNOP, rsubhn2, 0)
  129. BUILTIN_VSQN_HSDI (UNOP, sqmovun, 0)
  130. /* Implemented by aarch64_<sur>qmovn<mode>. */
  131. BUILTIN_VSQN_HSDI (UNOP, sqmovn, 0)
  132. BUILTIN_VSQN_HSDI (UNOP, uqmovn, 0)
  133. /* Implemented by aarch64_s<optab><mode>. */
  134. BUILTIN_VSDQ_I (UNOP, sqabs, 0)
  135. BUILTIN_VSDQ_I (UNOP, sqneg, 0)
  136. /* Implemented by aarch64_sqdml<SBINQOPS:as>l<mode>. */
  137. BUILTIN_VSD_HSI (TERNOP, sqdmlal, 0)
  138. BUILTIN_VSD_HSI (TERNOP, sqdmlsl, 0)
  139. /* Implemented by aarch64_sqdml<SBINQOPS:as>l_lane<mode>. */
  140. BUILTIN_VSD_HSI (QUADOP_LANE, sqdmlal_lane, 0)
  141. BUILTIN_VSD_HSI (QUADOP_LANE, sqdmlsl_lane, 0)
  142. /* Implemented by aarch64_sqdml<SBINQOPS:as>l_laneq<mode>. */
  143. BUILTIN_VSD_HSI (QUADOP_LANE, sqdmlal_laneq, 0)
  144. BUILTIN_VSD_HSI (QUADOP_LANE, sqdmlsl_laneq, 0)
  145. /* Implemented by aarch64_sqdml<SBINQOPS:as>l_n<mode>. */
  146. BUILTIN_VD_HSI (TERNOP, sqdmlal_n, 0)
  147. BUILTIN_VD_HSI (TERNOP, sqdmlsl_n, 0)
  148. BUILTIN_VQ_HSI (TERNOP, sqdmlal2, 0)
  149. BUILTIN_VQ_HSI (TERNOP, sqdmlsl2, 0)
  150. BUILTIN_VQ_HSI (QUADOP_LANE, sqdmlal2_lane, 0)
  151. BUILTIN_VQ_HSI (QUADOP_LANE, sqdmlsl2_lane, 0)
  152. BUILTIN_VQ_HSI (QUADOP_LANE, sqdmlal2_laneq, 0)
  153. BUILTIN_VQ_HSI (QUADOP_LANE, sqdmlsl2_laneq, 0)
  154. BUILTIN_VQ_HSI (TERNOP, sqdmlal2_n, 0)
  155. BUILTIN_VQ_HSI (TERNOP, sqdmlsl2_n, 0)
  156. BUILTIN_VSD_HSI (BINOP, sqdmull, 0)
  157. BUILTIN_VSD_HSI (TERNOP_LANE, sqdmull_lane, 0)
  158. BUILTIN_VSD_HSI (TERNOP_LANE, sqdmull_laneq, 0)
  159. BUILTIN_VD_HSI (BINOP, sqdmull_n, 0)
  160. BUILTIN_VQ_HSI (BINOP, sqdmull2, 0)
  161. BUILTIN_VQ_HSI (TERNOP_LANE, sqdmull2_lane, 0)
  162. BUILTIN_VQ_HSI (TERNOP_LANE, sqdmull2_laneq, 0)
  163. BUILTIN_VQ_HSI (BINOP, sqdmull2_n, 0)
  164. /* Implemented by aarch64_sq<r>dmulh<mode>. */
  165. BUILTIN_VSDQ_HSI (BINOP, sqdmulh, 0)
  166. BUILTIN_VSDQ_HSI (BINOP, sqrdmulh, 0)
  167. /* Implemented by aarch64_sq<r>dmulh_lane<q><mode>. */
  168. BUILTIN_VSDQ_HSI (TERNOP_LANE, sqdmulh_lane, 0)
  169. BUILTIN_VSDQ_HSI (TERNOP_LANE, sqdmulh_laneq, 0)
  170. BUILTIN_VSDQ_HSI (TERNOP_LANE, sqrdmulh_lane, 0)
  171. BUILTIN_VSDQ_HSI (TERNOP_LANE, sqrdmulh_laneq, 0)
  172. BUILTIN_VSDQ_I_DI (BINOP, ashl, 3)
  173. /* Implemented by aarch64_<sur>shl<mode>. */
  174. BUILTIN_VSDQ_I_DI (BINOP, sshl, 0)
  175. BUILTIN_VSDQ_I_DI (BINOP_UUS, ushl, 0)
  176. BUILTIN_VSDQ_I_DI (BINOP, srshl, 0)
  177. BUILTIN_VSDQ_I_DI (BINOP_UUS, urshl, 0)
  178. BUILTIN_VDQ_I (SHIFTIMM, ashr, 3)
  179. VAR1 (SHIFTIMM, ashr_simd, 0, di)
  180. BUILTIN_VDQ_I (SHIFTIMM, lshr, 3)
  181. VAR1 (USHIFTIMM, lshr_simd, 0, di)
  182. /* Implemented by aarch64_<sur>shr_n<mode>. */
  183. BUILTIN_VSDQ_I_DI (SHIFTIMM, srshr_n, 0)
  184. BUILTIN_VSDQ_I_DI (USHIFTIMM, urshr_n, 0)
  185. /* Implemented by aarch64_<sur>sra_n<mode>. */
  186. BUILTIN_VSDQ_I_DI (SHIFTACC, ssra_n, 0)
  187. BUILTIN_VSDQ_I_DI (USHIFTACC, usra_n, 0)
  188. BUILTIN_VSDQ_I_DI (SHIFTACC, srsra_n, 0)
  189. BUILTIN_VSDQ_I_DI (USHIFTACC, ursra_n, 0)
  190. /* Implemented by aarch64_<sur>shll_n<mode>. */
  191. BUILTIN_VD_BHSI (SHIFTIMM, sshll_n, 0)
  192. BUILTIN_VD_BHSI (USHIFTIMM, ushll_n, 0)
  193. /* Implemented by aarch64_<sur>shll2_n<mode>. */
  194. BUILTIN_VQW (SHIFTIMM, sshll2_n, 0)
  195. BUILTIN_VQW (SHIFTIMM, ushll2_n, 0)
  196. /* Implemented by aarch64_<sur>q<r>shr<u>n_n<mode>. */
  197. BUILTIN_VSQN_HSDI (SHIFTIMM, sqshrun_n, 0)
  198. BUILTIN_VSQN_HSDI (SHIFTIMM, sqrshrun_n, 0)
  199. BUILTIN_VSQN_HSDI (SHIFTIMM, sqshrn_n, 0)
  200. BUILTIN_VSQN_HSDI (USHIFTIMM, uqshrn_n, 0)
  201. BUILTIN_VSQN_HSDI (SHIFTIMM, sqrshrn_n, 0)
  202. BUILTIN_VSQN_HSDI (USHIFTIMM, uqrshrn_n, 0)
  203. /* Implemented by aarch64_<sur>s<lr>i_n<mode>. */
  204. BUILTIN_VSDQ_I_DI (SHIFTINSERT, ssri_n, 0)
  205. BUILTIN_VSDQ_I_DI (USHIFTACC, usri_n, 0)
  206. BUILTIN_VSDQ_I_DI (SHIFTINSERT, ssli_n, 0)
  207. BUILTIN_VSDQ_I_DI (USHIFTACC, usli_n, 0)
  208. /* Implemented by aarch64_<sur>qshl<u>_n<mode>. */
  209. BUILTIN_VSDQ_I (SHIFTIMM_USS, sqshlu_n, 0)
  210. BUILTIN_VSDQ_I (SHIFTIMM, sqshl_n, 0)
  211. BUILTIN_VSDQ_I (USHIFTIMM, uqshl_n, 0)
  212. /* Implemented by aarch64_reduc_plus_<mode>. */
  213. BUILTIN_VALL (UNOP, reduc_plus_scal_, 10)
  214. /* Implemented by reduc_<maxmin_uns>_scal_<mode> (producing scalar). */
  215. BUILTIN_VDQIF (UNOP, reduc_smax_scal_, 10)
  216. BUILTIN_VDQIF (UNOP, reduc_smin_scal_, 10)
  217. BUILTIN_VDQ_BHSI (UNOPU, reduc_umax_scal_, 10)
  218. BUILTIN_VDQ_BHSI (UNOPU, reduc_umin_scal_, 10)
  219. BUILTIN_VDQF (UNOP, reduc_smax_nan_scal_, 10)
  220. BUILTIN_VDQF (UNOP, reduc_smin_nan_scal_, 10)
  221. /* Implemented by <maxmin><mode>3.
  222. smax variants map to fmaxnm,
  223. smax_nan variants map to fmax. */
  224. BUILTIN_VDQIF (BINOP, smax, 3)
  225. BUILTIN_VDQIF (BINOP, smin, 3)
  226. BUILTIN_VDQ_BHSI (BINOP, umax, 3)
  227. BUILTIN_VDQ_BHSI (BINOP, umin, 3)
  228. BUILTIN_VDQF (BINOP, smax_nan, 3)
  229. BUILTIN_VDQF (BINOP, smin_nan, 3)
  230. /* Implemented by aarch64_<maxmin_uns>p<mode>. */
  231. BUILTIN_VDQ_BHSI (BINOP, smaxp, 0)
  232. BUILTIN_VDQ_BHSI (BINOP, sminp, 0)
  233. BUILTIN_VDQ_BHSI (BINOP, umaxp, 0)
  234. BUILTIN_VDQ_BHSI (BINOP, uminp, 0)
  235. BUILTIN_VDQF (BINOP, smaxp, 0)
  236. BUILTIN_VDQF (BINOP, sminp, 0)
  237. BUILTIN_VDQF (BINOP, smax_nanp, 0)
  238. BUILTIN_VDQF (BINOP, smin_nanp, 0)
  239. /* Implemented by <frint_pattern><mode>2. */
  240. BUILTIN_VDQF (UNOP, btrunc, 2)
  241. BUILTIN_VDQF (UNOP, ceil, 2)
  242. BUILTIN_VDQF (UNOP, floor, 2)
  243. BUILTIN_VDQF (UNOP, nearbyint, 2)
  244. BUILTIN_VDQF (UNOP, rint, 2)
  245. BUILTIN_VDQF (UNOP, round, 2)
  246. BUILTIN_VDQF_DF (UNOP, frintn, 2)
  247. /* Implemented by l<fcvt_pattern><su_optab><VQDF:mode><vcvt_target>2. */
  248. VAR1 (UNOP, lbtruncv2sf, 2, v2si)
  249. VAR1 (UNOP, lbtruncv4sf, 2, v4si)
  250. VAR1 (UNOP, lbtruncv2df, 2, v2di)
  251. VAR1 (UNOP, lbtruncuv2sf, 2, v2si)
  252. VAR1 (UNOP, lbtruncuv4sf, 2, v4si)
  253. VAR1 (UNOP, lbtruncuv2df, 2, v2di)
  254. VAR1 (UNOP, lroundv2sf, 2, v2si)
  255. VAR1 (UNOP, lroundv4sf, 2, v4si)
  256. VAR1 (UNOP, lroundv2df, 2, v2di)
  257. /* Implemented by l<fcvt_pattern><su_optab><GPF:mode><GPI:mode>2. */
  258. VAR1 (UNOP, lroundsf, 2, si)
  259. VAR1 (UNOP, lrounddf, 2, di)
  260. VAR1 (UNOP, lrounduv2sf, 2, v2si)
  261. VAR1 (UNOP, lrounduv4sf, 2, v4si)
  262. VAR1 (UNOP, lrounduv2df, 2, v2di)
  263. VAR1 (UNOP, lroundusf, 2, si)
  264. VAR1 (UNOP, lroundudf, 2, di)
  265. VAR1 (UNOP, lceilv2sf, 2, v2si)
  266. VAR1 (UNOP, lceilv4sf, 2, v4si)
  267. VAR1 (UNOP, lceilv2df, 2, v2di)
  268. VAR1 (UNOP, lceiluv2sf, 2, v2si)
  269. VAR1 (UNOP, lceiluv4sf, 2, v4si)
  270. VAR1 (UNOP, lceiluv2df, 2, v2di)
  271. VAR1 (UNOP, lceilusf, 2, si)
  272. VAR1 (UNOP, lceiludf, 2, di)
  273. VAR1 (UNOP, lfloorv2sf, 2, v2si)
  274. VAR1 (UNOP, lfloorv4sf, 2, v4si)
  275. VAR1 (UNOP, lfloorv2df, 2, v2di)
  276. VAR1 (UNOP, lflooruv2sf, 2, v2si)
  277. VAR1 (UNOP, lflooruv4sf, 2, v4si)
  278. VAR1 (UNOP, lflooruv2df, 2, v2di)
  279. VAR1 (UNOP, lfloorusf, 2, si)
  280. VAR1 (UNOP, lfloorudf, 2, di)
  281. VAR1 (UNOP, lfrintnv2sf, 2, v2si)
  282. VAR1 (UNOP, lfrintnv4sf, 2, v4si)
  283. VAR1 (UNOP, lfrintnv2df, 2, v2di)
  284. VAR1 (UNOP, lfrintnsf, 2, si)
  285. VAR1 (UNOP, lfrintndf, 2, di)
  286. VAR1 (UNOP, lfrintnuv2sf, 2, v2si)
  287. VAR1 (UNOP, lfrintnuv4sf, 2, v4si)
  288. VAR1 (UNOP, lfrintnuv2df, 2, v2di)
  289. VAR1 (UNOP, lfrintnusf, 2, si)
  290. VAR1 (UNOP, lfrintnudf, 2, di)
  291. /* Implemented by <optab><fcvt_target><VDQF:mode>2. */
  292. VAR1 (UNOP, floatv2si, 2, v2sf)
  293. VAR1 (UNOP, floatv4si, 2, v4sf)
  294. VAR1 (UNOP, floatv2di, 2, v2df)
  295. VAR1 (UNOP, floatunsv2si, 2, v2sf)
  296. VAR1 (UNOP, floatunsv4si, 2, v4sf)
  297. VAR1 (UNOP, floatunsv2di, 2, v2df)
  298. VAR5 (UNOPU, bswap, 2, v4hi, v8hi, v2si, v4si, v2di)
  299. BUILTIN_VB (UNOP, rbit, 0)
  300. /* Implemented by
  301. aarch64_<PERMUTE:perm_insn><PERMUTE:perm_hilo><mode>. */
  302. BUILTIN_VALL (BINOP, zip1, 0)
  303. BUILTIN_VALL (BINOP, zip2, 0)
  304. BUILTIN_VALL (BINOP, uzp1, 0)
  305. BUILTIN_VALL (BINOP, uzp2, 0)
  306. BUILTIN_VALL (BINOP, trn1, 0)
  307. BUILTIN_VALL (BINOP, trn2, 0)
  308. /* Implemented by
  309. aarch64_frecp<FRECP:frecp_suffix><mode>. */
  310. BUILTIN_GPF (UNOP, frecpe, 0)
  311. BUILTIN_GPF (BINOP, frecps, 0)
  312. BUILTIN_GPF (UNOP, frecpx, 0)
  313. BUILTIN_VDQ_SI (UNOP, urecpe, 0)
  314. BUILTIN_VDQF (UNOP, frecpe, 0)
  315. BUILTIN_VDQF (BINOP, frecps, 0)
  316. /* Implemented by a mixture of abs2 patterns. Note the DImode builtin is
  317. only ever used for the int64x1_t intrinsic, there is no scalar version. */
  318. BUILTIN_VSDQ_I_DI (UNOP, abs, 0)
  319. BUILTIN_VDQF (UNOP, abs, 2)
  320. VAR1 (UNOP, vec_unpacks_hi_, 10, v4sf)
  321. VAR1 (BINOP, float_truncate_hi_, 0, v4sf)
  322. VAR1 (UNOP, float_extend_lo_, 0, v2df)
  323. VAR1 (UNOP, float_truncate_lo_, 0, v2sf)
  324. /* Implemented by aarch64_ld1<VALL:mode>. */
  325. BUILTIN_VALL (LOAD1, ld1, 0)
  326. /* Implemented by aarch64_st1<VALL:mode>. */
  327. BUILTIN_VALL (STORE1, st1, 0)
  328. /* Implemented by fma<mode>4. */
  329. BUILTIN_VDQF (TERNOP, fma, 4)
  330. /* Implemented by aarch64_simd_bsl<mode>. */
  331. BUILTIN_VDQQH (BSL_P, simd_bsl, 0)
  332. BUILTIN_VSDQ_I_DI (BSL_U, simd_bsl, 0)
  333. BUILTIN_VALLDIF (BSL_S, simd_bsl, 0)
  334. /* Implemented by aarch64_crypto_aes<op><mode>. */
  335. VAR1 (BINOPU, crypto_aese, 0, v16qi)
  336. VAR1 (BINOPU, crypto_aesd, 0, v16qi)
  337. VAR1 (UNOPU, crypto_aesmc, 0, v16qi)
  338. VAR1 (UNOPU, crypto_aesimc, 0, v16qi)
  339. /* Implemented by aarch64_crypto_sha1<op><mode>. */
  340. VAR1 (UNOPU, crypto_sha1h, 0, si)
  341. VAR1 (BINOPU, crypto_sha1su1, 0, v4si)
  342. VAR1 (TERNOPU, crypto_sha1c, 0, v4si)
  343. VAR1 (TERNOPU, crypto_sha1m, 0, v4si)
  344. VAR1 (TERNOPU, crypto_sha1p, 0, v4si)
  345. VAR1 (TERNOPU, crypto_sha1su0, 0, v4si)
  346. /* Implemented by aarch64_crypto_sha256<op><mode>. */
  347. VAR1 (TERNOPU, crypto_sha256h, 0, v4si)
  348. VAR1 (TERNOPU, crypto_sha256h2, 0, v4si)
  349. VAR1 (BINOPU, crypto_sha256su0, 0, v4si)
  350. VAR1 (TERNOPU, crypto_sha256su1, 0, v4si)
  351. /* Implemented by aarch64_crypto_pmull<mode>. */
  352. VAR1 (BINOPP, crypto_pmull, 0, di)
  353. VAR1 (BINOPP, crypto_pmull, 0, v2di)