10b57cec5SDimitry Andric//===- MipsMSAInstrInfo.td - MSA ASE instructions -*- tablegen ------------*-=// 20b57cec5SDimitry Andric// 30b57cec5SDimitry Andric// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 40b57cec5SDimitry Andric// See https://llvm.org/LICENSE.txt for license information. 50b57cec5SDimitry Andric// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 60b57cec5SDimitry Andric// 70b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 80b57cec5SDimitry Andric// 90b57cec5SDimitry Andric// This file describes Mips MSA ASE instructions. 100b57cec5SDimitry Andric// 110b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 120b57cec5SDimitry Andric 130b57cec5SDimitry Andricdef SDT_MipsVecCond : SDTypeProfile<1, 1, [SDTCisInt<0>, SDTCisVec<1>]>; 140b57cec5SDimitry Andricdef SDT_VSetCC : SDTypeProfile<1, 3, [SDTCisInt<0>, 150b57cec5SDimitry Andric SDTCisInt<1>, 160b57cec5SDimitry Andric SDTCisSameAs<1, 2>, 170b57cec5SDimitry Andric SDTCisVT<3, OtherVT>]>; 180b57cec5SDimitry Andricdef SDT_VFSetCC : SDTypeProfile<1, 3, [SDTCisInt<0>, 190b57cec5SDimitry Andric SDTCisFP<1>, 200b57cec5SDimitry Andric SDTCisSameAs<1, 2>, 210b57cec5SDimitry Andric SDTCisVT<3, OtherVT>]>; 220b57cec5SDimitry Andricdef SDT_VSHF : SDTypeProfile<1, 3, [SDTCisInt<0>, SDTCisVec<0>, 230b57cec5SDimitry Andric SDTCisInt<1>, SDTCisVec<1>, 240b57cec5SDimitry Andric SDTCisSameAs<0, 2>, SDTCisSameAs<2, 3>]>; 250b57cec5SDimitry Andricdef SDT_SHF : SDTypeProfile<1, 2, [SDTCisInt<0>, SDTCisVec<0>, 260b57cec5SDimitry Andric SDTCisVT<1, i32>, SDTCisSameAs<0, 2>]>; 270b57cec5SDimitry Andricdef SDT_ILV : SDTypeProfile<1, 2, [SDTCisInt<0>, SDTCisVec<0>, 280b57cec5SDimitry Andric SDTCisSameAs<0, 1>, SDTCisSameAs<1, 2>]>; 290b57cec5SDimitry Andricdef SDT_INSVE : SDTypeProfile<1, 4, [SDTCisVec<0>, SDTCisSameAs<0, 1>, 300b57cec5SDimitry Andric SDTCisVT<2, i32>, SDTCisSameAs<0, 3>, 310b57cec5SDimitry Andric SDTCisVT<4, i32>]>; 320b57cec5SDimitry Andric 330b57cec5SDimitry Andricdef MipsVAllNonZero : SDNode<"MipsISD::VALL_NONZERO", SDT_MipsVecCond>; 340b57cec5SDimitry Andricdef MipsVAnyNonZero : SDNode<"MipsISD::VANY_NONZERO", SDT_MipsVecCond>; 350b57cec5SDimitry Andricdef MipsVAllZero : SDNode<"MipsISD::VALL_ZERO", SDT_MipsVecCond>; 360b57cec5SDimitry Andricdef MipsVAnyZero : SDNode<"MipsISD::VANY_ZERO", SDT_MipsVecCond>; 370b57cec5SDimitry Andricdef MipsVNOR : SDNode<"MipsISD::VNOR", SDTIntBinOp, 380b57cec5SDimitry Andric [SDNPCommutative, SDNPAssociative]>; 390b57cec5SDimitry Andricdef MipsVSHF : SDNode<"MipsISD::VSHF", SDT_VSHF>; 400b57cec5SDimitry Andricdef MipsSHF : SDNode<"MipsISD::SHF", SDT_SHF>; 410b57cec5SDimitry Andricdef MipsILVEV : SDNode<"MipsISD::ILVEV", SDT_ILV>; 420b57cec5SDimitry Andricdef MipsILVOD : SDNode<"MipsISD::ILVOD", SDT_ILV>; 430b57cec5SDimitry Andricdef MipsILVL : SDNode<"MipsISD::ILVL", SDT_ILV>; 440b57cec5SDimitry Andricdef MipsILVR : SDNode<"MipsISD::ILVR", SDT_ILV>; 450b57cec5SDimitry Andricdef MipsPCKEV : SDNode<"MipsISD::PCKEV", SDT_ILV>; 460b57cec5SDimitry Andricdef MipsPCKOD : SDNode<"MipsISD::PCKOD", SDT_ILV>; 470b57cec5SDimitry Andricdef MipsINSVE : SDNode<"MipsISD::INSVE", SDT_INSVE>; 480b57cec5SDimitry Andricdef MipsFMS : SDNode<"MipsISD::FMS", SDTFPTernaryOp>; 490b57cec5SDimitry Andric 500b57cec5SDimitry Andricdef vsetcc : SDNode<"ISD::SETCC", SDT_VSetCC>; 510b57cec5SDimitry Andricdef vfsetcc : SDNode<"ISD::SETCC", SDT_VFSetCC>; 520b57cec5SDimitry Andric 530b57cec5SDimitry Andricdef MipsVExtractSExt : SDNode<"MipsISD::VEXTRACT_SEXT_ELT", 540b57cec5SDimitry Andric SDTypeProfile<1, 3, [SDTCisPtrTy<2>]>, []>; 550b57cec5SDimitry Andricdef MipsVExtractZExt : SDNode<"MipsISD::VEXTRACT_ZEXT_ELT", 560b57cec5SDimitry Andric SDTypeProfile<1, 3, [SDTCisPtrTy<2>]>, []>; 570b57cec5SDimitry Andric 580b57cec5SDimitry Andricdef immZExt1Ptr : ImmLeaf<iPTR, [{return isUInt<1>(Imm);}]>; 590b57cec5SDimitry Andricdef immZExt2Ptr : ImmLeaf<iPTR, [{return isUInt<2>(Imm);}]>; 600b57cec5SDimitry Andricdef immZExt3Ptr : ImmLeaf<iPTR, [{return isUInt<3>(Imm);}]>; 610b57cec5SDimitry Andricdef immZExt4Ptr : ImmLeaf<iPTR, [{return isUInt<4>(Imm);}]>; 620b57cec5SDimitry Andric 638bcb0991SDimitry Andricdef timmZExt1Ptr : TImmLeaf<iPTR, [{return isUInt<1>(Imm);}]>; 648bcb0991SDimitry Andricdef timmZExt2Ptr : TImmLeaf<iPTR, [{return isUInt<2>(Imm);}]>; 658bcb0991SDimitry Andricdef timmZExt3Ptr : TImmLeaf<iPTR, [{return isUInt<3>(Imm);}]>; 668bcb0991SDimitry Andricdef timmZExt4Ptr : TImmLeaf<iPTR, [{return isUInt<4>(Imm);}]>; 678bcb0991SDimitry Andric 680b57cec5SDimitry Andric// Operands 690b57cec5SDimitry Andric 700b57cec5SDimitry Andricdef immZExt2Lsa : ImmLeaf<i32, [{return isUInt<2>(Imm - 1);}]>; 710b57cec5SDimitry Andric 720b57cec5SDimitry Andric// Pattern fragments 730b57cec5SDimitry Andricdef vextract_sext_i8 : PatFrag<(ops node:$vec, node:$idx), 740b57cec5SDimitry Andric (MipsVExtractSExt node:$vec, node:$idx, i8)>; 750b57cec5SDimitry Andricdef vextract_sext_i16 : PatFrag<(ops node:$vec, node:$idx), 760b57cec5SDimitry Andric (MipsVExtractSExt node:$vec, node:$idx, i16)>; 770b57cec5SDimitry Andricdef vextract_sext_i32 : PatFrag<(ops node:$vec, node:$idx), 780b57cec5SDimitry Andric (MipsVExtractSExt node:$vec, node:$idx, i32)>; 790b57cec5SDimitry Andricdef vextract_sext_i64 : PatFrag<(ops node:$vec, node:$idx), 800b57cec5SDimitry Andric (MipsVExtractSExt node:$vec, node:$idx, i64)>; 810b57cec5SDimitry Andric 820b57cec5SDimitry Andricdef vextract_zext_i8 : PatFrag<(ops node:$vec, node:$idx), 830b57cec5SDimitry Andric (MipsVExtractZExt node:$vec, node:$idx, i8)>; 840b57cec5SDimitry Andricdef vextract_zext_i16 : PatFrag<(ops node:$vec, node:$idx), 850b57cec5SDimitry Andric (MipsVExtractZExt node:$vec, node:$idx, i16)>; 860b57cec5SDimitry Andricdef vextract_zext_i32 : PatFrag<(ops node:$vec, node:$idx), 870b57cec5SDimitry Andric (MipsVExtractZExt node:$vec, node:$idx, i32)>; 880b57cec5SDimitry Andricdef vextract_zext_i64 : PatFrag<(ops node:$vec, node:$idx), 890b57cec5SDimitry Andric (MipsVExtractZExt node:$vec, node:$idx, i64)>; 900b57cec5SDimitry Andric 910b57cec5SDimitry Andricdef vinsert_v16i8 : PatFrag<(ops node:$vec, node:$val, node:$idx), 920b57cec5SDimitry Andric (v16i8 (vector_insert node:$vec, node:$val, node:$idx))>; 930b57cec5SDimitry Andricdef vinsert_v8i16 : PatFrag<(ops node:$vec, node:$val, node:$idx), 940b57cec5SDimitry Andric (v8i16 (vector_insert node:$vec, node:$val, node:$idx))>; 950b57cec5SDimitry Andricdef vinsert_v4i32 : PatFrag<(ops node:$vec, node:$val, node:$idx), 960b57cec5SDimitry Andric (v4i32 (vector_insert node:$vec, node:$val, node:$idx))>; 970b57cec5SDimitry Andricdef vinsert_v2i64 : PatFrag<(ops node:$vec, node:$val, node:$idx), 980b57cec5SDimitry Andric (v2i64 (vector_insert node:$vec, node:$val, node:$idx))>; 990b57cec5SDimitry Andric 1000b57cec5SDimitry Andricdef insve_v16i8 : PatFrag<(ops node:$v1, node:$i1, node:$v2, node:$i2), 1010b57cec5SDimitry Andric (v16i8 (MipsINSVE node:$v1, node:$i1, node:$v2, node:$i2))>; 1020b57cec5SDimitry Andricdef insve_v8i16 : PatFrag<(ops node:$v1, node:$i1, node:$v2, node:$i2), 1030b57cec5SDimitry Andric (v8i16 (MipsINSVE node:$v1, node:$i1, node:$v2, node:$i2))>; 1040b57cec5SDimitry Andricdef insve_v4i32 : PatFrag<(ops node:$v1, node:$i1, node:$v2, node:$i2), 1050b57cec5SDimitry Andric (v4i32 (MipsINSVE node:$v1, node:$i1, node:$v2, node:$i2))>; 1060b57cec5SDimitry Andricdef insve_v2i64 : PatFrag<(ops node:$v1, node:$i1, node:$v2, node:$i2), 1070b57cec5SDimitry Andric (v2i64 (MipsINSVE node:$v1, node:$i1, node:$v2, node:$i2))>; 1080b57cec5SDimitry Andric 1090b57cec5SDimitry Andricclass vfsetcc_type<ValueType ResTy, ValueType OpTy, CondCode CC> : 1100b57cec5SDimitry Andric PatFrag<(ops node:$lhs, node:$rhs), 1110b57cec5SDimitry Andric (ResTy (vfsetcc (OpTy node:$lhs), (OpTy node:$rhs), CC))>; 1120b57cec5SDimitry Andric 1130b57cec5SDimitry Andric// ISD::SETFALSE cannot occur 1140b57cec5SDimitry Andricdef vfseteq_v4f32 : vfsetcc_type<v4i32, v4f32, SETEQ>; 1150b57cec5SDimitry Andricdef vfseteq_v2f64 : vfsetcc_type<v2i64, v2f64, SETEQ>; 1160b57cec5SDimitry Andricdef vfsetge_v4f32 : vfsetcc_type<v4i32, v4f32, SETGE>; 1170b57cec5SDimitry Andricdef vfsetge_v2f64 : vfsetcc_type<v2i64, v2f64, SETGE>; 1180b57cec5SDimitry Andricdef vfsetgt_v4f32 : vfsetcc_type<v4i32, v4f32, SETGT>; 1190b57cec5SDimitry Andricdef vfsetgt_v2f64 : vfsetcc_type<v2i64, v2f64, SETGT>; 1200b57cec5SDimitry Andricdef vfsetle_v4f32 : vfsetcc_type<v4i32, v4f32, SETLE>; 1210b57cec5SDimitry Andricdef vfsetle_v2f64 : vfsetcc_type<v2i64, v2f64, SETLE>; 1220b57cec5SDimitry Andricdef vfsetlt_v4f32 : vfsetcc_type<v4i32, v4f32, SETLT>; 1230b57cec5SDimitry Andricdef vfsetlt_v2f64 : vfsetcc_type<v2i64, v2f64, SETLT>; 1240b57cec5SDimitry Andricdef vfsetne_v4f32 : vfsetcc_type<v4i32, v4f32, SETNE>; 1250b57cec5SDimitry Andricdef vfsetne_v2f64 : vfsetcc_type<v2i64, v2f64, SETNE>; 1260b57cec5SDimitry Andricdef vfsetoeq_v4f32 : vfsetcc_type<v4i32, v4f32, SETOEQ>; 1270b57cec5SDimitry Andricdef vfsetoeq_v2f64 : vfsetcc_type<v2i64, v2f64, SETOEQ>; 1280b57cec5SDimitry Andricdef vfsetoge_v4f32 : vfsetcc_type<v4i32, v4f32, SETOGE>; 1290b57cec5SDimitry Andricdef vfsetoge_v2f64 : vfsetcc_type<v2i64, v2f64, SETOGE>; 1300b57cec5SDimitry Andricdef vfsetogt_v4f32 : vfsetcc_type<v4i32, v4f32, SETOGT>; 1310b57cec5SDimitry Andricdef vfsetogt_v2f64 : vfsetcc_type<v2i64, v2f64, SETOGT>; 1320b57cec5SDimitry Andricdef vfsetole_v4f32 : vfsetcc_type<v4i32, v4f32, SETOLE>; 1330b57cec5SDimitry Andricdef vfsetole_v2f64 : vfsetcc_type<v2i64, v2f64, SETOLE>; 1340b57cec5SDimitry Andricdef vfsetolt_v4f32 : vfsetcc_type<v4i32, v4f32, SETOLT>; 1350b57cec5SDimitry Andricdef vfsetolt_v2f64 : vfsetcc_type<v2i64, v2f64, SETOLT>; 1360b57cec5SDimitry Andricdef vfsetone_v4f32 : vfsetcc_type<v4i32, v4f32, SETONE>; 1370b57cec5SDimitry Andricdef vfsetone_v2f64 : vfsetcc_type<v2i64, v2f64, SETONE>; 1380b57cec5SDimitry Andricdef vfsetord_v4f32 : vfsetcc_type<v4i32, v4f32, SETO>; 1390b57cec5SDimitry Andricdef vfsetord_v2f64 : vfsetcc_type<v2i64, v2f64, SETO>; 1400b57cec5SDimitry Andricdef vfsetun_v4f32 : vfsetcc_type<v4i32, v4f32, SETUO>; 1410b57cec5SDimitry Andricdef vfsetun_v2f64 : vfsetcc_type<v2i64, v2f64, SETUO>; 1420b57cec5SDimitry Andricdef vfsetueq_v4f32 : vfsetcc_type<v4i32, v4f32, SETUEQ>; 1430b57cec5SDimitry Andricdef vfsetueq_v2f64 : vfsetcc_type<v2i64, v2f64, SETUEQ>; 1440b57cec5SDimitry Andricdef vfsetuge_v4f32 : vfsetcc_type<v4i32, v4f32, SETUGE>; 1450b57cec5SDimitry Andricdef vfsetuge_v2f64 : vfsetcc_type<v2i64, v2f64, SETUGE>; 1460b57cec5SDimitry Andricdef vfsetugt_v4f32 : vfsetcc_type<v4i32, v4f32, SETUGT>; 1470b57cec5SDimitry Andricdef vfsetugt_v2f64 : vfsetcc_type<v2i64, v2f64, SETUGT>; 1480b57cec5SDimitry Andricdef vfsetule_v4f32 : vfsetcc_type<v4i32, v4f32, SETULE>; 1490b57cec5SDimitry Andricdef vfsetule_v2f64 : vfsetcc_type<v2i64, v2f64, SETULE>; 1500b57cec5SDimitry Andricdef vfsetult_v4f32 : vfsetcc_type<v4i32, v4f32, SETULT>; 1510b57cec5SDimitry Andricdef vfsetult_v2f64 : vfsetcc_type<v2i64, v2f64, SETULT>; 1520b57cec5SDimitry Andricdef vfsetune_v4f32 : vfsetcc_type<v4i32, v4f32, SETUNE>; 1530b57cec5SDimitry Andricdef vfsetune_v2f64 : vfsetcc_type<v2i64, v2f64, SETUNE>; 1540b57cec5SDimitry Andric// ISD::SETTRUE cannot occur 1550b57cec5SDimitry Andric// ISD::SETFALSE2 cannot occur 1560b57cec5SDimitry Andric// ISD::SETTRUE2 cannot occur 1570b57cec5SDimitry Andric 1580b57cec5SDimitry Andricclass vsetcc_type<ValueType ResTy, CondCode CC> : 1590b57cec5SDimitry Andric PatFrag<(ops node:$lhs, node:$rhs), 1600b57cec5SDimitry Andric (ResTy (vsetcc node:$lhs, node:$rhs, CC))>; 1610b57cec5SDimitry Andric 1620b57cec5SDimitry Andricdef vseteq_v16i8 : vsetcc_type<v16i8, SETEQ>; 1630b57cec5SDimitry Andricdef vseteq_v8i16 : vsetcc_type<v8i16, SETEQ>; 1640b57cec5SDimitry Andricdef vseteq_v4i32 : vsetcc_type<v4i32, SETEQ>; 1650b57cec5SDimitry Andricdef vseteq_v2i64 : vsetcc_type<v2i64, SETEQ>; 1660b57cec5SDimitry Andricdef vsetle_v16i8 : vsetcc_type<v16i8, SETLE>; 1670b57cec5SDimitry Andricdef vsetle_v8i16 : vsetcc_type<v8i16, SETLE>; 1680b57cec5SDimitry Andricdef vsetle_v4i32 : vsetcc_type<v4i32, SETLE>; 1690b57cec5SDimitry Andricdef vsetle_v2i64 : vsetcc_type<v2i64, SETLE>; 1700b57cec5SDimitry Andricdef vsetlt_v16i8 : vsetcc_type<v16i8, SETLT>; 1710b57cec5SDimitry Andricdef vsetlt_v8i16 : vsetcc_type<v8i16, SETLT>; 1720b57cec5SDimitry Andricdef vsetlt_v4i32 : vsetcc_type<v4i32, SETLT>; 1730b57cec5SDimitry Andricdef vsetlt_v2i64 : vsetcc_type<v2i64, SETLT>; 1740b57cec5SDimitry Andricdef vsetule_v16i8 : vsetcc_type<v16i8, SETULE>; 1750b57cec5SDimitry Andricdef vsetule_v8i16 : vsetcc_type<v8i16, SETULE>; 1760b57cec5SDimitry Andricdef vsetule_v4i32 : vsetcc_type<v4i32, SETULE>; 1770b57cec5SDimitry Andricdef vsetule_v2i64 : vsetcc_type<v2i64, SETULE>; 1780b57cec5SDimitry Andricdef vsetult_v16i8 : vsetcc_type<v16i8, SETULT>; 1790b57cec5SDimitry Andricdef vsetult_v8i16 : vsetcc_type<v8i16, SETULT>; 1800b57cec5SDimitry Andricdef vsetult_v4i32 : vsetcc_type<v4i32, SETULT>; 1810b57cec5SDimitry Andricdef vsetult_v2i64 : vsetcc_type<v2i64, SETULT>; 1820b57cec5SDimitry Andric 1830b57cec5SDimitry Andricdef vsplati8 : PatFrag<(ops node:$e0), 1840b57cec5SDimitry Andric (v16i8 (build_vector node:$e0, node:$e0, 1850b57cec5SDimitry Andric node:$e0, node:$e0, 1860b57cec5SDimitry Andric node:$e0, node:$e0, 1870b57cec5SDimitry Andric node:$e0, node:$e0, 1880b57cec5SDimitry Andric node:$e0, node:$e0, 1890b57cec5SDimitry Andric node:$e0, node:$e0, 1900b57cec5SDimitry Andric node:$e0, node:$e0, 1910b57cec5SDimitry Andric node:$e0, node:$e0))>; 1920b57cec5SDimitry Andricdef vsplati16 : PatFrag<(ops node:$e0), 1930b57cec5SDimitry Andric (v8i16 (build_vector node:$e0, node:$e0, 1940b57cec5SDimitry Andric node:$e0, node:$e0, 1950b57cec5SDimitry Andric node:$e0, node:$e0, 1960b57cec5SDimitry Andric node:$e0, node:$e0))>; 1970b57cec5SDimitry Andricdef vsplati32 : PatFrag<(ops node:$e0), 1980b57cec5SDimitry Andric (v4i32 (build_vector node:$e0, node:$e0, 1990b57cec5SDimitry Andric node:$e0, node:$e0))>; 2000b57cec5SDimitry Andric 201*71ac745dSDimitry Andric// Any build_vector that is a constant splat with a value that equals 1 202*71ac745dSDimitry Andricdef vsplat_imm_eq_1 : ComplexPattern<vAny, 0, "selectVSplatImmEq1">; 2030b57cec5SDimitry Andric 2040b57cec5SDimitry Andricdef vsplati64 : PatFrag<(ops node:$e0), 2050b57cec5SDimitry Andric (v2i64 (build_vector node:$e0, node:$e0))>; 2060b57cec5SDimitry Andric 2070b57cec5SDimitry Andricdef vsplati64_splat_d : PatFrag<(ops node:$e0), 2080b57cec5SDimitry Andric (v2i64 (bitconvert 2090b57cec5SDimitry Andric (v4i32 (and 2100b57cec5SDimitry Andric (v4i32 (build_vector node:$e0, 2110b57cec5SDimitry Andric node:$e0, 2120b57cec5SDimitry Andric node:$e0, 2130b57cec5SDimitry Andric node:$e0)), 214*71ac745dSDimitry Andric (vsplat_imm_eq_1)))))>; 2150b57cec5SDimitry Andric 2160b57cec5SDimitry Andricdef vsplatf32 : PatFrag<(ops node:$e0), 2170b57cec5SDimitry Andric (v4f32 (build_vector node:$e0, node:$e0, 2180b57cec5SDimitry Andric node:$e0, node:$e0))>; 2190b57cec5SDimitry Andricdef vsplatf64 : PatFrag<(ops node:$e0), 2200b57cec5SDimitry Andric (v2f64 (build_vector node:$e0, node:$e0))>; 2210b57cec5SDimitry Andric 2220b57cec5SDimitry Andricdef vsplati8_elt : PatFrag<(ops node:$v, node:$i), 2230b57cec5SDimitry Andric (MipsVSHF (vsplati8 node:$i), node:$v, node:$v)>; 2240b57cec5SDimitry Andricdef vsplati16_elt : PatFrag<(ops node:$v, node:$i), 2250b57cec5SDimitry Andric (MipsVSHF (vsplati16 node:$i), node:$v, node:$v)>; 2260b57cec5SDimitry Andricdef vsplati32_elt : PatFrag<(ops node:$v, node:$i), 2270b57cec5SDimitry Andric (MipsVSHF (vsplati32 node:$i), node:$v, node:$v)>; 2280b57cec5SDimitry Andricdef vsplati64_elt : PatFrag<(ops node:$v, node:$i), 2290b57cec5SDimitry Andric (MipsVSHF (vsplati64_splat_d node:$i), 2300b57cec5SDimitry Andric node:$v, node:$v)>; 2310b57cec5SDimitry Andric 2320b57cec5SDimitry Andricclass SplatPatLeaf<Operand opclass, dag frag, code pred = [{}], 2330b57cec5SDimitry Andric SDNodeXForm xform = NOOP_SDNodeXForm> 2340b57cec5SDimitry Andric : PatLeaf<frag, pred, xform> { 2350b57cec5SDimitry Andric Operand OpClass = opclass; 2360b57cec5SDimitry Andric} 2370b57cec5SDimitry Andric 2380b57cec5SDimitry Andricclass SplatComplexPattern<Operand opclass, ValueType ty, int numops, string fn, 2390b57cec5SDimitry Andric list<SDNode> roots = [], 2400b57cec5SDimitry Andric list<SDNodeProperty> props = []> : 2410b57cec5SDimitry Andric ComplexPattern<ty, numops, fn, roots, props> { 2420b57cec5SDimitry Andric Operand OpClass = opclass; 2430b57cec5SDimitry Andric} 2440b57cec5SDimitry Andric 2450b57cec5SDimitry Andricdef vsplati8_uimm3 : SplatComplexPattern<vsplat_uimm3, v16i8, 1, 2460b57cec5SDimitry Andric "selectVSplatUimm3", 2470b57cec5SDimitry Andric [build_vector, bitconvert]>; 2480b57cec5SDimitry Andric 2490b57cec5SDimitry Andricdef vsplati8_uimm4 : SplatComplexPattern<vsplat_uimm4, v16i8, 1, 2500b57cec5SDimitry Andric "selectVSplatUimm4", 2510b57cec5SDimitry Andric [build_vector, bitconvert]>; 2520b57cec5SDimitry Andric 2530b57cec5SDimitry Andricdef vsplati8_uimm5 : SplatComplexPattern<vsplat_uimm5, v16i8, 1, 2540b57cec5SDimitry Andric "selectVSplatUimm5", 2550b57cec5SDimitry Andric [build_vector, bitconvert]>; 2560b57cec5SDimitry Andric 2570b57cec5SDimitry Andricdef vsplati8_uimm8 : SplatComplexPattern<vsplat_uimm8, v16i8, 1, 2580b57cec5SDimitry Andric "selectVSplatUimm8", 2590b57cec5SDimitry Andric [build_vector, bitconvert]>; 2600b57cec5SDimitry Andric 2610b57cec5SDimitry Andricdef vsplati8_simm5 : SplatComplexPattern<vsplat_simm5, v16i8, 1, 2620b57cec5SDimitry Andric "selectVSplatSimm5", 2630b57cec5SDimitry Andric [build_vector, bitconvert]>; 2640b57cec5SDimitry Andric 2650b57cec5SDimitry Andricdef vsplati16_uimm3 : SplatComplexPattern<vsplat_uimm3, v8i16, 1, 2660b57cec5SDimitry Andric "selectVSplatUimm3", 2670b57cec5SDimitry Andric [build_vector, bitconvert]>; 2680b57cec5SDimitry Andric 2690b57cec5SDimitry Andricdef vsplati16_uimm4 : SplatComplexPattern<vsplat_uimm4, v8i16, 1, 2700b57cec5SDimitry Andric "selectVSplatUimm4", 2710b57cec5SDimitry Andric [build_vector, bitconvert]>; 2720b57cec5SDimitry Andric 2730b57cec5SDimitry Andricdef vsplati16_uimm5 : SplatComplexPattern<vsplat_uimm5, v8i16, 1, 2740b57cec5SDimitry Andric "selectVSplatUimm5", 2750b57cec5SDimitry Andric [build_vector, bitconvert]>; 2760b57cec5SDimitry Andric 2770b57cec5SDimitry Andricdef vsplati16_simm5 : SplatComplexPattern<vsplat_simm5, v8i16, 1, 2780b57cec5SDimitry Andric "selectVSplatSimm5", 2790b57cec5SDimitry Andric [build_vector, bitconvert]>; 2800b57cec5SDimitry Andric 2810b57cec5SDimitry Andricdef vsplati32_uimm2 : SplatComplexPattern<vsplat_uimm2, v4i32, 1, 2820b57cec5SDimitry Andric "selectVSplatUimm2", 2830b57cec5SDimitry Andric [build_vector, bitconvert]>; 2840b57cec5SDimitry Andric 2850b57cec5SDimitry Andricdef vsplati32_uimm5 : SplatComplexPattern<vsplat_uimm5, v4i32, 1, 2860b57cec5SDimitry Andric "selectVSplatUimm5", 2870b57cec5SDimitry Andric [build_vector, bitconvert]>; 2880b57cec5SDimitry Andric 2890b57cec5SDimitry Andricdef vsplati32_simm5 : SplatComplexPattern<vsplat_simm5, v4i32, 1, 2900b57cec5SDimitry Andric "selectVSplatSimm5", 2910b57cec5SDimitry Andric [build_vector, bitconvert]>; 2920b57cec5SDimitry Andric 2930b57cec5SDimitry Andricdef vsplati64_uimm1 : SplatComplexPattern<vsplat_uimm1, v2i64, 1, 2940b57cec5SDimitry Andric "selectVSplatUimm1", 2950b57cec5SDimitry Andric [build_vector, bitconvert]>; 2960b57cec5SDimitry Andric 2970b57cec5SDimitry Andricdef vsplati64_uimm5 : SplatComplexPattern<vsplat_uimm5, v2i64, 1, 2980b57cec5SDimitry Andric "selectVSplatUimm5", 2990b57cec5SDimitry Andric [build_vector, bitconvert]>; 3000b57cec5SDimitry Andric 3010b57cec5SDimitry Andricdef vsplati64_uimm6 : SplatComplexPattern<vsplat_uimm6, v2i64, 1, 3020b57cec5SDimitry Andric "selectVSplatUimm6", 3030b57cec5SDimitry Andric [build_vector, bitconvert]>; 3040b57cec5SDimitry Andric 3050b57cec5SDimitry Andricdef vsplati64_simm5 : SplatComplexPattern<vsplat_simm5, v2i64, 1, 3060b57cec5SDimitry Andric "selectVSplatSimm5", 3070b57cec5SDimitry Andric [build_vector, bitconvert]>; 3080b57cec5SDimitry Andric 3090b57cec5SDimitry Andric// Any build_vector that is a constant splat with a value that is an exact 3100b57cec5SDimitry Andric// power of 2 3110b57cec5SDimitry Andricdef vsplat_uimm_pow2 : ComplexPattern<vAny, 1, "selectVSplatUimmPow2", 3120b57cec5SDimitry Andric [build_vector, bitconvert]>; 3130b57cec5SDimitry Andric 3140b57cec5SDimitry Andric// Any build_vector that is a constant splat with a value that is the bitwise 3150b57cec5SDimitry Andric// inverse of an exact power of 2 3160b57cec5SDimitry Andricdef vsplat_uimm_inv_pow2 : ComplexPattern<vAny, 1, "selectVSplatUimmInvPow2", 3170b57cec5SDimitry Andric [build_vector, bitconvert]>; 3180b57cec5SDimitry Andric 3190b57cec5SDimitry Andric// Any build_vector that is a constant splat with only a consecutive sequence 3200b57cec5SDimitry Andric// of left-most bits set. 3210b57cec5SDimitry Andricdef vsplat_maskl_bits_uimm3 3220b57cec5SDimitry Andric : SplatComplexPattern<vsplat_uimm3, vAny, 1, "selectVSplatMaskL", 3230b57cec5SDimitry Andric [build_vector, bitconvert]>; 3240b57cec5SDimitry Andricdef vsplat_maskl_bits_uimm4 3250b57cec5SDimitry Andric : SplatComplexPattern<vsplat_uimm4, vAny, 1, "selectVSplatMaskL", 3260b57cec5SDimitry Andric [build_vector, bitconvert]>; 3270b57cec5SDimitry Andricdef vsplat_maskl_bits_uimm5 3280b57cec5SDimitry Andric : SplatComplexPattern<vsplat_uimm5, vAny, 1, "selectVSplatMaskL", 3290b57cec5SDimitry Andric [build_vector, bitconvert]>; 3300b57cec5SDimitry Andricdef vsplat_maskl_bits_uimm6 3310b57cec5SDimitry Andric : SplatComplexPattern<vsplat_uimm6, vAny, 1, "selectVSplatMaskL", 3320b57cec5SDimitry Andric [build_vector, bitconvert]>; 3330b57cec5SDimitry Andric 3340b57cec5SDimitry Andric// Any build_vector that is a constant splat with only a consecutive sequence 3350b57cec5SDimitry Andric// of right-most bits set. 3360b57cec5SDimitry Andricdef vsplat_maskr_bits_uimm3 3370b57cec5SDimitry Andric : SplatComplexPattern<vsplat_uimm3, vAny, 1, "selectVSplatMaskR", 3380b57cec5SDimitry Andric [build_vector, bitconvert]>; 3390b57cec5SDimitry Andricdef vsplat_maskr_bits_uimm4 3400b57cec5SDimitry Andric : SplatComplexPattern<vsplat_uimm4, vAny, 1, "selectVSplatMaskR", 3410b57cec5SDimitry Andric [build_vector, bitconvert]>; 3420b57cec5SDimitry Andricdef vsplat_maskr_bits_uimm5 3430b57cec5SDimitry Andric : SplatComplexPattern<vsplat_uimm5, vAny, 1, "selectVSplatMaskR", 3440b57cec5SDimitry Andric [build_vector, bitconvert]>; 3450b57cec5SDimitry Andricdef vsplat_maskr_bits_uimm6 3460b57cec5SDimitry Andric : SplatComplexPattern<vsplat_uimm6, vAny, 1, "selectVSplatMaskR", 3470b57cec5SDimitry Andric [build_vector, bitconvert]>; 3480b57cec5SDimitry Andric 3490b57cec5SDimitry Andric 3500b57cec5SDimitry Andricdef vbclr_b : PatFrag<(ops node:$ws, node:$wt), 351*71ac745dSDimitry Andric (and node:$ws, (vnot (shl (vsplat_imm_eq_1), node:$wt)))>; 3520b57cec5SDimitry Andricdef vbclr_h : PatFrag<(ops node:$ws, node:$wt), 353*71ac745dSDimitry Andric (and node:$ws, (vnot (shl (vsplat_imm_eq_1), node:$wt)))>; 3540b57cec5SDimitry Andricdef vbclr_w : PatFrag<(ops node:$ws, node:$wt), 355*71ac745dSDimitry Andric (and node:$ws, (vnot (shl (vsplat_imm_eq_1), node:$wt)))>; 3560b57cec5SDimitry Andricdef vbclr_d : PatFrag<(ops node:$ws, node:$wt), 357*71ac745dSDimitry Andric (and node:$ws, (vnot (shl (v2i64 (vsplat_imm_eq_1)), 358fe6060f1SDimitry Andric node:$wt)))>; 3590b57cec5SDimitry Andric 3600b57cec5SDimitry Andricdef vbneg_b : PatFrag<(ops node:$ws, node:$wt), 361*71ac745dSDimitry Andric (xor node:$ws, (shl (vsplat_imm_eq_1), node:$wt))>; 3620b57cec5SDimitry Andricdef vbneg_h : PatFrag<(ops node:$ws, node:$wt), 363*71ac745dSDimitry Andric (xor node:$ws, (shl (vsplat_imm_eq_1), node:$wt))>; 3640b57cec5SDimitry Andricdef vbneg_w : PatFrag<(ops node:$ws, node:$wt), 365*71ac745dSDimitry Andric (xor node:$ws, (shl (vsplat_imm_eq_1), node:$wt))>; 3660b57cec5SDimitry Andricdef vbneg_d : PatFrag<(ops node:$ws, node:$wt), 367*71ac745dSDimitry Andric (xor node:$ws, (shl (v2i64 (vsplat_imm_eq_1)), 3680b57cec5SDimitry Andric node:$wt))>; 3690b57cec5SDimitry Andric 3700b57cec5SDimitry Andricdef vbset_b : PatFrag<(ops node:$ws, node:$wt), 371*71ac745dSDimitry Andric (or node:$ws, (shl (vsplat_imm_eq_1), node:$wt))>; 3720b57cec5SDimitry Andricdef vbset_h : PatFrag<(ops node:$ws, node:$wt), 373*71ac745dSDimitry Andric (or node:$ws, (shl (vsplat_imm_eq_1), node:$wt))>; 3740b57cec5SDimitry Andricdef vbset_w : PatFrag<(ops node:$ws, node:$wt), 375*71ac745dSDimitry Andric (or node:$ws, (shl (vsplat_imm_eq_1), node:$wt))>; 3760b57cec5SDimitry Andricdef vbset_d : PatFrag<(ops node:$ws, node:$wt), 377*71ac745dSDimitry Andric (or node:$ws, (shl (v2i64 (vsplat_imm_eq_1)), 3780b57cec5SDimitry Andric node:$wt))>; 3790b57cec5SDimitry Andric 3800b57cec5SDimitry Andricdef muladd : PatFrag<(ops node:$wd, node:$ws, node:$wt), 3810b57cec5SDimitry Andric (add node:$wd, (mul node:$ws, node:$wt))>; 3820b57cec5SDimitry Andric 3830b57cec5SDimitry Andricdef mulsub : PatFrag<(ops node:$wd, node:$ws, node:$wt), 3840b57cec5SDimitry Andric (sub node:$wd, (mul node:$ws, node:$wt))>; 3850b57cec5SDimitry Andric 3860b57cec5SDimitry Andricdef mul_fexp2 : PatFrag<(ops node:$ws, node:$wt), 3870b57cec5SDimitry Andric (fmul node:$ws, (fexp2 node:$wt))>; 3880b57cec5SDimitry Andric 3890b57cec5SDimitry Andric// Instruction encoding. 3900b57cec5SDimitry Andricclass ADD_A_B_ENC : MSA_3R_FMT<0b000, 0b00, 0b010000>; 3910b57cec5SDimitry Andricclass ADD_A_H_ENC : MSA_3R_FMT<0b000, 0b01, 0b010000>; 3920b57cec5SDimitry Andricclass ADD_A_W_ENC : MSA_3R_FMT<0b000, 0b10, 0b010000>; 3930b57cec5SDimitry Andricclass ADD_A_D_ENC : MSA_3R_FMT<0b000, 0b11, 0b010000>; 3940b57cec5SDimitry Andric 3950b57cec5SDimitry Andricclass ADDS_A_B_ENC : MSA_3R_FMT<0b001, 0b00, 0b010000>; 3960b57cec5SDimitry Andricclass ADDS_A_H_ENC : MSA_3R_FMT<0b001, 0b01, 0b010000>; 3970b57cec5SDimitry Andricclass ADDS_A_W_ENC : MSA_3R_FMT<0b001, 0b10, 0b010000>; 3980b57cec5SDimitry Andricclass ADDS_A_D_ENC : MSA_3R_FMT<0b001, 0b11, 0b010000>; 3990b57cec5SDimitry Andric 4000b57cec5SDimitry Andricclass ADDS_S_B_ENC : MSA_3R_FMT<0b010, 0b00, 0b010000>; 4010b57cec5SDimitry Andricclass ADDS_S_H_ENC : MSA_3R_FMT<0b010, 0b01, 0b010000>; 4020b57cec5SDimitry Andricclass ADDS_S_W_ENC : MSA_3R_FMT<0b010, 0b10, 0b010000>; 4030b57cec5SDimitry Andricclass ADDS_S_D_ENC : MSA_3R_FMT<0b010, 0b11, 0b010000>; 4040b57cec5SDimitry Andric 4050b57cec5SDimitry Andricclass ADDS_U_B_ENC : MSA_3R_FMT<0b011, 0b00, 0b010000>; 4060b57cec5SDimitry Andricclass ADDS_U_H_ENC : MSA_3R_FMT<0b011, 0b01, 0b010000>; 4070b57cec5SDimitry Andricclass ADDS_U_W_ENC : MSA_3R_FMT<0b011, 0b10, 0b010000>; 4080b57cec5SDimitry Andricclass ADDS_U_D_ENC : MSA_3R_FMT<0b011, 0b11, 0b010000>; 4090b57cec5SDimitry Andric 4100b57cec5SDimitry Andricclass ADDV_B_ENC : MSA_3R_FMT<0b000, 0b00, 0b001110>; 4110b57cec5SDimitry Andricclass ADDV_H_ENC : MSA_3R_FMT<0b000, 0b01, 0b001110>; 4120b57cec5SDimitry Andricclass ADDV_W_ENC : MSA_3R_FMT<0b000, 0b10, 0b001110>; 4130b57cec5SDimitry Andricclass ADDV_D_ENC : MSA_3R_FMT<0b000, 0b11, 0b001110>; 4140b57cec5SDimitry Andric 4150b57cec5SDimitry Andricclass ADDVI_B_ENC : MSA_I5_FMT<0b000, 0b00, 0b000110>; 4160b57cec5SDimitry Andricclass ADDVI_H_ENC : MSA_I5_FMT<0b000, 0b01, 0b000110>; 4170b57cec5SDimitry Andricclass ADDVI_W_ENC : MSA_I5_FMT<0b000, 0b10, 0b000110>; 4180b57cec5SDimitry Andricclass ADDVI_D_ENC : MSA_I5_FMT<0b000, 0b11, 0b000110>; 4190b57cec5SDimitry Andric 4200b57cec5SDimitry Andricclass AND_V_ENC : MSA_VEC_FMT<0b00000, 0b011110>; 4210b57cec5SDimitry Andric 4220b57cec5SDimitry Andricclass ANDI_B_ENC : MSA_I8_FMT<0b00, 0b000000>; 4230b57cec5SDimitry Andric 4240b57cec5SDimitry Andricclass ASUB_S_B_ENC : MSA_3R_FMT<0b100, 0b00, 0b010001>; 4250b57cec5SDimitry Andricclass ASUB_S_H_ENC : MSA_3R_FMT<0b100, 0b01, 0b010001>; 4260b57cec5SDimitry Andricclass ASUB_S_W_ENC : MSA_3R_FMT<0b100, 0b10, 0b010001>; 4270b57cec5SDimitry Andricclass ASUB_S_D_ENC : MSA_3R_FMT<0b100, 0b11, 0b010001>; 4280b57cec5SDimitry Andric 4290b57cec5SDimitry Andricclass ASUB_U_B_ENC : MSA_3R_FMT<0b101, 0b00, 0b010001>; 4300b57cec5SDimitry Andricclass ASUB_U_H_ENC : MSA_3R_FMT<0b101, 0b01, 0b010001>; 4310b57cec5SDimitry Andricclass ASUB_U_W_ENC : MSA_3R_FMT<0b101, 0b10, 0b010001>; 4320b57cec5SDimitry Andricclass ASUB_U_D_ENC : MSA_3R_FMT<0b101, 0b11, 0b010001>; 4330b57cec5SDimitry Andric 4340b57cec5SDimitry Andricclass AVE_S_B_ENC : MSA_3R_FMT<0b100, 0b00, 0b010000>; 4350b57cec5SDimitry Andricclass AVE_S_H_ENC : MSA_3R_FMT<0b100, 0b01, 0b010000>; 4360b57cec5SDimitry Andricclass AVE_S_W_ENC : MSA_3R_FMT<0b100, 0b10, 0b010000>; 4370b57cec5SDimitry Andricclass AVE_S_D_ENC : MSA_3R_FMT<0b100, 0b11, 0b010000>; 4380b57cec5SDimitry Andric 4390b57cec5SDimitry Andricclass AVE_U_B_ENC : MSA_3R_FMT<0b101, 0b00, 0b010000>; 4400b57cec5SDimitry Andricclass AVE_U_H_ENC : MSA_3R_FMT<0b101, 0b01, 0b010000>; 4410b57cec5SDimitry Andricclass AVE_U_W_ENC : MSA_3R_FMT<0b101, 0b10, 0b010000>; 4420b57cec5SDimitry Andricclass AVE_U_D_ENC : MSA_3R_FMT<0b101, 0b11, 0b010000>; 4430b57cec5SDimitry Andric 4440b57cec5SDimitry Andricclass AVER_S_B_ENC : MSA_3R_FMT<0b110, 0b00, 0b010000>; 4450b57cec5SDimitry Andricclass AVER_S_H_ENC : MSA_3R_FMT<0b110, 0b01, 0b010000>; 4460b57cec5SDimitry Andricclass AVER_S_W_ENC : MSA_3R_FMT<0b110, 0b10, 0b010000>; 4470b57cec5SDimitry Andricclass AVER_S_D_ENC : MSA_3R_FMT<0b110, 0b11, 0b010000>; 4480b57cec5SDimitry Andric 4490b57cec5SDimitry Andricclass AVER_U_B_ENC : MSA_3R_FMT<0b111, 0b00, 0b010000>; 4500b57cec5SDimitry Andricclass AVER_U_H_ENC : MSA_3R_FMT<0b111, 0b01, 0b010000>; 4510b57cec5SDimitry Andricclass AVER_U_W_ENC : MSA_3R_FMT<0b111, 0b10, 0b010000>; 4520b57cec5SDimitry Andricclass AVER_U_D_ENC : MSA_3R_FMT<0b111, 0b11, 0b010000>; 4530b57cec5SDimitry Andric 4540b57cec5SDimitry Andricclass BCLR_B_ENC : MSA_3R_FMT<0b011, 0b00, 0b001101>; 4550b57cec5SDimitry Andricclass BCLR_H_ENC : MSA_3R_FMT<0b011, 0b01, 0b001101>; 4560b57cec5SDimitry Andricclass BCLR_W_ENC : MSA_3R_FMT<0b011, 0b10, 0b001101>; 4570b57cec5SDimitry Andricclass BCLR_D_ENC : MSA_3R_FMT<0b011, 0b11, 0b001101>; 4580b57cec5SDimitry Andric 4590b57cec5SDimitry Andricclass BCLRI_B_ENC : MSA_BIT_B_FMT<0b011, 0b001001>; 4600b57cec5SDimitry Andricclass BCLRI_H_ENC : MSA_BIT_H_FMT<0b011, 0b001001>; 4610b57cec5SDimitry Andricclass BCLRI_W_ENC : MSA_BIT_W_FMT<0b011, 0b001001>; 4620b57cec5SDimitry Andricclass BCLRI_D_ENC : MSA_BIT_D_FMT<0b011, 0b001001>; 4630b57cec5SDimitry Andric 4640b57cec5SDimitry Andricclass BINSL_B_ENC : MSA_3R_FMT<0b110, 0b00, 0b001101>; 4650b57cec5SDimitry Andricclass BINSL_H_ENC : MSA_3R_FMT<0b110, 0b01, 0b001101>; 4660b57cec5SDimitry Andricclass BINSL_W_ENC : MSA_3R_FMT<0b110, 0b10, 0b001101>; 4670b57cec5SDimitry Andricclass BINSL_D_ENC : MSA_3R_FMT<0b110, 0b11, 0b001101>; 4680b57cec5SDimitry Andric 4690b57cec5SDimitry Andricclass BINSLI_B_ENC : MSA_BIT_B_FMT<0b110, 0b001001>; 4700b57cec5SDimitry Andricclass BINSLI_H_ENC : MSA_BIT_H_FMT<0b110, 0b001001>; 4710b57cec5SDimitry Andricclass BINSLI_W_ENC : MSA_BIT_W_FMT<0b110, 0b001001>; 4720b57cec5SDimitry Andricclass BINSLI_D_ENC : MSA_BIT_D_FMT<0b110, 0b001001>; 4730b57cec5SDimitry Andric 4740b57cec5SDimitry Andricclass BINSR_B_ENC : MSA_3R_FMT<0b111, 0b00, 0b001101>; 4750b57cec5SDimitry Andricclass BINSR_H_ENC : MSA_3R_FMT<0b111, 0b01, 0b001101>; 4760b57cec5SDimitry Andricclass BINSR_W_ENC : MSA_3R_FMT<0b111, 0b10, 0b001101>; 4770b57cec5SDimitry Andricclass BINSR_D_ENC : MSA_3R_FMT<0b111, 0b11, 0b001101>; 4780b57cec5SDimitry Andric 4790b57cec5SDimitry Andricclass BINSRI_B_ENC : MSA_BIT_B_FMT<0b111, 0b001001>; 4800b57cec5SDimitry Andricclass BINSRI_H_ENC : MSA_BIT_H_FMT<0b111, 0b001001>; 4810b57cec5SDimitry Andricclass BINSRI_W_ENC : MSA_BIT_W_FMT<0b111, 0b001001>; 4820b57cec5SDimitry Andricclass BINSRI_D_ENC : MSA_BIT_D_FMT<0b111, 0b001001>; 4830b57cec5SDimitry Andric 4840b57cec5SDimitry Andricclass BMNZ_V_ENC : MSA_VEC_FMT<0b00100, 0b011110>; 4850b57cec5SDimitry Andric 4860b57cec5SDimitry Andricclass BMNZI_B_ENC : MSA_I8_FMT<0b00, 0b000001>; 4870b57cec5SDimitry Andric 4880b57cec5SDimitry Andricclass BMZ_V_ENC : MSA_VEC_FMT<0b00101, 0b011110>; 4890b57cec5SDimitry Andric 4900b57cec5SDimitry Andricclass BMZI_B_ENC : MSA_I8_FMT<0b01, 0b000001>; 4910b57cec5SDimitry Andric 4920b57cec5SDimitry Andricclass BNEG_B_ENC : MSA_3R_FMT<0b101, 0b00, 0b001101>; 4930b57cec5SDimitry Andricclass BNEG_H_ENC : MSA_3R_FMT<0b101, 0b01, 0b001101>; 4940b57cec5SDimitry Andricclass BNEG_W_ENC : MSA_3R_FMT<0b101, 0b10, 0b001101>; 4950b57cec5SDimitry Andricclass BNEG_D_ENC : MSA_3R_FMT<0b101, 0b11, 0b001101>; 4960b57cec5SDimitry Andric 4970b57cec5SDimitry Andricclass BNEGI_B_ENC : MSA_BIT_B_FMT<0b101, 0b001001>; 4980b57cec5SDimitry Andricclass BNEGI_H_ENC : MSA_BIT_H_FMT<0b101, 0b001001>; 4990b57cec5SDimitry Andricclass BNEGI_W_ENC : MSA_BIT_W_FMT<0b101, 0b001001>; 5000b57cec5SDimitry Andricclass BNEGI_D_ENC : MSA_BIT_D_FMT<0b101, 0b001001>; 5010b57cec5SDimitry Andric 5020b57cec5SDimitry Andricclass BNZ_B_ENC : MSA_CBRANCH_FMT<0b111, 0b00>; 5030b57cec5SDimitry Andricclass BNZ_H_ENC : MSA_CBRANCH_FMT<0b111, 0b01>; 5040b57cec5SDimitry Andricclass BNZ_W_ENC : MSA_CBRANCH_FMT<0b111, 0b10>; 5050b57cec5SDimitry Andricclass BNZ_D_ENC : MSA_CBRANCH_FMT<0b111, 0b11>; 5060b57cec5SDimitry Andric 5070b57cec5SDimitry Andricclass BNZ_V_ENC : MSA_CBRANCH_V_FMT<0b01111>; 5080b57cec5SDimitry Andric 5090b57cec5SDimitry Andricclass BSEL_V_ENC : MSA_VEC_FMT<0b00110, 0b011110>; 5100b57cec5SDimitry Andric 5110b57cec5SDimitry Andricclass BSELI_B_ENC : MSA_I8_FMT<0b10, 0b000001>; 5120b57cec5SDimitry Andric 5130b57cec5SDimitry Andricclass BSET_B_ENC : MSA_3R_FMT<0b100, 0b00, 0b001101>; 5140b57cec5SDimitry Andricclass BSET_H_ENC : MSA_3R_FMT<0b100, 0b01, 0b001101>; 5150b57cec5SDimitry Andricclass BSET_W_ENC : MSA_3R_FMT<0b100, 0b10, 0b001101>; 5160b57cec5SDimitry Andricclass BSET_D_ENC : MSA_3R_FMT<0b100, 0b11, 0b001101>; 5170b57cec5SDimitry Andric 5180b57cec5SDimitry Andricclass BSETI_B_ENC : MSA_BIT_B_FMT<0b100, 0b001001>; 5190b57cec5SDimitry Andricclass BSETI_H_ENC : MSA_BIT_H_FMT<0b100, 0b001001>; 5200b57cec5SDimitry Andricclass BSETI_W_ENC : MSA_BIT_W_FMT<0b100, 0b001001>; 5210b57cec5SDimitry Andricclass BSETI_D_ENC : MSA_BIT_D_FMT<0b100, 0b001001>; 5220b57cec5SDimitry Andric 5230b57cec5SDimitry Andricclass BZ_B_ENC : MSA_CBRANCH_FMT<0b110, 0b00>; 5240b57cec5SDimitry Andricclass BZ_H_ENC : MSA_CBRANCH_FMT<0b110, 0b01>; 5250b57cec5SDimitry Andricclass BZ_W_ENC : MSA_CBRANCH_FMT<0b110, 0b10>; 5260b57cec5SDimitry Andricclass BZ_D_ENC : MSA_CBRANCH_FMT<0b110, 0b11>; 5270b57cec5SDimitry Andric 5280b57cec5SDimitry Andricclass BZ_V_ENC : MSA_CBRANCH_V_FMT<0b01011>; 5290b57cec5SDimitry Andric 5300b57cec5SDimitry Andricclass CEQ_B_ENC : MSA_3R_FMT<0b000, 0b00, 0b001111>; 5310b57cec5SDimitry Andricclass CEQ_H_ENC : MSA_3R_FMT<0b000, 0b01, 0b001111>; 5320b57cec5SDimitry Andricclass CEQ_W_ENC : MSA_3R_FMT<0b000, 0b10, 0b001111>; 5330b57cec5SDimitry Andricclass CEQ_D_ENC : MSA_3R_FMT<0b000, 0b11, 0b001111>; 5340b57cec5SDimitry Andric 5350b57cec5SDimitry Andricclass CEQI_B_ENC : MSA_I5_FMT<0b000, 0b00, 0b000111>; 5360b57cec5SDimitry Andricclass CEQI_H_ENC : MSA_I5_FMT<0b000, 0b01, 0b000111>; 5370b57cec5SDimitry Andricclass CEQI_W_ENC : MSA_I5_FMT<0b000, 0b10, 0b000111>; 5380b57cec5SDimitry Andricclass CEQI_D_ENC : MSA_I5_FMT<0b000, 0b11, 0b000111>; 5390b57cec5SDimitry Andric 5400b57cec5SDimitry Andricclass CFCMSA_ENC : MSA_ELM_CFCMSA_FMT<0b0001111110, 0b011001>; 5410b57cec5SDimitry Andric 5420b57cec5SDimitry Andricclass CLE_S_B_ENC : MSA_3R_FMT<0b100, 0b00, 0b001111>; 5430b57cec5SDimitry Andricclass CLE_S_H_ENC : MSA_3R_FMT<0b100, 0b01, 0b001111>; 5440b57cec5SDimitry Andricclass CLE_S_W_ENC : MSA_3R_FMT<0b100, 0b10, 0b001111>; 5450b57cec5SDimitry Andricclass CLE_S_D_ENC : MSA_3R_FMT<0b100, 0b11, 0b001111>; 5460b57cec5SDimitry Andric 5470b57cec5SDimitry Andricclass CLE_U_B_ENC : MSA_3R_FMT<0b101, 0b00, 0b001111>; 5480b57cec5SDimitry Andricclass CLE_U_H_ENC : MSA_3R_FMT<0b101, 0b01, 0b001111>; 5490b57cec5SDimitry Andricclass CLE_U_W_ENC : MSA_3R_FMT<0b101, 0b10, 0b001111>; 5500b57cec5SDimitry Andricclass CLE_U_D_ENC : MSA_3R_FMT<0b101, 0b11, 0b001111>; 5510b57cec5SDimitry Andric 5520b57cec5SDimitry Andricclass CLEI_S_B_ENC : MSA_I5_FMT<0b100, 0b00, 0b000111>; 5530b57cec5SDimitry Andricclass CLEI_S_H_ENC : MSA_I5_FMT<0b100, 0b01, 0b000111>; 5540b57cec5SDimitry Andricclass CLEI_S_W_ENC : MSA_I5_FMT<0b100, 0b10, 0b000111>; 5550b57cec5SDimitry Andricclass CLEI_S_D_ENC : MSA_I5_FMT<0b100, 0b11, 0b000111>; 5560b57cec5SDimitry Andric 5570b57cec5SDimitry Andricclass CLEI_U_B_ENC : MSA_I5_FMT<0b101, 0b00, 0b000111>; 5580b57cec5SDimitry Andricclass CLEI_U_H_ENC : MSA_I5_FMT<0b101, 0b01, 0b000111>; 5590b57cec5SDimitry Andricclass CLEI_U_W_ENC : MSA_I5_FMT<0b101, 0b10, 0b000111>; 5600b57cec5SDimitry Andricclass CLEI_U_D_ENC : MSA_I5_FMT<0b101, 0b11, 0b000111>; 5610b57cec5SDimitry Andric 5620b57cec5SDimitry Andricclass CLT_S_B_ENC : MSA_3R_FMT<0b010, 0b00, 0b001111>; 5630b57cec5SDimitry Andricclass CLT_S_H_ENC : MSA_3R_FMT<0b010, 0b01, 0b001111>; 5640b57cec5SDimitry Andricclass CLT_S_W_ENC : MSA_3R_FMT<0b010, 0b10, 0b001111>; 5650b57cec5SDimitry Andricclass CLT_S_D_ENC : MSA_3R_FMT<0b010, 0b11, 0b001111>; 5660b57cec5SDimitry Andric 5670b57cec5SDimitry Andricclass CLT_U_B_ENC : MSA_3R_FMT<0b011, 0b00, 0b001111>; 5680b57cec5SDimitry Andricclass CLT_U_H_ENC : MSA_3R_FMT<0b011, 0b01, 0b001111>; 5690b57cec5SDimitry Andricclass CLT_U_W_ENC : MSA_3R_FMT<0b011, 0b10, 0b001111>; 5700b57cec5SDimitry Andricclass CLT_U_D_ENC : MSA_3R_FMT<0b011, 0b11, 0b001111>; 5710b57cec5SDimitry Andric 5720b57cec5SDimitry Andricclass CLTI_S_B_ENC : MSA_I5_FMT<0b010, 0b00, 0b000111>; 5730b57cec5SDimitry Andricclass CLTI_S_H_ENC : MSA_I5_FMT<0b010, 0b01, 0b000111>; 5740b57cec5SDimitry Andricclass CLTI_S_W_ENC : MSA_I5_FMT<0b010, 0b10, 0b000111>; 5750b57cec5SDimitry Andricclass CLTI_S_D_ENC : MSA_I5_FMT<0b010, 0b11, 0b000111>; 5760b57cec5SDimitry Andric 5770b57cec5SDimitry Andricclass CLTI_U_B_ENC : MSA_I5_FMT<0b011, 0b00, 0b000111>; 5780b57cec5SDimitry Andricclass CLTI_U_H_ENC : MSA_I5_FMT<0b011, 0b01, 0b000111>; 5790b57cec5SDimitry Andricclass CLTI_U_W_ENC : MSA_I5_FMT<0b011, 0b10, 0b000111>; 5800b57cec5SDimitry Andricclass CLTI_U_D_ENC : MSA_I5_FMT<0b011, 0b11, 0b000111>; 5810b57cec5SDimitry Andric 5820b57cec5SDimitry Andricclass COPY_S_B_ENC : MSA_ELM_COPY_B_FMT<0b0010, 0b011001>; 5830b57cec5SDimitry Andricclass COPY_S_H_ENC : MSA_ELM_COPY_H_FMT<0b0010, 0b011001>; 5840b57cec5SDimitry Andricclass COPY_S_W_ENC : MSA_ELM_COPY_W_FMT<0b0010, 0b011001>; 5850b57cec5SDimitry Andricclass COPY_S_D_ENC : MSA_ELM_COPY_D_FMT<0b0010, 0b011001>; 5860b57cec5SDimitry Andric 5870b57cec5SDimitry Andricclass COPY_U_B_ENC : MSA_ELM_COPY_B_FMT<0b0011, 0b011001>; 5880b57cec5SDimitry Andricclass COPY_U_H_ENC : MSA_ELM_COPY_H_FMT<0b0011, 0b011001>; 5890b57cec5SDimitry Andricclass COPY_U_W_ENC : MSA_ELM_COPY_W_FMT<0b0011, 0b011001>; 5900b57cec5SDimitry Andric 5910b57cec5SDimitry Andricclass CTCMSA_ENC : MSA_ELM_CTCMSA_FMT<0b0000111110, 0b011001>; 5920b57cec5SDimitry Andric 5930b57cec5SDimitry Andricclass DIV_S_B_ENC : MSA_3R_FMT<0b100, 0b00, 0b010010>; 5940b57cec5SDimitry Andricclass DIV_S_H_ENC : MSA_3R_FMT<0b100, 0b01, 0b010010>; 5950b57cec5SDimitry Andricclass DIV_S_W_ENC : MSA_3R_FMT<0b100, 0b10, 0b010010>; 5960b57cec5SDimitry Andricclass DIV_S_D_ENC : MSA_3R_FMT<0b100, 0b11, 0b010010>; 5970b57cec5SDimitry Andric 5980b57cec5SDimitry Andricclass DIV_U_B_ENC : MSA_3R_FMT<0b101, 0b00, 0b010010>; 5990b57cec5SDimitry Andricclass DIV_U_H_ENC : MSA_3R_FMT<0b101, 0b01, 0b010010>; 6000b57cec5SDimitry Andricclass DIV_U_W_ENC : MSA_3R_FMT<0b101, 0b10, 0b010010>; 6010b57cec5SDimitry Andricclass DIV_U_D_ENC : MSA_3R_FMT<0b101, 0b11, 0b010010>; 6020b57cec5SDimitry Andric 6030b57cec5SDimitry Andricclass DOTP_S_H_ENC : MSA_3R_FMT<0b000, 0b01, 0b010011>; 6040b57cec5SDimitry Andricclass DOTP_S_W_ENC : MSA_3R_FMT<0b000, 0b10, 0b010011>; 6050b57cec5SDimitry Andricclass DOTP_S_D_ENC : MSA_3R_FMT<0b000, 0b11, 0b010011>; 6060b57cec5SDimitry Andric 6070b57cec5SDimitry Andricclass DOTP_U_H_ENC : MSA_3R_FMT<0b001, 0b01, 0b010011>; 6080b57cec5SDimitry Andricclass DOTP_U_W_ENC : MSA_3R_FMT<0b001, 0b10, 0b010011>; 6090b57cec5SDimitry Andricclass DOTP_U_D_ENC : MSA_3R_FMT<0b001, 0b11, 0b010011>; 6100b57cec5SDimitry Andric 6110b57cec5SDimitry Andricclass DPADD_S_H_ENC : MSA_3R_FMT<0b010, 0b01, 0b010011>; 6120b57cec5SDimitry Andricclass DPADD_S_W_ENC : MSA_3R_FMT<0b010, 0b10, 0b010011>; 6130b57cec5SDimitry Andricclass DPADD_S_D_ENC : MSA_3R_FMT<0b010, 0b11, 0b010011>; 6140b57cec5SDimitry Andric 6150b57cec5SDimitry Andricclass DPADD_U_H_ENC : MSA_3R_FMT<0b011, 0b01, 0b010011>; 6160b57cec5SDimitry Andricclass DPADD_U_W_ENC : MSA_3R_FMT<0b011, 0b10, 0b010011>; 6170b57cec5SDimitry Andricclass DPADD_U_D_ENC : MSA_3R_FMT<0b011, 0b11, 0b010011>; 6180b57cec5SDimitry Andric 6190b57cec5SDimitry Andricclass DPSUB_S_H_ENC : MSA_3R_FMT<0b100, 0b01, 0b010011>; 6200b57cec5SDimitry Andricclass DPSUB_S_W_ENC : MSA_3R_FMT<0b100, 0b10, 0b010011>; 6210b57cec5SDimitry Andricclass DPSUB_S_D_ENC : MSA_3R_FMT<0b100, 0b11, 0b010011>; 6220b57cec5SDimitry Andric 6230b57cec5SDimitry Andricclass DPSUB_U_H_ENC : MSA_3R_FMT<0b101, 0b01, 0b010011>; 6240b57cec5SDimitry Andricclass DPSUB_U_W_ENC : MSA_3R_FMT<0b101, 0b10, 0b010011>; 6250b57cec5SDimitry Andricclass DPSUB_U_D_ENC : MSA_3R_FMT<0b101, 0b11, 0b010011>; 6260b57cec5SDimitry Andric 6270b57cec5SDimitry Andricclass FADD_W_ENC : MSA_3RF_FMT<0b0000, 0b0, 0b011011>; 6280b57cec5SDimitry Andricclass FADD_D_ENC : MSA_3RF_FMT<0b0000, 0b1, 0b011011>; 6290b57cec5SDimitry Andric 6300b57cec5SDimitry Andricclass FCAF_W_ENC : MSA_3RF_FMT<0b0000, 0b0, 0b011010>; 6310b57cec5SDimitry Andricclass FCAF_D_ENC : MSA_3RF_FMT<0b0000, 0b1, 0b011010>; 6320b57cec5SDimitry Andric 6330b57cec5SDimitry Andricclass FCEQ_W_ENC : MSA_3RF_FMT<0b0010, 0b0, 0b011010>; 6340b57cec5SDimitry Andricclass FCEQ_D_ENC : MSA_3RF_FMT<0b0010, 0b1, 0b011010>; 6350b57cec5SDimitry Andric 6360b57cec5SDimitry Andricclass FCLASS_W_ENC : MSA_2RF_FMT<0b110010000, 0b0, 0b011110>; 6370b57cec5SDimitry Andricclass FCLASS_D_ENC : MSA_2RF_FMT<0b110010000, 0b1, 0b011110>; 6380b57cec5SDimitry Andric 6390b57cec5SDimitry Andricclass FCLE_W_ENC : MSA_3RF_FMT<0b0110, 0b0, 0b011010>; 6400b57cec5SDimitry Andricclass FCLE_D_ENC : MSA_3RF_FMT<0b0110, 0b1, 0b011010>; 6410b57cec5SDimitry Andric 6420b57cec5SDimitry Andricclass FCLT_W_ENC : MSA_3RF_FMT<0b0100, 0b0, 0b011010>; 6430b57cec5SDimitry Andricclass FCLT_D_ENC : MSA_3RF_FMT<0b0100, 0b1, 0b011010>; 6440b57cec5SDimitry Andric 6450b57cec5SDimitry Andricclass FCNE_W_ENC : MSA_3RF_FMT<0b0011, 0b0, 0b011100>; 6460b57cec5SDimitry Andricclass FCNE_D_ENC : MSA_3RF_FMT<0b0011, 0b1, 0b011100>; 6470b57cec5SDimitry Andric 6480b57cec5SDimitry Andricclass FCOR_W_ENC : MSA_3RF_FMT<0b0001, 0b0, 0b011100>; 6490b57cec5SDimitry Andricclass FCOR_D_ENC : MSA_3RF_FMT<0b0001, 0b1, 0b011100>; 6500b57cec5SDimitry Andric 6510b57cec5SDimitry Andricclass FCUEQ_W_ENC : MSA_3RF_FMT<0b0011, 0b0, 0b011010>; 6520b57cec5SDimitry Andricclass FCUEQ_D_ENC : MSA_3RF_FMT<0b0011, 0b1, 0b011010>; 6530b57cec5SDimitry Andric 6540b57cec5SDimitry Andricclass FCULE_W_ENC : MSA_3RF_FMT<0b0111, 0b0, 0b011010>; 6550b57cec5SDimitry Andricclass FCULE_D_ENC : MSA_3RF_FMT<0b0111, 0b1, 0b011010>; 6560b57cec5SDimitry Andric 6570b57cec5SDimitry Andricclass FCULT_W_ENC : MSA_3RF_FMT<0b0101, 0b0, 0b011010>; 6580b57cec5SDimitry Andricclass FCULT_D_ENC : MSA_3RF_FMT<0b0101, 0b1, 0b011010>; 6590b57cec5SDimitry Andric 6600b57cec5SDimitry Andricclass FCUN_W_ENC : MSA_3RF_FMT<0b0001, 0b0, 0b011010>; 6610b57cec5SDimitry Andricclass FCUN_D_ENC : MSA_3RF_FMT<0b0001, 0b1, 0b011010>; 6620b57cec5SDimitry Andric 6630b57cec5SDimitry Andricclass FCUNE_W_ENC : MSA_3RF_FMT<0b0010, 0b0, 0b011100>; 6640b57cec5SDimitry Andricclass FCUNE_D_ENC : MSA_3RF_FMT<0b0010, 0b1, 0b011100>; 6650b57cec5SDimitry Andric 6660b57cec5SDimitry Andricclass FDIV_W_ENC : MSA_3RF_FMT<0b0011, 0b0, 0b011011>; 6670b57cec5SDimitry Andricclass FDIV_D_ENC : MSA_3RF_FMT<0b0011, 0b1, 0b011011>; 6680b57cec5SDimitry Andric 6690b57cec5SDimitry Andricclass FEXDO_H_ENC : MSA_3RF_FMT<0b1000, 0b0, 0b011011>; 6700b57cec5SDimitry Andricclass FEXDO_W_ENC : MSA_3RF_FMT<0b1000, 0b1, 0b011011>; 6710b57cec5SDimitry Andric 6720b57cec5SDimitry Andricclass FEXP2_W_ENC : MSA_3RF_FMT<0b0111, 0b0, 0b011011>; 6730b57cec5SDimitry Andricclass FEXP2_D_ENC : MSA_3RF_FMT<0b0111, 0b1, 0b011011>; 6740b57cec5SDimitry Andric 6750b57cec5SDimitry Andricclass FEXUPL_W_ENC : MSA_2RF_FMT<0b110011000, 0b0, 0b011110>; 6760b57cec5SDimitry Andricclass FEXUPL_D_ENC : MSA_2RF_FMT<0b110011000, 0b1, 0b011110>; 6770b57cec5SDimitry Andric 6780b57cec5SDimitry Andricclass FEXUPR_W_ENC : MSA_2RF_FMT<0b110011001, 0b0, 0b011110>; 6790b57cec5SDimitry Andricclass FEXUPR_D_ENC : MSA_2RF_FMT<0b110011001, 0b1, 0b011110>; 6800b57cec5SDimitry Andric 6810b57cec5SDimitry Andricclass FFINT_S_W_ENC : MSA_2RF_FMT<0b110011110, 0b0, 0b011110>; 6820b57cec5SDimitry Andricclass FFINT_S_D_ENC : MSA_2RF_FMT<0b110011110, 0b1, 0b011110>; 6830b57cec5SDimitry Andric 6840b57cec5SDimitry Andricclass FFINT_U_W_ENC : MSA_2RF_FMT<0b110011111, 0b0, 0b011110>; 6850b57cec5SDimitry Andricclass FFINT_U_D_ENC : MSA_2RF_FMT<0b110011111, 0b1, 0b011110>; 6860b57cec5SDimitry Andric 6870b57cec5SDimitry Andricclass FFQL_W_ENC : MSA_2RF_FMT<0b110011010, 0b0, 0b011110>; 6880b57cec5SDimitry Andricclass FFQL_D_ENC : MSA_2RF_FMT<0b110011010, 0b1, 0b011110>; 6890b57cec5SDimitry Andric 6900b57cec5SDimitry Andricclass FFQR_W_ENC : MSA_2RF_FMT<0b110011011, 0b0, 0b011110>; 6910b57cec5SDimitry Andricclass FFQR_D_ENC : MSA_2RF_FMT<0b110011011, 0b1, 0b011110>; 6920b57cec5SDimitry Andric 6930b57cec5SDimitry Andricclass FILL_B_ENC : MSA_2R_FILL_FMT<0b11000000, 0b00, 0b011110>; 6940b57cec5SDimitry Andricclass FILL_H_ENC : MSA_2R_FILL_FMT<0b11000000, 0b01, 0b011110>; 6950b57cec5SDimitry Andricclass FILL_W_ENC : MSA_2R_FILL_FMT<0b11000000, 0b10, 0b011110>; 6960b57cec5SDimitry Andricclass FILL_D_ENC : MSA_2R_FILL_D_FMT<0b11000000, 0b11, 0b011110>; 6970b57cec5SDimitry Andric 6980b57cec5SDimitry Andricclass FLOG2_W_ENC : MSA_2RF_FMT<0b110010111, 0b0, 0b011110>; 6990b57cec5SDimitry Andricclass FLOG2_D_ENC : MSA_2RF_FMT<0b110010111, 0b1, 0b011110>; 7000b57cec5SDimitry Andric 7010b57cec5SDimitry Andricclass FMADD_W_ENC : MSA_3RF_FMT<0b0100, 0b0, 0b011011>; 7020b57cec5SDimitry Andricclass FMADD_D_ENC : MSA_3RF_FMT<0b0100, 0b1, 0b011011>; 7030b57cec5SDimitry Andric 7040b57cec5SDimitry Andricclass FMAX_W_ENC : MSA_3RF_FMT<0b1110, 0b0, 0b011011>; 7050b57cec5SDimitry Andricclass FMAX_D_ENC : MSA_3RF_FMT<0b1110, 0b1, 0b011011>; 7060b57cec5SDimitry Andric 7070b57cec5SDimitry Andricclass FMAX_A_W_ENC : MSA_3RF_FMT<0b1111, 0b0, 0b011011>; 7080b57cec5SDimitry Andricclass FMAX_A_D_ENC : MSA_3RF_FMT<0b1111, 0b1, 0b011011>; 7090b57cec5SDimitry Andric 7100b57cec5SDimitry Andricclass FMIN_W_ENC : MSA_3RF_FMT<0b1100, 0b0, 0b011011>; 7110b57cec5SDimitry Andricclass FMIN_D_ENC : MSA_3RF_FMT<0b1100, 0b1, 0b011011>; 7120b57cec5SDimitry Andric 7130b57cec5SDimitry Andricclass FMIN_A_W_ENC : MSA_3RF_FMT<0b1101, 0b0, 0b011011>; 7140b57cec5SDimitry Andricclass FMIN_A_D_ENC : MSA_3RF_FMT<0b1101, 0b1, 0b011011>; 7150b57cec5SDimitry Andric 7160b57cec5SDimitry Andricclass FMSUB_W_ENC : MSA_3RF_FMT<0b0101, 0b0, 0b011011>; 7170b57cec5SDimitry Andricclass FMSUB_D_ENC : MSA_3RF_FMT<0b0101, 0b1, 0b011011>; 7180b57cec5SDimitry Andric 7190b57cec5SDimitry Andricclass FMUL_W_ENC : MSA_3RF_FMT<0b0010, 0b0, 0b011011>; 7200b57cec5SDimitry Andricclass FMUL_D_ENC : MSA_3RF_FMT<0b0010, 0b1, 0b011011>; 7210b57cec5SDimitry Andric 7220b57cec5SDimitry Andricclass FRINT_W_ENC : MSA_2RF_FMT<0b110010110, 0b0, 0b011110>; 7230b57cec5SDimitry Andricclass FRINT_D_ENC : MSA_2RF_FMT<0b110010110, 0b1, 0b011110>; 7240b57cec5SDimitry Andric 7250b57cec5SDimitry Andricclass FRCP_W_ENC : MSA_2RF_FMT<0b110010101, 0b0, 0b011110>; 7260b57cec5SDimitry Andricclass FRCP_D_ENC : MSA_2RF_FMT<0b110010101, 0b1, 0b011110>; 7270b57cec5SDimitry Andric 7280b57cec5SDimitry Andricclass FRSQRT_W_ENC : MSA_2RF_FMT<0b110010100, 0b0, 0b011110>; 7290b57cec5SDimitry Andricclass FRSQRT_D_ENC : MSA_2RF_FMT<0b110010100, 0b1, 0b011110>; 7300b57cec5SDimitry Andric 7310b57cec5SDimitry Andricclass FSAF_W_ENC : MSA_3RF_FMT<0b1000, 0b0, 0b011010>; 7320b57cec5SDimitry Andricclass FSAF_D_ENC : MSA_3RF_FMT<0b1000, 0b1, 0b011010>; 7330b57cec5SDimitry Andric 7340b57cec5SDimitry Andricclass FSEQ_W_ENC : MSA_3RF_FMT<0b1010, 0b0, 0b011010>; 7350b57cec5SDimitry Andricclass FSEQ_D_ENC : MSA_3RF_FMT<0b1010, 0b1, 0b011010>; 7360b57cec5SDimitry Andric 7370b57cec5SDimitry Andricclass FSLE_W_ENC : MSA_3RF_FMT<0b1110, 0b0, 0b011010>; 7380b57cec5SDimitry Andricclass FSLE_D_ENC : MSA_3RF_FMT<0b1110, 0b1, 0b011010>; 7390b57cec5SDimitry Andric 7400b57cec5SDimitry Andricclass FSLT_W_ENC : MSA_3RF_FMT<0b1100, 0b0, 0b011010>; 7410b57cec5SDimitry Andricclass FSLT_D_ENC : MSA_3RF_FMT<0b1100, 0b1, 0b011010>; 7420b57cec5SDimitry Andric 7430b57cec5SDimitry Andricclass FSNE_W_ENC : MSA_3RF_FMT<0b1011, 0b0, 0b011100>; 7440b57cec5SDimitry Andricclass FSNE_D_ENC : MSA_3RF_FMT<0b1011, 0b1, 0b011100>; 7450b57cec5SDimitry Andric 7460b57cec5SDimitry Andricclass FSOR_W_ENC : MSA_3RF_FMT<0b1001, 0b0, 0b011100>; 7470b57cec5SDimitry Andricclass FSOR_D_ENC : MSA_3RF_FMT<0b1001, 0b1, 0b011100>; 7480b57cec5SDimitry Andric 7490b57cec5SDimitry Andricclass FSQRT_W_ENC : MSA_2RF_FMT<0b110010011, 0b0, 0b011110>; 7500b57cec5SDimitry Andricclass FSQRT_D_ENC : MSA_2RF_FMT<0b110010011, 0b1, 0b011110>; 7510b57cec5SDimitry Andric 7520b57cec5SDimitry Andricclass FSUB_W_ENC : MSA_3RF_FMT<0b0001, 0b0, 0b011011>; 7530b57cec5SDimitry Andricclass FSUB_D_ENC : MSA_3RF_FMT<0b0001, 0b1, 0b011011>; 7540b57cec5SDimitry Andric 7550b57cec5SDimitry Andricclass FSUEQ_W_ENC : MSA_3RF_FMT<0b1011, 0b0, 0b011010>; 7560b57cec5SDimitry Andricclass FSUEQ_D_ENC : MSA_3RF_FMT<0b1011, 0b1, 0b011010>; 7570b57cec5SDimitry Andric 7580b57cec5SDimitry Andricclass FSULE_W_ENC : MSA_3RF_FMT<0b1111, 0b0, 0b011010>; 7590b57cec5SDimitry Andricclass FSULE_D_ENC : MSA_3RF_FMT<0b1111, 0b1, 0b011010>; 7600b57cec5SDimitry Andric 7610b57cec5SDimitry Andricclass FSULT_W_ENC : MSA_3RF_FMT<0b1101, 0b0, 0b011010>; 7620b57cec5SDimitry Andricclass FSULT_D_ENC : MSA_3RF_FMT<0b1101, 0b1, 0b011010>; 7630b57cec5SDimitry Andric 7640b57cec5SDimitry Andricclass FSUN_W_ENC : MSA_3RF_FMT<0b1001, 0b0, 0b011010>; 7650b57cec5SDimitry Andricclass FSUN_D_ENC : MSA_3RF_FMT<0b1001, 0b1, 0b011010>; 7660b57cec5SDimitry Andric 7670b57cec5SDimitry Andricclass FSUNE_W_ENC : MSA_3RF_FMT<0b1010, 0b0, 0b011100>; 7680b57cec5SDimitry Andricclass FSUNE_D_ENC : MSA_3RF_FMT<0b1010, 0b1, 0b011100>; 7690b57cec5SDimitry Andric 7700b57cec5SDimitry Andricclass FTINT_S_W_ENC : MSA_2RF_FMT<0b110011100, 0b0, 0b011110>; 7710b57cec5SDimitry Andricclass FTINT_S_D_ENC : MSA_2RF_FMT<0b110011100, 0b1, 0b011110>; 7720b57cec5SDimitry Andric 7730b57cec5SDimitry Andricclass FTINT_U_W_ENC : MSA_2RF_FMT<0b110011101, 0b0, 0b011110>; 7740b57cec5SDimitry Andricclass FTINT_U_D_ENC : MSA_2RF_FMT<0b110011101, 0b1, 0b011110>; 7750b57cec5SDimitry Andric 7760b57cec5SDimitry Andricclass FTQ_H_ENC : MSA_3RF_FMT<0b1010, 0b0, 0b011011>; 7770b57cec5SDimitry Andricclass FTQ_W_ENC : MSA_3RF_FMT<0b1010, 0b1, 0b011011>; 7780b57cec5SDimitry Andric 7790b57cec5SDimitry Andricclass FTRUNC_S_W_ENC : MSA_2RF_FMT<0b110010001, 0b0, 0b011110>; 7800b57cec5SDimitry Andricclass FTRUNC_S_D_ENC : MSA_2RF_FMT<0b110010001, 0b1, 0b011110>; 7810b57cec5SDimitry Andric 7820b57cec5SDimitry Andricclass FTRUNC_U_W_ENC : MSA_2RF_FMT<0b110010010, 0b0, 0b011110>; 7830b57cec5SDimitry Andricclass FTRUNC_U_D_ENC : MSA_2RF_FMT<0b110010010, 0b1, 0b011110>; 7840b57cec5SDimitry Andric 7850b57cec5SDimitry Andricclass HADD_S_H_ENC : MSA_3R_FMT<0b100, 0b01, 0b010101>; 7860b57cec5SDimitry Andricclass HADD_S_W_ENC : MSA_3R_FMT<0b100, 0b10, 0b010101>; 7870b57cec5SDimitry Andricclass HADD_S_D_ENC : MSA_3R_FMT<0b100, 0b11, 0b010101>; 7880b57cec5SDimitry Andric 7890b57cec5SDimitry Andricclass HADD_U_H_ENC : MSA_3R_FMT<0b101, 0b01, 0b010101>; 7900b57cec5SDimitry Andricclass HADD_U_W_ENC : MSA_3R_FMT<0b101, 0b10, 0b010101>; 7910b57cec5SDimitry Andricclass HADD_U_D_ENC : MSA_3R_FMT<0b101, 0b11, 0b010101>; 7920b57cec5SDimitry Andric 7930b57cec5SDimitry Andricclass HSUB_S_H_ENC : MSA_3R_FMT<0b110, 0b01, 0b010101>; 7940b57cec5SDimitry Andricclass HSUB_S_W_ENC : MSA_3R_FMT<0b110, 0b10, 0b010101>; 7950b57cec5SDimitry Andricclass HSUB_S_D_ENC : MSA_3R_FMT<0b110, 0b11, 0b010101>; 7960b57cec5SDimitry Andric 7970b57cec5SDimitry Andricclass HSUB_U_H_ENC : MSA_3R_FMT<0b111, 0b01, 0b010101>; 7980b57cec5SDimitry Andricclass HSUB_U_W_ENC : MSA_3R_FMT<0b111, 0b10, 0b010101>; 7990b57cec5SDimitry Andricclass HSUB_U_D_ENC : MSA_3R_FMT<0b111, 0b11, 0b010101>; 8000b57cec5SDimitry Andric 8010b57cec5SDimitry Andricclass ILVEV_B_ENC : MSA_3R_FMT<0b110, 0b00, 0b010100>; 8020b57cec5SDimitry Andricclass ILVEV_H_ENC : MSA_3R_FMT<0b110, 0b01, 0b010100>; 8030b57cec5SDimitry Andricclass ILVEV_W_ENC : MSA_3R_FMT<0b110, 0b10, 0b010100>; 8040b57cec5SDimitry Andricclass ILVEV_D_ENC : MSA_3R_FMT<0b110, 0b11, 0b010100>; 8050b57cec5SDimitry Andric 8060b57cec5SDimitry Andricclass ILVL_B_ENC : MSA_3R_FMT<0b100, 0b00, 0b010100>; 8070b57cec5SDimitry Andricclass ILVL_H_ENC : MSA_3R_FMT<0b100, 0b01, 0b010100>; 8080b57cec5SDimitry Andricclass ILVL_W_ENC : MSA_3R_FMT<0b100, 0b10, 0b010100>; 8090b57cec5SDimitry Andricclass ILVL_D_ENC : MSA_3R_FMT<0b100, 0b11, 0b010100>; 8100b57cec5SDimitry Andric 8110b57cec5SDimitry Andricclass ILVOD_B_ENC : MSA_3R_FMT<0b111, 0b00, 0b010100>; 8120b57cec5SDimitry Andricclass ILVOD_H_ENC : MSA_3R_FMT<0b111, 0b01, 0b010100>; 8130b57cec5SDimitry Andricclass ILVOD_W_ENC : MSA_3R_FMT<0b111, 0b10, 0b010100>; 8140b57cec5SDimitry Andricclass ILVOD_D_ENC : MSA_3R_FMT<0b111, 0b11, 0b010100>; 8150b57cec5SDimitry Andric 8160b57cec5SDimitry Andricclass ILVR_B_ENC : MSA_3R_FMT<0b101, 0b00, 0b010100>; 8170b57cec5SDimitry Andricclass ILVR_H_ENC : MSA_3R_FMT<0b101, 0b01, 0b010100>; 8180b57cec5SDimitry Andricclass ILVR_W_ENC : MSA_3R_FMT<0b101, 0b10, 0b010100>; 8190b57cec5SDimitry Andricclass ILVR_D_ENC : MSA_3R_FMT<0b101, 0b11, 0b010100>; 8200b57cec5SDimitry Andric 8210b57cec5SDimitry Andricclass INSERT_B_ENC : MSA_ELM_INSERT_B_FMT<0b0100, 0b011001>; 8220b57cec5SDimitry Andricclass INSERT_H_ENC : MSA_ELM_INSERT_H_FMT<0b0100, 0b011001>; 8230b57cec5SDimitry Andricclass INSERT_W_ENC : MSA_ELM_INSERT_W_FMT<0b0100, 0b011001>; 8240b57cec5SDimitry Andricclass INSERT_D_ENC : MSA_ELM_INSERT_D_FMT<0b0100, 0b011001>; 8250b57cec5SDimitry Andric 8260b57cec5SDimitry Andricclass INSVE_B_ENC : MSA_ELM_B_FMT<0b0101, 0b011001>; 8270b57cec5SDimitry Andricclass INSVE_H_ENC : MSA_ELM_H_FMT<0b0101, 0b011001>; 8280b57cec5SDimitry Andricclass INSVE_W_ENC : MSA_ELM_W_FMT<0b0101, 0b011001>; 8290b57cec5SDimitry Andricclass INSVE_D_ENC : MSA_ELM_D_FMT<0b0101, 0b011001>; 8300b57cec5SDimitry Andric 8310b57cec5SDimitry Andricclass LD_B_ENC : MSA_MI10_FMT<0b00, 0b1000>; 8320b57cec5SDimitry Andricclass LD_H_ENC : MSA_MI10_FMT<0b01, 0b1000>; 8330b57cec5SDimitry Andricclass LD_W_ENC : MSA_MI10_FMT<0b10, 0b1000>; 8340b57cec5SDimitry Andricclass LD_D_ENC : MSA_MI10_FMT<0b11, 0b1000>; 8350b57cec5SDimitry Andric 8360b57cec5SDimitry Andricclass LDI_B_ENC : MSA_I10_FMT<0b110, 0b00, 0b000111>; 8370b57cec5SDimitry Andricclass LDI_H_ENC : MSA_I10_FMT<0b110, 0b01, 0b000111>; 8380b57cec5SDimitry Andricclass LDI_W_ENC : MSA_I10_FMT<0b110, 0b10, 0b000111>; 8390b57cec5SDimitry Andricclass LDI_D_ENC : MSA_I10_FMT<0b110, 0b11, 0b000111>; 8400b57cec5SDimitry Andric 8410b57cec5SDimitry Andricclass LSA_ENC : SPECIAL_LSA_FMT<0b000101>; 8420b57cec5SDimitry Andricclass DLSA_ENC : SPECIAL_DLSA_FMT<0b010101>; 8430b57cec5SDimitry Andric 8440b57cec5SDimitry Andricclass MADD_Q_H_ENC : MSA_3RF_FMT<0b0101, 0b0, 0b011100>; 8450b57cec5SDimitry Andricclass MADD_Q_W_ENC : MSA_3RF_FMT<0b0101, 0b1, 0b011100>; 8460b57cec5SDimitry Andric 8470b57cec5SDimitry Andricclass MADDR_Q_H_ENC : MSA_3RF_FMT<0b1101, 0b0, 0b011100>; 8480b57cec5SDimitry Andricclass MADDR_Q_W_ENC : MSA_3RF_FMT<0b1101, 0b1, 0b011100>; 8490b57cec5SDimitry Andric 8500b57cec5SDimitry Andricclass MADDV_B_ENC : MSA_3R_FMT<0b001, 0b00, 0b010010>; 8510b57cec5SDimitry Andricclass MADDV_H_ENC : MSA_3R_FMT<0b001, 0b01, 0b010010>; 8520b57cec5SDimitry Andricclass MADDV_W_ENC : MSA_3R_FMT<0b001, 0b10, 0b010010>; 8530b57cec5SDimitry Andricclass MADDV_D_ENC : MSA_3R_FMT<0b001, 0b11, 0b010010>; 8540b57cec5SDimitry Andric 8550b57cec5SDimitry Andricclass MAX_A_B_ENC : MSA_3R_FMT<0b110, 0b00, 0b001110>; 8560b57cec5SDimitry Andricclass MAX_A_H_ENC : MSA_3R_FMT<0b110, 0b01, 0b001110>; 8570b57cec5SDimitry Andricclass MAX_A_W_ENC : MSA_3R_FMT<0b110, 0b10, 0b001110>; 8580b57cec5SDimitry Andricclass MAX_A_D_ENC : MSA_3R_FMT<0b110, 0b11, 0b001110>; 8590b57cec5SDimitry Andric 8600b57cec5SDimitry Andricclass MAX_S_B_ENC : MSA_3R_FMT<0b010, 0b00, 0b001110>; 8610b57cec5SDimitry Andricclass MAX_S_H_ENC : MSA_3R_FMT<0b010, 0b01, 0b001110>; 8620b57cec5SDimitry Andricclass MAX_S_W_ENC : MSA_3R_FMT<0b010, 0b10, 0b001110>; 8630b57cec5SDimitry Andricclass MAX_S_D_ENC : MSA_3R_FMT<0b010, 0b11, 0b001110>; 8640b57cec5SDimitry Andric 8650b57cec5SDimitry Andricclass MAX_U_B_ENC : MSA_3R_FMT<0b011, 0b00, 0b001110>; 8660b57cec5SDimitry Andricclass MAX_U_H_ENC : MSA_3R_FMT<0b011, 0b01, 0b001110>; 8670b57cec5SDimitry Andricclass MAX_U_W_ENC : MSA_3R_FMT<0b011, 0b10, 0b001110>; 8680b57cec5SDimitry Andricclass MAX_U_D_ENC : MSA_3R_FMT<0b011, 0b11, 0b001110>; 8690b57cec5SDimitry Andric 8700b57cec5SDimitry Andricclass MAXI_S_B_ENC : MSA_I5_FMT<0b010, 0b00, 0b000110>; 8710b57cec5SDimitry Andricclass MAXI_S_H_ENC : MSA_I5_FMT<0b010, 0b01, 0b000110>; 8720b57cec5SDimitry Andricclass MAXI_S_W_ENC : MSA_I5_FMT<0b010, 0b10, 0b000110>; 8730b57cec5SDimitry Andricclass MAXI_S_D_ENC : MSA_I5_FMT<0b010, 0b11, 0b000110>; 8740b57cec5SDimitry Andric 8750b57cec5SDimitry Andricclass MAXI_U_B_ENC : MSA_I5_FMT<0b011, 0b00, 0b000110>; 8760b57cec5SDimitry Andricclass MAXI_U_H_ENC : MSA_I5_FMT<0b011, 0b01, 0b000110>; 8770b57cec5SDimitry Andricclass MAXI_U_W_ENC : MSA_I5_FMT<0b011, 0b10, 0b000110>; 8780b57cec5SDimitry Andricclass MAXI_U_D_ENC : MSA_I5_FMT<0b011, 0b11, 0b000110>; 8790b57cec5SDimitry Andric 8800b57cec5SDimitry Andricclass MIN_A_B_ENC : MSA_3R_FMT<0b111, 0b00, 0b001110>; 8810b57cec5SDimitry Andricclass MIN_A_H_ENC : MSA_3R_FMT<0b111, 0b01, 0b001110>; 8820b57cec5SDimitry Andricclass MIN_A_W_ENC : MSA_3R_FMT<0b111, 0b10, 0b001110>; 8830b57cec5SDimitry Andricclass MIN_A_D_ENC : MSA_3R_FMT<0b111, 0b11, 0b001110>; 8840b57cec5SDimitry Andric 8850b57cec5SDimitry Andricclass MIN_S_B_ENC : MSA_3R_FMT<0b100, 0b00, 0b001110>; 8860b57cec5SDimitry Andricclass MIN_S_H_ENC : MSA_3R_FMT<0b100, 0b01, 0b001110>; 8870b57cec5SDimitry Andricclass MIN_S_W_ENC : MSA_3R_FMT<0b100, 0b10, 0b001110>; 8880b57cec5SDimitry Andricclass MIN_S_D_ENC : MSA_3R_FMT<0b100, 0b11, 0b001110>; 8890b57cec5SDimitry Andric 8900b57cec5SDimitry Andricclass MIN_U_B_ENC : MSA_3R_FMT<0b101, 0b00, 0b001110>; 8910b57cec5SDimitry Andricclass MIN_U_H_ENC : MSA_3R_FMT<0b101, 0b01, 0b001110>; 8920b57cec5SDimitry Andricclass MIN_U_W_ENC : MSA_3R_FMT<0b101, 0b10, 0b001110>; 8930b57cec5SDimitry Andricclass MIN_U_D_ENC : MSA_3R_FMT<0b101, 0b11, 0b001110>; 8940b57cec5SDimitry Andric 8950b57cec5SDimitry Andricclass MINI_S_B_ENC : MSA_I5_FMT<0b100, 0b00, 0b000110>; 8960b57cec5SDimitry Andricclass MINI_S_H_ENC : MSA_I5_FMT<0b100, 0b01, 0b000110>; 8970b57cec5SDimitry Andricclass MINI_S_W_ENC : MSA_I5_FMT<0b100, 0b10, 0b000110>; 8980b57cec5SDimitry Andricclass MINI_S_D_ENC : MSA_I5_FMT<0b100, 0b11, 0b000110>; 8990b57cec5SDimitry Andric 9000b57cec5SDimitry Andricclass MINI_U_B_ENC : MSA_I5_FMT<0b101, 0b00, 0b000110>; 9010b57cec5SDimitry Andricclass MINI_U_H_ENC : MSA_I5_FMT<0b101, 0b01, 0b000110>; 9020b57cec5SDimitry Andricclass MINI_U_W_ENC : MSA_I5_FMT<0b101, 0b10, 0b000110>; 9030b57cec5SDimitry Andricclass MINI_U_D_ENC : MSA_I5_FMT<0b101, 0b11, 0b000110>; 9040b57cec5SDimitry Andric 9050b57cec5SDimitry Andricclass MOD_S_B_ENC : MSA_3R_FMT<0b110, 0b00, 0b010010>; 9060b57cec5SDimitry Andricclass MOD_S_H_ENC : MSA_3R_FMT<0b110, 0b01, 0b010010>; 9070b57cec5SDimitry Andricclass MOD_S_W_ENC : MSA_3R_FMT<0b110, 0b10, 0b010010>; 9080b57cec5SDimitry Andricclass MOD_S_D_ENC : MSA_3R_FMT<0b110, 0b11, 0b010010>; 9090b57cec5SDimitry Andric 9100b57cec5SDimitry Andricclass MOD_U_B_ENC : MSA_3R_FMT<0b111, 0b00, 0b010010>; 9110b57cec5SDimitry Andricclass MOD_U_H_ENC : MSA_3R_FMT<0b111, 0b01, 0b010010>; 9120b57cec5SDimitry Andricclass MOD_U_W_ENC : MSA_3R_FMT<0b111, 0b10, 0b010010>; 9130b57cec5SDimitry Andricclass MOD_U_D_ENC : MSA_3R_FMT<0b111, 0b11, 0b010010>; 9140b57cec5SDimitry Andric 9150b57cec5SDimitry Andricclass MOVE_V_ENC : MSA_ELM_FMT<0b0010111110, 0b011001>; 9160b57cec5SDimitry Andric 9170b57cec5SDimitry Andricclass MSUB_Q_H_ENC : MSA_3RF_FMT<0b0110, 0b0, 0b011100>; 9180b57cec5SDimitry Andricclass MSUB_Q_W_ENC : MSA_3RF_FMT<0b0110, 0b1, 0b011100>; 9190b57cec5SDimitry Andric 9200b57cec5SDimitry Andricclass MSUBR_Q_H_ENC : MSA_3RF_FMT<0b1110, 0b0, 0b011100>; 9210b57cec5SDimitry Andricclass MSUBR_Q_W_ENC : MSA_3RF_FMT<0b1110, 0b1, 0b011100>; 9220b57cec5SDimitry Andric 9230b57cec5SDimitry Andricclass MSUBV_B_ENC : MSA_3R_FMT<0b010, 0b00, 0b010010>; 9240b57cec5SDimitry Andricclass MSUBV_H_ENC : MSA_3R_FMT<0b010, 0b01, 0b010010>; 9250b57cec5SDimitry Andricclass MSUBV_W_ENC : MSA_3R_FMT<0b010, 0b10, 0b010010>; 9260b57cec5SDimitry Andricclass MSUBV_D_ENC : MSA_3R_FMT<0b010, 0b11, 0b010010>; 9270b57cec5SDimitry Andric 9280b57cec5SDimitry Andricclass MUL_Q_H_ENC : MSA_3RF_FMT<0b0100, 0b0, 0b011100>; 9290b57cec5SDimitry Andricclass MUL_Q_W_ENC : MSA_3RF_FMT<0b0100, 0b1, 0b011100>; 9300b57cec5SDimitry Andric 9310b57cec5SDimitry Andricclass MULR_Q_H_ENC : MSA_3RF_FMT<0b1100, 0b0, 0b011100>; 9320b57cec5SDimitry Andricclass MULR_Q_W_ENC : MSA_3RF_FMT<0b1100, 0b1, 0b011100>; 9330b57cec5SDimitry Andric 9340b57cec5SDimitry Andricclass MULV_B_ENC : MSA_3R_FMT<0b000, 0b00, 0b010010>; 9350b57cec5SDimitry Andricclass MULV_H_ENC : MSA_3R_FMT<0b000, 0b01, 0b010010>; 9360b57cec5SDimitry Andricclass MULV_W_ENC : MSA_3R_FMT<0b000, 0b10, 0b010010>; 9370b57cec5SDimitry Andricclass MULV_D_ENC : MSA_3R_FMT<0b000, 0b11, 0b010010>; 9380b57cec5SDimitry Andric 9390b57cec5SDimitry Andricclass NLOC_B_ENC : MSA_2R_FMT<0b11000010, 0b00, 0b011110>; 9400b57cec5SDimitry Andricclass NLOC_H_ENC : MSA_2R_FMT<0b11000010, 0b01, 0b011110>; 9410b57cec5SDimitry Andricclass NLOC_W_ENC : MSA_2R_FMT<0b11000010, 0b10, 0b011110>; 9420b57cec5SDimitry Andricclass NLOC_D_ENC : MSA_2R_FMT<0b11000010, 0b11, 0b011110>; 9430b57cec5SDimitry Andric 9440b57cec5SDimitry Andricclass NLZC_B_ENC : MSA_2R_FMT<0b11000011, 0b00, 0b011110>; 9450b57cec5SDimitry Andricclass NLZC_H_ENC : MSA_2R_FMT<0b11000011, 0b01, 0b011110>; 9460b57cec5SDimitry Andricclass NLZC_W_ENC : MSA_2R_FMT<0b11000011, 0b10, 0b011110>; 9470b57cec5SDimitry Andricclass NLZC_D_ENC : MSA_2R_FMT<0b11000011, 0b11, 0b011110>; 9480b57cec5SDimitry Andric 9490b57cec5SDimitry Andricclass NOR_V_ENC : MSA_VEC_FMT<0b00010, 0b011110>; 9500b57cec5SDimitry Andric 9510b57cec5SDimitry Andricclass NORI_B_ENC : MSA_I8_FMT<0b10, 0b000000>; 9520b57cec5SDimitry Andric 9530b57cec5SDimitry Andricclass OR_V_ENC : MSA_VEC_FMT<0b00001, 0b011110>; 9540b57cec5SDimitry Andric 9550b57cec5SDimitry Andricclass ORI_B_ENC : MSA_I8_FMT<0b01, 0b000000>; 9560b57cec5SDimitry Andric 9570b57cec5SDimitry Andricclass PCKEV_B_ENC : MSA_3R_FMT<0b010, 0b00, 0b010100>; 9580b57cec5SDimitry Andricclass PCKEV_H_ENC : MSA_3R_FMT<0b010, 0b01, 0b010100>; 9590b57cec5SDimitry Andricclass PCKEV_W_ENC : MSA_3R_FMT<0b010, 0b10, 0b010100>; 9600b57cec5SDimitry Andricclass PCKEV_D_ENC : MSA_3R_FMT<0b010, 0b11, 0b010100>; 9610b57cec5SDimitry Andric 9620b57cec5SDimitry Andricclass PCKOD_B_ENC : MSA_3R_FMT<0b011, 0b00, 0b010100>; 9630b57cec5SDimitry Andricclass PCKOD_H_ENC : MSA_3R_FMT<0b011, 0b01, 0b010100>; 9640b57cec5SDimitry Andricclass PCKOD_W_ENC : MSA_3R_FMT<0b011, 0b10, 0b010100>; 9650b57cec5SDimitry Andricclass PCKOD_D_ENC : MSA_3R_FMT<0b011, 0b11, 0b010100>; 9660b57cec5SDimitry Andric 9670b57cec5SDimitry Andricclass PCNT_B_ENC : MSA_2R_FMT<0b11000001, 0b00, 0b011110>; 9680b57cec5SDimitry Andricclass PCNT_H_ENC : MSA_2R_FMT<0b11000001, 0b01, 0b011110>; 9690b57cec5SDimitry Andricclass PCNT_W_ENC : MSA_2R_FMT<0b11000001, 0b10, 0b011110>; 9700b57cec5SDimitry Andricclass PCNT_D_ENC : MSA_2R_FMT<0b11000001, 0b11, 0b011110>; 9710b57cec5SDimitry Andric 9720b57cec5SDimitry Andricclass SAT_S_B_ENC : MSA_BIT_B_FMT<0b000, 0b001010>; 9730b57cec5SDimitry Andricclass SAT_S_H_ENC : MSA_BIT_H_FMT<0b000, 0b001010>; 9740b57cec5SDimitry Andricclass SAT_S_W_ENC : MSA_BIT_W_FMT<0b000, 0b001010>; 9750b57cec5SDimitry Andricclass SAT_S_D_ENC : MSA_BIT_D_FMT<0b000, 0b001010>; 9760b57cec5SDimitry Andric 9770b57cec5SDimitry Andricclass SAT_U_B_ENC : MSA_BIT_B_FMT<0b001, 0b001010>; 9780b57cec5SDimitry Andricclass SAT_U_H_ENC : MSA_BIT_H_FMT<0b001, 0b001010>; 9790b57cec5SDimitry Andricclass SAT_U_W_ENC : MSA_BIT_W_FMT<0b001, 0b001010>; 9800b57cec5SDimitry Andricclass SAT_U_D_ENC : MSA_BIT_D_FMT<0b001, 0b001010>; 9810b57cec5SDimitry Andric 9820b57cec5SDimitry Andricclass SHF_B_ENC : MSA_I8_FMT<0b00, 0b000010>; 9830b57cec5SDimitry Andricclass SHF_H_ENC : MSA_I8_FMT<0b01, 0b000010>; 9840b57cec5SDimitry Andricclass SHF_W_ENC : MSA_I8_FMT<0b10, 0b000010>; 9850b57cec5SDimitry Andric 9860b57cec5SDimitry Andricclass SLD_B_ENC : MSA_3R_INDEX_FMT<0b000, 0b00, 0b010100>; 9870b57cec5SDimitry Andricclass SLD_H_ENC : MSA_3R_INDEX_FMT<0b000, 0b01, 0b010100>; 9880b57cec5SDimitry Andricclass SLD_W_ENC : MSA_3R_INDEX_FMT<0b000, 0b10, 0b010100>; 9890b57cec5SDimitry Andricclass SLD_D_ENC : MSA_3R_INDEX_FMT<0b000, 0b11, 0b010100>; 9900b57cec5SDimitry Andric 9910b57cec5SDimitry Andricclass SLDI_B_ENC : MSA_ELM_B_FMT<0b0000, 0b011001>; 9920b57cec5SDimitry Andricclass SLDI_H_ENC : MSA_ELM_H_FMT<0b0000, 0b011001>; 9930b57cec5SDimitry Andricclass SLDI_W_ENC : MSA_ELM_W_FMT<0b0000, 0b011001>; 9940b57cec5SDimitry Andricclass SLDI_D_ENC : MSA_ELM_D_FMT<0b0000, 0b011001>; 9950b57cec5SDimitry Andric 9960b57cec5SDimitry Andricclass SLL_B_ENC : MSA_3R_FMT<0b000, 0b00, 0b001101>; 9970b57cec5SDimitry Andricclass SLL_H_ENC : MSA_3R_FMT<0b000, 0b01, 0b001101>; 9980b57cec5SDimitry Andricclass SLL_W_ENC : MSA_3R_FMT<0b000, 0b10, 0b001101>; 9990b57cec5SDimitry Andricclass SLL_D_ENC : MSA_3R_FMT<0b000, 0b11, 0b001101>; 10000b57cec5SDimitry Andric 10010b57cec5SDimitry Andricclass SLLI_B_ENC : MSA_BIT_B_FMT<0b000, 0b001001>; 10020b57cec5SDimitry Andricclass SLLI_H_ENC : MSA_BIT_H_FMT<0b000, 0b001001>; 10030b57cec5SDimitry Andricclass SLLI_W_ENC : MSA_BIT_W_FMT<0b000, 0b001001>; 10040b57cec5SDimitry Andricclass SLLI_D_ENC : MSA_BIT_D_FMT<0b000, 0b001001>; 10050b57cec5SDimitry Andric 10060b57cec5SDimitry Andricclass SPLAT_B_ENC : MSA_3R_INDEX_FMT<0b001, 0b00, 0b010100>; 10070b57cec5SDimitry Andricclass SPLAT_H_ENC : MSA_3R_INDEX_FMT<0b001, 0b01, 0b010100>; 10080b57cec5SDimitry Andricclass SPLAT_W_ENC : MSA_3R_INDEX_FMT<0b001, 0b10, 0b010100>; 10090b57cec5SDimitry Andricclass SPLAT_D_ENC : MSA_3R_INDEX_FMT<0b001, 0b11, 0b010100>; 10100b57cec5SDimitry Andric 10110b57cec5SDimitry Andricclass SPLATI_B_ENC : MSA_ELM_B_FMT<0b0001, 0b011001>; 10120b57cec5SDimitry Andricclass SPLATI_H_ENC : MSA_ELM_H_FMT<0b0001, 0b011001>; 10130b57cec5SDimitry Andricclass SPLATI_W_ENC : MSA_ELM_W_FMT<0b0001, 0b011001>; 10140b57cec5SDimitry Andricclass SPLATI_D_ENC : MSA_ELM_D_FMT<0b0001, 0b011001>; 10150b57cec5SDimitry Andric 10160b57cec5SDimitry Andricclass SRA_B_ENC : MSA_3R_FMT<0b001, 0b00, 0b001101>; 10170b57cec5SDimitry Andricclass SRA_H_ENC : MSA_3R_FMT<0b001, 0b01, 0b001101>; 10180b57cec5SDimitry Andricclass SRA_W_ENC : MSA_3R_FMT<0b001, 0b10, 0b001101>; 10190b57cec5SDimitry Andricclass SRA_D_ENC : MSA_3R_FMT<0b001, 0b11, 0b001101>; 10200b57cec5SDimitry Andric 10210b57cec5SDimitry Andricclass SRAI_B_ENC : MSA_BIT_B_FMT<0b001, 0b001001>; 10220b57cec5SDimitry Andricclass SRAI_H_ENC : MSA_BIT_H_FMT<0b001, 0b001001>; 10230b57cec5SDimitry Andricclass SRAI_W_ENC : MSA_BIT_W_FMT<0b001, 0b001001>; 10240b57cec5SDimitry Andricclass SRAI_D_ENC : MSA_BIT_D_FMT<0b001, 0b001001>; 10250b57cec5SDimitry Andric 10260b57cec5SDimitry Andricclass SRAR_B_ENC : MSA_3R_FMT<0b001, 0b00, 0b010101>; 10270b57cec5SDimitry Andricclass SRAR_H_ENC : MSA_3R_FMT<0b001, 0b01, 0b010101>; 10280b57cec5SDimitry Andricclass SRAR_W_ENC : MSA_3R_FMT<0b001, 0b10, 0b010101>; 10290b57cec5SDimitry Andricclass SRAR_D_ENC : MSA_3R_FMT<0b001, 0b11, 0b010101>; 10300b57cec5SDimitry Andric 10310b57cec5SDimitry Andricclass SRARI_B_ENC : MSA_BIT_B_FMT<0b010, 0b001010>; 10320b57cec5SDimitry Andricclass SRARI_H_ENC : MSA_BIT_H_FMT<0b010, 0b001010>; 10330b57cec5SDimitry Andricclass SRARI_W_ENC : MSA_BIT_W_FMT<0b010, 0b001010>; 10340b57cec5SDimitry Andricclass SRARI_D_ENC : MSA_BIT_D_FMT<0b010, 0b001010>; 10350b57cec5SDimitry Andric 10360b57cec5SDimitry Andricclass SRL_B_ENC : MSA_3R_FMT<0b010, 0b00, 0b001101>; 10370b57cec5SDimitry Andricclass SRL_H_ENC : MSA_3R_FMT<0b010, 0b01, 0b001101>; 10380b57cec5SDimitry Andricclass SRL_W_ENC : MSA_3R_FMT<0b010, 0b10, 0b001101>; 10390b57cec5SDimitry Andricclass SRL_D_ENC : MSA_3R_FMT<0b010, 0b11, 0b001101>; 10400b57cec5SDimitry Andric 10410b57cec5SDimitry Andricclass SRLI_B_ENC : MSA_BIT_B_FMT<0b010, 0b001001>; 10420b57cec5SDimitry Andricclass SRLI_H_ENC : MSA_BIT_H_FMT<0b010, 0b001001>; 10430b57cec5SDimitry Andricclass SRLI_W_ENC : MSA_BIT_W_FMT<0b010, 0b001001>; 10440b57cec5SDimitry Andricclass SRLI_D_ENC : MSA_BIT_D_FMT<0b010, 0b001001>; 10450b57cec5SDimitry Andric 10460b57cec5SDimitry Andricclass SRLR_B_ENC : MSA_3R_FMT<0b010, 0b00, 0b010101>; 10470b57cec5SDimitry Andricclass SRLR_H_ENC : MSA_3R_FMT<0b010, 0b01, 0b010101>; 10480b57cec5SDimitry Andricclass SRLR_W_ENC : MSA_3R_FMT<0b010, 0b10, 0b010101>; 10490b57cec5SDimitry Andricclass SRLR_D_ENC : MSA_3R_FMT<0b010, 0b11, 0b010101>; 10500b57cec5SDimitry Andric 10510b57cec5SDimitry Andricclass SRLRI_B_ENC : MSA_BIT_B_FMT<0b011, 0b001010>; 10520b57cec5SDimitry Andricclass SRLRI_H_ENC : MSA_BIT_H_FMT<0b011, 0b001010>; 10530b57cec5SDimitry Andricclass SRLRI_W_ENC : MSA_BIT_W_FMT<0b011, 0b001010>; 10540b57cec5SDimitry Andricclass SRLRI_D_ENC : MSA_BIT_D_FMT<0b011, 0b001010>; 10550b57cec5SDimitry Andric 10560b57cec5SDimitry Andricclass ST_B_ENC : MSA_MI10_FMT<0b00, 0b1001>; 10570b57cec5SDimitry Andricclass ST_H_ENC : MSA_MI10_FMT<0b01, 0b1001>; 10580b57cec5SDimitry Andricclass ST_W_ENC : MSA_MI10_FMT<0b10, 0b1001>; 10590b57cec5SDimitry Andricclass ST_D_ENC : MSA_MI10_FMT<0b11, 0b1001>; 10600b57cec5SDimitry Andric 10610b57cec5SDimitry Andricclass SUBS_S_B_ENC : MSA_3R_FMT<0b000, 0b00, 0b010001>; 10620b57cec5SDimitry Andricclass SUBS_S_H_ENC : MSA_3R_FMT<0b000, 0b01, 0b010001>; 10630b57cec5SDimitry Andricclass SUBS_S_W_ENC : MSA_3R_FMT<0b000, 0b10, 0b010001>; 10640b57cec5SDimitry Andricclass SUBS_S_D_ENC : MSA_3R_FMT<0b000, 0b11, 0b010001>; 10650b57cec5SDimitry Andric 10660b57cec5SDimitry Andricclass SUBS_U_B_ENC : MSA_3R_FMT<0b001, 0b00, 0b010001>; 10670b57cec5SDimitry Andricclass SUBS_U_H_ENC : MSA_3R_FMT<0b001, 0b01, 0b010001>; 10680b57cec5SDimitry Andricclass SUBS_U_W_ENC : MSA_3R_FMT<0b001, 0b10, 0b010001>; 10690b57cec5SDimitry Andricclass SUBS_U_D_ENC : MSA_3R_FMT<0b001, 0b11, 0b010001>; 10700b57cec5SDimitry Andric 10710b57cec5SDimitry Andricclass SUBSUS_U_B_ENC : MSA_3R_FMT<0b010, 0b00, 0b010001>; 10720b57cec5SDimitry Andricclass SUBSUS_U_H_ENC : MSA_3R_FMT<0b010, 0b01, 0b010001>; 10730b57cec5SDimitry Andricclass SUBSUS_U_W_ENC : MSA_3R_FMT<0b010, 0b10, 0b010001>; 10740b57cec5SDimitry Andricclass SUBSUS_U_D_ENC : MSA_3R_FMT<0b010, 0b11, 0b010001>; 10750b57cec5SDimitry Andric 10760b57cec5SDimitry Andricclass SUBSUU_S_B_ENC : MSA_3R_FMT<0b011, 0b00, 0b010001>; 10770b57cec5SDimitry Andricclass SUBSUU_S_H_ENC : MSA_3R_FMT<0b011, 0b01, 0b010001>; 10780b57cec5SDimitry Andricclass SUBSUU_S_W_ENC : MSA_3R_FMT<0b011, 0b10, 0b010001>; 10790b57cec5SDimitry Andricclass SUBSUU_S_D_ENC : MSA_3R_FMT<0b011, 0b11, 0b010001>; 10800b57cec5SDimitry Andric 10810b57cec5SDimitry Andricclass SUBV_B_ENC : MSA_3R_FMT<0b001, 0b00, 0b001110>; 10820b57cec5SDimitry Andricclass SUBV_H_ENC : MSA_3R_FMT<0b001, 0b01, 0b001110>; 10830b57cec5SDimitry Andricclass SUBV_W_ENC : MSA_3R_FMT<0b001, 0b10, 0b001110>; 10840b57cec5SDimitry Andricclass SUBV_D_ENC : MSA_3R_FMT<0b001, 0b11, 0b001110>; 10850b57cec5SDimitry Andric 10860b57cec5SDimitry Andricclass SUBVI_B_ENC : MSA_I5_FMT<0b001, 0b00, 0b000110>; 10870b57cec5SDimitry Andricclass SUBVI_H_ENC : MSA_I5_FMT<0b001, 0b01, 0b000110>; 10880b57cec5SDimitry Andricclass SUBVI_W_ENC : MSA_I5_FMT<0b001, 0b10, 0b000110>; 10890b57cec5SDimitry Andricclass SUBVI_D_ENC : MSA_I5_FMT<0b001, 0b11, 0b000110>; 10900b57cec5SDimitry Andric 10910b57cec5SDimitry Andricclass VSHF_B_ENC : MSA_3R_FMT<0b000, 0b00, 0b010101>; 10920b57cec5SDimitry Andricclass VSHF_H_ENC : MSA_3R_FMT<0b000, 0b01, 0b010101>; 10930b57cec5SDimitry Andricclass VSHF_W_ENC : MSA_3R_FMT<0b000, 0b10, 0b010101>; 10940b57cec5SDimitry Andricclass VSHF_D_ENC : MSA_3R_FMT<0b000, 0b11, 0b010101>; 10950b57cec5SDimitry Andric 10960b57cec5SDimitry Andricclass XOR_V_ENC : MSA_VEC_FMT<0b00011, 0b011110>; 10970b57cec5SDimitry Andric 10980b57cec5SDimitry Andricclass XORI_B_ENC : MSA_I8_FMT<0b11, 0b000000>; 10990b57cec5SDimitry Andric 11000b57cec5SDimitry Andric// Instruction desc. 11010b57cec5SDimitry Andricclass MSA_BIT_B_DESC_BASE<string instr_asm, SDPatternOperator OpNode, 11020b57cec5SDimitry Andric ComplexPattern Imm, RegisterOperand ROWD, 11030b57cec5SDimitry Andric RegisterOperand ROWS = ROWD, 11040b57cec5SDimitry Andric InstrItinClass itin = NoItinerary> { 11050b57cec5SDimitry Andric dag OutOperandList = (outs ROWD:$wd); 11060b57cec5SDimitry Andric dag InOperandList = (ins ROWS:$ws, vsplat_uimm3:$m); 11070b57cec5SDimitry Andric string AsmString = !strconcat(instr_asm, "\t$wd, $ws, $m"); 11080b57cec5SDimitry Andric list<dag> Pattern = [(set ROWD:$wd, (OpNode ROWS:$ws, Imm:$m))]; 11090b57cec5SDimitry Andric InstrItinClass Itinerary = itin; 11100b57cec5SDimitry Andric} 11110b57cec5SDimitry Andric 11120b57cec5SDimitry Andricclass MSA_BIT_H_DESC_BASE<string instr_asm, SDPatternOperator OpNode, 11130b57cec5SDimitry Andric ComplexPattern Imm, RegisterOperand ROWD, 11140b57cec5SDimitry Andric RegisterOperand ROWS = ROWD, 11150b57cec5SDimitry Andric InstrItinClass itin = NoItinerary> { 11160b57cec5SDimitry Andric dag OutOperandList = (outs ROWD:$wd); 11170b57cec5SDimitry Andric dag InOperandList = (ins ROWS:$ws, vsplat_uimm4:$m); 11180b57cec5SDimitry Andric string AsmString = !strconcat(instr_asm, "\t$wd, $ws, $m"); 11190b57cec5SDimitry Andric list<dag> Pattern = [(set ROWD:$wd, (OpNode ROWS:$ws, Imm:$m))]; 11200b57cec5SDimitry Andric InstrItinClass Itinerary = itin; 11210b57cec5SDimitry Andric} 11220b57cec5SDimitry Andric 11230b57cec5SDimitry Andricclass MSA_BIT_W_DESC_BASE<string instr_asm, SDPatternOperator OpNode, 11240b57cec5SDimitry Andric ComplexPattern Imm, RegisterOperand ROWD, 11250b57cec5SDimitry Andric RegisterOperand ROWS = ROWD, 11260b57cec5SDimitry Andric InstrItinClass itin = NoItinerary> { 11270b57cec5SDimitry Andric dag OutOperandList = (outs ROWD:$wd); 11280b57cec5SDimitry Andric dag InOperandList = (ins ROWS:$ws, vsplat_uimm5:$m); 11290b57cec5SDimitry Andric string AsmString = !strconcat(instr_asm, "\t$wd, $ws, $m"); 11300b57cec5SDimitry Andric list<dag> Pattern = [(set ROWD:$wd, (OpNode ROWS:$ws, Imm:$m))]; 11310b57cec5SDimitry Andric InstrItinClass Itinerary = itin; 11320b57cec5SDimitry Andric} 11330b57cec5SDimitry Andric 11340b57cec5SDimitry Andricclass MSA_BIT_D_DESC_BASE<string instr_asm, SDPatternOperator OpNode, 11350b57cec5SDimitry Andric ComplexPattern Imm, RegisterOperand ROWD, 11360b57cec5SDimitry Andric RegisterOperand ROWS = ROWD, 11370b57cec5SDimitry Andric InstrItinClass itin = NoItinerary> { 11380b57cec5SDimitry Andric dag OutOperandList = (outs ROWD:$wd); 11390b57cec5SDimitry Andric dag InOperandList = (ins ROWS:$ws, vsplat_uimm6:$m); 11400b57cec5SDimitry Andric string AsmString = !strconcat(instr_asm, "\t$wd, $ws, $m"); 11410b57cec5SDimitry Andric list<dag> Pattern = [(set ROWD:$wd, (OpNode ROWS:$ws, Imm:$m))]; 11420b57cec5SDimitry Andric InstrItinClass Itinerary = itin; 11430b57cec5SDimitry Andric} 11440b57cec5SDimitry Andric 11450b57cec5SDimitry Andricclass MSA_BIT_X_DESC_BASE<string instr_asm, SDPatternOperator OpNode, 11460b57cec5SDimitry Andric Operand ImmOp, ImmLeaf Imm, RegisterOperand ROWD, 11470b57cec5SDimitry Andric RegisterOperand ROWS = ROWD, 11480b57cec5SDimitry Andric InstrItinClass itin = NoItinerary> { 11490b57cec5SDimitry Andric dag OutOperandList = (outs ROWD:$wd); 11500b57cec5SDimitry Andric dag InOperandList = (ins ROWS:$ws, ImmOp:$m); 11510b57cec5SDimitry Andric string AsmString = !strconcat(instr_asm, "\t$wd, $ws, $m"); 11520b57cec5SDimitry Andric list<dag> Pattern = [(set ROWD:$wd, (OpNode ROWS:$ws, Imm:$m))]; 11530b57cec5SDimitry Andric InstrItinClass Itinerary = itin; 11540b57cec5SDimitry Andric} 11550b57cec5SDimitry Andric 11560b57cec5SDimitry Andricclass MSA_BIT_BINSXI_DESC_BASE<string instr_asm, ValueType Ty, 11570b57cec5SDimitry Andric SplatComplexPattern Mask, RegisterOperand ROWD, 11580b57cec5SDimitry Andric RegisterOperand ROWS = ROWD, 11590b57cec5SDimitry Andric InstrItinClass itin = NoItinerary> { 11600b57cec5SDimitry Andric dag OutOperandList = (outs ROWD:$wd); 11610b57cec5SDimitry Andric dag InOperandList = (ins ROWD:$wd_in, ROWS:$ws, Mask.OpClass:$m); 11620b57cec5SDimitry Andric string AsmString = !strconcat(instr_asm, "\t$wd, $ws, $m"); 11630b57cec5SDimitry Andric // Note that binsxi and vselect treat the condition operand the opposite 11640b57cec5SDimitry Andric // way to each other. 11650b57cec5SDimitry Andric // (vselect cond, if_set, if_clear) 11660b57cec5SDimitry Andric // (BSEL_V cond, if_clear, if_set) 11670b57cec5SDimitry Andric list<dag> Pattern = [(set ROWD:$wd, (vselect (Ty Mask:$m), (Ty ROWD:$ws), 11680b57cec5SDimitry Andric ROWS:$wd_in))]; 11690b57cec5SDimitry Andric InstrItinClass Itinerary = itin; 11700b57cec5SDimitry Andric string Constraints = "$wd = $wd_in"; 11710b57cec5SDimitry Andric} 11720b57cec5SDimitry Andric 11730b57cec5SDimitry Andricclass MSA_BIT_BINSLI_DESC_BASE<string instr_asm, ValueType Ty, 11740b57cec5SDimitry Andric SplatComplexPattern ImmOp, RegisterOperand ROWD, 11750b57cec5SDimitry Andric RegisterOperand ROWS = ROWD, 11760b57cec5SDimitry Andric InstrItinClass itin = NoItinerary> : 11770b57cec5SDimitry Andric MSA_BIT_BINSXI_DESC_BASE<instr_asm, Ty, ImmOp, ROWD, ROWS, itin>; 11780b57cec5SDimitry Andric 11790b57cec5SDimitry Andricclass MSA_BIT_BINSRI_DESC_BASE<string instr_asm, ValueType Ty, 11800b57cec5SDimitry Andric SplatComplexPattern ImmOp, RegisterOperand ROWD, 11810b57cec5SDimitry Andric RegisterOperand ROWS = ROWD, 11820b57cec5SDimitry Andric InstrItinClass itin = NoItinerary> : 11830b57cec5SDimitry Andric MSA_BIT_BINSXI_DESC_BASE<instr_asm, Ty, ImmOp, ROWD, ROWS, itin>; 11840b57cec5SDimitry Andric 11850b57cec5SDimitry Andricclass MSA_BIT_SPLAT_DESC_BASE<string instr_asm, SDPatternOperator OpNode, 11860b57cec5SDimitry Andric SplatComplexPattern SplatImm, 11870b57cec5SDimitry Andric RegisterOperand ROWD, RegisterOperand ROWS = ROWD, 11880b57cec5SDimitry Andric InstrItinClass itin = NoItinerary> { 11890b57cec5SDimitry Andric dag OutOperandList = (outs ROWD:$wd); 11900b57cec5SDimitry Andric dag InOperandList = (ins ROWS:$ws, SplatImm.OpClass:$m); 11910b57cec5SDimitry Andric string AsmString = !strconcat(instr_asm, "\t$wd, $ws, $m"); 11920b57cec5SDimitry Andric list<dag> Pattern = [(set ROWD:$wd, (OpNode ROWS:$ws, SplatImm:$m))]; 11930b57cec5SDimitry Andric InstrItinClass Itinerary = itin; 11940b57cec5SDimitry Andric} 11950b57cec5SDimitry Andric 11960b57cec5SDimitry Andricclass MSA_COPY_DESC_BASE<string instr_asm, SDPatternOperator OpNode, 11970b57cec5SDimitry Andric ValueType VecTy, Operand ImmOp, ImmLeaf Imm, 11980b57cec5SDimitry Andric RegisterOperand ROD, RegisterOperand ROWS, 11990b57cec5SDimitry Andric InstrItinClass itin = NoItinerary> { 12000b57cec5SDimitry Andric dag OutOperandList = (outs ROD:$rd); 12010b57cec5SDimitry Andric dag InOperandList = (ins ROWS:$ws, ImmOp:$n); 12020b57cec5SDimitry Andric string AsmString = !strconcat(instr_asm, "\t$rd, $ws[$n]"); 12030b57cec5SDimitry Andric list<dag> Pattern = [(set ROD:$rd, (OpNode (VecTy ROWS:$ws), Imm:$n))]; 12040b57cec5SDimitry Andric InstrItinClass Itinerary = itin; 12050b57cec5SDimitry Andric} 12060b57cec5SDimitry Andric 12070b57cec5SDimitry Andricclass MSA_ELM_SLD_DESC_BASE<string instr_asm, SDPatternOperator OpNode, 12080b57cec5SDimitry Andric RegisterOperand ROWD, RegisterOperand ROWS, 12090b57cec5SDimitry Andric Operand ImmOp, ImmLeaf Imm, 12100b57cec5SDimitry Andric InstrItinClass itin = NoItinerary> { 12110b57cec5SDimitry Andric dag OutOperandList = (outs ROWD:$wd); 12120b57cec5SDimitry Andric dag InOperandList = (ins ROWD:$wd_in, ROWS:$ws, ImmOp:$n); 12130b57cec5SDimitry Andric string AsmString = !strconcat(instr_asm, "\t$wd, $ws[$n]"); 12140b57cec5SDimitry Andric list<dag> Pattern = [(set ROWD:$wd, (OpNode ROWD:$wd_in, ROWS:$ws, 12150b57cec5SDimitry Andric Imm:$n))]; 12160b57cec5SDimitry Andric string Constraints = "$wd = $wd_in"; 12170b57cec5SDimitry Andric InstrItinClass Itinerary = itin; 12180b57cec5SDimitry Andric} 12190b57cec5SDimitry Andric 12200b57cec5SDimitry Andricclass MSA_COPY_PSEUDO_BASE<SDPatternOperator OpNode, ValueType VecTy, 12210b57cec5SDimitry Andric Operand ImmOp, ImmLeaf Imm, RegisterClass RCD, 12220b57cec5SDimitry Andric RegisterClass RCWS> : 12230b57cec5SDimitry Andric MSAPseudo<(outs RCD:$wd), (ins RCWS:$ws, ImmOp:$n), 12240b57cec5SDimitry Andric [(set RCD:$wd, (OpNode (VecTy RCWS:$ws), Imm:$n))]> { 12250b57cec5SDimitry Andric bit usesCustomInserter = 1; 12260b57cec5SDimitry Andric bit hasNoSchedulingInfo = 1; 12270b57cec5SDimitry Andric} 12280b57cec5SDimitry Andric 12290b57cec5SDimitry Andricclass MSA_I5_DESC_BASE<string instr_asm, SDPatternOperator OpNode, 12300b57cec5SDimitry Andric SplatComplexPattern SplatImm, RegisterOperand ROWD, 12310b57cec5SDimitry Andric RegisterOperand ROWS = ROWD, 12320b57cec5SDimitry Andric InstrItinClass itin = NoItinerary> { 12330b57cec5SDimitry Andric dag OutOperandList = (outs ROWD:$wd); 12340b57cec5SDimitry Andric dag InOperandList = (ins ROWS:$ws, SplatImm.OpClass:$imm); 12350b57cec5SDimitry Andric string AsmString = !strconcat(instr_asm, "\t$wd, $ws, $imm"); 12360b57cec5SDimitry Andric list<dag> Pattern = [(set ROWD:$wd, (OpNode ROWS:$ws, SplatImm:$imm))]; 12370b57cec5SDimitry Andric InstrItinClass Itinerary = itin; 12380b57cec5SDimitry Andric} 12390b57cec5SDimitry Andric 12400b57cec5SDimitry Andricclass MSA_I8_DESC_BASE<string instr_asm, SDPatternOperator OpNode, 12410b57cec5SDimitry Andric SplatComplexPattern SplatImm, RegisterOperand ROWD, 12420b57cec5SDimitry Andric RegisterOperand ROWS = ROWD, 12430b57cec5SDimitry Andric InstrItinClass itin = NoItinerary> { 12440b57cec5SDimitry Andric dag OutOperandList = (outs ROWD:$wd); 12450b57cec5SDimitry Andric dag InOperandList = (ins ROWS:$ws, SplatImm.OpClass:$u8); 12460b57cec5SDimitry Andric string AsmString = !strconcat(instr_asm, "\t$wd, $ws, $u8"); 12470b57cec5SDimitry Andric list<dag> Pattern = [(set ROWD:$wd, (OpNode ROWS:$ws, SplatImm:$u8))]; 12480b57cec5SDimitry Andric InstrItinClass Itinerary = itin; 12490b57cec5SDimitry Andric} 12500b57cec5SDimitry Andric 12510b57cec5SDimitry Andricclass MSA_I8_SHF_DESC_BASE<string instr_asm, RegisterOperand ROWD, 12520b57cec5SDimitry Andric RegisterOperand ROWS = ROWD, 12530b57cec5SDimitry Andric InstrItinClass itin = NoItinerary> { 12540b57cec5SDimitry Andric dag OutOperandList = (outs ROWD:$wd); 12550b57cec5SDimitry Andric dag InOperandList = (ins ROWS:$ws, uimm8:$u8); 12560b57cec5SDimitry Andric string AsmString = !strconcat(instr_asm, "\t$wd, $ws, $u8"); 12578bcb0991SDimitry Andric list<dag> Pattern = [(set ROWD:$wd, (MipsSHF timmZExt8:$u8, ROWS:$ws))]; 12580b57cec5SDimitry Andric InstrItinClass Itinerary = itin; 12590b57cec5SDimitry Andric} 12600b57cec5SDimitry Andric 12610b57cec5SDimitry Andricclass MSA_I10_LDI_DESC_BASE<string instr_asm, RegisterOperand ROWD, 12620b57cec5SDimitry Andric InstrItinClass itin = NoItinerary> { 12630b57cec5SDimitry Andric dag OutOperandList = (outs ROWD:$wd); 12640b57cec5SDimitry Andric dag InOperandList = (ins vsplat_simm10:$s10); 12650b57cec5SDimitry Andric string AsmString = !strconcat(instr_asm, "\t$wd, $s10"); 12660b57cec5SDimitry Andric // LDI is matched using custom matching code in MipsSEISelDAGToDAG.cpp 12670b57cec5SDimitry Andric list<dag> Pattern = []; 12680b57cec5SDimitry Andric bit hasSideEffects = 0; 1269480093f4SDimitry Andric bit isReMaterializable = 1; 12700b57cec5SDimitry Andric InstrItinClass Itinerary = itin; 12710b57cec5SDimitry Andric} 12720b57cec5SDimitry Andric 12730b57cec5SDimitry Andricclass MSA_2R_DESC_BASE<string instr_asm, SDPatternOperator OpNode, 12740b57cec5SDimitry Andric RegisterOperand ROWD, RegisterOperand ROWS = ROWD, 12750b57cec5SDimitry Andric InstrItinClass itin = NoItinerary> { 12760b57cec5SDimitry Andric dag OutOperandList = (outs ROWD:$wd); 12770b57cec5SDimitry Andric dag InOperandList = (ins ROWS:$ws); 12780b57cec5SDimitry Andric string AsmString = !strconcat(instr_asm, "\t$wd, $ws"); 12790b57cec5SDimitry Andric list<dag> Pattern = [(set ROWD:$wd, (OpNode ROWS:$ws))]; 12800b57cec5SDimitry Andric InstrItinClass Itinerary = itin; 12810b57cec5SDimitry Andric} 12820b57cec5SDimitry Andric 12830b57cec5SDimitry Andricclass MSA_2R_FILL_DESC_BASE<string instr_asm, ValueType VT, 12840b57cec5SDimitry Andric SDPatternOperator OpNode, RegisterOperand ROWD, 12850b57cec5SDimitry Andric RegisterOperand ROS = ROWD, 12860b57cec5SDimitry Andric InstrItinClass itin = NoItinerary> { 12870b57cec5SDimitry Andric dag OutOperandList = (outs ROWD:$wd); 12880b57cec5SDimitry Andric dag InOperandList = (ins ROS:$rs); 12890b57cec5SDimitry Andric string AsmString = !strconcat(instr_asm, "\t$wd, $rs"); 12900b57cec5SDimitry Andric list<dag> Pattern = [(set ROWD:$wd, (VT (OpNode ROS:$rs)))]; 12910b57cec5SDimitry Andric InstrItinClass Itinerary = itin; 12920b57cec5SDimitry Andric} 12930b57cec5SDimitry Andric 1294349cc55cSDimitry Andricclass MSA_2R_FILL_PSEUDO_BASE<SDPatternOperator OpNode, 1295349cc55cSDimitry Andric RegisterClass RCWD, RegisterClass RCWS> : 12960b57cec5SDimitry Andric MSAPseudo<(outs RCWD:$wd), (ins RCWS:$fs), 12970b57cec5SDimitry Andric [(set RCWD:$wd, (OpNode RCWS:$fs))]> { 12980b57cec5SDimitry Andric let usesCustomInserter = 1; 12990b57cec5SDimitry Andric} 13000b57cec5SDimitry Andric 13010b57cec5SDimitry Andricclass MSA_2RF_DESC_BASE<string instr_asm, SDPatternOperator OpNode, 13020b57cec5SDimitry Andric RegisterOperand ROWD, RegisterOperand ROWS = ROWD, 13030b57cec5SDimitry Andric InstrItinClass itin = NoItinerary> { 13040b57cec5SDimitry Andric dag OutOperandList = (outs ROWD:$wd); 13050b57cec5SDimitry Andric dag InOperandList = (ins ROWS:$ws); 13060b57cec5SDimitry Andric string AsmString = !strconcat(instr_asm, "\t$wd, $ws"); 13070b57cec5SDimitry Andric list<dag> Pattern = [(set ROWD:$wd, (OpNode ROWS:$ws))]; 13080b57cec5SDimitry Andric InstrItinClass Itinerary = itin; 13090b57cec5SDimitry Andric} 13100b57cec5SDimitry Andric 13110b57cec5SDimitry Andricclass MSA_3R_DESC_BASE<string instr_asm, SDPatternOperator OpNode, 13120b57cec5SDimitry Andric RegisterOperand ROWD, RegisterOperand ROWS = ROWD, 13130b57cec5SDimitry Andric RegisterOperand ROWT = ROWD, 13140b57cec5SDimitry Andric InstrItinClass itin = NoItinerary> { 13150b57cec5SDimitry Andric dag OutOperandList = (outs ROWD:$wd); 13160b57cec5SDimitry Andric dag InOperandList = (ins ROWS:$ws, ROWT:$wt); 13170b57cec5SDimitry Andric string AsmString = !strconcat(instr_asm, "\t$wd, $ws, $wt"); 13180b57cec5SDimitry Andric list<dag> Pattern = [(set ROWD:$wd, (OpNode ROWS:$ws, ROWT:$wt))]; 13190b57cec5SDimitry Andric InstrItinClass Itinerary = itin; 13200b57cec5SDimitry Andric} 13210b57cec5SDimitry Andric 13220b57cec5SDimitry Andricclass MSA_3R_BINSX_DESC_BASE<string instr_asm, SDPatternOperator OpNode, 13230b57cec5SDimitry Andric RegisterOperand ROWD, RegisterOperand ROWS = ROWD, 13240b57cec5SDimitry Andric RegisterOperand ROWT = ROWD, 13250b57cec5SDimitry Andric InstrItinClass itin = NoItinerary> { 13260b57cec5SDimitry Andric dag OutOperandList = (outs ROWD:$wd); 13270b57cec5SDimitry Andric dag InOperandList = (ins ROWD:$wd_in, ROWS:$ws, ROWT:$wt); 13280b57cec5SDimitry Andric string AsmString = !strconcat(instr_asm, "\t$wd, $ws, $wt"); 13290b57cec5SDimitry Andric list<dag> Pattern = [(set ROWD:$wd, (OpNode ROWD:$wd_in, ROWS:$ws, 13300b57cec5SDimitry Andric ROWT:$wt))]; 13310b57cec5SDimitry Andric string Constraints = "$wd = $wd_in"; 13320b57cec5SDimitry Andric InstrItinClass Itinerary = itin; 13330b57cec5SDimitry Andric} 13340b57cec5SDimitry Andric 13350b57cec5SDimitry Andricclass MSA_3R_SPLAT_DESC_BASE<string instr_asm, SDPatternOperator OpNode, 13360b57cec5SDimitry Andric RegisterOperand ROWD, RegisterOperand ROWS = ROWD, 13370b57cec5SDimitry Andric InstrItinClass itin = NoItinerary> { 13380b57cec5SDimitry Andric dag OutOperandList = (outs ROWD:$wd); 13390b57cec5SDimitry Andric dag InOperandList = (ins ROWS:$ws, GPR32Opnd:$rt); 13400b57cec5SDimitry Andric string AsmString = !strconcat(instr_asm, "\t$wd, $ws[$rt]"); 13410b57cec5SDimitry Andric list<dag> Pattern = [(set ROWD:$wd, (OpNode ROWS:$ws, GPR32Opnd:$rt))]; 13420b57cec5SDimitry Andric InstrItinClass Itinerary = itin; 13430b57cec5SDimitry Andric} 13440b57cec5SDimitry Andric 13450b57cec5SDimitry Andricclass MSA_3R_VSHF_DESC_BASE<string instr_asm, RegisterOperand ROWD, 13460b57cec5SDimitry Andric RegisterOperand ROWS = ROWD, 13470b57cec5SDimitry Andric RegisterOperand ROWT = ROWD, 13480b57cec5SDimitry Andric InstrItinClass itin = NoItinerary> { 13490b57cec5SDimitry Andric dag OutOperandList = (outs ROWD:$wd); 13500b57cec5SDimitry Andric dag InOperandList = (ins ROWD:$wd_in, ROWS:$ws, ROWT:$wt); 13510b57cec5SDimitry Andric string AsmString = !strconcat(instr_asm, "\t$wd, $ws, $wt"); 13520b57cec5SDimitry Andric list<dag> Pattern = [(set ROWD:$wd, (MipsVSHF ROWD:$wd_in, ROWS:$ws, 13530b57cec5SDimitry Andric ROWT:$wt))]; 13540b57cec5SDimitry Andric string Constraints = "$wd = $wd_in"; 13550b57cec5SDimitry Andric InstrItinClass Itinerary = itin; 13560b57cec5SDimitry Andric} 13570b57cec5SDimitry Andric 13580b57cec5SDimitry Andricclass MSA_3R_SLD_DESC_BASE<string instr_asm, SDPatternOperator OpNode, 13590b57cec5SDimitry Andric RegisterOperand ROWD, RegisterOperand ROWS = ROWD, 13600b57cec5SDimitry Andric InstrItinClass itin = NoItinerary> { 13610b57cec5SDimitry Andric dag OutOperandList = (outs ROWD:$wd); 13620b57cec5SDimitry Andric dag InOperandList = (ins ROWD:$wd_in, ROWS:$ws, GPR32Opnd:$rt); 13630b57cec5SDimitry Andric string AsmString = !strconcat(instr_asm, "\t$wd, $ws[$rt]"); 13640b57cec5SDimitry Andric list<dag> Pattern = [(set ROWD:$wd, (OpNode ROWD:$wd_in, ROWS:$ws, 13650b57cec5SDimitry Andric GPR32Opnd:$rt))]; 13660b57cec5SDimitry Andric InstrItinClass Itinerary = itin; 13670b57cec5SDimitry Andric string Constraints = "$wd = $wd_in"; 13680b57cec5SDimitry Andric} 13690b57cec5SDimitry Andric 13700b57cec5SDimitry Andricclass MSA_3R_4R_DESC_BASE<string instr_asm, SDPatternOperator OpNode, 13710b57cec5SDimitry Andric RegisterOperand ROWD, RegisterOperand ROWS = ROWD, 13720b57cec5SDimitry Andric RegisterOperand ROWT = ROWD, 13730b57cec5SDimitry Andric InstrItinClass itin = NoItinerary> { 13740b57cec5SDimitry Andric dag OutOperandList = (outs ROWD:$wd); 13750b57cec5SDimitry Andric dag InOperandList = (ins ROWD:$wd_in, ROWS:$ws, ROWT:$wt); 13760b57cec5SDimitry Andric string AsmString = !strconcat(instr_asm, "\t$wd, $ws, $wt"); 13770b57cec5SDimitry Andric list<dag> Pattern = [(set ROWD:$wd, (OpNode ROWD:$wd_in, ROWS:$ws, 13780b57cec5SDimitry Andric ROWT:$wt))]; 13790b57cec5SDimitry Andric InstrItinClass Itinerary = itin; 13800b57cec5SDimitry Andric string Constraints = "$wd = $wd_in"; 13810b57cec5SDimitry Andric} 13820b57cec5SDimitry Andric 13830b57cec5SDimitry Andricclass MSA_3RF_DESC_BASE<string instr_asm, SDPatternOperator OpNode, 13840b57cec5SDimitry Andric RegisterOperand ROWD, RegisterOperand ROWS = ROWD, 13850b57cec5SDimitry Andric RegisterOperand ROWT = ROWD, 13860b57cec5SDimitry Andric InstrItinClass itin = NoItinerary> : 13870b57cec5SDimitry Andric MSA_3R_DESC_BASE<instr_asm, OpNode, ROWD, ROWS, ROWT, itin>; 13880b57cec5SDimitry Andric 13890b57cec5SDimitry Andricclass MSA_3RF_4RF_DESC_BASE<string instr_asm, SDPatternOperator OpNode, 13900b57cec5SDimitry Andric RegisterOperand ROWD, RegisterOperand ROWS = ROWD, 13910b57cec5SDimitry Andric RegisterOperand ROWT = ROWD, 13920b57cec5SDimitry Andric InstrItinClass itin = NoItinerary> : 13930b57cec5SDimitry Andric MSA_3R_4R_DESC_BASE<instr_asm, OpNode, ROWD, ROWS, ROWT, itin>; 13940b57cec5SDimitry Andric 13950b57cec5SDimitry Andricclass MSA_CBRANCH_DESC_BASE<string instr_asm, RegisterOperand ROWD> { 13960b57cec5SDimitry Andric dag OutOperandList = (outs); 13970b57cec5SDimitry Andric dag InOperandList = (ins ROWD:$wt, brtarget:$offset); 13980b57cec5SDimitry Andric string AsmString = !strconcat(instr_asm, "\t$wt, $offset"); 13990b57cec5SDimitry Andric list<dag> Pattern = []; 14000b57cec5SDimitry Andric InstrItinClass Itinerary = NoItinerary; 14010b57cec5SDimitry Andric bit isBranch = 1; 14020b57cec5SDimitry Andric bit isTerminator = 1; 14030b57cec5SDimitry Andric bit hasDelaySlot = 1; 14040b57cec5SDimitry Andric list<Register> Defs = [AT]; 14050b57cec5SDimitry Andric} 14060b57cec5SDimitry Andric 14070b57cec5SDimitry Andricclass MSA_INSERT_DESC_BASE<string instr_asm, SDPatternOperator OpNode, 14080b57cec5SDimitry Andric Operand ImmOp, ImmLeaf Imm, RegisterOperand ROWD, 14090b57cec5SDimitry Andric RegisterOperand ROS, 14100b57cec5SDimitry Andric InstrItinClass itin = NoItinerary> { 14110b57cec5SDimitry Andric dag OutOperandList = (outs ROWD:$wd); 14120b57cec5SDimitry Andric dag InOperandList = (ins ROWD:$wd_in, ROS:$rs, ImmOp:$n); 14130b57cec5SDimitry Andric string AsmString = !strconcat(instr_asm, "\t$wd[$n], $rs"); 14140b57cec5SDimitry Andric list<dag> Pattern = [(set ROWD:$wd, (OpNode ROWD:$wd_in, ROS:$rs, Imm:$n))]; 14150b57cec5SDimitry Andric InstrItinClass Itinerary = itin; 14160b57cec5SDimitry Andric string Constraints = "$wd = $wd_in"; 14170b57cec5SDimitry Andric} 14180b57cec5SDimitry Andric 14190b57cec5SDimitry Andricclass MSA_INSERT_PSEUDO_BASE<SDPatternOperator OpNode, ValueType Ty, 14200b57cec5SDimitry Andric Operand ImmOp, ImmLeaf Imm, RegisterOperand ROWD, 14210b57cec5SDimitry Andric RegisterOperand ROFS> : 14220b57cec5SDimitry Andric MSAPseudo<(outs ROWD:$wd), (ins ROWD:$wd_in, ImmOp:$n, ROFS:$fs), 14230b57cec5SDimitry Andric [(set ROWD:$wd, (OpNode (Ty ROWD:$wd_in), ROFS:$fs, Imm:$n))]> { 14240b57cec5SDimitry Andric bit usesCustomInserter = 1; 14250b57cec5SDimitry Andric string Constraints = "$wd = $wd_in"; 14260b57cec5SDimitry Andric} 14270b57cec5SDimitry Andric 14280b57cec5SDimitry Andricclass MSA_INSERT_VIDX_PSEUDO_BASE<SDPatternOperator OpNode, ValueType Ty, 14290b57cec5SDimitry Andric RegisterOperand ROWD, RegisterOperand ROFS, 14300b57cec5SDimitry Andric RegisterOperand ROIdx> : 14310b57cec5SDimitry Andric MSAPseudo<(outs ROWD:$wd), (ins ROWD:$wd_in, ROIdx:$n, ROFS:$fs), 14320b57cec5SDimitry Andric [(set ROWD:$wd, (OpNode (Ty ROWD:$wd_in), ROFS:$fs, 14330b57cec5SDimitry Andric ROIdx:$n))]> { 14340b57cec5SDimitry Andric bit usesCustomInserter = 1; 14350b57cec5SDimitry Andric bit hasNoSchedulingInfo = 1; 14360b57cec5SDimitry Andric string Constraints = "$wd = $wd_in"; 14370b57cec5SDimitry Andric} 14380b57cec5SDimitry Andric 14390b57cec5SDimitry Andricclass MSA_INSVE_DESC_BASE<string instr_asm, SDPatternOperator OpNode, 14400b57cec5SDimitry Andric Operand ImmOp, ImmLeaf Imm, RegisterOperand ROWD, 14410b57cec5SDimitry Andric RegisterOperand ROWS = ROWD, 14420b57cec5SDimitry Andric InstrItinClass itin = NoItinerary> { 14430b57cec5SDimitry Andric dag OutOperandList = (outs ROWD:$wd); 14440b57cec5SDimitry Andric dag InOperandList = (ins ROWD:$wd_in, ImmOp:$n, ROWS:$ws, uimmz:$n2); 14450b57cec5SDimitry Andric string AsmString = !strconcat(instr_asm, "\t$wd[$n], $ws[$n2]"); 14460b57cec5SDimitry Andric list<dag> Pattern = [(set ROWD:$wd, (OpNode ROWD:$wd_in, 14470b57cec5SDimitry Andric Imm:$n, 14480b57cec5SDimitry Andric ROWS:$ws, 14490b57cec5SDimitry Andric immz:$n2))]; 14500b57cec5SDimitry Andric InstrItinClass Itinerary = itin; 14510b57cec5SDimitry Andric string Constraints = "$wd = $wd_in"; 14520b57cec5SDimitry Andric} 14530b57cec5SDimitry Andric 14540b57cec5SDimitry Andricclass MSA_VEC_DESC_BASE<string instr_asm, SDPatternOperator OpNode, 14550b57cec5SDimitry Andric RegisterOperand ROWD, RegisterOperand ROWS = ROWD, 14560b57cec5SDimitry Andric RegisterOperand ROWT = ROWD, 14570b57cec5SDimitry Andric InstrItinClass itin = NoItinerary> { 14580b57cec5SDimitry Andric dag OutOperandList = (outs ROWD:$wd); 14590b57cec5SDimitry Andric dag InOperandList = (ins ROWS:$ws, ROWT:$wt); 14600b57cec5SDimitry Andric string AsmString = !strconcat(instr_asm, "\t$wd, $ws, $wt"); 14610b57cec5SDimitry Andric list<dag> Pattern = [(set ROWD:$wd, (OpNode ROWS:$ws, ROWT:$wt))]; 14620b57cec5SDimitry Andric InstrItinClass Itinerary = itin; 14630b57cec5SDimitry Andric} 14640b57cec5SDimitry Andric 14650b57cec5SDimitry Andricclass MSA_ELM_SPLAT_DESC_BASE<string instr_asm, SplatComplexPattern SplatImm, 14660b57cec5SDimitry Andric RegisterOperand ROWD, 14670b57cec5SDimitry Andric RegisterOperand ROWS = ROWD, 14680b57cec5SDimitry Andric InstrItinClass itin = NoItinerary> { 14690b57cec5SDimitry Andric dag OutOperandList = (outs ROWD:$wd); 14700b57cec5SDimitry Andric dag InOperandList = (ins ROWS:$ws, SplatImm.OpClass:$n); 14710b57cec5SDimitry Andric string AsmString = !strconcat(instr_asm, "\t$wd, $ws[$n]"); 14720b57cec5SDimitry Andric list<dag> Pattern = [(set ROWD:$wd, (MipsVSHF SplatImm:$n, ROWS:$ws, 14730b57cec5SDimitry Andric ROWS:$ws))]; 14740b57cec5SDimitry Andric InstrItinClass Itinerary = itin; 14750b57cec5SDimitry Andric} 14760b57cec5SDimitry Andric 14770b57cec5SDimitry Andricclass MSA_VEC_PSEUDO_BASE<SDPatternOperator OpNode, RegisterOperand ROWD, 14780b57cec5SDimitry Andric RegisterOperand ROWS = ROWD, 14790b57cec5SDimitry Andric RegisterOperand ROWT = ROWD> : 14800b57cec5SDimitry Andric MSAPseudo<(outs ROWD:$wd), (ins ROWS:$ws, ROWT:$wt), 14810b57cec5SDimitry Andric [(set ROWD:$wd, (OpNode ROWS:$ws, ROWT:$wt))]>; 14820b57cec5SDimitry Andric 14830b57cec5SDimitry Andricclass ADD_A_B_DESC : MSA_3R_DESC_BASE<"add_a.b", int_mips_add_a_b, MSA128BOpnd>, 14840b57cec5SDimitry Andric IsCommutable; 14850b57cec5SDimitry Andricclass ADD_A_H_DESC : MSA_3R_DESC_BASE<"add_a.h", int_mips_add_a_h, MSA128HOpnd>, 14860b57cec5SDimitry Andric IsCommutable; 14870b57cec5SDimitry Andricclass ADD_A_W_DESC : MSA_3R_DESC_BASE<"add_a.w", int_mips_add_a_w, MSA128WOpnd>, 14880b57cec5SDimitry Andric IsCommutable; 14890b57cec5SDimitry Andricclass ADD_A_D_DESC : MSA_3R_DESC_BASE<"add_a.d", int_mips_add_a_d, MSA128DOpnd>, 14900b57cec5SDimitry Andric IsCommutable; 14910b57cec5SDimitry Andric 14920b57cec5SDimitry Andricclass ADDS_A_B_DESC : MSA_3R_DESC_BASE<"adds_a.b", int_mips_adds_a_b, 14930b57cec5SDimitry Andric MSA128BOpnd>, IsCommutable; 14940b57cec5SDimitry Andricclass ADDS_A_H_DESC : MSA_3R_DESC_BASE<"adds_a.h", int_mips_adds_a_h, 14950b57cec5SDimitry Andric MSA128HOpnd>, IsCommutable; 14960b57cec5SDimitry Andricclass ADDS_A_W_DESC : MSA_3R_DESC_BASE<"adds_a.w", int_mips_adds_a_w, 14970b57cec5SDimitry Andric MSA128WOpnd>, IsCommutable; 14980b57cec5SDimitry Andricclass ADDS_A_D_DESC : MSA_3R_DESC_BASE<"adds_a.d", int_mips_adds_a_d, 14990b57cec5SDimitry Andric MSA128DOpnd>, IsCommutable; 15000b57cec5SDimitry Andric 15010b57cec5SDimitry Andricclass ADDS_S_B_DESC : MSA_3R_DESC_BASE<"adds_s.b", int_mips_adds_s_b, 15020b57cec5SDimitry Andric MSA128BOpnd>, IsCommutable; 15030b57cec5SDimitry Andricclass ADDS_S_H_DESC : MSA_3R_DESC_BASE<"adds_s.h", int_mips_adds_s_h, 15040b57cec5SDimitry Andric MSA128HOpnd>, IsCommutable; 15050b57cec5SDimitry Andricclass ADDS_S_W_DESC : MSA_3R_DESC_BASE<"adds_s.w", int_mips_adds_s_w, 15060b57cec5SDimitry Andric MSA128WOpnd>, IsCommutable; 15070b57cec5SDimitry Andricclass ADDS_S_D_DESC : MSA_3R_DESC_BASE<"adds_s.d", int_mips_adds_s_d, 15080b57cec5SDimitry Andric MSA128DOpnd>, IsCommutable; 15090b57cec5SDimitry Andric 15100b57cec5SDimitry Andricclass ADDS_U_B_DESC : MSA_3R_DESC_BASE<"adds_u.b", int_mips_adds_u_b, 15110b57cec5SDimitry Andric MSA128BOpnd>, IsCommutable; 15120b57cec5SDimitry Andricclass ADDS_U_H_DESC : MSA_3R_DESC_BASE<"adds_u.h", int_mips_adds_u_h, 15130b57cec5SDimitry Andric MSA128HOpnd>, IsCommutable; 15140b57cec5SDimitry Andricclass ADDS_U_W_DESC : MSA_3R_DESC_BASE<"adds_u.w", int_mips_adds_u_w, 15150b57cec5SDimitry Andric MSA128WOpnd>, IsCommutable; 15160b57cec5SDimitry Andricclass ADDS_U_D_DESC : MSA_3R_DESC_BASE<"adds_u.d", int_mips_adds_u_d, 15170b57cec5SDimitry Andric MSA128DOpnd>, IsCommutable; 15180b57cec5SDimitry Andric 15190b57cec5SDimitry Andricclass ADDV_B_DESC : MSA_3R_DESC_BASE<"addv.b", add, MSA128BOpnd>, IsCommutable; 15200b57cec5SDimitry Andricclass ADDV_H_DESC : MSA_3R_DESC_BASE<"addv.h", add, MSA128HOpnd>, IsCommutable; 15210b57cec5SDimitry Andricclass ADDV_W_DESC : MSA_3R_DESC_BASE<"addv.w", add, MSA128WOpnd>, IsCommutable; 15220b57cec5SDimitry Andricclass ADDV_D_DESC : MSA_3R_DESC_BASE<"addv.d", add, MSA128DOpnd>, IsCommutable; 15230b57cec5SDimitry Andric 15240b57cec5SDimitry Andricclass ADDVI_B_DESC : MSA_I5_DESC_BASE<"addvi.b", add, vsplati8_uimm5, 15250b57cec5SDimitry Andric MSA128BOpnd>; 15260b57cec5SDimitry Andricclass ADDVI_H_DESC : MSA_I5_DESC_BASE<"addvi.h", add, vsplati16_uimm5, 15270b57cec5SDimitry Andric MSA128HOpnd>; 15280b57cec5SDimitry Andricclass ADDVI_W_DESC : MSA_I5_DESC_BASE<"addvi.w", add, vsplati32_uimm5, 15290b57cec5SDimitry Andric MSA128WOpnd>; 15300b57cec5SDimitry Andricclass ADDVI_D_DESC : MSA_I5_DESC_BASE<"addvi.d", add, vsplati64_uimm5, 15310b57cec5SDimitry Andric MSA128DOpnd>; 15320b57cec5SDimitry Andric 15330b57cec5SDimitry Andricclass AND_V_DESC : MSA_VEC_DESC_BASE<"and.v", and, MSA128BOpnd>; 15340b57cec5SDimitry Andricclass AND_V_H_PSEUDO_DESC : MSA_VEC_PSEUDO_BASE<and, MSA128HOpnd>; 15350b57cec5SDimitry Andricclass AND_V_W_PSEUDO_DESC : MSA_VEC_PSEUDO_BASE<and, MSA128WOpnd>; 15360b57cec5SDimitry Andricclass AND_V_D_PSEUDO_DESC : MSA_VEC_PSEUDO_BASE<and, MSA128DOpnd>; 15370b57cec5SDimitry Andric 15380b57cec5SDimitry Andricclass ANDI_B_DESC : MSA_I8_DESC_BASE<"andi.b", and, vsplati8_uimm8, 15390b57cec5SDimitry Andric MSA128BOpnd>; 15400b57cec5SDimitry Andric 15410b57cec5SDimitry Andricclass ASUB_S_B_DESC : MSA_3R_DESC_BASE<"asub_s.b", int_mips_asub_s_b, 15420b57cec5SDimitry Andric MSA128BOpnd>; 15430b57cec5SDimitry Andricclass ASUB_S_H_DESC : MSA_3R_DESC_BASE<"asub_s.h", int_mips_asub_s_h, 15440b57cec5SDimitry Andric MSA128HOpnd>; 15450b57cec5SDimitry Andricclass ASUB_S_W_DESC : MSA_3R_DESC_BASE<"asub_s.w", int_mips_asub_s_w, 15460b57cec5SDimitry Andric MSA128WOpnd>; 15470b57cec5SDimitry Andricclass ASUB_S_D_DESC : MSA_3R_DESC_BASE<"asub_s.d", int_mips_asub_s_d, 15480b57cec5SDimitry Andric MSA128DOpnd>; 15490b57cec5SDimitry Andric 15500b57cec5SDimitry Andricclass ASUB_U_B_DESC : MSA_3R_DESC_BASE<"asub_u.b", int_mips_asub_u_b, 15510b57cec5SDimitry Andric MSA128BOpnd>; 15520b57cec5SDimitry Andricclass ASUB_U_H_DESC : MSA_3R_DESC_BASE<"asub_u.h", int_mips_asub_u_h, 15530b57cec5SDimitry Andric MSA128HOpnd>; 15540b57cec5SDimitry Andricclass ASUB_U_W_DESC : MSA_3R_DESC_BASE<"asub_u.w", int_mips_asub_u_w, 15550b57cec5SDimitry Andric MSA128WOpnd>; 15560b57cec5SDimitry Andricclass ASUB_U_D_DESC : MSA_3R_DESC_BASE<"asub_u.d", int_mips_asub_u_d, 15570b57cec5SDimitry Andric MSA128DOpnd>; 15580b57cec5SDimitry Andric 15590b57cec5SDimitry Andricclass AVE_S_B_DESC : MSA_3R_DESC_BASE<"ave_s.b", int_mips_ave_s_b, MSA128BOpnd>, 15600b57cec5SDimitry Andric IsCommutable; 15610b57cec5SDimitry Andricclass AVE_S_H_DESC : MSA_3R_DESC_BASE<"ave_s.h", int_mips_ave_s_h, MSA128HOpnd>, 15620b57cec5SDimitry Andric IsCommutable; 15630b57cec5SDimitry Andricclass AVE_S_W_DESC : MSA_3R_DESC_BASE<"ave_s.w", int_mips_ave_s_w, MSA128WOpnd>, 15640b57cec5SDimitry Andric IsCommutable; 15650b57cec5SDimitry Andricclass AVE_S_D_DESC : MSA_3R_DESC_BASE<"ave_s.d", int_mips_ave_s_d, MSA128DOpnd>, 15660b57cec5SDimitry Andric IsCommutable; 15670b57cec5SDimitry Andric 15680b57cec5SDimitry Andricclass AVE_U_B_DESC : MSA_3R_DESC_BASE<"ave_u.b", int_mips_ave_u_b, MSA128BOpnd>, 15690b57cec5SDimitry Andric IsCommutable; 15700b57cec5SDimitry Andricclass AVE_U_H_DESC : MSA_3R_DESC_BASE<"ave_u.h", int_mips_ave_u_h, MSA128HOpnd>, 15710b57cec5SDimitry Andric IsCommutable; 15720b57cec5SDimitry Andricclass AVE_U_W_DESC : MSA_3R_DESC_BASE<"ave_u.w", int_mips_ave_u_w, MSA128WOpnd>, 15730b57cec5SDimitry Andric IsCommutable; 15740b57cec5SDimitry Andricclass AVE_U_D_DESC : MSA_3R_DESC_BASE<"ave_u.d", int_mips_ave_u_d, MSA128DOpnd>, 15750b57cec5SDimitry Andric IsCommutable; 15760b57cec5SDimitry Andric 15770b57cec5SDimitry Andricclass AVER_S_B_DESC : MSA_3R_DESC_BASE<"aver_s.b", int_mips_aver_s_b, 15780b57cec5SDimitry Andric MSA128BOpnd>, IsCommutable; 15790b57cec5SDimitry Andricclass AVER_S_H_DESC : MSA_3R_DESC_BASE<"aver_s.h", int_mips_aver_s_h, 15800b57cec5SDimitry Andric MSA128HOpnd>, IsCommutable; 15810b57cec5SDimitry Andricclass AVER_S_W_DESC : MSA_3R_DESC_BASE<"aver_s.w", int_mips_aver_s_w, 15820b57cec5SDimitry Andric MSA128WOpnd>, IsCommutable; 15830b57cec5SDimitry Andricclass AVER_S_D_DESC : MSA_3R_DESC_BASE<"aver_s.d", int_mips_aver_s_d, 15840b57cec5SDimitry Andric MSA128DOpnd>, IsCommutable; 15850b57cec5SDimitry Andric 15860b57cec5SDimitry Andricclass AVER_U_B_DESC : MSA_3R_DESC_BASE<"aver_u.b", int_mips_aver_u_b, 15870b57cec5SDimitry Andric MSA128BOpnd>, IsCommutable; 15880b57cec5SDimitry Andricclass AVER_U_H_DESC : MSA_3R_DESC_BASE<"aver_u.h", int_mips_aver_u_h, 15890b57cec5SDimitry Andric MSA128HOpnd>, IsCommutable; 15900b57cec5SDimitry Andricclass AVER_U_W_DESC : MSA_3R_DESC_BASE<"aver_u.w", int_mips_aver_u_w, 15910b57cec5SDimitry Andric MSA128WOpnd>, IsCommutable; 15920b57cec5SDimitry Andricclass AVER_U_D_DESC : MSA_3R_DESC_BASE<"aver_u.d", int_mips_aver_u_d, 15930b57cec5SDimitry Andric MSA128DOpnd>, IsCommutable; 15940b57cec5SDimitry Andric 15950b57cec5SDimitry Andricclass BCLR_B_DESC : MSA_3R_DESC_BASE<"bclr.b", vbclr_b, MSA128BOpnd>; 15960b57cec5SDimitry Andricclass BCLR_H_DESC : MSA_3R_DESC_BASE<"bclr.h", vbclr_h, MSA128HOpnd>; 15970b57cec5SDimitry Andricclass BCLR_W_DESC : MSA_3R_DESC_BASE<"bclr.w", vbclr_w, MSA128WOpnd>; 15980b57cec5SDimitry Andricclass BCLR_D_DESC : MSA_3R_DESC_BASE<"bclr.d", vbclr_d, MSA128DOpnd>; 15990b57cec5SDimitry Andric 16000b57cec5SDimitry Andricclass BCLRI_B_DESC : MSA_BIT_B_DESC_BASE<"bclri.b", and, vsplat_uimm_inv_pow2, 16010b57cec5SDimitry Andric MSA128BOpnd>; 16020b57cec5SDimitry Andricclass BCLRI_H_DESC : MSA_BIT_H_DESC_BASE<"bclri.h", and, vsplat_uimm_inv_pow2, 16030b57cec5SDimitry Andric MSA128HOpnd>; 16040b57cec5SDimitry Andricclass BCLRI_W_DESC : MSA_BIT_W_DESC_BASE<"bclri.w", and, vsplat_uimm_inv_pow2, 16050b57cec5SDimitry Andric MSA128WOpnd>; 16060b57cec5SDimitry Andricclass BCLRI_D_DESC : MSA_BIT_D_DESC_BASE<"bclri.d", and, vsplat_uimm_inv_pow2, 16070b57cec5SDimitry Andric MSA128DOpnd>; 16080b57cec5SDimitry Andric 16090b57cec5SDimitry Andricclass BINSL_B_DESC : MSA_3R_BINSX_DESC_BASE<"binsl.b", int_mips_binsl_b, 16100b57cec5SDimitry Andric MSA128BOpnd>; 16110b57cec5SDimitry Andricclass BINSL_H_DESC : MSA_3R_BINSX_DESC_BASE<"binsl.h", int_mips_binsl_h, 16120b57cec5SDimitry Andric MSA128HOpnd>; 16130b57cec5SDimitry Andricclass BINSL_W_DESC : MSA_3R_BINSX_DESC_BASE<"binsl.w", int_mips_binsl_w, 16140b57cec5SDimitry Andric MSA128WOpnd>; 16150b57cec5SDimitry Andricclass BINSL_D_DESC : MSA_3R_BINSX_DESC_BASE<"binsl.d", int_mips_binsl_d, 16160b57cec5SDimitry Andric MSA128DOpnd>; 16170b57cec5SDimitry Andric 16180b57cec5SDimitry Andricclass BINSLI_B_DESC : MSA_BIT_BINSLI_DESC_BASE<"binsli.b", v16i8, vsplat_maskl_bits_uimm3, MSA128BOpnd>; 16190b57cec5SDimitry Andricclass BINSLI_H_DESC : MSA_BIT_BINSLI_DESC_BASE<"binsli.h", v8i16, vsplat_maskl_bits_uimm4, MSA128HOpnd>; 16200b57cec5SDimitry Andricclass BINSLI_W_DESC : MSA_BIT_BINSLI_DESC_BASE<"binsli.w", v4i32, vsplat_maskl_bits_uimm5, MSA128WOpnd>; 16210b57cec5SDimitry Andricclass BINSLI_D_DESC : MSA_BIT_BINSLI_DESC_BASE<"binsli.d", v2i64, vsplat_maskl_bits_uimm6, MSA128DOpnd>; 16220b57cec5SDimitry Andric 16230b57cec5SDimitry Andricclass BINSR_B_DESC : MSA_3R_BINSX_DESC_BASE<"binsr.b", int_mips_binsr_b, 16240b57cec5SDimitry Andric MSA128BOpnd>; 16250b57cec5SDimitry Andricclass BINSR_H_DESC : MSA_3R_BINSX_DESC_BASE<"binsr.h", int_mips_binsr_h, 16260b57cec5SDimitry Andric MSA128HOpnd>; 16270b57cec5SDimitry Andricclass BINSR_W_DESC : MSA_3R_BINSX_DESC_BASE<"binsr.w", int_mips_binsr_w, 16280b57cec5SDimitry Andric MSA128WOpnd>; 16290b57cec5SDimitry Andricclass BINSR_D_DESC : MSA_3R_BINSX_DESC_BASE<"binsr.d", int_mips_binsr_d, 16300b57cec5SDimitry Andric MSA128DOpnd>; 16310b57cec5SDimitry Andric 16320b57cec5SDimitry Andricclass BINSRI_B_DESC 16330b57cec5SDimitry Andric : MSA_BIT_BINSRI_DESC_BASE<"binsri.b", v16i8, vsplat_maskr_bits_uimm3, 16340b57cec5SDimitry Andric MSA128BOpnd>; 16350b57cec5SDimitry Andricclass BINSRI_H_DESC 16360b57cec5SDimitry Andric : MSA_BIT_BINSRI_DESC_BASE<"binsri.h", v8i16, vsplat_maskr_bits_uimm4, 16370b57cec5SDimitry Andric MSA128HOpnd>; 16380b57cec5SDimitry Andricclass BINSRI_W_DESC 16390b57cec5SDimitry Andric : MSA_BIT_BINSRI_DESC_BASE<"binsri.w", v4i32, vsplat_maskr_bits_uimm5, 16400b57cec5SDimitry Andric MSA128WOpnd>; 16410b57cec5SDimitry Andricclass BINSRI_D_DESC 16420b57cec5SDimitry Andric : MSA_BIT_BINSRI_DESC_BASE<"binsri.d", v2i64, vsplat_maskr_bits_uimm6, 16430b57cec5SDimitry Andric MSA128DOpnd>; 16440b57cec5SDimitry Andric 16450b57cec5SDimitry Andricclass BMNZ_V_DESC { 16460b57cec5SDimitry Andric dag OutOperandList = (outs MSA128BOpnd:$wd); 16470b57cec5SDimitry Andric dag InOperandList = (ins MSA128BOpnd:$wd_in, MSA128BOpnd:$ws, 16480b57cec5SDimitry Andric MSA128BOpnd:$wt); 16490b57cec5SDimitry Andric string AsmString = "bmnz.v\t$wd, $ws, $wt"; 16500b57cec5SDimitry Andric list<dag> Pattern = [(set MSA128BOpnd:$wd, (vselect MSA128BOpnd:$wt, 16510b57cec5SDimitry Andric MSA128BOpnd:$ws, 16520b57cec5SDimitry Andric MSA128BOpnd:$wd_in))]; 16530b57cec5SDimitry Andric InstrItinClass Itinerary = NoItinerary; 16540b57cec5SDimitry Andric string Constraints = "$wd = $wd_in"; 16550b57cec5SDimitry Andric} 16560b57cec5SDimitry Andric 16570b57cec5SDimitry Andricclass BMNZI_B_DESC { 16580b57cec5SDimitry Andric dag OutOperandList = (outs MSA128BOpnd:$wd); 16590b57cec5SDimitry Andric dag InOperandList = (ins MSA128BOpnd:$wd_in, MSA128BOpnd:$ws, 16600b57cec5SDimitry Andric vsplat_uimm8:$u8); 16610b57cec5SDimitry Andric string AsmString = "bmnzi.b\t$wd, $ws, $u8"; 16620b57cec5SDimitry Andric list<dag> Pattern = [(set MSA128BOpnd:$wd, (vselect vsplati8_uimm8:$u8, 16630b57cec5SDimitry Andric MSA128BOpnd:$ws, 16640b57cec5SDimitry Andric MSA128BOpnd:$wd_in))]; 16650b57cec5SDimitry Andric InstrItinClass Itinerary = NoItinerary; 16660b57cec5SDimitry Andric string Constraints = "$wd = $wd_in"; 16670b57cec5SDimitry Andric} 16680b57cec5SDimitry Andric 16690b57cec5SDimitry Andricclass BMZ_V_DESC { 16700b57cec5SDimitry Andric dag OutOperandList = (outs MSA128BOpnd:$wd); 16710b57cec5SDimitry Andric dag InOperandList = (ins MSA128BOpnd:$wd_in, MSA128BOpnd:$ws, 16720b57cec5SDimitry Andric MSA128BOpnd:$wt); 16730b57cec5SDimitry Andric string AsmString = "bmz.v\t$wd, $ws, $wt"; 16740b57cec5SDimitry Andric list<dag> Pattern = [(set MSA128BOpnd:$wd, (vselect MSA128BOpnd:$wt, 16750b57cec5SDimitry Andric MSA128BOpnd:$wd_in, 16760b57cec5SDimitry Andric MSA128BOpnd:$ws))]; 16770b57cec5SDimitry Andric InstrItinClass Itinerary = NoItinerary; 16780b57cec5SDimitry Andric string Constraints = "$wd = $wd_in"; 16790b57cec5SDimitry Andric} 16800b57cec5SDimitry Andric 16810b57cec5SDimitry Andricclass BMZI_B_DESC { 16820b57cec5SDimitry Andric dag OutOperandList = (outs MSA128BOpnd:$wd); 16830b57cec5SDimitry Andric dag InOperandList = (ins MSA128BOpnd:$wd_in, MSA128BOpnd:$ws, 16840b57cec5SDimitry Andric vsplat_uimm8:$u8); 16850b57cec5SDimitry Andric string AsmString = "bmzi.b\t$wd, $ws, $u8"; 16860b57cec5SDimitry Andric list<dag> Pattern = [(set MSA128BOpnd:$wd, (vselect vsplati8_uimm8:$u8, 16870b57cec5SDimitry Andric MSA128BOpnd:$wd_in, 16880b57cec5SDimitry Andric MSA128BOpnd:$ws))]; 16890b57cec5SDimitry Andric InstrItinClass Itinerary = NoItinerary; 16900b57cec5SDimitry Andric string Constraints = "$wd = $wd_in"; 16910b57cec5SDimitry Andric} 16920b57cec5SDimitry Andric 16930b57cec5SDimitry Andricclass BNEG_B_DESC : MSA_3R_DESC_BASE<"bneg.b", vbneg_b, MSA128BOpnd>; 16940b57cec5SDimitry Andricclass BNEG_H_DESC : MSA_3R_DESC_BASE<"bneg.h", vbneg_h, MSA128HOpnd>; 16950b57cec5SDimitry Andricclass BNEG_W_DESC : MSA_3R_DESC_BASE<"bneg.w", vbneg_w, MSA128WOpnd>; 16960b57cec5SDimitry Andricclass BNEG_D_DESC : MSA_3R_DESC_BASE<"bneg.d", vbneg_d, MSA128DOpnd>; 16970b57cec5SDimitry Andric 16980b57cec5SDimitry Andricclass BNEGI_B_DESC : MSA_BIT_B_DESC_BASE<"bnegi.b", xor, vsplat_uimm_pow2, 16990b57cec5SDimitry Andric MSA128BOpnd>; 17000b57cec5SDimitry Andricclass BNEGI_H_DESC : MSA_BIT_H_DESC_BASE<"bnegi.h", xor, vsplat_uimm_pow2, 17010b57cec5SDimitry Andric MSA128HOpnd>; 17020b57cec5SDimitry Andricclass BNEGI_W_DESC : MSA_BIT_W_DESC_BASE<"bnegi.w", xor, vsplat_uimm_pow2, 17030b57cec5SDimitry Andric MSA128WOpnd>; 17040b57cec5SDimitry Andricclass BNEGI_D_DESC : MSA_BIT_D_DESC_BASE<"bnegi.d", xor, vsplat_uimm_pow2, 17050b57cec5SDimitry Andric MSA128DOpnd>; 17060b57cec5SDimitry Andric 17070b57cec5SDimitry Andricclass BNZ_B_DESC : MSA_CBRANCH_DESC_BASE<"bnz.b", MSA128BOpnd>; 17080b57cec5SDimitry Andricclass BNZ_H_DESC : MSA_CBRANCH_DESC_BASE<"bnz.h", MSA128HOpnd>; 17090b57cec5SDimitry Andricclass BNZ_W_DESC : MSA_CBRANCH_DESC_BASE<"bnz.w", MSA128WOpnd>; 17100b57cec5SDimitry Andricclass BNZ_D_DESC : MSA_CBRANCH_DESC_BASE<"bnz.d", MSA128DOpnd>; 17110b57cec5SDimitry Andric 17120b57cec5SDimitry Andricclass BNZ_V_DESC : MSA_CBRANCH_DESC_BASE<"bnz.v", MSA128BOpnd>; 17130b57cec5SDimitry Andric 17140b57cec5SDimitry Andricclass BSEL_V_DESC { 17150b57cec5SDimitry Andric dag OutOperandList = (outs MSA128BOpnd:$wd); 17160b57cec5SDimitry Andric dag InOperandList = (ins MSA128BOpnd:$wd_in, MSA128BOpnd:$ws, 17170b57cec5SDimitry Andric MSA128BOpnd:$wt); 17180b57cec5SDimitry Andric string AsmString = "bsel.v\t$wd, $ws, $wt"; 17190b57cec5SDimitry Andric // Note that vselect and BSEL_V treat the condition operand the opposite way 17200b57cec5SDimitry Andric // from each other. 17210b57cec5SDimitry Andric // (vselect cond, if_set, if_clear) 17220b57cec5SDimitry Andric // (BSEL_V cond, if_clear, if_set) 17230b57cec5SDimitry Andric list<dag> Pattern = [(set MSA128BOpnd:$wd, 17240b57cec5SDimitry Andric (vselect MSA128BOpnd:$wd_in, MSA128BOpnd:$wt, 17250b57cec5SDimitry Andric MSA128BOpnd:$ws))]; 17260b57cec5SDimitry Andric InstrItinClass Itinerary = NoItinerary; 17270b57cec5SDimitry Andric string Constraints = "$wd = $wd_in"; 17280b57cec5SDimitry Andric} 17290b57cec5SDimitry Andric 17300b57cec5SDimitry Andricclass BSELI_B_DESC { 17310b57cec5SDimitry Andric dag OutOperandList = (outs MSA128BOpnd:$wd); 17320b57cec5SDimitry Andric dag InOperandList = (ins MSA128BOpnd:$wd_in, MSA128BOpnd:$ws, 17330b57cec5SDimitry Andric vsplat_uimm8:$u8); 17340b57cec5SDimitry Andric string AsmString = "bseli.b\t$wd, $ws, $u8"; 17350b57cec5SDimitry Andric // Note that vselect and BSEL_V treat the condition operand the opposite way 17360b57cec5SDimitry Andric // from each other. 17370b57cec5SDimitry Andric // (vselect cond, if_set, if_clear) 17380b57cec5SDimitry Andric // (BSEL_V cond, if_clear, if_set) 17390b57cec5SDimitry Andric list<dag> Pattern = [(set MSA128BOpnd:$wd, (vselect MSA128BOpnd:$wd_in, 17400b57cec5SDimitry Andric vsplati8_uimm8:$u8, 17410b57cec5SDimitry Andric MSA128BOpnd:$ws))]; 17420b57cec5SDimitry Andric InstrItinClass Itinerary = NoItinerary; 17430b57cec5SDimitry Andric string Constraints = "$wd = $wd_in"; 17440b57cec5SDimitry Andric} 17450b57cec5SDimitry Andric 17460b57cec5SDimitry Andricclass BSET_B_DESC : MSA_3R_DESC_BASE<"bset.b", vbset_b, MSA128BOpnd>; 17470b57cec5SDimitry Andricclass BSET_H_DESC : MSA_3R_DESC_BASE<"bset.h", vbset_h, MSA128HOpnd>; 17480b57cec5SDimitry Andricclass BSET_W_DESC : MSA_3R_DESC_BASE<"bset.w", vbset_w, MSA128WOpnd>; 17490b57cec5SDimitry Andricclass BSET_D_DESC : MSA_3R_DESC_BASE<"bset.d", vbset_d, MSA128DOpnd>; 17500b57cec5SDimitry Andric 17510b57cec5SDimitry Andricclass BSETI_B_DESC : MSA_BIT_B_DESC_BASE<"bseti.b", or, vsplat_uimm_pow2, 17520b57cec5SDimitry Andric MSA128BOpnd>; 17530b57cec5SDimitry Andricclass BSETI_H_DESC : MSA_BIT_H_DESC_BASE<"bseti.h", or, vsplat_uimm_pow2, 17540b57cec5SDimitry Andric MSA128HOpnd>; 17550b57cec5SDimitry Andricclass BSETI_W_DESC : MSA_BIT_W_DESC_BASE<"bseti.w", or, vsplat_uimm_pow2, 17560b57cec5SDimitry Andric MSA128WOpnd>; 17570b57cec5SDimitry Andricclass BSETI_D_DESC : MSA_BIT_D_DESC_BASE<"bseti.d", or, vsplat_uimm_pow2, 17580b57cec5SDimitry Andric MSA128DOpnd>; 17590b57cec5SDimitry Andric 17600b57cec5SDimitry Andricclass BZ_B_DESC : MSA_CBRANCH_DESC_BASE<"bz.b", MSA128BOpnd>; 17610b57cec5SDimitry Andricclass BZ_H_DESC : MSA_CBRANCH_DESC_BASE<"bz.h", MSA128HOpnd>; 17620b57cec5SDimitry Andricclass BZ_W_DESC : MSA_CBRANCH_DESC_BASE<"bz.w", MSA128WOpnd>; 17630b57cec5SDimitry Andricclass BZ_D_DESC : MSA_CBRANCH_DESC_BASE<"bz.d", MSA128DOpnd>; 17640b57cec5SDimitry Andric 17650b57cec5SDimitry Andricclass BZ_V_DESC : MSA_CBRANCH_DESC_BASE<"bz.v", MSA128BOpnd>; 17660b57cec5SDimitry Andric 17670b57cec5SDimitry Andricclass CEQ_B_DESC : MSA_3R_DESC_BASE<"ceq.b", vseteq_v16i8, MSA128BOpnd>, 17680b57cec5SDimitry Andric IsCommutable; 17690b57cec5SDimitry Andricclass CEQ_H_DESC : MSA_3R_DESC_BASE<"ceq.h", vseteq_v8i16, MSA128HOpnd>, 17700b57cec5SDimitry Andric IsCommutable; 17710b57cec5SDimitry Andricclass CEQ_W_DESC : MSA_3R_DESC_BASE<"ceq.w", vseteq_v4i32, MSA128WOpnd>, 17720b57cec5SDimitry Andric IsCommutable; 17730b57cec5SDimitry Andricclass CEQ_D_DESC : MSA_3R_DESC_BASE<"ceq.d", vseteq_v2i64, MSA128DOpnd>, 17740b57cec5SDimitry Andric IsCommutable; 17750b57cec5SDimitry Andric 17760b57cec5SDimitry Andricclass CEQI_B_DESC : MSA_I5_DESC_BASE<"ceqi.b", vseteq_v16i8, vsplati8_simm5, 17770b57cec5SDimitry Andric MSA128BOpnd>; 17780b57cec5SDimitry Andricclass CEQI_H_DESC : MSA_I5_DESC_BASE<"ceqi.h", vseteq_v8i16, vsplati16_simm5, 17790b57cec5SDimitry Andric MSA128HOpnd>; 17800b57cec5SDimitry Andricclass CEQI_W_DESC : MSA_I5_DESC_BASE<"ceqi.w", vseteq_v4i32, vsplati32_simm5, 17810b57cec5SDimitry Andric MSA128WOpnd>; 17820b57cec5SDimitry Andricclass CEQI_D_DESC : MSA_I5_DESC_BASE<"ceqi.d", vseteq_v2i64, vsplati64_simm5, 17830b57cec5SDimitry Andric MSA128DOpnd>; 17840b57cec5SDimitry Andric 17850b57cec5SDimitry Andricclass CFCMSA_DESC { 17860b57cec5SDimitry Andric dag OutOperandList = (outs GPR32Opnd:$rd); 17870b57cec5SDimitry Andric dag InOperandList = (ins MSA128CROpnd:$cs); 17880b57cec5SDimitry Andric string AsmString = "cfcmsa\t$rd, $cs"; 17890b57cec5SDimitry Andric InstrItinClass Itinerary = NoItinerary; 17900b57cec5SDimitry Andric bit hasSideEffects = 1; 17910b57cec5SDimitry Andric bit isMoveReg = 1; 17920b57cec5SDimitry Andric} 17930b57cec5SDimitry Andric 17940b57cec5SDimitry Andricclass CLE_S_B_DESC : MSA_3R_DESC_BASE<"cle_s.b", vsetle_v16i8, MSA128BOpnd>; 17950b57cec5SDimitry Andricclass CLE_S_H_DESC : MSA_3R_DESC_BASE<"cle_s.h", vsetle_v8i16, MSA128HOpnd>; 17960b57cec5SDimitry Andricclass CLE_S_W_DESC : MSA_3R_DESC_BASE<"cle_s.w", vsetle_v4i32, MSA128WOpnd>; 17970b57cec5SDimitry Andricclass CLE_S_D_DESC : MSA_3R_DESC_BASE<"cle_s.d", vsetle_v2i64, MSA128DOpnd>; 17980b57cec5SDimitry Andric 17990b57cec5SDimitry Andricclass CLE_U_B_DESC : MSA_3R_DESC_BASE<"cle_u.b", vsetule_v16i8, MSA128BOpnd>; 18000b57cec5SDimitry Andricclass CLE_U_H_DESC : MSA_3R_DESC_BASE<"cle_u.h", vsetule_v8i16, MSA128HOpnd>; 18010b57cec5SDimitry Andricclass CLE_U_W_DESC : MSA_3R_DESC_BASE<"cle_u.w", vsetule_v4i32, MSA128WOpnd>; 18020b57cec5SDimitry Andricclass CLE_U_D_DESC : MSA_3R_DESC_BASE<"cle_u.d", vsetule_v2i64, MSA128DOpnd>; 18030b57cec5SDimitry Andric 18040b57cec5SDimitry Andricclass CLEI_S_B_DESC : MSA_I5_DESC_BASE<"clei_s.b", vsetle_v16i8, 18050b57cec5SDimitry Andric vsplati8_simm5, MSA128BOpnd>; 18060b57cec5SDimitry Andricclass CLEI_S_H_DESC : MSA_I5_DESC_BASE<"clei_s.h", vsetle_v8i16, 18070b57cec5SDimitry Andric vsplati16_simm5, MSA128HOpnd>; 18080b57cec5SDimitry Andricclass CLEI_S_W_DESC : MSA_I5_DESC_BASE<"clei_s.w", vsetle_v4i32, 18090b57cec5SDimitry Andric vsplati32_simm5, MSA128WOpnd>; 18100b57cec5SDimitry Andricclass CLEI_S_D_DESC : MSA_I5_DESC_BASE<"clei_s.d", vsetle_v2i64, 18110b57cec5SDimitry Andric vsplati64_simm5, MSA128DOpnd>; 18120b57cec5SDimitry Andric 18130b57cec5SDimitry Andricclass CLEI_U_B_DESC : MSA_I5_DESC_BASE<"clei_u.b", vsetule_v16i8, 18140b57cec5SDimitry Andric vsplati8_uimm5, MSA128BOpnd>; 18150b57cec5SDimitry Andricclass CLEI_U_H_DESC : MSA_I5_DESC_BASE<"clei_u.h", vsetule_v8i16, 18160b57cec5SDimitry Andric vsplati16_uimm5, MSA128HOpnd>; 18170b57cec5SDimitry Andricclass CLEI_U_W_DESC : MSA_I5_DESC_BASE<"clei_u.w", vsetule_v4i32, 18180b57cec5SDimitry Andric vsplati32_uimm5, MSA128WOpnd>; 18190b57cec5SDimitry Andricclass CLEI_U_D_DESC : MSA_I5_DESC_BASE<"clei_u.d", vsetule_v2i64, 18200b57cec5SDimitry Andric vsplati64_uimm5, MSA128DOpnd>; 18210b57cec5SDimitry Andric 18220b57cec5SDimitry Andricclass CLT_S_B_DESC : MSA_3R_DESC_BASE<"clt_s.b", vsetlt_v16i8, MSA128BOpnd>; 18230b57cec5SDimitry Andricclass CLT_S_H_DESC : MSA_3R_DESC_BASE<"clt_s.h", vsetlt_v8i16, MSA128HOpnd>; 18240b57cec5SDimitry Andricclass CLT_S_W_DESC : MSA_3R_DESC_BASE<"clt_s.w", vsetlt_v4i32, MSA128WOpnd>; 18250b57cec5SDimitry Andricclass CLT_S_D_DESC : MSA_3R_DESC_BASE<"clt_s.d", vsetlt_v2i64, MSA128DOpnd>; 18260b57cec5SDimitry Andric 18270b57cec5SDimitry Andricclass CLT_U_B_DESC : MSA_3R_DESC_BASE<"clt_u.b", vsetult_v16i8, MSA128BOpnd>; 18280b57cec5SDimitry Andricclass CLT_U_H_DESC : MSA_3R_DESC_BASE<"clt_u.h", vsetult_v8i16, MSA128HOpnd>; 18290b57cec5SDimitry Andricclass CLT_U_W_DESC : MSA_3R_DESC_BASE<"clt_u.w", vsetult_v4i32, MSA128WOpnd>; 18300b57cec5SDimitry Andricclass CLT_U_D_DESC : MSA_3R_DESC_BASE<"clt_u.d", vsetult_v2i64, MSA128DOpnd>; 18310b57cec5SDimitry Andric 18320b57cec5SDimitry Andricclass CLTI_S_B_DESC : MSA_I5_DESC_BASE<"clti_s.b", vsetlt_v16i8, 18330b57cec5SDimitry Andric vsplati8_simm5, MSA128BOpnd>; 18340b57cec5SDimitry Andricclass CLTI_S_H_DESC : MSA_I5_DESC_BASE<"clti_s.h", vsetlt_v8i16, 18350b57cec5SDimitry Andric vsplati16_simm5, MSA128HOpnd>; 18360b57cec5SDimitry Andricclass CLTI_S_W_DESC : MSA_I5_DESC_BASE<"clti_s.w", vsetlt_v4i32, 18370b57cec5SDimitry Andric vsplati32_simm5, MSA128WOpnd>; 18380b57cec5SDimitry Andricclass CLTI_S_D_DESC : MSA_I5_DESC_BASE<"clti_s.d", vsetlt_v2i64, 18390b57cec5SDimitry Andric vsplati64_simm5, MSA128DOpnd>; 18400b57cec5SDimitry Andric 18410b57cec5SDimitry Andricclass CLTI_U_B_DESC : MSA_I5_DESC_BASE<"clti_u.b", vsetult_v16i8, 18420b57cec5SDimitry Andric vsplati8_uimm5, MSA128BOpnd>; 18430b57cec5SDimitry Andricclass CLTI_U_H_DESC : MSA_I5_DESC_BASE<"clti_u.h", vsetult_v8i16, 18440b57cec5SDimitry Andric vsplati16_uimm5, MSA128HOpnd>; 18450b57cec5SDimitry Andricclass CLTI_U_W_DESC : MSA_I5_DESC_BASE<"clti_u.w", vsetult_v4i32, 18460b57cec5SDimitry Andric vsplati32_uimm5, MSA128WOpnd>; 18470b57cec5SDimitry Andricclass CLTI_U_D_DESC : MSA_I5_DESC_BASE<"clti_u.d", vsetult_v2i64, 18480b57cec5SDimitry Andric vsplati64_uimm5, MSA128DOpnd>; 18490b57cec5SDimitry Andric 18500b57cec5SDimitry Andricclass COPY_S_B_DESC : MSA_COPY_DESC_BASE<"copy_s.b", vextract_sext_i8, v16i8, 18510b57cec5SDimitry Andric uimm4_ptr, immZExt4Ptr, GPR32Opnd, 18520b57cec5SDimitry Andric MSA128BOpnd>; 18530b57cec5SDimitry Andricclass COPY_S_H_DESC : MSA_COPY_DESC_BASE<"copy_s.h", vextract_sext_i16, v8i16, 18540b57cec5SDimitry Andric uimm3_ptr, immZExt3Ptr, GPR32Opnd, 18550b57cec5SDimitry Andric MSA128HOpnd>; 18560b57cec5SDimitry Andricclass COPY_S_W_DESC : MSA_COPY_DESC_BASE<"copy_s.w", vextract_sext_i32, v4i32, 18570b57cec5SDimitry Andric uimm2_ptr, immZExt2Ptr, GPR32Opnd, 18580b57cec5SDimitry Andric MSA128WOpnd>; 18590b57cec5SDimitry Andricclass COPY_S_D_DESC : MSA_COPY_DESC_BASE<"copy_s.d", vextract_sext_i64, v2i64, 18600b57cec5SDimitry Andric uimm1_ptr, immZExt1Ptr, GPR64Opnd, 18610b57cec5SDimitry Andric MSA128DOpnd>; 18620b57cec5SDimitry Andric 18630b57cec5SDimitry Andricclass COPY_U_B_DESC : MSA_COPY_DESC_BASE<"copy_u.b", vextract_zext_i8, v16i8, 18640b57cec5SDimitry Andric uimm4_ptr, immZExt4Ptr, GPR32Opnd, 18650b57cec5SDimitry Andric MSA128BOpnd>; 18660b57cec5SDimitry Andricclass COPY_U_H_DESC : MSA_COPY_DESC_BASE<"copy_u.h", vextract_zext_i16, v8i16, 18670b57cec5SDimitry Andric uimm3_ptr, immZExt3Ptr, GPR32Opnd, 18680b57cec5SDimitry Andric MSA128HOpnd>; 18690b57cec5SDimitry Andricclass COPY_U_W_DESC : MSA_COPY_DESC_BASE<"copy_u.w", vextract_zext_i32, v4i32, 18700b57cec5SDimitry Andric uimm2_ptr, immZExt2Ptr, GPR32Opnd, 18710b57cec5SDimitry Andric MSA128WOpnd>; 18720b57cec5SDimitry Andric 18730b57cec5SDimitry Andricclass COPY_FW_PSEUDO_DESC : MSA_COPY_PSEUDO_BASE<vector_extract, v4f32, 18740b57cec5SDimitry Andric uimm2_ptr, immZExt2Ptr, FGR32, 18750b57cec5SDimitry Andric MSA128W>; 18760b57cec5SDimitry Andricclass COPY_FD_PSEUDO_DESC : MSA_COPY_PSEUDO_BASE<vector_extract, v2f64, 18770b57cec5SDimitry Andric uimm1_ptr, immZExt1Ptr, FGR64, 18780b57cec5SDimitry Andric MSA128D>; 18790b57cec5SDimitry Andric 18800b57cec5SDimitry Andricclass CTCMSA_DESC { 18810b57cec5SDimitry Andric dag OutOperandList = (outs); 18820b57cec5SDimitry Andric dag InOperandList = (ins MSA128CROpnd:$cd, GPR32Opnd:$rs); 18830b57cec5SDimitry Andric string AsmString = "ctcmsa\t$cd, $rs"; 18840b57cec5SDimitry Andric InstrItinClass Itinerary = NoItinerary; 18850b57cec5SDimitry Andric bit hasSideEffects = 1; 18860b57cec5SDimitry Andric bit isMoveReg = 1; 18870b57cec5SDimitry Andric} 18880b57cec5SDimitry Andric 18890b57cec5SDimitry Andricclass DIV_S_B_DESC : MSA_3R_DESC_BASE<"div_s.b", sdiv, MSA128BOpnd>; 18900b57cec5SDimitry Andricclass DIV_S_H_DESC : MSA_3R_DESC_BASE<"div_s.h", sdiv, MSA128HOpnd>; 18910b57cec5SDimitry Andricclass DIV_S_W_DESC : MSA_3R_DESC_BASE<"div_s.w", sdiv, MSA128WOpnd>; 18920b57cec5SDimitry Andricclass DIV_S_D_DESC : MSA_3R_DESC_BASE<"div_s.d", sdiv, MSA128DOpnd>; 18930b57cec5SDimitry Andric 18940b57cec5SDimitry Andricclass DIV_U_B_DESC : MSA_3R_DESC_BASE<"div_u.b", udiv, MSA128BOpnd>; 18950b57cec5SDimitry Andricclass DIV_U_H_DESC : MSA_3R_DESC_BASE<"div_u.h", udiv, MSA128HOpnd>; 18960b57cec5SDimitry Andricclass DIV_U_W_DESC : MSA_3R_DESC_BASE<"div_u.w", udiv, MSA128WOpnd>; 18970b57cec5SDimitry Andricclass DIV_U_D_DESC : MSA_3R_DESC_BASE<"div_u.d", udiv, MSA128DOpnd>; 18980b57cec5SDimitry Andric 18990b57cec5SDimitry Andricclass DOTP_S_H_DESC : MSA_3R_DESC_BASE<"dotp_s.h", int_mips_dotp_s_h, 19000b57cec5SDimitry Andric MSA128HOpnd, MSA128BOpnd, MSA128BOpnd>, 19010b57cec5SDimitry Andric IsCommutable; 19020b57cec5SDimitry Andricclass DOTP_S_W_DESC : MSA_3R_DESC_BASE<"dotp_s.w", int_mips_dotp_s_w, 19030b57cec5SDimitry Andric MSA128WOpnd, MSA128HOpnd, MSA128HOpnd>, 19040b57cec5SDimitry Andric IsCommutable; 19050b57cec5SDimitry Andricclass DOTP_S_D_DESC : MSA_3R_DESC_BASE<"dotp_s.d", int_mips_dotp_s_d, 19060b57cec5SDimitry Andric MSA128DOpnd, MSA128WOpnd, MSA128WOpnd>, 19070b57cec5SDimitry Andric IsCommutable; 19080b57cec5SDimitry Andric 19090b57cec5SDimitry Andricclass DOTP_U_H_DESC : MSA_3R_DESC_BASE<"dotp_u.h", int_mips_dotp_u_h, 19100b57cec5SDimitry Andric MSA128HOpnd, MSA128BOpnd, MSA128BOpnd>, 19110b57cec5SDimitry Andric IsCommutable; 19120b57cec5SDimitry Andricclass DOTP_U_W_DESC : MSA_3R_DESC_BASE<"dotp_u.w", int_mips_dotp_u_w, 19130b57cec5SDimitry Andric MSA128WOpnd, MSA128HOpnd, MSA128HOpnd>, 19140b57cec5SDimitry Andric IsCommutable; 19150b57cec5SDimitry Andricclass DOTP_U_D_DESC : MSA_3R_DESC_BASE<"dotp_u.d", int_mips_dotp_u_d, 19160b57cec5SDimitry Andric MSA128DOpnd, MSA128WOpnd, MSA128WOpnd>, 19170b57cec5SDimitry Andric IsCommutable; 19180b57cec5SDimitry Andric 19190b57cec5SDimitry Andricclass DPADD_S_H_DESC : MSA_3R_4R_DESC_BASE<"dpadd_s.h", int_mips_dpadd_s_h, 19200b57cec5SDimitry Andric MSA128HOpnd, MSA128BOpnd, 19210b57cec5SDimitry Andric MSA128BOpnd>, IsCommutable; 19220b57cec5SDimitry Andricclass DPADD_S_W_DESC : MSA_3R_4R_DESC_BASE<"dpadd_s.w", int_mips_dpadd_s_w, 19230b57cec5SDimitry Andric MSA128WOpnd, MSA128HOpnd, 19240b57cec5SDimitry Andric MSA128HOpnd>, IsCommutable; 19250b57cec5SDimitry Andricclass DPADD_S_D_DESC : MSA_3R_4R_DESC_BASE<"dpadd_s.d", int_mips_dpadd_s_d, 19260b57cec5SDimitry Andric MSA128DOpnd, MSA128WOpnd, 19270b57cec5SDimitry Andric MSA128WOpnd>, IsCommutable; 19280b57cec5SDimitry Andric 19290b57cec5SDimitry Andricclass DPADD_U_H_DESC : MSA_3R_4R_DESC_BASE<"dpadd_u.h", int_mips_dpadd_u_h, 19300b57cec5SDimitry Andric MSA128HOpnd, MSA128BOpnd, 19310b57cec5SDimitry Andric MSA128BOpnd>, IsCommutable; 19320b57cec5SDimitry Andricclass DPADD_U_W_DESC : MSA_3R_4R_DESC_BASE<"dpadd_u.w", int_mips_dpadd_u_w, 19330b57cec5SDimitry Andric MSA128WOpnd, MSA128HOpnd, 19340b57cec5SDimitry Andric MSA128HOpnd>, IsCommutable; 19350b57cec5SDimitry Andricclass DPADD_U_D_DESC : MSA_3R_4R_DESC_BASE<"dpadd_u.d", int_mips_dpadd_u_d, 19360b57cec5SDimitry Andric MSA128DOpnd, MSA128WOpnd, 19370b57cec5SDimitry Andric MSA128WOpnd>, IsCommutable; 19380b57cec5SDimitry Andric 19390b57cec5SDimitry Andricclass DPSUB_S_H_DESC : MSA_3R_4R_DESC_BASE<"dpsub_s.h", int_mips_dpsub_s_h, 19400b57cec5SDimitry Andric MSA128HOpnd, MSA128BOpnd, 19410b57cec5SDimitry Andric MSA128BOpnd>; 19420b57cec5SDimitry Andricclass DPSUB_S_W_DESC : MSA_3R_4R_DESC_BASE<"dpsub_s.w", int_mips_dpsub_s_w, 19430b57cec5SDimitry Andric MSA128WOpnd, MSA128HOpnd, 19440b57cec5SDimitry Andric MSA128HOpnd>; 19450b57cec5SDimitry Andricclass DPSUB_S_D_DESC : MSA_3R_4R_DESC_BASE<"dpsub_s.d", int_mips_dpsub_s_d, 19460b57cec5SDimitry Andric MSA128DOpnd, MSA128WOpnd, 19470b57cec5SDimitry Andric MSA128WOpnd>; 19480b57cec5SDimitry Andric 19490b57cec5SDimitry Andricclass DPSUB_U_H_DESC : MSA_3R_4R_DESC_BASE<"dpsub_u.h", int_mips_dpsub_u_h, 19500b57cec5SDimitry Andric MSA128HOpnd, MSA128BOpnd, 19510b57cec5SDimitry Andric MSA128BOpnd>; 19520b57cec5SDimitry Andricclass DPSUB_U_W_DESC : MSA_3R_4R_DESC_BASE<"dpsub_u.w", int_mips_dpsub_u_w, 19530b57cec5SDimitry Andric MSA128WOpnd, MSA128HOpnd, 19540b57cec5SDimitry Andric MSA128HOpnd>; 19550b57cec5SDimitry Andricclass DPSUB_U_D_DESC : MSA_3R_4R_DESC_BASE<"dpsub_u.d", int_mips_dpsub_u_d, 19560b57cec5SDimitry Andric MSA128DOpnd, MSA128WOpnd, 19570b57cec5SDimitry Andric MSA128WOpnd>; 19580b57cec5SDimitry Andric 19590b57cec5SDimitry Andricclass FADD_W_DESC : MSA_3RF_DESC_BASE<"fadd.w", fadd, MSA128WOpnd>, 19600b57cec5SDimitry Andric IsCommutable; 19610b57cec5SDimitry Andricclass FADD_D_DESC : MSA_3RF_DESC_BASE<"fadd.d", fadd, MSA128DOpnd>, 19620b57cec5SDimitry Andric IsCommutable; 19630b57cec5SDimitry Andric 19640b57cec5SDimitry Andricclass FCAF_W_DESC : MSA_3RF_DESC_BASE<"fcaf.w", int_mips_fcaf_w, MSA128WOpnd>, 19650b57cec5SDimitry Andric IsCommutable; 19660b57cec5SDimitry Andricclass FCAF_D_DESC : MSA_3RF_DESC_BASE<"fcaf.d", int_mips_fcaf_d, MSA128DOpnd>, 19670b57cec5SDimitry Andric IsCommutable; 19680b57cec5SDimitry Andric 19690b57cec5SDimitry Andricclass FCEQ_W_DESC : MSA_3RF_DESC_BASE<"fceq.w", vfsetoeq_v4f32, MSA128WOpnd>, 19700b57cec5SDimitry Andric IsCommutable; 19710b57cec5SDimitry Andricclass FCEQ_D_DESC : MSA_3RF_DESC_BASE<"fceq.d", vfsetoeq_v2f64, MSA128DOpnd>, 19720b57cec5SDimitry Andric IsCommutable; 19730b57cec5SDimitry Andric 19740b57cec5SDimitry Andricclass FCLASS_W_DESC : MSA_2RF_DESC_BASE<"fclass.w", int_mips_fclass_w, 19750b57cec5SDimitry Andric MSA128WOpnd>; 19760b57cec5SDimitry Andricclass FCLASS_D_DESC : MSA_2RF_DESC_BASE<"fclass.d", int_mips_fclass_d, 19770b57cec5SDimitry Andric MSA128DOpnd>; 19780b57cec5SDimitry Andric 19790b57cec5SDimitry Andricclass FCLE_W_DESC : MSA_3RF_DESC_BASE<"fcle.w", vfsetole_v4f32, MSA128WOpnd>; 19800b57cec5SDimitry Andricclass FCLE_D_DESC : MSA_3RF_DESC_BASE<"fcle.d", vfsetole_v2f64, MSA128DOpnd>; 19810b57cec5SDimitry Andric 19820b57cec5SDimitry Andricclass FCLT_W_DESC : MSA_3RF_DESC_BASE<"fclt.w", vfsetolt_v4f32, MSA128WOpnd>; 19830b57cec5SDimitry Andricclass FCLT_D_DESC : MSA_3RF_DESC_BASE<"fclt.d", vfsetolt_v2f64, MSA128DOpnd>; 19840b57cec5SDimitry Andric 19850b57cec5SDimitry Andricclass FCNE_W_DESC : MSA_3RF_DESC_BASE<"fcne.w", vfsetone_v4f32, MSA128WOpnd>, 19860b57cec5SDimitry Andric IsCommutable; 19870b57cec5SDimitry Andricclass FCNE_D_DESC : MSA_3RF_DESC_BASE<"fcne.d", vfsetone_v2f64, MSA128DOpnd>, 19880b57cec5SDimitry Andric IsCommutable; 19890b57cec5SDimitry Andric 19900b57cec5SDimitry Andricclass FCOR_W_DESC : MSA_3RF_DESC_BASE<"fcor.w", vfsetord_v4f32, MSA128WOpnd>, 19910b57cec5SDimitry Andric IsCommutable; 19920b57cec5SDimitry Andricclass FCOR_D_DESC : MSA_3RF_DESC_BASE<"fcor.d", vfsetord_v2f64, MSA128DOpnd>, 19930b57cec5SDimitry Andric IsCommutable; 19940b57cec5SDimitry Andric 19950b57cec5SDimitry Andricclass FCUEQ_W_DESC : MSA_3RF_DESC_BASE<"fcueq.w", vfsetueq_v4f32, MSA128WOpnd>, 19960b57cec5SDimitry Andric IsCommutable; 19970b57cec5SDimitry Andricclass FCUEQ_D_DESC : MSA_3RF_DESC_BASE<"fcueq.d", vfsetueq_v2f64, MSA128DOpnd>, 19980b57cec5SDimitry Andric IsCommutable; 19990b57cec5SDimitry Andric 20000b57cec5SDimitry Andricclass FCULE_W_DESC : MSA_3RF_DESC_BASE<"fcule.w", vfsetule_v4f32, MSA128WOpnd>, 20010b57cec5SDimitry Andric IsCommutable; 20020b57cec5SDimitry Andricclass FCULE_D_DESC : MSA_3RF_DESC_BASE<"fcule.d", vfsetule_v2f64, MSA128DOpnd>, 20030b57cec5SDimitry Andric IsCommutable; 20040b57cec5SDimitry Andric 20050b57cec5SDimitry Andricclass FCULT_W_DESC : MSA_3RF_DESC_BASE<"fcult.w", vfsetult_v4f32, MSA128WOpnd>, 20060b57cec5SDimitry Andric IsCommutable; 20070b57cec5SDimitry Andricclass FCULT_D_DESC : MSA_3RF_DESC_BASE<"fcult.d", vfsetult_v2f64, MSA128DOpnd>, 20080b57cec5SDimitry Andric IsCommutable; 20090b57cec5SDimitry Andric 20100b57cec5SDimitry Andricclass FCUN_W_DESC : MSA_3RF_DESC_BASE<"fcun.w", vfsetun_v4f32, MSA128WOpnd>, 20110b57cec5SDimitry Andric IsCommutable; 20120b57cec5SDimitry Andricclass FCUN_D_DESC : MSA_3RF_DESC_BASE<"fcun.d", vfsetun_v2f64, MSA128DOpnd>, 20130b57cec5SDimitry Andric IsCommutable; 20140b57cec5SDimitry Andric 20150b57cec5SDimitry Andricclass FCUNE_W_DESC : MSA_3RF_DESC_BASE<"fcune.w", vfsetune_v4f32, MSA128WOpnd>, 20160b57cec5SDimitry Andric IsCommutable; 20170b57cec5SDimitry Andricclass FCUNE_D_DESC : MSA_3RF_DESC_BASE<"fcune.d", vfsetune_v2f64, MSA128DOpnd>, 20180b57cec5SDimitry Andric IsCommutable; 20190b57cec5SDimitry Andric 20200b57cec5SDimitry Andricclass FDIV_W_DESC : MSA_3RF_DESC_BASE<"fdiv.w", fdiv, MSA128WOpnd>; 20210b57cec5SDimitry Andricclass FDIV_D_DESC : MSA_3RF_DESC_BASE<"fdiv.d", fdiv, MSA128DOpnd>; 20220b57cec5SDimitry Andric 20230b57cec5SDimitry Andricclass FEXDO_H_DESC : MSA_3RF_DESC_BASE<"fexdo.h", int_mips_fexdo_h, 20240b57cec5SDimitry Andric MSA128HOpnd, MSA128WOpnd, MSA128WOpnd>; 20250b57cec5SDimitry Andricclass FEXDO_W_DESC : MSA_3RF_DESC_BASE<"fexdo.w", int_mips_fexdo_w, 20260b57cec5SDimitry Andric MSA128WOpnd, MSA128DOpnd, MSA128DOpnd>; 20270b57cec5SDimitry Andric 20280b57cec5SDimitry Andric// The fexp2.df instruction multiplies the first operand by 2 to the power of 20290b57cec5SDimitry Andric// the second operand. We therefore need a pseudo-insn in order to invent the 20300b57cec5SDimitry Andric// 1.0 when we only need to match ISD::FEXP2. 20310b57cec5SDimitry Andricclass FEXP2_W_DESC : MSA_3RF_DESC_BASE<"fexp2.w", mul_fexp2, MSA128WOpnd>; 20320b57cec5SDimitry Andricclass FEXP2_D_DESC : MSA_3RF_DESC_BASE<"fexp2.d", mul_fexp2, MSA128DOpnd>; 20330b57cec5SDimitry Andriclet usesCustomInserter = 1, hasNoSchedulingInfo = 1 in { 20340b57cec5SDimitry Andric class FEXP2_W_1_PSEUDO_DESC : 20350b57cec5SDimitry Andric MSAPseudo<(outs MSA128W:$wd), (ins MSA128W:$ws), 20360b57cec5SDimitry Andric [(set MSA128W:$wd, (fexp2 MSA128W:$ws))]>; 20370b57cec5SDimitry Andric class FEXP2_D_1_PSEUDO_DESC : 20380b57cec5SDimitry Andric MSAPseudo<(outs MSA128D:$wd), (ins MSA128D:$ws), 20390b57cec5SDimitry Andric [(set MSA128D:$wd, (fexp2 MSA128D:$ws))]>; 20400b57cec5SDimitry Andric} 20410b57cec5SDimitry Andric 20420b57cec5SDimitry Andricclass FEXUPL_W_DESC : MSA_2RF_DESC_BASE<"fexupl.w", int_mips_fexupl_w, 20430b57cec5SDimitry Andric MSA128WOpnd, MSA128HOpnd>; 20440b57cec5SDimitry Andricclass FEXUPL_D_DESC : MSA_2RF_DESC_BASE<"fexupl.d", int_mips_fexupl_d, 20450b57cec5SDimitry Andric MSA128DOpnd, MSA128WOpnd>; 20460b57cec5SDimitry Andric 20470b57cec5SDimitry Andricclass FEXUPR_W_DESC : MSA_2RF_DESC_BASE<"fexupr.w", int_mips_fexupr_w, 20480b57cec5SDimitry Andric MSA128WOpnd, MSA128HOpnd>; 20490b57cec5SDimitry Andricclass FEXUPR_D_DESC : MSA_2RF_DESC_BASE<"fexupr.d", int_mips_fexupr_d, 20500b57cec5SDimitry Andric MSA128DOpnd, MSA128WOpnd>; 20510b57cec5SDimitry Andric 20520b57cec5SDimitry Andricclass FFINT_S_W_DESC : MSA_2RF_DESC_BASE<"ffint_s.w", sint_to_fp, MSA128WOpnd>; 20530b57cec5SDimitry Andricclass FFINT_S_D_DESC : MSA_2RF_DESC_BASE<"ffint_s.d", sint_to_fp, MSA128DOpnd>; 20540b57cec5SDimitry Andric 20550b57cec5SDimitry Andricclass FFINT_U_W_DESC : MSA_2RF_DESC_BASE<"ffint_u.w", uint_to_fp, MSA128WOpnd>; 20560b57cec5SDimitry Andricclass FFINT_U_D_DESC : MSA_2RF_DESC_BASE<"ffint_u.d", uint_to_fp, MSA128DOpnd>; 20570b57cec5SDimitry Andric 20580b57cec5SDimitry Andricclass FFQL_W_DESC : MSA_2RF_DESC_BASE<"ffql.w", int_mips_ffql_w, 20590b57cec5SDimitry Andric MSA128WOpnd, MSA128HOpnd>; 20600b57cec5SDimitry Andricclass FFQL_D_DESC : MSA_2RF_DESC_BASE<"ffql.d", int_mips_ffql_d, 20610b57cec5SDimitry Andric MSA128DOpnd, MSA128WOpnd>; 20620b57cec5SDimitry Andric 20630b57cec5SDimitry Andricclass FFQR_W_DESC : MSA_2RF_DESC_BASE<"ffqr.w", int_mips_ffqr_w, 20640b57cec5SDimitry Andric MSA128WOpnd, MSA128HOpnd>; 20650b57cec5SDimitry Andricclass FFQR_D_DESC : MSA_2RF_DESC_BASE<"ffqr.d", int_mips_ffqr_d, 20660b57cec5SDimitry Andric MSA128DOpnd, MSA128WOpnd>; 20670b57cec5SDimitry Andric 20680b57cec5SDimitry Andricclass FILL_B_DESC : MSA_2R_FILL_DESC_BASE<"fill.b", v16i8, vsplati8, 20690b57cec5SDimitry Andric MSA128BOpnd, GPR32Opnd>; 20700b57cec5SDimitry Andricclass FILL_H_DESC : MSA_2R_FILL_DESC_BASE<"fill.h", v8i16, vsplati16, 20710b57cec5SDimitry Andric MSA128HOpnd, GPR32Opnd>; 20720b57cec5SDimitry Andricclass FILL_W_DESC : MSA_2R_FILL_DESC_BASE<"fill.w", v4i32, vsplati32, 20730b57cec5SDimitry Andric MSA128WOpnd, GPR32Opnd>; 20740b57cec5SDimitry Andricclass FILL_D_DESC : MSA_2R_FILL_DESC_BASE<"fill.d", v2i64, vsplati64, 20750b57cec5SDimitry Andric MSA128DOpnd, GPR64Opnd>; 20760b57cec5SDimitry Andric 2077349cc55cSDimitry Andricclass FILL_FW_PSEUDO_DESC : MSA_2R_FILL_PSEUDO_BASE<vsplatf32, MSA128W, FGR32>; 2078349cc55cSDimitry Andricclass FILL_FD_PSEUDO_DESC : MSA_2R_FILL_PSEUDO_BASE<vsplatf64, MSA128D, FGR64>; 20790b57cec5SDimitry Andric 20800b57cec5SDimitry Andricclass FLOG2_W_DESC : MSA_2RF_DESC_BASE<"flog2.w", flog2, MSA128WOpnd>; 20810b57cec5SDimitry Andricclass FLOG2_D_DESC : MSA_2RF_DESC_BASE<"flog2.d", flog2, MSA128DOpnd>; 20820b57cec5SDimitry Andric 20830b57cec5SDimitry Andricclass FMADD_W_DESC : MSA_3RF_4RF_DESC_BASE<"fmadd.w", fma, MSA128WOpnd>; 20840b57cec5SDimitry Andricclass FMADD_D_DESC : MSA_3RF_4RF_DESC_BASE<"fmadd.d", fma, MSA128DOpnd>; 20850b57cec5SDimitry Andric 20860b57cec5SDimitry Andricclass FMAX_W_DESC : MSA_3RF_DESC_BASE<"fmax.w", int_mips_fmax_w, MSA128WOpnd>; 20870b57cec5SDimitry Andricclass FMAX_D_DESC : MSA_3RF_DESC_BASE<"fmax.d", int_mips_fmax_d, MSA128DOpnd>; 20880b57cec5SDimitry Andric 20890b57cec5SDimitry Andricclass FMAX_A_W_DESC : MSA_3RF_DESC_BASE<"fmax_a.w", int_mips_fmax_a_w, 20900b57cec5SDimitry Andric MSA128WOpnd>; 20910b57cec5SDimitry Andricclass FMAX_A_D_DESC : MSA_3RF_DESC_BASE<"fmax_a.d", int_mips_fmax_a_d, 20920b57cec5SDimitry Andric MSA128DOpnd>; 20930b57cec5SDimitry Andric 20940b57cec5SDimitry Andricclass FMIN_W_DESC : MSA_3RF_DESC_BASE<"fmin.w", int_mips_fmin_w, MSA128WOpnd>; 20950b57cec5SDimitry Andricclass FMIN_D_DESC : MSA_3RF_DESC_BASE<"fmin.d", int_mips_fmin_d, MSA128DOpnd>; 20960b57cec5SDimitry Andric 20970b57cec5SDimitry Andricclass FMIN_A_W_DESC : MSA_3RF_DESC_BASE<"fmin_a.w", int_mips_fmin_a_w, 20980b57cec5SDimitry Andric MSA128WOpnd>; 20990b57cec5SDimitry Andricclass FMIN_A_D_DESC : MSA_3RF_DESC_BASE<"fmin_a.d", int_mips_fmin_a_d, 21000b57cec5SDimitry Andric MSA128DOpnd>; 21010b57cec5SDimitry Andric 21020b57cec5SDimitry Andricclass FMSUB_W_DESC : MSA_3RF_4RF_DESC_BASE<"fmsub.w", MipsFMS, MSA128WOpnd>; 21030b57cec5SDimitry Andricclass FMSUB_D_DESC : MSA_3RF_4RF_DESC_BASE<"fmsub.d", MipsFMS, MSA128DOpnd>; 21040b57cec5SDimitry Andric 21050b57cec5SDimitry Andricclass FMUL_W_DESC : MSA_3RF_DESC_BASE<"fmul.w", fmul, MSA128WOpnd>; 21060b57cec5SDimitry Andricclass FMUL_D_DESC : MSA_3RF_DESC_BASE<"fmul.d", fmul, MSA128DOpnd>; 21070b57cec5SDimitry Andric 21080b57cec5SDimitry Andricclass FRINT_W_DESC : MSA_2RF_DESC_BASE<"frint.w", frint, MSA128WOpnd>; 21090b57cec5SDimitry Andricclass FRINT_D_DESC : MSA_2RF_DESC_BASE<"frint.d", frint, MSA128DOpnd>; 21100b57cec5SDimitry Andric 21110b57cec5SDimitry Andricclass FRCP_W_DESC : MSA_2RF_DESC_BASE<"frcp.w", int_mips_frcp_w, MSA128WOpnd>; 21120b57cec5SDimitry Andricclass FRCP_D_DESC : MSA_2RF_DESC_BASE<"frcp.d", int_mips_frcp_d, MSA128DOpnd>; 21130b57cec5SDimitry Andric 21140b57cec5SDimitry Andricclass FRSQRT_W_DESC : MSA_2RF_DESC_BASE<"frsqrt.w", int_mips_frsqrt_w, 21150b57cec5SDimitry Andric MSA128WOpnd>; 21160b57cec5SDimitry Andricclass FRSQRT_D_DESC : MSA_2RF_DESC_BASE<"frsqrt.d", int_mips_frsqrt_d, 21170b57cec5SDimitry Andric MSA128DOpnd>; 21180b57cec5SDimitry Andric 21190b57cec5SDimitry Andricclass FSAF_W_DESC : MSA_3RF_DESC_BASE<"fsaf.w", int_mips_fsaf_w, MSA128WOpnd>; 21200b57cec5SDimitry Andricclass FSAF_D_DESC : MSA_3RF_DESC_BASE<"fsaf.d", int_mips_fsaf_d, MSA128DOpnd>; 21210b57cec5SDimitry Andric 21220b57cec5SDimitry Andricclass FSEQ_W_DESC : MSA_3RF_DESC_BASE<"fseq.w", int_mips_fseq_w, MSA128WOpnd>; 21230b57cec5SDimitry Andricclass FSEQ_D_DESC : MSA_3RF_DESC_BASE<"fseq.d", int_mips_fseq_d, MSA128DOpnd>; 21240b57cec5SDimitry Andric 21250b57cec5SDimitry Andricclass FSLE_W_DESC : MSA_3RF_DESC_BASE<"fsle.w", int_mips_fsle_w, MSA128WOpnd>; 21260b57cec5SDimitry Andricclass FSLE_D_DESC : MSA_3RF_DESC_BASE<"fsle.d", int_mips_fsle_d, MSA128DOpnd>; 21270b57cec5SDimitry Andric 21280b57cec5SDimitry Andricclass FSLT_W_DESC : MSA_3RF_DESC_BASE<"fslt.w", int_mips_fslt_w, MSA128WOpnd>; 21290b57cec5SDimitry Andricclass FSLT_D_DESC : MSA_3RF_DESC_BASE<"fslt.d", int_mips_fslt_d, MSA128DOpnd>; 21300b57cec5SDimitry Andric 21310b57cec5SDimitry Andricclass FSNE_W_DESC : MSA_3RF_DESC_BASE<"fsne.w", int_mips_fsne_w, MSA128WOpnd>; 21320b57cec5SDimitry Andricclass FSNE_D_DESC : MSA_3RF_DESC_BASE<"fsne.d", int_mips_fsne_d, MSA128DOpnd>; 21330b57cec5SDimitry Andric 21340b57cec5SDimitry Andricclass FSOR_W_DESC : MSA_3RF_DESC_BASE<"fsor.w", int_mips_fsor_w, MSA128WOpnd>; 21350b57cec5SDimitry Andricclass FSOR_D_DESC : MSA_3RF_DESC_BASE<"fsor.d", int_mips_fsor_d, MSA128DOpnd>; 21360b57cec5SDimitry Andric 21370b57cec5SDimitry Andricclass FSQRT_W_DESC : MSA_2RF_DESC_BASE<"fsqrt.w", fsqrt, MSA128WOpnd>; 21380b57cec5SDimitry Andricclass FSQRT_D_DESC : MSA_2RF_DESC_BASE<"fsqrt.d", fsqrt, MSA128DOpnd>; 21390b57cec5SDimitry Andric 21400b57cec5SDimitry Andricclass FSUB_W_DESC : MSA_3RF_DESC_BASE<"fsub.w", fsub, MSA128WOpnd>; 21410b57cec5SDimitry Andricclass FSUB_D_DESC : MSA_3RF_DESC_BASE<"fsub.d", fsub, MSA128DOpnd>; 21420b57cec5SDimitry Andric 21430b57cec5SDimitry Andricclass FSUEQ_W_DESC : MSA_3RF_DESC_BASE<"fsueq.w", int_mips_fsueq_w, 21440b57cec5SDimitry Andric MSA128WOpnd>; 21450b57cec5SDimitry Andricclass FSUEQ_D_DESC : MSA_3RF_DESC_BASE<"fsueq.d", int_mips_fsueq_d, 21460b57cec5SDimitry Andric MSA128DOpnd>; 21470b57cec5SDimitry Andric 21480b57cec5SDimitry Andricclass FSULE_W_DESC : MSA_3RF_DESC_BASE<"fsule.w", int_mips_fsule_w, 21490b57cec5SDimitry Andric MSA128WOpnd>; 21500b57cec5SDimitry Andricclass FSULE_D_DESC : MSA_3RF_DESC_BASE<"fsule.d", int_mips_fsule_d, 21510b57cec5SDimitry Andric MSA128DOpnd>; 21520b57cec5SDimitry Andric 21530b57cec5SDimitry Andricclass FSULT_W_DESC : MSA_3RF_DESC_BASE<"fsult.w", int_mips_fsult_w, 21540b57cec5SDimitry Andric MSA128WOpnd>; 21550b57cec5SDimitry Andricclass FSULT_D_DESC : MSA_3RF_DESC_BASE<"fsult.d", int_mips_fsult_d, 21560b57cec5SDimitry Andric MSA128DOpnd>; 21570b57cec5SDimitry Andric 21580b57cec5SDimitry Andricclass FSUN_W_DESC : MSA_3RF_DESC_BASE<"fsun.w", int_mips_fsun_w, 21590b57cec5SDimitry Andric MSA128WOpnd>; 21600b57cec5SDimitry Andricclass FSUN_D_DESC : MSA_3RF_DESC_BASE<"fsun.d", int_mips_fsun_d, 21610b57cec5SDimitry Andric MSA128DOpnd>; 21620b57cec5SDimitry Andric 21630b57cec5SDimitry Andricclass FSUNE_W_DESC : MSA_3RF_DESC_BASE<"fsune.w", int_mips_fsune_w, 21640b57cec5SDimitry Andric MSA128WOpnd>; 21650b57cec5SDimitry Andricclass FSUNE_D_DESC : MSA_3RF_DESC_BASE<"fsune.d", int_mips_fsune_d, 21660b57cec5SDimitry Andric MSA128DOpnd>; 21670b57cec5SDimitry Andric 21680b57cec5SDimitry Andricclass FTINT_S_W_DESC : MSA_2RF_DESC_BASE<"ftint_s.w", int_mips_ftint_s_w, 21690b57cec5SDimitry Andric MSA128WOpnd>; 21700b57cec5SDimitry Andricclass FTINT_S_D_DESC : MSA_2RF_DESC_BASE<"ftint_s.d", int_mips_ftint_s_d, 21710b57cec5SDimitry Andric MSA128DOpnd>; 21720b57cec5SDimitry Andric 21730b57cec5SDimitry Andricclass FTINT_U_W_DESC : MSA_2RF_DESC_BASE<"ftint_u.w", int_mips_ftint_u_w, 21740b57cec5SDimitry Andric MSA128WOpnd>; 21750b57cec5SDimitry Andricclass FTINT_U_D_DESC : MSA_2RF_DESC_BASE<"ftint_u.d", int_mips_ftint_u_d, 21760b57cec5SDimitry Andric MSA128DOpnd>; 21770b57cec5SDimitry Andric 21780b57cec5SDimitry Andricclass FTQ_H_DESC : MSA_3RF_DESC_BASE<"ftq.h", int_mips_ftq_h, 21790b57cec5SDimitry Andric MSA128HOpnd, MSA128WOpnd, MSA128WOpnd>; 21800b57cec5SDimitry Andricclass FTQ_W_DESC : MSA_3RF_DESC_BASE<"ftq.w", int_mips_ftq_w, 21810b57cec5SDimitry Andric MSA128WOpnd, MSA128DOpnd, MSA128DOpnd>; 21820b57cec5SDimitry Andric 21830b57cec5SDimitry Andricclass FTRUNC_S_W_DESC : MSA_2RF_DESC_BASE<"ftrunc_s.w", fp_to_sint, 21840b57cec5SDimitry Andric MSA128WOpnd>; 21850b57cec5SDimitry Andricclass FTRUNC_S_D_DESC : MSA_2RF_DESC_BASE<"ftrunc_s.d", fp_to_sint, 21860b57cec5SDimitry Andric MSA128DOpnd>; 21870b57cec5SDimitry Andric 21880b57cec5SDimitry Andricclass FTRUNC_U_W_DESC : MSA_2RF_DESC_BASE<"ftrunc_u.w", fp_to_uint, 21890b57cec5SDimitry Andric MSA128WOpnd>; 21900b57cec5SDimitry Andricclass FTRUNC_U_D_DESC : MSA_2RF_DESC_BASE<"ftrunc_u.d", fp_to_uint, 21910b57cec5SDimitry Andric MSA128DOpnd>; 21920b57cec5SDimitry Andric 21930b57cec5SDimitry Andricclass HADD_S_H_DESC : MSA_3R_DESC_BASE<"hadd_s.h", int_mips_hadd_s_h, 21940b57cec5SDimitry Andric MSA128HOpnd, MSA128BOpnd, MSA128BOpnd>; 21950b57cec5SDimitry Andricclass HADD_S_W_DESC : MSA_3R_DESC_BASE<"hadd_s.w", int_mips_hadd_s_w, 21960b57cec5SDimitry Andric MSA128WOpnd, MSA128HOpnd, MSA128HOpnd>; 21970b57cec5SDimitry Andricclass HADD_S_D_DESC : MSA_3R_DESC_BASE<"hadd_s.d", int_mips_hadd_s_d, 21980b57cec5SDimitry Andric MSA128DOpnd, MSA128WOpnd, MSA128WOpnd>; 21990b57cec5SDimitry Andric 22000b57cec5SDimitry Andricclass HADD_U_H_DESC : MSA_3R_DESC_BASE<"hadd_u.h", int_mips_hadd_u_h, 22010b57cec5SDimitry Andric MSA128HOpnd, MSA128BOpnd, MSA128BOpnd>; 22020b57cec5SDimitry Andricclass HADD_U_W_DESC : MSA_3R_DESC_BASE<"hadd_u.w", int_mips_hadd_u_w, 22030b57cec5SDimitry Andric MSA128WOpnd, MSA128HOpnd, MSA128HOpnd>; 22040b57cec5SDimitry Andricclass HADD_U_D_DESC : MSA_3R_DESC_BASE<"hadd_u.d", int_mips_hadd_u_d, 22050b57cec5SDimitry Andric MSA128DOpnd, MSA128WOpnd, MSA128WOpnd>; 22060b57cec5SDimitry Andric 22070b57cec5SDimitry Andricclass HSUB_S_H_DESC : MSA_3R_DESC_BASE<"hsub_s.h", int_mips_hsub_s_h, 22080b57cec5SDimitry Andric MSA128HOpnd, MSA128BOpnd, MSA128BOpnd>; 22090b57cec5SDimitry Andricclass HSUB_S_W_DESC : MSA_3R_DESC_BASE<"hsub_s.w", int_mips_hsub_s_w, 22100b57cec5SDimitry Andric MSA128WOpnd, MSA128HOpnd, MSA128HOpnd>; 22110b57cec5SDimitry Andricclass HSUB_S_D_DESC : MSA_3R_DESC_BASE<"hsub_s.d", int_mips_hsub_s_d, 22120b57cec5SDimitry Andric MSA128DOpnd, MSA128WOpnd, MSA128WOpnd>; 22130b57cec5SDimitry Andric 22140b57cec5SDimitry Andricclass HSUB_U_H_DESC : MSA_3R_DESC_BASE<"hsub_u.h", int_mips_hsub_u_h, 22150b57cec5SDimitry Andric MSA128HOpnd, MSA128BOpnd, MSA128BOpnd>; 22160b57cec5SDimitry Andricclass HSUB_U_W_DESC : MSA_3R_DESC_BASE<"hsub_u.w", int_mips_hsub_u_w, 22170b57cec5SDimitry Andric MSA128WOpnd, MSA128HOpnd, MSA128HOpnd>; 22180b57cec5SDimitry Andricclass HSUB_U_D_DESC : MSA_3R_DESC_BASE<"hsub_u.d", int_mips_hsub_u_d, 22190b57cec5SDimitry Andric MSA128DOpnd, MSA128WOpnd, MSA128WOpnd>; 22200b57cec5SDimitry Andric 22210b57cec5SDimitry Andricclass ILVEV_B_DESC : MSA_3R_DESC_BASE<"ilvev.b", MipsILVEV, MSA128BOpnd>; 22220b57cec5SDimitry Andricclass ILVEV_H_DESC : MSA_3R_DESC_BASE<"ilvev.h", MipsILVEV, MSA128HOpnd>; 22230b57cec5SDimitry Andricclass ILVEV_W_DESC : MSA_3R_DESC_BASE<"ilvev.w", MipsILVEV, MSA128WOpnd>; 22240b57cec5SDimitry Andricclass ILVEV_D_DESC : MSA_3R_DESC_BASE<"ilvev.d", MipsILVEV, MSA128DOpnd>; 22250b57cec5SDimitry Andric 22260b57cec5SDimitry Andricclass ILVL_B_DESC : MSA_3R_DESC_BASE<"ilvl.b", MipsILVL, MSA128BOpnd>; 22270b57cec5SDimitry Andricclass ILVL_H_DESC : MSA_3R_DESC_BASE<"ilvl.h", MipsILVL, MSA128HOpnd>; 22280b57cec5SDimitry Andricclass ILVL_W_DESC : MSA_3R_DESC_BASE<"ilvl.w", MipsILVL, MSA128WOpnd>; 22290b57cec5SDimitry Andricclass ILVL_D_DESC : MSA_3R_DESC_BASE<"ilvl.d", MipsILVL, MSA128DOpnd>; 22300b57cec5SDimitry Andric 22310b57cec5SDimitry Andricclass ILVOD_B_DESC : MSA_3R_DESC_BASE<"ilvod.b", MipsILVOD, MSA128BOpnd>; 22320b57cec5SDimitry Andricclass ILVOD_H_DESC : MSA_3R_DESC_BASE<"ilvod.h", MipsILVOD, MSA128HOpnd>; 22330b57cec5SDimitry Andricclass ILVOD_W_DESC : MSA_3R_DESC_BASE<"ilvod.w", MipsILVOD, MSA128WOpnd>; 22340b57cec5SDimitry Andricclass ILVOD_D_DESC : MSA_3R_DESC_BASE<"ilvod.d", MipsILVOD, MSA128DOpnd>; 22350b57cec5SDimitry Andric 22360b57cec5SDimitry Andricclass ILVR_B_DESC : MSA_3R_DESC_BASE<"ilvr.b", MipsILVR, MSA128BOpnd>; 22370b57cec5SDimitry Andricclass ILVR_H_DESC : MSA_3R_DESC_BASE<"ilvr.h", MipsILVR, MSA128HOpnd>; 22380b57cec5SDimitry Andricclass ILVR_W_DESC : MSA_3R_DESC_BASE<"ilvr.w", MipsILVR, MSA128WOpnd>; 22390b57cec5SDimitry Andricclass ILVR_D_DESC : MSA_3R_DESC_BASE<"ilvr.d", MipsILVR, MSA128DOpnd>; 22400b57cec5SDimitry Andric 22410b57cec5SDimitry Andricclass INSERT_B_DESC : MSA_INSERT_DESC_BASE<"insert.b", vinsert_v16i8, uimm4, 22420b57cec5SDimitry Andric immZExt4Ptr, MSA128BOpnd, GPR32Opnd>; 22430b57cec5SDimitry Andricclass INSERT_H_DESC : MSA_INSERT_DESC_BASE<"insert.h", vinsert_v8i16, uimm3, 22440b57cec5SDimitry Andric immZExt3Ptr, MSA128HOpnd, GPR32Opnd>; 22450b57cec5SDimitry Andricclass INSERT_W_DESC : MSA_INSERT_DESC_BASE<"insert.w", vinsert_v4i32, uimm2, 22460b57cec5SDimitry Andric immZExt2Ptr, MSA128WOpnd, GPR32Opnd>; 22470b57cec5SDimitry Andricclass INSERT_D_DESC : MSA_INSERT_DESC_BASE<"insert.d", vinsert_v2i64, uimm1, 22480b57cec5SDimitry Andric immZExt1Ptr, MSA128DOpnd, GPR64Opnd>; 22490b57cec5SDimitry Andric 22500b57cec5SDimitry Andricclass INSERT_B_VIDX_PSEUDO_DESC : 22510b57cec5SDimitry Andric MSA_INSERT_VIDX_PSEUDO_BASE<vector_insert, v16i8, MSA128BOpnd, GPR32Opnd, GPR32Opnd>; 22520b57cec5SDimitry Andricclass INSERT_H_VIDX_PSEUDO_DESC : 22530b57cec5SDimitry Andric MSA_INSERT_VIDX_PSEUDO_BASE<vector_insert, v8i16, MSA128HOpnd, GPR32Opnd, GPR32Opnd>; 22540b57cec5SDimitry Andricclass INSERT_W_VIDX_PSEUDO_DESC : 22550b57cec5SDimitry Andric MSA_INSERT_VIDX_PSEUDO_BASE<vector_insert, v4i32, MSA128WOpnd, GPR32Opnd, GPR32Opnd>; 22560b57cec5SDimitry Andricclass INSERT_D_VIDX_PSEUDO_DESC : 22570b57cec5SDimitry Andric MSA_INSERT_VIDX_PSEUDO_BASE<vector_insert, v2i64, MSA128DOpnd, GPR64Opnd, GPR32Opnd>; 22580b57cec5SDimitry Andric 22590b57cec5SDimitry Andricclass INSERT_FW_PSEUDO_DESC : MSA_INSERT_PSEUDO_BASE<vector_insert, v4f32, 22600b57cec5SDimitry Andric uimm2, immZExt2Ptr, 22610b57cec5SDimitry Andric MSA128WOpnd, FGR32Opnd>; 22620b57cec5SDimitry Andricclass INSERT_FD_PSEUDO_DESC : MSA_INSERT_PSEUDO_BASE<vector_insert, v2f64, 22630b57cec5SDimitry Andric uimm1, immZExt1Ptr, 22640b57cec5SDimitry Andric MSA128DOpnd, FGR64Opnd>; 22650b57cec5SDimitry Andric 22660b57cec5SDimitry Andricclass INSERT_FW_VIDX_PSEUDO_DESC : 22670b57cec5SDimitry Andric MSA_INSERT_VIDX_PSEUDO_BASE<vector_insert, v4f32, MSA128WOpnd, FGR32Opnd, GPR32Opnd>; 22680b57cec5SDimitry Andricclass INSERT_FD_VIDX_PSEUDO_DESC : 22690b57cec5SDimitry Andric MSA_INSERT_VIDX_PSEUDO_BASE<vector_insert, v2f64, MSA128DOpnd, FGR64Opnd, GPR32Opnd>; 22700b57cec5SDimitry Andric 22710b57cec5SDimitry Andricclass INSERT_B_VIDX64_PSEUDO_DESC : 22720b57cec5SDimitry Andric MSA_INSERT_VIDX_PSEUDO_BASE<vector_insert, v16i8, MSA128BOpnd, GPR32Opnd, GPR64Opnd>; 22730b57cec5SDimitry Andricclass INSERT_H_VIDX64_PSEUDO_DESC : 22740b57cec5SDimitry Andric MSA_INSERT_VIDX_PSEUDO_BASE<vector_insert, v8i16, MSA128HOpnd, GPR32Opnd, GPR64Opnd>; 22750b57cec5SDimitry Andricclass INSERT_W_VIDX64_PSEUDO_DESC : 22760b57cec5SDimitry Andric MSA_INSERT_VIDX_PSEUDO_BASE<vector_insert, v4i32, MSA128WOpnd, GPR32Opnd, GPR64Opnd>; 22770b57cec5SDimitry Andricclass INSERT_D_VIDX64_PSEUDO_DESC : 22780b57cec5SDimitry Andric MSA_INSERT_VIDX_PSEUDO_BASE<vector_insert, v2i64, MSA128DOpnd, GPR64Opnd, GPR64Opnd>; 22790b57cec5SDimitry Andric 22800b57cec5SDimitry Andricclass INSERT_FW_VIDX64_PSEUDO_DESC : 22810b57cec5SDimitry Andric MSA_INSERT_VIDX_PSEUDO_BASE<vector_insert, v4f32, MSA128WOpnd, FGR32Opnd, GPR64Opnd>; 22820b57cec5SDimitry Andricclass INSERT_FD_VIDX64_PSEUDO_DESC : 22830b57cec5SDimitry Andric MSA_INSERT_VIDX_PSEUDO_BASE<vector_insert, v2f64, MSA128DOpnd, FGR64Opnd, GPR64Opnd>; 22840b57cec5SDimitry Andric 22858bcb0991SDimitry Andricclass INSVE_B_DESC : MSA_INSVE_DESC_BASE<"insve.b", insve_v16i8, uimm4, timmZExt4, 22860b57cec5SDimitry Andric MSA128BOpnd>; 22878bcb0991SDimitry Andricclass INSVE_H_DESC : MSA_INSVE_DESC_BASE<"insve.h", insve_v8i16, uimm3, timmZExt3, 22880b57cec5SDimitry Andric MSA128HOpnd>; 22898bcb0991SDimitry Andricclass INSVE_W_DESC : MSA_INSVE_DESC_BASE<"insve.w", insve_v4i32, uimm2, timmZExt2, 22900b57cec5SDimitry Andric MSA128WOpnd>; 22918bcb0991SDimitry Andricclass INSVE_D_DESC : MSA_INSVE_DESC_BASE<"insve.d", insve_v2i64, uimm1, timmZExt1, 22920b57cec5SDimitry Andric MSA128DOpnd>; 22930b57cec5SDimitry Andric 22940b57cec5SDimitry Andricclass LD_DESC_BASE<string instr_asm, SDPatternOperator OpNode, 22950b57cec5SDimitry Andric ValueType TyNode, RegisterOperand ROWD, 22960b57cec5SDimitry Andric Operand MemOpnd, ComplexPattern Addr = addrimm10, 22970b57cec5SDimitry Andric InstrItinClass itin = NoItinerary> { 22980b57cec5SDimitry Andric dag OutOperandList = (outs ROWD:$wd); 22990b57cec5SDimitry Andric dag InOperandList = (ins MemOpnd:$addr); 23000b57cec5SDimitry Andric string AsmString = !strconcat(instr_asm, "\t$wd, $addr"); 23010b57cec5SDimitry Andric list<dag> Pattern = [(set ROWD:$wd, (TyNode (OpNode Addr:$addr)))]; 23020b57cec5SDimitry Andric InstrItinClass Itinerary = itin; 23030b57cec5SDimitry Andric string DecoderMethod = "DecodeMSA128Mem"; 23040b57cec5SDimitry Andric} 23050b57cec5SDimitry Andric 23060b57cec5SDimitry Andricclass LD_B_DESC : LD_DESC_BASE<"ld.b", load, v16i8, MSA128BOpnd, mem_simm10>; 23070b57cec5SDimitry Andricclass LD_H_DESC : LD_DESC_BASE<"ld.h", load, v8i16, MSA128HOpnd, 23080b57cec5SDimitry Andric mem_simm10_lsl1, addrimm10lsl1>; 23090b57cec5SDimitry Andricclass LD_W_DESC : LD_DESC_BASE<"ld.w", load, v4i32, MSA128WOpnd, 23100b57cec5SDimitry Andric mem_simm10_lsl2, addrimm10lsl2>; 23110b57cec5SDimitry Andricclass LD_D_DESC : LD_DESC_BASE<"ld.d", load, v2i64, MSA128DOpnd, 23120b57cec5SDimitry Andric mem_simm10_lsl3, addrimm10lsl3>; 23130b57cec5SDimitry Andric 23140b57cec5SDimitry Andricclass LDI_B_DESC : MSA_I10_LDI_DESC_BASE<"ldi.b", MSA128BOpnd>; 23150b57cec5SDimitry Andricclass LDI_H_DESC : MSA_I10_LDI_DESC_BASE<"ldi.h", MSA128HOpnd>; 23160b57cec5SDimitry Andricclass LDI_W_DESC : MSA_I10_LDI_DESC_BASE<"ldi.w", MSA128WOpnd>; 23170b57cec5SDimitry Andricclass LDI_D_DESC : MSA_I10_LDI_DESC_BASE<"ldi.d", MSA128DOpnd>; 23180b57cec5SDimitry Andric 23195ffd83dbSDimitry Andricclass MSA_LOAD_PSEUDO_BASE<SDPatternOperator intrinsic, RegisterOperand RO> : 23205ffd83dbSDimitry Andric PseudoSE<(outs RO:$dst), (ins PtrRC:$ptr, GPR32:$imm), 23215ffd83dbSDimitry Andric [(set RO:$dst, (intrinsic iPTR:$ptr, GPR32:$imm))]> { 23225ffd83dbSDimitry Andric let hasNoSchedulingInfo = 1; 23235ffd83dbSDimitry Andric let usesCustomInserter = 1; 23245ffd83dbSDimitry Andric} 23255ffd83dbSDimitry Andric 23265ffd83dbSDimitry Andricdef LDR_D : MSA_LOAD_PSEUDO_BASE<int_mips_ldr_d, MSA128DOpnd>; 23275ffd83dbSDimitry Andricdef LDR_W : MSA_LOAD_PSEUDO_BASE<int_mips_ldr_w, MSA128WOpnd>; 23285ffd83dbSDimitry Andric 23290b57cec5SDimitry Andricclass LSA_DESC_BASE<string instr_asm, RegisterOperand RORD, 23300b57cec5SDimitry Andric InstrItinClass itin = NoItinerary> { 23310b57cec5SDimitry Andric dag OutOperandList = (outs RORD:$rd); 23320b57cec5SDimitry Andric dag InOperandList = (ins RORD:$rs, RORD:$rt, uimm2_plus1:$sa); 23330b57cec5SDimitry Andric string AsmString = !strconcat(instr_asm, "\t$rd, $rs, $rt, $sa"); 23340b57cec5SDimitry Andric list<dag> Pattern = [(set RORD:$rd, (add RORD:$rt, 23350b57cec5SDimitry Andric (shl RORD:$rs, 23360b57cec5SDimitry Andric immZExt2Lsa:$sa)))]; 23370b57cec5SDimitry Andric InstrItinClass Itinerary = itin; 23380b57cec5SDimitry Andric} 23390b57cec5SDimitry Andric 23400b57cec5SDimitry Andricclass LSA_DESC : LSA_DESC_BASE<"lsa", GPR32Opnd, II_LSA>; 23410b57cec5SDimitry Andricclass DLSA_DESC : LSA_DESC_BASE<"dlsa", GPR64Opnd, II_DLSA>; 23420b57cec5SDimitry Andric 23430b57cec5SDimitry Andricclass MADD_Q_H_DESC : MSA_3RF_4RF_DESC_BASE<"madd_q.h", int_mips_madd_q_h, 23440b57cec5SDimitry Andric MSA128HOpnd>; 23450b57cec5SDimitry Andricclass MADD_Q_W_DESC : MSA_3RF_4RF_DESC_BASE<"madd_q.w", int_mips_madd_q_w, 23460b57cec5SDimitry Andric MSA128WOpnd>; 23470b57cec5SDimitry Andric 23480b57cec5SDimitry Andricclass MADDR_Q_H_DESC : MSA_3RF_4RF_DESC_BASE<"maddr_q.h", int_mips_maddr_q_h, 23490b57cec5SDimitry Andric MSA128HOpnd>; 23500b57cec5SDimitry Andricclass MADDR_Q_W_DESC : MSA_3RF_4RF_DESC_BASE<"maddr_q.w", int_mips_maddr_q_w, 23510b57cec5SDimitry Andric MSA128WOpnd>; 23520b57cec5SDimitry Andric 23530b57cec5SDimitry Andricclass MADDV_B_DESC : MSA_3R_4R_DESC_BASE<"maddv.b", muladd, MSA128BOpnd>; 23540b57cec5SDimitry Andricclass MADDV_H_DESC : MSA_3R_4R_DESC_BASE<"maddv.h", muladd, MSA128HOpnd>; 23550b57cec5SDimitry Andricclass MADDV_W_DESC : MSA_3R_4R_DESC_BASE<"maddv.w", muladd, MSA128WOpnd>; 23560b57cec5SDimitry Andricclass MADDV_D_DESC : MSA_3R_4R_DESC_BASE<"maddv.d", muladd, MSA128DOpnd>; 23570b57cec5SDimitry Andric 23580b57cec5SDimitry Andricclass MAX_A_B_DESC : MSA_3R_DESC_BASE<"max_a.b", int_mips_max_a_b, MSA128BOpnd>; 23590b57cec5SDimitry Andricclass MAX_A_H_DESC : MSA_3R_DESC_BASE<"max_a.h", int_mips_max_a_h, MSA128HOpnd>; 23600b57cec5SDimitry Andricclass MAX_A_W_DESC : MSA_3R_DESC_BASE<"max_a.w", int_mips_max_a_w, MSA128WOpnd>; 23610b57cec5SDimitry Andricclass MAX_A_D_DESC : MSA_3R_DESC_BASE<"max_a.d", int_mips_max_a_d, MSA128DOpnd>; 23620b57cec5SDimitry Andric 23630b57cec5SDimitry Andricclass MAX_S_B_DESC : MSA_3R_DESC_BASE<"max_s.b", smax, MSA128BOpnd>; 23640b57cec5SDimitry Andricclass MAX_S_H_DESC : MSA_3R_DESC_BASE<"max_s.h", smax, MSA128HOpnd>; 23650b57cec5SDimitry Andricclass MAX_S_W_DESC : MSA_3R_DESC_BASE<"max_s.w", smax, MSA128WOpnd>; 23660b57cec5SDimitry Andricclass MAX_S_D_DESC : MSA_3R_DESC_BASE<"max_s.d", smax, MSA128DOpnd>; 23670b57cec5SDimitry Andric 23680b57cec5SDimitry Andricclass MAX_U_B_DESC : MSA_3R_DESC_BASE<"max_u.b", umax, MSA128BOpnd>; 23690b57cec5SDimitry Andricclass MAX_U_H_DESC : MSA_3R_DESC_BASE<"max_u.h", umax, MSA128HOpnd>; 23700b57cec5SDimitry Andricclass MAX_U_W_DESC : MSA_3R_DESC_BASE<"max_u.w", umax, MSA128WOpnd>; 23710b57cec5SDimitry Andricclass MAX_U_D_DESC : MSA_3R_DESC_BASE<"max_u.d", umax, MSA128DOpnd>; 23720b57cec5SDimitry Andric 23730b57cec5SDimitry Andricclass MAXI_S_B_DESC : MSA_I5_DESC_BASE<"maxi_s.b", smax, vsplati8_simm5, 23740b57cec5SDimitry Andric MSA128BOpnd>; 23750b57cec5SDimitry Andricclass MAXI_S_H_DESC : MSA_I5_DESC_BASE<"maxi_s.h", smax, vsplati16_simm5, 23760b57cec5SDimitry Andric MSA128HOpnd>; 23770b57cec5SDimitry Andricclass MAXI_S_W_DESC : MSA_I5_DESC_BASE<"maxi_s.w", smax, vsplati32_simm5, 23780b57cec5SDimitry Andric MSA128WOpnd>; 23790b57cec5SDimitry Andricclass MAXI_S_D_DESC : MSA_I5_DESC_BASE<"maxi_s.d", smax, vsplati64_simm5, 23800b57cec5SDimitry Andric MSA128DOpnd>; 23810b57cec5SDimitry Andric 23820b57cec5SDimitry Andricclass MAXI_U_B_DESC : MSA_I5_DESC_BASE<"maxi_u.b", umax, vsplati8_uimm5, 23830b57cec5SDimitry Andric MSA128BOpnd>; 23840b57cec5SDimitry Andricclass MAXI_U_H_DESC : MSA_I5_DESC_BASE<"maxi_u.h", umax, vsplati16_uimm5, 23850b57cec5SDimitry Andric MSA128HOpnd>; 23860b57cec5SDimitry Andricclass MAXI_U_W_DESC : MSA_I5_DESC_BASE<"maxi_u.w", umax, vsplati32_uimm5, 23870b57cec5SDimitry Andric MSA128WOpnd>; 23880b57cec5SDimitry Andricclass MAXI_U_D_DESC : MSA_I5_DESC_BASE<"maxi_u.d", umax, vsplati64_uimm5, 23890b57cec5SDimitry Andric MSA128DOpnd>; 23900b57cec5SDimitry Andric 23910b57cec5SDimitry Andricclass MIN_A_B_DESC : MSA_3R_DESC_BASE<"min_a.b", int_mips_min_a_b, MSA128BOpnd>; 23920b57cec5SDimitry Andricclass MIN_A_H_DESC : MSA_3R_DESC_BASE<"min_a.h", int_mips_min_a_h, MSA128HOpnd>; 23930b57cec5SDimitry Andricclass MIN_A_W_DESC : MSA_3R_DESC_BASE<"min_a.w", int_mips_min_a_w, MSA128WOpnd>; 23940b57cec5SDimitry Andricclass MIN_A_D_DESC : MSA_3R_DESC_BASE<"min_a.d", int_mips_min_a_d, MSA128DOpnd>; 23950b57cec5SDimitry Andric 23960b57cec5SDimitry Andricclass MIN_S_B_DESC : MSA_3R_DESC_BASE<"min_s.b", smin, MSA128BOpnd>; 23970b57cec5SDimitry Andricclass MIN_S_H_DESC : MSA_3R_DESC_BASE<"min_s.h", smin, MSA128HOpnd>; 23980b57cec5SDimitry Andricclass MIN_S_W_DESC : MSA_3R_DESC_BASE<"min_s.w", smin, MSA128WOpnd>; 23990b57cec5SDimitry Andricclass MIN_S_D_DESC : MSA_3R_DESC_BASE<"min_s.d", smin, MSA128DOpnd>; 24000b57cec5SDimitry Andric 24010b57cec5SDimitry Andricclass MIN_U_B_DESC : MSA_3R_DESC_BASE<"min_u.b", umin, MSA128BOpnd>; 24020b57cec5SDimitry Andricclass MIN_U_H_DESC : MSA_3R_DESC_BASE<"min_u.h", umin, MSA128HOpnd>; 24030b57cec5SDimitry Andricclass MIN_U_W_DESC : MSA_3R_DESC_BASE<"min_u.w", umin, MSA128WOpnd>; 24040b57cec5SDimitry Andricclass MIN_U_D_DESC : MSA_3R_DESC_BASE<"min_u.d", umin, MSA128DOpnd>; 24050b57cec5SDimitry Andric 24060b57cec5SDimitry Andricclass MINI_S_B_DESC : MSA_I5_DESC_BASE<"mini_s.b", smin, vsplati8_simm5, 24070b57cec5SDimitry Andric MSA128BOpnd>; 24080b57cec5SDimitry Andricclass MINI_S_H_DESC : MSA_I5_DESC_BASE<"mini_s.h", smin, vsplati16_simm5, 24090b57cec5SDimitry Andric MSA128HOpnd>; 24100b57cec5SDimitry Andricclass MINI_S_W_DESC : MSA_I5_DESC_BASE<"mini_s.w", smin, vsplati32_simm5, 24110b57cec5SDimitry Andric MSA128WOpnd>; 24120b57cec5SDimitry Andricclass MINI_S_D_DESC : MSA_I5_DESC_BASE<"mini_s.d", smin, vsplati64_simm5, 24130b57cec5SDimitry Andric MSA128DOpnd>; 24140b57cec5SDimitry Andric 24150b57cec5SDimitry Andricclass MINI_U_B_DESC : MSA_I5_DESC_BASE<"mini_u.b", umin, vsplati8_uimm5, 24160b57cec5SDimitry Andric MSA128BOpnd>; 24170b57cec5SDimitry Andricclass MINI_U_H_DESC : MSA_I5_DESC_BASE<"mini_u.h", umin, vsplati16_uimm5, 24180b57cec5SDimitry Andric MSA128HOpnd>; 24190b57cec5SDimitry Andricclass MINI_U_W_DESC : MSA_I5_DESC_BASE<"mini_u.w", umin, vsplati32_uimm5, 24200b57cec5SDimitry Andric MSA128WOpnd>; 24210b57cec5SDimitry Andricclass MINI_U_D_DESC : MSA_I5_DESC_BASE<"mini_u.d", umin, vsplati64_uimm5, 24220b57cec5SDimitry Andric MSA128DOpnd>; 24230b57cec5SDimitry Andric 24240b57cec5SDimitry Andricclass MOD_S_B_DESC : MSA_3R_DESC_BASE<"mod_s.b", srem, MSA128BOpnd>; 24250b57cec5SDimitry Andricclass MOD_S_H_DESC : MSA_3R_DESC_BASE<"mod_s.h", srem, MSA128HOpnd>; 24260b57cec5SDimitry Andricclass MOD_S_W_DESC : MSA_3R_DESC_BASE<"mod_s.w", srem, MSA128WOpnd>; 24270b57cec5SDimitry Andricclass MOD_S_D_DESC : MSA_3R_DESC_BASE<"mod_s.d", srem, MSA128DOpnd>; 24280b57cec5SDimitry Andric 24290b57cec5SDimitry Andricclass MOD_U_B_DESC : MSA_3R_DESC_BASE<"mod_u.b", urem, MSA128BOpnd>; 24300b57cec5SDimitry Andricclass MOD_U_H_DESC : MSA_3R_DESC_BASE<"mod_u.h", urem, MSA128HOpnd>; 24310b57cec5SDimitry Andricclass MOD_U_W_DESC : MSA_3R_DESC_BASE<"mod_u.w", urem, MSA128WOpnd>; 24320b57cec5SDimitry Andricclass MOD_U_D_DESC : MSA_3R_DESC_BASE<"mod_u.d", urem, MSA128DOpnd>; 24330b57cec5SDimitry Andric 24340b57cec5SDimitry Andricclass MOVE_V_DESC { 24350b57cec5SDimitry Andric dag OutOperandList = (outs MSA128BOpnd:$wd); 24360b57cec5SDimitry Andric dag InOperandList = (ins MSA128BOpnd:$ws); 24370b57cec5SDimitry Andric string AsmString = "move.v\t$wd, $ws"; 24380b57cec5SDimitry Andric list<dag> Pattern = []; 24390b57cec5SDimitry Andric InstrItinClass Itinerary = NoItinerary; 24400b57cec5SDimitry Andric bit isMoveReg = 1; 24410b57cec5SDimitry Andric} 24420b57cec5SDimitry Andric 24430b57cec5SDimitry Andricclass MSUB_Q_H_DESC : MSA_3RF_4RF_DESC_BASE<"msub_q.h", int_mips_msub_q_h, 24440b57cec5SDimitry Andric MSA128HOpnd>; 24450b57cec5SDimitry Andricclass MSUB_Q_W_DESC : MSA_3RF_4RF_DESC_BASE<"msub_q.w", int_mips_msub_q_w, 24460b57cec5SDimitry Andric MSA128WOpnd>; 24470b57cec5SDimitry Andric 24480b57cec5SDimitry Andricclass MSUBR_Q_H_DESC : MSA_3RF_4RF_DESC_BASE<"msubr_q.h", int_mips_msubr_q_h, 24490b57cec5SDimitry Andric MSA128HOpnd>; 24500b57cec5SDimitry Andricclass MSUBR_Q_W_DESC : MSA_3RF_4RF_DESC_BASE<"msubr_q.w", int_mips_msubr_q_w, 24510b57cec5SDimitry Andric MSA128WOpnd>; 24520b57cec5SDimitry Andric 24530b57cec5SDimitry Andricclass MSUBV_B_DESC : MSA_3R_4R_DESC_BASE<"msubv.b", mulsub, MSA128BOpnd>; 24540b57cec5SDimitry Andricclass MSUBV_H_DESC : MSA_3R_4R_DESC_BASE<"msubv.h", mulsub, MSA128HOpnd>; 24550b57cec5SDimitry Andricclass MSUBV_W_DESC : MSA_3R_4R_DESC_BASE<"msubv.w", mulsub, MSA128WOpnd>; 24560b57cec5SDimitry Andricclass MSUBV_D_DESC : MSA_3R_4R_DESC_BASE<"msubv.d", mulsub, MSA128DOpnd>; 24570b57cec5SDimitry Andric 24580b57cec5SDimitry Andricclass MUL_Q_H_DESC : MSA_3RF_DESC_BASE<"mul_q.h", int_mips_mul_q_h, 24590b57cec5SDimitry Andric MSA128HOpnd>; 24600b57cec5SDimitry Andricclass MUL_Q_W_DESC : MSA_3RF_DESC_BASE<"mul_q.w", int_mips_mul_q_w, 24610b57cec5SDimitry Andric MSA128WOpnd>; 24620b57cec5SDimitry Andric 24630b57cec5SDimitry Andricclass MULR_Q_H_DESC : MSA_3RF_DESC_BASE<"mulr_q.h", int_mips_mulr_q_h, 24640b57cec5SDimitry Andric MSA128HOpnd>; 24650b57cec5SDimitry Andricclass MULR_Q_W_DESC : MSA_3RF_DESC_BASE<"mulr_q.w", int_mips_mulr_q_w, 24660b57cec5SDimitry Andric MSA128WOpnd>; 24670b57cec5SDimitry Andric 24680b57cec5SDimitry Andricclass MULV_B_DESC : MSA_3R_DESC_BASE<"mulv.b", mul, MSA128BOpnd>; 24690b57cec5SDimitry Andricclass MULV_H_DESC : MSA_3R_DESC_BASE<"mulv.h", mul, MSA128HOpnd>; 24700b57cec5SDimitry Andricclass MULV_W_DESC : MSA_3R_DESC_BASE<"mulv.w", mul, MSA128WOpnd>; 24710b57cec5SDimitry Andricclass MULV_D_DESC : MSA_3R_DESC_BASE<"mulv.d", mul, MSA128DOpnd>; 24720b57cec5SDimitry Andric 24730b57cec5SDimitry Andricclass NLOC_B_DESC : MSA_2R_DESC_BASE<"nloc.b", int_mips_nloc_b, MSA128BOpnd>; 24740b57cec5SDimitry Andricclass NLOC_H_DESC : MSA_2R_DESC_BASE<"nloc.h", int_mips_nloc_h, MSA128HOpnd>; 24750b57cec5SDimitry Andricclass NLOC_W_DESC : MSA_2R_DESC_BASE<"nloc.w", int_mips_nloc_w, MSA128WOpnd>; 24760b57cec5SDimitry Andricclass NLOC_D_DESC : MSA_2R_DESC_BASE<"nloc.d", int_mips_nloc_d, MSA128DOpnd>; 24770b57cec5SDimitry Andric 24780b57cec5SDimitry Andricclass NLZC_B_DESC : MSA_2R_DESC_BASE<"nlzc.b", ctlz, MSA128BOpnd>; 24790b57cec5SDimitry Andricclass NLZC_H_DESC : MSA_2R_DESC_BASE<"nlzc.h", ctlz, MSA128HOpnd>; 24800b57cec5SDimitry Andricclass NLZC_W_DESC : MSA_2R_DESC_BASE<"nlzc.w", ctlz, MSA128WOpnd>; 24810b57cec5SDimitry Andricclass NLZC_D_DESC : MSA_2R_DESC_BASE<"nlzc.d", ctlz, MSA128DOpnd>; 24820b57cec5SDimitry Andric 24830b57cec5SDimitry Andricclass NOR_V_DESC : MSA_VEC_DESC_BASE<"nor.v", MipsVNOR, MSA128BOpnd>; 24840b57cec5SDimitry Andricclass NOR_V_H_PSEUDO_DESC : MSA_VEC_PSEUDO_BASE<MipsVNOR, MSA128HOpnd>; 24850b57cec5SDimitry Andricclass NOR_V_W_PSEUDO_DESC : MSA_VEC_PSEUDO_BASE<MipsVNOR, MSA128WOpnd>; 24860b57cec5SDimitry Andricclass NOR_V_D_PSEUDO_DESC : MSA_VEC_PSEUDO_BASE<MipsVNOR, MSA128DOpnd>; 24870b57cec5SDimitry Andric 24880b57cec5SDimitry Andricclass NORI_B_DESC : MSA_I8_DESC_BASE<"nori.b", MipsVNOR, vsplati8_uimm8, 24890b57cec5SDimitry Andric MSA128BOpnd>; 24900b57cec5SDimitry Andric 24910b57cec5SDimitry Andricclass OR_V_DESC : MSA_VEC_DESC_BASE<"or.v", or, MSA128BOpnd>; 24920b57cec5SDimitry Andricclass OR_V_H_PSEUDO_DESC : MSA_VEC_PSEUDO_BASE<or, MSA128HOpnd>; 24930b57cec5SDimitry Andricclass OR_V_W_PSEUDO_DESC : MSA_VEC_PSEUDO_BASE<or, MSA128WOpnd>; 24940b57cec5SDimitry Andricclass OR_V_D_PSEUDO_DESC : MSA_VEC_PSEUDO_BASE<or, MSA128DOpnd>; 24950b57cec5SDimitry Andric 24960b57cec5SDimitry Andricclass ORI_B_DESC : MSA_I8_DESC_BASE<"ori.b", or, vsplati8_uimm8, MSA128BOpnd>; 24970b57cec5SDimitry Andric 24980b57cec5SDimitry Andricclass PCKEV_B_DESC : MSA_3R_DESC_BASE<"pckev.b", MipsPCKEV, MSA128BOpnd>; 24990b57cec5SDimitry Andricclass PCKEV_H_DESC : MSA_3R_DESC_BASE<"pckev.h", MipsPCKEV, MSA128HOpnd>; 25000b57cec5SDimitry Andricclass PCKEV_W_DESC : MSA_3R_DESC_BASE<"pckev.w", MipsPCKEV, MSA128WOpnd>; 25010b57cec5SDimitry Andricclass PCKEV_D_DESC : MSA_3R_DESC_BASE<"pckev.d", MipsPCKEV, MSA128DOpnd>; 25020b57cec5SDimitry Andric 25030b57cec5SDimitry Andricclass PCKOD_B_DESC : MSA_3R_DESC_BASE<"pckod.b", MipsPCKOD, MSA128BOpnd>; 25040b57cec5SDimitry Andricclass PCKOD_H_DESC : MSA_3R_DESC_BASE<"pckod.h", MipsPCKOD, MSA128HOpnd>; 25050b57cec5SDimitry Andricclass PCKOD_W_DESC : MSA_3R_DESC_BASE<"pckod.w", MipsPCKOD, MSA128WOpnd>; 25060b57cec5SDimitry Andricclass PCKOD_D_DESC : MSA_3R_DESC_BASE<"pckod.d", MipsPCKOD, MSA128DOpnd>; 25070b57cec5SDimitry Andric 25080b57cec5SDimitry Andricclass PCNT_B_DESC : MSA_2R_DESC_BASE<"pcnt.b", ctpop, MSA128BOpnd>; 25090b57cec5SDimitry Andricclass PCNT_H_DESC : MSA_2R_DESC_BASE<"pcnt.h", ctpop, MSA128HOpnd>; 25100b57cec5SDimitry Andricclass PCNT_W_DESC : MSA_2R_DESC_BASE<"pcnt.w", ctpop, MSA128WOpnd>; 25110b57cec5SDimitry Andricclass PCNT_D_DESC : MSA_2R_DESC_BASE<"pcnt.d", ctpop, MSA128DOpnd>; 25120b57cec5SDimitry Andric 25130b57cec5SDimitry Andricclass SAT_S_B_DESC : MSA_BIT_X_DESC_BASE<"sat_s.b", int_mips_sat_s_b, uimm3, 25148bcb0991SDimitry Andric timmZExt3, MSA128BOpnd>; 25150b57cec5SDimitry Andricclass SAT_S_H_DESC : MSA_BIT_X_DESC_BASE<"sat_s.h", int_mips_sat_s_h, uimm4, 25168bcb0991SDimitry Andric timmZExt4, MSA128HOpnd>; 25170b57cec5SDimitry Andricclass SAT_S_W_DESC : MSA_BIT_X_DESC_BASE<"sat_s.w", int_mips_sat_s_w, uimm5, 25188bcb0991SDimitry Andric timmZExt5, MSA128WOpnd>; 25190b57cec5SDimitry Andricclass SAT_S_D_DESC : MSA_BIT_X_DESC_BASE<"sat_s.d", int_mips_sat_s_d, uimm6, 25208bcb0991SDimitry Andric timmZExt6, MSA128DOpnd>; 25210b57cec5SDimitry Andric 25220b57cec5SDimitry Andricclass SAT_U_B_DESC : MSA_BIT_X_DESC_BASE<"sat_u.b", int_mips_sat_u_b, uimm3, 25238bcb0991SDimitry Andric timmZExt3, MSA128BOpnd>; 25240b57cec5SDimitry Andricclass SAT_U_H_DESC : MSA_BIT_X_DESC_BASE<"sat_u.h", int_mips_sat_u_h, uimm4, 25258bcb0991SDimitry Andric timmZExt4, MSA128HOpnd>; 25260b57cec5SDimitry Andricclass SAT_U_W_DESC : MSA_BIT_X_DESC_BASE<"sat_u.w", int_mips_sat_u_w, uimm5, 25278bcb0991SDimitry Andric timmZExt5, MSA128WOpnd>; 25280b57cec5SDimitry Andricclass SAT_U_D_DESC : MSA_BIT_X_DESC_BASE<"sat_u.d", int_mips_sat_u_d, uimm6, 25298bcb0991SDimitry Andric timmZExt6, MSA128DOpnd>; 25300b57cec5SDimitry Andric 25310b57cec5SDimitry Andricclass SHF_B_DESC : MSA_I8_SHF_DESC_BASE<"shf.b", MSA128BOpnd>; 25320b57cec5SDimitry Andricclass SHF_H_DESC : MSA_I8_SHF_DESC_BASE<"shf.h", MSA128HOpnd>; 25330b57cec5SDimitry Andricclass SHF_W_DESC : MSA_I8_SHF_DESC_BASE<"shf.w", MSA128WOpnd>; 25340b57cec5SDimitry Andric 25350b57cec5SDimitry Andricclass SLD_B_DESC : MSA_3R_SLD_DESC_BASE<"sld.b", int_mips_sld_b, MSA128BOpnd>; 25360b57cec5SDimitry Andricclass SLD_H_DESC : MSA_3R_SLD_DESC_BASE<"sld.h", int_mips_sld_h, MSA128HOpnd>; 25370b57cec5SDimitry Andricclass SLD_W_DESC : MSA_3R_SLD_DESC_BASE<"sld.w", int_mips_sld_w, MSA128WOpnd>; 25380b57cec5SDimitry Andricclass SLD_D_DESC : MSA_3R_SLD_DESC_BASE<"sld.d", int_mips_sld_d, MSA128DOpnd>; 25390b57cec5SDimitry Andric 25400b57cec5SDimitry Andricclass SLDI_B_DESC : MSA_ELM_SLD_DESC_BASE<"sldi.b", int_mips_sldi_b, 25410b57cec5SDimitry Andric MSA128BOpnd, MSA128BOpnd, uimm4, 25428bcb0991SDimitry Andric timmZExt4>; 25430b57cec5SDimitry Andricclass SLDI_H_DESC : MSA_ELM_SLD_DESC_BASE<"sldi.h", int_mips_sldi_h, 25440b57cec5SDimitry Andric MSA128HOpnd, MSA128HOpnd, uimm3, 25458bcb0991SDimitry Andric timmZExt3>; 25460b57cec5SDimitry Andricclass SLDI_W_DESC : MSA_ELM_SLD_DESC_BASE<"sldi.w", int_mips_sldi_w, 25470b57cec5SDimitry Andric MSA128WOpnd, MSA128WOpnd, uimm2, 25488bcb0991SDimitry Andric timmZExt2>; 25490b57cec5SDimitry Andricclass SLDI_D_DESC : MSA_ELM_SLD_DESC_BASE<"sldi.d", int_mips_sldi_d, 25500b57cec5SDimitry Andric MSA128DOpnd, MSA128DOpnd, uimm1, 25518bcb0991SDimitry Andric timmZExt1>; 25520b57cec5SDimitry Andric 25530b57cec5SDimitry Andricclass SLL_B_DESC : MSA_3R_DESC_BASE<"sll.b", shl, MSA128BOpnd>; 25540b57cec5SDimitry Andricclass SLL_H_DESC : MSA_3R_DESC_BASE<"sll.h", shl, MSA128HOpnd>; 25550b57cec5SDimitry Andricclass SLL_W_DESC : MSA_3R_DESC_BASE<"sll.w", shl, MSA128WOpnd>; 25560b57cec5SDimitry Andricclass SLL_D_DESC : MSA_3R_DESC_BASE<"sll.d", shl, MSA128DOpnd>; 25570b57cec5SDimitry Andric 25580b57cec5SDimitry Andricclass SLLI_B_DESC : MSA_BIT_SPLAT_DESC_BASE<"slli.b", shl, vsplati8_uimm3, 25590b57cec5SDimitry Andric MSA128BOpnd>; 25600b57cec5SDimitry Andricclass SLLI_H_DESC : MSA_BIT_SPLAT_DESC_BASE<"slli.h", shl, vsplati16_uimm4, 25610b57cec5SDimitry Andric MSA128HOpnd>; 25620b57cec5SDimitry Andricclass SLLI_W_DESC : MSA_BIT_SPLAT_DESC_BASE<"slli.w", shl, vsplati32_uimm5, 25630b57cec5SDimitry Andric MSA128WOpnd>; 25640b57cec5SDimitry Andricclass SLLI_D_DESC : MSA_BIT_SPLAT_DESC_BASE<"slli.d", shl, vsplati64_uimm6, 25650b57cec5SDimitry Andric MSA128DOpnd>; 25660b57cec5SDimitry Andric 25670b57cec5SDimitry Andricclass SPLAT_B_DESC : MSA_3R_SPLAT_DESC_BASE<"splat.b", vsplati8_elt, 25680b57cec5SDimitry Andric MSA128BOpnd>; 25690b57cec5SDimitry Andricclass SPLAT_H_DESC : MSA_3R_SPLAT_DESC_BASE<"splat.h", vsplati16_elt, 25700b57cec5SDimitry Andric MSA128HOpnd>; 25710b57cec5SDimitry Andricclass SPLAT_W_DESC : MSA_3R_SPLAT_DESC_BASE<"splat.w", vsplati32_elt, 25720b57cec5SDimitry Andric MSA128WOpnd>; 25730b57cec5SDimitry Andricclass SPLAT_D_DESC : MSA_3R_SPLAT_DESC_BASE<"splat.d", vsplati64_elt, 25740b57cec5SDimitry Andric MSA128DOpnd>; 25750b57cec5SDimitry Andric 25760b57cec5SDimitry Andricclass SPLATI_B_DESC : MSA_ELM_SPLAT_DESC_BASE<"splati.b", vsplati8_uimm4, 25770b57cec5SDimitry Andric MSA128BOpnd>; 25780b57cec5SDimitry Andricclass SPLATI_H_DESC : MSA_ELM_SPLAT_DESC_BASE<"splati.h", vsplati16_uimm3, 25790b57cec5SDimitry Andric MSA128HOpnd>; 25800b57cec5SDimitry Andricclass SPLATI_W_DESC : MSA_ELM_SPLAT_DESC_BASE<"splati.w", vsplati32_uimm2, 25810b57cec5SDimitry Andric MSA128WOpnd>; 25820b57cec5SDimitry Andricclass SPLATI_D_DESC : MSA_ELM_SPLAT_DESC_BASE<"splati.d", vsplati64_uimm1, 25830b57cec5SDimitry Andric MSA128DOpnd>; 25840b57cec5SDimitry Andric 25850b57cec5SDimitry Andricclass SRA_B_DESC : MSA_3R_DESC_BASE<"sra.b", sra, MSA128BOpnd>; 25860b57cec5SDimitry Andricclass SRA_H_DESC : MSA_3R_DESC_BASE<"sra.h", sra, MSA128HOpnd>; 25870b57cec5SDimitry Andricclass SRA_W_DESC : MSA_3R_DESC_BASE<"sra.w", sra, MSA128WOpnd>; 25880b57cec5SDimitry Andricclass SRA_D_DESC : MSA_3R_DESC_BASE<"sra.d", sra, MSA128DOpnd>; 25890b57cec5SDimitry Andric 25900b57cec5SDimitry Andricclass SRAI_B_DESC : MSA_BIT_SPLAT_DESC_BASE<"srai.b", sra, vsplati8_uimm3, 25910b57cec5SDimitry Andric MSA128BOpnd>; 25920b57cec5SDimitry Andricclass SRAI_H_DESC : MSA_BIT_SPLAT_DESC_BASE<"srai.h", sra, vsplati16_uimm4, 25930b57cec5SDimitry Andric MSA128HOpnd>; 25940b57cec5SDimitry Andricclass SRAI_W_DESC : MSA_BIT_SPLAT_DESC_BASE<"srai.w", sra, vsplati32_uimm5, 25950b57cec5SDimitry Andric MSA128WOpnd>; 25960b57cec5SDimitry Andricclass SRAI_D_DESC : MSA_BIT_SPLAT_DESC_BASE<"srai.d", sra, vsplati64_uimm6, 25970b57cec5SDimitry Andric MSA128DOpnd>; 25980b57cec5SDimitry Andric 25990b57cec5SDimitry Andricclass SRAR_B_DESC : MSA_3R_DESC_BASE<"srar.b", int_mips_srar_b, MSA128BOpnd>; 26000b57cec5SDimitry Andricclass SRAR_H_DESC : MSA_3R_DESC_BASE<"srar.h", int_mips_srar_h, MSA128HOpnd>; 26010b57cec5SDimitry Andricclass SRAR_W_DESC : MSA_3R_DESC_BASE<"srar.w", int_mips_srar_w, MSA128WOpnd>; 26020b57cec5SDimitry Andricclass SRAR_D_DESC : MSA_3R_DESC_BASE<"srar.d", int_mips_srar_d, MSA128DOpnd>; 26030b57cec5SDimitry Andric 26040b57cec5SDimitry Andricclass SRARI_B_DESC : MSA_BIT_X_DESC_BASE<"srari.b", int_mips_srari_b, uimm3, 26058bcb0991SDimitry Andric timmZExt3, MSA128BOpnd>; 26060b57cec5SDimitry Andricclass SRARI_H_DESC : MSA_BIT_X_DESC_BASE<"srari.h", int_mips_srari_h, uimm4, 26078bcb0991SDimitry Andric timmZExt4, MSA128HOpnd>; 26080b57cec5SDimitry Andricclass SRARI_W_DESC : MSA_BIT_X_DESC_BASE<"srari.w", int_mips_srari_w, uimm5, 26098bcb0991SDimitry Andric timmZExt5, MSA128WOpnd>; 26100b57cec5SDimitry Andricclass SRARI_D_DESC : MSA_BIT_X_DESC_BASE<"srari.d", int_mips_srari_d, uimm6, 26118bcb0991SDimitry Andric timmZExt6, MSA128DOpnd>; 26120b57cec5SDimitry Andric 26130b57cec5SDimitry Andricclass SRL_B_DESC : MSA_3R_DESC_BASE<"srl.b", srl, MSA128BOpnd>; 26140b57cec5SDimitry Andricclass SRL_H_DESC : MSA_3R_DESC_BASE<"srl.h", srl, MSA128HOpnd>; 26150b57cec5SDimitry Andricclass SRL_W_DESC : MSA_3R_DESC_BASE<"srl.w", srl, MSA128WOpnd>; 26160b57cec5SDimitry Andricclass SRL_D_DESC : MSA_3R_DESC_BASE<"srl.d", srl, MSA128DOpnd>; 26170b57cec5SDimitry Andric 26180b57cec5SDimitry Andricclass SRLI_B_DESC : MSA_BIT_SPLAT_DESC_BASE<"srli.b", srl, vsplati8_uimm3, 26190b57cec5SDimitry Andric MSA128BOpnd>; 26200b57cec5SDimitry Andricclass SRLI_H_DESC : MSA_BIT_SPLAT_DESC_BASE<"srli.h", srl, vsplati16_uimm4, 26210b57cec5SDimitry Andric MSA128HOpnd>; 26220b57cec5SDimitry Andricclass SRLI_W_DESC : MSA_BIT_SPLAT_DESC_BASE<"srli.w", srl, vsplati32_uimm5, 26230b57cec5SDimitry Andric MSA128WOpnd>; 26240b57cec5SDimitry Andricclass SRLI_D_DESC : MSA_BIT_SPLAT_DESC_BASE<"srli.d", srl, vsplati64_uimm6, 26250b57cec5SDimitry Andric MSA128DOpnd>; 26260b57cec5SDimitry Andric 26270b57cec5SDimitry Andricclass SRLR_B_DESC : MSA_3R_DESC_BASE<"srlr.b", int_mips_srlr_b, MSA128BOpnd>; 26280b57cec5SDimitry Andricclass SRLR_H_DESC : MSA_3R_DESC_BASE<"srlr.h", int_mips_srlr_h, MSA128HOpnd>; 26290b57cec5SDimitry Andricclass SRLR_W_DESC : MSA_3R_DESC_BASE<"srlr.w", int_mips_srlr_w, MSA128WOpnd>; 26300b57cec5SDimitry Andricclass SRLR_D_DESC : MSA_3R_DESC_BASE<"srlr.d", int_mips_srlr_d, MSA128DOpnd>; 26310b57cec5SDimitry Andric 26320b57cec5SDimitry Andricclass SRLRI_B_DESC : MSA_BIT_X_DESC_BASE<"srlri.b", int_mips_srlri_b, uimm3, 26338bcb0991SDimitry Andric timmZExt3, MSA128BOpnd>; 26340b57cec5SDimitry Andricclass SRLRI_H_DESC : MSA_BIT_X_DESC_BASE<"srlri.h", int_mips_srlri_h, uimm4, 26358bcb0991SDimitry Andric timmZExt4, MSA128HOpnd>; 26360b57cec5SDimitry Andricclass SRLRI_W_DESC : MSA_BIT_X_DESC_BASE<"srlri.w", int_mips_srlri_w, uimm5, 26378bcb0991SDimitry Andric timmZExt5, MSA128WOpnd>; 26380b57cec5SDimitry Andricclass SRLRI_D_DESC : MSA_BIT_X_DESC_BASE<"srlri.d", int_mips_srlri_d, uimm6, 26398bcb0991SDimitry Andric timmZExt6, MSA128DOpnd>; 26400b57cec5SDimitry Andric 26410b57cec5SDimitry Andricclass ST_DESC_BASE<string instr_asm, SDPatternOperator OpNode, 26420b57cec5SDimitry Andric ValueType TyNode, RegisterOperand ROWD, 26430b57cec5SDimitry Andric Operand MemOpnd, ComplexPattern Addr = addrimm10, 26440b57cec5SDimitry Andric InstrItinClass itin = NoItinerary> { 26450b57cec5SDimitry Andric dag OutOperandList = (outs); 26460b57cec5SDimitry Andric dag InOperandList = (ins ROWD:$wd, MemOpnd:$addr); 26470b57cec5SDimitry Andric string AsmString = !strconcat(instr_asm, "\t$wd, $addr"); 26480b57cec5SDimitry Andric list<dag> Pattern = [(OpNode (TyNode ROWD:$wd), Addr:$addr)]; 26490b57cec5SDimitry Andric InstrItinClass Itinerary = itin; 26500b57cec5SDimitry Andric string DecoderMethod = "DecodeMSA128Mem"; 26510b57cec5SDimitry Andric} 26520b57cec5SDimitry Andric 26530b57cec5SDimitry Andricclass ST_B_DESC : ST_DESC_BASE<"st.b", store, v16i8, MSA128BOpnd, mem_simm10>; 26540b57cec5SDimitry Andricclass ST_H_DESC : ST_DESC_BASE<"st.h", store, v8i16, MSA128HOpnd, 26550b57cec5SDimitry Andric mem_simm10_lsl1, addrimm10lsl1>; 26560b57cec5SDimitry Andricclass ST_W_DESC : ST_DESC_BASE<"st.w", store, v4i32, MSA128WOpnd, 26570b57cec5SDimitry Andric mem_simm10_lsl2, addrimm10lsl2>; 26580b57cec5SDimitry Andricclass ST_D_DESC : ST_DESC_BASE<"st.d", store, v2i64, MSA128DOpnd, 26590b57cec5SDimitry Andric mem_simm10_lsl3, addrimm10lsl3>; 26600b57cec5SDimitry Andric 26615ffd83dbSDimitry Andricclass MSA_STORE_PSEUDO_BASE<SDPatternOperator intrinsic, RegisterOperand RO> : 26625ffd83dbSDimitry Andric PseudoSE<(outs), (ins RO:$dst, PtrRC:$ptr, GPR32:$imm), 26635ffd83dbSDimitry Andric [(intrinsic RO:$dst, iPTR:$ptr, GPR32:$imm)]> { 26645ffd83dbSDimitry Andric let hasNoSchedulingInfo = 1; 26655ffd83dbSDimitry Andric let usesCustomInserter = 1; 26665ffd83dbSDimitry Andric} 26675ffd83dbSDimitry Andric 26685ffd83dbSDimitry Andricdef STR_D : MSA_STORE_PSEUDO_BASE<int_mips_str_d, MSA128DOpnd>; 26695ffd83dbSDimitry Andricdef STR_W : MSA_STORE_PSEUDO_BASE<int_mips_str_w, MSA128WOpnd>; 26705ffd83dbSDimitry Andric 26710b57cec5SDimitry Andricclass SUBS_S_B_DESC : MSA_3R_DESC_BASE<"subs_s.b", int_mips_subs_s_b, 26720b57cec5SDimitry Andric MSA128BOpnd>; 26730b57cec5SDimitry Andricclass SUBS_S_H_DESC : MSA_3R_DESC_BASE<"subs_s.h", int_mips_subs_s_h, 26740b57cec5SDimitry Andric MSA128HOpnd>; 26750b57cec5SDimitry Andricclass SUBS_S_W_DESC : MSA_3R_DESC_BASE<"subs_s.w", int_mips_subs_s_w, 26760b57cec5SDimitry Andric MSA128WOpnd>; 26770b57cec5SDimitry Andricclass SUBS_S_D_DESC : MSA_3R_DESC_BASE<"subs_s.d", int_mips_subs_s_d, 26780b57cec5SDimitry Andric MSA128DOpnd>; 26790b57cec5SDimitry Andric 26800b57cec5SDimitry Andricclass SUBS_U_B_DESC : MSA_3R_DESC_BASE<"subs_u.b", int_mips_subs_u_b, 26810b57cec5SDimitry Andric MSA128BOpnd>; 26820b57cec5SDimitry Andricclass SUBS_U_H_DESC : MSA_3R_DESC_BASE<"subs_u.h", int_mips_subs_u_h, 26830b57cec5SDimitry Andric MSA128HOpnd>; 26840b57cec5SDimitry Andricclass SUBS_U_W_DESC : MSA_3R_DESC_BASE<"subs_u.w", int_mips_subs_u_w, 26850b57cec5SDimitry Andric MSA128WOpnd>; 26860b57cec5SDimitry Andricclass SUBS_U_D_DESC : MSA_3R_DESC_BASE<"subs_u.d", int_mips_subs_u_d, 26870b57cec5SDimitry Andric MSA128DOpnd>; 26880b57cec5SDimitry Andric 26890b57cec5SDimitry Andricclass SUBSUS_U_B_DESC : MSA_3R_DESC_BASE<"subsus_u.b", int_mips_subsus_u_b, 26900b57cec5SDimitry Andric MSA128BOpnd>; 26910b57cec5SDimitry Andricclass SUBSUS_U_H_DESC : MSA_3R_DESC_BASE<"subsus_u.h", int_mips_subsus_u_h, 26920b57cec5SDimitry Andric MSA128HOpnd>; 26930b57cec5SDimitry Andricclass SUBSUS_U_W_DESC : MSA_3R_DESC_BASE<"subsus_u.w", int_mips_subsus_u_w, 26940b57cec5SDimitry Andric MSA128WOpnd>; 26950b57cec5SDimitry Andricclass SUBSUS_U_D_DESC : MSA_3R_DESC_BASE<"subsus_u.d", int_mips_subsus_u_d, 26960b57cec5SDimitry Andric MSA128DOpnd>; 26970b57cec5SDimitry Andric 26980b57cec5SDimitry Andricclass SUBSUU_S_B_DESC : MSA_3R_DESC_BASE<"subsuu_s.b", int_mips_subsuu_s_b, 26990b57cec5SDimitry Andric MSA128BOpnd>; 27000b57cec5SDimitry Andricclass SUBSUU_S_H_DESC : MSA_3R_DESC_BASE<"subsuu_s.h", int_mips_subsuu_s_h, 27010b57cec5SDimitry Andric MSA128HOpnd>; 27020b57cec5SDimitry Andricclass SUBSUU_S_W_DESC : MSA_3R_DESC_BASE<"subsuu_s.w", int_mips_subsuu_s_w, 27030b57cec5SDimitry Andric MSA128WOpnd>; 27040b57cec5SDimitry Andricclass SUBSUU_S_D_DESC : MSA_3R_DESC_BASE<"subsuu_s.d", int_mips_subsuu_s_d, 27050b57cec5SDimitry Andric MSA128DOpnd>; 27060b57cec5SDimitry Andric 27070b57cec5SDimitry Andricclass SUBV_B_DESC : MSA_3R_DESC_BASE<"subv.b", sub, MSA128BOpnd>; 27080b57cec5SDimitry Andricclass SUBV_H_DESC : MSA_3R_DESC_BASE<"subv.h", sub, MSA128HOpnd>; 27090b57cec5SDimitry Andricclass SUBV_W_DESC : MSA_3R_DESC_BASE<"subv.w", sub, MSA128WOpnd>; 27100b57cec5SDimitry Andricclass SUBV_D_DESC : MSA_3R_DESC_BASE<"subv.d", sub, MSA128DOpnd>; 27110b57cec5SDimitry Andric 27120b57cec5SDimitry Andricclass SUBVI_B_DESC : MSA_I5_DESC_BASE<"subvi.b", sub, vsplati8_uimm5, 27130b57cec5SDimitry Andric MSA128BOpnd>; 27140b57cec5SDimitry Andricclass SUBVI_H_DESC : MSA_I5_DESC_BASE<"subvi.h", sub, vsplati16_uimm5, 27150b57cec5SDimitry Andric MSA128HOpnd>; 27160b57cec5SDimitry Andricclass SUBVI_W_DESC : MSA_I5_DESC_BASE<"subvi.w", sub, vsplati32_uimm5, 27170b57cec5SDimitry Andric MSA128WOpnd>; 27180b57cec5SDimitry Andricclass SUBVI_D_DESC : MSA_I5_DESC_BASE<"subvi.d", sub, vsplati64_uimm5, 27190b57cec5SDimitry Andric MSA128DOpnd>; 27200b57cec5SDimitry Andric 27210b57cec5SDimitry Andricclass VSHF_B_DESC : MSA_3R_VSHF_DESC_BASE<"vshf.b", MSA128BOpnd>; 27220b57cec5SDimitry Andricclass VSHF_H_DESC : MSA_3R_VSHF_DESC_BASE<"vshf.h", MSA128HOpnd>; 27230b57cec5SDimitry Andricclass VSHF_W_DESC : MSA_3R_VSHF_DESC_BASE<"vshf.w", MSA128WOpnd>; 27240b57cec5SDimitry Andricclass VSHF_D_DESC : MSA_3R_VSHF_DESC_BASE<"vshf.d", MSA128DOpnd>; 27250b57cec5SDimitry Andric 27260b57cec5SDimitry Andricclass XOR_V_DESC : MSA_VEC_DESC_BASE<"xor.v", xor, MSA128BOpnd>; 27270b57cec5SDimitry Andricclass XOR_V_H_PSEUDO_DESC : MSA_VEC_PSEUDO_BASE<xor, MSA128HOpnd>; 27280b57cec5SDimitry Andricclass XOR_V_W_PSEUDO_DESC : MSA_VEC_PSEUDO_BASE<xor, MSA128WOpnd>; 27290b57cec5SDimitry Andricclass XOR_V_D_PSEUDO_DESC : MSA_VEC_PSEUDO_BASE<xor, MSA128DOpnd>; 27300b57cec5SDimitry Andric 27310b57cec5SDimitry Andricclass XORI_B_DESC : MSA_I8_DESC_BASE<"xori.b", xor, vsplati8_uimm8, 27320b57cec5SDimitry Andric MSA128BOpnd>; 27330b57cec5SDimitry Andric 27340b57cec5SDimitry Andric// Instruction defs. 27350b57cec5SDimitry Andricdef ADD_A_B : ADD_A_B_ENC, ADD_A_B_DESC; 27360b57cec5SDimitry Andricdef ADD_A_H : ADD_A_H_ENC, ADD_A_H_DESC; 27370b57cec5SDimitry Andricdef ADD_A_W : ADD_A_W_ENC, ADD_A_W_DESC; 27380b57cec5SDimitry Andricdef ADD_A_D : ADD_A_D_ENC, ADD_A_D_DESC; 27390b57cec5SDimitry Andric 27400b57cec5SDimitry Andricdef ADDS_A_B : ADDS_A_B_ENC, ADDS_A_B_DESC; 27410b57cec5SDimitry Andricdef ADDS_A_H : ADDS_A_H_ENC, ADDS_A_H_DESC; 27420b57cec5SDimitry Andricdef ADDS_A_W : ADDS_A_W_ENC, ADDS_A_W_DESC; 27430b57cec5SDimitry Andricdef ADDS_A_D : ADDS_A_D_ENC, ADDS_A_D_DESC; 27440b57cec5SDimitry Andric 27450b57cec5SDimitry Andricdef ADDS_S_B : ADDS_S_B_ENC, ADDS_S_B_DESC; 27460b57cec5SDimitry Andricdef ADDS_S_H : ADDS_S_H_ENC, ADDS_S_H_DESC; 27470b57cec5SDimitry Andricdef ADDS_S_W : ADDS_S_W_ENC, ADDS_S_W_DESC; 27480b57cec5SDimitry Andricdef ADDS_S_D : ADDS_S_D_ENC, ADDS_S_D_DESC; 27490b57cec5SDimitry Andric 27500b57cec5SDimitry Andricdef ADDS_U_B : ADDS_U_B_ENC, ADDS_U_B_DESC; 27510b57cec5SDimitry Andricdef ADDS_U_H : ADDS_U_H_ENC, ADDS_U_H_DESC; 27520b57cec5SDimitry Andricdef ADDS_U_W : ADDS_U_W_ENC, ADDS_U_W_DESC; 27530b57cec5SDimitry Andricdef ADDS_U_D : ADDS_U_D_ENC, ADDS_U_D_DESC; 27540b57cec5SDimitry Andric 27550b57cec5SDimitry Andricdef ADDV_B : ADDV_B_ENC, ADDV_B_DESC; 27560b57cec5SDimitry Andricdef ADDV_H : ADDV_H_ENC, ADDV_H_DESC; 27570b57cec5SDimitry Andricdef ADDV_W : ADDV_W_ENC, ADDV_W_DESC; 27580b57cec5SDimitry Andricdef ADDV_D : ADDV_D_ENC, ADDV_D_DESC; 27590b57cec5SDimitry Andric 27600b57cec5SDimitry Andricdef ADDVI_B : ADDVI_B_ENC, ADDVI_B_DESC; 27610b57cec5SDimitry Andricdef ADDVI_H : ADDVI_H_ENC, ADDVI_H_DESC; 27620b57cec5SDimitry Andricdef ADDVI_W : ADDVI_W_ENC, ADDVI_W_DESC; 27630b57cec5SDimitry Andricdef ADDVI_D : ADDVI_D_ENC, ADDVI_D_DESC; 27640b57cec5SDimitry Andric 27650b57cec5SDimitry Andricdef AND_V : AND_V_ENC, AND_V_DESC; 27660b57cec5SDimitry Andricdef AND_V_H_PSEUDO : AND_V_H_PSEUDO_DESC, 27670b57cec5SDimitry Andric PseudoInstExpansion<(AND_V MSA128BOpnd:$wd, 27680b57cec5SDimitry Andric MSA128BOpnd:$ws, 27690b57cec5SDimitry Andric MSA128BOpnd:$wt)>; 27700b57cec5SDimitry Andricdef AND_V_W_PSEUDO : AND_V_W_PSEUDO_DESC, 27710b57cec5SDimitry Andric PseudoInstExpansion<(AND_V MSA128BOpnd:$wd, 27720b57cec5SDimitry Andric MSA128BOpnd:$ws, 27730b57cec5SDimitry Andric MSA128BOpnd:$wt)>; 27740b57cec5SDimitry Andricdef AND_V_D_PSEUDO : AND_V_D_PSEUDO_DESC, 27750b57cec5SDimitry Andric PseudoInstExpansion<(AND_V MSA128BOpnd:$wd, 27760b57cec5SDimitry Andric MSA128BOpnd:$ws, 27770b57cec5SDimitry Andric MSA128BOpnd:$wt)>; 27780b57cec5SDimitry Andric 27790b57cec5SDimitry Andricdef ANDI_B : ANDI_B_ENC, ANDI_B_DESC; 27800b57cec5SDimitry Andric 27810b57cec5SDimitry Andricdef ASUB_S_B : ASUB_S_B_ENC, ASUB_S_B_DESC; 27820b57cec5SDimitry Andricdef ASUB_S_H : ASUB_S_H_ENC, ASUB_S_H_DESC; 27830b57cec5SDimitry Andricdef ASUB_S_W : ASUB_S_W_ENC, ASUB_S_W_DESC; 27840b57cec5SDimitry Andricdef ASUB_S_D : ASUB_S_D_ENC, ASUB_S_D_DESC; 27850b57cec5SDimitry Andric 27860b57cec5SDimitry Andricdef ASUB_U_B : ASUB_U_B_ENC, ASUB_U_B_DESC; 27870b57cec5SDimitry Andricdef ASUB_U_H : ASUB_U_H_ENC, ASUB_U_H_DESC; 27880b57cec5SDimitry Andricdef ASUB_U_W : ASUB_U_W_ENC, ASUB_U_W_DESC; 27890b57cec5SDimitry Andricdef ASUB_U_D : ASUB_U_D_ENC, ASUB_U_D_DESC; 27900b57cec5SDimitry Andric 27910b57cec5SDimitry Andricdef AVE_S_B : AVE_S_B_ENC, AVE_S_B_DESC; 27920b57cec5SDimitry Andricdef AVE_S_H : AVE_S_H_ENC, AVE_S_H_DESC; 27930b57cec5SDimitry Andricdef AVE_S_W : AVE_S_W_ENC, AVE_S_W_DESC; 27940b57cec5SDimitry Andricdef AVE_S_D : AVE_S_D_ENC, AVE_S_D_DESC; 27950b57cec5SDimitry Andric 27960b57cec5SDimitry Andricdef AVE_U_B : AVE_U_B_ENC, AVE_U_B_DESC; 27970b57cec5SDimitry Andricdef AVE_U_H : AVE_U_H_ENC, AVE_U_H_DESC; 27980b57cec5SDimitry Andricdef AVE_U_W : AVE_U_W_ENC, AVE_U_W_DESC; 27990b57cec5SDimitry Andricdef AVE_U_D : AVE_U_D_ENC, AVE_U_D_DESC; 28000b57cec5SDimitry Andric 28010b57cec5SDimitry Andricdef AVER_S_B : AVER_S_B_ENC, AVER_S_B_DESC; 28020b57cec5SDimitry Andricdef AVER_S_H : AVER_S_H_ENC, AVER_S_H_DESC; 28030b57cec5SDimitry Andricdef AVER_S_W : AVER_S_W_ENC, AVER_S_W_DESC; 28040b57cec5SDimitry Andricdef AVER_S_D : AVER_S_D_ENC, AVER_S_D_DESC; 28050b57cec5SDimitry Andric 28060b57cec5SDimitry Andricdef AVER_U_B : AVER_U_B_ENC, AVER_U_B_DESC; 28070b57cec5SDimitry Andricdef AVER_U_H : AVER_U_H_ENC, AVER_U_H_DESC; 28080b57cec5SDimitry Andricdef AVER_U_W : AVER_U_W_ENC, AVER_U_W_DESC; 28090b57cec5SDimitry Andricdef AVER_U_D : AVER_U_D_ENC, AVER_U_D_DESC; 28100b57cec5SDimitry Andric 28110b57cec5SDimitry Andricdef BCLR_B : BCLR_B_ENC, BCLR_B_DESC; 28120b57cec5SDimitry Andricdef BCLR_H : BCLR_H_ENC, BCLR_H_DESC; 28130b57cec5SDimitry Andricdef BCLR_W : BCLR_W_ENC, BCLR_W_DESC; 28140b57cec5SDimitry Andricdef BCLR_D : BCLR_D_ENC, BCLR_D_DESC; 28150b57cec5SDimitry Andric 28160b57cec5SDimitry Andricdef BCLRI_B : BCLRI_B_ENC, BCLRI_B_DESC; 28170b57cec5SDimitry Andricdef BCLRI_H : BCLRI_H_ENC, BCLRI_H_DESC; 28180b57cec5SDimitry Andricdef BCLRI_W : BCLRI_W_ENC, BCLRI_W_DESC; 28190b57cec5SDimitry Andricdef BCLRI_D : BCLRI_D_ENC, BCLRI_D_DESC; 28200b57cec5SDimitry Andric 28210b57cec5SDimitry Andricdef BINSL_B : BINSL_B_ENC, BINSL_B_DESC; 28220b57cec5SDimitry Andricdef BINSL_H : BINSL_H_ENC, BINSL_H_DESC; 28230b57cec5SDimitry Andricdef BINSL_W : BINSL_W_ENC, BINSL_W_DESC; 28240b57cec5SDimitry Andricdef BINSL_D : BINSL_D_ENC, BINSL_D_DESC; 28250b57cec5SDimitry Andric 28260b57cec5SDimitry Andricdef BINSLI_B : BINSLI_B_ENC, BINSLI_B_DESC; 28270b57cec5SDimitry Andricdef BINSLI_H : BINSLI_H_ENC, BINSLI_H_DESC; 28280b57cec5SDimitry Andricdef BINSLI_W : BINSLI_W_ENC, BINSLI_W_DESC; 28290b57cec5SDimitry Andricdef BINSLI_D : BINSLI_D_ENC, BINSLI_D_DESC; 28300b57cec5SDimitry Andric 28310b57cec5SDimitry Andricdef BINSR_B : BINSR_B_ENC, BINSR_B_DESC; 28320b57cec5SDimitry Andricdef BINSR_H : BINSR_H_ENC, BINSR_H_DESC; 28330b57cec5SDimitry Andricdef BINSR_W : BINSR_W_ENC, BINSR_W_DESC; 28340b57cec5SDimitry Andricdef BINSR_D : BINSR_D_ENC, BINSR_D_DESC; 28350b57cec5SDimitry Andric 28360b57cec5SDimitry Andricdef BINSRI_B : BINSRI_B_ENC, BINSRI_B_DESC; 28370b57cec5SDimitry Andricdef BINSRI_H : BINSRI_H_ENC, BINSRI_H_DESC; 28380b57cec5SDimitry Andricdef BINSRI_W : BINSRI_W_ENC, BINSRI_W_DESC; 28390b57cec5SDimitry Andricdef BINSRI_D : BINSRI_D_ENC, BINSRI_D_DESC; 28400b57cec5SDimitry Andric 28410b57cec5SDimitry Andricdef BMNZ_V : BMNZ_V_ENC, BMNZ_V_DESC; 28420b57cec5SDimitry Andric 28430b57cec5SDimitry Andricdef BMNZI_B : BMNZI_B_ENC, BMNZI_B_DESC; 28440b57cec5SDimitry Andric 28450b57cec5SDimitry Andricdef BMZ_V : BMZ_V_ENC, BMZ_V_DESC; 28460b57cec5SDimitry Andric 28470b57cec5SDimitry Andricdef BMZI_B : BMZI_B_ENC, BMZI_B_DESC; 28480b57cec5SDimitry Andric 28490b57cec5SDimitry Andricdef BNEG_B : BNEG_B_ENC, BNEG_B_DESC; 28500b57cec5SDimitry Andricdef BNEG_H : BNEG_H_ENC, BNEG_H_DESC; 28510b57cec5SDimitry Andricdef BNEG_W : BNEG_W_ENC, BNEG_W_DESC; 28520b57cec5SDimitry Andricdef BNEG_D : BNEG_D_ENC, BNEG_D_DESC; 28530b57cec5SDimitry Andric 28540b57cec5SDimitry Andricdef BNEGI_B : BNEGI_B_ENC, BNEGI_B_DESC; 28550b57cec5SDimitry Andricdef BNEGI_H : BNEGI_H_ENC, BNEGI_H_DESC; 28560b57cec5SDimitry Andricdef BNEGI_W : BNEGI_W_ENC, BNEGI_W_DESC; 28570b57cec5SDimitry Andricdef BNEGI_D : BNEGI_D_ENC, BNEGI_D_DESC; 28580b57cec5SDimitry Andric 28590b57cec5SDimitry Andricdef BNZ_B : BNZ_B_ENC, BNZ_B_DESC; 28600b57cec5SDimitry Andricdef BNZ_H : BNZ_H_ENC, BNZ_H_DESC; 28610b57cec5SDimitry Andricdef BNZ_W : BNZ_W_ENC, BNZ_W_DESC; 28620b57cec5SDimitry Andricdef BNZ_D : BNZ_D_ENC, BNZ_D_DESC; 28630b57cec5SDimitry Andric 28640b57cec5SDimitry Andricdef BNZ_V : BNZ_V_ENC, BNZ_V_DESC; 28650b57cec5SDimitry Andric 28660b57cec5SDimitry Andricdef BSEL_V : BSEL_V_ENC, BSEL_V_DESC; 28670b57cec5SDimitry Andric 28680b57cec5SDimitry Andricclass MSA_BSEL_PSEUDO_BASE<RegisterOperand RO, ValueType Ty> : 28690b57cec5SDimitry Andric MSAPseudo<(outs RO:$wd), (ins RO:$wd_in, RO:$ws, RO:$wt), 28700b57cec5SDimitry Andric [(set RO:$wd, (Ty (vselect RO:$wd_in, RO:$wt, RO:$ws)))]>, 28710b57cec5SDimitry Andric // Note that vselect and BSEL_V treat the condition operand the opposite way 28720b57cec5SDimitry Andric // from each other. 28730b57cec5SDimitry Andric // (vselect cond, if_set, if_clear) 28740b57cec5SDimitry Andric // (BSEL_V cond, if_clear, if_set) 28750b57cec5SDimitry Andric PseudoInstExpansion<(BSEL_V MSA128BOpnd:$wd, MSA128BOpnd:$wd_in, 28760b57cec5SDimitry Andric MSA128BOpnd:$ws, MSA128BOpnd:$wt)> { 28770b57cec5SDimitry Andric let Constraints = "$wd_in = $wd"; 28780b57cec5SDimitry Andric} 28790b57cec5SDimitry Andric 28800b57cec5SDimitry Andricdef BSEL_H_PSEUDO : MSA_BSEL_PSEUDO_BASE<MSA128HOpnd, v8i16>; 28810b57cec5SDimitry Andricdef BSEL_W_PSEUDO : MSA_BSEL_PSEUDO_BASE<MSA128WOpnd, v4i32>; 28820b57cec5SDimitry Andricdef BSEL_D_PSEUDO : MSA_BSEL_PSEUDO_BASE<MSA128DOpnd, v2i64>; 28830b57cec5SDimitry Andricdef BSEL_FW_PSEUDO : MSA_BSEL_PSEUDO_BASE<MSA128WOpnd, v4f32>; 28840b57cec5SDimitry Andricdef BSEL_FD_PSEUDO : MSA_BSEL_PSEUDO_BASE<MSA128DOpnd, v2f64>; 28850b57cec5SDimitry Andric 28860b57cec5SDimitry Andricdef BSELI_B : BSELI_B_ENC, BSELI_B_DESC; 28870b57cec5SDimitry Andric 28880b57cec5SDimitry Andricdef BSET_B : BSET_B_ENC, BSET_B_DESC; 28890b57cec5SDimitry Andricdef BSET_H : BSET_H_ENC, BSET_H_DESC; 28900b57cec5SDimitry Andricdef BSET_W : BSET_W_ENC, BSET_W_DESC; 28910b57cec5SDimitry Andricdef BSET_D : BSET_D_ENC, BSET_D_DESC; 28920b57cec5SDimitry Andric 28930b57cec5SDimitry Andricdef BSETI_B : BSETI_B_ENC, BSETI_B_DESC; 28940b57cec5SDimitry Andricdef BSETI_H : BSETI_H_ENC, BSETI_H_DESC; 28950b57cec5SDimitry Andricdef BSETI_W : BSETI_W_ENC, BSETI_W_DESC; 28960b57cec5SDimitry Andricdef BSETI_D : BSETI_D_ENC, BSETI_D_DESC; 28970b57cec5SDimitry Andric 28980b57cec5SDimitry Andricdef BZ_B : BZ_B_ENC, BZ_B_DESC; 28990b57cec5SDimitry Andricdef BZ_H : BZ_H_ENC, BZ_H_DESC; 29000b57cec5SDimitry Andricdef BZ_W : BZ_W_ENC, BZ_W_DESC; 29010b57cec5SDimitry Andricdef BZ_D : BZ_D_ENC, BZ_D_DESC; 29020b57cec5SDimitry Andric 29030b57cec5SDimitry Andricdef BZ_V : BZ_V_ENC, BZ_V_DESC; 29040b57cec5SDimitry Andric 29050b57cec5SDimitry Andricdef CEQ_B : CEQ_B_ENC, CEQ_B_DESC; 29060b57cec5SDimitry Andricdef CEQ_H : CEQ_H_ENC, CEQ_H_DESC; 29070b57cec5SDimitry Andricdef CEQ_W : CEQ_W_ENC, CEQ_W_DESC; 29080b57cec5SDimitry Andricdef CEQ_D : CEQ_D_ENC, CEQ_D_DESC; 29090b57cec5SDimitry Andric 29100b57cec5SDimitry Andricdef CEQI_B : CEQI_B_ENC, CEQI_B_DESC; 29110b57cec5SDimitry Andricdef CEQI_H : CEQI_H_ENC, CEQI_H_DESC; 29120b57cec5SDimitry Andricdef CEQI_W : CEQI_W_ENC, CEQI_W_DESC; 29130b57cec5SDimitry Andricdef CEQI_D : CEQI_D_ENC, CEQI_D_DESC; 29140b57cec5SDimitry Andric 29150b57cec5SDimitry Andricdef CFCMSA : CFCMSA_ENC, CFCMSA_DESC; 29160b57cec5SDimitry Andric 29170b57cec5SDimitry Andricdef CLE_S_B : CLE_S_B_ENC, CLE_S_B_DESC; 29180b57cec5SDimitry Andricdef CLE_S_H : CLE_S_H_ENC, CLE_S_H_DESC; 29190b57cec5SDimitry Andricdef CLE_S_W : CLE_S_W_ENC, CLE_S_W_DESC; 29200b57cec5SDimitry Andricdef CLE_S_D : CLE_S_D_ENC, CLE_S_D_DESC; 29210b57cec5SDimitry Andric 29220b57cec5SDimitry Andricdef CLE_U_B : CLE_U_B_ENC, CLE_U_B_DESC; 29230b57cec5SDimitry Andricdef CLE_U_H : CLE_U_H_ENC, CLE_U_H_DESC; 29240b57cec5SDimitry Andricdef CLE_U_W : CLE_U_W_ENC, CLE_U_W_DESC; 29250b57cec5SDimitry Andricdef CLE_U_D : CLE_U_D_ENC, CLE_U_D_DESC; 29260b57cec5SDimitry Andric 29270b57cec5SDimitry Andricdef CLEI_S_B : CLEI_S_B_ENC, CLEI_S_B_DESC; 29280b57cec5SDimitry Andricdef CLEI_S_H : CLEI_S_H_ENC, CLEI_S_H_DESC; 29290b57cec5SDimitry Andricdef CLEI_S_W : CLEI_S_W_ENC, CLEI_S_W_DESC; 29300b57cec5SDimitry Andricdef CLEI_S_D : CLEI_S_D_ENC, CLEI_S_D_DESC; 29310b57cec5SDimitry Andric 29320b57cec5SDimitry Andricdef CLEI_U_B : CLEI_U_B_ENC, CLEI_U_B_DESC; 29330b57cec5SDimitry Andricdef CLEI_U_H : CLEI_U_H_ENC, CLEI_U_H_DESC; 29340b57cec5SDimitry Andricdef CLEI_U_W : CLEI_U_W_ENC, CLEI_U_W_DESC; 29350b57cec5SDimitry Andricdef CLEI_U_D : CLEI_U_D_ENC, CLEI_U_D_DESC; 29360b57cec5SDimitry Andric 29370b57cec5SDimitry Andricdef CLT_S_B : CLT_S_B_ENC, CLT_S_B_DESC; 29380b57cec5SDimitry Andricdef CLT_S_H : CLT_S_H_ENC, CLT_S_H_DESC; 29390b57cec5SDimitry Andricdef CLT_S_W : CLT_S_W_ENC, CLT_S_W_DESC; 29400b57cec5SDimitry Andricdef CLT_S_D : CLT_S_D_ENC, CLT_S_D_DESC; 29410b57cec5SDimitry Andric 29420b57cec5SDimitry Andricdef CLT_U_B : CLT_U_B_ENC, CLT_U_B_DESC; 29430b57cec5SDimitry Andricdef CLT_U_H : CLT_U_H_ENC, CLT_U_H_DESC; 29440b57cec5SDimitry Andricdef CLT_U_W : CLT_U_W_ENC, CLT_U_W_DESC; 29450b57cec5SDimitry Andricdef CLT_U_D : CLT_U_D_ENC, CLT_U_D_DESC; 29460b57cec5SDimitry Andric 29470b57cec5SDimitry Andricdef CLTI_S_B : CLTI_S_B_ENC, CLTI_S_B_DESC; 29480b57cec5SDimitry Andricdef CLTI_S_H : CLTI_S_H_ENC, CLTI_S_H_DESC; 29490b57cec5SDimitry Andricdef CLTI_S_W : CLTI_S_W_ENC, CLTI_S_W_DESC; 29500b57cec5SDimitry Andricdef CLTI_S_D : CLTI_S_D_ENC, CLTI_S_D_DESC; 29510b57cec5SDimitry Andric 29520b57cec5SDimitry Andricdef CLTI_U_B : CLTI_U_B_ENC, CLTI_U_B_DESC; 29530b57cec5SDimitry Andricdef CLTI_U_H : CLTI_U_H_ENC, CLTI_U_H_DESC; 29540b57cec5SDimitry Andricdef CLTI_U_W : CLTI_U_W_ENC, CLTI_U_W_DESC; 29550b57cec5SDimitry Andricdef CLTI_U_D : CLTI_U_D_ENC, CLTI_U_D_DESC; 29560b57cec5SDimitry Andric 29570b57cec5SDimitry Andricdef COPY_S_B : COPY_S_B_ENC, COPY_S_B_DESC; 29580b57cec5SDimitry Andricdef COPY_S_H : COPY_S_H_ENC, COPY_S_H_DESC; 29590b57cec5SDimitry Andricdef COPY_S_W : COPY_S_W_ENC, COPY_S_W_DESC; 29600b57cec5SDimitry Andricdef COPY_S_D : COPY_S_D_ENC, COPY_S_D_DESC, ASE_MSA64; 29610b57cec5SDimitry Andric 29620b57cec5SDimitry Andricdef COPY_U_B : COPY_U_B_ENC, COPY_U_B_DESC; 29630b57cec5SDimitry Andricdef COPY_U_H : COPY_U_H_ENC, COPY_U_H_DESC; 29640b57cec5SDimitry Andricdef COPY_U_W : COPY_U_W_ENC, COPY_U_W_DESC, ASE_MSA64; 29650b57cec5SDimitry Andric 29660b57cec5SDimitry Andricdef COPY_FW_PSEUDO : COPY_FW_PSEUDO_DESC; 29670b57cec5SDimitry Andricdef COPY_FD_PSEUDO : COPY_FD_PSEUDO_DESC; 29680b57cec5SDimitry Andric 29690b57cec5SDimitry Andricdef CTCMSA : CTCMSA_ENC, CTCMSA_DESC; 29700b57cec5SDimitry Andric 29710b57cec5SDimitry Andricdef DIV_S_B : DIV_S_B_ENC, DIV_S_B_DESC; 29720b57cec5SDimitry Andricdef DIV_S_H : DIV_S_H_ENC, DIV_S_H_DESC; 29730b57cec5SDimitry Andricdef DIV_S_W : DIV_S_W_ENC, DIV_S_W_DESC; 29740b57cec5SDimitry Andricdef DIV_S_D : DIV_S_D_ENC, DIV_S_D_DESC; 29750b57cec5SDimitry Andric 29760b57cec5SDimitry Andricdef DIV_U_B : DIV_U_B_ENC, DIV_U_B_DESC; 29770b57cec5SDimitry Andricdef DIV_U_H : DIV_U_H_ENC, DIV_U_H_DESC; 29780b57cec5SDimitry Andricdef DIV_U_W : DIV_U_W_ENC, DIV_U_W_DESC; 29790b57cec5SDimitry Andricdef DIV_U_D : DIV_U_D_ENC, DIV_U_D_DESC; 29800b57cec5SDimitry Andric 29810b57cec5SDimitry Andricdef DOTP_S_H : DOTP_S_H_ENC, DOTP_S_H_DESC; 29820b57cec5SDimitry Andricdef DOTP_S_W : DOTP_S_W_ENC, DOTP_S_W_DESC; 29830b57cec5SDimitry Andricdef DOTP_S_D : DOTP_S_D_ENC, DOTP_S_D_DESC; 29840b57cec5SDimitry Andric 29850b57cec5SDimitry Andricdef DOTP_U_H : DOTP_U_H_ENC, DOTP_U_H_DESC; 29860b57cec5SDimitry Andricdef DOTP_U_W : DOTP_U_W_ENC, DOTP_U_W_DESC; 29870b57cec5SDimitry Andricdef DOTP_U_D : DOTP_U_D_ENC, DOTP_U_D_DESC; 29880b57cec5SDimitry Andric 29890b57cec5SDimitry Andricdef DPADD_S_H : DPADD_S_H_ENC, DPADD_S_H_DESC; 29900b57cec5SDimitry Andricdef DPADD_S_W : DPADD_S_W_ENC, DPADD_S_W_DESC; 29910b57cec5SDimitry Andricdef DPADD_S_D : DPADD_S_D_ENC, DPADD_S_D_DESC; 29920b57cec5SDimitry Andric 29930b57cec5SDimitry Andricdef DPADD_U_H : DPADD_U_H_ENC, DPADD_U_H_DESC; 29940b57cec5SDimitry Andricdef DPADD_U_W : DPADD_U_W_ENC, DPADD_U_W_DESC; 29950b57cec5SDimitry Andricdef DPADD_U_D : DPADD_U_D_ENC, DPADD_U_D_DESC; 29960b57cec5SDimitry Andric 29970b57cec5SDimitry Andricdef DPSUB_S_H : DPSUB_S_H_ENC, DPSUB_S_H_DESC; 29980b57cec5SDimitry Andricdef DPSUB_S_W : DPSUB_S_W_ENC, DPSUB_S_W_DESC; 29990b57cec5SDimitry Andricdef DPSUB_S_D : DPSUB_S_D_ENC, DPSUB_S_D_DESC; 30000b57cec5SDimitry Andric 30010b57cec5SDimitry Andricdef DPSUB_U_H : DPSUB_U_H_ENC, DPSUB_U_H_DESC; 30020b57cec5SDimitry Andricdef DPSUB_U_W : DPSUB_U_W_ENC, DPSUB_U_W_DESC; 30030b57cec5SDimitry Andricdef DPSUB_U_D : DPSUB_U_D_ENC, DPSUB_U_D_DESC; 30040b57cec5SDimitry Andric 30050b57cec5SDimitry Andricdef FADD_W : FADD_W_ENC, FADD_W_DESC; 30060b57cec5SDimitry Andricdef FADD_D : FADD_D_ENC, FADD_D_DESC; 30070b57cec5SDimitry Andric 30080b57cec5SDimitry Andricdef FCAF_W : FCAF_W_ENC, FCAF_W_DESC; 30090b57cec5SDimitry Andricdef FCAF_D : FCAF_D_ENC, FCAF_D_DESC; 30100b57cec5SDimitry Andric 30110b57cec5SDimitry Andricdef FCEQ_W : FCEQ_W_ENC, FCEQ_W_DESC; 30120b57cec5SDimitry Andricdef FCEQ_D : FCEQ_D_ENC, FCEQ_D_DESC; 30130b57cec5SDimitry Andric 30140b57cec5SDimitry Andricdef FCLE_W : FCLE_W_ENC, FCLE_W_DESC; 30150b57cec5SDimitry Andricdef FCLE_D : FCLE_D_ENC, FCLE_D_DESC; 30160b57cec5SDimitry Andric 30170b57cec5SDimitry Andricdef FCLT_W : FCLT_W_ENC, FCLT_W_DESC; 30180b57cec5SDimitry Andricdef FCLT_D : FCLT_D_ENC, FCLT_D_DESC; 30190b57cec5SDimitry Andric 30200b57cec5SDimitry Andricdef FCLASS_W : FCLASS_W_ENC, FCLASS_W_DESC; 30210b57cec5SDimitry Andricdef FCLASS_D : FCLASS_D_ENC, FCLASS_D_DESC; 30220b57cec5SDimitry Andric 30230b57cec5SDimitry Andricdef FCNE_W : FCNE_W_ENC, FCNE_W_DESC; 30240b57cec5SDimitry Andricdef FCNE_D : FCNE_D_ENC, FCNE_D_DESC; 30250b57cec5SDimitry Andric 30260b57cec5SDimitry Andricdef FCOR_W : FCOR_W_ENC, FCOR_W_DESC; 30270b57cec5SDimitry Andricdef FCOR_D : FCOR_D_ENC, FCOR_D_DESC; 30280b57cec5SDimitry Andric 30290b57cec5SDimitry Andricdef FCUEQ_W : FCUEQ_W_ENC, FCUEQ_W_DESC; 30300b57cec5SDimitry Andricdef FCUEQ_D : FCUEQ_D_ENC, FCUEQ_D_DESC; 30310b57cec5SDimitry Andric 30320b57cec5SDimitry Andricdef FCULE_W : FCULE_W_ENC, FCULE_W_DESC; 30330b57cec5SDimitry Andricdef FCULE_D : FCULE_D_ENC, FCULE_D_DESC; 30340b57cec5SDimitry Andric 30350b57cec5SDimitry Andricdef FCULT_W : FCULT_W_ENC, FCULT_W_DESC; 30360b57cec5SDimitry Andricdef FCULT_D : FCULT_D_ENC, FCULT_D_DESC; 30370b57cec5SDimitry Andric 30380b57cec5SDimitry Andricdef FCUN_W : FCUN_W_ENC, FCUN_W_DESC; 30390b57cec5SDimitry Andricdef FCUN_D : FCUN_D_ENC, FCUN_D_DESC; 30400b57cec5SDimitry Andric 30410b57cec5SDimitry Andricdef FCUNE_W : FCUNE_W_ENC, FCUNE_W_DESC; 30420b57cec5SDimitry Andricdef FCUNE_D : FCUNE_D_ENC, FCUNE_D_DESC; 30430b57cec5SDimitry Andric 30440b57cec5SDimitry Andricdef FDIV_W : FDIV_W_ENC, FDIV_W_DESC; 30450b57cec5SDimitry Andricdef FDIV_D : FDIV_D_ENC, FDIV_D_DESC; 30460b57cec5SDimitry Andric 30470b57cec5SDimitry Andricdef FEXDO_H : FEXDO_H_ENC, FEXDO_H_DESC; 30480b57cec5SDimitry Andricdef FEXDO_W : FEXDO_W_ENC, FEXDO_W_DESC; 30490b57cec5SDimitry Andric 30500b57cec5SDimitry Andricdef FEXP2_W : FEXP2_W_ENC, FEXP2_W_DESC; 30510b57cec5SDimitry Andricdef FEXP2_D : FEXP2_D_ENC, FEXP2_D_DESC; 30520b57cec5SDimitry Andricdef FEXP2_W_1_PSEUDO : FEXP2_W_1_PSEUDO_DESC; 30530b57cec5SDimitry Andricdef FEXP2_D_1_PSEUDO : FEXP2_D_1_PSEUDO_DESC; 30540b57cec5SDimitry Andric 30550b57cec5SDimitry Andricdef FEXUPL_W : FEXUPL_W_ENC, FEXUPL_W_DESC; 30560b57cec5SDimitry Andricdef FEXUPL_D : FEXUPL_D_ENC, FEXUPL_D_DESC; 30570b57cec5SDimitry Andric 30580b57cec5SDimitry Andricdef FEXUPR_W : FEXUPR_W_ENC, FEXUPR_W_DESC; 30590b57cec5SDimitry Andricdef FEXUPR_D : FEXUPR_D_ENC, FEXUPR_D_DESC; 30600b57cec5SDimitry Andric 30610b57cec5SDimitry Andricdef FFINT_S_W : FFINT_S_W_ENC, FFINT_S_W_DESC; 30620b57cec5SDimitry Andricdef FFINT_S_D : FFINT_S_D_ENC, FFINT_S_D_DESC; 30630b57cec5SDimitry Andric 30640b57cec5SDimitry Andricdef FFINT_U_W : FFINT_U_W_ENC, FFINT_U_W_DESC; 30650b57cec5SDimitry Andricdef FFINT_U_D : FFINT_U_D_ENC, FFINT_U_D_DESC; 30660b57cec5SDimitry Andric 30670b57cec5SDimitry Andricdef FFQL_W : FFQL_W_ENC, FFQL_W_DESC; 30680b57cec5SDimitry Andricdef FFQL_D : FFQL_D_ENC, FFQL_D_DESC; 30690b57cec5SDimitry Andric 30700b57cec5SDimitry Andricdef FFQR_W : FFQR_W_ENC, FFQR_W_DESC; 30710b57cec5SDimitry Andricdef FFQR_D : FFQR_D_ENC, FFQR_D_DESC; 30720b57cec5SDimitry Andric 30730b57cec5SDimitry Andricdef FILL_B : FILL_B_ENC, FILL_B_DESC; 30740b57cec5SDimitry Andricdef FILL_H : FILL_H_ENC, FILL_H_DESC; 30750b57cec5SDimitry Andricdef FILL_W : FILL_W_ENC, FILL_W_DESC; 30760b57cec5SDimitry Andricdef FILL_D : FILL_D_ENC, FILL_D_DESC, ASE_MSA64; 30770b57cec5SDimitry Andricdef FILL_FW_PSEUDO : FILL_FW_PSEUDO_DESC; 30780b57cec5SDimitry Andricdef FILL_FD_PSEUDO : FILL_FD_PSEUDO_DESC; 30790b57cec5SDimitry Andric 30800b57cec5SDimitry Andricdef FLOG2_W : FLOG2_W_ENC, FLOG2_W_DESC; 30810b57cec5SDimitry Andricdef FLOG2_D : FLOG2_D_ENC, FLOG2_D_DESC; 30820b57cec5SDimitry Andric 30830b57cec5SDimitry Andricdef FMADD_W : FMADD_W_ENC, FMADD_W_DESC; 30840b57cec5SDimitry Andricdef FMADD_D : FMADD_D_ENC, FMADD_D_DESC; 30850b57cec5SDimitry Andric 30860b57cec5SDimitry Andricdef FMAX_W : FMAX_W_ENC, FMAX_W_DESC; 30870b57cec5SDimitry Andricdef FMAX_D : FMAX_D_ENC, FMAX_D_DESC; 30880b57cec5SDimitry Andric 30890b57cec5SDimitry Andricdef FMAX_A_W : FMAX_A_W_ENC, FMAX_A_W_DESC; 30900b57cec5SDimitry Andricdef FMAX_A_D : FMAX_A_D_ENC, FMAX_A_D_DESC; 30910b57cec5SDimitry Andric 30920b57cec5SDimitry Andricdef FMIN_W : FMIN_W_ENC, FMIN_W_DESC; 30930b57cec5SDimitry Andricdef FMIN_D : FMIN_D_ENC, FMIN_D_DESC; 30940b57cec5SDimitry Andric 30950b57cec5SDimitry Andricdef FMIN_A_W : FMIN_A_W_ENC, FMIN_A_W_DESC; 30960b57cec5SDimitry Andricdef FMIN_A_D : FMIN_A_D_ENC, FMIN_A_D_DESC; 30970b57cec5SDimitry Andric 30980b57cec5SDimitry Andricdef FMSUB_W : FMSUB_W_ENC, FMSUB_W_DESC; 30990b57cec5SDimitry Andricdef FMSUB_D : FMSUB_D_ENC, FMSUB_D_DESC; 31000b57cec5SDimitry Andric 31010b57cec5SDimitry Andricdef FMUL_W : FMUL_W_ENC, FMUL_W_DESC; 31020b57cec5SDimitry Andricdef FMUL_D : FMUL_D_ENC, FMUL_D_DESC; 31030b57cec5SDimitry Andric 31040b57cec5SDimitry Andricdef FRINT_W : FRINT_W_ENC, FRINT_W_DESC; 31050b57cec5SDimitry Andricdef FRINT_D : FRINT_D_ENC, FRINT_D_DESC; 31060b57cec5SDimitry Andric 31070b57cec5SDimitry Andricdef FRCP_W : FRCP_W_ENC, FRCP_W_DESC; 31080b57cec5SDimitry Andricdef FRCP_D : FRCP_D_ENC, FRCP_D_DESC; 31090b57cec5SDimitry Andric 31100b57cec5SDimitry Andricdef FRSQRT_W : FRSQRT_W_ENC, FRSQRT_W_DESC; 31110b57cec5SDimitry Andricdef FRSQRT_D : FRSQRT_D_ENC, FRSQRT_D_DESC; 31120b57cec5SDimitry Andric 31130b57cec5SDimitry Andricdef FSAF_W : FSAF_W_ENC, FSAF_W_DESC; 31140b57cec5SDimitry Andricdef FSAF_D : FSAF_D_ENC, FSAF_D_DESC; 31150b57cec5SDimitry Andric 31160b57cec5SDimitry Andricdef FSEQ_W : FSEQ_W_ENC, FSEQ_W_DESC; 31170b57cec5SDimitry Andricdef FSEQ_D : FSEQ_D_ENC, FSEQ_D_DESC; 31180b57cec5SDimitry Andric 31190b57cec5SDimitry Andricdef FSLE_W : FSLE_W_ENC, FSLE_W_DESC; 31200b57cec5SDimitry Andricdef FSLE_D : FSLE_D_ENC, FSLE_D_DESC; 31210b57cec5SDimitry Andric 31220b57cec5SDimitry Andricdef FSLT_W : FSLT_W_ENC, FSLT_W_DESC; 31230b57cec5SDimitry Andricdef FSLT_D : FSLT_D_ENC, FSLT_D_DESC; 31240b57cec5SDimitry Andric 31250b57cec5SDimitry Andricdef FSNE_W : FSNE_W_ENC, FSNE_W_DESC; 31260b57cec5SDimitry Andricdef FSNE_D : FSNE_D_ENC, FSNE_D_DESC; 31270b57cec5SDimitry Andric 31280b57cec5SDimitry Andricdef FSOR_W : FSOR_W_ENC, FSOR_W_DESC; 31290b57cec5SDimitry Andricdef FSOR_D : FSOR_D_ENC, FSOR_D_DESC; 31300b57cec5SDimitry Andric 31310b57cec5SDimitry Andricdef FSQRT_W : FSQRT_W_ENC, FSQRT_W_DESC; 31320b57cec5SDimitry Andricdef FSQRT_D : FSQRT_D_ENC, FSQRT_D_DESC; 31330b57cec5SDimitry Andric 31340b57cec5SDimitry Andricdef FSUB_W : FSUB_W_ENC, FSUB_W_DESC; 31350b57cec5SDimitry Andricdef FSUB_D : FSUB_D_ENC, FSUB_D_DESC; 31360b57cec5SDimitry Andric 31370b57cec5SDimitry Andricdef FSUEQ_W : FSUEQ_W_ENC, FSUEQ_W_DESC; 31380b57cec5SDimitry Andricdef FSUEQ_D : FSUEQ_D_ENC, FSUEQ_D_DESC; 31390b57cec5SDimitry Andric 31400b57cec5SDimitry Andricdef FSULE_W : FSULE_W_ENC, FSULE_W_DESC; 31410b57cec5SDimitry Andricdef FSULE_D : FSULE_D_ENC, FSULE_D_DESC; 31420b57cec5SDimitry Andric 31430b57cec5SDimitry Andricdef FSULT_W : FSULT_W_ENC, FSULT_W_DESC; 31440b57cec5SDimitry Andricdef FSULT_D : FSULT_D_ENC, FSULT_D_DESC; 31450b57cec5SDimitry Andric 31460b57cec5SDimitry Andricdef FSUN_W : FSUN_W_ENC, FSUN_W_DESC; 31470b57cec5SDimitry Andricdef FSUN_D : FSUN_D_ENC, FSUN_D_DESC; 31480b57cec5SDimitry Andric 31490b57cec5SDimitry Andricdef FSUNE_W : FSUNE_W_ENC, FSUNE_W_DESC; 31500b57cec5SDimitry Andricdef FSUNE_D : FSUNE_D_ENC, FSUNE_D_DESC; 31510b57cec5SDimitry Andric 31520b57cec5SDimitry Andricdef FTINT_S_W : FTINT_S_W_ENC, FTINT_S_W_DESC; 31530b57cec5SDimitry Andricdef FTINT_S_D : FTINT_S_D_ENC, FTINT_S_D_DESC; 31540b57cec5SDimitry Andric 31550b57cec5SDimitry Andricdef FTINT_U_W : FTINT_U_W_ENC, FTINT_U_W_DESC; 31560b57cec5SDimitry Andricdef FTINT_U_D : FTINT_U_D_ENC, FTINT_U_D_DESC; 31570b57cec5SDimitry Andric 31580b57cec5SDimitry Andricdef FTQ_H : FTQ_H_ENC, FTQ_H_DESC; 31590b57cec5SDimitry Andricdef FTQ_W : FTQ_W_ENC, FTQ_W_DESC; 31600b57cec5SDimitry Andric 31610b57cec5SDimitry Andricdef FTRUNC_S_W : FTRUNC_S_W_ENC, FTRUNC_S_W_DESC; 31620b57cec5SDimitry Andricdef FTRUNC_S_D : FTRUNC_S_D_ENC, FTRUNC_S_D_DESC; 31630b57cec5SDimitry Andric 31640b57cec5SDimitry Andricdef FTRUNC_U_W : FTRUNC_U_W_ENC, FTRUNC_U_W_DESC; 31650b57cec5SDimitry Andricdef FTRUNC_U_D : FTRUNC_U_D_ENC, FTRUNC_U_D_DESC; 31660b57cec5SDimitry Andric 31670b57cec5SDimitry Andricdef : MipsPat<(fsub MSA128WOpnd:$wd, (fmul MSA128WOpnd:$ws, MSA128WOpnd:$wt)), 31680b57cec5SDimitry Andric (FMSUB_W MSA128WOpnd:$wd, MSA128WOpnd:$ws, MSA128WOpnd:$wt)>, 31690b57cec5SDimitry Andric ISA_MIPS1, ASE_MSA, FPOP_FUSION_FAST; 31700b57cec5SDimitry Andricdef : MipsPat<(fsub MSA128DOpnd:$wd, (fmul MSA128DOpnd:$ws, MSA128DOpnd:$wt)), 31710b57cec5SDimitry Andric (FMSUB_D MSA128DOpnd:$wd, MSA128DOpnd:$ws, MSA128DOpnd:$wt)>, 31720b57cec5SDimitry Andric ISA_MIPS1, ASE_MSA, FPOP_FUSION_FAST; 31730b57cec5SDimitry Andric 31740b57cec5SDimitry Andricdef : MipsPat<(fadd MSA128WOpnd:$wd, (fmul MSA128WOpnd:$ws, MSA128WOpnd:$wt)), 31750b57cec5SDimitry Andric (FMADD_W MSA128WOpnd:$wd, MSA128WOpnd:$ws, MSA128WOpnd:$wt)>, 31760b57cec5SDimitry Andric ISA_MIPS1, ASE_MSA, FPOP_FUSION_FAST; 31770b57cec5SDimitry Andricdef : MipsPat<(fadd MSA128DOpnd:$wd, (fmul MSA128DOpnd:$ws, MSA128DOpnd:$wt)), 31780b57cec5SDimitry Andric (FMADD_D MSA128DOpnd:$wd, MSA128DOpnd:$ws, MSA128DOpnd:$wt)>, 31790b57cec5SDimitry Andric ISA_MIPS1, ASE_MSA, FPOP_FUSION_FAST; 31800b57cec5SDimitry Andric 31810b57cec5SDimitry Andricdef HADD_S_H : HADD_S_H_ENC, HADD_S_H_DESC; 31820b57cec5SDimitry Andricdef HADD_S_W : HADD_S_W_ENC, HADD_S_W_DESC; 31830b57cec5SDimitry Andricdef HADD_S_D : HADD_S_D_ENC, HADD_S_D_DESC; 31840b57cec5SDimitry Andric 31850b57cec5SDimitry Andricdef HADD_U_H : HADD_U_H_ENC, HADD_U_H_DESC; 31860b57cec5SDimitry Andricdef HADD_U_W : HADD_U_W_ENC, HADD_U_W_DESC; 31870b57cec5SDimitry Andricdef HADD_U_D : HADD_U_D_ENC, HADD_U_D_DESC; 31880b57cec5SDimitry Andric 31890b57cec5SDimitry Andricdef HSUB_S_H : HSUB_S_H_ENC, HSUB_S_H_DESC; 31900b57cec5SDimitry Andricdef HSUB_S_W : HSUB_S_W_ENC, HSUB_S_W_DESC; 31910b57cec5SDimitry Andricdef HSUB_S_D : HSUB_S_D_ENC, HSUB_S_D_DESC; 31920b57cec5SDimitry Andric 31930b57cec5SDimitry Andricdef HSUB_U_H : HSUB_U_H_ENC, HSUB_U_H_DESC; 31940b57cec5SDimitry Andricdef HSUB_U_W : HSUB_U_W_ENC, HSUB_U_W_DESC; 31950b57cec5SDimitry Andricdef HSUB_U_D : HSUB_U_D_ENC, HSUB_U_D_DESC; 31960b57cec5SDimitry Andric 31970b57cec5SDimitry Andricdef ILVEV_B : ILVEV_B_ENC, ILVEV_B_DESC; 31980b57cec5SDimitry Andricdef ILVEV_H : ILVEV_H_ENC, ILVEV_H_DESC; 31990b57cec5SDimitry Andricdef ILVEV_W : ILVEV_W_ENC, ILVEV_W_DESC; 32000b57cec5SDimitry Andricdef ILVEV_D : ILVEV_D_ENC, ILVEV_D_DESC; 32010b57cec5SDimitry Andric 32020b57cec5SDimitry Andricdef ILVL_B : ILVL_B_ENC, ILVL_B_DESC; 32030b57cec5SDimitry Andricdef ILVL_H : ILVL_H_ENC, ILVL_H_DESC; 32040b57cec5SDimitry Andricdef ILVL_W : ILVL_W_ENC, ILVL_W_DESC; 32050b57cec5SDimitry Andricdef ILVL_D : ILVL_D_ENC, ILVL_D_DESC; 32060b57cec5SDimitry Andric 32070b57cec5SDimitry Andricdef ILVOD_B : ILVOD_B_ENC, ILVOD_B_DESC; 32080b57cec5SDimitry Andricdef ILVOD_H : ILVOD_H_ENC, ILVOD_H_DESC; 32090b57cec5SDimitry Andricdef ILVOD_W : ILVOD_W_ENC, ILVOD_W_DESC; 32100b57cec5SDimitry Andricdef ILVOD_D : ILVOD_D_ENC, ILVOD_D_DESC; 32110b57cec5SDimitry Andric 32120b57cec5SDimitry Andricdef ILVR_B : ILVR_B_ENC, ILVR_B_DESC; 32130b57cec5SDimitry Andricdef ILVR_H : ILVR_H_ENC, ILVR_H_DESC; 32140b57cec5SDimitry Andricdef ILVR_W : ILVR_W_ENC, ILVR_W_DESC; 32150b57cec5SDimitry Andricdef ILVR_D : ILVR_D_ENC, ILVR_D_DESC; 32160b57cec5SDimitry Andric 32170b57cec5SDimitry Andricdef INSERT_B : INSERT_B_ENC, INSERT_B_DESC; 32180b57cec5SDimitry Andricdef INSERT_H : INSERT_H_ENC, INSERT_H_DESC; 32190b57cec5SDimitry Andricdef INSERT_W : INSERT_W_ENC, INSERT_W_DESC; 32200b57cec5SDimitry Andricdef INSERT_D : INSERT_D_ENC, INSERT_D_DESC, ASE_MSA64; 32210b57cec5SDimitry Andric 32220b57cec5SDimitry Andric// INSERT_FW_PSEUDO defined after INSVE_W 32230b57cec5SDimitry Andric// INSERT_FD_PSEUDO defined after INSVE_D 32240b57cec5SDimitry Andric 32250b57cec5SDimitry Andric// There is a fourth operand that is not present in the encoding. Use a 32260b57cec5SDimitry Andric// custom decoder to get a chance to add it. 32270b57cec5SDimitry Andriclet DecoderMethod = "DecodeINSVE_DF" in { 32280b57cec5SDimitry Andric def INSVE_B : INSVE_B_ENC, INSVE_B_DESC; 32290b57cec5SDimitry Andric def INSVE_H : INSVE_H_ENC, INSVE_H_DESC; 32300b57cec5SDimitry Andric def INSVE_W : INSVE_W_ENC, INSVE_W_DESC; 32310b57cec5SDimitry Andric def INSVE_D : INSVE_D_ENC, INSVE_D_DESC; 32320b57cec5SDimitry Andric} 32330b57cec5SDimitry Andric 32340b57cec5SDimitry Andricdef INSERT_FW_PSEUDO : INSERT_FW_PSEUDO_DESC; 32350b57cec5SDimitry Andricdef INSERT_FD_PSEUDO : INSERT_FD_PSEUDO_DESC; 32360b57cec5SDimitry Andric 32370b57cec5SDimitry Andricdef INSERT_B_VIDX_PSEUDO : INSERT_B_VIDX_PSEUDO_DESC; 32380b57cec5SDimitry Andricdef INSERT_H_VIDX_PSEUDO : INSERT_H_VIDX_PSEUDO_DESC; 32390b57cec5SDimitry Andricdef INSERT_W_VIDX_PSEUDO : INSERT_W_VIDX_PSEUDO_DESC; 32400b57cec5SDimitry Andricdef INSERT_D_VIDX_PSEUDO : INSERT_D_VIDX_PSEUDO_DESC; 32410b57cec5SDimitry Andricdef INSERT_FW_VIDX_PSEUDO : INSERT_FW_VIDX_PSEUDO_DESC; 32420b57cec5SDimitry Andricdef INSERT_FD_VIDX_PSEUDO : INSERT_FD_VIDX_PSEUDO_DESC; 32430b57cec5SDimitry Andric 32440b57cec5SDimitry Andricdef INSERT_B_VIDX64_PSEUDO : INSERT_B_VIDX64_PSEUDO_DESC; 32450b57cec5SDimitry Andricdef INSERT_H_VIDX64_PSEUDO : INSERT_H_VIDX64_PSEUDO_DESC; 32460b57cec5SDimitry Andricdef INSERT_W_VIDX64_PSEUDO : INSERT_W_VIDX64_PSEUDO_DESC; 32470b57cec5SDimitry Andricdef INSERT_D_VIDX64_PSEUDO : INSERT_D_VIDX64_PSEUDO_DESC; 32480b57cec5SDimitry Andricdef INSERT_FW_VIDX64_PSEUDO : INSERT_FW_VIDX64_PSEUDO_DESC; 32490b57cec5SDimitry Andricdef INSERT_FD_VIDX64_PSEUDO : INSERT_FD_VIDX64_PSEUDO_DESC; 32500b57cec5SDimitry Andric 32510b57cec5SDimitry Andricdef LD_B: LD_B_ENC, LD_B_DESC; 32520b57cec5SDimitry Andricdef LD_H: LD_H_ENC, LD_H_DESC; 32530b57cec5SDimitry Andricdef LD_W: LD_W_ENC, LD_W_DESC; 32540b57cec5SDimitry Andricdef LD_D: LD_D_ENC, LD_D_DESC; 32550b57cec5SDimitry Andric 32560b57cec5SDimitry Andricdef LDI_B : LDI_B_ENC, LDI_B_DESC; 32570b57cec5SDimitry Andricdef LDI_H : LDI_H_ENC, LDI_H_DESC; 32580b57cec5SDimitry Andricdef LDI_W : LDI_W_ENC, LDI_W_DESC; 32590b57cec5SDimitry Andricdef LDI_D : LDI_D_ENC, LDI_D_DESC; 32600b57cec5SDimitry Andric 32610b57cec5SDimitry Andricdef LSA : LSA_ENC, LSA_DESC; 32620b57cec5SDimitry Andricdef DLSA : DLSA_ENC, DLSA_DESC, ASE_MSA64; 32630b57cec5SDimitry Andric 32640b57cec5SDimitry Andricdef MADD_Q_H : MADD_Q_H_ENC, MADD_Q_H_DESC; 32650b57cec5SDimitry Andricdef MADD_Q_W : MADD_Q_W_ENC, MADD_Q_W_DESC; 32660b57cec5SDimitry Andric 32670b57cec5SDimitry Andricdef MADDR_Q_H : MADDR_Q_H_ENC, MADDR_Q_H_DESC; 32680b57cec5SDimitry Andricdef MADDR_Q_W : MADDR_Q_W_ENC, MADDR_Q_W_DESC; 32690b57cec5SDimitry Andric 32700b57cec5SDimitry Andricdef MADDV_B : MADDV_B_ENC, MADDV_B_DESC; 32710b57cec5SDimitry Andricdef MADDV_H : MADDV_H_ENC, MADDV_H_DESC; 32720b57cec5SDimitry Andricdef MADDV_W : MADDV_W_ENC, MADDV_W_DESC; 32730b57cec5SDimitry Andricdef MADDV_D : MADDV_D_ENC, MADDV_D_DESC; 32740b57cec5SDimitry Andric 32750b57cec5SDimitry Andricdef MAX_A_B : MAX_A_B_ENC, MAX_A_B_DESC; 32760b57cec5SDimitry Andricdef MAX_A_H : MAX_A_H_ENC, MAX_A_H_DESC; 32770b57cec5SDimitry Andricdef MAX_A_W : MAX_A_W_ENC, MAX_A_W_DESC; 32780b57cec5SDimitry Andricdef MAX_A_D : MAX_A_D_ENC, MAX_A_D_DESC; 32790b57cec5SDimitry Andric 32800b57cec5SDimitry Andricdef MAX_S_B : MAX_S_B_ENC, MAX_S_B_DESC; 32810b57cec5SDimitry Andricdef MAX_S_H : MAX_S_H_ENC, MAX_S_H_DESC; 32820b57cec5SDimitry Andricdef MAX_S_W : MAX_S_W_ENC, MAX_S_W_DESC; 32830b57cec5SDimitry Andricdef MAX_S_D : MAX_S_D_ENC, MAX_S_D_DESC; 32840b57cec5SDimitry Andric 32850b57cec5SDimitry Andricdef MAX_U_B : MAX_U_B_ENC, MAX_U_B_DESC; 32860b57cec5SDimitry Andricdef MAX_U_H : MAX_U_H_ENC, MAX_U_H_DESC; 32870b57cec5SDimitry Andricdef MAX_U_W : MAX_U_W_ENC, MAX_U_W_DESC; 32880b57cec5SDimitry Andricdef MAX_U_D : MAX_U_D_ENC, MAX_U_D_DESC; 32890b57cec5SDimitry Andric 32900b57cec5SDimitry Andricdef MAXI_S_B : MAXI_S_B_ENC, MAXI_S_B_DESC; 32910b57cec5SDimitry Andricdef MAXI_S_H : MAXI_S_H_ENC, MAXI_S_H_DESC; 32920b57cec5SDimitry Andricdef MAXI_S_W : MAXI_S_W_ENC, MAXI_S_W_DESC; 32930b57cec5SDimitry Andricdef MAXI_S_D : MAXI_S_D_ENC, MAXI_S_D_DESC; 32940b57cec5SDimitry Andric 32950b57cec5SDimitry Andricdef MAXI_U_B : MAXI_U_B_ENC, MAXI_U_B_DESC; 32960b57cec5SDimitry Andricdef MAXI_U_H : MAXI_U_H_ENC, MAXI_U_H_DESC; 32970b57cec5SDimitry Andricdef MAXI_U_W : MAXI_U_W_ENC, MAXI_U_W_DESC; 32980b57cec5SDimitry Andricdef MAXI_U_D : MAXI_U_D_ENC, MAXI_U_D_DESC; 32990b57cec5SDimitry Andric 33000b57cec5SDimitry Andricdef MIN_A_B : MIN_A_B_ENC, MIN_A_B_DESC; 33010b57cec5SDimitry Andricdef MIN_A_H : MIN_A_H_ENC, MIN_A_H_DESC; 33020b57cec5SDimitry Andricdef MIN_A_W : MIN_A_W_ENC, MIN_A_W_DESC; 33030b57cec5SDimitry Andricdef MIN_A_D : MIN_A_D_ENC, MIN_A_D_DESC; 33040b57cec5SDimitry Andric 33050b57cec5SDimitry Andricdef MIN_S_B : MIN_S_B_ENC, MIN_S_B_DESC; 33060b57cec5SDimitry Andricdef MIN_S_H : MIN_S_H_ENC, MIN_S_H_DESC; 33070b57cec5SDimitry Andricdef MIN_S_W : MIN_S_W_ENC, MIN_S_W_DESC; 33080b57cec5SDimitry Andricdef MIN_S_D : MIN_S_D_ENC, MIN_S_D_DESC; 33090b57cec5SDimitry Andric 33100b57cec5SDimitry Andricdef MIN_U_B : MIN_U_B_ENC, MIN_U_B_DESC; 33110b57cec5SDimitry Andricdef MIN_U_H : MIN_U_H_ENC, MIN_U_H_DESC; 33120b57cec5SDimitry Andricdef MIN_U_W : MIN_U_W_ENC, MIN_U_W_DESC; 33130b57cec5SDimitry Andricdef MIN_U_D : MIN_U_D_ENC, MIN_U_D_DESC; 33140b57cec5SDimitry Andric 33150b57cec5SDimitry Andricdef MINI_S_B : MINI_S_B_ENC, MINI_S_B_DESC; 33160b57cec5SDimitry Andricdef MINI_S_H : MINI_S_H_ENC, MINI_S_H_DESC; 33170b57cec5SDimitry Andricdef MINI_S_W : MINI_S_W_ENC, MINI_S_W_DESC; 33180b57cec5SDimitry Andricdef MINI_S_D : MINI_S_D_ENC, MINI_S_D_DESC; 33190b57cec5SDimitry Andric 33200b57cec5SDimitry Andricdef MINI_U_B : MINI_U_B_ENC, MINI_U_B_DESC; 33210b57cec5SDimitry Andricdef MINI_U_H : MINI_U_H_ENC, MINI_U_H_DESC; 33220b57cec5SDimitry Andricdef MINI_U_W : MINI_U_W_ENC, MINI_U_W_DESC; 33230b57cec5SDimitry Andricdef MINI_U_D : MINI_U_D_ENC, MINI_U_D_DESC; 33240b57cec5SDimitry Andric 33250b57cec5SDimitry Andricdef MOD_S_B : MOD_S_B_ENC, MOD_S_B_DESC; 33260b57cec5SDimitry Andricdef MOD_S_H : MOD_S_H_ENC, MOD_S_H_DESC; 33270b57cec5SDimitry Andricdef MOD_S_W : MOD_S_W_ENC, MOD_S_W_DESC; 33280b57cec5SDimitry Andricdef MOD_S_D : MOD_S_D_ENC, MOD_S_D_DESC; 33290b57cec5SDimitry Andric 33300b57cec5SDimitry Andricdef MOD_U_B : MOD_U_B_ENC, MOD_U_B_DESC; 33310b57cec5SDimitry Andricdef MOD_U_H : MOD_U_H_ENC, MOD_U_H_DESC; 33320b57cec5SDimitry Andricdef MOD_U_W : MOD_U_W_ENC, MOD_U_W_DESC; 33330b57cec5SDimitry Andricdef MOD_U_D : MOD_U_D_ENC, MOD_U_D_DESC; 33340b57cec5SDimitry Andric 33350b57cec5SDimitry Andricdef MOVE_V : MOVE_V_ENC, MOVE_V_DESC; 33360b57cec5SDimitry Andric 33370b57cec5SDimitry Andricdef MSUB_Q_H : MSUB_Q_H_ENC, MSUB_Q_H_DESC; 33380b57cec5SDimitry Andricdef MSUB_Q_W : MSUB_Q_W_ENC, MSUB_Q_W_DESC; 33390b57cec5SDimitry Andric 33400b57cec5SDimitry Andricdef MSUBR_Q_H : MSUBR_Q_H_ENC, MSUBR_Q_H_DESC; 33410b57cec5SDimitry Andricdef MSUBR_Q_W : MSUBR_Q_W_ENC, MSUBR_Q_W_DESC; 33420b57cec5SDimitry Andric 33430b57cec5SDimitry Andricdef MSUBV_B : MSUBV_B_ENC, MSUBV_B_DESC; 33440b57cec5SDimitry Andricdef MSUBV_H : MSUBV_H_ENC, MSUBV_H_DESC; 33450b57cec5SDimitry Andricdef MSUBV_W : MSUBV_W_ENC, MSUBV_W_DESC; 33460b57cec5SDimitry Andricdef MSUBV_D : MSUBV_D_ENC, MSUBV_D_DESC; 33470b57cec5SDimitry Andric 33480b57cec5SDimitry Andricdef MUL_Q_H : MUL_Q_H_ENC, MUL_Q_H_DESC; 33490b57cec5SDimitry Andricdef MUL_Q_W : MUL_Q_W_ENC, MUL_Q_W_DESC; 33500b57cec5SDimitry Andric 33510b57cec5SDimitry Andricdef MULR_Q_H : MULR_Q_H_ENC, MULR_Q_H_DESC; 33520b57cec5SDimitry Andricdef MULR_Q_W : MULR_Q_W_ENC, MULR_Q_W_DESC; 33530b57cec5SDimitry Andric 33540b57cec5SDimitry Andricdef MULV_B : MULV_B_ENC, MULV_B_DESC; 33550b57cec5SDimitry Andricdef MULV_H : MULV_H_ENC, MULV_H_DESC; 33560b57cec5SDimitry Andricdef MULV_W : MULV_W_ENC, MULV_W_DESC; 33570b57cec5SDimitry Andricdef MULV_D : MULV_D_ENC, MULV_D_DESC; 33580b57cec5SDimitry Andric 33590b57cec5SDimitry Andricdef NLOC_B : NLOC_B_ENC, NLOC_B_DESC; 33600b57cec5SDimitry Andricdef NLOC_H : NLOC_H_ENC, NLOC_H_DESC; 33610b57cec5SDimitry Andricdef NLOC_W : NLOC_W_ENC, NLOC_W_DESC; 33620b57cec5SDimitry Andricdef NLOC_D : NLOC_D_ENC, NLOC_D_DESC; 33630b57cec5SDimitry Andric 33640b57cec5SDimitry Andricdef NLZC_B : NLZC_B_ENC, NLZC_B_DESC; 33650b57cec5SDimitry Andricdef NLZC_H : NLZC_H_ENC, NLZC_H_DESC; 33660b57cec5SDimitry Andricdef NLZC_W : NLZC_W_ENC, NLZC_W_DESC; 33670b57cec5SDimitry Andricdef NLZC_D : NLZC_D_ENC, NLZC_D_DESC; 33680b57cec5SDimitry Andric 33690b57cec5SDimitry Andricdef NOR_V : NOR_V_ENC, NOR_V_DESC; 33700b57cec5SDimitry Andricdef NOR_V_H_PSEUDO : NOR_V_H_PSEUDO_DESC, 33710b57cec5SDimitry Andric PseudoInstExpansion<(NOR_V MSA128BOpnd:$wd, 33720b57cec5SDimitry Andric MSA128BOpnd:$ws, 33730b57cec5SDimitry Andric MSA128BOpnd:$wt)>; 33740b57cec5SDimitry Andricdef NOR_V_W_PSEUDO : NOR_V_W_PSEUDO_DESC, 33750b57cec5SDimitry Andric PseudoInstExpansion<(NOR_V MSA128BOpnd:$wd, 33760b57cec5SDimitry Andric MSA128BOpnd:$ws, 33770b57cec5SDimitry Andric MSA128BOpnd:$wt)>; 33780b57cec5SDimitry Andricdef NOR_V_D_PSEUDO : NOR_V_D_PSEUDO_DESC, 33790b57cec5SDimitry Andric PseudoInstExpansion<(NOR_V MSA128BOpnd:$wd, 33800b57cec5SDimitry Andric MSA128BOpnd:$ws, 33810b57cec5SDimitry Andric MSA128BOpnd:$wt)>; 33820b57cec5SDimitry Andric 33830b57cec5SDimitry Andricdef NORI_B : NORI_B_ENC, NORI_B_DESC; 33840b57cec5SDimitry Andric 33850b57cec5SDimitry Andricdef OR_V : OR_V_ENC, OR_V_DESC; 33860b57cec5SDimitry Andricdef OR_V_H_PSEUDO : OR_V_H_PSEUDO_DESC, 33870b57cec5SDimitry Andric PseudoInstExpansion<(OR_V MSA128BOpnd:$wd, 33880b57cec5SDimitry Andric MSA128BOpnd:$ws, 33890b57cec5SDimitry Andric MSA128BOpnd:$wt)>; 33900b57cec5SDimitry Andricdef OR_V_W_PSEUDO : OR_V_W_PSEUDO_DESC, 33910b57cec5SDimitry Andric PseudoInstExpansion<(OR_V MSA128BOpnd:$wd, 33920b57cec5SDimitry Andric MSA128BOpnd:$ws, 33930b57cec5SDimitry Andric MSA128BOpnd:$wt)>; 33940b57cec5SDimitry Andricdef OR_V_D_PSEUDO : OR_V_D_PSEUDO_DESC, 33950b57cec5SDimitry Andric PseudoInstExpansion<(OR_V MSA128BOpnd:$wd, 33960b57cec5SDimitry Andric MSA128BOpnd:$ws, 33970b57cec5SDimitry Andric MSA128BOpnd:$wt)>; 33980b57cec5SDimitry Andric 33990b57cec5SDimitry Andricdef ORI_B : ORI_B_ENC, ORI_B_DESC; 34000b57cec5SDimitry Andric 34010b57cec5SDimitry Andricdef PCKEV_B : PCKEV_B_ENC, PCKEV_B_DESC; 34020b57cec5SDimitry Andricdef PCKEV_H : PCKEV_H_ENC, PCKEV_H_DESC; 34030b57cec5SDimitry Andricdef PCKEV_W : PCKEV_W_ENC, PCKEV_W_DESC; 34040b57cec5SDimitry Andricdef PCKEV_D : PCKEV_D_ENC, PCKEV_D_DESC; 34050b57cec5SDimitry Andric 34060b57cec5SDimitry Andricdef PCKOD_B : PCKOD_B_ENC, PCKOD_B_DESC; 34070b57cec5SDimitry Andricdef PCKOD_H : PCKOD_H_ENC, PCKOD_H_DESC; 34080b57cec5SDimitry Andricdef PCKOD_W : PCKOD_W_ENC, PCKOD_W_DESC; 34090b57cec5SDimitry Andricdef PCKOD_D : PCKOD_D_ENC, PCKOD_D_DESC; 34100b57cec5SDimitry Andric 34110b57cec5SDimitry Andricdef PCNT_B : PCNT_B_ENC, PCNT_B_DESC; 34120b57cec5SDimitry Andricdef PCNT_H : PCNT_H_ENC, PCNT_H_DESC; 34130b57cec5SDimitry Andricdef PCNT_W : PCNT_W_ENC, PCNT_W_DESC; 34140b57cec5SDimitry Andricdef PCNT_D : PCNT_D_ENC, PCNT_D_DESC; 34150b57cec5SDimitry Andric 34160b57cec5SDimitry Andricdef SAT_S_B : SAT_S_B_ENC, SAT_S_B_DESC; 34170b57cec5SDimitry Andricdef SAT_S_H : SAT_S_H_ENC, SAT_S_H_DESC; 34180b57cec5SDimitry Andricdef SAT_S_W : SAT_S_W_ENC, SAT_S_W_DESC; 34190b57cec5SDimitry Andricdef SAT_S_D : SAT_S_D_ENC, SAT_S_D_DESC; 34200b57cec5SDimitry Andric 34210b57cec5SDimitry Andricdef SAT_U_B : SAT_U_B_ENC, SAT_U_B_DESC; 34220b57cec5SDimitry Andricdef SAT_U_H : SAT_U_H_ENC, SAT_U_H_DESC; 34230b57cec5SDimitry Andricdef SAT_U_W : SAT_U_W_ENC, SAT_U_W_DESC; 34240b57cec5SDimitry Andricdef SAT_U_D : SAT_U_D_ENC, SAT_U_D_DESC; 34250b57cec5SDimitry Andric 34260b57cec5SDimitry Andricdef SHF_B : SHF_B_ENC, SHF_B_DESC; 34270b57cec5SDimitry Andricdef SHF_H : SHF_H_ENC, SHF_H_DESC; 34280b57cec5SDimitry Andricdef SHF_W : SHF_W_ENC, SHF_W_DESC; 34290b57cec5SDimitry Andric 34300b57cec5SDimitry Andricdef SLD_B : SLD_B_ENC, SLD_B_DESC; 34310b57cec5SDimitry Andricdef SLD_H : SLD_H_ENC, SLD_H_DESC; 34320b57cec5SDimitry Andricdef SLD_W : SLD_W_ENC, SLD_W_DESC; 34330b57cec5SDimitry Andricdef SLD_D : SLD_D_ENC, SLD_D_DESC; 34340b57cec5SDimitry Andric 34350b57cec5SDimitry Andricdef SLDI_B : SLDI_B_ENC, SLDI_B_DESC; 34360b57cec5SDimitry Andricdef SLDI_H : SLDI_H_ENC, SLDI_H_DESC; 34370b57cec5SDimitry Andricdef SLDI_W : SLDI_W_ENC, SLDI_W_DESC; 34380b57cec5SDimitry Andricdef SLDI_D : SLDI_D_ENC, SLDI_D_DESC; 34390b57cec5SDimitry Andric 34400b57cec5SDimitry Andricdef SLL_B : SLL_B_ENC, SLL_B_DESC; 34410b57cec5SDimitry Andricdef SLL_H : SLL_H_ENC, SLL_H_DESC; 34420b57cec5SDimitry Andricdef SLL_W : SLL_W_ENC, SLL_W_DESC; 34430b57cec5SDimitry Andricdef SLL_D : SLL_D_ENC, SLL_D_DESC; 34440b57cec5SDimitry Andric 34450b57cec5SDimitry Andricdef SLLI_B : SLLI_B_ENC, SLLI_B_DESC; 34460b57cec5SDimitry Andricdef SLLI_H : SLLI_H_ENC, SLLI_H_DESC; 34470b57cec5SDimitry Andricdef SLLI_W : SLLI_W_ENC, SLLI_W_DESC; 34480b57cec5SDimitry Andricdef SLLI_D : SLLI_D_ENC, SLLI_D_DESC; 34490b57cec5SDimitry Andric 34500b57cec5SDimitry Andricdef SPLAT_B : SPLAT_B_ENC, SPLAT_B_DESC; 34510b57cec5SDimitry Andricdef SPLAT_H : SPLAT_H_ENC, SPLAT_H_DESC; 34520b57cec5SDimitry Andricdef SPLAT_W : SPLAT_W_ENC, SPLAT_W_DESC; 34530b57cec5SDimitry Andricdef SPLAT_D : SPLAT_D_ENC, SPLAT_D_DESC; 34540b57cec5SDimitry Andric 34550b57cec5SDimitry Andricdef SPLATI_B : SPLATI_B_ENC, SPLATI_B_DESC; 34560b57cec5SDimitry Andricdef SPLATI_H : SPLATI_H_ENC, SPLATI_H_DESC; 34570b57cec5SDimitry Andricdef SPLATI_W : SPLATI_W_ENC, SPLATI_W_DESC; 34580b57cec5SDimitry Andricdef SPLATI_D : SPLATI_D_ENC, SPLATI_D_DESC; 34590b57cec5SDimitry Andric 34600b57cec5SDimitry Andricdef SRA_B : SRA_B_ENC, SRA_B_DESC; 34610b57cec5SDimitry Andricdef SRA_H : SRA_H_ENC, SRA_H_DESC; 34620b57cec5SDimitry Andricdef SRA_W : SRA_W_ENC, SRA_W_DESC; 34630b57cec5SDimitry Andricdef SRA_D : SRA_D_ENC, SRA_D_DESC; 34640b57cec5SDimitry Andric 34650b57cec5SDimitry Andricdef SRAI_B : SRAI_B_ENC, SRAI_B_DESC; 34660b57cec5SDimitry Andricdef SRAI_H : SRAI_H_ENC, SRAI_H_DESC; 34670b57cec5SDimitry Andricdef SRAI_W : SRAI_W_ENC, SRAI_W_DESC; 34680b57cec5SDimitry Andricdef SRAI_D : SRAI_D_ENC, SRAI_D_DESC; 34690b57cec5SDimitry Andric 34700b57cec5SDimitry Andricdef SRAR_B : SRAR_B_ENC, SRAR_B_DESC; 34710b57cec5SDimitry Andricdef SRAR_H : SRAR_H_ENC, SRAR_H_DESC; 34720b57cec5SDimitry Andricdef SRAR_W : SRAR_W_ENC, SRAR_W_DESC; 34730b57cec5SDimitry Andricdef SRAR_D : SRAR_D_ENC, SRAR_D_DESC; 34740b57cec5SDimitry Andric 34750b57cec5SDimitry Andricdef SRARI_B : SRARI_B_ENC, SRARI_B_DESC; 34760b57cec5SDimitry Andricdef SRARI_H : SRARI_H_ENC, SRARI_H_DESC; 34770b57cec5SDimitry Andricdef SRARI_W : SRARI_W_ENC, SRARI_W_DESC; 34780b57cec5SDimitry Andricdef SRARI_D : SRARI_D_ENC, SRARI_D_DESC; 34790b57cec5SDimitry Andric 34800b57cec5SDimitry Andricdef SRL_B : SRL_B_ENC, SRL_B_DESC; 34810b57cec5SDimitry Andricdef SRL_H : SRL_H_ENC, SRL_H_DESC; 34820b57cec5SDimitry Andricdef SRL_W : SRL_W_ENC, SRL_W_DESC; 34830b57cec5SDimitry Andricdef SRL_D : SRL_D_ENC, SRL_D_DESC; 34840b57cec5SDimitry Andric 34850b57cec5SDimitry Andricdef SRLI_B : SRLI_B_ENC, SRLI_B_DESC; 34860b57cec5SDimitry Andricdef SRLI_H : SRLI_H_ENC, SRLI_H_DESC; 34870b57cec5SDimitry Andricdef SRLI_W : SRLI_W_ENC, SRLI_W_DESC; 34880b57cec5SDimitry Andricdef SRLI_D : SRLI_D_ENC, SRLI_D_DESC; 34890b57cec5SDimitry Andric 34900b57cec5SDimitry Andricdef SRLR_B : SRLR_B_ENC, SRLR_B_DESC; 34910b57cec5SDimitry Andricdef SRLR_H : SRLR_H_ENC, SRLR_H_DESC; 34920b57cec5SDimitry Andricdef SRLR_W : SRLR_W_ENC, SRLR_W_DESC; 34930b57cec5SDimitry Andricdef SRLR_D : SRLR_D_ENC, SRLR_D_DESC; 34940b57cec5SDimitry Andric 34950b57cec5SDimitry Andricdef SRLRI_B : SRLRI_B_ENC, SRLRI_B_DESC; 34960b57cec5SDimitry Andricdef SRLRI_H : SRLRI_H_ENC, SRLRI_H_DESC; 34970b57cec5SDimitry Andricdef SRLRI_W : SRLRI_W_ENC, SRLRI_W_DESC; 34980b57cec5SDimitry Andricdef SRLRI_D : SRLRI_D_ENC, SRLRI_D_DESC; 34990b57cec5SDimitry Andric 35000b57cec5SDimitry Andricdef ST_B: ST_B_ENC, ST_B_DESC; 35010b57cec5SDimitry Andricdef ST_H: ST_H_ENC, ST_H_DESC; 35020b57cec5SDimitry Andricdef ST_W: ST_W_ENC, ST_W_DESC; 35030b57cec5SDimitry Andricdef ST_D: ST_D_ENC, ST_D_DESC; 35040b57cec5SDimitry Andric 35050b57cec5SDimitry Andricdef SUBS_S_B : SUBS_S_B_ENC, SUBS_S_B_DESC; 35060b57cec5SDimitry Andricdef SUBS_S_H : SUBS_S_H_ENC, SUBS_S_H_DESC; 35070b57cec5SDimitry Andricdef SUBS_S_W : SUBS_S_W_ENC, SUBS_S_W_DESC; 35080b57cec5SDimitry Andricdef SUBS_S_D : SUBS_S_D_ENC, SUBS_S_D_DESC; 35090b57cec5SDimitry Andric 35100b57cec5SDimitry Andricdef SUBS_U_B : SUBS_U_B_ENC, SUBS_U_B_DESC; 35110b57cec5SDimitry Andricdef SUBS_U_H : SUBS_U_H_ENC, SUBS_U_H_DESC; 35120b57cec5SDimitry Andricdef SUBS_U_W : SUBS_U_W_ENC, SUBS_U_W_DESC; 35130b57cec5SDimitry Andricdef SUBS_U_D : SUBS_U_D_ENC, SUBS_U_D_DESC; 35140b57cec5SDimitry Andric 35150b57cec5SDimitry Andricdef SUBSUS_U_B : SUBSUS_U_B_ENC, SUBSUS_U_B_DESC; 35160b57cec5SDimitry Andricdef SUBSUS_U_H : SUBSUS_U_H_ENC, SUBSUS_U_H_DESC; 35170b57cec5SDimitry Andricdef SUBSUS_U_W : SUBSUS_U_W_ENC, SUBSUS_U_W_DESC; 35180b57cec5SDimitry Andricdef SUBSUS_U_D : SUBSUS_U_D_ENC, SUBSUS_U_D_DESC; 35190b57cec5SDimitry Andric 35200b57cec5SDimitry Andricdef SUBSUU_S_B : SUBSUU_S_B_ENC, SUBSUU_S_B_DESC; 35210b57cec5SDimitry Andricdef SUBSUU_S_H : SUBSUU_S_H_ENC, SUBSUU_S_H_DESC; 35220b57cec5SDimitry Andricdef SUBSUU_S_W : SUBSUU_S_W_ENC, SUBSUU_S_W_DESC; 35230b57cec5SDimitry Andricdef SUBSUU_S_D : SUBSUU_S_D_ENC, SUBSUU_S_D_DESC; 35240b57cec5SDimitry Andric 35250b57cec5SDimitry Andricdef SUBV_B : SUBV_B_ENC, SUBV_B_DESC; 35260b57cec5SDimitry Andricdef SUBV_H : SUBV_H_ENC, SUBV_H_DESC; 35270b57cec5SDimitry Andricdef SUBV_W : SUBV_W_ENC, SUBV_W_DESC; 35280b57cec5SDimitry Andricdef SUBV_D : SUBV_D_ENC, SUBV_D_DESC; 35290b57cec5SDimitry Andric 35300b57cec5SDimitry Andricdef SUBVI_B : SUBVI_B_ENC, SUBVI_B_DESC; 35310b57cec5SDimitry Andricdef SUBVI_H : SUBVI_H_ENC, SUBVI_H_DESC; 35320b57cec5SDimitry Andricdef SUBVI_W : SUBVI_W_ENC, SUBVI_W_DESC; 35330b57cec5SDimitry Andricdef SUBVI_D : SUBVI_D_ENC, SUBVI_D_DESC; 35340b57cec5SDimitry Andric 35350b57cec5SDimitry Andricdef VSHF_B : VSHF_B_ENC, VSHF_B_DESC; 35360b57cec5SDimitry Andricdef VSHF_H : VSHF_H_ENC, VSHF_H_DESC; 35370b57cec5SDimitry Andricdef VSHF_W : VSHF_W_ENC, VSHF_W_DESC; 35380b57cec5SDimitry Andricdef VSHF_D : VSHF_D_ENC, VSHF_D_DESC; 35390b57cec5SDimitry Andric 35400b57cec5SDimitry Andricdef XOR_V : XOR_V_ENC, XOR_V_DESC; 35410b57cec5SDimitry Andricdef XOR_V_H_PSEUDO : XOR_V_H_PSEUDO_DESC, 35420b57cec5SDimitry Andric PseudoInstExpansion<(XOR_V MSA128BOpnd:$wd, 35430b57cec5SDimitry Andric MSA128BOpnd:$ws, 35440b57cec5SDimitry Andric MSA128BOpnd:$wt)>; 35450b57cec5SDimitry Andricdef XOR_V_W_PSEUDO : XOR_V_W_PSEUDO_DESC, 35460b57cec5SDimitry Andric PseudoInstExpansion<(XOR_V MSA128BOpnd:$wd, 35470b57cec5SDimitry Andric MSA128BOpnd:$ws, 35480b57cec5SDimitry Andric MSA128BOpnd:$wt)>; 35490b57cec5SDimitry Andricdef XOR_V_D_PSEUDO : XOR_V_D_PSEUDO_DESC, 35500b57cec5SDimitry Andric PseudoInstExpansion<(XOR_V MSA128BOpnd:$wd, 35510b57cec5SDimitry Andric MSA128BOpnd:$ws, 35520b57cec5SDimitry Andric MSA128BOpnd:$wt)>; 35530b57cec5SDimitry Andric 35540b57cec5SDimitry Andricdef XORI_B : XORI_B_ENC, XORI_B_DESC; 35550b57cec5SDimitry Andric 35560b57cec5SDimitry Andric// Patterns. 35570b57cec5SDimitry Andricclass MSAPat<dag pattern, dag result, list<Predicate> pred = [HasMSA]> : 35580b57cec5SDimitry Andric Pat<pattern, result>, Requires<pred>; 35590b57cec5SDimitry Andric 35600b57cec5SDimitry Andricdef : MSAPat<(extractelt (v4i32 MSA128W:$ws), immZExt4:$idx), 35610b57cec5SDimitry Andric (COPY_S_W MSA128W:$ws, immZExt4:$idx)>; 35620b57cec5SDimitry Andric 35630b57cec5SDimitry Andricdef : MSAPat<(v8f16 (load addrimm10lsl1:$addr)), (LD_H addrimm10lsl1:$addr)>; 35640b57cec5SDimitry Andricdef : MSAPat<(v4f32 (load addrimm10lsl2:$addr)), (LD_W addrimm10lsl2:$addr)>; 35650b57cec5SDimitry Andricdef : MSAPat<(v2f64 (load addrimm10lsl3:$addr)), (LD_D addrimm10lsl3:$addr)>; 35660b57cec5SDimitry Andric 35670b57cec5SDimitry Andricdef ST_FH : MSAPat<(store (v8f16 MSA128H:$ws), addrimm10lsl1:$addr), 35680b57cec5SDimitry Andric (ST_H MSA128H:$ws, addrimm10lsl1:$addr)>; 35690b57cec5SDimitry Andricdef ST_FW : MSAPat<(store (v4f32 MSA128W:$ws), addrimm10lsl2:$addr), 35700b57cec5SDimitry Andric (ST_W MSA128W:$ws, addrimm10lsl2:$addr)>; 35710b57cec5SDimitry Andricdef ST_FD : MSAPat<(store (v2f64 MSA128D:$ws), addrimm10lsl3:$addr), 35720b57cec5SDimitry Andric (ST_D MSA128D:$ws, addrimm10lsl3:$addr)>; 35730b57cec5SDimitry Andric 35740b57cec5SDimitry Andricclass MSA_FABS_PSEUDO_DESC_BASE<RegisterOperand ROWD, 35750b57cec5SDimitry Andric RegisterOperand ROWS = ROWD, 35760b57cec5SDimitry Andric InstrItinClass itin = NoItinerary> : 35770b57cec5SDimitry Andric MSAPseudo<(outs ROWD:$wd), 35780b57cec5SDimitry Andric (ins ROWS:$ws), 35790b57cec5SDimitry Andric [(set ROWD:$wd, (fabs ROWS:$ws))]> { 35800b57cec5SDimitry Andric InstrItinClass Itinerary = itin; 35810b57cec5SDimitry Andric} 35820b57cec5SDimitry Andricdef FABS_W : MSA_FABS_PSEUDO_DESC_BASE<MSA128WOpnd>, 35830b57cec5SDimitry Andric PseudoInstExpansion<(FMAX_A_W MSA128WOpnd:$wd, MSA128WOpnd:$ws, 35840b57cec5SDimitry Andric MSA128WOpnd:$ws)>; 35850b57cec5SDimitry Andricdef FABS_D : MSA_FABS_PSEUDO_DESC_BASE<MSA128DOpnd>, 35860b57cec5SDimitry Andric PseudoInstExpansion<(FMAX_A_D MSA128DOpnd:$wd, MSA128DOpnd:$ws, 35870b57cec5SDimitry Andric MSA128DOpnd:$ws)>; 35880b57cec5SDimitry Andric 35890b57cec5SDimitry Andricclass MSABitconvertPat<ValueType DstVT, ValueType SrcVT, 35900b57cec5SDimitry Andric RegisterClass DstRC, list<Predicate> preds = [HasMSA]> : 35910b57cec5SDimitry Andric MSAPat<(DstVT (bitconvert SrcVT:$src)), 35920b57cec5SDimitry Andric (COPY_TO_REGCLASS SrcVT:$src, DstRC), preds>; 35930b57cec5SDimitry Andric 35940b57cec5SDimitry Andric// These are endian-independent because the element size doesnt change 35950b57cec5SDimitry Andricdef : MSABitconvertPat<v8i16, v8f16, MSA128H>; 35960b57cec5SDimitry Andricdef : MSABitconvertPat<v4i32, v4f32, MSA128W>; 35970b57cec5SDimitry Andricdef : MSABitconvertPat<v2i64, v2f64, MSA128D>; 35980b57cec5SDimitry Andricdef : MSABitconvertPat<v8f16, v8i16, MSA128H>; 35990b57cec5SDimitry Andricdef : MSABitconvertPat<v4f32, v4i32, MSA128W>; 36000b57cec5SDimitry Andricdef : MSABitconvertPat<v2f64, v2i64, MSA128D>; 36010b57cec5SDimitry Andric 36020b57cec5SDimitry Andric// Little endian bitcasts are always no-ops 36030b57cec5SDimitry Andricdef : MSABitconvertPat<v16i8, v8i16, MSA128B, [HasMSA, IsLE]>; 36040b57cec5SDimitry Andricdef : MSABitconvertPat<v16i8, v4i32, MSA128B, [HasMSA, IsLE]>; 36050b57cec5SDimitry Andricdef : MSABitconvertPat<v16i8, v2i64, MSA128B, [HasMSA, IsLE]>; 36060b57cec5SDimitry Andricdef : MSABitconvertPat<v16i8, v8f16, MSA128B, [HasMSA, IsLE]>; 36070b57cec5SDimitry Andricdef : MSABitconvertPat<v16i8, v4f32, MSA128B, [HasMSA, IsLE]>; 36080b57cec5SDimitry Andricdef : MSABitconvertPat<v16i8, v2f64, MSA128B, [HasMSA, IsLE]>; 36090b57cec5SDimitry Andric 36100b57cec5SDimitry Andricdef : MSABitconvertPat<v8i16, v16i8, MSA128H, [HasMSA, IsLE]>; 36110b57cec5SDimitry Andricdef : MSABitconvertPat<v8i16, v4i32, MSA128H, [HasMSA, IsLE]>; 36120b57cec5SDimitry Andricdef : MSABitconvertPat<v8i16, v2i64, MSA128H, [HasMSA, IsLE]>; 36130b57cec5SDimitry Andricdef : MSABitconvertPat<v8i16, v4f32, MSA128H, [HasMSA, IsLE]>; 36140b57cec5SDimitry Andricdef : MSABitconvertPat<v8i16, v2f64, MSA128H, [HasMSA, IsLE]>; 36150b57cec5SDimitry Andric 36160b57cec5SDimitry Andricdef : MSABitconvertPat<v4i32, v16i8, MSA128W, [HasMSA, IsLE]>; 36170b57cec5SDimitry Andricdef : MSABitconvertPat<v4i32, v8i16, MSA128W, [HasMSA, IsLE]>; 36180b57cec5SDimitry Andricdef : MSABitconvertPat<v4i32, v2i64, MSA128W, [HasMSA, IsLE]>; 36190b57cec5SDimitry Andricdef : MSABitconvertPat<v4i32, v8f16, MSA128W, [HasMSA, IsLE]>; 36200b57cec5SDimitry Andricdef : MSABitconvertPat<v4i32, v2f64, MSA128W, [HasMSA, IsLE]>; 36210b57cec5SDimitry Andric 36220b57cec5SDimitry Andricdef : MSABitconvertPat<v2i64, v16i8, MSA128D, [HasMSA, IsLE]>; 36230b57cec5SDimitry Andricdef : MSABitconvertPat<v2i64, v8i16, MSA128D, [HasMSA, IsLE]>; 36240b57cec5SDimitry Andricdef : MSABitconvertPat<v2i64, v4i32, MSA128D, [HasMSA, IsLE]>; 36250b57cec5SDimitry Andricdef : MSABitconvertPat<v2i64, v8f16, MSA128D, [HasMSA, IsLE]>; 36260b57cec5SDimitry Andricdef : MSABitconvertPat<v2i64, v4f32, MSA128D, [HasMSA, IsLE]>; 36270b57cec5SDimitry Andric 36280b57cec5SDimitry Andricdef : MSABitconvertPat<v4f32, v16i8, MSA128W, [HasMSA, IsLE]>; 36290b57cec5SDimitry Andricdef : MSABitconvertPat<v4f32, v8i16, MSA128W, [HasMSA, IsLE]>; 36300b57cec5SDimitry Andricdef : MSABitconvertPat<v4f32, v2i64, MSA128W, [HasMSA, IsLE]>; 36310b57cec5SDimitry Andricdef : MSABitconvertPat<v4f32, v8f16, MSA128W, [HasMSA, IsLE]>; 36320b57cec5SDimitry Andricdef : MSABitconvertPat<v4f32, v2f64, MSA128W, [HasMSA, IsLE]>; 36330b57cec5SDimitry Andric 36340b57cec5SDimitry Andricdef : MSABitconvertPat<v2f64, v16i8, MSA128D, [HasMSA, IsLE]>; 36350b57cec5SDimitry Andricdef : MSABitconvertPat<v2f64, v8i16, MSA128D, [HasMSA, IsLE]>; 36360b57cec5SDimitry Andricdef : MSABitconvertPat<v2f64, v4i32, MSA128D, [HasMSA, IsLE]>; 36370b57cec5SDimitry Andricdef : MSABitconvertPat<v2f64, v8f16, MSA128D, [HasMSA, IsLE]>; 36380b57cec5SDimitry Andricdef : MSABitconvertPat<v2f64, v4f32, MSA128D, [HasMSA, IsLE]>; 36390b57cec5SDimitry Andric 36400b57cec5SDimitry Andric// Big endian bitcasts expand to shuffle instructions. 36410b57cec5SDimitry Andric// This is because bitcast is defined to be a store/load sequence and the 36420b57cec5SDimitry Andric// vector store/load instructions are mixed-endian with respect to the vector 36430b57cec5SDimitry Andric// as a whole (little endian with respect to element order, but big endian 36440b57cec5SDimitry Andric// elements). 36450b57cec5SDimitry Andric 36460b57cec5SDimitry Andricclass MSABitconvertReverseQuartersPat<ValueType DstVT, ValueType SrcVT, 36470b57cec5SDimitry Andric RegisterClass DstRC, MSAInst Insn, 36480b57cec5SDimitry Andric RegisterClass ViaRC> : 36490b57cec5SDimitry Andric MSAPat<(DstVT (bitconvert SrcVT:$src)), 36500b57cec5SDimitry Andric (COPY_TO_REGCLASS (Insn (COPY_TO_REGCLASS SrcVT:$src, ViaRC), 27), 36510b57cec5SDimitry Andric DstRC), 36520b57cec5SDimitry Andric [HasMSA, IsBE]>; 36530b57cec5SDimitry Andric 36540b57cec5SDimitry Andricclass MSABitconvertReverseHalvesPat<ValueType DstVT, ValueType SrcVT, 36550b57cec5SDimitry Andric RegisterClass DstRC, MSAInst Insn, 36560b57cec5SDimitry Andric RegisterClass ViaRC> : 36570b57cec5SDimitry Andric MSAPat<(DstVT (bitconvert SrcVT:$src)), 36580b57cec5SDimitry Andric (COPY_TO_REGCLASS (Insn (COPY_TO_REGCLASS SrcVT:$src, ViaRC), 177), 36590b57cec5SDimitry Andric DstRC), 36600b57cec5SDimitry Andric [HasMSA, IsBE]>; 36610b57cec5SDimitry Andric 36620b57cec5SDimitry Andricclass MSABitconvertReverseBInHPat<ValueType DstVT, ValueType SrcVT, 36630b57cec5SDimitry Andric RegisterClass DstRC> : 36640b57cec5SDimitry Andric MSABitconvertReverseHalvesPat<DstVT, SrcVT, DstRC, SHF_B, MSA128B>; 36650b57cec5SDimitry Andric 36660b57cec5SDimitry Andricclass MSABitconvertReverseBInWPat<ValueType DstVT, ValueType SrcVT, 36670b57cec5SDimitry Andric RegisterClass DstRC> : 36680b57cec5SDimitry Andric MSABitconvertReverseQuartersPat<DstVT, SrcVT, DstRC, SHF_B, MSA128B>; 36690b57cec5SDimitry Andric 36700b57cec5SDimitry Andricclass MSABitconvertReverseBInDPat<ValueType DstVT, ValueType SrcVT, 36710b57cec5SDimitry Andric RegisterClass DstRC> : 36720b57cec5SDimitry Andric MSAPat<(DstVT (bitconvert SrcVT:$src)), 36730b57cec5SDimitry Andric (COPY_TO_REGCLASS 36740b57cec5SDimitry Andric (SHF_W 36750b57cec5SDimitry Andric (COPY_TO_REGCLASS 36760b57cec5SDimitry Andric (SHF_B (COPY_TO_REGCLASS SrcVT:$src, MSA128B), 27), 36770b57cec5SDimitry Andric MSA128W), 177), 36780b57cec5SDimitry Andric DstRC), 36790b57cec5SDimitry Andric [HasMSA, IsBE]>; 36800b57cec5SDimitry Andric 36810b57cec5SDimitry Andricclass MSABitconvertReverseHInWPat<ValueType DstVT, ValueType SrcVT, 36820b57cec5SDimitry Andric RegisterClass DstRC> : 36830b57cec5SDimitry Andric MSABitconvertReverseHalvesPat<DstVT, SrcVT, DstRC, SHF_H, MSA128H>; 36840b57cec5SDimitry Andric 36850b57cec5SDimitry Andricclass MSABitconvertReverseHInDPat<ValueType DstVT, ValueType SrcVT, 36860b57cec5SDimitry Andric RegisterClass DstRC> : 36870b57cec5SDimitry Andric MSABitconvertReverseQuartersPat<DstVT, SrcVT, DstRC, SHF_H, MSA128H>; 36880b57cec5SDimitry Andric 36890b57cec5SDimitry Andricclass MSABitconvertReverseWInDPat<ValueType DstVT, ValueType SrcVT, 36900b57cec5SDimitry Andric RegisterClass DstRC> : 36910b57cec5SDimitry Andric MSABitconvertReverseHalvesPat<DstVT, SrcVT, DstRC, SHF_W, MSA128W>; 36920b57cec5SDimitry Andric 36930b57cec5SDimitry Andricdef : MSABitconvertReverseBInHPat<v8i16, v16i8, MSA128H>; 36940b57cec5SDimitry Andricdef : MSABitconvertReverseBInHPat<v8f16, v16i8, MSA128H>; 36950b57cec5SDimitry Andricdef : MSABitconvertReverseBInWPat<v4i32, v16i8, MSA128W>; 36960b57cec5SDimitry Andricdef : MSABitconvertReverseBInWPat<v4f32, v16i8, MSA128W>; 36970b57cec5SDimitry Andricdef : MSABitconvertReverseBInDPat<v2i64, v16i8, MSA128D>; 36980b57cec5SDimitry Andricdef : MSABitconvertReverseBInDPat<v2f64, v16i8, MSA128D>; 36990b57cec5SDimitry Andric 37000b57cec5SDimitry Andricdef : MSABitconvertReverseBInHPat<v16i8, v8i16, MSA128B>; 37010b57cec5SDimitry Andricdef : MSABitconvertReverseHInWPat<v4i32, v8i16, MSA128W>; 37020b57cec5SDimitry Andricdef : MSABitconvertReverseHInWPat<v4f32, v8i16, MSA128W>; 37030b57cec5SDimitry Andricdef : MSABitconvertReverseHInDPat<v2i64, v8i16, MSA128D>; 37040b57cec5SDimitry Andricdef : MSABitconvertReverseHInDPat<v2f64, v8i16, MSA128D>; 37050b57cec5SDimitry Andric 37060b57cec5SDimitry Andricdef : MSABitconvertReverseBInHPat<v16i8, v8f16, MSA128B>; 37070b57cec5SDimitry Andricdef : MSABitconvertReverseHInWPat<v4i32, v8f16, MSA128W>; 37080b57cec5SDimitry Andricdef : MSABitconvertReverseHInWPat<v4f32, v8f16, MSA128W>; 37090b57cec5SDimitry Andricdef : MSABitconvertReverseHInDPat<v2i64, v8f16, MSA128D>; 37100b57cec5SDimitry Andricdef : MSABitconvertReverseHInDPat<v2f64, v8f16, MSA128D>; 37110b57cec5SDimitry Andric 37120b57cec5SDimitry Andricdef : MSABitconvertReverseBInWPat<v16i8, v4i32, MSA128B>; 37130b57cec5SDimitry Andricdef : MSABitconvertReverseHInWPat<v8i16, v4i32, MSA128H>; 37140b57cec5SDimitry Andricdef : MSABitconvertReverseHInWPat<v8f16, v4i32, MSA128H>; 37150b57cec5SDimitry Andricdef : MSABitconvertReverseWInDPat<v2i64, v4i32, MSA128D>; 37160b57cec5SDimitry Andricdef : MSABitconvertReverseWInDPat<v2f64, v4i32, MSA128D>; 37170b57cec5SDimitry Andric 37180b57cec5SDimitry Andricdef : MSABitconvertReverseBInWPat<v16i8, v4f32, MSA128B>; 37190b57cec5SDimitry Andricdef : MSABitconvertReverseHInWPat<v8i16, v4f32, MSA128H>; 37200b57cec5SDimitry Andricdef : MSABitconvertReverseHInWPat<v8f16, v4f32, MSA128H>; 37210b57cec5SDimitry Andricdef : MSABitconvertReverseWInDPat<v2i64, v4f32, MSA128D>; 37220b57cec5SDimitry Andricdef : MSABitconvertReverseWInDPat<v2f64, v4f32, MSA128D>; 37230b57cec5SDimitry Andric 37240b57cec5SDimitry Andricdef : MSABitconvertReverseBInDPat<v16i8, v2i64, MSA128B>; 37250b57cec5SDimitry Andricdef : MSABitconvertReverseHInDPat<v8i16, v2i64, MSA128H>; 37260b57cec5SDimitry Andricdef : MSABitconvertReverseHInDPat<v8f16, v2i64, MSA128H>; 37270b57cec5SDimitry Andricdef : MSABitconvertReverseWInDPat<v4i32, v2i64, MSA128W>; 37280b57cec5SDimitry Andricdef : MSABitconvertReverseWInDPat<v4f32, v2i64, MSA128W>; 37290b57cec5SDimitry Andric 37300b57cec5SDimitry Andricdef : MSABitconvertReverseBInDPat<v16i8, v2f64, MSA128B>; 37310b57cec5SDimitry Andricdef : MSABitconvertReverseHInDPat<v8i16, v2f64, MSA128H>; 37320b57cec5SDimitry Andricdef : MSABitconvertReverseHInDPat<v8f16, v2f64, MSA128H>; 37330b57cec5SDimitry Andricdef : MSABitconvertReverseWInDPat<v4i32, v2f64, MSA128W>; 37340b57cec5SDimitry Andricdef : MSABitconvertReverseWInDPat<v4f32, v2f64, MSA128W>; 37350b57cec5SDimitry Andric 37360b57cec5SDimitry Andric// Pseudos used to implement BNZ.df, and BZ.df 37370b57cec5SDimitry Andric 37380b57cec5SDimitry Andricclass MSA_CBRANCH_PSEUDO_DESC_BASE<SDPatternOperator OpNode, ValueType TyNode, 3739349cc55cSDimitry Andric RegisterClass RCWS> : 37400b57cec5SDimitry Andric MipsPseudo<(outs GPR32:$dst), 37410b57cec5SDimitry Andric (ins RCWS:$ws), 37420b57cec5SDimitry Andric [(set GPR32:$dst, (OpNode (TyNode RCWS:$ws)))]> { 37430b57cec5SDimitry Andric bit usesCustomInserter = 1; 37440b57cec5SDimitry Andric bit hasNoSchedulingInfo = 1; 37450b57cec5SDimitry Andric} 37460b57cec5SDimitry Andric 3747349cc55cSDimitry Andricdef SNZ_B_PSEUDO 3748349cc55cSDimitry Andric : MSA_CBRANCH_PSEUDO_DESC_BASE<MipsVAllNonZero, v16i8, MSA128B>; 3749349cc55cSDimitry Andricdef SNZ_H_PSEUDO 3750349cc55cSDimitry Andric : MSA_CBRANCH_PSEUDO_DESC_BASE<MipsVAllNonZero, v8i16, MSA128H>; 3751349cc55cSDimitry Andricdef SNZ_W_PSEUDO 3752349cc55cSDimitry Andric : MSA_CBRANCH_PSEUDO_DESC_BASE<MipsVAllNonZero, v4i32, MSA128W>; 3753349cc55cSDimitry Andricdef SNZ_D_PSEUDO 3754349cc55cSDimitry Andric : MSA_CBRANCH_PSEUDO_DESC_BASE<MipsVAllNonZero, v2i64, MSA128D>; 3755349cc55cSDimitry Andricdef SNZ_V_PSEUDO 3756349cc55cSDimitry Andric : MSA_CBRANCH_PSEUDO_DESC_BASE<MipsVAnyNonZero, v16i8, MSA128B>; 37570b57cec5SDimitry Andric 3758349cc55cSDimitry Andricdef SZ_B_PSEUDO : MSA_CBRANCH_PSEUDO_DESC_BASE<MipsVAllZero, v16i8, MSA128B>; 3759349cc55cSDimitry Andricdef SZ_H_PSEUDO : MSA_CBRANCH_PSEUDO_DESC_BASE<MipsVAllZero, v8i16, MSA128H>; 3760349cc55cSDimitry Andricdef SZ_W_PSEUDO : MSA_CBRANCH_PSEUDO_DESC_BASE<MipsVAllZero, v4i32, MSA128W>; 3761349cc55cSDimitry Andricdef SZ_D_PSEUDO : MSA_CBRANCH_PSEUDO_DESC_BASE<MipsVAllZero, v2i64, MSA128D>; 3762349cc55cSDimitry Andricdef SZ_V_PSEUDO : MSA_CBRANCH_PSEUDO_DESC_BASE<MipsVAnyZero, v16i8, MSA128B>; 37630b57cec5SDimitry Andric 37640b57cec5SDimitry Andric// Pseudoes used to implement transparent fp16 support. 37650b57cec5SDimitry Andric 37660b57cec5SDimitry Andriclet ASEPredicate = [HasMSA] in { 37670b57cec5SDimitry Andric let usesCustomInserter = 1 in { 37680b57cec5SDimitry Andric def ST_F16 : 37690b57cec5SDimitry Andric MipsPseudo<(outs), (ins MSA128F16:$ws, mem_simm10:$addr), 37700b57cec5SDimitry Andric [(store (f16 MSA128F16:$ws), (addrimm10:$addr))]>; 37710b57cec5SDimitry Andric def LD_F16 : 37720b57cec5SDimitry Andric MipsPseudo<(outs MSA128F16:$ws), (ins mem_simm10:$addr), 37730b57cec5SDimitry Andric [(set MSA128F16:$ws, (f16 (load addrimm10:$addr)))]>; 37740b57cec5SDimitry Andric } 37750b57cec5SDimitry Andric 37760b57cec5SDimitry Andric let usesCustomInserter = 1, hasNoSchedulingInfo = 1 in { 37770b57cec5SDimitry Andric def MSA_FP_EXTEND_W_PSEUDO : 37780b57cec5SDimitry Andric MipsPseudo<(outs FGR32Opnd:$fd), (ins MSA128F16:$ws), 37790b57cec5SDimitry Andric [(set FGR32Opnd:$fd, (f32 (fpextend MSA128F16:$ws)))]>; 37800b57cec5SDimitry Andric def MSA_FP_ROUND_W_PSEUDO : 37810b57cec5SDimitry Andric MipsPseudo<(outs MSA128F16:$wd), (ins FGR32Opnd:$fs), 37820b57cec5SDimitry Andric [(set MSA128F16:$wd, (f16 (fpround FGR32Opnd:$fs)))]>; 37830b57cec5SDimitry Andric def MSA_FP_EXTEND_D_PSEUDO : 37840b57cec5SDimitry Andric MipsPseudo<(outs FGR64Opnd:$fd), (ins MSA128F16:$ws), 37850b57cec5SDimitry Andric [(set FGR64Opnd:$fd, (f64 (fpextend MSA128F16:$ws)))]>; 37860b57cec5SDimitry Andric def MSA_FP_ROUND_D_PSEUDO : 37870b57cec5SDimitry Andric MipsPseudo<(outs MSA128F16:$wd), (ins FGR64Opnd:$fs), 37880b57cec5SDimitry Andric [(set MSA128F16:$wd, (f16 (fpround FGR64Opnd:$fs)))]>; 37890b57cec5SDimitry Andric } 37900b57cec5SDimitry Andric 37910b57cec5SDimitry Andric def : MipsPat<(MipsTruncIntFP MSA128F16:$ws), 37920b57cec5SDimitry Andric (TRUNC_W_D64 (MSA_FP_EXTEND_D_PSEUDO MSA128F16:$ws))>, 37930b57cec5SDimitry Andric ISA_MIPS1, ASE_MSA; 37940b57cec5SDimitry Andric 37950b57cec5SDimitry Andric def : MipsPat<(MipsFPCmp MSA128F16:$ws, MSA128F16:$wt, imm:$cond), 37960b57cec5SDimitry Andric (FCMP_S32 (MSA_FP_EXTEND_W_PSEUDO MSA128F16:$ws), 37970b57cec5SDimitry Andric (MSA_FP_EXTEND_W_PSEUDO MSA128F16:$wt), imm:$cond)>, 37980b57cec5SDimitry Andric ISA_MIPS1_NOT_32R6_64R6, ASE_MSA; 37990b57cec5SDimitry Andric} 38000b57cec5SDimitry Andric 38010b57cec5SDimitry Andricdef vsplati64_imm_eq_63 : PatLeaf<(bitconvert (v4i32 (build_vector))), [{ 38020b57cec5SDimitry Andric APInt Imm; 38030b57cec5SDimitry Andric SDNode *BV = N->getOperand(0).getNode(); 38040b57cec5SDimitry Andric EVT EltTy = N->getValueType(0).getVectorElementType(); 38050b57cec5SDimitry Andric 38060b57cec5SDimitry Andric return selectVSplat(BV, Imm, EltTy.getSizeInBits()) && 38070b57cec5SDimitry Andric Imm.getBitWidth() == EltTy.getSizeInBits() && Imm == 63; 38080b57cec5SDimitry Andric}]>; 38090b57cec5SDimitry Andric 38100b57cec5SDimitry Andricdef immi32Cst7 : ImmLeaf<i32, [{return isUInt<32>(Imm) && Imm == 7;}]>; 38110b57cec5SDimitry Andricdef immi32Cst15 : ImmLeaf<i32, [{return isUInt<32>(Imm) && Imm == 15;}]>; 38120b57cec5SDimitry Andricdef immi32Cst31 : ImmLeaf<i32, [{return isUInt<32>(Imm) && Imm == 31;}]>; 38130b57cec5SDimitry Andric 38140b57cec5SDimitry Andricdef vsplati8imm7 : PatFrag<(ops node:$wt), 38150b57cec5SDimitry Andric (and node:$wt, (vsplati8 immi32Cst7))>; 38160b57cec5SDimitry Andricdef vsplati16imm15 : PatFrag<(ops node:$wt), 38170b57cec5SDimitry Andric (and node:$wt, (vsplati16 immi32Cst15))>; 38180b57cec5SDimitry Andricdef vsplati32imm31 : PatFrag<(ops node:$wt), 38190b57cec5SDimitry Andric (and node:$wt, (vsplati32 immi32Cst31))>; 38200b57cec5SDimitry Andricdef vsplati64imm63 : PatFrag<(ops node:$wt), 38210b57cec5SDimitry Andric (and node:$wt, vsplati64_imm_eq_63)>; 38220b57cec5SDimitry Andric 38230b57cec5SDimitry Andricclass MSAShiftPat<SDNode Node, ValueType VT, MSAInst Insn, dag Vec> : 38240b57cec5SDimitry Andric MSAPat<(VT (Node VT:$ws, (VT (and VT:$wt, Vec)))), 38250b57cec5SDimitry Andric (VT (Insn VT:$ws, VT:$wt))>; 38260b57cec5SDimitry Andric 38270b57cec5SDimitry Andricclass MSABitPat<SDNode Node, ValueType VT, MSAInst Insn, PatFrag Frag> : 3828*71ac745dSDimitry Andric MSAPat<(VT (Node VT:$ws, (shl (vsplat_imm_eq_1), (Frag VT:$wt)))), 38290b57cec5SDimitry Andric (VT (Insn VT:$ws, VT:$wt))>; 38300b57cec5SDimitry Andric 38310b57cec5SDimitry Andricmulticlass MSAShiftPats<SDNode Node, string Insn> { 38320b57cec5SDimitry Andric def : MSAShiftPat<Node, v16i8, !cast<MSAInst>(Insn#_B), 38330b57cec5SDimitry Andric (vsplati8 immi32Cst7)>; 38340b57cec5SDimitry Andric def : MSAShiftPat<Node, v8i16, !cast<MSAInst>(Insn#_H), 38350b57cec5SDimitry Andric (vsplati16 immi32Cst15)>; 38360b57cec5SDimitry Andric def : MSAShiftPat<Node, v4i32, !cast<MSAInst>(Insn#_W), 38370b57cec5SDimitry Andric (vsplati32 immi32Cst31)>; 38380b57cec5SDimitry Andric def : MSAPat<(v2i64 (Node v2i64:$ws, (v2i64 (and v2i64:$wt, 38390b57cec5SDimitry Andric vsplati64_imm_eq_63)))), 38400b57cec5SDimitry Andric (v2i64 (!cast<MSAInst>(Insn#_D) v2i64:$ws, v2i64:$wt))>; 38410b57cec5SDimitry Andric} 38420b57cec5SDimitry Andric 38430b57cec5SDimitry Andricmulticlass MSABitPats<SDNode Node, string Insn> { 38440b57cec5SDimitry Andric def : MSABitPat<Node, v16i8, !cast<MSAInst>(Insn#_B), vsplati8imm7>; 38450b57cec5SDimitry Andric def : MSABitPat<Node, v8i16, !cast<MSAInst>(Insn#_H), vsplati16imm15>; 38460b57cec5SDimitry Andric def : MSABitPat<Node, v4i32, !cast<MSAInst>(Insn#_W), vsplati32imm31>; 3847*71ac745dSDimitry Andric def : MSAPat<(Node v2i64:$ws, (shl (v2i64 (vsplat_imm_eq_1)), 38480b57cec5SDimitry Andric (vsplati64imm63 v2i64:$wt))), 38490b57cec5SDimitry Andric (v2i64 (!cast<MSAInst>(Insn#_D) v2i64:$ws, v2i64:$wt))>; 38500b57cec5SDimitry Andric} 38510b57cec5SDimitry Andric 38520b57cec5SDimitry Andricdefm : MSAShiftPats<shl, "SLL">; 38530b57cec5SDimitry Andricdefm : MSAShiftPats<srl, "SRL">; 38540b57cec5SDimitry Andricdefm : MSAShiftPats<sra, "SRA">; 38550b57cec5SDimitry Andricdefm : MSABitPats<xor, "BNEG">; 38560b57cec5SDimitry Andricdefm : MSABitPats<or, "BSET">; 38570b57cec5SDimitry Andric 3858*71ac745dSDimitry Andricdef : MSAPat<(and v16i8:$ws, (vnot (shl (vsplat_imm_eq_1), 3859fe6060f1SDimitry Andric (vsplati8imm7 v16i8:$wt)))), 38600b57cec5SDimitry Andric (v16i8 (BCLR_B v16i8:$ws, v16i8:$wt))>; 3861*71ac745dSDimitry Andricdef : MSAPat<(and v8i16:$ws, (vnot (shl (vsplat_imm_eq_1), 3862fe6060f1SDimitry Andric (vsplati16imm15 v8i16:$wt)))), 38630b57cec5SDimitry Andric (v8i16 (BCLR_H v8i16:$ws, v8i16:$wt))>; 3864*71ac745dSDimitry Andricdef : MSAPat<(and v4i32:$ws, (vnot (shl (vsplat_imm_eq_1), 3865fe6060f1SDimitry Andric (vsplati32imm31 v4i32:$wt)))), 38660b57cec5SDimitry Andric (v4i32 (BCLR_W v4i32:$ws, v4i32:$wt))>; 3867*71ac745dSDimitry Andricdef : MSAPat<(and v2i64:$ws, (vnot (shl (v2i64 (vsplat_imm_eq_1)), 3868fe6060f1SDimitry Andric (vsplati64imm63 v2i64:$wt)))), 38690b57cec5SDimitry Andric (v2i64 (BCLR_D v2i64:$ws, v2i64:$wt))>; 38700b57cec5SDimitry Andric 38710b57cec5SDimitry Andric// Vector extraction with fixed index. 38720b57cec5SDimitry Andric// 38730b57cec5SDimitry Andric// Extracting 32-bit values on MSA32 should always use COPY_S_W rather than 38740b57cec5SDimitry Andric// COPY_U_W, even for the zero-extended case. This is because our forward 38750b57cec5SDimitry Andric// compatibility strategy is to consider registers to be infinitely 38760b57cec5SDimitry Andric// sign-extended so that a MIPS64 can execute MIPS32 code without getting 38770b57cec5SDimitry Andric// different register values. 38780b57cec5SDimitry Andricdef : MSAPat<(vextract_zext_i32 (v4i32 MSA128W:$ws), immZExt2Ptr:$idx), 38790b57cec5SDimitry Andric (COPY_S_W MSA128W:$ws, immZExt2:$idx)>, ASE_MSA_NOT_MSA64; 38800b57cec5SDimitry Andricdef : MSAPat<(vextract_zext_i32 (v4f32 MSA128W:$ws), immZExt2Ptr:$idx), 38810b57cec5SDimitry Andric (COPY_S_W MSA128W:$ws, immZExt2:$idx)>, ASE_MSA_NOT_MSA64; 38820b57cec5SDimitry Andric 38830b57cec5SDimitry Andric// Extracting 64-bit values on MSA64 should always use COPY_S_D rather than 38840b57cec5SDimitry Andric// COPY_U_D, even for the zero-extended case. This is because our forward 38850b57cec5SDimitry Andric// compatibility strategy is to consider registers to be infinitely 38860b57cec5SDimitry Andric// sign-extended so that a hypothetical MIPS128 would be able to execute MIPS64 38870b57cec5SDimitry Andric// code without getting different register values. 38880b57cec5SDimitry Andricdef : MSAPat<(vextract_zext_i64 (v2i64 MSA128D:$ws), immZExt1Ptr:$idx), 38890b57cec5SDimitry Andric (COPY_S_D MSA128D:$ws, immZExt1:$idx)>, ASE_MSA64; 38900b57cec5SDimitry Andricdef : MSAPat<(vextract_zext_i64 (v2f64 MSA128D:$ws), immZExt1Ptr:$idx), 38910b57cec5SDimitry Andric (COPY_S_D MSA128D:$ws, immZExt1:$idx)>, ASE_MSA64; 38920b57cec5SDimitry Andric 38930b57cec5SDimitry Andric// Vector extraction with variable index 38940b57cec5SDimitry Andricdef : MSAPat<(i32 (vextract_sext_i8 v16i8:$ws, i32:$idx)), 38950b57cec5SDimitry Andric (SRA (COPY_TO_REGCLASS (i32 (EXTRACT_SUBREG (SPLAT_B v16i8:$ws, 38960b57cec5SDimitry Andric i32:$idx), 38970b57cec5SDimitry Andric sub_lo)), 38980b57cec5SDimitry Andric GPR32), (i32 24))>; 38990b57cec5SDimitry Andricdef : MSAPat<(i32 (vextract_sext_i16 v8i16:$ws, i32:$idx)), 39000b57cec5SDimitry Andric (SRA (COPY_TO_REGCLASS (i32 (EXTRACT_SUBREG (SPLAT_H v8i16:$ws, 39010b57cec5SDimitry Andric i32:$idx), 39020b57cec5SDimitry Andric sub_lo)), 39030b57cec5SDimitry Andric GPR32), (i32 16))>; 39040b57cec5SDimitry Andricdef : MSAPat<(i32 (vextract_sext_i32 v4i32:$ws, i32:$idx)), 39050b57cec5SDimitry Andric (COPY_TO_REGCLASS (i32 (EXTRACT_SUBREG (SPLAT_W v4i32:$ws, 39060b57cec5SDimitry Andric i32:$idx), 39070b57cec5SDimitry Andric sub_lo)), 39080b57cec5SDimitry Andric GPR32)>; 39090b57cec5SDimitry Andricdef : MSAPat<(i64 (vextract_sext_i64 v2i64:$ws, i32:$idx)), 39100b57cec5SDimitry Andric (COPY_TO_REGCLASS (i64 (EXTRACT_SUBREG (SPLAT_D v2i64:$ws, 39110b57cec5SDimitry Andric i32:$idx), 39120b57cec5SDimitry Andric sub_64)), 39130b57cec5SDimitry Andric GPR64), [HasMSA, IsGP64bit]>; 39140b57cec5SDimitry Andric 39150b57cec5SDimitry Andricdef : MSAPat<(i32 (vextract_zext_i8 v16i8:$ws, i32:$idx)), 39160b57cec5SDimitry Andric (SRL (COPY_TO_REGCLASS (i32 (EXTRACT_SUBREG (SPLAT_B v16i8:$ws, 39170b57cec5SDimitry Andric i32:$idx), 39180b57cec5SDimitry Andric sub_lo)), 39190b57cec5SDimitry Andric GPR32), (i32 24))>; 39200b57cec5SDimitry Andricdef : MSAPat<(i32 (vextract_zext_i16 v8i16:$ws, i32:$idx)), 39210b57cec5SDimitry Andric (SRL (COPY_TO_REGCLASS (i32 (EXTRACT_SUBREG (SPLAT_H v8i16:$ws, 39220b57cec5SDimitry Andric i32:$idx), 39230b57cec5SDimitry Andric sub_lo)), 39240b57cec5SDimitry Andric GPR32), (i32 16))>; 39250b57cec5SDimitry Andricdef : MSAPat<(i32 (vextract_zext_i32 v4i32:$ws, i32:$idx)), 39260b57cec5SDimitry Andric (COPY_TO_REGCLASS (i32 (EXTRACT_SUBREG (SPLAT_W v4i32:$ws, 39270b57cec5SDimitry Andric i32:$idx), 39280b57cec5SDimitry Andric sub_lo)), 39290b57cec5SDimitry Andric GPR32)>; 39300b57cec5SDimitry Andricdef : MSAPat<(i64 (vextract_zext_i64 v2i64:$ws, i32:$idx)), 39310b57cec5SDimitry Andric (COPY_TO_REGCLASS (i64 (EXTRACT_SUBREG (SPLAT_D v2i64:$ws, 39320b57cec5SDimitry Andric i32:$idx), 39330b57cec5SDimitry Andric sub_64)), 39340b57cec5SDimitry Andric GPR64), [HasMSA, IsGP64bit]>; 39350b57cec5SDimitry Andric 39360b57cec5SDimitry Andricdef : MSAPat<(f32 (vector_extract v4f32:$ws, i32:$idx)), 39370b57cec5SDimitry Andric (f32 (EXTRACT_SUBREG (SPLAT_W v4f32:$ws, 39380b57cec5SDimitry Andric i32:$idx), 39390b57cec5SDimitry Andric sub_lo))>; 39400b57cec5SDimitry Andricdef : MSAPat<(f64 (vector_extract v2f64:$ws, i32:$idx)), 39410b57cec5SDimitry Andric (f64 (EXTRACT_SUBREG (SPLAT_D v2f64:$ws, 39420b57cec5SDimitry Andric i32:$idx), 39430b57cec5SDimitry Andric sub_64))>; 39440b57cec5SDimitry Andric 39450b57cec5SDimitry Andric// Vector extraction with variable index (N64 ABI) 39460b57cec5SDimitry Andricdef : MSAPat< 39470b57cec5SDimitry Andric (i32 (vextract_sext_i8 v16i8:$ws, i64:$idx)), 39480b57cec5SDimitry Andric (SRA (COPY_TO_REGCLASS 39490b57cec5SDimitry Andric (i32 (EXTRACT_SUBREG 39500b57cec5SDimitry Andric (SPLAT_B v16i8:$ws, 39510b57cec5SDimitry Andric (COPY_TO_REGCLASS 39520b57cec5SDimitry Andric (i32 (EXTRACT_SUBREG i64:$idx, sub_32)), GPR32)), 39530b57cec5SDimitry Andric sub_lo)), 39540b57cec5SDimitry Andric GPR32), 39550b57cec5SDimitry Andric (i32 24))>; 39560b57cec5SDimitry Andricdef : MSAPat< 39570b57cec5SDimitry Andric (i32 (vextract_sext_i16 v8i16:$ws, i64:$idx)), 39580b57cec5SDimitry Andric (SRA (COPY_TO_REGCLASS 39590b57cec5SDimitry Andric (i32 (EXTRACT_SUBREG 39600b57cec5SDimitry Andric (SPLAT_H v8i16:$ws, 39610b57cec5SDimitry Andric (COPY_TO_REGCLASS 39620b57cec5SDimitry Andric (i32 (EXTRACT_SUBREG i64:$idx, sub_32)), GPR32)), 39630b57cec5SDimitry Andric sub_lo)), 39640b57cec5SDimitry Andric GPR32), 39650b57cec5SDimitry Andric (i32 16))>; 39660b57cec5SDimitry Andricdef : MSAPat< 39670b57cec5SDimitry Andric (i32 (vextract_sext_i32 v4i32:$ws, i64:$idx)), 39680b57cec5SDimitry Andric (COPY_TO_REGCLASS 39690b57cec5SDimitry Andric (i32 (EXTRACT_SUBREG 39700b57cec5SDimitry Andric (SPLAT_W v4i32:$ws, 39710b57cec5SDimitry Andric (COPY_TO_REGCLASS 39720b57cec5SDimitry Andric (i32 (EXTRACT_SUBREG i64:$idx, sub_32)), GPR32)), 39730b57cec5SDimitry Andric sub_lo)), 39740b57cec5SDimitry Andric GPR32)>; 39750b57cec5SDimitry Andricdef : MSAPat< 39760b57cec5SDimitry Andric (i64 (vextract_sext_i64 v2i64:$ws, i64:$idx)), 39770b57cec5SDimitry Andric (COPY_TO_REGCLASS 39780b57cec5SDimitry Andric (i64 (EXTRACT_SUBREG 39790b57cec5SDimitry Andric (SPLAT_D v2i64:$ws, 39800b57cec5SDimitry Andric (COPY_TO_REGCLASS (i32 (EXTRACT_SUBREG i64:$idx, sub_32)), GPR32)), 39810b57cec5SDimitry Andric sub_64)), 39820b57cec5SDimitry Andric GPR64), [HasMSA, IsGP64bit]>; 39830b57cec5SDimitry Andric 39840b57cec5SDimitry Andricdef : MSAPat< 39850b57cec5SDimitry Andric (i32 (vextract_zext_i8 v16i8:$ws, i64:$idx)), 39860b57cec5SDimitry Andric (SRL (COPY_TO_REGCLASS 39870b57cec5SDimitry Andric (i32 (EXTRACT_SUBREG 39880b57cec5SDimitry Andric (SPLAT_B v16i8:$ws, 39890b57cec5SDimitry Andric (COPY_TO_REGCLASS 39900b57cec5SDimitry Andric (i32 (EXTRACT_SUBREG i64:$idx, sub_32)), GPR32)), 39910b57cec5SDimitry Andric sub_lo)), 39920b57cec5SDimitry Andric GPR32), 39930b57cec5SDimitry Andric (i32 24))>; 39940b57cec5SDimitry Andricdef : MSAPat< 39950b57cec5SDimitry Andric (i32 (vextract_zext_i16 v8i16:$ws, i64:$idx)), 39960b57cec5SDimitry Andric (SRL (COPY_TO_REGCLASS 39970b57cec5SDimitry Andric (i32 (EXTRACT_SUBREG 39980b57cec5SDimitry Andric (SPLAT_H v8i16:$ws, 39990b57cec5SDimitry Andric (COPY_TO_REGCLASS 40000b57cec5SDimitry Andric (i32 (EXTRACT_SUBREG i64:$idx, sub_32)), GPR32)), 40010b57cec5SDimitry Andric sub_lo)), 40020b57cec5SDimitry Andric GPR32), 40030b57cec5SDimitry Andric (i32 16))>; 40040b57cec5SDimitry Andricdef : MSAPat< 40050b57cec5SDimitry Andric (i32 (vextract_zext_i32 v4i32:$ws, i64:$idx)), 40060b57cec5SDimitry Andric (COPY_TO_REGCLASS 40070b57cec5SDimitry Andric (i32 (EXTRACT_SUBREG 40080b57cec5SDimitry Andric (SPLAT_W v4i32:$ws, 40090b57cec5SDimitry Andric (COPY_TO_REGCLASS (i32 (EXTRACT_SUBREG i64:$idx, sub_32)), GPR32)), 40100b57cec5SDimitry Andric sub_lo)), 40110b57cec5SDimitry Andric GPR32)>; 40120b57cec5SDimitry Andricdef : MSAPat< 40130b57cec5SDimitry Andric (i64 (vextract_zext_i64 v2i64:$ws, i64:$idx)), 40140b57cec5SDimitry Andric (COPY_TO_REGCLASS 40150b57cec5SDimitry Andric (i64 (EXTRACT_SUBREG 40160b57cec5SDimitry Andric (SPLAT_D v2i64:$ws, 40170b57cec5SDimitry Andric (COPY_TO_REGCLASS (i32 (EXTRACT_SUBREG i64:$idx, sub_32)), GPR32)), 40180b57cec5SDimitry Andric sub_64)), 40190b57cec5SDimitry Andric GPR64), 40200b57cec5SDimitry Andric [HasMSA, IsGP64bit]>; 40210b57cec5SDimitry Andric 40220b57cec5SDimitry Andricdef : MSAPat< 40230b57cec5SDimitry Andric (f32 (vector_extract v4f32:$ws, i64:$idx)), 40240b57cec5SDimitry Andric (f32 (EXTRACT_SUBREG 40250b57cec5SDimitry Andric (SPLAT_W v4f32:$ws, 40260b57cec5SDimitry Andric (COPY_TO_REGCLASS (i32 (EXTRACT_SUBREG i64:$idx, sub_32)), GPR32)), 40270b57cec5SDimitry Andric sub_lo))>; 40280b57cec5SDimitry Andricdef : MSAPat< 40290b57cec5SDimitry Andric (f64 (vector_extract v2f64:$ws, i64:$idx)), 40300b57cec5SDimitry Andric (f64 (EXTRACT_SUBREG 40310b57cec5SDimitry Andric (SPLAT_D v2f64:$ws, 40320b57cec5SDimitry Andric (COPY_TO_REGCLASS (i32 (EXTRACT_SUBREG i64:$idx, sub_32)), GPR32)), 40330b57cec5SDimitry Andric sub_64))>; 40340b57cec5SDimitry Andric 40350b57cec5SDimitry Andricdef : MSAPat<(vfseteq_v4f32 MSA128WOpnd:$a, MSA128WOpnd:$b), 40360b57cec5SDimitry Andric (FCEQ_W MSA128WOpnd:$a, MSA128WOpnd:$b)>; 40370b57cec5SDimitry Andricdef : MSAPat<(vfseteq_v2f64 MSA128DOpnd:$a, MSA128DOpnd:$b), 40380b57cec5SDimitry Andric (FCEQ_D MSA128DOpnd:$a, MSA128DOpnd:$b)>; 40390b57cec5SDimitry Andricdef : MSAPat<(vfsetle_v4f32 MSA128WOpnd:$a, MSA128WOpnd:$b), 40400b57cec5SDimitry Andric (FCLE_W MSA128WOpnd:$a, MSA128WOpnd:$b)>; 40410b57cec5SDimitry Andricdef : MSAPat<(vfsetle_v2f64 MSA128DOpnd:$a, MSA128DOpnd:$b), 40420b57cec5SDimitry Andric (FCLE_D MSA128DOpnd:$a, MSA128DOpnd:$b)>; 40430b57cec5SDimitry Andricdef : MSAPat<(vfsetlt_v4f32 MSA128WOpnd:$a, MSA128WOpnd:$b), 40440b57cec5SDimitry Andric (FCLT_W MSA128WOpnd:$a, MSA128WOpnd:$b)>; 40450b57cec5SDimitry Andricdef : MSAPat<(vfsetlt_v2f64 MSA128DOpnd:$a, MSA128DOpnd:$b), 40460b57cec5SDimitry Andric (FCLT_D MSA128DOpnd:$a, MSA128DOpnd:$b)>; 40470b57cec5SDimitry Andricdef : MSAPat<(vfsetne_v4f32 MSA128WOpnd:$a, MSA128WOpnd:$b), 40480b57cec5SDimitry Andric (FCNE_W MSA128WOpnd:$a, MSA128WOpnd:$b)>; 40490b57cec5SDimitry Andricdef : MSAPat<(vfsetne_v2f64 MSA128DOpnd:$a, MSA128DOpnd:$b), 40500b57cec5SDimitry Andric (FCNE_D MSA128DOpnd:$a, MSA128DOpnd:$b)>; 4051