Lines Matching defs:rs2
168 static bool CompareB(uint64_t rs1, uint64_t rs2, uint32_t funct3) {
171 return rs1 == rs2;
173 return rs1 != rs2;
175 return int64_t(rs1) < int64_t(rs2);
177 return int64_t(rs1) >= int64_t(rs2);
179 return rs1 < rs2;
181 return rs1 >= rs2;
246 inst.rs2.Read(emulator),
247 [&](uint64_t rs2) { return emulator.WriteMem<T>(*addr, rs2); })
273 zipOpt(emulator.ReadMem<T>(*addr), inst.rs2.Read(emulator)),
275 auto [tmp, rs2] = tup;
276 return emulator.WriteMem<T>(*addr, T(rs2)) &&
290 zipOpt(emulator.ReadMem<T>(*addr), inst.rs2.Read(emulator)),
292 auto [tmp, rs2] = tup;
293 return emulator.WriteMem<T>(*addr, T(tmp + rs2)) &&
307 zipOpt(emulator.ReadMem<T>(*addr), inst.rs2.Read(emulator)),
309 auto [value, rs2] = tup;
310 return emulator.WriteMem<T>(*addr, operate(value, T(rs2))) &&
324 zipOpt(emulator.ReadMem<T>(*addr), inst.rs2.Read(emulator)),
326 auto [value, rs2] = tup;
327 return emulator.WriteMem<T>(*addr, cmp(value, T(rs2))) &&
710 inst.rs2.Read(m_emu)),
712 auto [pc, rs1, rs2] = tup;
714 CompareB(rs1, rs2, inst.funct3))
787 return transformOptional(zipOpt(inst.rs1.Read(m_emu), inst.rs2.Read(m_emu)),
789 auto [rs1, rs2] = tup;
790 return inst.rd.Write(m_emu, rs1 + rs2);
795 return transformOptional(zipOpt(inst.rs1.Read(m_emu), inst.rs2.Read(m_emu)),
797 auto [rs1, rs2] = tup;
798 return inst.rd.Write(m_emu, rs1 - rs2);
803 return transformOptional(zipOpt(inst.rs1.Read(m_emu), inst.rs2.Read(m_emu)),
805 auto [rs1, rs2] = tup;
807 rs1 << (rs2 & 0b111111));
813 zipOpt(inst.rs1.ReadI64(m_emu), inst.rs2.ReadI64(m_emu)),
815 auto [rs1, rs2] = tup;
816 return inst.rd.Write(m_emu, rs1 < rs2);
821 return transformOptional(zipOpt(inst.rs1.Read(m_emu), inst.rs2.Read(m_emu)),
823 auto [rs1, rs2] = tup;
824 return inst.rd.Write(m_emu, rs1 < rs2);
829 return transformOptional(zipOpt(inst.rs1.Read(m_emu), inst.rs2.Read(m_emu)),
831 auto [rs1, rs2] = tup;
832 return inst.rd.Write(m_emu, rs1 ^ rs2);
837 return transformOptional(zipOpt(inst.rs1.Read(m_emu), inst.rs2.Read(m_emu)),
839 auto [rs1, rs2] = tup;
841 rs1 >> (rs2 & 0b111111));
847 zipOpt(inst.rs1.ReadI64(m_emu), inst.rs2.Read(m_emu)),
849 auto [rs1, rs2] = tup;
850 return inst.rd.Write(m_emu, rs1 >> (rs2 & 0b111111));
855 return transformOptional(zipOpt(inst.rs1.Read(m_emu), inst.rs2.Read(m_emu)),
857 auto [rs1, rs2] = tup;
858 return inst.rd.Write(m_emu, rs1 | rs2);
863 return transformOptional(zipOpt(inst.rs1.Read(m_emu), inst.rs2.Read(m_emu)),
865 auto [rs1, rs2] = tup;
866 return inst.rd.Write(m_emu, rs1 & rs2);
931 return transformOptional(zipOpt(inst.rs1.Read(m_emu), inst.rs2.Read(m_emu)),
933 auto [rs1, rs2] = tup;
935 SextW(uint32_t(rs1 + rs2)));
940 return transformOptional(zipOpt(inst.rs1.Read(m_emu), inst.rs2.Read(m_emu)),
942 auto [rs1, rs2] = tup;
944 SextW(uint32_t(rs1 - rs2)));
950 zipOpt(inst.rs1.ReadU32(m_emu), inst.rs2.ReadU32(m_emu)),
952 auto [rs1, rs2] = tup;
953 return inst.rd.Write(m_emu, SextW(rs1 << (rs2 & 0b11111)));
959 zipOpt(inst.rs1.ReadU32(m_emu), inst.rs2.ReadU32(m_emu)),
961 auto [rs1, rs2] = tup;
962 return inst.rd.Write(m_emu, SextW(rs1 >> (rs2 & 0b11111)));
968 zipOpt(inst.rs1.ReadI32(m_emu), inst.rs2.Read(m_emu)),
970 auto [rs1, rs2] = tup;
971 return inst.rd.Write(m_emu, SextW(rs1 >> (rs2 & 0b11111)));
977 return transformOptional(zipOpt(inst.rs1.Read(m_emu), inst.rs2.Read(m_emu)),
979 auto [rs1, rs2] = tup;
980 return inst.rd.Write(m_emu, rs1 * rs2);
986 zipOpt(inst.rs1.Read(m_emu), inst.rs2.Read(m_emu)),
988 auto [rs1, rs2] = tup;
990 auto mul = APInt(128, rs1, true) * APInt(128, rs2, true);
998 zipOpt(inst.rs1.Read(m_emu), inst.rs2.Read(m_emu)),
1000 auto [rs1, rs2] = tup;
1003 APInt(128, rs1, true).zext(128) * APInt(128, rs2, false);
1011 zipOpt(inst.rs1.Read(m_emu), inst.rs2.Read(m_emu)),
1013 auto [rs1, rs2] = tup;
1015 auto mul = APInt(128, rs1, false) * APInt(128, rs2, false);
1023 zipOpt(inst.rs1.ReadI64(m_emu), inst.rs2.ReadI64(m_emu)),
1038 return transformOptional(zipOpt(inst.rs1.Read(m_emu), inst.rs2.Read(m_emu)),
1051 zipOpt(inst.rs1.ReadI64(m_emu), inst.rs2.ReadI64(m_emu)),
1066 return transformOptional(zipOpt(inst.rs1.Read(m_emu), inst.rs2.Read(m_emu)),
1079 zipOpt(inst.rs1.ReadI32(m_emu), inst.rs2.ReadI32(m_emu)),
1081 auto [rs1, rs2] = tup;
1082 return inst.rd.Write(m_emu, SextW(rs1 * rs2));
1088 zipOpt(inst.rs1.ReadI32(m_emu), inst.rs2.ReadI32(m_emu)),
1104 zipOpt(inst.rs1.ReadU32(m_emu), inst.rs2.ReadU32(m_emu)),
1117 zipOpt(inst.rs1.ReadI32(m_emu), inst.rs2.ReadI32(m_emu)),
1133 zipOpt(inst.rs1.ReadU32(m_emu), inst.rs2.ReadU32(m_emu)),
1248 inst.rs2.ReadAPFloat(m_emu, isDouble)),
1250 auto [rs1, rs2] = tup;
1253 rs2.bitcastToAPInt().getZExtValue();
1259 std::tuple<bool, APFloat> FusedMultiplyAdd(APFloat rs1, APFloat rs2,
1261 auto opStatus = rs1.fusedMultiplyAdd(rs2, rs3, m_emu.GetRoundingMode());
1268 inst.rs2.ReadAPFloat(m_emu, isDouble),
1271 auto [rs1, rs2, rs3] = tup;
1272 rs2.copySign(APFloat(rs2_sign));
1274 auto [res, f] = FusedMultiplyAdd(rs1, rs2, rs3);
1288 inst.rs2.ReadAPFloat(m_emu, isDouble)),
1290 auto [rs1, rs2] = tup;
1292 ((&rs1)->*f)(rs2, m_emu.GetRoundingMode());
1308 inst.rs2.ReadAPFloat(m_emu, isDouble)),
1310 auto [rs1, rs2] = tup;
1312 rs2.changeSign();
1313 rs1.copySign(rs2);
1322 inst.rs2.ReadAPFloat(m_emu, isDouble)),
1324 auto [rs1, rs2] = tup;
1326 // of rs1 and rs2. if rs1 and rs2 have the same
1329 if (rs1.isNegative() == rs2.isNegative()) {
1345 inst.rs2.ReadAPFloat(m_emu, isDouble)),
1347 auto [rs1, rs2] = tup;
1352 if (rs1.isNaN() || rs2.isNaN())
1354 if (rs1.isNaN() && rs2.isNaN()) {
1358 return inst.rd.WriteAPFloat(m_emu, f(rs1, rs2));
1399 inst.rs2.ReadAPFloat(m_emu, isDouble)),
1401 auto [rs1, rs2] = tup;
1402 if (rs1.isNaN() || rs2.isNaN()) {
1404 if (rs1.isSignaling() || rs2.isSignaling()) {
1416 rs1.compare(rs2) == APFloat::cmpEqual);
1418 return inst.rd.Write(m_emu, rs1.compare(rs2) ==
1421 return inst.rd.Write(m_emu, rs1.compare(rs2) !=