Browse Source

js -> jz to enable macro-op fusion on Intel CPUs (~1% speed-up)

tevador 7 years ago
parent
commit
a09bee8d60
3 changed files with 7 additions and 7 deletions
  1. 1 1
      src/AssemblyGeneratorX86.cpp
  2. 5 5
      src/JitCompilerX86.cpp
  3. 1 1
      src/executeProgram-win64.asm

+ 1 - 1
src/AssemblyGeneratorX86.cpp

@@ -49,7 +49,7 @@ namespace RandomX {
 	void AssemblyGeneratorX86::generateCode(Instruction& instr, int i) {
 		asmCode << "rx_i_" << i << ": ;" << instr.getName() << std::endl;
 		asmCode << "\tdec edi" << std::endl;
-		asmCode << "\tjs rx_finish" << std::endl;
+		asmCode << "\tjz rx_finish" << std::endl;
 		auto generator = engine[instr.opcode];
 		(this->*generator)(instr, i);
 	}

+ 5 - 5
src/JitCompilerX86.cpp

@@ -81,10 +81,10 @@ namespace RandomX {
 
 	*/
 
-	constexpr uint8_t ic3 = (InstructionCount >> 24);
-	constexpr uint8_t ic2 = (InstructionCount >> 16);
-	constexpr uint8_t ic1 = (InstructionCount >> 8);
-	constexpr uint8_t ic0 = (InstructionCount >> 0);
+	constexpr uint8_t ic3 = ((InstructionCount + 1) >> 24);
+	constexpr uint8_t ic2 = ((InstructionCount + 1) >> 16);
+	constexpr uint8_t ic1 = ((InstructionCount + 1) >> 8);
+	constexpr uint8_t ic0 = ((InstructionCount + 1) >> 0);
 
 	const uint8_t prologue[] = {
 	   0x53,                                        //push   rbx
@@ -245,7 +245,7 @@ namespace RandomX {
 
 	void JitCompilerX86::generateCode(Instruction& instr, int i) {
 		instructionOffsets.push_back(codePos);
-		emit(0x880fcfff); //dec edx; js <epilogue>
+		emit(0x840fcfff); //dec edx; jz <epilogue>
 		emit(epilogueOffset - (codePos + 4)); //jump offset (RIP-relative)
 		gena(instr);
 		auto generator = engine[instr.opcode];

+ 1 - 1
src/executeProgram-win64.asm

@@ -84,7 +84,7 @@ executeProgram PROC
 	push r9
 
 	mov rbp, rsp			; beginning of VM stack
-	mov rdi, 1048576	; number of VM instructions to execute
+	mov rdi, 1048577	; number of VM instructions to execute + 1
 
 	; load VM register values
 	mov r8, qword ptr [rcx+0]