Lines Matching refs:args
494 void OpVector(const VOpArgs& args, ExtraArgs... extra_args) { in OpVector() argument
500 if (args.opcode == Decoder::VLUmOpOpcode::kVlXreXX) { in OpVector()
501 if (!IsPowerOf2(args.nf + 1)) { in OpVector()
504 if ((args.dst & args.nf) != 0) { in OpVector()
509 for (size_t index = 0; index <= args.nf; index++) { in OpVector()
510 state_->cpu.v[args.dst + index] = ptr[index]; in OpVector()
517 if (args.opcode == Decoder::VSUmOpOpcode::kVsX) { in OpVector()
518 if (args.width != Decoder::MemoryDataOperandType::k8bit) { in OpVector()
521 if (!IsPowerOf2(args.nf + 1)) { in OpVector()
524 if ((args.data & args.nf) != 0) { in OpVector()
529 for (size_t index = 0; index <= args.nf; index++) { in OpVector()
530 ptr[index] = state_->cpu.v[args.data + index]; in OpVector()
558 switch (args.width) { in OpVector()
560 return OpVector<UInt8>(args, vtype, extra_args...); in OpVector()
562 return OpVector<UInt16>(args, vtype, extra_args...); in OpVector()
564 return OpVector<UInt32>(args, vtype, extra_args...); in OpVector()
566 return OpVector<UInt64>(args, vtype, extra_args...); in OpVector()
577 return OpVector<intrinsics::Float16>(args, vlmul, vtype); in OpVector()
583 args, in OpVector()
589 return OpVector<Float64>(args, vlmul, vtype, bit_cast<Float64>(extra_args)...); in OpVector()
596 return OpVector<UInt8>(args, vlmul, vtype, extra_args...); in OpVector()
598 return OpVector<UInt16>(args, vlmul, vtype, extra_args...); in OpVector()
600 return OpVector<UInt32>(args, vlmul, vtype, extra_args...); in OpVector()
602 return OpVector<UInt64>(args, vlmul, vtype, extra_args...); in OpVector()
611 void OpVector(const VOpArgs& args, Register vtype, ExtraArgs... extra_args) { in OpVector() argument
615 static_cast<std::underlying_type_t<decltype(args.width)>>(args.width); // Multiply by EEW. in OpVector()
622 if ((vemul > 0) && ((args.nf + 1) * (1 << vemul) > 8)) { in OpVector()
626 args, static_cast<VectorRegisterGroupMultiplier>(vemul & 0b111), vtype, extra_args...); in OpVector()
630 void OpVector(const VOpArgs& args, in OpVector() argument
637 args, vtype, extra_args...); in OpVector()
640 args, vtype, extra_args...); in OpVector()
643 args, vtype, extra_args...); in OpVector()
646 args, vtype, extra_args...); in OpVector()
649 args, vtype, extra_args...); in OpVector()
652 args, vtype, extra_args...); in OpVector()
655 args, vtype, extra_args...); in OpVector()
665 void OpVector(const VOpArgs& args, Register vtype, ExtraArgs... extra_args) { in OpVector() argument
666 if (args.vm) { in OpVector()
668 args, vtype, extra_args...); in OpVector()
672 args, vtype, extra_args...); in OpVector()
675 args, vtype, extra_args...); in OpVector()
683 void OpVector(const VOpArgs& args, Register vtype, ExtraArgs... extra_args) { in OpVector() argument
693 switch (args.nf) { in OpVector()
695 return OpVector<ElementType, 1, vlmul, vma>(args, vtype, extra_args...); in OpVector()
700 return OpVector<ElementType, 2, vlmul, vma>(args, vtype, extra_args...); in OpVector()
706 return OpVector<ElementType, 3, vlmul, vma>(args, vtype, extra_args...); in OpVector()
712 return OpVector<ElementType, 4, vlmul, vma>(args, vtype, extra_args...); in OpVector()
718 return OpVector<ElementType, 5, vlmul, vma>(args, vtype, extra_args...); in OpVector()
724 return OpVector<ElementType, 6, vlmul, vma>(args, vtype, extra_args...); in OpVector()
730 return OpVector<ElementType, 7, vlmul, vma>(args, vtype, extra_args...); in OpVector()
736 return OpVector<ElementType, 8, vlmul, vma>(args, vtype, extra_args...); in OpVector()
741 return OpVector<ElementType, vlmul, TailProcessing::kAgnostic, vma>(args, extra_args...); in OpVector()
743 return OpVector<ElementType, vlmul, TailProcessing::kUndisturbed, vma>(args, extra_args...); in OpVector()
753 void OpVector(const VOpArgs& args, Register vtype, ExtraArgs... extra_args) { in OpVector() argument
766 vma>(args, vtype, extra_args...); in OpVector()
772 vma>(args, vtype, extra_args...); in OpVector()
778 args, extra_args...); in OpVector()
781 args, extra_args...); in OpVector()
792 void OpVector(const VOpArgs& args, Register vtype, ExtraArgs... extra_args) { in OpVector() argument
797 args, vlmul, extra_args...); in OpVector()
800 args, vlmul, extra_args...); in OpVector()
803 args, vlmul, extra_args...); in OpVector()
806 args, vlmul, extra_args...); in OpVector()
820 void OpVector(const VOpArgs& args, VectorRegisterGroupMultiplier vlmul, ExtraArgs... extra_args) { in OpVector() argument
829 vma>(args, extra_args...); in OpVector()
837 vma>(args, extra_args...); in OpVector()
845 vma>(args, extra_args...); in OpVector()
853 vma>(args, extra_args...); in OpVector()
861 vma>(args, extra_args...); in OpVector()
869 vma>(args, extra_args...); in OpVector()
877 vma>(args, extra_args...); in OpVector()
905 void OpVector(const Decoder::VLoadIndexedArgs& args, Register src) { in OpVector() argument
912 vma>(args, src); in OpVector()
922 void OpVector(const Decoder::VLoadIndexedArgs& args, Register src) { in OpVector() argument
923 if (!IsAligned<kIndexRegistersInvolved>(args.idx)) { in OpVector()
929 memcpy(indexes, state_->cpu.v + args.idx, sizeof(SIMD128Register) * kIndexRegistersInvolved); in OpVector()
931 args.dst, src, [&indexes](size_t index) { return indexes[index]; }); in OpVector()
939 void OpVector(const Decoder::VLoadStrideArgs& args, Register src, Register stride) { in OpVector() argument
941 args, src, stride); in OpVector()
949 void OpVector(const Decoder::VLoadStrideArgs& args, Register src, Register stride) { in OpVector() argument
951 args.dst, src, [stride](size_t index) { return stride * index; }); in OpVector()
959 void OpVector(const Decoder::VLoadUnitStrideArgs& args, Register src) { in OpVector() argument
960 return OpVector<ElementType, kSegmentSize, NumberOfRegistersInvolved(vlmul), vta, vma>(args, in OpVector()
969 void OpVector(const Decoder::VLoadUnitStrideArgs& args, Register src) { in OpVector() argument
970 switch (args.opcode) { in OpVector()
978 args.dst, src, [](size_t index) { return kSegmentSize * sizeof(ElementType) * index; }); in OpVector()
986 args.dst, src, [](size_t index) { return kSegmentSize * sizeof(ElementType) * index; }); in OpVector()
996 args.dst, src, [](size_t index) { return index; }); in OpVector()
1264 void OpVector(const Decoder::VOpFVfArgs& args, ElementType arg2) { in OpVector() argument
1268 switch (args.opcode) { in OpVector()
1275 kFrm>(args.dst, args.src1, arg2); in OpVector()
1282 kFrm>(args.dst, args.src1, arg2); in OpVector()
1289 kFrm>(args.dst, args.src1, arg2); in OpVector()
1296 kFrm>(args.dst, args.src1, arg2); in OpVector()
1303 kFrm>(args.dst, args.src1, arg2); in OpVector()
1310 kFrm>(args.dst, args.src1, arg2); in OpVector()
1317 kFrm>(args.dst, args.src1, arg2); in OpVector()
1324 kFrm>(args.dst, args.src1, arg2); in OpVector()
1331 kFrm>(args.dst, args.src1, arg2); in OpVector()
1337 switch (args.opcode) { in OpVector()
1340 args.dst, args.src1, arg2); in OpVector()
1343 args.dst, args.src1, arg2); in OpVector()
1346 args.dst, args.src1, arg2); in OpVector()
1349 args.dst, args.src1, arg2); in OpVector()
1352 args.dst, args.src1, arg2); in OpVector()
1354 return OpVectorslide1up<ElementType, vlmul, vta, vma>(args.dst, args.src1, arg2); in OpVector()
1356 return OpVectorslide1down<ElementType, vlmul, vta, vma>(args.dst, args.src1, arg2); in OpVector()
1361 if (args.src1 != 0) { in OpVector()
1364 return OpVectorVmvsx<ElementType, vta>(args.dst, arg2); in OpVector()
1367 if (args.src1 != 0) { in OpVector()
1370 return OpVectorx<intrinsics::Vcopyx<ElementType>, ElementType, vlmul, vta, vma>(args.dst, in OpVector()
1379 args.dst, arg2, /*dst_mask=*/args.src1); in OpVector()
1383 args.dst, args.src1, arg2); in OpVector()
1386 args.dst, args.src1, arg2); in OpVector()
1389 args.dst, args.src1, arg2); in OpVector()
1392 args.dst, args.src1, arg2); in OpVector()
1395 args.dst, args.src1, arg2); in OpVector()
1398 args.dst, args.src1, arg2); in OpVector()
1405 kFrm>(args.dst, Vec<SignedType{}>{args.src1}, arg2); in OpVector()
1413 args.dst, in OpVector()
1416 args.src1}, in OpVector()
1424 kFrm>(args.dst, Vec<SignedType{}>{args.src1}, arg2); in OpVector()
1431 kFrm>(args.dst, Vec<SignedType{}>{args.src1}, arg2); in OpVector()
1438 kFrm>(args.dst, Vec<SignedType{}>{args.src1}, arg2); in OpVector()
1445 kFrm>(args.dst, Vec<SignedType{}>{args.src1}, arg2); in OpVector()
1448 args.dst, args.src1, arg2); in OpVector()
1451 args.dst, args.src1, arg2); in OpVector()
1454 args.dst, args.src1, arg2); in OpVector()
1457 args.dst, args.src1, arg2); in OpVector()
1460 args.dst, args.src1, arg2); in OpVector()
1463 args.dst, args.src1, arg2); in OpVector()
1466 args.dst, args.src1, arg2); in OpVector()
1469 args.dst, args.src1, arg2); in OpVector()
1476 void OpVector(const Decoder::VOpFVvArgs& args) { in OpVector() argument
1484 switch (args.opcode) { in OpVector()
1486 switch (args.vfunary0_opcode) { in OpVector()
1495 kFrm>(args.dst, args.src1); in OpVector()
1504 kFrm>(args.dst, args.src1); in OpVector()
1513 kFrm>(args.dst, args.src1); in OpVector()
1522 kFrm>(args.dst, args.src1); in OpVector()
1531 kFrm>(args.dst, args.src1); in OpVector()
1540 kFrm>(args.dst, args.src1); in OpVector()
1557 switch (args.opcode) { in OpVector()
1564 kFrm>(args.dst, args.src1, args.src2); in OpVector()
1571 kFrm>(args.dst, args.src1, args.src2); in OpVector()
1578 kFrm>(args.dst, args.src1, args.src2); in OpVector()
1585 kFrm>(args.dst, args.src1, args.src2); in OpVector()
1592 kFrm>(args.dst, args.src1, args.src2); in OpVector()
1599 kFrm>(args.dst, args.src1, args.src2); in OpVector()
1606 kFrm>(args.dst, args.src1, args.src2); in OpVector()
1613 kFrm>(args.dst, args.src1, args.src2); in OpVector()
1620 kFrm>(args.dst, args.src1, args.src2); in OpVector()
1622 switch (args.vfunary0_opcode) { in OpVector()
1631 kFrm>(args.dst, args.src1); in OpVector()
1640 kFrm>(args.dst, args.src1); in OpVector()
1649 kFrm>(args.dst, args.src1); in OpVector()
1658 kFrm>(args.dst, args.src1); in OpVector()
1667 kFrm>(args.dst, args.src1); in OpVector()
1676 kFrm>(args.dst, args.src1); in OpVector()
1685 kFrm>(args.dst, args.src1); in OpVector()
1694 kFrm>(args.dst, args.src1); in OpVector()
1716 switch (args.opcode) { in OpVector()
1726 kFrm>(args.dst, Vec<kNegativeZero>{args.src1}, args.src2); in OpVector()
1733 kFrm>(args.dst, Vec<kPositiveZero>{args.src1}, args.src2); in OpVector()
1744 kFrm>(args.dst, Vec<kNegativeZero>{args.src1}, args.src2); in OpVector()
1751 kFrm>(args.dst, Vec<kPositiveZero>{args.src1}, args.src2); in OpVector()
1755 args.dst, args.src1, args.src2); in OpVector()
1759 args.dst, in OpVector()
1762 args.src1}, in OpVector()
1763 args.src2); in OpVector()
1766 args.dst, args.src1, args.src2); in OpVector()
1770 args.dst, in OpVector()
1773 args.src1}, in OpVector()
1774 args.src2); in OpVector()
1777 args.dst, args.src1, args.src2); in OpVector()
1780 args.dst, args.src1, args.src2); in OpVector()
1783 args.dst, args.src1, args.src2); in OpVector()
1785 switch (args.vfunary0_opcode) { in OpVector()
1794 kFrm>(args.dst, args.src1); in OpVector()
1803 kFrm>(args.dst, args.src1); in OpVector()
1812 kFrm>(args.dst, args.src1); in OpVector()
1821 kFrm>(args.dst, args.src1); in OpVector()
1830 kFrm>(args.dst, args.src1); in OpVector()
1839 kFrm>(args.dst, args.src1); in OpVector()
1845 switch (args.vfunary1_opcode) { in OpVector()
1852 kFrm>(args.dst, args.src1); in OpVector()
1856 args.dst, args.src1); in OpVector()
1860 args.dst, args.src1); in OpVector()
1870 if (args.src2 != 0) { in OpVector()
1873 return OpVectorVmvfs<ElementType>(args.dst, args.src1); in OpVector()
1876 args.dst, args.src1, args.src2); in OpVector()
1879 args.dst, args.src1, args.src2); in OpVector()
1882 args.dst, args.src1, args.src2); in OpVector()
1885 args.dst, args.src1, args.src2); in OpVector()
1893 args.dst, in OpVector()
1894 Vec<SignedType{}>{args.src1}, in OpVector()
1897 args.src2}); in OpVector()
1905 args.dst, Vec<SignedType{}>{args.src1}, Vec<SignedType{}>{args.src2}); in OpVector()
1913 args.dst, Vec<SignedType{}>{args.src1}, Vec<SignedType{}>{args.src2}); in OpVector()
1921 args.dst, Vec<SignedType{}>{args.src1}, Vec<SignedType{}>{args.src2}); in OpVector()
1924 args.dst, args.src1, args.src2); in OpVector()
1927 args.dst, args.src1, args.src2); in OpVector()
1930 args.dst, args.src1, args.src2); in OpVector()
1933 args.dst, args.src1, args.src2); in OpVector()
1940 kFrm>(args.dst, args.src1, args.src2); in OpVector()
1947 kFrm>(args.dst, args.src1, args.src2); in OpVector()
1954 kFrm>(args.dst, args.src1, args.src2); in OpVector()
1961 kFrm>(args.dst, args.src1, args.src2); in OpVector()
1970 void OpVector(const Decoder::VOpIViArgs& args) { in OpVector() argument
1976 switch (args.opcode) { in OpVector()
1979 args.dst, args.src, SignedType{args.imm}); in OpVector()
1982 args.dst, args.src, SignedType{args.imm}); in OpVector()
1985 args.dst, args.src, SignedType{args.imm}); in OpVector()
1988 args.dst, args.src, SignedType{args.imm}); in OpVector()
1991 args.dst, args.src, SignedType{args.imm}); in OpVector()
1994 args.dst, args.src, [&args](size_t /*index*/) { return ElementType{args.uimm}; }); in OpVector()
1997 args.dst, args.src, SignedType{args.imm}); in OpVector()
2000 args.dst, args.src, SignedType{args.imm}); in OpVector()
2005 args.dst, args.src, BitCastToUnsigned(SignedType{args.imm})); in OpVector()
2008 args.dst, args.src, SignedType{args.imm}); in OpVector()
2013 args.dst, args.src, BitCastToUnsigned(SignedType{args.imm})); in OpVector()
2016 args.dst, args.src, SignedType{args.imm}); in OpVector()
2025 args.dst, args.src, BitCastToUnsigned(SaturatingSignedType{args.imm})); in OpVector()
2031 vma>(args.dst, args.src, SaturatingSignedType{args.imm}); in OpVector()
2034 args.dst, args.src, UnsignedType{args.uimm}); in OpVector()
2037 args.dst, args.src, UnsignedType{args.uimm}); in OpVector()
2042 args.dst, args.src, BitCastToSigned(UnsignedType{args.uimm})); in OpVector()
2045 if (args.src != 0) { in OpVector()
2049 args.dst, SignedType{args.imm}); in OpVector()
2057 args.dst, SignedType{args.imm}, /*dst_mask=*/args.src); in OpVector()
2062 switch (args.imm) { in OpVector()
2064 return OpVectorVmvXrv<ElementType, 1>(args.dst, args.src); in OpVector()
2066 return OpVectorVmvXrv<ElementType, 2>(args.dst, args.src); in OpVector()
2068 return OpVectorVmvXrv<ElementType, 4>(args.dst, args.src); in OpVector()
2070 return OpVectorVmvXrv<ElementType, 8>(args.dst, args.src); in OpVector()
2081 args.dst, args.src, BitCastToSigned(UnsignedType{args.uimm})); in OpVector()
2084 args.dst, args.src, UnsignedType{args.uimm}); in OpVector()
2087 args.dst, args.src, UnsignedType{args.uimm}); in OpVector()
2090 args.dst, args.src, UnsignedType{args.uimm}); in OpVector()
2097 kVxrm>(args.dst, args.src, UnsignedType{args.uimm}); in OpVector()
2104 kVxrm>(args.dst, args.src, UnsignedType{args.uimm}); in OpVector()
2107 args.dst, args.src, UnsignedType{args.uimm}); in OpVector()
2110 args.dst, args.src, BitCastToSigned(UnsignedType{args.uimm})); in OpVector()
2117 void OpVector(const Decoder::VOpIVvArgs& args) { in OpVector() argument
2123 switch (args.opcode) { in OpVector()
2126 args.dst, args.src1, args.src2); in OpVector()
2129 args.dst, args.src1, args.src2); in OpVector()
2132 args.dst, args.src1, args.src2); in OpVector()
2135 args.dst, args.src1, args.src2); in OpVector()
2138 args.dst, args.src1, args.src2); in OpVector()
2141 if (!IsAligned<kRegistersInvolved>(args.src2)) { in OpVector()
2146 memcpy(indexes, state_->cpu.v + args.src2, sizeof(indexes)); in OpVector()
2148 args.dst, args.src1, [&indexes](size_t index) { return indexes[index]; }); in OpVector()
2152 args.dst, args.src1, args.src2); in OpVector()
2155 args.dst, args.src1, args.src2); in OpVector()
2158 args.dst, args.src1, args.src2); in OpVector()
2161 args.dst, args.src1, args.src2); in OpVector()
2164 args.dst, args.src1, args.src2); in OpVector()
2167 args.dst, args.src1, args.src2); in OpVector()
2173 vma>(args.dst, args.src1, args.src2); in OpVector()
2179 vma>(args.dst, args.src1, args.src2); in OpVector()
2185 vma>(args.dst, args.src1, args.src2); in OpVector()
2191 vma>(args.dst, args.src1, args.src2); in OpVector()
2194 args.dst, args.src1, args.src2); in OpVector()
2197 args.dst, args.src1, args.src2); in OpVector()
2200 args.dst, args.src1, args.src2); in OpVector()
2203 args.dst, args.src1, args.src2); in OpVector()
2206 args.dst, args.src1, args.src2); in OpVector()
2209 args.dst, args.src1, args.src2); in OpVector()
2212 args.dst, args.src1, args.src2); in OpVector()
2215 if (args.src1 != 0) { in OpVector()
2219 args.dst, args.src2); in OpVector()
2227 args.dst, args.src2, /*dst_mask=*/args.src1); in OpVector()
2231 args.dst, args.src1, args.src2); in OpVector()
2234 args.dst, args.src1, args.src2); in OpVector()
2241 kVxrm>(args.dst, args.src1, args.src2); in OpVector()
2244 args.dst, args.src1, args.src2); in OpVector()
2247 args.dst, args.src1, args.src2); in OpVector()
2254 kVxrm>(args.dst, args.src1, args.src2); in OpVector()
2261 kVxrm>(args.dst, args.src1, args.src2); in OpVector()
2268 void OpVector(const Decoder::VOpIVxArgs& args, Register arg2) { in OpVector() argument
2274 switch (args.opcode) { in OpVector()
2277 args.dst, args.src1, MaybeTruncateTo<ElementType>(arg2)); in OpVector()
2280 args.dst, args.src1, MaybeTruncateTo<ElementType>(arg2)); in OpVector()
2283 args.dst, args.src1, MaybeTruncateTo<ElementType>(arg2)); in OpVector()
2286 args.dst, args.src1, MaybeTruncateTo<ElementType>(arg2)); in OpVector()
2289 args.dst, args.src1, MaybeTruncateTo<ElementType>(arg2)); in OpVector()
2292 args.dst, args.src1, MaybeTruncateTo<ElementType>(arg2)); in OpVector()
2295 args.dst, args.src1, [&arg2](size_t /*index*/) { in OpVector()
2300 args.dst, args.src1, MaybeTruncateTo<ElementType>(arg2)); in OpVector()
2303 args.dst, args.src1, MaybeTruncateTo<ElementType>(arg2)); in OpVector()
2306 args.dst, args.src1, MaybeTruncateTo<UnsignedType>(arg2)); in OpVector()
2309 args.dst, args.src1, MaybeTruncateTo<SignedType>(arg2)); in OpVector()
2312 args.dst, args.src1, MaybeTruncateTo<UnsignedType>(arg2)); in OpVector()
2315 args.dst, args.src1, MaybeTruncateTo<SignedType>(arg2)); in OpVector()
2318 args.dst, args.src1, MaybeTruncateTo<UnsignedType>(arg2)); in OpVector()
2321 args.dst, args.src1, MaybeTruncateTo<SignedType>(arg2)); in OpVector()
2327 vma>(args.dst, args.src1, MaybeTruncateTo<ElementType>(arg2)); in OpVector()
2333 vma>(args.dst, args.src1, MaybeTruncateTo<ElementType>(arg2)); in OpVector()
2339 vma>(args.dst, args.src1, MaybeTruncateTo<ElementType>(arg2)); in OpVector()
2345 vma>(args.dst, args.src1, MaybeTruncateTo<ElementType>(arg2)); in OpVector()
2348 args.dst, args.src1, MaybeTruncateTo<ElementType>(arg2)); in OpVector()
2351 args.dst, args.src1, MaybeTruncateTo<UnsignedType>(arg2)); in OpVector()
2354 args.dst, args.src1, MaybeTruncateTo<SignedType>(arg2)); in OpVector()
2357 args.dst, args.src1, MaybeTruncateTo<UnsignedType>(arg2)); in OpVector()
2360 args.dst, args.src1, MaybeTruncateTo<SignedType>(arg2)); in OpVector()
2363 args.dst, args.src1, MaybeTruncateTo<UnsignedType>(arg2)); in OpVector()
2366 args.dst, args.src1, MaybeTruncateTo<SignedType>(arg2)); in OpVector()
2369 if (args.src1 != 0) { in OpVector()
2373 args.dst, MaybeTruncateTo<ElementType>(arg2)); in OpVector()
2381 args.dst, MaybeTruncateTo<ElementType>(arg2), /*dst_mask=*/args.src1); in OpVector()
2385 args.dst, args.src1, MaybeTruncateTo<SignedType>(arg2)); in OpVector()
2388 args.dst, args.src1, MaybeTruncateTo<UnsignedType>(arg2)); in OpVector()
2391 args.dst, args.src1, MaybeTruncateTo<UnsignedType>(arg2)); in OpVector()
2394 args.dst, args.src1, MaybeTruncateTo<UnsignedType>(arg2)); in OpVector()
2401 kVxrm>(args.dst, args.src1, MaybeTruncateTo<SignedType>(arg2)); in OpVector()
2404 args.dst, args.src1, MaybeTruncateTo<UnsignedType>(arg2)); in OpVector()
2407 args.dst, args.src1, MaybeTruncateTo<SignedType>(arg2)); in OpVector()
2414 kVxrm>(args.dst, args.src1, MaybeTruncateTo<UnsignedType>(arg2)); in OpVector()
2421 kVxrm>(args.dst, args.src1, MaybeTruncateTo<SignedType>(arg2)); in OpVector()
2428 void OpVector(const Decoder::VOpMVvArgs& args) { in OpVector() argument
2433 switch (args.opcode) { in OpVector()
2436 args.dst, args.src1, args.src2); in OpVector()
2439 args.dst, args.src1, args.src2); in OpVector()
2442 args.dst, args.src1, args.src2); in OpVector()
2445 args.dst, args.src1, args.src2); in OpVector()
2448 args.dst, args.src1, args.src2); in OpVector()
2451 args.dst, args.src1, args.src2); in OpVector()
2454 args.dst, args.src1, args.src2); in OpVector()
2457 args.dst, args.src1, args.src2); in OpVector()
2462 switch (args.opcode) { in OpVector()
2465 args.dst, Vec<ElementType{}>{args.src1}, args.src2); in OpVector()
2468 args.dst, Vec<~ElementType{}>{args.src1}, args.src2); in OpVector()
2471 args.dst, Vec<ElementType{}>{args.src1}, args.src2); in OpVector()
2474 args.dst, Vec<ElementType{}>{args.src1}, args.src2); in OpVector()
2477 args.dst, in OpVector()
2479 args.src1}, in OpVector()
2480 args.src2); in OpVector()
2483 args.dst, in OpVector()
2484 Vec<SignedType{std::numeric_limits<typename SignedType::BaseType>::max()}>{args.src1}, in OpVector()
2485 args.src2); in OpVector()
2488 args.dst, Vec<UnsignedType{}>{args.src1}, args.src2); in OpVector()
2491 args.dst, in OpVector()
2492 Vec<SignedType{std::numeric_limits<typename SignedType::BaseType>::min()}>{args.src1}, in OpVector()
2493 args.src2); in OpVector()
2496 args.dst, args.src1, args.src2); in OpVector()
2499 args.dst, args.src1, args.src2); in OpVector()
2502 args.dst, args.src1, args.src2); in OpVector()
2505 args.dst, args.src1, args.src2); in OpVector()
2507 switch (args.vwxunary0_opcode) { in OpVector()
2512 return OpVectorVmvxs<SignedType>(args.dst, args.src1); in OpVector()
2514 return OpVectorVWXUnary0<intrinsics::Vcpopm<>, vma>(args.dst, args.src1); in OpVector()
2516 return OpVectorVWXUnary0<intrinsics::Vfirstm<>, vma>(args.dst, args.src1); in OpVector()
2521 switch (args.vxunary0_opcode) { in OpVector()
2529 vma>(args.dst, args.src1); in OpVector()
2539 vma>(args.dst, args.src1); in OpVector()
2549 vma>(args.dst, args.src1); in OpVector()
2559 vma>(args.dst, args.src1); in OpVector()
2569 vma>(args.dst, args.src1); in OpVector()
2579 vma>(args.dst, args.src1); in OpVector()
2587 switch (args.vmunary0_opcode) { in OpVector()
2589 return OpVectorVMUnary0<intrinsics::Vmsbfm<>, vma>(args.dst, args.src1); in OpVector()
2591 return OpVectorVMUnary0<intrinsics::Vmsofm<>, vma>(args.dst, args.src1); in OpVector()
2593 return OpVectorVMUnary0<intrinsics::Vmsifm<>, vma>(args.dst, args.src1); in OpVector()
2595 return OpVectorViotam<ElementType, vlmul, vta, vma>(args.dst, args.src1); in OpVector()
2597 if (args.src1) { in OpVector()
2600 return OpVectorVidv<ElementType, vlmul, vta, vma>(args.dst); in OpVector()
2606 args.dst, args.src1, args.src2); in OpVector()
2609 args.dst, args.src1, args.src2); in OpVector()
2612 args.dst, args.src1, args.src2); in OpVector()
2615 args.dst, args.src1, args.src2); in OpVector()
2618 args.dst, args.src1, args.src2); in OpVector()
2621 args.dst, args.src1, args.src2); in OpVector()
2624 args.dst, args.src1, args.src2); in OpVector()
2627 args.dst, args.src1, args.src2); in OpVector()
2630 args.dst, args.src1, args.src2); in OpVector()
2633 args.dst, args.src1, args.src2); in OpVector()
2636 args.dst, args.src1, args.src2); in OpVector()
2639 args.dst, args.src1, args.src2); in OpVector()
2642 args.dst, args.src1, args.src2); in OpVector()
2645 args.dst, args.src1, args.src2); in OpVector()
2648 args.dst, args.src1, args.src2); in OpVector()
2651 args.dst, args.src1, args.src2); in OpVector()
2654 args.dst, args.src1, args.src2); in OpVector()
2657 args.dst, args.src1, args.src2); in OpVector()
2660 args.dst, args.src1, args.src2); in OpVector()
2663 args.dst, args.src1, args.src2); in OpVector()
2666 args.dst, args.src1, args.src2); in OpVector()
2669 args.dst, args.src1, args.src2); in OpVector()
2672 args.dst, args.src1, args.src2); in OpVector()
2675 args.dst, args.src1, args.src2); in OpVector()
2678 args.dst, args.src1, args.src2); in OpVector()
2681 args.dst, args.src1, args.src2); in OpVector()
2688 void OpVector(const Decoder::VOpMVxArgs& args, Register arg2) { in OpVector() argument
2692 switch (args.opcode) { in OpVector()
2695 args.dst, args.src1, MaybeTruncateTo<UnsignedType>(arg2)); in OpVector()
2698 args.dst, args.src1, MaybeTruncateTo<SignedType>(arg2)); in OpVector()
2701 args.dst, args.src1, MaybeTruncateTo<UnsignedType>(arg2)); in OpVector()
2704 args.dst, args.src1, MaybeTruncateTo<SignedType>(arg2)); in OpVector()
2707 args.dst, args.src1, MaybeTruncateTo<SignedType>(arg2)); in OpVector()
2710 args.dst, args.src1, MaybeTruncateTo<SignedType>(arg2)); in OpVector()
2712 switch (args.vrxunary0_opcode) { in OpVector()
2717 return OpVectorVmvsx<SignedType, vta>(args.dst, MaybeTruncateTo<SignedType>(arg2)); in OpVector()
2723 args.dst, args.src1, MaybeTruncateTo<UnsignedType>(arg2)); in OpVector()
2726 args.dst, args.src1, MaybeTruncateTo<SignedType>(arg2)); in OpVector()
2729 args.dst, args.src1, MaybeTruncateTo<UnsignedType>(arg2)); in OpVector()
2732 args.dst, args.src1, MaybeTruncateTo<SignedType>(arg2)); in OpVector()
2735 args.dst, args.src1, MaybeTruncateTo<UnsignedType>(arg2)); in OpVector()
2738 args.dst, args.src1, MaybeTruncateTo<SignedType>(arg2)); in OpVector()
2741 args.dst, args.src1, MaybeTruncateTo<UnsignedType>(arg2)); in OpVector()
2744 args.dst, args.src1, MaybeTruncateTo<SignedType>(arg2)); in OpVector()
2747 args.dst, args.src1, MaybeTruncateTo<ElementType>(arg2)); in OpVector()
2750 args.dst, args.src1, MaybeTruncateTo<ElementType>(arg2)); in OpVector()
2753 args.dst, args.src1, MaybeTruncateTo<ElementType>(arg2)); in OpVector()
2756 args.dst, args.src1, MaybeTruncateTo<ElementType>(arg2)); in OpVector()
2759 args.dst, args.src1, MaybeTruncateTo<UnsignedType>(arg2)); in OpVector()
2762 args.dst, args.src1, MaybeTruncateTo<SignedType>(arg2)); in OpVector()
2765 args.dst, args.src1, MaybeTruncateTo<UnsignedType>(arg2)); in OpVector()
2768 args.dst, args.src1, MaybeTruncateTo<SignedType>(arg2)); in OpVector()
2771 args.dst, args.src1, MaybeTruncateTo<UnsignedType>(arg2)); in OpVector()
2774 args.dst, args.src1, MaybeTruncateTo<SignedType>(arg2)); in OpVector()
2777 args.dst, args.src1, MaybeTruncateTo<UnsignedType>(arg2)); in OpVector()
2780 args.dst, args.src1, MaybeTruncateTo<SignedType>(arg2)); in OpVector()
2783 args.dst, args.src1, MaybeTruncateTo<UnsignedType>(arg2)); in OpVector()
2786 args.dst, args.src1, MaybeTruncateTo<ElementType>(arg2)); in OpVector()
2789 args.dst, args.src1, MaybeTruncateTo<SignedType>(arg2)); in OpVector()
2792 args.dst, args.src1, MaybeTruncateTo<UnsignedType>(arg2)); in OpVector()
2795 args.dst, args.src1, MaybeTruncateTo<SignedType>(arg2)); in OpVector()
2798 args.dst, args.src1, MaybeTruncateTo<ElementType>(arg2)); in OpVector()
2801 args.dst, args.src1, MaybeTruncateTo<ElementType>(arg2)); in OpVector()
2814 void OpVector(const Decoder::VStoreIndexedArgs& args, Register src) { in OpVector() argument
2820 !std::is_same_v<decltype(vma), intrinsics::NoInactiveProcessing>>(args, src); in OpVector()
2829 void OpVector(const Decoder::VStoreIndexedArgs& args, Register src) { in OpVector() argument
2830 if (!IsAligned<kIndexRegistersInvolved>(args.idx)) { in OpVector()
2836 memcpy(indexes, state_->cpu.v + args.idx, sizeof(SIMD128Register) * kIndexRegistersInvolved); in OpVector()
2838 args.data, src, [&indexes](size_t index) { return indexes[index]; }); in OpVector()
2846 void OpVector(const Decoder::VStoreStrideArgs& args, Register src, Register stride) { in OpVector() argument
2851 args.data, src, [stride](size_t index) { return stride * index; }); in OpVector()
2859 void OpVector(const Decoder::VStoreUnitStrideArgs& args, Register src) { in OpVector() argument
2860 switch (args.opcode) { in OpVector()
2866 Decoder::VSUmOpOpcode::kVseXX>(args.data, src, [](size_t index) { in OpVector()
2877 args.data, src, [](size_t index) { return index; }); in OpVector()
3215 void OpVectorToMask(uint8_t dst, Args... args) { in OpVectorToMask() argument
3218 if (!IsAligned<kRegistersInvolved>(OrValuesOnlyForType<Vec>(args...))) { in OpVectorToMask()
3232 [this, vstart, vl, args...](auto index) { in OpVectorToMask()
3235 args, vstart, vl, index, intrinsics::NoInactiveProcessing{})...); in OpVectorToMask()
3547 void OpVectorWiden(uint8_t dst, Args... args) { in OpVectorWiden() argument
3554 uint8_t ored_args = OrValuesOnlyForType<Vec>(args...); in OpVectorWiden()
3557 uint8_t ored_wide_args = OrValuesOnlyForType<WideVec>(args...) | dst; in OpVectorWiden()
3569 if (OrResultsOnlyForType<Vec>([dst](auto arg) { return arg.start_no == dst; }, args...)) { in OpVectorWiden()
3587 GetLowVectorArgument<ElementType, vta, vma>(args, vstart, vl, index, mask)...)), in OpVectorWiden()
3599 GetHighVectorArgument<ElementType, vta, vma>(args, vstart, vl, index, mask)...)), in OpVectorWiden()
3631 void OpVectorSameWidth(uint8_t dst, Args... args) { in OpVectorSameWidth() argument
3634 if (!IsAligned<kRegistersInvolved>(OrValuesOnlyForType<Vec>(args...) | dst)) { in OpVectorSameWidth()
3652 GetVectorArgument<ElementType, vta, vma>(args, vstart, vl, index, mask)...)), in OpVectorSameWidth()
3731 void OpVectorNarrow(uint8_t dst, Args... args) { in OpVectorNarrow() argument
3737 uint8_t ored_args = OrValuesOnlyForType<Vec>(args...) | dst; in OpVectorNarrow()
3740 uint8_t ored_wide_args = OrValuesOnlyForType<WideVec>(args...); in OpVectorNarrow()
3751 [dst](auto arg) { return arg.start_no == dst + kRegistersInvolved; }, args...)) { in OpVectorNarrow()
3768 GetLowVectorArgument<ElementType, vta, vma>(args, vstart, vl, index, mask)...)); in OpVectorNarrow()
3772 GetHighVectorArgument<ElementType, vta, vma>(args, vstart, vl, index, mask)...)); in OpVectorNarrow()
4369 [[nodiscard]] static constexpr auto OrValuesOnlyForType(Args... args) {
4370 return OrResultsOnlyForType<ProcessType, kDefaultValue>(kLambda, args...);
4377 [[nodiscard]] static constexpr auto OrResultsOnlyForType(Lambda lambda, Args... args) { in OrResultsOnlyForType() argument
4386 }(args) | in OrResultsOnlyForType()
4392 static constexpr void ProcessOnlyForType(Lambda lambda, Args... args) { in ProcessOnlyForType() argument
4398 }(args), in ProcessOnlyForType()
4519 extern void SemanticsPlayer<Interpreter>::OpVector(const Decoder::VLoadIndexedArgs& args);
4521 extern void SemanticsPlayer<Interpreter>::OpVector(const Decoder::VLoadStrideArgs& args);
4523 extern void SemanticsPlayer<Interpreter>::OpVector(const Decoder::VLoadUnitStrideArgs& args);
4525 extern void SemanticsPlayer<Interpreter>::OpVector(const Decoder::VOpFVfArgs& args);
4527 extern void SemanticsPlayer<Interpreter>::OpVector(const Decoder::VOpFVvArgs& args);
4529 extern void SemanticsPlayer<Interpreter>::OpVector(const Decoder::VOpIViArgs& args);
4531 extern void SemanticsPlayer<Interpreter>::OpVector(const Decoder::VOpIVvArgs& args);
4533 extern void SemanticsPlayer<Interpreter>::OpVector(const Decoder::VOpIVxArgs& args);
4535 extern void SemanticsPlayer<Interpreter>::OpVector(const Decoder::VOpMVvArgs& args);
4537 extern void SemanticsPlayer<Interpreter>::OpVector(const Decoder::VOpMVxArgs& args);
4539 extern void SemanticsPlayer<Interpreter>::OpVector(const Decoder::VStoreIndexedArgs& args);
4541 extern void SemanticsPlayer<Interpreter>::OpVector(const Decoder::VStoreStrideArgs& args);
4543 extern void SemanticsPlayer<Interpreter>::OpVector(const Decoder::VStoreUnitStrideArgs& args);