Просмотр исходного кода

Fixed alignment of VirtualMachine

tevador 7 лет назад
Родитель
Сommit
954365634e
2 измененных файлов с 12 добавлено и 2 удалено
  1. 10 0
      src/InterpretedVirtualMachine.hpp
  2. 2 2
      src/VirtualMachine.hpp

+ 10 - 0
src/InterpretedVirtualMachine.hpp

@@ -19,6 +19,7 @@ along with RandomX.  If not, see<http://www.gnu.org/licenses/>.
 
 #pragma once
 //#define STATS
+#include <new>
 #include "VirtualMachine.hpp"
 #include "Program.hpp"
 #include "intrinPortable.h"
@@ -60,6 +61,15 @@ namespace RandomX {
 
 	class InterpretedVirtualMachine : public VirtualMachine {
 	public:
+		void* operator new(size_t size) {
+			void* ptr = _mm_malloc(size, 64);
+			if (ptr == nullptr)
+				throw std::bad_alloc();
+			return ptr;
+		}
+		void operator delete(void* ptr) {
+			_mm_free(ptr);
+		}
 		InterpretedVirtualMachine(bool soft, bool async) : softAes(soft), asyncWorker(async) {}
 		~InterpretedVirtualMachine();
 		void setDataset(dataset_t ds) override;

+ 2 - 2
src/VirtualMachine.hpp

@@ -46,8 +46,8 @@ namespace RandomX {
 			return &program;
 		}
 	protected:
-		alignas(16) Program program;
-		alignas(16) RegisterFile reg;
+		alignas(64) Program program;
+		alignas(64) RegisterFile reg;
 		MemoryRegisters mem;
 		uint8_t* scratchpad;
 		uint32_t readReg0, readReg1, readReg2, readReg3;