Răsfoiți Sursa

Fixed an inconsistency in IADD_RS in SuperscalarHash

tevador 7 ani în urmă
părinte
comite
01db567e9d

+ 2 - 2
src/assembly_generator_x86.cpp

@@ -72,7 +72,7 @@ namespace randomx {
 				asmCode << "xor " << regR[instr.dst] << ", " << regR[instr.src] << std::endl;
 				break;
 			case SuperscalarInstructionType::IADD_RS:
-				asmCode << "lea " << regR[instr.dst] << ", [" << regR[instr.dst] << "+" << regR[instr.src] << "*" << (1 << (instr.getModMem())) << "]" << std::endl;
+				asmCode << "lea " << regR[instr.dst] << ", [" << regR[instr.dst] << "+" << regR[instr.src] << "*" << (1 << (instr.getModShift())) << "]" << std::endl;
 				break;
 			case SuperscalarInstructionType::IMUL_R:
 				asmCode << "imul " << regR[instr.dst] << ", " << regR[instr.src] << std::endl;
@@ -181,7 +181,7 @@ namespace randomx {
 				asmCode << regR[instr.dst] << " ^= " << regR[instr.src] << ";" << std::endl;
 				break;
 			case SuperscalarInstructionType::IADD_RS:
-				asmCode << regR[instr.dst] << " += " << regR[instr.src] << "*" << (1 << (instr.getModMem())) << ";" << std::endl;
+				asmCode << regR[instr.dst] << " += " << regR[instr.src] << "*" << (1 << (instr.getModShift())) << ";" << std::endl;
 				break;
 			case SuperscalarInstructionType::IMUL_R:
 				asmCode << regR[instr.dst] << " *= " << regR[instr.src] << ";" << std::endl;

+ 1 - 1
src/jit_compiler_x86.cpp

@@ -352,7 +352,7 @@ namespace randomx {
 		case randomx::SuperscalarInstructionType::IADD_RS:
 			emit(REX_LEA);
 			emitByte(0x04 + 8 * instr.dst);
-			genSIB(instr.getModMem(), instr.src, instr.dst);
+			genSIB(instr.getModShift(), instr.src, instr.dst);
 			break;
 		case randomx::SuperscalarInstructionType::IMUL_R:
 			emit(REX_IMUL_RR);

+ 1 - 1
src/superscalar.cpp

@@ -849,7 +849,7 @@ namespace randomx {
 				r[instr.dst] ^= r[instr.src];
 				break;
 			case randomx::SuperscalarInstructionType::IADD_RS:
-				r[instr.dst] += r[instr.src] << instr.getModMem();
+				r[instr.dst] += r[instr.src] << instr.getModShift();
 				break;
 			case randomx::SuperscalarInstructionType::IMUL_R:
 				r[instr.dst] *= r[instr.src];

+ 1 - 1
src/tests/benchmark.cpp

@@ -229,7 +229,7 @@ int main(int argc, char** argv) {
 		std::cout << "Calculated result: ";
 		result.print(std::cout);
 		if (noncesCount == 1000 && seedValue == 0)
-			std::cout << "Reference result:  6d95d8d07fa3a80771f33d1b20452b61ab2d0bf21058b5e586fad38bf3e1e0ca" << std::endl;
+			std::cout << "Reference result:  a15448785857f9a78703eb5da235dfe73d0d5fc4c8effaebe73869904f5af47d" << std::endl;
 		if (!miningMode) {
 			std::cout << "Performance: " << 1000 * elapsed / noncesCount << " ms per hash" << std::endl;
 		}