1bdd1243dSDimitry Andric//===- IntrinsicsLoongArch.td - Defines LoongArch intrinsics *- tablegen -*===// 2bdd1243dSDimitry Andric// 3bdd1243dSDimitry Andric// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4bdd1243dSDimitry Andric// See https://llvm.org/LICENSE.txt for license information. 5bdd1243dSDimitry Andric// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6bdd1243dSDimitry Andric// 7bdd1243dSDimitry Andric//===----------------------------------------------------------------------===// 8bdd1243dSDimitry Andric// 9bdd1243dSDimitry Andric// This file defines all of the LoongArch-specific intrinsics. 10bdd1243dSDimitry Andric// 11bdd1243dSDimitry Andric//===----------------------------------------------------------------------===// 12bdd1243dSDimitry Andric 13bdd1243dSDimitry Andriclet TargetPrefix = "loongarch" in { 14bdd1243dSDimitry Andric 15bdd1243dSDimitry Andric//===----------------------------------------------------------------------===// 16bdd1243dSDimitry Andric// Atomics 17bdd1243dSDimitry Andric 18bdd1243dSDimitry Andric// T @llvm.<name>.T.<p>(any*, T, T, T imm); 19bdd1243dSDimitry Andricclass MaskedAtomicRMW<LLVMType itype> 20bdd1243dSDimitry Andric : Intrinsic<[itype], [llvm_anyptr_ty, itype, itype, itype], 21bdd1243dSDimitry Andric [IntrArgMemOnly, NoCapture<ArgIndex<0>>, ImmArg<ArgIndex<3>>]>; 22bdd1243dSDimitry Andric 23bdd1243dSDimitry Andric// We define 32-bit and 64-bit variants of the above, where T stands for i32 24bdd1243dSDimitry Andric// or i64 respectively: 25bdd1243dSDimitry Andricmulticlass MaskedAtomicRMWIntrinsics { 26bdd1243dSDimitry Andric // i32 @llvm.<name>.i32.<p>(any*, i32, i32, i32 imm); 27bdd1243dSDimitry Andric def _i32 : MaskedAtomicRMW<llvm_i32_ty>; 28bdd1243dSDimitry Andric // i64 @llvm.<name>.i32.<p>(any*, i64, i64, i64 imm); 29bdd1243dSDimitry Andric def _i64 : MaskedAtomicRMW<llvm_i64_ty>; 30bdd1243dSDimitry Andric} 31bdd1243dSDimitry Andric 32bdd1243dSDimitry Andricmulticlass MaskedAtomicRMWFiveOpIntrinsics { 33bdd1243dSDimitry Andric // TODO: Support cmpxchg on LA32. 34bdd1243dSDimitry Andric // i64 @llvm.<name>.i64.<p>(any*, i64, i64, i64, i64 imm); 35bdd1243dSDimitry Andric def _i64 : MaskedAtomicRMWFiveArg<llvm_i64_ty>; 36bdd1243dSDimitry Andric} 37bdd1243dSDimitry Andric 38bdd1243dSDimitry Andricdefm int_loongarch_masked_atomicrmw_xchg : MaskedAtomicRMWIntrinsics; 39bdd1243dSDimitry Andricdefm int_loongarch_masked_atomicrmw_add : MaskedAtomicRMWIntrinsics; 40bdd1243dSDimitry Andricdefm int_loongarch_masked_atomicrmw_sub : MaskedAtomicRMWIntrinsics; 41bdd1243dSDimitry Andricdefm int_loongarch_masked_atomicrmw_nand : MaskedAtomicRMWIntrinsics; 42bdd1243dSDimitry Andricdefm int_loongarch_masked_atomicrmw_umax : MaskedAtomicRMWIntrinsics; 43bdd1243dSDimitry Andricdefm int_loongarch_masked_atomicrmw_umin : MaskedAtomicRMWIntrinsics; 44bdd1243dSDimitry Andricdefm int_loongarch_masked_atomicrmw_max : MaskedAtomicRMWFiveOpIntrinsics; 45bdd1243dSDimitry Andricdefm int_loongarch_masked_atomicrmw_min : MaskedAtomicRMWFiveOpIntrinsics; 46bdd1243dSDimitry Andric 47bdd1243dSDimitry Andric// @llvm.loongarch.masked.cmpxchg.i64.<p>( 48bdd1243dSDimitry Andric// ptr addr, grlen cmpval, grlen newval, grlen mask, grlenimm ordering) 49bdd1243dSDimitry Andricdefm int_loongarch_masked_cmpxchg : MaskedAtomicRMWFiveOpIntrinsics; 50bdd1243dSDimitry Andric 51bdd1243dSDimitry Andric//===----------------------------------------------------------------------===// 52bdd1243dSDimitry Andric// LoongArch BASE 53bdd1243dSDimitry Andric 545f757f3fSDimitry Andricclass BaseInt<list<LLVMType> ret_types, list<LLVMType> param_types, 555f757f3fSDimitry Andric list<IntrinsicProperty> intr_properties = []> 565f757f3fSDimitry Andric : Intrinsic<ret_types, param_types, intr_properties>, 575f757f3fSDimitry Andric ClangBuiltin<!subst("int_loongarch", "__builtin_loongarch", NAME)>; 58bdd1243dSDimitry Andric 595f757f3fSDimitry Andricdef int_loongarch_break : BaseInt<[], [llvm_i32_ty], [ImmArg<ArgIndex<0>>]>; 605f757f3fSDimitry Andricdef int_loongarch_cacop_d : BaseInt<[], [llvm_i64_ty, llvm_i64_ty, llvm_i64_ty], 615f757f3fSDimitry Andric [ImmArg<ArgIndex<0>>, ImmArg<ArgIndex<2>>]>; 625f757f3fSDimitry Andricdef int_loongarch_cacop_w : BaseInt<[], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], 635f757f3fSDimitry Andric [ImmArg<ArgIndex<0>>, ImmArg<ArgIndex<2>>]>; 645f757f3fSDimitry Andricdef int_loongarch_dbar : BaseInt<[], [llvm_i32_ty], [ImmArg<ArgIndex<0>>]>; 655f757f3fSDimitry Andric 665f757f3fSDimitry Andricdef int_loongarch_ibar : BaseInt<[], [llvm_i32_ty], [ImmArg<ArgIndex<0>>]>; 675f757f3fSDimitry Andricdef int_loongarch_movfcsr2gr : BaseInt<[llvm_i32_ty], [llvm_i32_ty], 685f757f3fSDimitry Andric [ImmArg<ArgIndex<0>>]>; 695f757f3fSDimitry Andricdef int_loongarch_movgr2fcsr : BaseInt<[], [llvm_i32_ty, llvm_i32_ty], 705f757f3fSDimitry Andric [ImmArg<ArgIndex<0>>]>; 715f757f3fSDimitry Andricdef int_loongarch_syscall : BaseInt<[], [llvm_i32_ty], [ImmArg<ArgIndex<0>>]>; 725f757f3fSDimitry Andric 735f757f3fSDimitry Andricdef int_loongarch_crc_w_b_w : BaseInt<[llvm_i32_ty], 74bdd1243dSDimitry Andric [llvm_i32_ty, llvm_i32_ty]>; 755f757f3fSDimitry Andricdef int_loongarch_crc_w_h_w : BaseInt<[llvm_i32_ty], 76bdd1243dSDimitry Andric [llvm_i32_ty, llvm_i32_ty]>; 775f757f3fSDimitry Andricdef int_loongarch_crc_w_w_w : BaseInt<[llvm_i32_ty], 78bdd1243dSDimitry Andric [llvm_i32_ty, llvm_i32_ty]>; 795f757f3fSDimitry Andricdef int_loongarch_crc_w_d_w : BaseInt<[llvm_i32_ty], 80bdd1243dSDimitry Andric [llvm_i64_ty, llvm_i32_ty]>; 81bdd1243dSDimitry Andric 825f757f3fSDimitry Andricdef int_loongarch_crcc_w_b_w : BaseInt<[llvm_i32_ty], 83bdd1243dSDimitry Andric [llvm_i32_ty, llvm_i32_ty]>; 845f757f3fSDimitry Andricdef int_loongarch_crcc_w_h_w : BaseInt<[llvm_i32_ty], 85bdd1243dSDimitry Andric [llvm_i32_ty, llvm_i32_ty]>; 865f757f3fSDimitry Andricdef int_loongarch_crcc_w_w_w : BaseInt<[llvm_i32_ty], 87bdd1243dSDimitry Andric [llvm_i32_ty, llvm_i32_ty]>; 885f757f3fSDimitry Andricdef int_loongarch_crcc_w_d_w : BaseInt<[llvm_i32_ty], 89bdd1243dSDimitry Andric [llvm_i64_ty, llvm_i32_ty]>; 90bdd1243dSDimitry Andric 915f757f3fSDimitry Andricdef int_loongarch_csrrd_w : BaseInt<[llvm_i32_ty], [llvm_i32_ty], 92bdd1243dSDimitry Andric [ImmArg<ArgIndex<0>>]>; 935f757f3fSDimitry Andricdef int_loongarch_csrrd_d : BaseInt<[llvm_i64_ty], [llvm_i32_ty], 94bdd1243dSDimitry Andric [ImmArg<ArgIndex<0>>]>; 955f757f3fSDimitry Andricdef int_loongarch_csrwr_w : BaseInt<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty], 96bdd1243dSDimitry Andric [ImmArg<ArgIndex<1>>]>; 975f757f3fSDimitry Andricdef int_loongarch_csrwr_d : BaseInt<[llvm_i64_ty], [llvm_i64_ty, llvm_i32_ty], 98bdd1243dSDimitry Andric [ImmArg<ArgIndex<1>>]>; 995f757f3fSDimitry Andricdef int_loongarch_csrxchg_w : BaseInt<[llvm_i32_ty], 1005f757f3fSDimitry Andric [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], 101bdd1243dSDimitry Andric [ImmArg<ArgIndex<2>>]>; 1025f757f3fSDimitry Andricdef int_loongarch_csrxchg_d : BaseInt<[llvm_i64_ty], 1035f757f3fSDimitry Andric [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty], 104bdd1243dSDimitry Andric [ImmArg<ArgIndex<2>>]>; 105bdd1243dSDimitry Andric 1065f757f3fSDimitry Andricdef int_loongarch_iocsrrd_b : BaseInt<[llvm_i32_ty], [llvm_i32_ty]>; 1075f757f3fSDimitry Andricdef int_loongarch_iocsrrd_h : BaseInt<[llvm_i32_ty], [llvm_i32_ty]>; 1085f757f3fSDimitry Andricdef int_loongarch_iocsrrd_w : BaseInt<[llvm_i32_ty], [llvm_i32_ty]>; 1095f757f3fSDimitry Andricdef int_loongarch_iocsrrd_d : BaseInt<[llvm_i64_ty], [llvm_i32_ty]>; 110bdd1243dSDimitry Andric 1115f757f3fSDimitry Andricdef int_loongarch_iocsrwr_b : BaseInt<[], [llvm_i32_ty, llvm_i32_ty]>; 1125f757f3fSDimitry Andricdef int_loongarch_iocsrwr_h : BaseInt<[], [llvm_i32_ty, llvm_i32_ty]>; 1135f757f3fSDimitry Andricdef int_loongarch_iocsrwr_w : BaseInt<[], [llvm_i32_ty, llvm_i32_ty]>; 1145f757f3fSDimitry Andricdef int_loongarch_iocsrwr_d : BaseInt<[], [llvm_i64_ty, llvm_i32_ty]>; 115bdd1243dSDimitry Andric 1165f757f3fSDimitry Andricdef int_loongarch_cpucfg : BaseInt<[llvm_i32_ty], [llvm_i32_ty]>; 117bdd1243dSDimitry Andric 1185f757f3fSDimitry Andricdef int_loongarch_asrtle_d : BaseInt<[], [llvm_i64_ty, llvm_i64_ty]>; 1195f757f3fSDimitry Andricdef int_loongarch_asrtgt_d : BaseInt<[], [llvm_i64_ty, llvm_i64_ty]>; 120bdd1243dSDimitry Andric 1215f757f3fSDimitry Andricdef int_loongarch_lddir_d : BaseInt<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], 122bdd1243dSDimitry Andric [ImmArg<ArgIndex<1>>]>; 1235f757f3fSDimitry Andricdef int_loongarch_ldpte_d : BaseInt<[], [llvm_i64_ty, llvm_i64_ty], 124bdd1243dSDimitry Andric [ImmArg<ArgIndex<1>>]>; 125*7a6dacacSDimitry Andric 126*7a6dacacSDimitry Andricdef int_loongarch_frecipe_s : BaseInt<[llvm_float_ty], [llvm_float_ty], 127*7a6dacacSDimitry Andric [IntrNoMem]>; 128*7a6dacacSDimitry Andricdef int_loongarch_frecipe_d : BaseInt<[llvm_double_ty], [llvm_double_ty], 129*7a6dacacSDimitry Andric [IntrNoMem]>; 130*7a6dacacSDimitry Andricdef int_loongarch_frsqrte_s : BaseInt<[llvm_float_ty], [llvm_float_ty], 131*7a6dacacSDimitry Andric [IntrNoMem]>; 132*7a6dacacSDimitry Andricdef int_loongarch_frsqrte_d : BaseInt<[llvm_double_ty], [llvm_double_ty], 133*7a6dacacSDimitry Andric [IntrNoMem]>; 134bdd1243dSDimitry Andric} // TargetPrefix = "loongarch" 1355f757f3fSDimitry Andric 1365f757f3fSDimitry Andric/// Vector intrinsic 1375f757f3fSDimitry Andric 1385f757f3fSDimitry Andricclass VecInt<list<LLVMType> ret_types, list<LLVMType> param_types, 1395f757f3fSDimitry Andric list<IntrinsicProperty> intr_properties = []> 1405f757f3fSDimitry Andric : Intrinsic<ret_types, param_types, intr_properties>, 1415f757f3fSDimitry Andric ClangBuiltin<!subst("int_loongarch", "__builtin", NAME)>; 1425f757f3fSDimitry Andric 1435f757f3fSDimitry Andric//===----------------------------------------------------------------------===// 1445f757f3fSDimitry Andric// LSX 1455f757f3fSDimitry Andric 1465f757f3fSDimitry Andriclet TargetPrefix = "loongarch" in { 1475f757f3fSDimitry Andric 1485f757f3fSDimitry Andricforeach inst = ["vadd_b", "vsub_b", 1495f757f3fSDimitry Andric "vsadd_b", "vsadd_bu", "vssub_b", "vssub_bu", 1505f757f3fSDimitry Andric "vavg_b", "vavg_bu", "vavgr_b", "vavgr_bu", 1515f757f3fSDimitry Andric "vabsd_b", "vabsd_bu", "vadda_b", 1525f757f3fSDimitry Andric "vmax_b", "vmax_bu", "vmin_b", "vmin_bu", 1535f757f3fSDimitry Andric "vmul_b", "vmuh_b", "vmuh_bu", 1545f757f3fSDimitry Andric "vdiv_b", "vdiv_bu", "vmod_b", "vmod_bu", "vsigncov_b", 1555f757f3fSDimitry Andric "vand_v", "vor_v", "vxor_v", "vnor_v", "vandn_v", "vorn_v", 1565f757f3fSDimitry Andric "vsll_b", "vsrl_b", "vsra_b", "vrotr_b", "vsrlr_b", "vsrar_b", 1575f757f3fSDimitry Andric "vbitclr_b", "vbitset_b", "vbitrev_b", 1585f757f3fSDimitry Andric "vseq_b", "vsle_b", "vsle_bu", "vslt_b", "vslt_bu", 1595f757f3fSDimitry Andric "vpackev_b", "vpackod_b", "vpickev_b", "vpickod_b", 1605f757f3fSDimitry Andric "vilvl_b", "vilvh_b"] in 1615f757f3fSDimitry Andric def int_loongarch_lsx_#inst : VecInt<[llvm_v16i8_ty], 1625f757f3fSDimitry Andric [llvm_v16i8_ty, llvm_v16i8_ty], 1635f757f3fSDimitry Andric [IntrNoMem]>; 1645f757f3fSDimitry Andric 1655f757f3fSDimitry Andricforeach inst = ["vadd_h", "vsub_h", 1665f757f3fSDimitry Andric "vsadd_h", "vsadd_hu", "vssub_h", "vssub_hu", 1675f757f3fSDimitry Andric "vavg_h", "vavg_hu", "vavgr_h", "vavgr_hu", 1685f757f3fSDimitry Andric "vabsd_h", "vabsd_hu", "vadda_h", 1695f757f3fSDimitry Andric "vmax_h", "vmax_hu", "vmin_h", "vmin_hu", 1705f757f3fSDimitry Andric "vmul_h", "vmuh_h", "vmuh_hu", 1715f757f3fSDimitry Andric "vdiv_h", "vdiv_hu", "vmod_h", "vmod_hu", "vsigncov_h", 1725f757f3fSDimitry Andric "vsll_h", "vsrl_h", "vsra_h", "vrotr_h", "vsrlr_h", "vsrar_h", 1735f757f3fSDimitry Andric "vbitclr_h", "vbitset_h", "vbitrev_h", 1745f757f3fSDimitry Andric "vseq_h", "vsle_h", "vsle_hu", "vslt_h", "vslt_hu", 1755f757f3fSDimitry Andric "vpackev_h", "vpackod_h", "vpickev_h", "vpickod_h", 1765f757f3fSDimitry Andric "vilvl_h", "vilvh_h"] in 1775f757f3fSDimitry Andric def int_loongarch_lsx_#inst : VecInt<[llvm_v8i16_ty], 1785f757f3fSDimitry Andric [llvm_v8i16_ty, llvm_v8i16_ty], 1795f757f3fSDimitry Andric [IntrNoMem]>; 1805f757f3fSDimitry Andric 1815f757f3fSDimitry Andricforeach inst = ["vadd_w", "vsub_w", 1825f757f3fSDimitry Andric "vsadd_w", "vsadd_wu", "vssub_w", "vssub_wu", 1835f757f3fSDimitry Andric "vavg_w", "vavg_wu", "vavgr_w", "vavgr_wu", 1845f757f3fSDimitry Andric "vabsd_w", "vabsd_wu", "vadda_w", 1855f757f3fSDimitry Andric "vmax_w", "vmax_wu", "vmin_w", "vmin_wu", 1865f757f3fSDimitry Andric "vmul_w", "vmuh_w", "vmuh_wu", 1875f757f3fSDimitry Andric "vdiv_w", "vdiv_wu", "vmod_w", "vmod_wu", "vsigncov_w", 1885f757f3fSDimitry Andric "vsll_w", "vsrl_w", "vsra_w", "vrotr_w", "vsrlr_w", "vsrar_w", 1895f757f3fSDimitry Andric "vbitclr_w", "vbitset_w", "vbitrev_w", 1905f757f3fSDimitry Andric "vseq_w", "vsle_w", "vsle_wu", "vslt_w", "vslt_wu", 1915f757f3fSDimitry Andric "vpackev_w", "vpackod_w", "vpickev_w", "vpickod_w", 1925f757f3fSDimitry Andric "vilvl_w", "vilvh_w"] in 1935f757f3fSDimitry Andric def int_loongarch_lsx_#inst : VecInt<[llvm_v4i32_ty], 1945f757f3fSDimitry Andric [llvm_v4i32_ty, llvm_v4i32_ty], 1955f757f3fSDimitry Andric [IntrNoMem]>; 1965f757f3fSDimitry Andric 1975f757f3fSDimitry Andricforeach inst = ["vadd_d", "vadd_q", "vsub_d", "vsub_q", 1985f757f3fSDimitry Andric "vsadd_d", "vsadd_du", "vssub_d", "vssub_du", 1995f757f3fSDimitry Andric "vhaddw_q_d", "vhaddw_qu_du", "vhsubw_q_d", "vhsubw_qu_du", 2005f757f3fSDimitry Andric "vaddwev_q_d", "vaddwod_q_d", "vsubwev_q_d", "vsubwod_q_d", 2015f757f3fSDimitry Andric "vaddwev_q_du", "vaddwod_q_du", "vsubwev_q_du", "vsubwod_q_du", 2025f757f3fSDimitry Andric "vaddwev_q_du_d", "vaddwod_q_du_d", 2035f757f3fSDimitry Andric "vavg_d", "vavg_du", "vavgr_d", "vavgr_du", 2045f757f3fSDimitry Andric "vabsd_d", "vabsd_du", "vadda_d", 2055f757f3fSDimitry Andric "vmax_d", "vmax_du", "vmin_d", "vmin_du", 2065f757f3fSDimitry Andric "vmul_d", "vmuh_d", "vmuh_du", 2075f757f3fSDimitry Andric "vmulwev_q_d", "vmulwod_q_d", "vmulwev_q_du", "vmulwod_q_du", 2085f757f3fSDimitry Andric "vmulwev_q_du_d", "vmulwod_q_du_d", 2095f757f3fSDimitry Andric "vdiv_d", "vdiv_du", "vmod_d", "vmod_du", "vsigncov_d", 2105f757f3fSDimitry Andric "vsll_d", "vsrl_d", "vsra_d", "vrotr_d", "vsrlr_d", "vsrar_d", 2115f757f3fSDimitry Andric "vbitclr_d", "vbitset_d", "vbitrev_d", 2125f757f3fSDimitry Andric "vseq_d", "vsle_d", "vsle_du", "vslt_d", "vslt_du", 2135f757f3fSDimitry Andric "vpackev_d", "vpackod_d", "vpickev_d", "vpickod_d", 2145f757f3fSDimitry Andric "vilvl_d", "vilvh_d"] in 2155f757f3fSDimitry Andric def int_loongarch_lsx_#inst : VecInt<[llvm_v2i64_ty], 2165f757f3fSDimitry Andric [llvm_v2i64_ty, llvm_v2i64_ty], 2175f757f3fSDimitry Andric [IntrNoMem]>; 2185f757f3fSDimitry Andric 2195f757f3fSDimitry Andricforeach inst = ["vaddi_bu", "vsubi_bu", 2205f757f3fSDimitry Andric "vmaxi_b", "vmaxi_bu", "vmini_b", "vmini_bu", 2215f757f3fSDimitry Andric "vsat_b", "vsat_bu", 2225f757f3fSDimitry Andric "vandi_b", "vori_b", "vxori_b", "vnori_b", 2235f757f3fSDimitry Andric "vslli_b", "vsrli_b", "vsrai_b", "vrotri_b", 2245f757f3fSDimitry Andric "vsrlri_b", "vsrari_b", 2255f757f3fSDimitry Andric "vbitclri_b", "vbitseti_b", "vbitrevi_b", 2265f757f3fSDimitry Andric "vseqi_b", "vslei_b", "vslei_bu", "vslti_b", "vslti_bu", 2275f757f3fSDimitry Andric "vreplvei_b", "vbsll_v", "vbsrl_v", "vshuf4i_b"] in 2285f757f3fSDimitry Andric def int_loongarch_lsx_#inst : VecInt<[llvm_v16i8_ty], 2295f757f3fSDimitry Andric [llvm_v16i8_ty, llvm_i32_ty], 2305f757f3fSDimitry Andric [IntrNoMem, ImmArg<ArgIndex<1>>]>; 2315f757f3fSDimitry Andricforeach inst = ["vaddi_hu", "vsubi_hu", 2325f757f3fSDimitry Andric "vmaxi_h", "vmaxi_hu", "vmini_h", "vmini_hu", 2335f757f3fSDimitry Andric "vsat_h", "vsat_hu", 2345f757f3fSDimitry Andric "vslli_h", "vsrli_h", "vsrai_h", "vrotri_h", 2355f757f3fSDimitry Andric "vsrlri_h", "vsrari_h", 2365f757f3fSDimitry Andric "vbitclri_h", "vbitseti_h", "vbitrevi_h", 2375f757f3fSDimitry Andric "vseqi_h", "vslei_h", "vslei_hu", "vslti_h", "vslti_hu", 2385f757f3fSDimitry Andric "vreplvei_h", "vshuf4i_h"] in 2395f757f3fSDimitry Andric def int_loongarch_lsx_#inst : VecInt<[llvm_v8i16_ty], 2405f757f3fSDimitry Andric [llvm_v8i16_ty, llvm_i32_ty], 2415f757f3fSDimitry Andric [IntrNoMem, ImmArg<ArgIndex<1>>]>; 2425f757f3fSDimitry Andricforeach inst = ["vaddi_wu", "vsubi_wu", 2435f757f3fSDimitry Andric "vmaxi_w", "vmaxi_wu", "vmini_w", "vmini_wu", 2445f757f3fSDimitry Andric "vsat_w", "vsat_wu", 2455f757f3fSDimitry Andric "vslli_w", "vsrli_w", "vsrai_w", "vrotri_w", 2465f757f3fSDimitry Andric "vsrlri_w", "vsrari_w", 2475f757f3fSDimitry Andric "vbitclri_w", "vbitseti_w", "vbitrevi_w", 2485f757f3fSDimitry Andric "vseqi_w", "vslei_w", "vslei_wu", "vslti_w", "vslti_wu", 2495f757f3fSDimitry Andric "vreplvei_w", "vshuf4i_w"] in 2505f757f3fSDimitry Andric def int_loongarch_lsx_#inst : VecInt<[llvm_v4i32_ty], 2515f757f3fSDimitry Andric [llvm_v4i32_ty, llvm_i32_ty], 2525f757f3fSDimitry Andric [IntrNoMem, ImmArg<ArgIndex<1>>]>; 2535f757f3fSDimitry Andricforeach inst = ["vaddi_du", "vsubi_du", 2545f757f3fSDimitry Andric "vmaxi_d", "vmaxi_du", "vmini_d", "vmini_du", 2555f757f3fSDimitry Andric "vsat_d", "vsat_du", 2565f757f3fSDimitry Andric "vslli_d", "vsrli_d", "vsrai_d", "vrotri_d", 2575f757f3fSDimitry Andric "vsrlri_d", "vsrari_d", 2585f757f3fSDimitry Andric "vbitclri_d", "vbitseti_d", "vbitrevi_d", 2595f757f3fSDimitry Andric "vseqi_d", "vslei_d", "vslei_du", "vslti_d", "vslti_du", 2605f757f3fSDimitry Andric "vreplvei_d"] in 2615f757f3fSDimitry Andric def int_loongarch_lsx_#inst : VecInt<[llvm_v2i64_ty], 2625f757f3fSDimitry Andric [llvm_v2i64_ty, llvm_i32_ty], 2635f757f3fSDimitry Andric [IntrNoMem, ImmArg<ArgIndex<1>>]>; 2645f757f3fSDimitry Andric 2655f757f3fSDimitry Andricforeach inst = ["vhaddw_h_b", "vhaddw_hu_bu", "vhsubw_h_b", "vhsubw_hu_bu", 2665f757f3fSDimitry Andric "vaddwev_h_b", "vaddwod_h_b", "vsubwev_h_b", "vsubwod_h_b", 2675f757f3fSDimitry Andric "vaddwev_h_bu", "vaddwod_h_bu", "vsubwev_h_bu", "vsubwod_h_bu", 2685f757f3fSDimitry Andric "vaddwev_h_bu_b", "vaddwod_h_bu_b", 2695f757f3fSDimitry Andric "vmulwev_h_b", "vmulwod_h_b", "vmulwev_h_bu", "vmulwod_h_bu", 2705f757f3fSDimitry Andric "vmulwev_h_bu_b", "vmulwod_h_bu_b"] in 2715f757f3fSDimitry Andric def int_loongarch_lsx_#inst : VecInt<[llvm_v8i16_ty], 2725f757f3fSDimitry Andric [llvm_v16i8_ty, llvm_v16i8_ty], 2735f757f3fSDimitry Andric [IntrNoMem]>; 2745f757f3fSDimitry Andric 2755f757f3fSDimitry Andricforeach inst = ["vhaddw_w_h", "vhaddw_wu_hu", "vhsubw_w_h", "vhsubw_wu_hu", 2765f757f3fSDimitry Andric "vaddwev_w_h", "vaddwod_w_h", "vsubwev_w_h", "vsubwod_w_h", 2775f757f3fSDimitry Andric "vaddwev_w_hu", "vaddwod_w_hu", "vsubwev_w_hu", "vsubwod_w_hu", 2785f757f3fSDimitry Andric "vaddwev_w_hu_h", "vaddwod_w_hu_h", 2795f757f3fSDimitry Andric "vmulwev_w_h", "vmulwod_w_h", "vmulwev_w_hu", "vmulwod_w_hu", 2805f757f3fSDimitry Andric "vmulwev_w_hu_h", "vmulwod_w_hu_h"] in 2815f757f3fSDimitry Andric def int_loongarch_lsx_#inst : VecInt<[llvm_v4i32_ty], 2825f757f3fSDimitry Andric [llvm_v8i16_ty, llvm_v8i16_ty], 2835f757f3fSDimitry Andric [IntrNoMem]>; 2845f757f3fSDimitry Andric 2855f757f3fSDimitry Andricforeach inst = ["vhaddw_d_w", "vhaddw_du_wu", "vhsubw_d_w", "vhsubw_du_wu", 2865f757f3fSDimitry Andric "vaddwev_d_w", "vaddwod_d_w", "vsubwev_d_w", "vsubwod_d_w", 2875f757f3fSDimitry Andric "vaddwev_d_wu", "vaddwod_d_wu", "vsubwev_d_wu", "vsubwod_d_wu", 2885f757f3fSDimitry Andric "vaddwev_d_wu_w", "vaddwod_d_wu_w", 2895f757f3fSDimitry Andric "vmulwev_d_w", "vmulwod_d_w", "vmulwev_d_wu", "vmulwod_d_wu", 2905f757f3fSDimitry Andric "vmulwev_d_wu_w", "vmulwod_d_wu_w"] in 2915f757f3fSDimitry Andric def int_loongarch_lsx_#inst : VecInt<[llvm_v2i64_ty], 2925f757f3fSDimitry Andric [llvm_v4i32_ty, llvm_v4i32_ty], 2935f757f3fSDimitry Andric [IntrNoMem]>; 2945f757f3fSDimitry Andric 2955f757f3fSDimitry Andricforeach inst = ["vsrln_b_h", "vsran_b_h", "vsrlrn_b_h", "vsrarn_b_h", 2965f757f3fSDimitry Andric "vssrln_b_h", "vssran_b_h", "vssrln_bu_h", "vssran_bu_h", 2975f757f3fSDimitry Andric "vssrlrn_b_h", "vssrarn_b_h", "vssrlrn_bu_h", "vssrarn_bu_h"] in 2985f757f3fSDimitry Andric def int_loongarch_lsx_#inst : VecInt<[llvm_v16i8_ty], 2995f757f3fSDimitry Andric [llvm_v8i16_ty, llvm_v8i16_ty], 3005f757f3fSDimitry Andric [IntrNoMem]>; 3015f757f3fSDimitry Andric 3025f757f3fSDimitry Andricforeach inst = ["vsrln_h_w", "vsran_h_w", "vsrlrn_h_w", "vsrarn_h_w", 3035f757f3fSDimitry Andric "vssrln_h_w", "vssran_h_w", "vssrln_hu_w", "vssran_hu_w", 3045f757f3fSDimitry Andric "vssrlrn_h_w", "vssrarn_h_w", "vssrlrn_hu_w", "vssrarn_hu_w"] in 3055f757f3fSDimitry Andric def int_loongarch_lsx_#inst : VecInt<[llvm_v8i16_ty], 3065f757f3fSDimitry Andric [llvm_v4i32_ty, llvm_v4i32_ty], 3075f757f3fSDimitry Andric [IntrNoMem]>; 3085f757f3fSDimitry Andric 3095f757f3fSDimitry Andricforeach inst = ["vsrln_w_d", "vsran_w_d", "vsrlrn_w_d", "vsrarn_w_d", 3105f757f3fSDimitry Andric "vssrln_w_d", "vssran_w_d", "vssrln_wu_d", "vssran_wu_d", 3115f757f3fSDimitry Andric "vssrlrn_w_d", "vssrarn_w_d", "vssrlrn_wu_d", "vssrarn_wu_d"] in 3125f757f3fSDimitry Andric def int_loongarch_lsx_#inst : VecInt<[llvm_v4i32_ty], 3135f757f3fSDimitry Andric [llvm_v2i64_ty, llvm_v2i64_ty], 3145f757f3fSDimitry Andric [IntrNoMem]>; 3155f757f3fSDimitry Andric 3165f757f3fSDimitry Andricforeach inst = ["vmadd_b", "vmsub_b", "vfrstp_b", "vbitsel_v", "vshuf_b"] in 3175f757f3fSDimitry Andric def int_loongarch_lsx_#inst 3185f757f3fSDimitry Andric : VecInt<[llvm_v16i8_ty], 3195f757f3fSDimitry Andric [llvm_v16i8_ty, llvm_v16i8_ty, llvm_v16i8_ty], 3205f757f3fSDimitry Andric [IntrNoMem]>; 3215f757f3fSDimitry Andricforeach inst = ["vmadd_h", "vmsub_h", "vfrstp_h", "vshuf_h"] in 3225f757f3fSDimitry Andric def int_loongarch_lsx_#inst 3235f757f3fSDimitry Andric : VecInt<[llvm_v8i16_ty], 3245f757f3fSDimitry Andric [llvm_v8i16_ty, llvm_v8i16_ty, llvm_v8i16_ty], 3255f757f3fSDimitry Andric [IntrNoMem]>; 3265f757f3fSDimitry Andricforeach inst = ["vmadd_w", "vmsub_w", "vshuf_w"] in 3275f757f3fSDimitry Andric def int_loongarch_lsx_#inst 3285f757f3fSDimitry Andric : VecInt<[llvm_v4i32_ty], 3295f757f3fSDimitry Andric [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v4i32_ty], 3305f757f3fSDimitry Andric [IntrNoMem]>; 3315f757f3fSDimitry Andricforeach inst = ["vmadd_d", "vmsub_d", "vshuf_d"] in 3325f757f3fSDimitry Andric def int_loongarch_lsx_#inst 3335f757f3fSDimitry Andric : VecInt<[llvm_v2i64_ty], 3345f757f3fSDimitry Andric [llvm_v2i64_ty, llvm_v2i64_ty, llvm_v2i64_ty], 3355f757f3fSDimitry Andric [IntrNoMem]>; 3365f757f3fSDimitry Andric 3375f757f3fSDimitry Andricforeach inst = ["vsrlni_b_h", "vsrani_b_h", "vsrlrni_b_h", "vsrarni_b_h", 3385f757f3fSDimitry Andric "vssrlni_b_h", "vssrani_b_h", "vssrlni_bu_h", "vssrani_bu_h", 3395f757f3fSDimitry Andric "vssrlrni_b_h", "vssrarni_b_h", "vssrlrni_bu_h", "vssrarni_bu_h", 3405f757f3fSDimitry Andric "vfrstpi_b", "vbitseli_b", "vextrins_b"] in 3415f757f3fSDimitry Andric def int_loongarch_lsx_#inst 3425f757f3fSDimitry Andric : VecInt<[llvm_v16i8_ty], 3435f757f3fSDimitry Andric [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i32_ty], 3445f757f3fSDimitry Andric [IntrNoMem, ImmArg<ArgIndex<2>>]>; 3455f757f3fSDimitry Andricforeach inst = ["vsrlni_h_w", "vsrani_h_w", "vsrlrni_h_w", "vsrarni_h_w", 3465f757f3fSDimitry Andric "vssrlni_h_w", "vssrani_h_w", "vssrlni_hu_w", "vssrani_hu_w", 3475f757f3fSDimitry Andric "vssrlrni_h_w", "vssrarni_h_w", "vssrlrni_hu_w", "vssrarni_hu_w", 3485f757f3fSDimitry Andric "vfrstpi_h", "vextrins_h"] in 3495f757f3fSDimitry Andric def int_loongarch_lsx_#inst 3505f757f3fSDimitry Andric : VecInt<[llvm_v8i16_ty], 3515f757f3fSDimitry Andric [llvm_v8i16_ty, llvm_v8i16_ty, llvm_i32_ty], 3525f757f3fSDimitry Andric [IntrNoMem, ImmArg<ArgIndex<2>>]>; 3535f757f3fSDimitry Andricforeach inst = ["vsrlni_w_d", "vsrani_w_d", "vsrlrni_w_d", "vsrarni_w_d", 3545f757f3fSDimitry Andric "vssrlni_w_d", "vssrani_w_d", "vssrlni_wu_d", "vssrani_wu_d", 3555f757f3fSDimitry Andric "vssrlrni_w_d", "vssrarni_w_d", "vssrlrni_wu_d", "vssrarni_wu_d", 3565f757f3fSDimitry Andric "vpermi_w", "vextrins_w"] in 3575f757f3fSDimitry Andric def int_loongarch_lsx_#inst 3585f757f3fSDimitry Andric : VecInt<[llvm_v4i32_ty], 3595f757f3fSDimitry Andric [llvm_v4i32_ty, llvm_v4i32_ty, llvm_i32_ty], 3605f757f3fSDimitry Andric [IntrNoMem, ImmArg<ArgIndex<2>>]>; 3615f757f3fSDimitry Andricforeach inst = ["vsrlni_d_q", "vsrani_d_q", "vsrlrni_d_q", "vsrarni_d_q", 3625f757f3fSDimitry Andric "vssrlni_d_q", "vssrani_d_q", "vssrlni_du_q", "vssrani_du_q", 3635f757f3fSDimitry Andric "vssrlrni_d_q", "vssrarni_d_q", "vssrlrni_du_q", "vssrarni_du_q", 3645f757f3fSDimitry Andric "vshuf4i_d", "vextrins_d"] in 3655f757f3fSDimitry Andric def int_loongarch_lsx_#inst 3665f757f3fSDimitry Andric : VecInt<[llvm_v2i64_ty], 3675f757f3fSDimitry Andric [llvm_v2i64_ty, llvm_v2i64_ty, llvm_i32_ty], 3685f757f3fSDimitry Andric [IntrNoMem, ImmArg<ArgIndex<2>>]>; 3695f757f3fSDimitry Andric 3705f757f3fSDimitry Andricforeach inst = ["vmaddwev_h_b", "vmaddwod_h_b", "vmaddwev_h_bu", 3715f757f3fSDimitry Andric "vmaddwod_h_bu", "vmaddwev_h_bu_b", "vmaddwod_h_bu_b"] in 3725f757f3fSDimitry Andric def int_loongarch_lsx_#inst 3735f757f3fSDimitry Andric : VecInt<[llvm_v8i16_ty], 3745f757f3fSDimitry Andric [llvm_v8i16_ty, llvm_v16i8_ty, llvm_v16i8_ty], 3755f757f3fSDimitry Andric [IntrNoMem]>; 3765f757f3fSDimitry Andricforeach inst = ["vmaddwev_w_h", "vmaddwod_w_h", "vmaddwev_w_hu", 3775f757f3fSDimitry Andric "vmaddwod_w_hu", "vmaddwev_w_hu_h", "vmaddwod_w_hu_h"] in 3785f757f3fSDimitry Andric def int_loongarch_lsx_#inst 3795f757f3fSDimitry Andric : VecInt<[llvm_v4i32_ty], 3805f757f3fSDimitry Andric [llvm_v4i32_ty, llvm_v8i16_ty, llvm_v8i16_ty], 3815f757f3fSDimitry Andric [IntrNoMem]>; 3825f757f3fSDimitry Andricforeach inst = ["vmaddwev_d_w", "vmaddwod_d_w", "vmaddwev_d_wu", 3835f757f3fSDimitry Andric "vmaddwod_d_wu", "vmaddwev_d_wu_w", "vmaddwod_d_wu_w"] in 3845f757f3fSDimitry Andric def int_loongarch_lsx_#inst 3855f757f3fSDimitry Andric : VecInt<[llvm_v2i64_ty], 3865f757f3fSDimitry Andric [llvm_v2i64_ty, llvm_v4i32_ty, llvm_v4i32_ty], 3875f757f3fSDimitry Andric [IntrNoMem]>; 3885f757f3fSDimitry Andricforeach inst = ["vmaddwev_q_d", "vmaddwod_q_d", "vmaddwev_q_du", 3895f757f3fSDimitry Andric "vmaddwod_q_du", "vmaddwev_q_du_d", "vmaddwod_q_du_d"] in 3905f757f3fSDimitry Andric def int_loongarch_lsx_#inst 3915f757f3fSDimitry Andric : VecInt<[llvm_v2i64_ty], 3925f757f3fSDimitry Andric [llvm_v2i64_ty, llvm_v2i64_ty, llvm_v2i64_ty], 3935f757f3fSDimitry Andric [IntrNoMem]>; 3945f757f3fSDimitry Andric 3955f757f3fSDimitry Andricforeach inst = ["vsllwil_h_b", "vsllwil_hu_bu"] in 3965f757f3fSDimitry Andric def int_loongarch_lsx_#inst : VecInt<[llvm_v8i16_ty], 3975f757f3fSDimitry Andric [llvm_v16i8_ty, llvm_i32_ty], 3985f757f3fSDimitry Andric [IntrNoMem, ImmArg<ArgIndex<1>>]>; 3995f757f3fSDimitry Andricforeach inst = ["vsllwil_w_h", "vsllwil_wu_hu"] in 4005f757f3fSDimitry Andric def int_loongarch_lsx_#inst : VecInt<[llvm_v4i32_ty], 4015f757f3fSDimitry Andric [llvm_v8i16_ty, llvm_i32_ty], 4025f757f3fSDimitry Andric [IntrNoMem, ImmArg<ArgIndex<1>>]>; 4035f757f3fSDimitry Andricforeach inst = ["vsllwil_d_w", "vsllwil_du_wu"] in 4045f757f3fSDimitry Andric def int_loongarch_lsx_#inst : VecInt<[llvm_v2i64_ty], 4055f757f3fSDimitry Andric [llvm_v4i32_ty, llvm_i32_ty], 4065f757f3fSDimitry Andric [IntrNoMem, ImmArg<ArgIndex<1>>]>; 4075f757f3fSDimitry Andric 4085f757f3fSDimitry Andricforeach inst = ["vneg_b", "vmskltz_b", "vmskgez_b", "vmsknz_b", 4095f757f3fSDimitry Andric "vclo_b", "vclz_b", "vpcnt_b"] in 4105f757f3fSDimitry Andric def int_loongarch_lsx_#inst : VecInt<[llvm_v16i8_ty], [llvm_v16i8_ty], 4115f757f3fSDimitry Andric [IntrNoMem]>; 4125f757f3fSDimitry Andricforeach inst = ["vneg_h", "vmskltz_h", "vclo_h", "vclz_h", "vpcnt_h"] in 4135f757f3fSDimitry Andric def int_loongarch_lsx_#inst : VecInt<[llvm_v8i16_ty], [llvm_v8i16_ty], 4145f757f3fSDimitry Andric [IntrNoMem]>; 4155f757f3fSDimitry Andricforeach inst = ["vneg_w", "vmskltz_w", "vclo_w", "vclz_w", "vpcnt_w"] in 4165f757f3fSDimitry Andric def int_loongarch_lsx_#inst : VecInt<[llvm_v4i32_ty], [llvm_v4i32_ty], 4175f757f3fSDimitry Andric [IntrNoMem]>; 4185f757f3fSDimitry Andricforeach inst = ["vneg_d", "vexth_q_d", "vexth_qu_du", "vmskltz_d", 4195f757f3fSDimitry Andric "vextl_q_d", "vextl_qu_du", "vclo_d", "vclz_d", "vpcnt_d"] in 4205f757f3fSDimitry Andric def int_loongarch_lsx_#inst : VecInt<[llvm_v2i64_ty], [llvm_v2i64_ty], 4215f757f3fSDimitry Andric [IntrNoMem]>; 4225f757f3fSDimitry Andric 4235f757f3fSDimitry Andricforeach inst = ["vexth_h_b", "vexth_hu_bu"] in 4245f757f3fSDimitry Andric def int_loongarch_lsx_#inst : VecInt<[llvm_v8i16_ty], [llvm_v16i8_ty], 4255f757f3fSDimitry Andric [IntrNoMem]>; 4265f757f3fSDimitry Andricforeach inst = ["vexth_w_h", "vexth_wu_hu"] in 4275f757f3fSDimitry Andric def int_loongarch_lsx_#inst : VecInt<[llvm_v4i32_ty], [llvm_v8i16_ty], 4285f757f3fSDimitry Andric [IntrNoMem]>; 4295f757f3fSDimitry Andricforeach inst = ["vexth_d_w", "vexth_du_wu"] in 4305f757f3fSDimitry Andric def int_loongarch_lsx_#inst : VecInt<[llvm_v2i64_ty], [llvm_v4i32_ty], 4315f757f3fSDimitry Andric [IntrNoMem]>; 4325f757f3fSDimitry Andric 4335f757f3fSDimitry Andricdef int_loongarch_lsx_vldi : VecInt<[llvm_v2i64_ty], [llvm_i32_ty], 4345f757f3fSDimitry Andric [IntrNoMem, ImmArg<ArgIndex<0>>]>; 4355f757f3fSDimitry Andricdef int_loongarch_lsx_vrepli_b : VecInt<[llvm_v16i8_ty], [llvm_i32_ty], 4365f757f3fSDimitry Andric [IntrNoMem, ImmArg<ArgIndex<0>>]>; 4375f757f3fSDimitry Andricdef int_loongarch_lsx_vrepli_h : VecInt<[llvm_v8i16_ty], [llvm_i32_ty], 4385f757f3fSDimitry Andric [IntrNoMem, ImmArg<ArgIndex<0>>]>; 4395f757f3fSDimitry Andricdef int_loongarch_lsx_vrepli_w : VecInt<[llvm_v4i32_ty], [llvm_i32_ty], 4405f757f3fSDimitry Andric [IntrNoMem, ImmArg<ArgIndex<0>>]>; 4415f757f3fSDimitry Andricdef int_loongarch_lsx_vrepli_d : VecInt<[llvm_v2i64_ty], [llvm_i32_ty], 4425f757f3fSDimitry Andric [IntrNoMem, ImmArg<ArgIndex<0>>]>; 4435f757f3fSDimitry Andric 4445f757f3fSDimitry Andricdef int_loongarch_lsx_vreplgr2vr_b : VecInt<[llvm_v16i8_ty], [llvm_i32_ty], 4455f757f3fSDimitry Andric [IntrNoMem]>; 4465f757f3fSDimitry Andricdef int_loongarch_lsx_vreplgr2vr_h : VecInt<[llvm_v8i16_ty], [llvm_i32_ty], 4475f757f3fSDimitry Andric [IntrNoMem]>; 4485f757f3fSDimitry Andricdef int_loongarch_lsx_vreplgr2vr_w : VecInt<[llvm_v4i32_ty], [llvm_i32_ty], 4495f757f3fSDimitry Andric [IntrNoMem]>; 4505f757f3fSDimitry Andricdef int_loongarch_lsx_vreplgr2vr_d : VecInt<[llvm_v2i64_ty], [llvm_i64_ty], 4515f757f3fSDimitry Andric [IntrNoMem]>; 4525f757f3fSDimitry Andric 4535f757f3fSDimitry Andricdef int_loongarch_lsx_vinsgr2vr_b 4545f757f3fSDimitry Andric : VecInt<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty, llvm_i32_ty], 4555f757f3fSDimitry Andric [IntrNoMem, ImmArg<ArgIndex<2>>]>; 4565f757f3fSDimitry Andricdef int_loongarch_lsx_vinsgr2vr_h 4575f757f3fSDimitry Andric : VecInt<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i32_ty, llvm_i32_ty], 4585f757f3fSDimitry Andric [IntrNoMem, ImmArg<ArgIndex<2>>]>; 4595f757f3fSDimitry Andricdef int_loongarch_lsx_vinsgr2vr_w 4605f757f3fSDimitry Andric : VecInt<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i32_ty, llvm_i32_ty], 4615f757f3fSDimitry Andric [IntrNoMem, ImmArg<ArgIndex<2>>]>; 4625f757f3fSDimitry Andricdef int_loongarch_lsx_vinsgr2vr_d 4635f757f3fSDimitry Andric : VecInt<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i64_ty, llvm_i32_ty], 4645f757f3fSDimitry Andric [IntrNoMem, ImmArg<ArgIndex<2>>]>; 4655f757f3fSDimitry Andric 4665f757f3fSDimitry Andricdef int_loongarch_lsx_vreplve_b 4675f757f3fSDimitry Andric : VecInt<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty], [IntrNoMem]>; 4685f757f3fSDimitry Andricdef int_loongarch_lsx_vreplve_h 4695f757f3fSDimitry Andric : VecInt<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i32_ty], [IntrNoMem]>; 4705f757f3fSDimitry Andricdef int_loongarch_lsx_vreplve_w 4715f757f3fSDimitry Andric : VecInt<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i32_ty], [IntrNoMem]>; 4725f757f3fSDimitry Andricdef int_loongarch_lsx_vreplve_d 4735f757f3fSDimitry Andric : VecInt<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i32_ty], [IntrNoMem]>; 4745f757f3fSDimitry Andric 4755f757f3fSDimitry Andricforeach inst = ["vpickve2gr_b", "vpickve2gr_bu" ] in 4765f757f3fSDimitry Andric def int_loongarch_lsx_#inst : VecInt<[llvm_i32_ty], 4775f757f3fSDimitry Andric [llvm_v16i8_ty, llvm_i32_ty], 4785f757f3fSDimitry Andric [IntrNoMem, ImmArg<ArgIndex<1>>]>; 4795f757f3fSDimitry Andricforeach inst = ["vpickve2gr_h", "vpickve2gr_hu" ] in 4805f757f3fSDimitry Andric def int_loongarch_lsx_#inst : VecInt<[llvm_i32_ty], 4815f757f3fSDimitry Andric [llvm_v8i16_ty, llvm_i32_ty], 4825f757f3fSDimitry Andric [IntrNoMem, ImmArg<ArgIndex<1>>]>; 4835f757f3fSDimitry Andricforeach inst = ["vpickve2gr_w", "vpickve2gr_wu" ] in 4845f757f3fSDimitry Andric def int_loongarch_lsx_#inst : VecInt<[llvm_i32_ty], 4855f757f3fSDimitry Andric [llvm_v4i32_ty, llvm_i32_ty], 4865f757f3fSDimitry Andric [IntrNoMem, ImmArg<ArgIndex<1>>]>; 4875f757f3fSDimitry Andricforeach inst = ["vpickve2gr_d", "vpickve2gr_du" ] in 4885f757f3fSDimitry Andric def int_loongarch_lsx_#inst : VecInt<[llvm_i64_ty], 4895f757f3fSDimitry Andric [llvm_v2i64_ty, llvm_i32_ty], 4905f757f3fSDimitry Andric [IntrNoMem, ImmArg<ArgIndex<1>>]>; 4915f757f3fSDimitry Andric 4925f757f3fSDimitry Andricdef int_loongarch_lsx_bz_b : VecInt<[llvm_i32_ty], [llvm_v16i8_ty], 4935f757f3fSDimitry Andric [IntrNoMem]>; 4945f757f3fSDimitry Andricdef int_loongarch_lsx_bz_h : VecInt<[llvm_i32_ty], [llvm_v8i16_ty], 4955f757f3fSDimitry Andric [IntrNoMem]>; 4965f757f3fSDimitry Andricdef int_loongarch_lsx_bz_w : VecInt<[llvm_i32_ty], [llvm_v4i32_ty], 4975f757f3fSDimitry Andric [IntrNoMem]>; 4985f757f3fSDimitry Andricdef int_loongarch_lsx_bz_d : VecInt<[llvm_i32_ty], [llvm_v2i64_ty], 4995f757f3fSDimitry Andric [IntrNoMem]>; 5005f757f3fSDimitry Andricdef int_loongarch_lsx_bz_v : VecInt<[llvm_i32_ty], [llvm_v16i8_ty], 5015f757f3fSDimitry Andric [IntrNoMem]>; 5025f757f3fSDimitry Andric 5035f757f3fSDimitry Andricdef int_loongarch_lsx_bnz_v : VecInt<[llvm_i32_ty], [llvm_v16i8_ty], 5045f757f3fSDimitry Andric [IntrNoMem]>; 5055f757f3fSDimitry Andricdef int_loongarch_lsx_bnz_b : VecInt<[llvm_i32_ty], [llvm_v16i8_ty], 5065f757f3fSDimitry Andric [IntrNoMem]>; 5075f757f3fSDimitry Andricdef int_loongarch_lsx_bnz_h : VecInt<[llvm_i32_ty], [llvm_v8i16_ty], 5085f757f3fSDimitry Andric [IntrNoMem]>; 5095f757f3fSDimitry Andricdef int_loongarch_lsx_bnz_w : VecInt<[llvm_i32_ty], [llvm_v4i32_ty], 5105f757f3fSDimitry Andric [IntrNoMem]>; 5115f757f3fSDimitry Andricdef int_loongarch_lsx_bnz_d : VecInt<[llvm_i32_ty], [llvm_v2i64_ty], 5125f757f3fSDimitry Andric [IntrNoMem]>; 5135f757f3fSDimitry Andric 5145f757f3fSDimitry Andric// LSX Float 5155f757f3fSDimitry Andric 5165f757f3fSDimitry Andricforeach inst = ["vfadd_s", "vfsub_s", "vfmul_s", "vfdiv_s", 5175f757f3fSDimitry Andric "vfmax_s", "vfmin_s", "vfmaxa_s", "vfmina_s"] in 5185f757f3fSDimitry Andric def int_loongarch_lsx_#inst : VecInt<[llvm_v4f32_ty], 5195f757f3fSDimitry Andric [llvm_v4f32_ty, llvm_v4f32_ty], 5205f757f3fSDimitry Andric [IntrNoMem]>; 5215f757f3fSDimitry Andricforeach inst = ["vfadd_d", "vfsub_d", "vfmul_d", "vfdiv_d", 5225f757f3fSDimitry Andric "vfmax_d", "vfmin_d", "vfmaxa_d", "vfmina_d"] in 5235f757f3fSDimitry Andric def int_loongarch_lsx_#inst : VecInt<[llvm_v2f64_ty], 5245f757f3fSDimitry Andric [llvm_v2f64_ty, llvm_v2f64_ty], 5255f757f3fSDimitry Andric [IntrNoMem]>; 5265f757f3fSDimitry Andric 5275f757f3fSDimitry Andricforeach inst = ["vfmadd_s", "vfmsub_s", "vfnmadd_s", "vfnmsub_s"] in 5285f757f3fSDimitry Andric def int_loongarch_lsx_#inst 5295f757f3fSDimitry Andric : VecInt<[llvm_v4f32_ty], 5305f757f3fSDimitry Andric [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty], 5315f757f3fSDimitry Andric [IntrNoMem]>; 5325f757f3fSDimitry Andricforeach inst = ["vfmadd_d", "vfmsub_d", "vfnmadd_d", "vfnmsub_d"] in 5335f757f3fSDimitry Andric def int_loongarch_lsx_#inst 5345f757f3fSDimitry Andric : VecInt<[llvm_v2f64_ty], 5355f757f3fSDimitry Andric [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty], 5365f757f3fSDimitry Andric [IntrNoMem]>; 5375f757f3fSDimitry Andric 5385f757f3fSDimitry Andricforeach inst = ["vflogb_s", "vfsqrt_s", "vfrecip_s", "vfrsqrt_s", "vfrint_s", 539*7a6dacacSDimitry Andric "vfrecipe_s", "vfrsqrte_s", 5405f757f3fSDimitry Andric "vfrintrne_s", "vfrintrz_s", "vfrintrp_s", "vfrintrm_s"] in 5415f757f3fSDimitry Andric def int_loongarch_lsx_#inst : VecInt<[llvm_v4f32_ty], [llvm_v4f32_ty], 5425f757f3fSDimitry Andric [IntrNoMem]>; 5435f757f3fSDimitry Andricforeach inst = ["vflogb_d", "vfsqrt_d", "vfrecip_d", "vfrsqrt_d", "vfrint_d", 544*7a6dacacSDimitry Andric "vfrecipe_d", "vfrsqrte_d", 5455f757f3fSDimitry Andric "vfrintrne_d", "vfrintrz_d", "vfrintrp_d", "vfrintrm_d"] in 5465f757f3fSDimitry Andric def int_loongarch_lsx_#inst : VecInt<[llvm_v2f64_ty], [llvm_v2f64_ty], 5475f757f3fSDimitry Andric [IntrNoMem]>; 5485f757f3fSDimitry Andric 5495f757f3fSDimitry Andricforeach inst = ["vfcvtl_s_h", "vfcvth_s_h"] in 5505f757f3fSDimitry Andric def int_loongarch_lsx_#inst : VecInt<[llvm_v4f32_ty], [llvm_v8i16_ty], 5515f757f3fSDimitry Andric [IntrNoMem]>; 5525f757f3fSDimitry Andricforeach inst = ["vfcvtl_d_s", "vfcvth_d_s"] in 5535f757f3fSDimitry Andric def int_loongarch_lsx_#inst : VecInt<[llvm_v2f64_ty], [llvm_v4f32_ty], 5545f757f3fSDimitry Andric [IntrNoMem]>; 5555f757f3fSDimitry Andric 5565f757f3fSDimitry Andricforeach inst = ["vftintrne_w_s", "vftintrz_w_s", "vftintrp_w_s", "vftintrm_w_s", 5575f757f3fSDimitry Andric "vftint_w_s", "vftintrz_wu_s", "vftint_wu_s", "vfclass_s"] in 5585f757f3fSDimitry Andric def int_loongarch_lsx_#inst : VecInt<[llvm_v4i32_ty], [llvm_v4f32_ty], 5595f757f3fSDimitry Andric [IntrNoMem]>; 5605f757f3fSDimitry Andricforeach inst = ["vftintrne_l_d", "vftintrz_l_d", "vftintrp_l_d", "vftintrm_l_d", 5615f757f3fSDimitry Andric "vftint_l_d", "vftintrz_lu_d", "vftint_lu_d", "vfclass_d"] in 5625f757f3fSDimitry Andric def int_loongarch_lsx_#inst : VecInt<[llvm_v2i64_ty], [llvm_v2f64_ty], 5635f757f3fSDimitry Andric [IntrNoMem]>; 5645f757f3fSDimitry Andric 5655f757f3fSDimitry Andricforeach inst = ["vftintrnel_l_s", "vftintrneh_l_s", "vftintrzl_l_s", 5665f757f3fSDimitry Andric "vftintrzh_l_s", "vftintrpl_l_s", "vftintrph_l_s", 5675f757f3fSDimitry Andric "vftintrml_l_s", "vftintrmh_l_s", "vftintl_l_s", 5685f757f3fSDimitry Andric "vftinth_l_s"] in 5695f757f3fSDimitry Andric def int_loongarch_lsx_#inst : VecInt<[llvm_v2i64_ty], [llvm_v4f32_ty], 5705f757f3fSDimitry Andric [IntrNoMem]>; 5715f757f3fSDimitry Andric 5725f757f3fSDimitry Andricforeach inst = ["vffint_s_w", "vffint_s_wu"] in 5735f757f3fSDimitry Andric def int_loongarch_lsx_#inst : VecInt<[llvm_v4f32_ty], [llvm_v4i32_ty], 5745f757f3fSDimitry Andric [IntrNoMem]>; 5755f757f3fSDimitry Andricforeach inst = ["vffint_d_l", "vffint_d_lu"] in 5765f757f3fSDimitry Andric def int_loongarch_lsx_#inst : VecInt<[llvm_v2f64_ty], [llvm_v2i64_ty], 5775f757f3fSDimitry Andric [IntrNoMem]>; 5785f757f3fSDimitry Andric 5795f757f3fSDimitry Andricforeach inst = ["vffintl_d_w", "vffinth_d_w"] in 5805f757f3fSDimitry Andric def int_loongarch_lsx_#inst : VecInt<[llvm_v2f64_ty], [llvm_v4i32_ty], 5815f757f3fSDimitry Andric [IntrNoMem]>; 5825f757f3fSDimitry Andric 5835f757f3fSDimitry Andricforeach inst = ["vffint_s_l"] in 5845f757f3fSDimitry Andric def int_loongarch_lsx_#inst : VecInt<[llvm_v4f32_ty], 5855f757f3fSDimitry Andric [llvm_v2i64_ty, llvm_v2i64_ty], 5865f757f3fSDimitry Andric [IntrNoMem]>; 5875f757f3fSDimitry Andricforeach inst = ["vftintrne_w_d", "vftintrz_w_d", "vftintrp_w_d", "vftintrm_w_d", 5885f757f3fSDimitry Andric "vftint_w_d"] in 5895f757f3fSDimitry Andric def int_loongarch_lsx_#inst : VecInt<[llvm_v4i32_ty], 5905f757f3fSDimitry Andric [llvm_v2f64_ty, llvm_v2f64_ty], 5915f757f3fSDimitry Andric [IntrNoMem]>; 5925f757f3fSDimitry Andric 5935f757f3fSDimitry Andricforeach inst = ["vfcvt_h_s"] in 5945f757f3fSDimitry Andric def int_loongarch_lsx_#inst : VecInt<[llvm_v8i16_ty], 5955f757f3fSDimitry Andric [llvm_v4f32_ty, llvm_v4f32_ty], 5965f757f3fSDimitry Andric [IntrNoMem]>; 5975f757f3fSDimitry Andricforeach inst = ["vfcvt_s_d"] in 5985f757f3fSDimitry Andric def int_loongarch_lsx_#inst : VecInt<[llvm_v4f32_ty], 5995f757f3fSDimitry Andric [llvm_v2f64_ty, llvm_v2f64_ty], 6005f757f3fSDimitry Andric [IntrNoMem]>; 6015f757f3fSDimitry Andric 6025f757f3fSDimitry Andricforeach inst = ["vfcmp_caf_s", "vfcmp_cun_s", "vfcmp_ceq_s", "vfcmp_cueq_s", 6035f757f3fSDimitry Andric "vfcmp_clt_s", "vfcmp_cult_s", "vfcmp_cle_s", "vfcmp_cule_s", 6045f757f3fSDimitry Andric "vfcmp_cne_s", "vfcmp_cor_s", "vfcmp_cune_s", 6055f757f3fSDimitry Andric "vfcmp_saf_s", "vfcmp_sun_s", "vfcmp_seq_s", "vfcmp_sueq_s", 6065f757f3fSDimitry Andric "vfcmp_slt_s", "vfcmp_sult_s", "vfcmp_sle_s", "vfcmp_sule_s", 6075f757f3fSDimitry Andric "vfcmp_sne_s", "vfcmp_sor_s", "vfcmp_sune_s"] in 6085f757f3fSDimitry Andric def int_loongarch_lsx_#inst : VecInt<[llvm_v4i32_ty], 6095f757f3fSDimitry Andric [llvm_v4f32_ty, llvm_v4f32_ty], 6105f757f3fSDimitry Andric [IntrNoMem]>; 6115f757f3fSDimitry Andricforeach inst = ["vfcmp_caf_d", "vfcmp_cun_d", "vfcmp_ceq_d", "vfcmp_cueq_d", 6125f757f3fSDimitry Andric "vfcmp_clt_d", "vfcmp_cult_d", "vfcmp_cle_d", "vfcmp_cule_d", 6135f757f3fSDimitry Andric "vfcmp_cne_d", "vfcmp_cor_d", "vfcmp_cune_d", 6145f757f3fSDimitry Andric "vfcmp_saf_d", "vfcmp_sun_d", "vfcmp_seq_d", "vfcmp_sueq_d", 6155f757f3fSDimitry Andric "vfcmp_slt_d", "vfcmp_sult_d", "vfcmp_sle_d", "vfcmp_sule_d", 6165f757f3fSDimitry Andric "vfcmp_sne_d", "vfcmp_sor_d", "vfcmp_sune_d"] in 6175f757f3fSDimitry Andric def int_loongarch_lsx_#inst : VecInt<[llvm_v2i64_ty], 6185f757f3fSDimitry Andric [llvm_v2f64_ty, llvm_v2f64_ty], 6195f757f3fSDimitry Andric [IntrNoMem]>; 6205f757f3fSDimitry Andric 6215f757f3fSDimitry Andric// LSX load/store 6225f757f3fSDimitry Andricdef int_loongarch_lsx_vld 6235f757f3fSDimitry Andric : VecInt<[llvm_v16i8_ty], [llvm_ptr_ty, llvm_i32_ty], 6245f757f3fSDimitry Andric [IntrReadMem, IntrArgMemOnly, ImmArg<ArgIndex<1>>]>; 6255f757f3fSDimitry Andricdef int_loongarch_lsx_vldx 6265f757f3fSDimitry Andric : VecInt<[llvm_v16i8_ty], [llvm_ptr_ty, llvm_i64_ty], 6275f757f3fSDimitry Andric [IntrReadMem, IntrArgMemOnly]>; 6285f757f3fSDimitry Andricdef int_loongarch_lsx_vldrepl_b 6295f757f3fSDimitry Andric : VecInt<[llvm_v16i8_ty], [llvm_ptr_ty, llvm_i32_ty], 6305f757f3fSDimitry Andric [IntrReadMem, IntrArgMemOnly, ImmArg<ArgIndex<1>>]>; 6315f757f3fSDimitry Andricdef int_loongarch_lsx_vldrepl_h 6325f757f3fSDimitry Andric : VecInt<[llvm_v8i16_ty], [llvm_ptr_ty, llvm_i32_ty], 6335f757f3fSDimitry Andric [IntrReadMem, IntrArgMemOnly, ImmArg<ArgIndex<1>>]>; 6345f757f3fSDimitry Andricdef int_loongarch_lsx_vldrepl_w 6355f757f3fSDimitry Andric : VecInt<[llvm_v4i32_ty], [llvm_ptr_ty, llvm_i32_ty], 6365f757f3fSDimitry Andric [IntrReadMem, IntrArgMemOnly, ImmArg<ArgIndex<1>>]>; 6375f757f3fSDimitry Andricdef int_loongarch_lsx_vldrepl_d 6385f757f3fSDimitry Andric : VecInt<[llvm_v2i64_ty], [llvm_ptr_ty, llvm_i32_ty], 6395f757f3fSDimitry Andric [IntrReadMem, IntrArgMemOnly, ImmArg<ArgIndex<1>>]>; 6405f757f3fSDimitry Andric 6415f757f3fSDimitry Andricdef int_loongarch_lsx_vst 6425f757f3fSDimitry Andric : VecInt<[], [llvm_v16i8_ty, llvm_ptr_ty, llvm_i32_ty], 6435f757f3fSDimitry Andric [IntrWriteMem, IntrArgMemOnly, ImmArg<ArgIndex<2>>]>; 6445f757f3fSDimitry Andricdef int_loongarch_lsx_vstx 6455f757f3fSDimitry Andric : VecInt<[], [llvm_v16i8_ty, llvm_ptr_ty, llvm_i64_ty], 6465f757f3fSDimitry Andric [IntrWriteMem, IntrArgMemOnly]>; 6475f757f3fSDimitry Andricdef int_loongarch_lsx_vstelm_b 6485f757f3fSDimitry Andric : VecInt<[], [llvm_v16i8_ty, llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], 6495f757f3fSDimitry Andric [IntrWriteMem, IntrArgMemOnly, ImmArg<ArgIndex<2>>, ImmArg<ArgIndex<3>>]>; 6505f757f3fSDimitry Andricdef int_loongarch_lsx_vstelm_h 6515f757f3fSDimitry Andric : VecInt<[], [llvm_v8i16_ty, llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], 6525f757f3fSDimitry Andric [IntrWriteMem, IntrArgMemOnly, ImmArg<ArgIndex<2>>, ImmArg<ArgIndex<3>>]>; 6535f757f3fSDimitry Andricdef int_loongarch_lsx_vstelm_w 6545f757f3fSDimitry Andric : VecInt<[], [llvm_v4i32_ty, llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], 6555f757f3fSDimitry Andric [IntrWriteMem, IntrArgMemOnly, ImmArg<ArgIndex<2>>, ImmArg<ArgIndex<3>>]>; 6565f757f3fSDimitry Andricdef int_loongarch_lsx_vstelm_d 6575f757f3fSDimitry Andric : VecInt<[], [llvm_v2i64_ty, llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], 6585f757f3fSDimitry Andric [IntrWriteMem, IntrArgMemOnly, ImmArg<ArgIndex<2>>, ImmArg<ArgIndex<3>>]>; 6595f757f3fSDimitry Andric 6605f757f3fSDimitry Andric} // TargetPrefix = "loongarch" 6615f757f3fSDimitry Andric 6625f757f3fSDimitry Andric//===----------------------------------------------------------------------===// 6635f757f3fSDimitry Andric// LASX 6645f757f3fSDimitry Andric 6655f757f3fSDimitry Andriclet TargetPrefix = "loongarch" in { 6665f757f3fSDimitry Andricforeach inst = ["xvadd_b", "xvsub_b", 6675f757f3fSDimitry Andric "xvsadd_b", "xvsadd_bu", "xvssub_b", "xvssub_bu", 6685f757f3fSDimitry Andric "xvavg_b", "xvavg_bu", "xvavgr_b", "xvavgr_bu", 6695f757f3fSDimitry Andric "xvabsd_b", "xvabsd_bu", "xvadda_b", 6705f757f3fSDimitry Andric "xvmax_b", "xvmax_bu", "xvmin_b", "xvmin_bu", 6715f757f3fSDimitry Andric "xvmul_b", "xvmuh_b", "xvmuh_bu", 6725f757f3fSDimitry Andric "xvdiv_b", "xvdiv_bu", "xvmod_b", "xvmod_bu", "xvsigncov_b", 6735f757f3fSDimitry Andric "xvand_v", "xvor_v", "xvxor_v", "xvnor_v", "xvandn_v", "xvorn_v", 6745f757f3fSDimitry Andric "xvsll_b", "xvsrl_b", "xvsra_b", "xvrotr_b", "xvsrlr_b", "xvsrar_b", 6755f757f3fSDimitry Andric "xvbitclr_b", "xvbitset_b", "xvbitrev_b", 6765f757f3fSDimitry Andric "xvseq_b", "xvsle_b", "xvsle_bu", "xvslt_b", "xvslt_bu", 6775f757f3fSDimitry Andric "xvpackev_b", "xvpackod_b", "xvpickev_b", "xvpickod_b", 6785f757f3fSDimitry Andric "xvilvl_b", "xvilvh_b"] in 6795f757f3fSDimitry Andric def int_loongarch_lasx_#inst : VecInt<[llvm_v32i8_ty], 6805f757f3fSDimitry Andric [llvm_v32i8_ty, llvm_v32i8_ty], 6815f757f3fSDimitry Andric [IntrNoMem]>; 6825f757f3fSDimitry Andric 6835f757f3fSDimitry Andricforeach inst = ["xvadd_h", "xvsub_h", 6845f757f3fSDimitry Andric "xvsadd_h", "xvsadd_hu", "xvssub_h", "xvssub_hu", 6855f757f3fSDimitry Andric "xvavg_h", "xvavg_hu", "xvavgr_h", "xvavgr_hu", 6865f757f3fSDimitry Andric "xvabsd_h", "xvabsd_hu", "xvadda_h", 6875f757f3fSDimitry Andric "xvmax_h", "xvmax_hu", "xvmin_h", "xvmin_hu", 6885f757f3fSDimitry Andric "xvmul_h", "xvmuh_h", "xvmuh_hu", 6895f757f3fSDimitry Andric "xvdiv_h", "xvdiv_hu", "xvmod_h", "xvmod_hu", "xvsigncov_h", 6905f757f3fSDimitry Andric "xvsll_h", "xvsrl_h", "xvsra_h", "xvrotr_h", "xvsrlr_h", "xvsrar_h", 6915f757f3fSDimitry Andric "xvbitclr_h", "xvbitset_h", "xvbitrev_h", 6925f757f3fSDimitry Andric "xvseq_h", "xvsle_h", "xvsle_hu", "xvslt_h", "xvslt_hu", 6935f757f3fSDimitry Andric "xvpackev_h", "xvpackod_h", "xvpickev_h", "xvpickod_h", 6945f757f3fSDimitry Andric "xvilvl_h", "xvilvh_h"] in 6955f757f3fSDimitry Andric def int_loongarch_lasx_#inst : VecInt<[llvm_v16i16_ty], 6965f757f3fSDimitry Andric [llvm_v16i16_ty, llvm_v16i16_ty], 6975f757f3fSDimitry Andric [IntrNoMem]>; 6985f757f3fSDimitry Andric 6995f757f3fSDimitry Andricforeach inst = ["xvadd_w", "xvsub_w", 7005f757f3fSDimitry Andric "xvsadd_w", "xvsadd_wu", "xvssub_w", "xvssub_wu", 7015f757f3fSDimitry Andric "xvavg_w", "xvavg_wu", "xvavgr_w", "xvavgr_wu", 7025f757f3fSDimitry Andric "xvabsd_w", "xvabsd_wu", "xvadda_w", 7035f757f3fSDimitry Andric "xvmax_w", "xvmax_wu", "xvmin_w", "xvmin_wu", 7045f757f3fSDimitry Andric "xvmul_w", "xvmuh_w", "xvmuh_wu", 7055f757f3fSDimitry Andric "xvdiv_w", "xvdiv_wu", "xvmod_w", "xvmod_wu", "xvsigncov_w", 7065f757f3fSDimitry Andric "xvsll_w", "xvsrl_w", "xvsra_w", "xvrotr_w", "xvsrlr_w", "xvsrar_w", 7075f757f3fSDimitry Andric "xvbitclr_w", "xvbitset_w", "xvbitrev_w", 7085f757f3fSDimitry Andric "xvseq_w", "xvsle_w", "xvsle_wu", "xvslt_w", "xvslt_wu", 7095f757f3fSDimitry Andric "xvpackev_w", "xvpackod_w", "xvpickev_w", "xvpickod_w", 7105f757f3fSDimitry Andric "xvilvl_w", "xvilvh_w", "xvperm_w"] in 7115f757f3fSDimitry Andric def int_loongarch_lasx_#inst : VecInt<[llvm_v8i32_ty], 7125f757f3fSDimitry Andric [llvm_v8i32_ty, llvm_v8i32_ty], 7135f757f3fSDimitry Andric [IntrNoMem]>; 7145f757f3fSDimitry Andric 7155f757f3fSDimitry Andricforeach inst = ["xvadd_d", "xvadd_q", "xvsub_d", "xvsub_q", 7165f757f3fSDimitry Andric "xvsadd_d", "xvsadd_du", "xvssub_d", "xvssub_du", 7175f757f3fSDimitry Andric "xvhaddw_q_d", "xvhaddw_qu_du", "xvhsubw_q_d", "xvhsubw_qu_du", 7185f757f3fSDimitry Andric "xvaddwev_q_d", "xvaddwod_q_d", "xvsubwev_q_d", "xvsubwod_q_d", 7195f757f3fSDimitry Andric "xvaddwev_q_du", "xvaddwod_q_du", "xvsubwev_q_du", "xvsubwod_q_du", 7205f757f3fSDimitry Andric "xvaddwev_q_du_d", "xvaddwod_q_du_d", 7215f757f3fSDimitry Andric "xvavg_d", "xvavg_du", "xvavgr_d", "xvavgr_du", 7225f757f3fSDimitry Andric "xvabsd_d", "xvabsd_du", "xvadda_d", 7235f757f3fSDimitry Andric "xvmax_d", "xvmax_du", "xvmin_d", "xvmin_du", 7245f757f3fSDimitry Andric "xvmul_d", "xvmuh_d", "xvmuh_du", 7255f757f3fSDimitry Andric "xvmulwev_q_d", "xvmulwod_q_d", "xvmulwev_q_du", "xvmulwod_q_du", 7265f757f3fSDimitry Andric "xvmulwev_q_du_d", "xvmulwod_q_du_d", 7275f757f3fSDimitry Andric "xvdiv_d", "xvdiv_du", "xvmod_d", "xvmod_du", "xvsigncov_d", 7285f757f3fSDimitry Andric "xvsll_d", "xvsrl_d", "xvsra_d", "xvrotr_d", "xvsrlr_d", "xvsrar_d", 7295f757f3fSDimitry Andric "xvbitclr_d", "xvbitset_d", "xvbitrev_d", 7305f757f3fSDimitry Andric "xvseq_d", "xvsle_d", "xvsle_du", "xvslt_d", "xvslt_du", 7315f757f3fSDimitry Andric "xvpackev_d", "xvpackod_d", "xvpickev_d", "xvpickod_d", 7325f757f3fSDimitry Andric "xvilvl_d", "xvilvh_d"] in 7335f757f3fSDimitry Andric def int_loongarch_lasx_#inst : VecInt<[llvm_v4i64_ty], 7345f757f3fSDimitry Andric [llvm_v4i64_ty, llvm_v4i64_ty], 7355f757f3fSDimitry Andric [IntrNoMem]>; 7365f757f3fSDimitry Andric 7375f757f3fSDimitry Andricforeach inst = ["xvaddi_bu", "xvsubi_bu", 7385f757f3fSDimitry Andric "xvmaxi_b", "xvmaxi_bu", "xvmini_b", "xvmini_bu", 7395f757f3fSDimitry Andric "xvsat_b", "xvsat_bu", 7405f757f3fSDimitry Andric "xvandi_b", "xvori_b", "xvxori_b", "xvnori_b", 7415f757f3fSDimitry Andric "xvslli_b", "xvsrli_b", "xvsrai_b", "xvrotri_b", 7425f757f3fSDimitry Andric "xvsrlri_b", "xvsrari_b", 7435f757f3fSDimitry Andric "xvbitclri_b", "xvbitseti_b", "xvbitrevi_b", 7445f757f3fSDimitry Andric "xvseqi_b", "xvslei_b", "xvslei_bu", "xvslti_b", "xvslti_bu", 7455f757f3fSDimitry Andric "xvrepl128vei_b", "xvbsll_v", "xvbsrl_v", "xvshuf4i_b"] in 7465f757f3fSDimitry Andric def int_loongarch_lasx_#inst : VecInt<[llvm_v32i8_ty], 7475f757f3fSDimitry Andric [llvm_v32i8_ty, llvm_i32_ty], 7485f757f3fSDimitry Andric [IntrNoMem, ImmArg<ArgIndex<1>>]>; 7495f757f3fSDimitry Andricforeach inst = ["xvaddi_hu", "xvsubi_hu", 7505f757f3fSDimitry Andric "xvmaxi_h", "xvmaxi_hu", "xvmini_h", "xvmini_hu", 7515f757f3fSDimitry Andric "xvsat_h", "xvsat_hu", 7525f757f3fSDimitry Andric "xvslli_h", "xvsrli_h", "xvsrai_h", "xvrotri_h", 7535f757f3fSDimitry Andric "xvsrlri_h", "xvsrari_h", 7545f757f3fSDimitry Andric "xvbitclri_h", "xvbitseti_h", "xvbitrevi_h", 7555f757f3fSDimitry Andric "xvseqi_h", "xvslei_h", "xvslei_hu", "xvslti_h", "xvslti_hu", 7565f757f3fSDimitry Andric "xvrepl128vei_h", "xvshuf4i_h"] in 7575f757f3fSDimitry Andric def int_loongarch_lasx_#inst : VecInt<[llvm_v16i16_ty], 7585f757f3fSDimitry Andric [llvm_v16i16_ty, llvm_i32_ty], 7595f757f3fSDimitry Andric [IntrNoMem, ImmArg<ArgIndex<1>>]>; 7605f757f3fSDimitry Andricforeach inst = ["xvaddi_wu", "xvsubi_wu", 7615f757f3fSDimitry Andric "xvmaxi_w", "xvmaxi_wu", "xvmini_w", "xvmini_wu", 7625f757f3fSDimitry Andric "xvsat_w", "xvsat_wu", 7635f757f3fSDimitry Andric "xvslli_w", "xvsrli_w", "xvsrai_w", "xvrotri_w", 7645f757f3fSDimitry Andric "xvsrlri_w", "xvsrari_w", 7655f757f3fSDimitry Andric "xvbitclri_w", "xvbitseti_w", "xvbitrevi_w", 7665f757f3fSDimitry Andric "xvseqi_w", "xvslei_w", "xvslei_wu", "xvslti_w", "xvslti_wu", 7675f757f3fSDimitry Andric "xvrepl128vei_w", "xvshuf4i_w", "xvpickve_w"] in 7685f757f3fSDimitry Andric def int_loongarch_lasx_#inst : VecInt<[llvm_v8i32_ty], 7695f757f3fSDimitry Andric [llvm_v8i32_ty, llvm_i32_ty], 7705f757f3fSDimitry Andric [IntrNoMem, ImmArg<ArgIndex<1>>]>; 7715f757f3fSDimitry Andricforeach inst = ["xvaddi_du", "xvsubi_du", 7725f757f3fSDimitry Andric "xvmaxi_d", "xvmaxi_du", "xvmini_d", "xvmini_du", 7735f757f3fSDimitry Andric "xvsat_d", "xvsat_du", 7745f757f3fSDimitry Andric "xvslli_d", "xvsrli_d", "xvsrai_d", "xvrotri_d", 7755f757f3fSDimitry Andric "xvsrlri_d", "xvsrari_d", 7765f757f3fSDimitry Andric "xvbitclri_d", "xvbitseti_d", "xvbitrevi_d", 7775f757f3fSDimitry Andric "xvseqi_d", "xvslei_d", "xvslei_du", "xvslti_d", "xvslti_du", 7785f757f3fSDimitry Andric "xvrepl128vei_d", "xvpermi_d", "xvpickve_d"] in 7795f757f3fSDimitry Andric def int_loongarch_lasx_#inst : VecInt<[llvm_v4i64_ty], 7805f757f3fSDimitry Andric [llvm_v4i64_ty, llvm_i32_ty], 7815f757f3fSDimitry Andric [IntrNoMem, ImmArg<ArgIndex<1>>]>; 7825f757f3fSDimitry Andric 7835f757f3fSDimitry Andricforeach inst = ["xvhaddw_h_b", "xvhaddw_hu_bu", "xvhsubw_h_b", "xvhsubw_hu_bu", 7845f757f3fSDimitry Andric "xvaddwev_h_b", "xvaddwod_h_b", "xvsubwev_h_b", "xvsubwod_h_b", 7855f757f3fSDimitry Andric "xvaddwev_h_bu", "xvaddwod_h_bu", "xvsubwev_h_bu", "xvsubwod_h_bu", 7865f757f3fSDimitry Andric "xvaddwev_h_bu_b", "xvaddwod_h_bu_b", 7875f757f3fSDimitry Andric "xvmulwev_h_b", "xvmulwod_h_b", "xvmulwev_h_bu", "xvmulwod_h_bu", 7885f757f3fSDimitry Andric "xvmulwev_h_bu_b", "xvmulwod_h_bu_b"] in 7895f757f3fSDimitry Andric def int_loongarch_lasx_#inst : VecInt<[llvm_v16i16_ty], 7905f757f3fSDimitry Andric [llvm_v32i8_ty, llvm_v32i8_ty], 7915f757f3fSDimitry Andric [IntrNoMem]>; 7925f757f3fSDimitry Andric 7935f757f3fSDimitry Andricforeach inst = ["xvhaddw_w_h", "xvhaddw_wu_hu", "xvhsubw_w_h", "xvhsubw_wu_hu", 7945f757f3fSDimitry Andric "xvaddwev_w_h", "xvaddwod_w_h", "xvsubwev_w_h", "xvsubwod_w_h", 7955f757f3fSDimitry Andric "xvaddwev_w_hu", "xvaddwod_w_hu", "xvsubwev_w_hu", "xvsubwod_w_hu", 7965f757f3fSDimitry Andric "xvaddwev_w_hu_h", "xvaddwod_w_hu_h", 7975f757f3fSDimitry Andric "xvmulwev_w_h", "xvmulwod_w_h", "xvmulwev_w_hu", "xvmulwod_w_hu", 7985f757f3fSDimitry Andric "xvmulwev_w_hu_h", "xvmulwod_w_hu_h"] in 7995f757f3fSDimitry Andric def int_loongarch_lasx_#inst : VecInt<[llvm_v8i32_ty], 8005f757f3fSDimitry Andric [llvm_v16i16_ty, llvm_v16i16_ty], 8015f757f3fSDimitry Andric [IntrNoMem]>; 8025f757f3fSDimitry Andric 8035f757f3fSDimitry Andricforeach inst = ["xvhaddw_d_w", "xvhaddw_du_wu", "xvhsubw_d_w", "xvhsubw_du_wu", 8045f757f3fSDimitry Andric "xvaddwev_d_w", "xvaddwod_d_w", "xvsubwev_d_w", "xvsubwod_d_w", 8055f757f3fSDimitry Andric "xvaddwev_d_wu", "xvaddwod_d_wu", "xvsubwev_d_wu", "xvsubwod_d_wu", 8065f757f3fSDimitry Andric "xvaddwev_d_wu_w", "xvaddwod_d_wu_w", 8075f757f3fSDimitry Andric "xvmulwev_d_w", "xvmulwod_d_w", "xvmulwev_d_wu", "xvmulwod_d_wu", 8085f757f3fSDimitry Andric "xvmulwev_d_wu_w", "xvmulwod_d_wu_w"] in 8095f757f3fSDimitry Andric def int_loongarch_lasx_#inst : VecInt<[llvm_v4i64_ty], 8105f757f3fSDimitry Andric [llvm_v8i32_ty, llvm_v8i32_ty], 8115f757f3fSDimitry Andric [IntrNoMem]>; 8125f757f3fSDimitry Andric 8135f757f3fSDimitry Andricforeach inst = ["xvsrln_b_h", "xvsran_b_h", "xvsrlrn_b_h", "xvsrarn_b_h", 8145f757f3fSDimitry Andric "xvssrln_b_h", "xvssran_b_h", "xvssrln_bu_h", "xvssran_bu_h", 8155f757f3fSDimitry Andric "xvssrlrn_b_h", "xvssrarn_b_h", "xvssrlrn_bu_h", "xvssrarn_bu_h"] in 8165f757f3fSDimitry Andric def int_loongarch_lasx_#inst : VecInt<[llvm_v32i8_ty], 8175f757f3fSDimitry Andric [llvm_v16i16_ty, llvm_v16i16_ty], 8185f757f3fSDimitry Andric [IntrNoMem]>; 8195f757f3fSDimitry Andric 8205f757f3fSDimitry Andricforeach inst = ["xvsrln_h_w", "xvsran_h_w", "xvsrlrn_h_w", "xvsrarn_h_w", 8215f757f3fSDimitry Andric "xvssrln_h_w", "xvssran_h_w", "xvssrln_hu_w", "xvssran_hu_w", 8225f757f3fSDimitry Andric "xvssrlrn_h_w", "xvssrarn_h_w", "xvssrlrn_hu_w", "xvssrarn_hu_w"] in 8235f757f3fSDimitry Andric def int_loongarch_lasx_#inst : VecInt<[llvm_v16i16_ty], 8245f757f3fSDimitry Andric [llvm_v8i32_ty, llvm_v8i32_ty], 8255f757f3fSDimitry Andric [IntrNoMem]>; 8265f757f3fSDimitry Andric 8275f757f3fSDimitry Andricforeach inst = ["xvsrln_w_d", "xvsran_w_d", "xvsrlrn_w_d", "xvsrarn_w_d", 8285f757f3fSDimitry Andric "xvssrln_w_d", "xvssran_w_d", "xvssrln_wu_d", "xvssran_wu_d", 8295f757f3fSDimitry Andric "xvssrlrn_w_d", "xvssrarn_w_d", "xvssrlrn_wu_d", "xvssrarn_wu_d"] in 8305f757f3fSDimitry Andric def int_loongarch_lasx_#inst : VecInt<[llvm_v8i32_ty], 8315f757f3fSDimitry Andric [llvm_v4i64_ty, llvm_v4i64_ty], 8325f757f3fSDimitry Andric [IntrNoMem]>; 8335f757f3fSDimitry Andric 8345f757f3fSDimitry Andricforeach inst = ["xvmadd_b", "xvmsub_b", "xvfrstp_b", "xvbitsel_v", "xvshuf_b"] in 8355f757f3fSDimitry Andric def int_loongarch_lasx_#inst 8365f757f3fSDimitry Andric : VecInt<[llvm_v32i8_ty], 8375f757f3fSDimitry Andric [llvm_v32i8_ty, llvm_v32i8_ty, llvm_v32i8_ty], 8385f757f3fSDimitry Andric [IntrNoMem]>; 8395f757f3fSDimitry Andricforeach inst = ["xvmadd_h", "xvmsub_h", "xvfrstp_h", "xvshuf_h"] in 8405f757f3fSDimitry Andric def int_loongarch_lasx_#inst 8415f757f3fSDimitry Andric : VecInt<[llvm_v16i16_ty], 8425f757f3fSDimitry Andric [llvm_v16i16_ty, llvm_v16i16_ty, llvm_v16i16_ty], 8435f757f3fSDimitry Andric [IntrNoMem]>; 8445f757f3fSDimitry Andricforeach inst = ["xvmadd_w", "xvmsub_w", "xvshuf_w"] in 8455f757f3fSDimitry Andric def int_loongarch_lasx_#inst 8465f757f3fSDimitry Andric : VecInt<[llvm_v8i32_ty], 8475f757f3fSDimitry Andric [llvm_v8i32_ty, llvm_v8i32_ty, llvm_v8i32_ty], 8485f757f3fSDimitry Andric [IntrNoMem]>; 8495f757f3fSDimitry Andricforeach inst = ["xvmadd_d", "xvmsub_d", "xvshuf_d"] in 8505f757f3fSDimitry Andric def int_loongarch_lasx_#inst 8515f757f3fSDimitry Andric : VecInt<[llvm_v4i64_ty], 8525f757f3fSDimitry Andric [llvm_v4i64_ty, llvm_v4i64_ty, llvm_v4i64_ty], 8535f757f3fSDimitry Andric [IntrNoMem]>; 8545f757f3fSDimitry Andric 8555f757f3fSDimitry Andricforeach inst = ["xvsrlni_b_h", "xvsrani_b_h", "xvsrlrni_b_h", "xvsrarni_b_h", 8565f757f3fSDimitry Andric "xvssrlni_b_h", "xvssrani_b_h", "xvssrlni_bu_h", "xvssrani_bu_h", 8575f757f3fSDimitry Andric "xvssrlrni_b_h", "xvssrarni_b_h", "xvssrlrni_bu_h", "xvssrarni_bu_h", 8585f757f3fSDimitry Andric "xvfrstpi_b", "xvbitseli_b", "xvextrins_b", "xvpermi_q"] in 8595f757f3fSDimitry Andric def int_loongarch_lasx_#inst 8605f757f3fSDimitry Andric : VecInt<[llvm_v32i8_ty], 8615f757f3fSDimitry Andric [llvm_v32i8_ty, llvm_v32i8_ty, llvm_i32_ty], 8625f757f3fSDimitry Andric [IntrNoMem, ImmArg<ArgIndex<2>>]>; 8635f757f3fSDimitry Andricforeach inst = ["xvsrlni_h_w", "xvsrani_h_w", "xvsrlrni_h_w", "xvsrarni_h_w", 8645f757f3fSDimitry Andric "xvssrlni_h_w", "xvssrani_h_w", "xvssrlni_hu_w", "xvssrani_hu_w", 8655f757f3fSDimitry Andric "xvssrlrni_h_w", "xvssrarni_h_w", "xvssrlrni_hu_w", "xvssrarni_hu_w", 8665f757f3fSDimitry Andric "xvfrstpi_h", "xvextrins_h"] in 8675f757f3fSDimitry Andric def int_loongarch_lasx_#inst 8685f757f3fSDimitry Andric : VecInt<[llvm_v16i16_ty], 8695f757f3fSDimitry Andric [llvm_v16i16_ty, llvm_v16i16_ty, llvm_i32_ty], 8705f757f3fSDimitry Andric [IntrNoMem, ImmArg<ArgIndex<2>>]>; 8715f757f3fSDimitry Andricforeach inst = ["xvsrlni_w_d", "xvsrani_w_d", "xvsrlrni_w_d", "xvsrarni_w_d", 8725f757f3fSDimitry Andric "xvssrlni_w_d", "xvssrani_w_d", "xvssrlni_wu_d", "xvssrani_wu_d", 8735f757f3fSDimitry Andric "xvssrlrni_w_d", "xvssrarni_w_d", "xvssrlrni_wu_d", "xvssrarni_wu_d", 8745f757f3fSDimitry Andric "xvpermi_w", "xvextrins_w", "xvinsve0_w"] in 8755f757f3fSDimitry Andric def int_loongarch_lasx_#inst 8765f757f3fSDimitry Andric : VecInt<[llvm_v8i32_ty], 8775f757f3fSDimitry Andric [llvm_v8i32_ty, llvm_v8i32_ty, llvm_i32_ty], 8785f757f3fSDimitry Andric [IntrNoMem, ImmArg<ArgIndex<2>>]>; 8795f757f3fSDimitry Andricforeach inst = ["xvsrlni_d_q", "xvsrani_d_q", "xvsrlrni_d_q", "xvsrarni_d_q", 8805f757f3fSDimitry Andric "xvssrlni_d_q", "xvssrani_d_q", "xvssrlni_du_q", "xvssrani_du_q", 8815f757f3fSDimitry Andric "xvssrlrni_d_q", "xvssrarni_d_q", "xvssrlrni_du_q", "xvssrarni_du_q", 8825f757f3fSDimitry Andric "xvshuf4i_d", "xvextrins_d", "xvinsve0_d"] in 8835f757f3fSDimitry Andric def int_loongarch_lasx_#inst 8845f757f3fSDimitry Andric : VecInt<[llvm_v4i64_ty], 8855f757f3fSDimitry Andric [llvm_v4i64_ty, llvm_v4i64_ty, llvm_i32_ty], 8865f757f3fSDimitry Andric [IntrNoMem, ImmArg<ArgIndex<2>>]>; 8875f757f3fSDimitry Andric 8885f757f3fSDimitry Andricforeach inst = ["xvmaddwev_h_b", "xvmaddwod_h_b", "xvmaddwev_h_bu", 8895f757f3fSDimitry Andric "xvmaddwod_h_bu", "xvmaddwev_h_bu_b", "xvmaddwod_h_bu_b"] in 8905f757f3fSDimitry Andric def int_loongarch_lasx_#inst 8915f757f3fSDimitry Andric : VecInt<[llvm_v16i16_ty], 8925f757f3fSDimitry Andric [llvm_v16i16_ty, llvm_v32i8_ty, llvm_v32i8_ty], 8935f757f3fSDimitry Andric [IntrNoMem]>; 8945f757f3fSDimitry Andricforeach inst = ["xvmaddwev_w_h", "xvmaddwod_w_h", "xvmaddwev_w_hu", 8955f757f3fSDimitry Andric "xvmaddwod_w_hu", "xvmaddwev_w_hu_h", "xvmaddwod_w_hu_h"] in 8965f757f3fSDimitry Andric def int_loongarch_lasx_#inst 8975f757f3fSDimitry Andric : VecInt<[llvm_v8i32_ty], 8985f757f3fSDimitry Andric [llvm_v8i32_ty, llvm_v16i16_ty, llvm_v16i16_ty], 8995f757f3fSDimitry Andric [IntrNoMem]>; 9005f757f3fSDimitry Andricforeach inst = ["xvmaddwev_d_w", "xvmaddwod_d_w", "xvmaddwev_d_wu", 9015f757f3fSDimitry Andric "xvmaddwod_d_wu", "xvmaddwev_d_wu_w", "xvmaddwod_d_wu_w"] in 9025f757f3fSDimitry Andric def int_loongarch_lasx_#inst 9035f757f3fSDimitry Andric : VecInt<[llvm_v4i64_ty], 9045f757f3fSDimitry Andric [llvm_v4i64_ty, llvm_v8i32_ty, llvm_v8i32_ty], 9055f757f3fSDimitry Andric [IntrNoMem]>; 9065f757f3fSDimitry Andricforeach inst = ["xvmaddwev_q_d", "xvmaddwod_q_d", "xvmaddwev_q_du", 9075f757f3fSDimitry Andric "xvmaddwod_q_du", "xvmaddwev_q_du_d", "xvmaddwod_q_du_d"] in 9085f757f3fSDimitry Andric def int_loongarch_lasx_#inst 9095f757f3fSDimitry Andric : VecInt<[llvm_v4i64_ty], 9105f757f3fSDimitry Andric [llvm_v4i64_ty, llvm_v4i64_ty, llvm_v4i64_ty], 9115f757f3fSDimitry Andric [IntrNoMem]>; 9125f757f3fSDimitry Andric 9135f757f3fSDimitry Andricforeach inst = ["xvsllwil_h_b", "xvsllwil_hu_bu"] in 9145f757f3fSDimitry Andric def int_loongarch_lasx_#inst : VecInt<[llvm_v16i16_ty], 9155f757f3fSDimitry Andric [llvm_v32i8_ty, llvm_i32_ty], 9165f757f3fSDimitry Andric [IntrNoMem, ImmArg<ArgIndex<1>>]>; 9175f757f3fSDimitry Andricforeach inst = ["xvsllwil_w_h", "xvsllwil_wu_hu"] in 9185f757f3fSDimitry Andric def int_loongarch_lasx_#inst : VecInt<[llvm_v8i32_ty], 9195f757f3fSDimitry Andric [llvm_v16i16_ty, llvm_i32_ty], 9205f757f3fSDimitry Andric [IntrNoMem, ImmArg<ArgIndex<1>>]>; 9215f757f3fSDimitry Andricforeach inst = ["xvsllwil_d_w", "xvsllwil_du_wu"] in 9225f757f3fSDimitry Andric def int_loongarch_lasx_#inst : VecInt<[llvm_v4i64_ty], 9235f757f3fSDimitry Andric [llvm_v8i32_ty, llvm_i32_ty], 9245f757f3fSDimitry Andric [IntrNoMem, ImmArg<ArgIndex<1>>]>; 9255f757f3fSDimitry Andric 9265f757f3fSDimitry Andricforeach inst = ["xvneg_b", "xvmskltz_b", "xvmskgez_b", "xvmsknz_b", 9275f757f3fSDimitry Andric "xvclo_b", "xvclz_b", "xvpcnt_b", 9285f757f3fSDimitry Andric "xvreplve0_b", "xvreplve0_q"] in 9295f757f3fSDimitry Andric def int_loongarch_lasx_#inst : VecInt<[llvm_v32i8_ty], [llvm_v32i8_ty], 9305f757f3fSDimitry Andric [IntrNoMem]>; 9315f757f3fSDimitry Andricforeach inst = ["xvneg_h", "xvmskltz_h", "xvclo_h", "xvclz_h", "xvpcnt_h", 9325f757f3fSDimitry Andric "xvreplve0_h"] in 9335f757f3fSDimitry Andric def int_loongarch_lasx_#inst : VecInt<[llvm_v16i16_ty], [llvm_v16i16_ty], 9345f757f3fSDimitry Andric [IntrNoMem]>; 9355f757f3fSDimitry Andricforeach inst = ["xvneg_w", "xvmskltz_w", "xvclo_w", "xvclz_w", "xvpcnt_w", 9365f757f3fSDimitry Andric "xvreplve0_w"] in 9375f757f3fSDimitry Andric def int_loongarch_lasx_#inst : VecInt<[llvm_v8i32_ty], [llvm_v8i32_ty], 9385f757f3fSDimitry Andric [IntrNoMem]>; 9395f757f3fSDimitry Andricforeach inst = ["xvneg_d", "xvexth_q_d", "xvexth_qu_du", "xvmskltz_d", 9405f757f3fSDimitry Andric "xvextl_q_d", "xvextl_qu_du", "xvclo_d", "xvclz_d", "xvpcnt_d", 9415f757f3fSDimitry Andric "xvreplve0_d"] in 9425f757f3fSDimitry Andric def int_loongarch_lasx_#inst : VecInt<[llvm_v4i64_ty], [llvm_v4i64_ty], 9435f757f3fSDimitry Andric [IntrNoMem]>; 9445f757f3fSDimitry Andric 9455f757f3fSDimitry Andricforeach inst = ["xvexth_h_b", "xvexth_hu_bu", "vext2xv_h_b", "vext2xv_hu_bu"] in 9465f757f3fSDimitry Andric def int_loongarch_lasx_#inst : VecInt<[llvm_v16i16_ty], [llvm_v32i8_ty], 9475f757f3fSDimitry Andric [IntrNoMem]>; 9485f757f3fSDimitry Andricforeach inst = ["xvexth_w_h", "xvexth_wu_hu", "vext2xv_w_h", "vext2xv_wu_hu"] in 9495f757f3fSDimitry Andric def int_loongarch_lasx_#inst : VecInt<[llvm_v8i32_ty], [llvm_v16i16_ty], 9505f757f3fSDimitry Andric [IntrNoMem]>; 9515f757f3fSDimitry Andricforeach inst = ["xvexth_d_w", "xvexth_du_wu", "vext2xv_d_w", "vext2xv_du_wu"] in 9525f757f3fSDimitry Andric def int_loongarch_lasx_#inst : VecInt<[llvm_v4i64_ty], [llvm_v8i32_ty], 9535f757f3fSDimitry Andric [IntrNoMem]>; 9545f757f3fSDimitry Andric 9555f757f3fSDimitry Andricforeach inst = ["vext2xv_w_b", "vext2xv_wu_bu"] in 9565f757f3fSDimitry Andric def int_loongarch_lasx_#inst : VecInt<[llvm_v8i32_ty], [llvm_v32i8_ty], 9575f757f3fSDimitry Andric [IntrNoMem]>; 9585f757f3fSDimitry Andricforeach inst = ["vext2xv_d_h", "vext2xv_du_hu"] in 9595f757f3fSDimitry Andric def int_loongarch_lasx_#inst : VecInt<[llvm_v4i64_ty], [llvm_v16i16_ty], 9605f757f3fSDimitry Andric [IntrNoMem]>; 9615f757f3fSDimitry Andric 9625f757f3fSDimitry Andricforeach inst = ["vext2xv_d_b", "vext2xv_du_bu"] in 9635f757f3fSDimitry Andric def int_loongarch_lasx_#inst : VecInt<[llvm_v4i64_ty], [llvm_v32i8_ty], 9645f757f3fSDimitry Andric [IntrNoMem]>; 9655f757f3fSDimitry Andric 9665f757f3fSDimitry Andricdef int_loongarch_lasx_xvldi : VecInt<[llvm_v4i64_ty], [llvm_i32_ty], 9675f757f3fSDimitry Andric [IntrNoMem, ImmArg<ArgIndex<0>>]>; 9685f757f3fSDimitry Andricdef int_loongarch_lasx_xvrepli_b : VecInt<[llvm_v32i8_ty], [llvm_i32_ty], 9695f757f3fSDimitry Andric [IntrNoMem, ImmArg<ArgIndex<0>>]>; 9705f757f3fSDimitry Andricdef int_loongarch_lasx_xvrepli_h : VecInt<[llvm_v16i16_ty], [llvm_i32_ty], 9715f757f3fSDimitry Andric [IntrNoMem, ImmArg<ArgIndex<0>>]>; 9725f757f3fSDimitry Andricdef int_loongarch_lasx_xvrepli_w : VecInt<[llvm_v8i32_ty], [llvm_i32_ty], 9735f757f3fSDimitry Andric [IntrNoMem, ImmArg<ArgIndex<0>>]>; 9745f757f3fSDimitry Andricdef int_loongarch_lasx_xvrepli_d : VecInt<[llvm_v4i64_ty], [llvm_i32_ty], 9755f757f3fSDimitry Andric [IntrNoMem, ImmArg<ArgIndex<0>>]>; 9765f757f3fSDimitry Andric 9775f757f3fSDimitry Andricdef int_loongarch_lasx_xvreplgr2vr_b : VecInt<[llvm_v32i8_ty], [llvm_i32_ty], 9785f757f3fSDimitry Andric [IntrNoMem]>; 9795f757f3fSDimitry Andricdef int_loongarch_lasx_xvreplgr2vr_h : VecInt<[llvm_v16i16_ty], [llvm_i32_ty], 9805f757f3fSDimitry Andric [IntrNoMem]>; 9815f757f3fSDimitry Andricdef int_loongarch_lasx_xvreplgr2vr_w : VecInt<[llvm_v8i32_ty], [llvm_i32_ty], 9825f757f3fSDimitry Andric [IntrNoMem]>; 9835f757f3fSDimitry Andricdef int_loongarch_lasx_xvreplgr2vr_d : VecInt<[llvm_v4i64_ty], [llvm_i64_ty], 9845f757f3fSDimitry Andric [IntrNoMem]>; 9855f757f3fSDimitry Andric 9865f757f3fSDimitry Andricdef int_loongarch_lasx_xvinsgr2vr_w 9875f757f3fSDimitry Andric : VecInt<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_i32_ty, llvm_i32_ty], 9885f757f3fSDimitry Andric [IntrNoMem, ImmArg<ArgIndex<2>>]>; 9895f757f3fSDimitry Andricdef int_loongarch_lasx_xvinsgr2vr_d 9905f757f3fSDimitry Andric : VecInt<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_i64_ty, llvm_i32_ty], 9915f757f3fSDimitry Andric [IntrNoMem, ImmArg<ArgIndex<2>>]>; 9925f757f3fSDimitry Andric 9935f757f3fSDimitry Andricdef int_loongarch_lasx_xvreplve_b 9945f757f3fSDimitry Andric : VecInt<[llvm_v32i8_ty], [llvm_v32i8_ty, llvm_i32_ty], [IntrNoMem]>; 9955f757f3fSDimitry Andricdef int_loongarch_lasx_xvreplve_h 9965f757f3fSDimitry Andric : VecInt<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_i32_ty], [IntrNoMem]>; 9975f757f3fSDimitry Andricdef int_loongarch_lasx_xvreplve_w 9985f757f3fSDimitry Andric : VecInt<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_i32_ty], [IntrNoMem]>; 9995f757f3fSDimitry Andricdef int_loongarch_lasx_xvreplve_d 10005f757f3fSDimitry Andric : VecInt<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_i32_ty], [IntrNoMem]>; 10015f757f3fSDimitry Andric 10025f757f3fSDimitry Andricforeach inst = ["xvpickve2gr_w", "xvpickve2gr_wu" ] in 10035f757f3fSDimitry Andric def int_loongarch_lasx_#inst : VecInt<[llvm_i32_ty], 10045f757f3fSDimitry Andric [llvm_v8i32_ty, llvm_i32_ty], 10055f757f3fSDimitry Andric [IntrNoMem, ImmArg<ArgIndex<1>>]>; 10065f757f3fSDimitry Andricforeach inst = ["xvpickve2gr_d", "xvpickve2gr_du" ] in 10075f757f3fSDimitry Andric def int_loongarch_lasx_#inst : VecInt<[llvm_i64_ty], 10085f757f3fSDimitry Andric [llvm_v4i64_ty, llvm_i32_ty], 10095f757f3fSDimitry Andric [IntrNoMem, ImmArg<ArgIndex<1>>]>; 10105f757f3fSDimitry Andric 10115f757f3fSDimitry Andricdef int_loongarch_lasx_xbz_b : VecInt<[llvm_i32_ty], [llvm_v32i8_ty], 10125f757f3fSDimitry Andric [IntrNoMem]>; 10135f757f3fSDimitry Andricdef int_loongarch_lasx_xbz_h : VecInt<[llvm_i32_ty], [llvm_v16i16_ty], 10145f757f3fSDimitry Andric [IntrNoMem]>; 10155f757f3fSDimitry Andricdef int_loongarch_lasx_xbz_w : VecInt<[llvm_i32_ty], [llvm_v8i32_ty], 10165f757f3fSDimitry Andric [IntrNoMem]>; 10175f757f3fSDimitry Andricdef int_loongarch_lasx_xbz_d : VecInt<[llvm_i32_ty], [llvm_v4i64_ty], 10185f757f3fSDimitry Andric [IntrNoMem]>; 10195f757f3fSDimitry Andricdef int_loongarch_lasx_xbz_v : VecInt<[llvm_i32_ty], [llvm_v32i8_ty], 10205f757f3fSDimitry Andric [IntrNoMem]>; 10215f757f3fSDimitry Andric 10225f757f3fSDimitry Andricdef int_loongarch_lasx_xbnz_v : VecInt<[llvm_i32_ty], [llvm_v32i8_ty], 10235f757f3fSDimitry Andric [IntrNoMem]>; 10245f757f3fSDimitry Andricdef int_loongarch_lasx_xbnz_b : VecInt<[llvm_i32_ty], [llvm_v32i8_ty], 10255f757f3fSDimitry Andric [IntrNoMem]>; 10265f757f3fSDimitry Andricdef int_loongarch_lasx_xbnz_h : VecInt<[llvm_i32_ty], [llvm_v16i16_ty], 10275f757f3fSDimitry Andric [IntrNoMem]>; 10285f757f3fSDimitry Andricdef int_loongarch_lasx_xbnz_w : VecInt<[llvm_i32_ty], [llvm_v8i32_ty], 10295f757f3fSDimitry Andric [IntrNoMem]>; 10305f757f3fSDimitry Andricdef int_loongarch_lasx_xbnz_d : VecInt<[llvm_i32_ty], [llvm_v4i64_ty], 10315f757f3fSDimitry Andric [IntrNoMem]>; 10325f757f3fSDimitry Andric 10335f757f3fSDimitry Andric// LASX Float 10345f757f3fSDimitry Andric 10355f757f3fSDimitry Andricforeach inst = ["xvfadd_s", "xvfsub_s", "xvfmul_s", "xvfdiv_s", 10365f757f3fSDimitry Andric "xvfmax_s", "xvfmin_s", "xvfmaxa_s", "xvfmina_s"] in 10375f757f3fSDimitry Andric def int_loongarch_lasx_#inst : VecInt<[llvm_v8f32_ty], 10385f757f3fSDimitry Andric [llvm_v8f32_ty, llvm_v8f32_ty], 10395f757f3fSDimitry Andric [IntrNoMem]>; 10405f757f3fSDimitry Andricforeach inst = ["xvfadd_d", "xvfsub_d", "xvfmul_d", "xvfdiv_d", 10415f757f3fSDimitry Andric "xvfmax_d", "xvfmin_d", "xvfmaxa_d", "xvfmina_d"] in 10425f757f3fSDimitry Andric def int_loongarch_lasx_#inst : VecInt<[llvm_v4f64_ty], 10435f757f3fSDimitry Andric [llvm_v4f64_ty, llvm_v4f64_ty], 10445f757f3fSDimitry Andric [IntrNoMem]>; 10455f757f3fSDimitry Andric 10465f757f3fSDimitry Andricforeach inst = ["xvfmadd_s", "xvfmsub_s", "xvfnmadd_s", "xvfnmsub_s"] in 10475f757f3fSDimitry Andric def int_loongarch_lasx_#inst 10485f757f3fSDimitry Andric : VecInt<[llvm_v8f32_ty], 10495f757f3fSDimitry Andric [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty], 10505f757f3fSDimitry Andric [IntrNoMem]>; 10515f757f3fSDimitry Andricforeach inst = ["xvfmadd_d", "xvfmsub_d", "xvfnmadd_d", "xvfnmsub_d"] in 10525f757f3fSDimitry Andric def int_loongarch_lasx_#inst 10535f757f3fSDimitry Andric : VecInt<[llvm_v4f64_ty], 10545f757f3fSDimitry Andric [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty], 10555f757f3fSDimitry Andric [IntrNoMem]>; 10565f757f3fSDimitry Andric 10575f757f3fSDimitry Andricforeach inst = ["xvflogb_s", "xvfsqrt_s", "xvfrecip_s", "xvfrsqrt_s", "xvfrint_s", 1058*7a6dacacSDimitry Andric "xvfrecipe_s", "xvfrsqrte_s", 10595f757f3fSDimitry Andric "xvfrintrne_s", "xvfrintrz_s", "xvfrintrp_s", "xvfrintrm_s"] in 10605f757f3fSDimitry Andric def int_loongarch_lasx_#inst : VecInt<[llvm_v8f32_ty], [llvm_v8f32_ty], 10615f757f3fSDimitry Andric [IntrNoMem]>; 10625f757f3fSDimitry Andricforeach inst = ["xvflogb_d", "xvfsqrt_d", "xvfrecip_d", "xvfrsqrt_d", "xvfrint_d", 1063*7a6dacacSDimitry Andric "xvfrecipe_d", "xvfrsqrte_d", 10645f757f3fSDimitry Andric "xvfrintrne_d", "xvfrintrz_d", "xvfrintrp_d", "xvfrintrm_d"] in 10655f757f3fSDimitry Andric def int_loongarch_lasx_#inst : VecInt<[llvm_v4f64_ty], [llvm_v4f64_ty], 10665f757f3fSDimitry Andric [IntrNoMem]>; 10675f757f3fSDimitry Andric 10685f757f3fSDimitry Andricforeach inst = ["xvfcvtl_s_h", "xvfcvth_s_h"] in 10695f757f3fSDimitry Andric def int_loongarch_lasx_#inst : VecInt<[llvm_v8f32_ty], [llvm_v16i16_ty], 10705f757f3fSDimitry Andric [IntrNoMem]>; 10715f757f3fSDimitry Andricforeach inst = ["xvfcvtl_d_s", "xvfcvth_d_s"] in 10725f757f3fSDimitry Andric def int_loongarch_lasx_#inst : VecInt<[llvm_v4f64_ty], [llvm_v8f32_ty], 10735f757f3fSDimitry Andric [IntrNoMem]>; 10745f757f3fSDimitry Andric 10755f757f3fSDimitry Andricforeach inst = ["xvftintrne_w_s", "xvftintrz_w_s", "xvftintrp_w_s", "xvftintrm_w_s", 10765f757f3fSDimitry Andric "xvftint_w_s", "xvftintrz_wu_s", "xvftint_wu_s", "xvfclass_s"] in 10775f757f3fSDimitry Andric def int_loongarch_lasx_#inst : VecInt<[llvm_v8i32_ty], [llvm_v8f32_ty], 10785f757f3fSDimitry Andric [IntrNoMem]>; 10795f757f3fSDimitry Andricforeach inst = ["xvftintrne_l_d", "xvftintrz_l_d", "xvftintrp_l_d", "xvftintrm_l_d", 10805f757f3fSDimitry Andric "xvftint_l_d", "xvftintrz_lu_d", "xvftint_lu_d", "xvfclass_d"] in 10815f757f3fSDimitry Andric def int_loongarch_lasx_#inst : VecInt<[llvm_v4i64_ty], [llvm_v4f64_ty], 10825f757f3fSDimitry Andric [IntrNoMem]>; 10835f757f3fSDimitry Andric 10845f757f3fSDimitry Andricforeach inst = ["xvftintrnel_l_s", "xvftintrneh_l_s", "xvftintrzl_l_s", 10855f757f3fSDimitry Andric "xvftintrzh_l_s", "xvftintrpl_l_s", "xvftintrph_l_s", 10865f757f3fSDimitry Andric "xvftintrml_l_s", "xvftintrmh_l_s", "xvftintl_l_s", 10875f757f3fSDimitry Andric "xvftinth_l_s"] in 10885f757f3fSDimitry Andric def int_loongarch_lasx_#inst : VecInt<[llvm_v4i64_ty], [llvm_v8f32_ty], 10895f757f3fSDimitry Andric [IntrNoMem]>; 10905f757f3fSDimitry Andric 10915f757f3fSDimitry Andricforeach inst = ["xvffint_s_w", "xvffint_s_wu"] in 10925f757f3fSDimitry Andric def int_loongarch_lasx_#inst : VecInt<[llvm_v8f32_ty], [llvm_v8i32_ty], 10935f757f3fSDimitry Andric [IntrNoMem]>; 10945f757f3fSDimitry Andricforeach inst = ["xvffint_d_l", "xvffint_d_lu"] in 10955f757f3fSDimitry Andric def int_loongarch_lasx_#inst : VecInt<[llvm_v4f64_ty], [llvm_v4i64_ty], 10965f757f3fSDimitry Andric [IntrNoMem]>; 10975f757f3fSDimitry Andric 10985f757f3fSDimitry Andricforeach inst = ["xvffintl_d_w", "xvffinth_d_w"] in 10995f757f3fSDimitry Andric def int_loongarch_lasx_#inst : VecInt<[llvm_v4f64_ty], [llvm_v8i32_ty], 11005f757f3fSDimitry Andric [IntrNoMem]>; 11015f757f3fSDimitry Andric 11025f757f3fSDimitry Andricforeach inst = ["xvffint_s_l"] in 11035f757f3fSDimitry Andric def int_loongarch_lasx_#inst : VecInt<[llvm_v8f32_ty], 11045f757f3fSDimitry Andric [llvm_v4i64_ty, llvm_v4i64_ty], 11055f757f3fSDimitry Andric [IntrNoMem]>; 11065f757f3fSDimitry Andricforeach inst = ["xvftintrne_w_d", "xvftintrz_w_d", "xvftintrp_w_d", "xvftintrm_w_d", 11075f757f3fSDimitry Andric "xvftint_w_d"] in 11085f757f3fSDimitry Andric def int_loongarch_lasx_#inst : VecInt<[llvm_v8i32_ty], 11095f757f3fSDimitry Andric [llvm_v4f64_ty, llvm_v4f64_ty], 11105f757f3fSDimitry Andric [IntrNoMem]>; 11115f757f3fSDimitry Andric 11125f757f3fSDimitry Andricforeach inst = ["xvfcvt_h_s"] in 11135f757f3fSDimitry Andric def int_loongarch_lasx_#inst : VecInt<[llvm_v16i16_ty], 11145f757f3fSDimitry Andric [llvm_v8f32_ty, llvm_v8f32_ty], 11155f757f3fSDimitry Andric [IntrNoMem]>; 11165f757f3fSDimitry Andricforeach inst = ["xvfcvt_s_d"] in 11175f757f3fSDimitry Andric def int_loongarch_lasx_#inst : VecInt<[llvm_v8f32_ty], 11185f757f3fSDimitry Andric [llvm_v4f64_ty, llvm_v4f64_ty], 11195f757f3fSDimitry Andric [IntrNoMem]>; 11205f757f3fSDimitry Andric 11215f757f3fSDimitry Andricforeach inst = ["xvfcmp_caf_s", "xvfcmp_cun_s", "xvfcmp_ceq_s", "xvfcmp_cueq_s", 11225f757f3fSDimitry Andric "xvfcmp_clt_s", "xvfcmp_cult_s", "xvfcmp_cle_s", "xvfcmp_cule_s", 11235f757f3fSDimitry Andric "xvfcmp_cne_s", "xvfcmp_cor_s", "xvfcmp_cune_s", 11245f757f3fSDimitry Andric "xvfcmp_saf_s", "xvfcmp_sun_s", "xvfcmp_seq_s", "xvfcmp_sueq_s", 11255f757f3fSDimitry Andric "xvfcmp_slt_s", "xvfcmp_sult_s", "xvfcmp_sle_s", "xvfcmp_sule_s", 11265f757f3fSDimitry Andric "xvfcmp_sne_s", "xvfcmp_sor_s", "xvfcmp_sune_s"] in 11275f757f3fSDimitry Andric def int_loongarch_lasx_#inst : VecInt<[llvm_v8i32_ty], 11285f757f3fSDimitry Andric [llvm_v8f32_ty, llvm_v8f32_ty], 11295f757f3fSDimitry Andric [IntrNoMem]>; 11305f757f3fSDimitry Andricforeach inst = ["xvfcmp_caf_d", "xvfcmp_cun_d", "xvfcmp_ceq_d", "xvfcmp_cueq_d", 11315f757f3fSDimitry Andric "xvfcmp_clt_d", "xvfcmp_cult_d", "xvfcmp_cle_d", "xvfcmp_cule_d", 11325f757f3fSDimitry Andric "xvfcmp_cne_d", "xvfcmp_cor_d", "xvfcmp_cune_d", 11335f757f3fSDimitry Andric "xvfcmp_saf_d", "xvfcmp_sun_d", "xvfcmp_seq_d", "xvfcmp_sueq_d", 11345f757f3fSDimitry Andric "xvfcmp_slt_d", "xvfcmp_sult_d", "xvfcmp_sle_d", "xvfcmp_sule_d", 11355f757f3fSDimitry Andric "xvfcmp_sne_d", "xvfcmp_sor_d", "xvfcmp_sune_d"] in 11365f757f3fSDimitry Andric def int_loongarch_lasx_#inst : VecInt<[llvm_v4i64_ty], 11375f757f3fSDimitry Andric [llvm_v4f64_ty, llvm_v4f64_ty], 11385f757f3fSDimitry Andric [IntrNoMem]>; 11395f757f3fSDimitry Andric 11405f757f3fSDimitry Andricdef int_loongarch_lasx_xvpickve_w_f 11415f757f3fSDimitry Andric : VecInt<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_i32_ty], 11425f757f3fSDimitry Andric [IntrNoMem, ImmArg<ArgIndex<1>>]>; 11435f757f3fSDimitry Andricdef int_loongarch_lasx_xvpickve_d_f 11445f757f3fSDimitry Andric : VecInt<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_i32_ty], 11455f757f3fSDimitry Andric [IntrNoMem, ImmArg<ArgIndex<1>>]>; 11465f757f3fSDimitry Andric 11475f757f3fSDimitry Andric// LASX load/store 11485f757f3fSDimitry Andricdef int_loongarch_lasx_xvld 11495f757f3fSDimitry Andric : VecInt<[llvm_v32i8_ty], [llvm_ptr_ty, llvm_i32_ty], 11505f757f3fSDimitry Andric [IntrReadMem, IntrArgMemOnly, ImmArg<ArgIndex<1>>]>; 11515f757f3fSDimitry Andricdef int_loongarch_lasx_xvldx 11525f757f3fSDimitry Andric : VecInt<[llvm_v32i8_ty], [llvm_ptr_ty, llvm_i64_ty], 11535f757f3fSDimitry Andric [IntrReadMem, IntrArgMemOnly]>; 11545f757f3fSDimitry Andricdef int_loongarch_lasx_xvldrepl_b 11555f757f3fSDimitry Andric : VecInt<[llvm_v32i8_ty], [llvm_ptr_ty, llvm_i32_ty], 11565f757f3fSDimitry Andric [IntrReadMem, IntrArgMemOnly, ImmArg<ArgIndex<1>>]>; 11575f757f3fSDimitry Andricdef int_loongarch_lasx_xvldrepl_h 11585f757f3fSDimitry Andric : VecInt<[llvm_v16i16_ty], [llvm_ptr_ty, llvm_i32_ty], 11595f757f3fSDimitry Andric [IntrReadMem, IntrArgMemOnly, ImmArg<ArgIndex<1>>]>; 11605f757f3fSDimitry Andricdef int_loongarch_lasx_xvldrepl_w 11615f757f3fSDimitry Andric : VecInt<[llvm_v8i32_ty], [llvm_ptr_ty, llvm_i32_ty], 11625f757f3fSDimitry Andric [IntrReadMem, IntrArgMemOnly, ImmArg<ArgIndex<1>>]>; 11635f757f3fSDimitry Andricdef int_loongarch_lasx_xvldrepl_d 11645f757f3fSDimitry Andric : VecInt<[llvm_v4i64_ty], [llvm_ptr_ty, llvm_i32_ty], 11655f757f3fSDimitry Andric [IntrReadMem, IntrArgMemOnly, ImmArg<ArgIndex<1>>]>; 11665f757f3fSDimitry Andric 11675f757f3fSDimitry Andricdef int_loongarch_lasx_xvst 11685f757f3fSDimitry Andric : VecInt<[], [llvm_v32i8_ty, llvm_ptr_ty, llvm_i32_ty], 11695f757f3fSDimitry Andric [IntrWriteMem, IntrArgMemOnly, ImmArg<ArgIndex<2>>]>; 11705f757f3fSDimitry Andricdef int_loongarch_lasx_xvstx 11715f757f3fSDimitry Andric : VecInt<[], [llvm_v32i8_ty, llvm_ptr_ty, llvm_i64_ty], 11725f757f3fSDimitry Andric [IntrWriteMem, IntrArgMemOnly]>; 11735f757f3fSDimitry Andricdef int_loongarch_lasx_xvstelm_b 11745f757f3fSDimitry Andric : VecInt<[], [llvm_v32i8_ty, llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], 11755f757f3fSDimitry Andric [IntrWriteMem, IntrArgMemOnly, ImmArg<ArgIndex<2>>, ImmArg<ArgIndex<3>>]>; 11765f757f3fSDimitry Andricdef int_loongarch_lasx_xvstelm_h 11775f757f3fSDimitry Andric : VecInt<[], [llvm_v16i16_ty, llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], 11785f757f3fSDimitry Andric [IntrWriteMem, IntrArgMemOnly, ImmArg<ArgIndex<2>>, ImmArg<ArgIndex<3>>]>; 11795f757f3fSDimitry Andricdef int_loongarch_lasx_xvstelm_w 11805f757f3fSDimitry Andric : VecInt<[], [llvm_v8i32_ty, llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], 11815f757f3fSDimitry Andric [IntrWriteMem, IntrArgMemOnly, ImmArg<ArgIndex<2>>, ImmArg<ArgIndex<3>>]>; 11825f757f3fSDimitry Andricdef int_loongarch_lasx_xvstelm_d 11835f757f3fSDimitry Andric : VecInt<[], [llvm_v4i64_ty, llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], 11845f757f3fSDimitry Andric [IntrWriteMem, IntrArgMemOnly, ImmArg<ArgIndex<2>>, ImmArg<ArgIndex<3>>]>; 11855f757f3fSDimitry Andric} // TargetPrefix = "loongarch" 1186