| /* NEON builtin definitions for ARM. |
| Copyright (C) 2013-2015 Free Software Foundation, Inc. |
| Contributed by ARM Ltd. |
| |
| This file is part of GCC. |
| |
| GCC is free software; you can redistribute it and/or modify it |
| under the terms of the GNU General Public License as published |
| by the Free Software Foundation; either version 3, or (at your |
| option) any later version. |
| |
| GCC is distributed in the hope that it will be useful, but WITHOUT |
| ANY WARRANTY; without even the implied warranty of MERCHANTABILITY |
| or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public |
| License for more details. |
| |
| You should have received a copy of the GNU General Public License |
| along with GCC; see the file COPYING3. If not see |
| <http://www.gnu.org/licenses/>. */ |
| |
| VAR2 (BINOP, vadd, v2sf, v4sf) |
| VAR3 (BINOP, vaddls, v8qi, v4hi, v2si) |
| VAR3 (BINOP, vaddlu, v8qi, v4hi, v2si) |
| VAR3 (BINOP, vaddws, v8qi, v4hi, v2si) |
| VAR3 (BINOP, vaddwu, v8qi, v4hi, v2si) |
| VAR6 (BINOP, vhaddu, v8qi, v4hi, v2si, v16qi, v8hi, v4si) |
| VAR6 (BINOP, vhadds, v8qi, v4hi, v2si, v16qi, v8hi, v4si) |
| VAR6 (BINOP, vrhaddu, v8qi, v4hi, v2si, v16qi, v8hi, v4si) |
| VAR6 (BINOP, vrhadds, v8qi, v4hi, v2si, v16qi, v8hi, v4si) |
| VAR8 (BINOP, vqadds, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) |
| VAR8 (BINOP, vqaddu, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) |
| VAR3 (BINOP, vaddhn, v8hi, v4si, v2di) |
| VAR3 (BINOP, vraddhn, v8hi, v4si, v2di) |
| VAR2 (BINOP, vmulf, v2sf, v4sf) |
| VAR2 (BINOP, vmulp, v8qi, v16qi) |
| VAR8 (TERNOP, vmla, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf) |
| VAR3 (TERNOP, vmlals, v8qi, v4hi, v2si) |
| VAR3 (TERNOP, vmlalu, v8qi, v4hi, v2si) |
| VAR2 (TERNOP, vfma, v2sf, v4sf) |
| VAR2 (TERNOP, vfms, v2sf, v4sf) |
| VAR8 (TERNOP, vmls, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf) |
| VAR3 (TERNOP, vmlsls, v8qi, v4hi, v2si) |
| VAR3 (TERNOP, vmlslu, v8qi, v4hi, v2si) |
| VAR4 (BINOP, vqdmulh, v4hi, v2si, v8hi, v4si) |
| VAR4 (BINOP, vqrdmulh, v4hi, v2si, v8hi, v4si) |
| VAR2 (TERNOP, vqdmlal, v4hi, v2si) |
| VAR2 (TERNOP, vqdmlsl, v4hi, v2si) |
| VAR3 (BINOP, vmullp, v8qi, v4hi, v2si) |
| VAR3 (BINOP, vmulls, v8qi, v4hi, v2si) |
| VAR3 (BINOP, vmullu, v8qi, v4hi, v2si) |
| VAR2 (BINOP, vmulls_n, v4hi, v2si) |
| VAR2 (BINOP, vmullu_n, v4hi, v2si) |
| VAR2 (SETLANE, vmulls_lane, v4hi, v2si) |
| VAR2 (SETLANE, vmullu_lane, v4hi, v2si) |
| VAR2 (BINOP, vqdmull_n, v4hi, v2si) |
| VAR2 (SETLANE, vqdmull_lane, v4hi, v2si) |
| VAR4 (BINOP, vqdmulh_n, v4hi, v2si, v8hi, v4si) |
| VAR4 (BINOP, vqrdmulh_n, v4hi, v2si, v8hi, v4si) |
| VAR4 (SETLANE, vqdmulh_lane, v4hi, v2si, v8hi, v4si) |
| VAR4 (SETLANE, vqrdmulh_lane, v4hi, v2si, v8hi, v4si) |
| VAR2 (BINOP, vqdmull, v4hi, v2si) |
| VAR8 (BINOP, vshls, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) |
| VAR8 (BINOP, vshlu, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) |
| VAR8 (BINOP, vrshls, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) |
| VAR8 (BINOP, vrshlu, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) |
| VAR8 (BINOP, vqshls, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) |
| VAR8 (BINOP, vqshlu, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) |
| VAR8 (BINOP, vqrshls, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) |
| VAR8 (BINOP, vqrshlu, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) |
| VAR8 (GETLANE, vshrs_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) |
| VAR8 (GETLANE, vshru_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) |
| VAR8 (GETLANE, vrshrs_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) |
| VAR8 (GETLANE, vrshru_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) |
| VAR3 (GETLANE, vshrn_n, v8hi, v4si, v2di) |
| VAR3 (GETLANE, vrshrn_n, v8hi, v4si, v2di) |
| VAR3 (GETLANE, vqshrns_n, v8hi, v4si, v2di) |
| VAR3 (GETLANE, vqshrnu_n, v8hi, v4si, v2di) |
| VAR3 (GETLANE, vqrshrns_n, v8hi, v4si, v2di) |
| VAR3 (GETLANE, vqrshrnu_n, v8hi, v4si, v2di) |
| VAR3 (GETLANE, vqshrun_n, v8hi, v4si, v2di) |
| VAR3 (GETLANE, vqrshrun_n, v8hi, v4si, v2di) |
| VAR8 (GETLANE, vshl_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) |
| VAR8 (GETLANE, vqshl_s_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) |
| VAR8 (GETLANE, vqshl_u_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) |
| VAR8 (GETLANE, vqshlu_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) |
| VAR3 (GETLANE, vshlls_n, v8qi, v4hi, v2si) |
| VAR3 (GETLANE, vshllu_n, v8qi, v4hi, v2si) |
| VAR8 (SETLANE, vsras_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) |
| VAR8 (SETLANE, vsrau_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) |
| VAR8 (SETLANE, vrsras_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) |
| VAR8 (SETLANE, vrsrau_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) |
| VAR2 (BINOP, vsub, v2sf, v4sf) |
| VAR3 (BINOP, vsubls, v8qi, v4hi, v2si) |
| VAR3 (BINOP, vsublu, v8qi, v4hi, v2si) |
| VAR3 (BINOP, vsubws, v8qi, v4hi, v2si) |
| VAR3 (BINOP, vsubwu, v8qi, v4hi, v2si) |
| VAR8 (BINOP, vqsubs, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) |
| VAR8 (BINOP, vqsubu, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) |
| VAR6 (BINOP, vhsubs, v8qi, v4hi, v2si, v16qi, v8hi, v4si) |
| VAR6 (BINOP, vhsubu, v8qi, v4hi, v2si, v16qi, v8hi, v4si) |
| VAR3 (BINOP, vsubhn, v8hi, v4si, v2di) |
| VAR3 (BINOP, vrsubhn, v8hi, v4si, v2di) |
| VAR8 (BINOP, vceq, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf) |
| VAR8 (BINOP, vcge, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf) |
| VAR6 (BINOP, vcgeu, v8qi, v4hi, v2si, v16qi, v8hi, v4si) |
| VAR8 (BINOP, vcgt, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf) |
| VAR6 (BINOP, vcgtu, v8qi, v4hi, v2si, v16qi, v8hi, v4si) |
| VAR2 (BINOP, vcage, v2sf, v4sf) |
| VAR2 (BINOP, vcagt, v2sf, v4sf) |
| VAR6 (BINOP, vtst, v8qi, v4hi, v2si, v16qi, v8hi, v4si) |
| VAR6 (BINOP, vabds, v8qi, v4hi, v2si, v16qi, v8hi, v4si) |
| VAR6 (BINOP, vabdu, v8qi, v4hi, v2si, v16qi, v8hi, v4si) |
| VAR2 (BINOP, vabdf, v2sf, v4sf) |
| VAR3 (BINOP, vabdls, v8qi, v4hi, v2si) |
| VAR3 (BINOP, vabdlu, v8qi, v4hi, v2si) |
| |
| VAR6 (TERNOP, vabas, v8qi, v4hi, v2si, v16qi, v8hi, v4si) |
| VAR6 (TERNOP, vabau, v8qi, v4hi, v2si, v16qi, v8hi, v4si) |
| VAR3 (TERNOP, vabals, v8qi, v4hi, v2si) |
| VAR3 (TERNOP, vabalu, v8qi, v4hi, v2si) |
| |
| VAR6 (BINOP, vmaxs, v8qi, v4hi, v2si, v16qi, v8hi, v4si) |
| VAR6 (BINOP, vmaxu, v8qi, v4hi, v2si, v16qi, v8hi, v4si) |
| VAR2 (BINOP, vmaxf, v2sf, v4sf) |
| VAR6 (BINOP, vmins, v8qi, v4hi, v2si, v16qi, v8hi, v4si) |
| VAR6 (BINOP, vminu, v8qi, v4hi, v2si, v16qi, v8hi, v4si) |
| VAR2 (BINOP, vminf, v2sf, v4sf) |
| |
| VAR3 (BINOP, vpmaxs, v8qi, v4hi, v2si) |
| VAR3 (BINOP, vpmaxu, v8qi, v4hi, v2si) |
| VAR1 (BINOP, vpmaxf, v2sf) |
| VAR3 (BINOP, vpmins, v8qi, v4hi, v2si) |
| VAR3 (BINOP, vpminu, v8qi, v4hi, v2si) |
| VAR1 (BINOP, vpminf, v2sf) |
| |
| VAR4 (BINOP, vpadd, v8qi, v4hi, v2si, v2sf) |
| VAR6 (UNOP, vpaddls, v8qi, v4hi, v2si, v16qi, v8hi, v4si) |
| VAR6 (UNOP, vpaddlu, v8qi, v4hi, v2si, v16qi, v8hi, v4si) |
| VAR6 (BINOP, vpadals, v8qi, v4hi, v2si, v16qi, v8hi, v4si) |
| VAR6 (BINOP, vpadalu, v8qi, v4hi, v2si, v16qi, v8hi, v4si) |
| VAR2 (BINOP, vrecps, v2sf, v4sf) |
| VAR2 (BINOP, vrsqrts, v2sf, v4sf) |
| VAR8 (SETLANE, vsri_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) |
| VAR8 (SETLANE, vsli_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) |
| VAR8 (UNOP, vabs, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf) |
| VAR6 (UNOP, vqabs, v8qi, v4hi, v2si, v16qi, v8hi, v4si) |
| VAR8 (UNOP, vneg, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf) |
| VAR6 (UNOP, vqneg, v8qi, v4hi, v2si, v16qi, v8hi, v4si) |
| VAR6 (UNOP, vcls, v8qi, v4hi, v2si, v16qi, v8hi, v4si) |
| VAR6 (UNOP, vclz, v8qi, v4hi, v2si, v16qi, v8hi, v4si) |
| VAR5 (BSWAP, bswap, v4hi, v8hi, v2si, v4si, v2di) |
| VAR2 (UNOP, vcnt, v8qi, v16qi) |
| VAR4 (UNOP, vrecpe, v2si, v2sf, v4si, v4sf) |
| VAR4 (UNOP, vrsqrte, v2si, v2sf, v4si, v4sf) |
| VAR6 (UNOP, vmvn, v8qi, v4hi, v2si, v16qi, v8hi, v4si) |
| /* FIXME: vget_lane supports more variants than this! */ |
| VAR10 (GETLANE, vget_lane, |
| v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di) |
| VAR6 (GETLANE, vget_laneu, v8qi, v4hi, v2si, v16qi, v8hi, v4si) |
| VAR10 (SETLANE, vset_lane, |
| v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di) |
| VAR5 (UNOP, vcreate, v8qi, v4hi, v2si, v2sf, di) |
| VAR10 (UNOP, vdup_n, |
| v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di) |
| VAR10 (BINOP, vdup_lane, |
| v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di) |
| VAR5 (COMBINE, vcombine, v8qi, v4hi, v2si, v2sf, di) |
| VAR5 (UNOP, vget_high, v16qi, v8hi, v4si, v4sf, v2di) |
| VAR5 (UNOP, vget_low, v16qi, v8hi, v4si, v4sf, v2di) |
| VAR3 (UNOP, vmovn, v8hi, v4si, v2di) |
| VAR3 (UNOP, vqmovns, v8hi, v4si, v2di) |
| VAR3 (UNOP, vqmovnu, v8hi, v4si, v2di) |
| VAR3 (UNOP, vqmovun, v8hi, v4si, v2di) |
| VAR3 (UNOP, vmovls, v8qi, v4hi, v2si) |
| VAR3 (UNOP, vmovlu, v8qi, v4hi, v2si) |
| VAR6 (SETLANE, vmul_lane, v4hi, v2si, v2sf, v8hi, v4si, v4sf) |
| VAR6 (LANEMAC, vmla_lane, v4hi, v2si, v2sf, v8hi, v4si, v4sf) |
| VAR2 (LANEMAC, vmlals_lane, v4hi, v2si) |
| VAR2 (LANEMAC, vmlalu_lane, v4hi, v2si) |
| VAR2 (LANEMAC, vqdmlal_lane, v4hi, v2si) |
| VAR6 (LANEMAC, vmls_lane, v4hi, v2si, v2sf, v8hi, v4si, v4sf) |
| VAR2 (LANEMAC, vmlsls_lane, v4hi, v2si) |
| VAR2 (LANEMAC, vmlslu_lane, v4hi, v2si) |
| VAR2 (LANEMAC, vqdmlsl_lane, v4hi, v2si) |
| VAR6 (BINOP, vmul_n, v4hi, v2si, v2sf, v8hi, v4si, v4sf) |
| VAR6 (LANEMAC, vmla_n, v4hi, v2si, v2sf, v8hi, v4si, v4sf) |
| VAR2 (LANEMAC, vmlals_n, v4hi, v2si) |
| VAR2 (LANEMAC, vmlalu_n, v4hi, v2si) |
| VAR2 (LANEMAC, vqdmlal_n, v4hi, v2si) |
| VAR6 (LANEMAC, vmls_n, v4hi, v2si, v2sf, v8hi, v4si, v4sf) |
| VAR2 (LANEMAC, vmlsls_n, v4hi, v2si) |
| VAR2 (LANEMAC, vmlslu_n, v4hi, v2si) |
| VAR2 (LANEMAC, vqdmlsl_n, v4hi, v2si) |
| VAR10 (SETLANE, vext, |
| v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di) |
| VAR8 (UNOP, vrev64, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf) |
| VAR4 (UNOP, vrev32, v8qi, v4hi, v16qi, v8hi) |
| VAR2 (UNOP, vrev16, v8qi, v16qi) |
| VAR4 (UNOP, vcvts, v2si, v2sf, v4si, v4sf) |
| VAR4 (UNOP, vcvtu, v2si, v2sf, v4si, v4sf) |
| VAR4 (BINOP, vcvts_n, v2si, v2sf, v4si, v4sf) |
| VAR4 (BINOP, vcvtu_n, v2si, v2sf, v4si, v4sf) |
| VAR1 (UNOP, vcvtv4sf, v4hf) |
| VAR1 (UNOP, vcvtv4hf, v4sf) |
| VAR10 (TERNOP, vbsl, |
| v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di) |
| VAR2 (UNOP, copysignf, v2sf, v4sf) |
| VAR2 (UNOP, vrintn, v2sf, v4sf) |
| VAR2 (UNOP, vrinta, v2sf, v4sf) |
| VAR2 (UNOP, vrintp, v2sf, v4sf) |
| VAR2 (UNOP, vrintm, v2sf, v4sf) |
| VAR2 (UNOP, vrintz, v2sf, v4sf) |
| VAR2 (UNOP, vrintx, v2sf, v4sf) |
| VAR1 (UNOP, vcvtav2sf, v2si) |
| VAR1 (UNOP, vcvtav4sf, v4si) |
| VAR1 (UNOP, vcvtauv2sf, v2si) |
| VAR1 (UNOP, vcvtauv4sf, v4si) |
| VAR1 (UNOP, vcvtpv2sf, v2si) |
| VAR1 (UNOP, vcvtpv4sf, v4si) |
| VAR1 (UNOP, vcvtpuv2sf, v2si) |
| VAR1 (UNOP, vcvtpuv4sf, v4si) |
| VAR1 (UNOP, vcvtmv2sf, v2si) |
| VAR1 (UNOP, vcvtmv4sf, v4si) |
| VAR1 (UNOP, vcvtmuv2sf, v2si) |
| VAR1 (UNOP, vcvtmuv4sf, v4si) |
| VAR1 (COMBINE, vtbl1, v8qi) |
| VAR1 (COMBINE, vtbl2, v8qi) |
| VAR1 (COMBINE, vtbl3, v8qi) |
| VAR1 (COMBINE, vtbl4, v8qi) |
| VAR1 (TERNOP, vtbx1, v8qi) |
| VAR1 (TERNOP, vtbx2, v8qi) |
| VAR1 (TERNOP, vtbx3, v8qi) |
| VAR1 (TERNOP, vtbx4, v8qi) |
| VAR5 (UNOP, vreinterpretv8qi, v8qi, v4hi, v2si, v2sf, di) |
| VAR5 (UNOP, vreinterpretv4hi, v8qi, v4hi, v2si, v2sf, di) |
| VAR5 (UNOP, vreinterpretv2si, v8qi, v4hi, v2si, v2sf, di) |
| VAR5 (UNOP, vreinterpretv2sf, v8qi, v4hi, v2si, v2sf, di) |
| VAR5 (UNOP, vreinterpretdi, v8qi, v4hi, v2si, v2sf, di) |
| VAR6 (UNOP, vreinterpretv16qi, v16qi, v8hi, v4si, v4sf, v2di, ti) |
| VAR6 (UNOP, vreinterpretv8hi, v16qi, v8hi, v4si, v4sf, v2di, ti) |
| VAR6 (UNOP, vreinterpretv4si, v16qi, v8hi, v4si, v4sf, v2di, ti) |
| VAR6 (UNOP, vreinterpretv4sf, v16qi, v8hi, v4si, v4sf, v2di, ti) |
| VAR6 (UNOP, vreinterpretv2di, v16qi, v8hi, v4si, v4sf, v2di, ti) |
| VAR6 (UNOP, vreinterpretti, v16qi, v8hi, v4si, v4sf, v2di, ti) |
| VAR10 (LOAD1, vld1, |
| v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di) |
| VAR10 (LOAD1LANE, vld1_lane, |
| v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di) |
| VAR10 (LOAD1, vld1_dup, |
| v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di) |
| VAR10 (STORE1, vst1, |
| v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di) |
| VAR10 (STORE1LANE, vst1_lane, |
| v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di) |
| VAR9 (LOAD1, vld2, |
| v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf) |
| VAR7 (LOAD1LANE, vld2_lane, |
| v8qi, v4hi, v2si, v2sf, v8hi, v4si, v4sf) |
| VAR5 (LOAD1, vld2_dup, v8qi, v4hi, v2si, v2sf, di) |
| VAR9 (STORE1, vst2, |
| v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf) |
| VAR7 (STORE1LANE, vst2_lane, |
| v8qi, v4hi, v2si, v2sf, v8hi, v4si, v4sf) |
| VAR9 (LOAD1, vld3, |
| v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf) |
| VAR7 (LOAD1LANE, vld3_lane, |
| v8qi, v4hi, v2si, v2sf, v8hi, v4si, v4sf) |
| VAR5 (LOAD1, vld3_dup, v8qi, v4hi, v2si, v2sf, di) |
| VAR9 (STORE1, vst3, |
| v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf) |
| VAR7 (STORE1LANE, vst3_lane, |
| v8qi, v4hi, v2si, v2sf, v8hi, v4si, v4sf) |
| VAR9 (LOAD1, vld4, |
| v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf) |
| VAR7 (LOAD1LANE, vld4_lane, |
| v8qi, v4hi, v2si, v2sf, v8hi, v4si, v4sf) |
| VAR5 (LOAD1, vld4_dup, v8qi, v4hi, v2si, v2sf, di) |
| VAR9 (STORE1, vst4, |
| v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf) |
| VAR7 (STORE1LANE, vst4_lane, |
| v8qi, v4hi, v2si, v2sf, v8hi, v4si, v4sf) |