mirror of
				https://git.wownero.com/wownero/RandomWOW.git
				synced 2024-08-15 00:23:14 +00:00 
			
		
		
		
	randomx project changed to a static library
separate benchmark project API usage examples
This commit is contained in:
		
							parent
							
								
									d7eefce583
								
							
						
					
					
						commit
						41557ce010
					
				
					 29 changed files with 979 additions and 15048 deletions
				
			
		
							
								
								
									
										44
									
								
								randomx.sln
									
										
									
									
									
								
							
							
						
						
									
										44
									
								
								randomx.sln
									
										
									
									
									
								
							|  | @ -13,6 +13,14 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "superscalar-init", "vcxproj | ||||||
| EndProject | EndProject | ||||||
| Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "superscalar-stats", "vcxproj\superscalar-stats.vcxproj", "{0173D560-8C12-46B3-B467-0C6E7573AA0B}" | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "superscalar-stats", "vcxproj\superscalar-stats.vcxproj", "{0173D560-8C12-46B3-B467-0C6E7573AA0B}" | ||||||
| EndProject | EndProject | ||||||
|  | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "benchmark", "vcxproj\benchmark.vcxproj", "{1E8A2E2F-9F9F-43AA-BB19-9107FEC64A70}" | ||||||
|  | EndProject | ||||||
|  | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "api-example1", "vcxproj\api-example1.vcxproj", "{83EA3E54-5D91-4E01-8EF6-C1E718334F83}" | ||||||
|  | EndProject | ||||||
|  | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "api-example2", "vcxproj\api-example2.vcxproj", "{44947B9C-E6B1-4C06-BD01-F8EF43B59223}" | ||||||
|  | EndProject | ||||||
|  | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "code-generator", "vcxproj\code-generator.vcxproj", "{3E490DEC-1874-43AA-92DA-1AC57C217EAC}" | ||||||
|  | EndProject | ||||||
| Global | Global | ||||||
| 	GlobalSection(SolutionConfigurationPlatforms) = preSolution | 	GlobalSection(SolutionConfigurationPlatforms) = preSolution | ||||||
| 		Debug|x64 = Debug|x64 | 		Debug|x64 = Debug|x64 | ||||||
|  | @ -53,6 +61,38 @@ Global | ||||||
| 		{0173D560-8C12-46B3-B467-0C6E7573AA0B}.Release|x64.Build.0 = Release|x64 | 		{0173D560-8C12-46B3-B467-0C6E7573AA0B}.Release|x64.Build.0 = Release|x64 | ||||||
| 		{0173D560-8C12-46B3-B467-0C6E7573AA0B}.Release|x86.ActiveCfg = Release|Win32 | 		{0173D560-8C12-46B3-B467-0C6E7573AA0B}.Release|x86.ActiveCfg = Release|Win32 | ||||||
| 		{0173D560-8C12-46B3-B467-0C6E7573AA0B}.Release|x86.Build.0 = Release|Win32 | 		{0173D560-8C12-46B3-B467-0C6E7573AA0B}.Release|x86.Build.0 = Release|Win32 | ||||||
|  | 		{1E8A2E2F-9F9F-43AA-BB19-9107FEC64A70}.Debug|x64.ActiveCfg = Debug|x64 | ||||||
|  | 		{1E8A2E2F-9F9F-43AA-BB19-9107FEC64A70}.Debug|x64.Build.0 = Debug|x64 | ||||||
|  | 		{1E8A2E2F-9F9F-43AA-BB19-9107FEC64A70}.Debug|x86.ActiveCfg = Debug|Win32 | ||||||
|  | 		{1E8A2E2F-9F9F-43AA-BB19-9107FEC64A70}.Debug|x86.Build.0 = Debug|Win32 | ||||||
|  | 		{1E8A2E2F-9F9F-43AA-BB19-9107FEC64A70}.Release|x64.ActiveCfg = Release|x64 | ||||||
|  | 		{1E8A2E2F-9F9F-43AA-BB19-9107FEC64A70}.Release|x64.Build.0 = Release|x64 | ||||||
|  | 		{1E8A2E2F-9F9F-43AA-BB19-9107FEC64A70}.Release|x86.ActiveCfg = Release|Win32 | ||||||
|  | 		{1E8A2E2F-9F9F-43AA-BB19-9107FEC64A70}.Release|x86.Build.0 = Release|Win32 | ||||||
|  | 		{83EA3E54-5D91-4E01-8EF6-C1E718334F83}.Debug|x64.ActiveCfg = Debug|x64 | ||||||
|  | 		{83EA3E54-5D91-4E01-8EF6-C1E718334F83}.Debug|x64.Build.0 = Debug|x64 | ||||||
|  | 		{83EA3E54-5D91-4E01-8EF6-C1E718334F83}.Debug|x86.ActiveCfg = Debug|Win32 | ||||||
|  | 		{83EA3E54-5D91-4E01-8EF6-C1E718334F83}.Debug|x86.Build.0 = Debug|Win32 | ||||||
|  | 		{83EA3E54-5D91-4E01-8EF6-C1E718334F83}.Release|x64.ActiveCfg = Release|x64 | ||||||
|  | 		{83EA3E54-5D91-4E01-8EF6-C1E718334F83}.Release|x64.Build.0 = Release|x64 | ||||||
|  | 		{83EA3E54-5D91-4E01-8EF6-C1E718334F83}.Release|x86.ActiveCfg = Release|Win32 | ||||||
|  | 		{83EA3E54-5D91-4E01-8EF6-C1E718334F83}.Release|x86.Build.0 = Release|Win32 | ||||||
|  | 		{44947B9C-E6B1-4C06-BD01-F8EF43B59223}.Debug|x64.ActiveCfg = Debug|x64 | ||||||
|  | 		{44947B9C-E6B1-4C06-BD01-F8EF43B59223}.Debug|x64.Build.0 = Debug|x64 | ||||||
|  | 		{44947B9C-E6B1-4C06-BD01-F8EF43B59223}.Debug|x86.ActiveCfg = Debug|Win32 | ||||||
|  | 		{44947B9C-E6B1-4C06-BD01-F8EF43B59223}.Debug|x86.Build.0 = Debug|Win32 | ||||||
|  | 		{44947B9C-E6B1-4C06-BD01-F8EF43B59223}.Release|x64.ActiveCfg = Release|x64 | ||||||
|  | 		{44947B9C-E6B1-4C06-BD01-F8EF43B59223}.Release|x64.Build.0 = Release|x64 | ||||||
|  | 		{44947B9C-E6B1-4C06-BD01-F8EF43B59223}.Release|x86.ActiveCfg = Release|Win32 | ||||||
|  | 		{44947B9C-E6B1-4C06-BD01-F8EF43B59223}.Release|x86.Build.0 = Release|Win32 | ||||||
|  | 		{3E490DEC-1874-43AA-92DA-1AC57C217EAC}.Debug|x64.ActiveCfg = Debug|x64 | ||||||
|  | 		{3E490DEC-1874-43AA-92DA-1AC57C217EAC}.Debug|x64.Build.0 = Debug|x64 | ||||||
|  | 		{3E490DEC-1874-43AA-92DA-1AC57C217EAC}.Debug|x86.ActiveCfg = Debug|Win32 | ||||||
|  | 		{3E490DEC-1874-43AA-92DA-1AC57C217EAC}.Debug|x86.Build.0 = Debug|Win32 | ||||||
|  | 		{3E490DEC-1874-43AA-92DA-1AC57C217EAC}.Release|x64.ActiveCfg = Release|x64 | ||||||
|  | 		{3E490DEC-1874-43AA-92DA-1AC57C217EAC}.Release|x64.Build.0 = Release|x64 | ||||||
|  | 		{3E490DEC-1874-43AA-92DA-1AC57C217EAC}.Release|x86.ActiveCfg = Release|Win32 | ||||||
|  | 		{3E490DEC-1874-43AA-92DA-1AC57C217EAC}.Release|x86.Build.0 = Release|Win32 | ||||||
| 	EndGlobalSection | 	EndGlobalSection | ||||||
| 	GlobalSection(SolutionProperties) = preSolution | 	GlobalSection(SolutionProperties) = preSolution | ||||||
| 		HideSolutionNode = FALSE | 		HideSolutionNode = FALSE | ||||||
|  | @ -61,6 +101,10 @@ Global | ||||||
| 		{CF34A7EF-7DC9-4077-94A5-76F5425EA938} = {4A4A689F-86AF-41C0-A974-1080506D0923} | 		{CF34A7EF-7DC9-4077-94A5-76F5425EA938} = {4A4A689F-86AF-41C0-A974-1080506D0923} | ||||||
| 		{E59DC709-9B12-4A53-BAF3-79398821C376} = {4A4A689F-86AF-41C0-A974-1080506D0923} | 		{E59DC709-9B12-4A53-BAF3-79398821C376} = {4A4A689F-86AF-41C0-A974-1080506D0923} | ||||||
| 		{0173D560-8C12-46B3-B467-0C6E7573AA0B} = {4A4A689F-86AF-41C0-A974-1080506D0923} | 		{0173D560-8C12-46B3-B467-0C6E7573AA0B} = {4A4A689F-86AF-41C0-A974-1080506D0923} | ||||||
|  | 		{1E8A2E2F-9F9F-43AA-BB19-9107FEC64A70} = {4A4A689F-86AF-41C0-A974-1080506D0923} | ||||||
|  | 		{83EA3E54-5D91-4E01-8EF6-C1E718334F83} = {4A4A689F-86AF-41C0-A974-1080506D0923} | ||||||
|  | 		{44947B9C-E6B1-4C06-BD01-F8EF43B59223} = {4A4A689F-86AF-41C0-A974-1080506D0923} | ||||||
|  | 		{3E490DEC-1874-43AA-92DA-1AC57C217EAC} = {4A4A689F-86AF-41C0-A974-1080506D0923} | ||||||
| 	EndGlobalSection | 	EndGlobalSection | ||||||
| 	GlobalSection(ExtensibilityGlobals) = postSolution | 	GlobalSection(ExtensibilityGlobals) = postSolution | ||||||
| 		SolutionGuid = {4EBC03DB-AE37-4141-8147-692F16E0ED02} | 		SolutionGuid = {4EBC03DB-AE37-4141-8147-692F16E0ED02} | ||||||
|  |  | ||||||
|  | @ -1,401 +0,0 @@ | ||||||
| /*
 |  | ||||||
| Copyright (c) 2018 tevador |  | ||||||
| 
 |  | ||||||
| This file is part of RandomX. |  | ||||||
| 
 |  | ||||||
| RandomX is free software: you can redistribute it and/or modify |  | ||||||
| it under the terms of the GNU General Public License as published by |  | ||||||
| the Free Software Foundation, either version 3 of the License, or |  | ||||||
| (at your option) any later version. |  | ||||||
| 
 |  | ||||||
| RandomX is distributed in the hope that it will be useful, |  | ||||||
| but WITHOUT ANY WARRANTY; without even the implied warranty of |  | ||||||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |  | ||||||
| GNU General Public License for more details. |  | ||||||
| 
 |  | ||||||
| You should have received a copy of the GNU General Public License |  | ||||||
| along with RandomX.  If not, see<http://www.gnu.org/licenses/>.
 |  | ||||||
| */ |  | ||||||
| 
 |  | ||||||
| #include <iostream> |  | ||||||
| #include <iomanip> |  | ||||||
| #include <limits> |  | ||||||
| #include "instructions.hpp" |  | ||||||
| //#define DEBUG
 |  | ||||||
| 
 |  | ||||||
| using namespace RandomX; |  | ||||||
| 
 |  | ||||||
| typedef void(*FpuOperation)(convertible_t&, fpu_reg_t&, fpu_reg_t&); |  | ||||||
| 
 |  | ||||||
| #define CATCH_CONFIG_MAIN |  | ||||||
| #include "catch.hpp" |  | ||||||
| 
 |  | ||||||
| uint64_t rxRound(uint32_t mode, int64_t x, int64_t y, FpuOperation op, bool hiEqualsLo = true) { |  | ||||||
| 	convertible_t a; |  | ||||||
| 	fpu_reg_t b, c; |  | ||||||
| 	a.u64 = mode; |  | ||||||
| 	FPROUND(a, b, c); |  | ||||||
| 	if (hiEqualsLo) { |  | ||||||
| 		a.i32lo = x; |  | ||||||
| 		a.i32hi = x; |  | ||||||
| 	} |  | ||||||
| 	else { |  | ||||||
| 		a.i64 = x; |  | ||||||
| 	} |  | ||||||
| 	b.lo.i64 = y; |  | ||||||
| 	b.hi.i64 = y; |  | ||||||
| 	op(a, b, c); |  | ||||||
| 	if (hiEqualsLo) { |  | ||||||
| 		CHECK(c.lo.u64 == c.hi.u64); |  | ||||||
| 	} |  | ||||||
| 	return c.lo.u64; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| #define RX_EXECUTE_U64(va, vb, INST) do { \ |  | ||||||
| 	a.u64 = va; \ |  | ||||||
| 	b.u64 = vb; \ |  | ||||||
| 	INST(a, b, c); \ |  | ||||||
| 	} while(false) |  | ||||||
| 
 |  | ||||||
| #define RX_EXECUTE_I64(va, vb, INST) do { \ |  | ||||||
| 	a.i64 = va; \ |  | ||||||
| 	b.i64 = vb; \ |  | ||||||
| 	INST(a, b, c); \ |  | ||||||
| 	} while(false) |  | ||||||
| 
 |  | ||||||
| TEST_CASE("Integer addition (64-bit)", "[ADD_64]") { |  | ||||||
| 	convertible_t a, b, c; |  | ||||||
| 
 |  | ||||||
| 	RX_EXECUTE_U64(0xFFFFFFFF, 0x1, ADD_64); |  | ||||||
| 	CHECK(c.u64 == 0x100000000); |  | ||||||
| 
 |  | ||||||
| 	RX_EXECUTE_U64(0x8000000000000000, 0x8000000000000000, ADD_64); |  | ||||||
| 	CHECK(c.u64 == 0x0); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| TEST_CASE("Integer addition (32-bit)", "[ADD_32]") { |  | ||||||
| 	convertible_t a, b, c; |  | ||||||
| 
 |  | ||||||
| 	RX_EXECUTE_U64(0xFFFFFFFF, 0x1, ADD_32); |  | ||||||
| 	CHECK(c.u64 == 0); |  | ||||||
| 
 |  | ||||||
| 	RX_EXECUTE_U64(0xFF00000000000001, 0x0000000100000001, ADD_32); |  | ||||||
| 	CHECK(c.u64 == 2); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| TEST_CASE("Integer subtraction (64-bit)", "[SUB_64]") { |  | ||||||
| 	convertible_t a, b, c; |  | ||||||
| 
 |  | ||||||
| 	RX_EXECUTE_U64(1, 0xFFFFFFFF, SUB_64); |  | ||||||
| 	CHECK(c.u64 == 0xFFFFFFFF00000002); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| TEST_CASE("Integer subtraction (32-bit)", "[SUB_32]") { |  | ||||||
| 	convertible_t a, b, c; |  | ||||||
| 
 |  | ||||||
| 	RX_EXECUTE_U64(1, 0xFFFFFFFF, SUB_32); |  | ||||||
| 	CHECK(c.u64 == 2); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| TEST_CASE("Unsigned multiplication (64-bit, low half)", "[MUL_64]") { |  | ||||||
| 	convertible_t a, b, c; |  | ||||||
| 
 |  | ||||||
| 	RX_EXECUTE_U64(0xBC550E96BA88A72B, 0xF5391FA9F18D6273, MUL_64); |  | ||||||
| 	CHECK(c.u64 == 0x28723424A9108E51); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| TEST_CASE("Unsigned multiplication (64-bit, high half)", "[MULH_64]") { |  | ||||||
| 	convertible_t a, b, c; |  | ||||||
| 
 |  | ||||||
| 	RX_EXECUTE_U64(0xBC550E96BA88A72B, 0xF5391FA9F18D6273, MULH_64); |  | ||||||
| 	CHECK(c.u64 == 0xB4676D31D2B34883); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| TEST_CASE("Unsigned multiplication (32-bit x 32-bit -> 64-bit)", "[MUL_32]") { |  | ||||||
| 	convertible_t a, b, c; |  | ||||||
| 
 |  | ||||||
| 	RX_EXECUTE_U64(0xBC550E96BA88A72B, 0xF5391FA9F18D6273, MUL_32); |  | ||||||
| 	CHECK(c.u64 == 0xB001AA5FA9108E51); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| TEST_CASE("Signed multiplication (32-bit x 32-bit -> 64-bit)", "[IMUL_32]") { |  | ||||||
| 	convertible_t a, b, c; |  | ||||||
| 
 |  | ||||||
| 	RX_EXECUTE_U64(0xBC550E96BA88A72B, 0xF5391FA9F18D6273, IMUL_32); |  | ||||||
| 	CHECK(c.u64 == 0x03EBA0C1A9108E51); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| TEST_CASE("Signed multiplication (64-bit, high half)", "[IMULH_64]") { |  | ||||||
| 	convertible_t a, b, c; |  | ||||||
| 
 |  | ||||||
| 	RX_EXECUTE_U64(0xBC550E96BA88A72B, 0xF5391FA9F18D6273, IMULH_64); |  | ||||||
| 	CHECK(c.u64 == 0x02D93EF1269D3EE5); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| TEST_CASE("Unsigned division (64-bit / 32-bit -> 32-bit)", "[DIV_64]") { |  | ||||||
| 	convertible_t a, b, c; |  | ||||||
| 
 |  | ||||||
| 	RX_EXECUTE_U64(8774217225983458895, 3014068202, DIV_64); |  | ||||||
| 	CHECK(c.u64 == 2911087818); |  | ||||||
| 
 |  | ||||||
| 	RX_EXECUTE_U64(8774217225983458895, 0, DIV_64); |  | ||||||
| 	CHECK(c.u64 == 8774217225983458895); |  | ||||||
| 
 |  | ||||||
| 	RX_EXECUTE_U64(3014068202, 8774217225983458895, DIV_64); |  | ||||||
| 	CHECK(c.u64 == 2); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| TEST_CASE("Signed division (64-bit / 32-bit -> 32-bit)", "[IDIV_64]") { |  | ||||||
| 	convertible_t a, b, c; |  | ||||||
| 
 |  | ||||||
| 	RX_EXECUTE_U64(8774217225983458895, 3014068202, IDIV_64); |  | ||||||
| 	CHECK(c.u64 == 0xFFFFFFFE67B4994E); |  | ||||||
| 
 |  | ||||||
| 	RX_EXECUTE_U64(5, 0xFFFFFFFFFFFFFFFF, IDIV_64); |  | ||||||
| 	CHECK(c.u64 == 0xFFFFFFFFFFFFFFFB); |  | ||||||
| 
 |  | ||||||
| 	RX_EXECUTE_U64(8774217225983458895, 0, IDIV_64); |  | ||||||
| 	CHECK(c.u64 == 8774217225983458895); |  | ||||||
| 
 |  | ||||||
| 	RX_EXECUTE_U64(0x8000000000000000, 0xFFFFFFFFFFFFFFFF, IDIV_64); |  | ||||||
| 	CHECK(c.u64 == 0x8000000000000000); |  | ||||||
| 
 |  | ||||||
| 	RX_EXECUTE_U64(0x8000000000000000, 0x93D1FFFFFFFFFFFF, IDIV_64); |  | ||||||
| 	CHECK(c.u64 == 0x8000000000000000); |  | ||||||
| 
 |  | ||||||
| 	RX_EXECUTE_U64(0xFFFFFFFFB3A707EA, 8774217225983458895, IDIV_64); |  | ||||||
| 	CHECK(c.u64 == 0xFFFFFFFFFFFFFFFF); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| TEST_CASE("Bitwise AND (64-bit)", "[AND_64]") { |  | ||||||
| 	convertible_t a, b, c; |  | ||||||
| 
 |  | ||||||
| 	RX_EXECUTE_U64(0xCCCCCCCCCCCCCCCC, 0xAAAAAAAAAAAAAAAA, AND_64); |  | ||||||
| 	CHECK(c.u64 == 0x8888888888888888); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| TEST_CASE("Bitwise AND (32-bit)", "[AND_32]") { |  | ||||||
| 	convertible_t a, b, c; |  | ||||||
| 
 |  | ||||||
| 	RX_EXECUTE_U64(0xCCCCCCCCCCCCCCCC, 0xAAAAAAAAAAAAAAAA, AND_32); |  | ||||||
| 	CHECK(c.u64 == 0x88888888); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| TEST_CASE("Bitwise OR (64-bit)", "[OR_64]") { |  | ||||||
| 	convertible_t a, b, c; |  | ||||||
| 
 |  | ||||||
| 	RX_EXECUTE_U64(0x4444444444444444, 0xAAAAAAAAAAAAAAAA, OR_64); |  | ||||||
| 	CHECK(c.u64 == 0xEEEEEEEEEEEEEEEE); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| TEST_CASE("Bitwise OR (32-bit)", "[OR_32]") { |  | ||||||
| 	convertible_t a, b, c; |  | ||||||
| 
 |  | ||||||
| 	RX_EXECUTE_U64(0x4444444444444444, 0xAAAAAAAAAAAAAAAA, OR_32); |  | ||||||
| 	CHECK(c.u64 == 0xEEEEEEEE); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| TEST_CASE("Bitwise XOR (64-bit)", "[XOR_64]") { |  | ||||||
| 	convertible_t a, b, c; |  | ||||||
| 
 |  | ||||||
| 	RX_EXECUTE_U64(0x8888888888888888, 0xAAAAAAAAAAAAAAAA, XOR_64); |  | ||||||
| 	CHECK(c.u64 == 0x2222222222222222); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| TEST_CASE("Bitwise XOR (32-bit)", "[XOR_32]") { |  | ||||||
| 	convertible_t a, b, c; |  | ||||||
| 
 |  | ||||||
| 	RX_EXECUTE_U64(0x8888888888888888, 0xAAAAAAAAAAAAAAAA, XOR_32); |  | ||||||
| 	CHECK(c.u64 == 0x22222222); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| TEST_CASE("Logical left shift (64-bit)", "[SHL_64]") { |  | ||||||
| 	convertible_t a, b, c; |  | ||||||
| 
 |  | ||||||
| 	RX_EXECUTE_U64(0x3, 52, SHL_64); |  | ||||||
| 	CHECK(c.u64 == 0x30000000000000); |  | ||||||
| 
 |  | ||||||
| 	RX_EXECUTE_U64(953360005391419562, 4569451684712230561, SHL_64); |  | ||||||
| 	CHECK(c.u64 == 6978065200108797952); |  | ||||||
| 
 |  | ||||||
| 	RX_EXECUTE_U64(0x8000000000000000, 1, SHL_64); |  | ||||||
| 	CHECK(c.u64 == 0); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| TEST_CASE("Logical right shift (64-bit)", "[SHR_64]") { |  | ||||||
| 	convertible_t a, b, c; |  | ||||||
| 
 |  | ||||||
| 	RX_EXECUTE_U64(0x3, 52, SHR_64); |  | ||||||
| 	CHECK(c.u64 == 0); |  | ||||||
| 
 |  | ||||||
| 	RX_EXECUTE_U64(953360005391419562, 4569451684712230561, SHR_64); |  | ||||||
| 	CHECK(c.u64 == 110985711); |  | ||||||
| 
 |  | ||||||
| 	RX_EXECUTE_U64(0x8000000000000000, 1, SHR_64); |  | ||||||
| 	CHECK(c.u64 == 0x4000000000000000); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| TEST_CASE("Arithmetic right shift (64-bit)", "[SAR_64]") { |  | ||||||
| 	convertible_t a, b, c; |  | ||||||
| 
 |  | ||||||
| 	RX_EXECUTE_I64(-9, 2, SAR_64); |  | ||||||
| 	CHECK(c.i64 == -3); |  | ||||||
| 
 |  | ||||||
| 	RX_EXECUTE_I64(INT64_MIN, 63, SAR_64); |  | ||||||
| 	CHECK(c.i64 == -1); |  | ||||||
| 
 |  | ||||||
| 	RX_EXECUTE_I64(INT64_MAX, 163768499474606398, SAR_64); |  | ||||||
| 	CHECK(c.i64 == 1); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| TEST_CASE("Circular left shift (64-bit)", "[ROL_64]") { |  | ||||||
| 	convertible_t a, b, c; |  | ||||||
| 
 |  | ||||||
| 	RX_EXECUTE_U64(0x3, 52, ROL_64); |  | ||||||
| 	CHECK(c.u64 == 0x30000000000000); |  | ||||||
| 
 |  | ||||||
| 	RX_EXECUTE_U64(953360005391419562, 4569451684712230561, ROL_64); |  | ||||||
| 	CHECK(c.u64 == 6978065200552740799); |  | ||||||
| 
 |  | ||||||
| 	RX_EXECUTE_U64(0x8000000000000000, 1, ROL_64); |  | ||||||
| 	CHECK(c.u64 == 1); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| TEST_CASE("Circular right shift (64-bit)", "[ROR_64]") { |  | ||||||
| 	convertible_t a, b, c; |  | ||||||
| 
 |  | ||||||
| 	RX_EXECUTE_U64(0x3, 52, ROR_64); |  | ||||||
| 	CHECK(c.u64 == 12288); |  | ||||||
| 
 |  | ||||||
| 	RX_EXECUTE_U64(953360005391419562, 4569451684712230561, ROR_64); |  | ||||||
| 	CHECK(c.u64 == 0xD835C455069D81EF); |  | ||||||
| 
 |  | ||||||
| 	RX_EXECUTE_U64(0x8000000000000000, 1, ROR_64); |  | ||||||
| 	CHECK(c.u64 == 0x4000000000000000); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| TEST_CASE("Denormal results are not produced", "[FTZ]") { |  | ||||||
| 	FPINIT(); |  | ||||||
| 	convertible_t a; |  | ||||||
| 	fpu_reg_t b; |  | ||||||
| 	a.i64 = 1; |  | ||||||
| 	b.lo.f64 = DBL_MAX; |  | ||||||
| 	FPDIV(a, b, b); |  | ||||||
| #ifdef DEBUG |  | ||||||
| 	std::cout << a.i64 << " / " << DBL_MAX << " = " << std::hex << b.lo.u64 << std::endl; |  | ||||||
| #endif |  | ||||||
| 	CHECK(std::fpclassify(b.lo.f64) != FP_SUBNORMAL); |  | ||||||
| 	a.i64 = 0; |  | ||||||
| 	FPSUB(a, b, b); |  | ||||||
| #ifdef DEBUG |  | ||||||
| 	std::cout << a.i64 << " - " << b.lo.f64 << " = " << std::hex << b.lo.u64 << std::endl; |  | ||||||
| #endif |  | ||||||
| 	CHECK(std::fpclassify(b.lo.f64) != FP_SUBNORMAL); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| TEST_CASE("NaN results are not produced", "[NAN]") { |  | ||||||
| 	FPINIT(); |  | ||||||
| 	convertible_t a; |  | ||||||
| 	fpu_reg_t b; |  | ||||||
| 	a.i64 = 0; |  | ||||||
| 	b.lo.f64 = 0; |  | ||||||
| 	FPDIV(a, b, b); |  | ||||||
| 	CHECK(std::fpclassify(b.lo.f64) != FP_NAN); |  | ||||||
| 	b.lo.f64 = std::numeric_limits<double>::infinity(); |  | ||||||
| 	FPMUL(a, b, b); |  | ||||||
| 	CHECK(std::fpclassify(b.lo.f64) != FP_NAN); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| volatile int64_t fpRounda = 7379480244170225589; |  | ||||||
| volatile int32_t fpAdda = -2110701072; |  | ||||||
| volatile int64_t fpAddb = 5822431907862180274; |  | ||||||
| volatile int32_t fpSuba = -1651770302; |  | ||||||
| volatile int64_t fpSubb = 4982086006202596504; |  | ||||||
| volatile int32_t fpMula1 = 122885310; |  | ||||||
| volatile int64_t fpMulb1 = 6036690890763685020; |  | ||||||
| volatile int32_t fpMula2 = -1952486466; |  | ||||||
| volatile int64_t fpMulb2 = 5693689137909219638; |  | ||||||
| volatile int32_t fpDiva1 = -1675630642; |  | ||||||
| volatile int64_t fpDivb1 = -3959960229647489051; |  | ||||||
| volatile int32_t fpDiva2 = -1651770302; |  | ||||||
| volatile int64_t fpDivb2 = 4982086006202596504; |  | ||||||
| volatile int32_t fpSqrta1 = 440505508; |  | ||||||
| volatile int32_t fpSqrta2 = -2147483648; |  | ||||||
| 
 |  | ||||||
| TEST_CASE("IEEE-754 compliance", "[FPU]") { |  | ||||||
| 	FPINIT(); |  | ||||||
| 	convertible_t a; |  | ||||||
| 	fpu_reg_t b, c; |  | ||||||
| 	b.lo.f64 = 0.0; |  | ||||||
| 
 |  | ||||||
| 	a.i64 = 1; |  | ||||||
| 	FPDIV(a, b, c); |  | ||||||
| 	CHECK(c.lo.f64 == std::numeric_limits<double>::infinity()); |  | ||||||
| 
 |  | ||||||
| 	a.i64 = -1; |  | ||||||
| 	FPDIV(a, b, c); |  | ||||||
| 	CHECK(c.lo.f64 == -std::numeric_limits<double>::infinity()); |  | ||||||
| 
 |  | ||||||
| #ifdef DEBUG |  | ||||||
| 	std::cout << "FPROUND" << std::endl; |  | ||||||
| #endif |  | ||||||
| 	CHECK(rxRound(RoundToNearest, fpRounda, 0, &FPROUND, false) == 0x43d99a4b8bc531dcU); |  | ||||||
| 	CHECK(rxRound(RoundDown, fpRounda, 0, &FPROUND, false) == 0x43d99a4b8bc531dcU); |  | ||||||
| 	CHECK(rxRound(RoundUp, fpRounda, 0, &FPROUND, false) == 0x43d99a4b8bc531dcU); |  | ||||||
| 	CHECK(rxRound(RoundToZero, fpRounda, 0, &FPROUND, false) == 0x43d99a4b8bc531dcU); |  | ||||||
| 
 |  | ||||||
| #ifdef DEBUG |  | ||||||
| 	std::cout << "FPADD" << std::endl; |  | ||||||
| #endif |  | ||||||
| 	CHECK(rxRound(RoundToNearest, fpAdda, fpAddb, &FPADD) == 0x50cd6ef8bd0671b2U); |  | ||||||
| 	CHECK(rxRound(RoundDown, fpAdda, fpAddb, &FPADD) == 0x50cd6ef8bd0671b1U); |  | ||||||
| 	CHECK(rxRound(RoundUp, fpAdda, fpAddb, &FPADD) == 0x50cd6ef8bd0671b2U); |  | ||||||
| 	CHECK(rxRound(RoundToZero, fpAdda, fpAddb, &FPADD) == 0x50cd6ef8bd0671b1U); |  | ||||||
| 
 |  | ||||||
| #ifdef DEBUG |  | ||||||
| 	std::cout << "FPSUB" << std::endl; |  | ||||||
| #endif |  | ||||||
| 	CHECK(rxRound(RoundToNearest, fpSuba, fpSubb, &FPSUB) == 0xc523ecd390267c99U); |  | ||||||
| 	CHECK(rxRound(RoundDown, fpSuba, fpSubb, &FPSUB) == 0xc523ecd390267c99U); |  | ||||||
| 	CHECK(rxRound(RoundUp, fpSuba, fpSubb, &FPSUB) == 0xc523ecd390267c98U); |  | ||||||
| 	CHECK(rxRound(RoundToZero, fpSuba, fpSubb, &FPSUB) == 0xc523ecd390267c98U); |  | ||||||
| 
 |  | ||||||
| #ifdef DEBUG |  | ||||||
| 	std::cout << "FPMUL" << std::endl; |  | ||||||
| #endif |  | ||||||
| 	CHECK(rxRound(RoundToNearest, fpMula1, fpMulb1, &FPMUL) == 0x5574b924d2f24542U); |  | ||||||
| 	CHECK(rxRound(RoundDown, fpMula1, fpMulb1, &FPMUL) == 0x5574b924d2f24541U); |  | ||||||
| 	CHECK(rxRound(RoundUp, fpMula1, fpMulb1, &FPMUL) == 0x5574b924d2f24542U); |  | ||||||
| 	CHECK(rxRound(RoundToZero, fpMula1, fpMulb1, &FPMUL) == 0x5574b924d2f24541U); |  | ||||||
| 
 |  | ||||||
| 	CHECK(rxRound(RoundToNearest, fpMula2, fpMulb2, &FPMUL) == 0xd0f23a18891a7470U); |  | ||||||
| 	CHECK(rxRound(RoundDown, fpMula2, fpMulb2, &FPMUL) == 0xd0f23a18891a7470U); |  | ||||||
| 	CHECK(rxRound(RoundUp, fpMula2, fpMulb2, &FPMUL) == 0xd0f23a18891a746fU); |  | ||||||
| 	CHECK(rxRound(RoundToZero, fpMula2, fpMulb2, &FPMUL) == 0xd0f23a18891a746fU); |  | ||||||
| 
 |  | ||||||
| #ifdef DEBUG |  | ||||||
| 	std::cout << "FPDIV" << std::endl; |  | ||||||
| #endif |  | ||||||
| 	CHECK(rxRound(RoundToNearest, fpDiva1, fpDivb1, &FPDIV) == 0x38bd2a7732b5eb0aU); |  | ||||||
| 	CHECK(rxRound(RoundDown, fpDiva1, fpDivb1, &FPDIV) == 0x38bd2a7732b5eb09U); |  | ||||||
| 	CHECK(rxRound(RoundUp, fpDiva1, fpDivb1, &FPDIV) == 0x38bd2a7732b5eb0aU); |  | ||||||
| 	CHECK(rxRound(RoundToZero, fpDiva1, fpDivb1, &FPDIV) == 0x38bd2a7732b5eb09U); |  | ||||||
| 
 |  | ||||||
| 	CHECK(rxRound(RoundToNearest, fpDiva2, fpDivb2, &FPDIV) == 0xbca3c3c039ccc71cU); |  | ||||||
| 	CHECK(rxRound(RoundDown, fpDiva2, fpDivb2, &FPDIV) == 0xbca3c3c039ccc71cU); |  | ||||||
| 	CHECK(rxRound(RoundUp, fpDiva2, fpDivb2, &FPDIV) == 0xbca3c3c039ccc71bU); |  | ||||||
| 	CHECK(rxRound(RoundToZero, fpDiva2, fpDivb2, &FPDIV) == 0xbca3c3c039ccc71bU); |  | ||||||
| 
 |  | ||||||
| #ifdef DEBUG |  | ||||||
| 	std::cout << "FPSQRT" << std::endl; |  | ||||||
| #endif |  | ||||||
| 	CHECK(rxRound(RoundToNearest, fpSqrta1, 0, &FPSQRT) == 0x40d47f0e46ebc19dU); |  | ||||||
| 	CHECK(rxRound(RoundDown, fpSqrta1, 0, &FPSQRT) == 0x40d47f0e46ebc19cU); |  | ||||||
| 	CHECK(rxRound(RoundUp, fpSqrta1, 0, &FPSQRT) == 0x40d47f0e46ebc19dU); |  | ||||||
| 	CHECK(rxRound(RoundToZero, fpSqrta1, 0, &FPSQRT) == 0x40d47f0e46ebc19cU); |  | ||||||
| 
 |  | ||||||
| 	CHECK(rxRound(RoundToNearest, fpSqrta2, 0, &FPSQRT) == 0x40e6a09e667f3bcdU); |  | ||||||
| 	CHECK(rxRound(RoundDown, fpSqrta2, 0, &FPSQRT) == 0x40e6a09e667f3bccU); |  | ||||||
| 	CHECK(rxRound(RoundUp, fpSqrta2, 0, &FPSQRT) == 0x40e6a09e667f3bcdU); |  | ||||||
| 	CHECK(rxRound(RoundToZero, fpSqrta2, 0, &FPSQRT) == 0x40e6a09e667f3bccU); |  | ||||||
| } |  | ||||||
							
								
								
									
										14075
									
								
								src/catch.hpp
									
										
									
									
									
								
							
							
						
						
									
										14075
									
								
								src/catch.hpp
									
										
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							|  | @ -106,7 +106,7 @@ void randomx_cache::initialize(const void *seed, size_t seedSize) { | ||||||
| 	fill_memory_blocks(&instance); | 	fill_memory_blocks(&instance); | ||||||
| 
 | 
 | ||||||
| 	reciprocalCache.clear(); | 	reciprocalCache.clear(); | ||||||
| 	randomx::Blake2Generator gen(seed, seedSize, 1000); //TODO
 | 	randomx::Blake2Generator gen(seed, seedSize); | ||||||
| 	for (int i = 0; i < RANDOMX_CACHE_ACCESSES; ++i) { | 	for (int i = 0; i < RANDOMX_CACHE_ACCESSES; ++i) { | ||||||
| 		randomx::generateSuperscalar(programs[i], gen); | 		randomx::generateSuperscalar(programs[i], gen); | ||||||
| 		for (unsigned j = 0; j < programs[i].getSize(); ++j) { | 		for (unsigned j = 0; j < programs[i].getSize(); ++j) { | ||||||
|  | @ -123,9 +123,8 @@ void randomx_cache::initialize(const void *seed, size_t seedSize) { | ||||||
| namespace randomx { | namespace randomx { | ||||||
| 
 | 
 | ||||||
| 	template<class Allocator> | 	template<class Allocator> | ||||||
| 	bool Dataset<Allocator>::allocate() { | 	void Dataset<Allocator>::allocate() { | ||||||
| 		memory = (uint8_t*)Allocator::allocMemory(RANDOMX_DATASET_SIZE); | 		memory = (uint8_t*)Allocator::allocMemory(RANDOMX_DATASET_SIZE); | ||||||
| 		return true; |  | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	template<class Allocator> | 	template<class Allocator> | ||||||
|  | @ -134,9 +133,8 @@ namespace randomx { | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	template<class Allocator> | 	template<class Allocator> | ||||||
| 	bool Cache<Allocator>::allocate() { | 	void Cache<Allocator>::allocate() { | ||||||
| 		memory = (uint8_t*)Allocator::allocMemory(RANDOMX_ARGON_MEMORY * ARGON2_BLOCK_SIZE); | 		memory = (uint8_t*)Allocator::allocMemory(RANDOMX_ARGON_MEMORY * ARGON2_BLOCK_SIZE); | ||||||
| 		return true; |  | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	template<class Allocator> | 	template<class Allocator> | ||||||
|  |  | ||||||
|  | @ -29,7 +29,7 @@ along with RandomX.  If not, see<http://www.gnu.org/licenses/>. | ||||||
| /* Global scope for C binding */ | /* Global scope for C binding */ | ||||||
| struct randomx_dataset { | struct randomx_dataset { | ||||||
| 	virtual ~randomx_dataset() = 0; | 	virtual ~randomx_dataset() = 0; | ||||||
| 	virtual bool allocate() = 0; | 	virtual void allocate() = 0; | ||||||
| 	uint8_t* memory = nullptr; | 	uint8_t* memory = nullptr; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | @ -46,7 +46,7 @@ namespace randomx { | ||||||
| 	template<class Allocator> | 	template<class Allocator> | ||||||
| 	struct Dataset : public randomx_dataset { | 	struct Dataset : public randomx_dataset { | ||||||
| 		~Dataset() override; | 		~Dataset() override; | ||||||
| 		bool allocate() override; | 		void allocate() override; | ||||||
| 	}; | 	}; | ||||||
| 
 | 
 | ||||||
| 	using DatasetDefault = Dataset<AlignedAllocator<CacheLineSize>>; | 	using DatasetDefault = Dataset<AlignedAllocator<CacheLineSize>>; | ||||||
|  | @ -55,7 +55,7 @@ namespace randomx { | ||||||
| 	template<class Allocator> | 	template<class Allocator> | ||||||
| 	struct Cache : public randomx_cache { | 	struct Cache : public randomx_cache { | ||||||
| 		~Cache() override; | 		~Cache() override; | ||||||
| 		bool allocate() override; | 		void allocate() override; | ||||||
| 		DatasetInitFunc getInitFunc() override; | 		DatasetInitFunc getInitFunc() override; | ||||||
| 	}; | 	}; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1,309 +0,0 @@ | ||||||
| ;# Copyright (c) 2018 tevador |  | ||||||
| ;# |  | ||||||
| ;# This file is part of RandomX. |  | ||||||
| ;# |  | ||||||
| ;# RandomX is free software: you can redistribute it and/or modify |  | ||||||
| ;# it under the terms of the GNU General Public License as published by |  | ||||||
| ;# the Free Software Foundation, either version 3 of the License, or |  | ||||||
| ;# (at your option) any later version. |  | ||||||
| ;# |  | ||||||
| ;# RandomX is distributed in the hope that it will be useful, |  | ||||||
| ;# but WITHOUT ANY WARRANTY; without even the implied warranty of |  | ||||||
| ;# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |  | ||||||
| ;# GNU General Public License for more details. |  | ||||||
| ;# |  | ||||||
| ;# You should have received a copy of the GNU General Public License |  | ||||||
| ;# along with RandomX.  If not, see<http://www.gnu.org/licenses/>. |  | ||||||
| 
 |  | ||||||
| IFDEF RAX |  | ||||||
| 
 |  | ||||||
| _RANDOMX_EXECUTE_PROGRAM SEGMENT PAGE READ EXECUTE |  | ||||||
| 
 |  | ||||||
| PUBLIC executeProgram |  | ||||||
| 
 |  | ||||||
| executeProgram PROC |  | ||||||
| 	; REGISTER ALLOCATION: |  | ||||||
| 	; rax -> temporary |  | ||||||
| 	; rbx -> "ic" |  | ||||||
| 	; rcx -> temporary |  | ||||||
| 	; rdx -> temporary |  | ||||||
| 	; rsi -> scratchpad pointer |  | ||||||
| 	; rdi -> dataset pointer |  | ||||||
| 	; rbp -> "ma", "mx" |  | ||||||
| 	; rsp -> stack pointer |  | ||||||
| 	; r8 	-> "r0" |  | ||||||
| 	; r9 	-> "r1" |  | ||||||
| 	; r10 -> "r2" |  | ||||||
| 	; r11 -> "r3" |  | ||||||
| 	; r12 -> "r4" |  | ||||||
| 	; r13 -> "r5" |  | ||||||
| 	; r14 -> "r6" |  | ||||||
| 	; r15 -> "r7" |  | ||||||
| 	; xmm0 -> "f0" |  | ||||||
| 	; xmm1 -> "f1" |  | ||||||
| 	; xmm2 -> "f2" |  | ||||||
| 	; xmm3 -> "f3" |  | ||||||
| 	; xmm4 -> "e0" |  | ||||||
| 	; xmm5 -> "e1" |  | ||||||
| 	; xmm6 -> "e2" |  | ||||||
| 	; xmm7 -> "e3" |  | ||||||
| 	; xmm8 -> "a0" |  | ||||||
| 	; xmm9 -> "a1" |  | ||||||
| 	; xmm10 -> "a2" |  | ||||||
| 	; xmm11 -> "a3" |  | ||||||
| 	; xmm12 -> temporary |  | ||||||
| 	; xmm13 -> mantissa mask    = 0x000fffffffffffff000fffffffffffff |  | ||||||
| 	; xmm14 -> exponent 2**-240 = 0x30f000000000000030f0000000000000 |  | ||||||
| 	; xmm15 -> scale mask       = 0x81f000000000000081f0000000000000 |  | ||||||
| 
 |  | ||||||
| 	; store callee-saved registers |  | ||||||
| 	push rbx |  | ||||||
| 	push rbp |  | ||||||
| 	push rdi |  | ||||||
| 	push rsi |  | ||||||
| 	push r12 |  | ||||||
| 	push r13 |  | ||||||
| 	push r14 |  | ||||||
| 	push r15 |  | ||||||
| 	sub rsp, 80 |  | ||||||
| 	movdqu xmmword ptr [rsp+64], xmm6 |  | ||||||
| 	movdqu xmmword ptr [rsp+48], xmm7 |  | ||||||
| 	movdqu xmmword ptr [rsp+32], xmm8 |  | ||||||
| 	movdqu xmmword ptr [rsp+16], xmm9 |  | ||||||
| 	movdqu xmmword ptr [rsp+0], xmm10 |  | ||||||
| 	sub rsp, 80 |  | ||||||
| 	movdqu xmmword ptr [rsp+64], xmm11 |  | ||||||
| 	movdqu xmmword ptr [rsp+48], xmm12 |  | ||||||
| 	movdqu xmmword ptr [rsp+32], xmm13 |  | ||||||
| 	movdqu xmmword ptr [rsp+16], xmm14 |  | ||||||
| 	movdqu xmmword ptr [rsp+0], xmm15 |  | ||||||
| 
 |  | ||||||
| 	;# function arguments |  | ||||||
| 	push rcx                    ;# RegisterFile& registerFile |  | ||||||
| 	mov rbp, qword ptr [rdx]    ;# "mx", "ma" |  | ||||||
| 	mov rdi, qword ptr [rdx+8]  ;# uint8_t* dataset |  | ||||||
| 	mov rsi, r8                 ;# uint8_t* scratchpad |  | ||||||
| 	mov rbx, r9                 ;# loop counter |  | ||||||
| 
 |  | ||||||
| 	mov rax, rbp |  | ||||||
| 	 |  | ||||||
| 	;# zero integer registers |  | ||||||
| 	xor r8, r8 |  | ||||||
| 	xor r9, r9 |  | ||||||
| 	xor r10, r10 |  | ||||||
| 	xor r11, r11 |  | ||||||
| 	xor r12, r12 |  | ||||||
| 	xor r13, r13 |  | ||||||
| 	xor r14, r14 |  | ||||||
| 	xor r15, r15 |  | ||||||
| 	 |  | ||||||
| 	;# load constant registers |  | ||||||
| 	lea rcx, [rcx+120] |  | ||||||
| 	movapd xmm8, xmmword ptr [rcx+72] |  | ||||||
| 	movapd xmm9, xmmword ptr [rcx+88] |  | ||||||
| 	movapd xmm10, xmmword ptr [rcx+104] |  | ||||||
| 	movapd xmm11, xmmword ptr [rcx+120] |  | ||||||
| 	movapd xmm13, xmmword ptr [mantissaMask] |  | ||||||
| 	movapd xmm14, xmmword ptr [exp240] |  | ||||||
| 	movapd xmm15, xmmword ptr [scaleMask] |  | ||||||
| 
 |  | ||||||
| 	jmp program_begin |  | ||||||
| 
 |  | ||||||
| ALIGN 64 |  | ||||||
| mantissaMask: |  | ||||||
| 	db 255, 255, 255, 255, 255, 255, 15, 0, 255, 255, 255, 255, 255, 255, 15, 0 |  | ||||||
| exp240: |  | ||||||
| 	db 0, 0, 0, 0, 0, 0, 240, 48, 0, 0, 0, 0, 0, 0, 240, 48 |  | ||||||
| scaleMask: |  | ||||||
| 	db 0, 0, 0, 0, 0, 0, 240, 129, 0, 0, 0, 0, 0, 0, 240, 129 |  | ||||||
| 
 |  | ||||||
| ALIGN 64 |  | ||||||
| program_begin: |  | ||||||
| 	xor rax, r8                      ;# read address register 1 |  | ||||||
| 	xor rax, r10 |  | ||||||
| 	mov rdx, rax |  | ||||||
| 	and eax, 2097088 |  | ||||||
| 	lea rcx, [rsi+rax] |  | ||||||
| 	push rcx |  | ||||||
| 	xor r8,  qword ptr [rcx+0] |  | ||||||
| 	xor r9,  qword ptr [rcx+8] |  | ||||||
| 	xor r10, qword ptr [rcx+16] |  | ||||||
| 	xor r11, qword ptr [rcx+24] |  | ||||||
| 	xor r12, qword ptr [rcx+32] |  | ||||||
| 	xor r13, qword ptr [rcx+40] |  | ||||||
| 	xor r14, qword ptr [rcx+48] |  | ||||||
| 	xor r15, qword ptr [rcx+56] |  | ||||||
| 	ror rdx, 32 |  | ||||||
| 	and edx, 2097088 |  | ||||||
| 	lea rcx, [rsi+rdx] |  | ||||||
| 	push rcx |  | ||||||
| 	cvtdq2pd xmm0, qword ptr [rcx+0] |  | ||||||
| 	cvtdq2pd xmm1, qword ptr [rcx+8] |  | ||||||
| 	cvtdq2pd xmm2, qword ptr [rcx+16] |  | ||||||
| 	cvtdq2pd xmm3, qword ptr [rcx+24] |  | ||||||
| 	cvtdq2pd xmm4, qword ptr [rcx+32] |  | ||||||
| 	cvtdq2pd xmm5, qword ptr [rcx+40] |  | ||||||
| 	cvtdq2pd xmm6, qword ptr [rcx+48] |  | ||||||
| 	cvtdq2pd xmm7, qword ptr [rcx+56] |  | ||||||
| 	andps xmm4, xmm13 |  | ||||||
| 	andps xmm5, xmm13 |  | ||||||
| 	andps xmm6, xmm13 |  | ||||||
| 	andps xmm7, xmm13 |  | ||||||
| 	orps xmm4, xmm14 |  | ||||||
| 	orps xmm5, xmm14 |  | ||||||
| 	orps xmm6, xmm14 |  | ||||||
| 	orps xmm7, xmm14 |  | ||||||
| 
 |  | ||||||
| 	;# 256 instructions |  | ||||||
| 	include program.inc |  | ||||||
| IF 1 |  | ||||||
| 	mov eax, r12d                      ;# read address register 1 |  | ||||||
| 	xor eax, r15d                      ;# read address register 2 |  | ||||||
| 	xor rbp, rax                       ;# modify "mx" |  | ||||||
| 	xor eax, eax |  | ||||||
| 	and rbp, -64                       ;# align "mx" to the start of a cache line |  | ||||||
| 	mov edx, ebp                       ;# edx = mx |  | ||||||
| 	prefetchnta byte ptr [rdi+rdx] |  | ||||||
| 	ror rbp, 32                        ;# swap "ma" and "mx" |  | ||||||
| 	mov edx, ebp                       ;# edx = ma |  | ||||||
| 	lea rcx, [rdi+rdx]                 ;# dataset cache line |  | ||||||
| 	xor r8,  qword ptr [rcx+0] |  | ||||||
| 	xor r9,  qword ptr [rcx+8] |  | ||||||
| 	xor r10, qword ptr [rcx+16] |  | ||||||
| 	xor r11, qword ptr [rcx+24] |  | ||||||
| 	xor r12, qword ptr [rcx+32] |  | ||||||
| 	xor r13, qword ptr [rcx+40] |  | ||||||
| 	xor r14, qword ptr [rcx+48] |  | ||||||
| 	xor r15, qword ptr [rcx+56] |  | ||||||
| 	pop rcx |  | ||||||
| 	mov qword ptr [rcx+0], r8 |  | ||||||
| 	mov qword ptr [rcx+8], r9 |  | ||||||
| 	mov qword ptr [rcx+16], r10 |  | ||||||
| 	mov qword ptr [rcx+24], r11 |  | ||||||
| 	mov qword ptr [rcx+32], r12 |  | ||||||
| 	mov qword ptr [rcx+40], r13 |  | ||||||
| 	mov qword ptr [rcx+48], r14 |  | ||||||
| 	mov qword ptr [rcx+56], r15 |  | ||||||
| 	pop rcx |  | ||||||
| 	xorpd xmm0, xmm4 |  | ||||||
| 	xorpd xmm1, xmm5 |  | ||||||
| 	xorpd xmm2, xmm6 |  | ||||||
| 	xorpd xmm3, xmm7 |  | ||||||
| 	movapd xmmword ptr [rcx+0], xmm0 |  | ||||||
| 	movapd xmmword ptr [rcx+16], xmm1 |  | ||||||
| 	movapd xmmword ptr [rcx+32], xmm2 |  | ||||||
| 	movapd xmmword ptr [rcx+48], xmm3 |  | ||||||
| else |  | ||||||
| 	; memcpy trace from stack to scratchpad |  | ||||||
| 	mov rax, rsi |  | ||||||
| 	mov rdx, rdi |  | ||||||
| 
 |  | ||||||
| 	cld |  | ||||||
| 	mov rsi, rsp |  | ||||||
| 	mov rdi, rax |  | ||||||
| 	mov rcx, 1024 |  | ||||||
| 
 |  | ||||||
| 	rep movsq |  | ||||||
| 
 |  | ||||||
| 	add rsp, 8192 |  | ||||||
| 
 |  | ||||||
| 	pop rcx |  | ||||||
| 	pop rcx |  | ||||||
| 
 |  | ||||||
| 	mov rsi, rax |  | ||||||
| 	mov rdi, rdx |  | ||||||
| endif |  | ||||||
| 	sub ebx, 1 |  | ||||||
| 	jnz program_begin |  | ||||||
| 	 |  | ||||||
| rx_finish: |  | ||||||
| 	; save VM register values |  | ||||||
| 	pop rcx |  | ||||||
| 	mov qword ptr [rcx+0], r8 |  | ||||||
| 	mov qword ptr [rcx+8], r9 |  | ||||||
| 	mov qword ptr [rcx+16], r10 |  | ||||||
| 	mov qword ptr [rcx+24], r11 |  | ||||||
| 	mov qword ptr [rcx+32], r12 |  | ||||||
| 	mov qword ptr [rcx+40], r13 |  | ||||||
| 	mov qword ptr [rcx+48], r14 |  | ||||||
| 	mov qword ptr [rcx+56], r15 |  | ||||||
| 	movdqa xmmword ptr [rcx+64], xmm0 |  | ||||||
| 	movdqa xmmword ptr [rcx+80], xmm1 |  | ||||||
| 	movdqa xmmword ptr [rcx+96], xmm2 |  | ||||||
| 	movdqa xmmword ptr [rcx+112], xmm3 |  | ||||||
| 	lea rcx, [rcx+64] |  | ||||||
| 	movdqa xmmword ptr [rcx+64], xmm4 |  | ||||||
| 	movdqa xmmword ptr [rcx+80], xmm5 |  | ||||||
| 	movdqa xmmword ptr [rcx+96], xmm6 |  | ||||||
| 	movdqa xmmword ptr [rcx+112], xmm7 |  | ||||||
| 
 |  | ||||||
| 	; load callee-saved registers |  | ||||||
| 	movdqu xmm15, xmmword ptr [rsp] |  | ||||||
| 	movdqu xmm14, xmmword ptr [rsp+16] |  | ||||||
| 	movdqu xmm13, xmmword ptr [rsp+32] |  | ||||||
| 	movdqu xmm12, xmmword ptr [rsp+48] |  | ||||||
| 	movdqu xmm11, xmmword ptr [rsp+64] |  | ||||||
| 	add rsp, 80 |  | ||||||
| 	movdqu xmm10, xmmword ptr [rsp] |  | ||||||
| 	movdqu xmm9, xmmword ptr [rsp+16] |  | ||||||
| 	movdqu xmm8, xmmword ptr [rsp+32] |  | ||||||
| 	movdqu xmm7, xmmword ptr [rsp+48] |  | ||||||
| 	movdqu xmm6, xmmword ptr [rsp+64] |  | ||||||
| 	add rsp, 80 |  | ||||||
| 	pop r15 |  | ||||||
| 	pop r14 |  | ||||||
| 	pop r13 |  | ||||||
| 	pop r12 |  | ||||||
| 	pop rsi |  | ||||||
| 	pop rdi |  | ||||||
| 	pop rbp |  | ||||||
| 	pop rbx |  | ||||||
| 
 |  | ||||||
| 	; return |  | ||||||
| 	ret |  | ||||||
| 	 |  | ||||||
| TransformAddress MACRO reg32, reg64 |  | ||||||
| ;# Transforms the address in the register so that the transformed address |  | ||||||
| ;# lies in a different cache line than the original address (mod 2^N). |  | ||||||
| ;# This is done to prevent a load-store dependency. |  | ||||||
| ;# There are 3 different transformations that can be used: x -> 9*x+C, x -> x+C, x -> x^C |  | ||||||
| 	;lea reg32, [reg64+reg64*8+127]  ;# C = -119 -110 -101 -92 -83 -74 -65 -55 -46 -37 -28 -19 -10 -1 9 18 27 36 45 54 63 73 82 91 100 109 118 127 |  | ||||||
| 	db 64 |  | ||||||
| 	add reg32, -39                   ;# C = all except -7 to +7 |  | ||||||
| 	;xor reg32, -8                   ;# C = all except 0 to 7 |  | ||||||
| ENDM |  | ||||||
| 
 |  | ||||||
| ALIGN 64 |  | ||||||
| rx_read: |  | ||||||
| ;# IN     eax = random 32-bit address |  | ||||||
| ;# GLOBAL rdi = address of the dataset address |  | ||||||
| ;# GLOBAL rsi = address of the scratchpad |  | ||||||
| ;# GLOBAL rbp = low 32 bits = "mx", high 32 bits = "ma" |  | ||||||
| ;# MODIFY rcx, rdx |  | ||||||
| 	TransformAddress eax, rax       ;# TransformAddress function |  | ||||||
| 	mov rcx, qword ptr [rdi]        ;# load the dataset address |  | ||||||
| 	xor rbp, rax                    ;# modify "mx" |  | ||||||
| 	;# prefetch cacheline "mx" |  | ||||||
| 	and rbp, -64                    ;# align "mx" to the start of a cache line |  | ||||||
| 	mov edx, ebp                    ;# edx = mx |  | ||||||
| 	prefetchnta byte ptr [rcx+rdx] |  | ||||||
| 	;# read cacheline "ma" |  | ||||||
| 	ror rbp, 32                     ;# swap "ma" and "mx" |  | ||||||
| 	mov edx, ebp                    ;# edx = ma |  | ||||||
| 	lea rcx, [rcx+rdx]              ;# dataset cache line |  | ||||||
| 	xor r8,  qword ptr [rcx+0] |  | ||||||
| 	xor r9,  qword ptr [rcx+8] |  | ||||||
| 	xor r10, qword ptr [rcx+16] |  | ||||||
| 	xor r11, qword ptr [rcx+24] |  | ||||||
| 	xor r12, qword ptr [rcx+32] |  | ||||||
| 	xor r13, qword ptr [rcx+40] |  | ||||||
| 	xor r14, qword ptr [rcx+48] |  | ||||||
| 	xor r15, qword ptr [rcx+56] |  | ||||||
| 	ret |  | ||||||
| executeProgram ENDP |  | ||||||
| 
 |  | ||||||
| _RANDOMX_EXECUTE_PROGRAM ENDS |  | ||||||
| 
 |  | ||||||
| ENDIF |  | ||||||
| 
 |  | ||||||
| END |  | ||||||
|  | @ -51,7 +51,10 @@ extern "C" { | ||||||
| 			UNREACHABLE; | 			UNREACHABLE; | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		if (!cache->allocate()) { | 		try { | ||||||
|  | 			cache->allocate(); | ||||||
|  | 		} | ||||||
|  | 		catch (std::exception &ex) { | ||||||
| 			delete cache; | 			delete cache; | ||||||
| 			cache = nullptr; | 			cache = nullptr; | ||||||
| 		} | 		} | ||||||
|  | @ -75,7 +78,11 @@ extern "C" { | ||||||
| 		else { | 		else { | ||||||
| 			dataset = new randomx::DatasetDefault(); | 			dataset = new randomx::DatasetDefault(); | ||||||
| 		} | 		} | ||||||
| 		if (!dataset->allocate()) { | 
 | ||||||
|  | 		try { | ||||||
|  | 			dataset->allocate(); | ||||||
|  | 		} | ||||||
|  | 		catch (std::exception &ex) { | ||||||
| 			delete dataset; | 			delete dataset; | ||||||
| 			dataset = nullptr; | 			dataset = nullptr; | ||||||
| 		} | 		} | ||||||
|  | @ -183,7 +190,7 @@ extern "C" { | ||||||
| 		delete machine; | 		delete machine; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	void randomx_calculate_hash(randomx_vm *machine, void *input, size_t inputSize, void *output) { | 	void randomx_calculate_hash(randomx_vm *machine, const void *input, size_t inputSize, void *output) { | ||||||
| 		alignas(16) uint64_t hash[8]; | 		alignas(16) uint64_t hash[8]; | ||||||
| 		blake2b(hash, sizeof(hash), input, inputSize, nullptr, 0); | 		blake2b(hash, sizeof(hash), input, inputSize, nullptr, 0); | ||||||
| 		machine->initScratchpad(&hash); | 		machine->initScratchpad(&hash); | ||||||
|  | @ -194,7 +201,7 @@ extern "C" { | ||||||
| 			blake2b(hash, sizeof(hash), machine->getRegisterFile(), sizeof(randomx::RegisterFile), nullptr, 0); | 			blake2b(hash, sizeof(hash), machine->getRegisterFile(), sizeof(randomx::RegisterFile), nullptr, 0); | ||||||
| 		} | 		} | ||||||
| 		machine->run(&hash); | 		machine->run(&hash); | ||||||
| 		machine->getFinalResult(output, 64); | 		machine->getFinalResult(output, RANDOMX_HASH_SIZE); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -20,73 +20,6 @@ along with RandomX.  If not, see<http://www.gnu.org/licenses/>. | ||||||
| #ifndef RANDOMX_H | #ifndef RANDOMX_H | ||||||
| #define RANDOMX_H | #define RANDOMX_H | ||||||
| 
 | 
 | ||||||
| /*
 |  | ||||||
| 
 |  | ||||||
| Minimal usage example: |  | ||||||
| ---------------------- |  | ||||||
| 
 |  | ||||||
| #include "randomx.h" |  | ||||||
| #include <stdio.h> |  | ||||||
| 
 |  | ||||||
| int main() { |  | ||||||
|   const char mySeed[] = "RandomX example seed"; |  | ||||||
|   const char myInput[] = "RandomX example input"; |  | ||||||
|   char hash[RANDOMX_HASH_SIZE]; |  | ||||||
| 
 |  | ||||||
|   randomx_cache *myCache = randomx_alloc_cache(RANDOMX_FLAG_DEFAULT); |  | ||||||
|   randomx_init_cache(myCache, mySeed, sizeof mySeed); |  | ||||||
|   randomx_vm *myMachine = randomx_create_vm(RANDOMX_FLAG_DEFAULT); |  | ||||||
|   randomx_vm_set_cache(myMachine, myCache); |  | ||||||
| 
 |  | ||||||
|   randomx_calculate_hash(myMachine, myInput, sizeof myInput, hash); |  | ||||||
| 
 |  | ||||||
|   randomx_destroy_vm(myMachine); |  | ||||||
|   randomx_release_cache(myCache); |  | ||||||
| 
 |  | ||||||
|   for (unsigned i = 0; i < RANDOMX_HASH_SIZE; ++i) |  | ||||||
|     printf("%02x", hash[i]); |  | ||||||
| 
 |  | ||||||
|   printf("\n"); |  | ||||||
| 
 |  | ||||||
|   return 0; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| Optimized usage example: |  | ||||||
| ------------------------ |  | ||||||
| 
 |  | ||||||
| #include "randomx.h" |  | ||||||
| #include <stdio.h> |  | ||||||
| 
 |  | ||||||
| int main() { |  | ||||||
|   const char mySeed[] = "RandomX example seed"; |  | ||||||
|   const char myInput[] = "RandomX example input"; |  | ||||||
|   char hash[RANDOMX_HASH_SIZE]; |  | ||||||
| 
 |  | ||||||
|   randomx_cache *myCache = randomx_alloc_cache(RANDOMX_FLAG_JIT | RANDOMX_FLAG_LARGE_PAGES); |  | ||||||
|   randomx_init_cache(myCache, mySeed, sizeof mySeed); |  | ||||||
| 
 |  | ||||||
|   randomx_dataset *myDataset = randomx_alloc_dataset(RANDOMX_FLAG_LARGE_PAGES); |  | ||||||
|   randomx_init_dataset(myDataset, myCache, 0, RANDOMX_DATASET_BLOCKS); |  | ||||||
|   randomx_release_cache(myCache); |  | ||||||
| 
 |  | ||||||
|   randomx_vm *myMachine = randomx_create_vm(RANDOMX_FLAG_FULL_MEM | RANDOMX_FLAG_JIT | RANDOMX_FLAG_HARD_AES | RANDOMX_FLAG_LARGE_PAGES); |  | ||||||
|   randomx_vm_set_dataset(myMachine, myDataset); |  | ||||||
| 
 |  | ||||||
|   randomx_calculate_hash(myMachine, myInput, sizeof myInput, hash); |  | ||||||
| 
 |  | ||||||
|   randomx_destroy_vm(myMachine); |  | ||||||
|   randomx_release_dataset(myDataset); |  | ||||||
| 
 |  | ||||||
|   for (unsigned i = 0; i < RANDOMX_HASH_SIZE; ++i) |  | ||||||
|     printf("%02x", hash[i]); |  | ||||||
| 
 |  | ||||||
|   printf("\n"); |  | ||||||
| 
 |  | ||||||
|   return 0; |  | ||||||
| } |  | ||||||
|    |  | ||||||
| */ |  | ||||||
| 
 |  | ||||||
| #include <stddef.h> | #include <stddef.h> | ||||||
| 
 | 
 | ||||||
| #define RANDOMX_HASH_SIZE 32 | #define RANDOMX_HASH_SIZE 32 | ||||||
|  | @ -121,7 +54,7 @@ void randomx_vm_set_cache(randomx_vm *machine, randomx_cache* cache); | ||||||
| void randomx_vm_set_dataset(randomx_vm *machine, randomx_dataset *dataset); | void randomx_vm_set_dataset(randomx_vm *machine, randomx_dataset *dataset); | ||||||
| void randomx_destroy_vm(randomx_vm *machine); | void randomx_destroy_vm(randomx_vm *machine); | ||||||
| 
 | 
 | ||||||
| void randomx_calculate_hash(randomx_vm *machine, void *input, size_t inputSize, void *output); | void randomx_calculate_hash(randomx_vm *machine, const void *input, size_t inputSize, void *output); | ||||||
| 
 | 
 | ||||||
| #if defined(__cplusplus) | #if defined(__cplusplus) | ||||||
| } | } | ||||||
|  |  | ||||||
							
								
								
									
										25
									
								
								src/tests/api-example1.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								src/tests/api-example1.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,25 @@ | ||||||
|  | #include "../randomx.h" | ||||||
|  | #include <stdio.h> | ||||||
|  | 
 | ||||||
|  | int main() { | ||||||
|  | 	const char mySeed[] = "RandomX example seed"; | ||||||
|  | 	const char myInput[] = "RandomX example input"; | ||||||
|  | 	char hash[RANDOMX_HASH_SIZE]; | ||||||
|  | 
 | ||||||
|  | 	randomx_cache *myCache = randomx_alloc_cache(RANDOMX_FLAG_DEFAULT); | ||||||
|  | 	randomx_init_cache(myCache, mySeed, sizeof mySeed); | ||||||
|  | 	randomx_vm *myMachine = randomx_create_vm(RANDOMX_FLAG_DEFAULT); | ||||||
|  | 	randomx_vm_set_cache(myMachine, myCache); | ||||||
|  | 
 | ||||||
|  | 	randomx_calculate_hash(myMachine, &myInput, sizeof myInput, hash); | ||||||
|  | 
 | ||||||
|  | 	randomx_destroy_vm(myMachine); | ||||||
|  | 	randomx_release_cache(myCache); | ||||||
|  | 
 | ||||||
|  | 	for (unsigned i = 0; i < RANDOMX_HASH_SIZE; ++i) | ||||||
|  | 		printf("%02x", hash[i] & 0xff); | ||||||
|  | 
 | ||||||
|  | 	printf("\n"); | ||||||
|  | 
 | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
							
								
								
									
										43
									
								
								src/tests/api-example2.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								src/tests/api-example2.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,43 @@ | ||||||
|  | #include "../randomx.h" | ||||||
|  | #include <iostream> | ||||||
|  | #include <iomanip> | ||||||
|  | #include <thread> | ||||||
|  | 
 | ||||||
|  | int main() { | ||||||
|  | 	const char mySeed[] = "RandomX example seed"; | ||||||
|  | 	const char myInput[] = "RandomX example input"; | ||||||
|  | 	char hash[RANDOMX_HASH_SIZE]; | ||||||
|  | 
 | ||||||
|  | 	randomx_cache *myCache = randomx_alloc_cache((randomx_flags)(RANDOMX_FLAG_JIT | RANDOMX_FLAG_LARGE_PAGES)); | ||||||
|  | 	if (myCache == nullptr) { | ||||||
|  | 		std::cout << "Cache allocation failed" << std::endl; | ||||||
|  | 		return 1; | ||||||
|  | 	} | ||||||
|  | 	randomx_init_cache(myCache, mySeed, sizeof mySeed); | ||||||
|  | 
 | ||||||
|  | 	randomx_dataset *myDataset = randomx_alloc_dataset(RANDOMX_FLAG_LARGE_PAGES); | ||||||
|  | 	if (myDataset == nullptr) { | ||||||
|  | 		std::cout << "Dataset allocation failed" << std::endl; | ||||||
|  | 		return 1; | ||||||
|  | 	} | ||||||
|  | 	std::thread t1(&randomx_init_dataset, myDataset, myCache, 0, RANDOMX_DATASET_BLOCKS / 2); | ||||||
|  | 	std::thread t2(&randomx_init_dataset, myDataset, myCache, RANDOMX_DATASET_BLOCKS / 2, RANDOMX_DATASET_BLOCKS / 2); | ||||||
|  | 	t1.join(); | ||||||
|  | 	t2.join(); | ||||||
|  | 	randomx_release_cache(myCache); | ||||||
|  | 
 | ||||||
|  | 	randomx_vm *myMachine = randomx_create_vm((randomx_flags)(RANDOMX_FLAG_FULL_MEM | RANDOMX_FLAG_JIT | RANDOMX_FLAG_HARD_AES | RANDOMX_FLAG_LARGE_PAGES)); | ||||||
|  | 	randomx_vm_set_dataset(myMachine, myDataset); | ||||||
|  | 
 | ||||||
|  | 	randomx_calculate_hash(myMachine, &myInput, sizeof myInput, hash); | ||||||
|  | 
 | ||||||
|  | 	randomx_destroy_vm(myMachine); | ||||||
|  | 	randomx_release_dataset(myDataset); | ||||||
|  | 
 | ||||||
|  | 	for (unsigned i = 0; i < RANDOMX_HASH_SIZE; ++i) | ||||||
|  | 		std::cout << std::hex << ((int)hash[i] & 0xff); | ||||||
|  | 
 | ||||||
|  | 	std::cout << std::endl; | ||||||
|  | 
 | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
|  | @ -1,5 +1,5 @@ | ||||||
| /*
 | /*
 | ||||||
| Copyright (c) 2018 tevador | Copyright (c) 2019 tevador | ||||||
| 
 | 
 | ||||||
| This file is part of RandomX. | This file is part of RandomX. | ||||||
| 
 | 
 | ||||||
|  | @ -16,25 +16,19 @@ GNU General Public License for more details. | ||||||
| You should have received a copy of the GNU General Public License | You should have received a copy of the GNU General Public License | ||||||
| along with RandomX.  If not, see<http://www.gnu.org/licenses/>.
 | along with RandomX.  If not, see<http://www.gnu.org/licenses/>.
 | ||||||
| */ | */ | ||||||
| //#define TRACE
 |  | ||||||
| 
 | 
 | ||||||
| //#include "AssemblyGeneratorX86.hpp"
 |  | ||||||
| #include "stopwatch.hpp" |  | ||||||
| //#include "blake2/blake2.h"
 |  | ||||||
| #include "blake2/endian.h" |  | ||||||
| #include <fstream> | #include <fstream> | ||||||
| #include <iostream> | #include <iostream> | ||||||
| #include <iomanip> | #include <iomanip> | ||||||
| #include <exception> | #include <exception> | ||||||
| #include <cstring> |  | ||||||
| //#include "Program.hpp"
 |  | ||||||
| #include <string> | #include <string> | ||||||
| #include <vector> | #include <vector> | ||||||
| #include <thread> | #include <thread> | ||||||
| #include <atomic> | #include <atomic> | ||||||
| //#include "hashAes1Rx4.hpp"
 | #include "stopwatch.hpp" | ||||||
| //#include "JitCompilerX86.hpp"
 | #include "utility.hpp" | ||||||
| #include "randomx.h" | #include "../randomx.h" | ||||||
|  | #include "../blake2/endian.h" | ||||||
| 
 | 
 | ||||||
| const uint8_t seed[32] = { 191, 182, 222, 175, 249, 89, 134, 104, 241, 68, 191, 62, 162, 166, 61, 64, 123, 191, 227, 193, 118, 60, 188, 53, 223, 133, 175, 24, 123, 230, 55, 74 }; | const uint8_t seed[32] = { 191, 182, 222, 175, 249, 89, 134, 104, 241, 68, 191, 62, 162, 166, 61, 64, 123, 191, 227, 193, 118, 60, 188, 53, 223, 133, 175, 24, 123, 230, 55, 74 }; | ||||||
| 
 | 
 | ||||||
|  | @ -45,12 +39,6 @@ const uint8_t blockTemplate_[] = { | ||||||
| 		0xc3, 0x8b, 0xde, 0xd3, 0x4d, 0x2d, 0xcd, 0xee, 0xf9, 0x5c, 0xd2, 0x0c, 0xef, 0xc1, 0x2f, 0x61, 0xd5, 0x61, 0x09 | 		0xc3, 0x8b, 0xde, 0xd3, 0x4d, 0x2d, 0xcd, 0xee, 0xf9, 0x5c, 0xd2, 0x0c, 0xef, 0xc1, 0x2f, 0x61, 0xd5, 0x61, 0x09 | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| void dump(const char* buffer, uint64_t count, const char* name) { |  | ||||||
| 	std::ofstream fout(name, std::ios::out | std::ios::binary); |  | ||||||
| 	fout.write(buffer, count); |  | ||||||
| 	fout.close(); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| constexpr char hexmap[] = "0123456789abcdef"; | constexpr char hexmap[] = "0123456789abcdef"; | ||||||
| void outputHex(std::ostream& os, const char* data, int length) { | void outputHex(std::ostream& os, const char* data, int length) { | ||||||
| 	for (int i = 0; i < length; ++i) { | 	for (int i = 0; i < length; ++i) { | ||||||
|  | @ -59,34 +47,6 @@ void outputHex(std::ostream& os, const char* data, int length) { | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void readOption(const char* option, int argc, char** argv, bool& out) { |  | ||||||
| 	for (int i = 0; i < argc; ++i) { |  | ||||||
| 		if (strcmp(argv[i], option) == 0) { |  | ||||||
| 			out = true; |  | ||||||
| 			return; |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	out = false; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void readIntOption(const char* option, int argc, char** argv, int& out, int defaultValue) { |  | ||||||
| 	for (int i = 0; i < argc - 1; ++i) { |  | ||||||
| 		if (strcmp(argv[i], option) == 0 && (out = atoi(argv[i + 1])) > 0) { |  | ||||||
| 			return; |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	out = defaultValue; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void readInt(int argc, char** argv, int& out, int defaultValue) { |  | ||||||
| 	for (int i = 0; i < argc; ++i) { |  | ||||||
| 		if (*argv[i] != '-' && (out = atoi(argv[i])) > 0) { |  | ||||||
| 			return; |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	out = defaultValue; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| class AtomicHash { | class AtomicHash { | ||||||
| public: | public: | ||||||
| 	AtomicHash() { | 	AtomicHash() { | ||||||
|  | @ -114,131 +74,52 @@ void printUsage(const char* executable) { | ||||||
| 	std::cout << "Usage: " << executable << " [OPTIONS]" << std::endl; | 	std::cout << "Usage: " << executable << " [OPTIONS]" << std::endl; | ||||||
| 	std::cout << "Supported options:" << std::endl; | 	std::cout << "Supported options:" << std::endl; | ||||||
| 	std::cout << "  --help        shows this message" << std::endl; | 	std::cout << "  --help        shows this message" << std::endl; | ||||||
| 	std::cout << "  --mine        mining mode: 2 GiB, x86-64 JIT compiled VM" << std::endl; | 	std::cout << "  --mine        mining mode: 2 GiB" << std::endl; | ||||||
| 	std::cout << "  --verify      verification mode: 256 MiB" << std::endl; | 	std::cout << "  --verify      verification mode: 256 MiB" << std::endl; | ||||||
| 	std::cout << "  --jit         x86-64 JIT compiled verification mode (default: interpreter)" << std::endl; | 	std::cout << "  --jit         x86-64 JIT compiled mode (default: interpreter)" << std::endl; | ||||||
| 	std::cout << "  --largePages  use large pages" << std::endl; | 	std::cout << "  --largePages  use large pages" << std::endl; | ||||||
| 	std::cout << "  --softAes     use software AES (default: x86 AES-NI)" << std::endl; | 	std::cout << "  --softAes     use software AES (default: x86 AES-NI)" << std::endl; | ||||||
| 	std::cout << "  --threads T   use T threads (default: 1)" << std::endl; | 	std::cout << "  --threads T   use T threads (default: 1)" << std::endl; | ||||||
| 	std::cout << "  --init Q      initialize dataset with Q threads (default: 1)" << std::endl; | 	std::cout << "  --init Q      initialize dataset with Q threads (default: 1)" << std::endl; | ||||||
| 	std::cout << "  --nonces N    run N nonces (default: 1000)" << std::endl; | 	std::cout << "  --nonces N    run N nonces (default: 1000)" << std::endl; | ||||||
| 	std::cout << "  --genAsm      generate x86-64 asm code for nonce N" << std::endl; |  | ||||||
| 	std::cout << "  --genNative   generate RandomX code for nonce N" << std::endl; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| template<bool softAes> |  | ||||||
| void generateAsm(uint32_t nonce) { |  | ||||||
| 	/*alignas(16) uint64_t hash[8];
 |  | ||||||
| 	uint8_t blockTemplate[sizeof(blockTemplate_)]; |  | ||||||
| 	memcpy(blockTemplate, blockTemplate_, sizeof(blockTemplate)); |  | ||||||
| 	store32(blockTemplate + 39, nonce); |  | ||||||
| 	blake2b(hash, sizeof(hash), blockTemplate, sizeof(blockTemplate), nullptr, 0); |  | ||||||
| 	uint8_t scratchpad[RANDOMX_SCRATCHPAD_L3]; |  | ||||||
| 	fillAes1Rx4<softAes>((void*)hash, RANDOMX_SCRATCHPAD_L3, scratchpad); |  | ||||||
| 	randomx::AssemblyGeneratorX86 asmX86; |  | ||||||
| 	randomx::Program p; |  | ||||||
| 	fillAes1Rx4<softAes>(hash, sizeof(p), &p); |  | ||||||
| 	asmX86.generateProgram(p); |  | ||||||
| 	asmX86.printCode(std::cout);*/ |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| template<bool softAes> |  | ||||||
| void generateNative(uint32_t nonce) { |  | ||||||
| 	/*alignas(16) uint64_t hash[8];
 |  | ||||||
| 	uint8_t blockTemplate[sizeof(blockTemplate_)]; |  | ||||||
| 	memcpy(blockTemplate, blockTemplate_, sizeof(blockTemplate)); |  | ||||||
| 	store32(blockTemplate + 39, nonce); |  | ||||||
| 	blake2b(hash, sizeof(hash), blockTemplate, sizeof(blockTemplate), nullptr, 0); |  | ||||||
| 	uint8_t scratchpad[RANDOMX_SCRATCHPAD_L3]; |  | ||||||
| 	fillAes1Rx4<softAes>((void*)hash, RANDOMX_SCRATCHPAD_L3, scratchpad); |  | ||||||
| 	alignas(16) randomx::Program prog; |  | ||||||
| 	fillAes1Rx4<softAes>((void*)hash, sizeof(prog), &prog); |  | ||||||
| 	for (int i = 0; i < RANDOMX_PROGRAM_SIZE; ++i) { |  | ||||||
| 		prog(i).dst %= 8; |  | ||||||
| 		prog(i).src %= 8; |  | ||||||
| 	} |  | ||||||
| 	std::cout << prog << std::endl;*/ |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void mine(randomx_vm* vm, std::atomic<uint32_t>& atomicNonce, AtomicHash& result, uint32_t noncesCount, int thread) { | void mine(randomx_vm* vm, std::atomic<uint32_t>& atomicNonce, AtomicHash& result, uint32_t noncesCount, int thread) { | ||||||
| 	uint64_t hash[RANDOMX_HASH_SIZE / 4]; | 	uint64_t hash[RANDOMX_HASH_SIZE / sizeof(uint64_t)]; | ||||||
| 	uint8_t blockTemplate[sizeof(blockTemplate_)]; | 	uint8_t blockTemplate[sizeof(blockTemplate_)]; | ||||||
| 	memcpy(blockTemplate, blockTemplate_, sizeof(blockTemplate)); | 	memcpy(blockTemplate, blockTemplate_, sizeof(blockTemplate)); | ||||||
| 	void* noncePtr = blockTemplate + 39; | 	void* noncePtr = blockTemplate + 39; | ||||||
| 	auto nonce = atomicNonce.fetch_add(1); | 	auto nonce = atomicNonce.fetch_add(1); | ||||||
| 
 | 
 | ||||||
| 	while (nonce < noncesCount) { | 	while (nonce < noncesCount) { | ||||||
| 		//std::cout << "Thread " << thread << " nonce " << nonce << std::endl;
 |  | ||||||
| 		store32(noncePtr, nonce); | 		store32(noncePtr, nonce); | ||||||
| 		 |  | ||||||
| 		randomx_calculate_hash(vm, blockTemplate, sizeof(blockTemplate), &hash); | 		randomx_calculate_hash(vm, blockTemplate, sizeof(blockTemplate), &hash); | ||||||
| 
 |  | ||||||
| 		result.xorWith(hash); | 		result.xorWith(hash); | ||||||
| 		/*if (randomx::trace) {
 |  | ||||||
| 			std::cout << "Nonce: " << nonce << " "; |  | ||||||
| 			outputHex(std::cout, (char*)hash, 16); |  | ||||||
| 			std::cout << std::endl; |  | ||||||
| 		}*/ |  | ||||||
| 		nonce = atomicNonce.fetch_add(1); | 		nonce = atomicNonce.fetch_add(1); | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| int main(int argc, char** argv) { | int main(int argc, char** argv) { | ||||||
| 	bool softAes, genAsm, miningMode, verificationMode, help, largePages, async, genNative, jit, genSuperscalar, legacy; | 	bool softAes, miningMode, verificationMode, help, largePages, jit; | ||||||
| 	int programCount, threadCount, initThreadCount, epoch; | 	int noncesCount, threadCount, initThreadCount; | ||||||
| 
 | 
 | ||||||
| 	readOption("--softAes", argc, argv, softAes); | 	readOption("--softAes", argc, argv, softAes); | ||||||
| 	readOption("--genAsm", argc, argv, genAsm); |  | ||||||
| 	readOption("--mine", argc, argv, miningMode); | 	readOption("--mine", argc, argv, miningMode); | ||||||
| 	readOption("--verify", argc, argv, verificationMode); | 	readOption("--verify", argc, argv, verificationMode); | ||||||
| 	readIntOption("--threads", argc, argv, threadCount, 1); | 	readIntOption("--threads", argc, argv, threadCount, 1); | ||||||
| 	readIntOption("--nonces", argc, argv, programCount, 1000); | 	readIntOption("--nonces", argc, argv, noncesCount, 1000); | ||||||
| 	readIntOption("--init", argc, argv, initThreadCount, 1); | 	readIntOption("--init", argc, argv, initThreadCount, 1); | ||||||
| 	readIntOption("--epoch", argc, argv, epoch, 0); |  | ||||||
| 	readOption("--largePages", argc, argv, largePages); | 	readOption("--largePages", argc, argv, largePages); | ||||||
| 	readOption("--jit", argc, argv, jit); | 	readOption("--jit", argc, argv, jit); | ||||||
| 	readOption("--genNative", argc, argv, genNative); |  | ||||||
| 	readOption("--help", argc, argv, help); | 	readOption("--help", argc, argv, help); | ||||||
| 	readOption("--genSuperscalar", argc, argv, genSuperscalar); |  | ||||||
| 	readOption("--legacy", argc, argv, legacy); |  | ||||||
| 
 | 
 | ||||||
| 	/*if (genSuperscalar) {
 | 	std::cout << "RandomX benchmark" << std::endl; | ||||||
| 		randomx::SuperscalarProgram p; |  | ||||||
| 		randomx::Blake2Generator gen(seed, programCount); |  | ||||||
| 		randomx::generateSuperscalar(p, gen); |  | ||||||
| 		randomx::AssemblyGeneratorX86 asmX86; |  | ||||||
| 		asmX86.generateAsm(p); |  | ||||||
| 		//std::ofstream file("lightProg2.asm");
 |  | ||||||
| 		asmX86.printCode(std::cout); |  | ||||||
| 		return 0; |  | ||||||
| 	}*/ |  | ||||||
| 
 |  | ||||||
| 	if (genAsm) { |  | ||||||
| 		if (softAes) |  | ||||||
| 			generateAsm<true>(programCount); |  | ||||||
| 		else |  | ||||||
| 			generateAsm<false>(programCount); |  | ||||||
| 		return 0; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	if (genNative) { |  | ||||||
| 		if (softAes) |  | ||||||
| 			generateNative<true>(programCount); |  | ||||||
| 		else |  | ||||||
| 			generateNative<false>(programCount); |  | ||||||
| 		return 0; |  | ||||||
| 	} |  | ||||||
| 
 | 
 | ||||||
| 	if (help || (!miningMode && !verificationMode)) { | 	if (help || (!miningMode && !verificationMode)) { | ||||||
| 		printUsage(argv[0]); | 		printUsage(argv[0]); | ||||||
| 		return 0; | 		return 0; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if (softAes) |  | ||||||
| 		std::cout << "Using software AES." << std::endl; |  | ||||||
| 
 |  | ||||||
| 	std::atomic<uint32_t> atomicNonce(0); | 	std::atomic<uint32_t> atomicNonce(0); | ||||||
| 	AtomicHash result; | 	AtomicHash result; | ||||||
| 	std::vector<randomx_vm*> vms; | 	std::vector<randomx_vm*> vms; | ||||||
|  | @ -249,51 +130,55 @@ int main(int argc, char** argv) { | ||||||
| 
 | 
 | ||||||
| 	if (miningMode) { | 	if (miningMode) { | ||||||
| 		flags = (randomx_flags)(flags | RANDOMX_FLAG_FULL_MEM); | 		flags = (randomx_flags)(flags | RANDOMX_FLAG_FULL_MEM); | ||||||
| 		std::cout << "RandomX - full memory mode (2 GiB)" << std::endl; | 		std::cout << " - full memory mode (2 GiB)" << std::endl; | ||||||
| 	} else { | 	} | ||||||
| 		std::cout << "RandomX - light memory mode (256 MiB)" << std::endl; | 	else { | ||||||
|  | 		std::cout << " - light memory mode (256 MiB)" << std::endl; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if (jit) { | 	if (jit) { | ||||||
| 		flags = (randomx_flags)(flags | RANDOMX_FLAG_JIT); | 		flags = (randomx_flags)(flags | RANDOMX_FLAG_JIT); | ||||||
| 		std::cout << "RandomX - JIT compiled mode" << std::endl; | 		std::cout << " - JIT compiled mode" << std::endl; | ||||||
| 	} | 	} | ||||||
| 	else { | 	else { | ||||||
| 		std::cout << "RandomX - interpreted mode" << std::endl; | 		std::cout << " - interpreted mode" << std::endl; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if (softAes) { | 	if (softAes) { | ||||||
| 		std::cout << "RandomX - software AES mode" << std::endl; | 		std::cout << " - software AES mode" << std::endl; | ||||||
| 	} | 	} | ||||||
| 	else { | 	else { | ||||||
| 		flags = (randomx_flags)(flags | RANDOMX_FLAG_HARD_AES); | 		flags = (randomx_flags)(flags | RANDOMX_FLAG_HARD_AES); | ||||||
| 		std::cout << "RandomX - hardware AES mode" << std::endl; | 		std::cout << " - hardware AES mode" << std::endl; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if (largePages) { | 	if (largePages) { | ||||||
| 		flags = (randomx_flags)(flags | RANDOMX_FLAG_LARGE_PAGES); | 		flags = (randomx_flags)(flags | RANDOMX_FLAG_LARGE_PAGES); | ||||||
| 		std::cout << "RandomX - large pages mode" << std::endl; | 		std::cout << " - large pages mode" << std::endl; | ||||||
| 	} | 	} | ||||||
| 	else { | 	else { | ||||||
| 		std::cout << "RandomX - small pages mode" << std::endl; | 		std::cout << " - small pages mode" << std::endl; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	std::cout << "Initializing"; | 	std::cout << "Initializing"; | ||||||
| 	if(miningMode) | 	if (miningMode) | ||||||
| 		std::cout << " (" << initThreadCount << " thread" << (initThreadCount > 1 ? "s)" : ")"); | 		std::cout << " (" << initThreadCount << " thread" << (initThreadCount > 1 ? "s)" : ")"); | ||||||
| 	std::cout << " ..." << std::endl; | 	std::cout << " ..." << std::endl; | ||||||
| 
 | 
 | ||||||
| 	try { | 	try { | ||||||
| 		Stopwatch sw(true); | 		Stopwatch sw(true); | ||||||
| 		cache = randomx_alloc_cache(flags); | 		cache = randomx_alloc_cache(flags); | ||||||
|  | 		if (cache == nullptr) { | ||||||
|  | 			std::cout << "ERROR: Cache allocation failed" << std::endl; | ||||||
|  | 			return 1; | ||||||
|  | 		} | ||||||
| 		randomx_init_cache(cache, seed, sizeof(seed)); | 		randomx_init_cache(cache, seed, sizeof(seed)); | ||||||
| 		/*if (randomx::trace) {
 |  | ||||||
| 			std::cout << "Cache: " << std::endl; |  | ||||||
| 			outputHex(std::cout, (char*)dataset.cache.memory, sizeof(__m128i)); |  | ||||||
| 			std::cout << std::endl; |  | ||||||
| 		}*/ |  | ||||||
| 		if (miningMode) { | 		if (miningMode) { | ||||||
| 			dataset = randomx_alloc_dataset(flags); | 			dataset = randomx_alloc_dataset(flags); | ||||||
|  | 			if (dataset == nullptr) { | ||||||
|  | 				std::cout << "ERROR: Dataset allocation failed" << std::endl; | ||||||
|  | 				return 1; | ||||||
|  | 			} | ||||||
| 			if (initThreadCount > 1) { | 			if (initThreadCount > 1) { | ||||||
| 				auto perThread = RANDOMX_DATASET_BLOCKS / initThreadCount; | 				auto perThread = RANDOMX_DATASET_BLOCKS / initThreadCount; | ||||||
| 				auto remainder = RANDOMX_DATASET_BLOCKS % initThreadCount; | 				auto remainder = RANDOMX_DATASET_BLOCKS % initThreadCount; | ||||||
|  | @ -310,7 +195,6 @@ int main(int argc, char** argv) { | ||||||
| 			else { | 			else { | ||||||
| 				randomx_init_dataset(dataset, cache, 0, RANDOMX_DATASET_BLOCKS); | 				randomx_init_dataset(dataset, cache, 0, RANDOMX_DATASET_BLOCKS); | ||||||
| 			} | 			} | ||||||
| 			//dump((const char*)dataset.dataset.memory, RANDOMX_DATASET_SIZE, "dataset.dat");
 |  | ||||||
| 			randomx_release_cache(cache); | 			randomx_release_cache(cache); | ||||||
| 			threads.clear(); | 			threads.clear(); | ||||||
| 		} | 		} | ||||||
|  | @ -324,32 +208,32 @@ int main(int argc, char** argv) { | ||||||
| 				randomx_vm_set_cache(vm, cache); | 				randomx_vm_set_cache(vm, cache); | ||||||
| 			vms.push_back(vm); | 			vms.push_back(vm); | ||||||
| 		} | 		} | ||||||
| 		std::cout << "Running benchmark (" << programCount << " nonces) ..." << std::endl; | 		std::cout << "Running benchmark (" << noncesCount << " nonces) ..." << std::endl; | ||||||
| 		sw.restart(); | 		sw.restart(); | ||||||
| 		if (threadCount > 1) { | 		if (threadCount > 1) { | ||||||
| 			for (unsigned i = 0; i < vms.size(); ++i) { | 			for (unsigned i = 0; i < vms.size(); ++i) { | ||||||
| 				if (softAes) | 				if (softAes) | ||||||
| 					threads.push_back(std::thread(&mine, vms[i], std::ref(atomicNonce), std::ref(result), programCount, i)); | 					threads.push_back(std::thread(&mine, vms[i], std::ref(atomicNonce), std::ref(result), noncesCount, i)); | ||||||
| 				else | 				else | ||||||
| 					threads.push_back(std::thread(&mine, vms[i], std::ref(atomicNonce), std::ref(result), programCount, i)); | 					threads.push_back(std::thread(&mine, vms[i], std::ref(atomicNonce), std::ref(result), noncesCount, i)); | ||||||
| 			} | 			} | ||||||
| 			for (unsigned i = 0; i < threads.size(); ++i) { | 			for (unsigned i = 0; i < threads.size(); ++i) { | ||||||
| 				threads[i].join(); | 				threads[i].join(); | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 		else { | 		else { | ||||||
| 			mine(vms[0], std::ref(atomicNonce), std::ref(result), programCount, 0); | 			mine(vms[0], std::ref(atomicNonce), std::ref(result), noncesCount, 0); | ||||||
| 		} | 		} | ||||||
| 		double elapsed = sw.getElapsed(); | 		double elapsed = sw.getElapsed(); | ||||||
| 		std::cout << "Calculated result: "; | 		std::cout << "Calculated result: "; | ||||||
| 		result.print(std::cout); | 		result.print(std::cout); | ||||||
| 		if(!legacy && programCount == 1000) | 		if (noncesCount == 1000) | ||||||
| 		std::cout << "Reference result:  630ad3bc7f44fe8386462d7b671fa2a1167d3e062bfb9a2967f64832760cfedb" << std::endl; | 			std::cout << "Reference result:  dc34604eed2fbba0e8fae26b2270b90d8aad9466ba39950fd8904248442e850a" << std::endl; | ||||||
| 		if (!miningMode) { | 		if (!miningMode) { | ||||||
| 			std::cout << "Performance: " << 1000 * elapsed / programCount << " ms per hash" << std::endl; | 			std::cout << "Performance: " << 1000 * elapsed / noncesCount << " ms per hash" << std::endl; | ||||||
| 		} | 		} | ||||||
| 		else { | 		else { | ||||||
| 			std::cout << "Performance: " << programCount / elapsed << " hashes per second" << std::endl; | 			std::cout << "Performance: " << noncesCount / elapsed << " hashes per second" << std::endl; | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	catch (std::exception& e) { | 	catch (std::exception& e) { | ||||||
|  | @ -357,4 +241,4 @@ int main(int argc, char** argv) { | ||||||
| 		return 1; | 		return 1; | ||||||
| 	} | 	} | ||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
							
								
								
									
										119
									
								
								src/tests/code-generator.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										119
									
								
								src/tests/code-generator.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,119 @@ | ||||||
|  | /*
 | ||||||
|  | Copyright (c) 2019 tevador | ||||||
|  | 
 | ||||||
|  | This file is part of RandomX. | ||||||
|  | 
 | ||||||
|  | RandomX is free software: you can redistribute it and/or modify | ||||||
|  | it under the terms of the GNU General Public License as published by | ||||||
|  | the Free Software Foundation, either version 3 of the License, or | ||||||
|  | (at your option) any later version. | ||||||
|  | 
 | ||||||
|  | RandomX is distributed in the hope that it will be useful, | ||||||
|  | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||||
|  | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||||||
|  | GNU General Public License for more details. | ||||||
|  | 
 | ||||||
|  | You should have received a copy of the GNU General Public License | ||||||
|  | along with RandomX.  If not, see<http://www.gnu.org/licenses/>.
 | ||||||
|  | */ | ||||||
|  | 
 | ||||||
|  | #include "utility.hpp" | ||||||
|  | #include "../common.hpp" | ||||||
|  | #include "../assembly_generator_x86.hpp" | ||||||
|  | #include "../superscalar.hpp" | ||||||
|  | #include "../aes_hash.hpp" | ||||||
|  | #include "../blake2/blake2.h" | ||||||
|  | #include "../program.hpp" | ||||||
|  | 
 | ||||||
|  | const uint8_t seed[32] = { 191, 182, 222, 175, 249, 89, 134, 104, 241, 68, 191, 62, 162, 166, 61, 64, 123, 191, 227, 193, 118, 60, 188, 53, 223, 133, 175, 24, 123, 230, 55, 74 }; | ||||||
|  | 
 | ||||||
|  | const uint8_t blockTemplate_[] = { | ||||||
|  | 		0x07, 0x07, 0xf7, 0xa4, 0xf0, 0xd6, 0x05, 0xb3, 0x03, 0x26, 0x08, 0x16, 0xba, 0x3f, 0x10, 0x90, 0x2e, 0x1a, 0x14, | ||||||
|  | 		0x5a, 0xc5, 0xfa, 0xd3, 0xaa, 0x3a, 0xf6, 0xea, 0x44, 0xc1, 0x18, 0x69, 0xdc, 0x4f, 0x85, 0x3f, 0x00, 0x2b, 0x2e, | ||||||
|  | 		0xea, 0x00, 0x00, 0x00, 0x00, 0x77, 0xb2, 0x06, 0xa0, 0x2c, 0xa5, 0xb1, 0xd4, 0xce, 0x6b, 0xbf, 0xdf, 0x0a, 0xca, | ||||||
|  | 		0xc3, 0x8b, 0xde, 0xd3, 0x4d, 0x2d, 0xcd, 0xee, 0xf9, 0x5c, 0xd2, 0x0c, 0xef, 0xc1, 0x2f, 0x61, 0xd5, 0x61, 0x09 | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | template<bool softAes> | ||||||
|  | void generateAsm(uint32_t nonce) { | ||||||
|  | 	alignas(16) uint64_t hash[8]; | ||||||
|  | 	uint8_t blockTemplate[sizeof(blockTemplate_)]; | ||||||
|  | 	memcpy(blockTemplate, blockTemplate_, sizeof(blockTemplate)); | ||||||
|  | 	store32(blockTemplate + 39, nonce); | ||||||
|  | 	blake2b(hash, sizeof(hash), blockTemplate, sizeof(blockTemplate), nullptr, 0); | ||||||
|  | 	uint8_t scratchpad[randomx::ScratchpadSize]; | ||||||
|  | 	fillAes1Rx4<softAes>((void*)hash, randomx::ScratchpadSize, scratchpad); | ||||||
|  | 	randomx::AssemblyGeneratorX86 asmX86; | ||||||
|  | 	randomx::Program p; | ||||||
|  | 	fillAes1Rx4<softAes>(hash, sizeof(p), &p); | ||||||
|  | 	asmX86.generateProgram(p); | ||||||
|  | 	asmX86.printCode(std::cout); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | template<bool softAes> | ||||||
|  | void generateNative(uint32_t nonce) { | ||||||
|  | 	alignas(16) uint64_t hash[8]; | ||||||
|  | 	uint8_t blockTemplate[sizeof(blockTemplate_)]; | ||||||
|  | 	memcpy(blockTemplate, blockTemplate_, sizeof(blockTemplate)); | ||||||
|  | 	store32(blockTemplate + 39, nonce); | ||||||
|  | 	blake2b(hash, sizeof(hash), blockTemplate, sizeof(blockTemplate), nullptr, 0); | ||||||
|  | 	uint8_t scratchpad[randomx::ScratchpadSize]; | ||||||
|  | 	fillAes1Rx4<softAes>((void*)hash, randomx::ScratchpadSize, scratchpad); | ||||||
|  | 	alignas(16) randomx::Program prog; | ||||||
|  | 	fillAes1Rx4<softAes>((void*)hash, sizeof(prog), &prog); | ||||||
|  | 	for (int i = 0; i < RANDOMX_PROGRAM_SIZE; ++i) { | ||||||
|  | 		prog(i).dst %= 8; | ||||||
|  | 		prog(i).src %= 8; | ||||||
|  | 	} | ||||||
|  | 	std::cout << prog << std::endl; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void printUsage(const char* executable) { | ||||||
|  | 	std::cout << "Usage: " << executable << " [OPTIONS]" << std::endl; | ||||||
|  | 	std::cout << "Supported options:" << std::endl; | ||||||
|  | 	std::cout << "  --softAes         use software AES (default: x86 AES-NI)" << std::endl; | ||||||
|  | 	std::cout << "  --nonce  N        seed nonce (default: 1000)" << std::endl; | ||||||
|  | 	std::cout << "  --genAsm          generate x86-64 asm code for nonce N" << std::endl; | ||||||
|  | 	std::cout << "  --genNative       generate RandomX code for nonce N" << std::endl; | ||||||
|  | 	std::cout << "  --genSuperscalar  generate superscalar program for nonce N" << std::endl; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | int main(int argc, char** argv) { | ||||||
|  | 	bool softAes, genAsm, genNative, genSuperscalar; | ||||||
|  | 	int nonce; | ||||||
|  | 
 | ||||||
|  | 	readOption("--softAes", argc, argv, softAes); | ||||||
|  | 	readOption("--genAsm", argc, argv, genAsm); | ||||||
|  | 	readIntOption("--nonce", argc, argv, nonce, 1000); | ||||||
|  | 	readOption("--genNative", argc, argv, genNative); | ||||||
|  | 	readOption("--genSuperscalar", argc, argv, genSuperscalar); | ||||||
|  | 
 | ||||||
|  | 	if (genSuperscalar) { | ||||||
|  | 		randomx::SuperscalarProgram p; | ||||||
|  | 		randomx::Blake2Generator gen(seed, nonce); | ||||||
|  | 		randomx::generateSuperscalar(p, gen); | ||||||
|  | 		randomx::AssemblyGeneratorX86 asmX86; | ||||||
|  | 		asmX86.generateAsm(p); | ||||||
|  | 		asmX86.printCode(std::cout); | ||||||
|  | 		return 0; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	if (genAsm) { | ||||||
|  | 		if (softAes) | ||||||
|  | 			generateAsm<true>(nonce); | ||||||
|  | 		else | ||||||
|  | 			generateAsm<false>(nonce); | ||||||
|  | 		return 0; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	if (genNative) { | ||||||
|  | 		if (softAes) | ||||||
|  | 			generateNative<true>(nonce); | ||||||
|  | 		else | ||||||
|  | 			generateNative<false>(nonce); | ||||||
|  | 		return 0; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	printUsage(argv[0]); | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
							
								
								
									
										58
									
								
								src/tests/utility.hpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								src/tests/utility.hpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,58 @@ | ||||||
|  | /*
 | ||||||
|  | Copyright (c) 2019 tevador | ||||||
|  | 
 | ||||||
|  | This file is part of RandomX. | ||||||
|  | 
 | ||||||
|  | RandomX is free software: you can redistribute it and/or modify | ||||||
|  | it under the terms of the GNU General Public License as published by | ||||||
|  | the Free Software Foundation, either version 3 of the License, or | ||||||
|  | (at your option) any later version. | ||||||
|  | 
 | ||||||
|  | RandomX is distributed in the hope that it will be useful, | ||||||
|  | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||||
|  | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||||||
|  | GNU General Public License for more details. | ||||||
|  | 
 | ||||||
|  | You should have received a copy of the GNU General Public License | ||||||
|  | along with RandomX.  If not, see<http://www.gnu.org/licenses/>.
 | ||||||
|  | */ | ||||||
|  | 
 | ||||||
|  | #pragma once | ||||||
|  | 
 | ||||||
|  | #include <cstring> | ||||||
|  | #include <cstdlib> | ||||||
|  | #include <iostream> | ||||||
|  | 
 | ||||||
|  | inline void dump(const char* buffer, uint64_t count, const char* name) { | ||||||
|  | 	std::ofstream fout(name, std::ios::out | std::ios::binary); | ||||||
|  | 	fout.write(buffer, count); | ||||||
|  | 	fout.close(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | inline void readOption(const char* option, int argc, char** argv, bool& out) { | ||||||
|  | 	for (int i = 0; i < argc; ++i) { | ||||||
|  | 		if (strcmp(argv[i], option) == 0) { | ||||||
|  | 			out = true; | ||||||
|  | 			return; | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	out = false; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | inline void readIntOption(const char* option, int argc, char** argv, int& out, int defaultValue) { | ||||||
|  | 	for (int i = 0; i < argc - 1; ++i) { | ||||||
|  | 		if (strcmp(argv[i], option) == 0 && (out = atoi(argv[i + 1])) > 0) { | ||||||
|  | 			return; | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	out = defaultValue; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | inline void readInt(int argc, char** argv, int& out, int defaultValue) { | ||||||
|  | 	for (int i = 0; i < argc; ++i) { | ||||||
|  | 		if (*argv[i] != '-' && (out = atoi(argv[i])) > 0) { | ||||||
|  | 			return; | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	out = defaultValue; | ||||||
|  | } | ||||||
|  | @ -61,6 +61,6 @@ namespace randomx { | ||||||
| 
 | 
 | ||||||
| 	using CompiledVmDefault = CompiledVm<AlignedAllocator<CacheLineSize>, true>; | 	using CompiledVmDefault = CompiledVm<AlignedAllocator<CacheLineSize>, true>; | ||||||
| 	using CompiledVmHardAes = CompiledVm<AlignedAllocator<CacheLineSize>, false>; | 	using CompiledVmHardAes = CompiledVm<AlignedAllocator<CacheLineSize>, false>; | ||||||
| 	using CompiledVmLargePage = CompiledVm<LargePageAllocator, false>; | 	using CompiledVmLargePage = CompiledVm<LargePageAllocator, true>; | ||||||
| 	using CompiledVmLargePageHardAes = CompiledVm<LargePageAllocator, true>; | 	using CompiledVmLargePageHardAes = CompiledVm<LargePageAllocator, false>; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -48,6 +48,6 @@ namespace randomx { | ||||||
| 
 | 
 | ||||||
| 	using CompiledLightVmDefault = CompiledLightVm<AlignedAllocator<CacheLineSize>, true>; | 	using CompiledLightVmDefault = CompiledLightVm<AlignedAllocator<CacheLineSize>, true>; | ||||||
| 	using CompiledLightVmHardAes = CompiledLightVm<AlignedAllocator<CacheLineSize>, false>; | 	using CompiledLightVmHardAes = CompiledLightVm<AlignedAllocator<CacheLineSize>, false>; | ||||||
| 	using CompiledLightVmLargePage = CompiledLightVm<LargePageAllocator, false>; | 	using CompiledLightVmLargePage = CompiledLightVm<LargePageAllocator, true>; | ||||||
| 	using CompiledLightVmLargePageHardAes = CompiledLightVm<LargePageAllocator, true>; | 	using CompiledLightVmLargePageHardAes = CompiledLightVm<LargePageAllocator, false>; | ||||||
| } | } | ||||||
|  | @ -85,6 +85,6 @@ namespace randomx { | ||||||
| 
 | 
 | ||||||
| 	using InterpretedVmDefault = InterpretedVm<AlignedAllocator<CacheLineSize>, true>; | 	using InterpretedVmDefault = InterpretedVm<AlignedAllocator<CacheLineSize>, true>; | ||||||
| 	using InterpretedVmHardAes = InterpretedVm<AlignedAllocator<CacheLineSize>, false>; | 	using InterpretedVmHardAes = InterpretedVm<AlignedAllocator<CacheLineSize>, false>; | ||||||
| 	using InterpretedVmLargePage = InterpretedVm<LargePageAllocator, false>; | 	using InterpretedVmLargePage = InterpretedVm<LargePageAllocator, true>; | ||||||
| 	using InterpretedVmLargePageHardAes = InterpretedVm<LargePageAllocator, true>; | 	using InterpretedVmLargePageHardAes = InterpretedVm<LargePageAllocator, false>; | ||||||
| } | } | ||||||
|  | @ -47,6 +47,6 @@ namespace randomx { | ||||||
| 
 | 
 | ||||||
| 	using InterpretedLightVmDefault = InterpretedLightVm<AlignedAllocator<CacheLineSize>, true>; | 	using InterpretedLightVmDefault = InterpretedLightVm<AlignedAllocator<CacheLineSize>, true>; | ||||||
| 	using InterpretedLightVmHardAes = InterpretedLightVm<AlignedAllocator<CacheLineSize>, false>; | 	using InterpretedLightVmHardAes = InterpretedLightVm<AlignedAllocator<CacheLineSize>, false>; | ||||||
| 	using InterpretedLightVmLargePage = InterpretedLightVm<LargePageAllocator, false>; | 	using InterpretedLightVmLargePage = InterpretedLightVm<LargePageAllocator, true>; | ||||||
| 	using InterpretedLightVmLargePageHardAes = InterpretedLightVm<LargePageAllocator, true>; | 	using InterpretedLightVmLargePageHardAes = InterpretedLightVm<LargePageAllocator, false>; | ||||||
| } | } | ||||||
|  |  | ||||||
							
								
								
									
										131
									
								
								vcxproj/api-example1.vcxproj
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										131
									
								
								vcxproj/api-example1.vcxproj
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,131 @@ | ||||||
|  | <?xml version="1.0" encoding="utf-8"?> | ||||||
|  | <Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||||||
|  |   <ItemGroup Label="ProjectConfigurations"> | ||||||
|  |     <ProjectConfiguration Include="Debug|Win32"> | ||||||
|  |       <Configuration>Debug</Configuration> | ||||||
|  |       <Platform>Win32</Platform> | ||||||
|  |     </ProjectConfiguration> | ||||||
|  |     <ProjectConfiguration Include="Release|Win32"> | ||||||
|  |       <Configuration>Release</Configuration> | ||||||
|  |       <Platform>Win32</Platform> | ||||||
|  |     </ProjectConfiguration> | ||||||
|  |     <ProjectConfiguration Include="Debug|x64"> | ||||||
|  |       <Configuration>Debug</Configuration> | ||||||
|  |       <Platform>x64</Platform> | ||||||
|  |     </ProjectConfiguration> | ||||||
|  |     <ProjectConfiguration Include="Release|x64"> | ||||||
|  |       <Configuration>Release</Configuration> | ||||||
|  |       <Platform>x64</Platform> | ||||||
|  |     </ProjectConfiguration> | ||||||
|  |   </ItemGroup> | ||||||
|  |   <PropertyGroup Label="Globals"> | ||||||
|  |     <VCProjectVersion>15.0</VCProjectVersion> | ||||||
|  |     <ProjectGuid>{83EA3E54-5D91-4E01-8EF6-C1E718334F83}</ProjectGuid> | ||||||
|  |     <RootNamespace>apiexample1</RootNamespace> | ||||||
|  |     <WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion> | ||||||
|  |   </PropertyGroup> | ||||||
|  |   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> | ||||||
|  |   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> | ||||||
|  |     <ConfigurationType>Application</ConfigurationType> | ||||||
|  |     <UseDebugLibraries>true</UseDebugLibraries> | ||||||
|  |     <PlatformToolset>v141</PlatformToolset> | ||||||
|  |     <CharacterSet>MultiByte</CharacterSet> | ||||||
|  |   </PropertyGroup> | ||||||
|  |   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> | ||||||
|  |     <ConfigurationType>Application</ConfigurationType> | ||||||
|  |     <UseDebugLibraries>false</UseDebugLibraries> | ||||||
|  |     <PlatformToolset>v141</PlatformToolset> | ||||||
|  |     <WholeProgramOptimization>true</WholeProgramOptimization> | ||||||
|  |     <CharacterSet>MultiByte</CharacterSet> | ||||||
|  |   </PropertyGroup> | ||||||
|  |   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> | ||||||
|  |     <ConfigurationType>Application</ConfigurationType> | ||||||
|  |     <UseDebugLibraries>true</UseDebugLibraries> | ||||||
|  |     <PlatformToolset>v141</PlatformToolset> | ||||||
|  |     <CharacterSet>MultiByte</CharacterSet> | ||||||
|  |   </PropertyGroup> | ||||||
|  |   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> | ||||||
|  |     <ConfigurationType>Application</ConfigurationType> | ||||||
|  |     <UseDebugLibraries>false</UseDebugLibraries> | ||||||
|  |     <PlatformToolset>v141</PlatformToolset> | ||||||
|  |     <WholeProgramOptimization>true</WholeProgramOptimization> | ||||||
|  |     <CharacterSet>MultiByte</CharacterSet> | ||||||
|  |   </PropertyGroup> | ||||||
|  |   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> | ||||||
|  |   <ImportGroup Label="ExtensionSettings"> | ||||||
|  |   </ImportGroup> | ||||||
|  |   <ImportGroup Label="Shared"> | ||||||
|  |   </ImportGroup> | ||||||
|  |   <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> | ||||||
|  |     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> | ||||||
|  |   </ImportGroup> | ||||||
|  |   <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> | ||||||
|  |     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> | ||||||
|  |   </ImportGroup> | ||||||
|  |   <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> | ||||||
|  |     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> | ||||||
|  |   </ImportGroup> | ||||||
|  |   <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> | ||||||
|  |     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> | ||||||
|  |   </ImportGroup> | ||||||
|  |   <PropertyGroup Label="UserMacros" /> | ||||||
|  |   <PropertyGroup /> | ||||||
|  |   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> | ||||||
|  |     <ClCompile> | ||||||
|  |       <WarningLevel>Level3</WarningLevel> | ||||||
|  |       <Optimization>MaxSpeed</Optimization> | ||||||
|  |       <FunctionLevelLinking>true</FunctionLevelLinking> | ||||||
|  |       <IntrinsicFunctions>true</IntrinsicFunctions> | ||||||
|  |       <SDLCheck>true</SDLCheck> | ||||||
|  |       <ConformanceMode>true</ConformanceMode> | ||||||
|  |     </ClCompile> | ||||||
|  |     <Link> | ||||||
|  |       <EnableCOMDATFolding>true</EnableCOMDATFolding> | ||||||
|  |       <OptimizeReferences>true</OptimizeReferences> | ||||||
|  |     </Link> | ||||||
|  |   </ItemDefinitionGroup> | ||||||
|  |   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> | ||||||
|  |     <ClCompile> | ||||||
|  |       <WarningLevel>Level3</WarningLevel> | ||||||
|  |       <Optimization>Disabled</Optimization> | ||||||
|  |       <SDLCheck>true</SDLCheck> | ||||||
|  |       <ConformanceMode>true</ConformanceMode> | ||||||
|  |     </ClCompile> | ||||||
|  |   </ItemDefinitionGroup> | ||||||
|  |   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> | ||||||
|  |     <ClCompile> | ||||||
|  |       <WarningLevel>Level3</WarningLevel> | ||||||
|  |       <Optimization>Disabled</Optimization> | ||||||
|  |       <SDLCheck>true</SDLCheck> | ||||||
|  |       <ConformanceMode>true</ConformanceMode> | ||||||
|  |     </ClCompile> | ||||||
|  |   </ItemDefinitionGroup> | ||||||
|  |   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> | ||||||
|  |     <ClCompile> | ||||||
|  |       <WarningLevel>Level3</WarningLevel> | ||||||
|  |       <Optimization>MaxSpeed</Optimization> | ||||||
|  |       <FunctionLevelLinking>true</FunctionLevelLinking> | ||||||
|  |       <IntrinsicFunctions>true</IntrinsicFunctions> | ||||||
|  |       <SDLCheck>true</SDLCheck> | ||||||
|  |       <ConformanceMode>true</ConformanceMode> | ||||||
|  |     </ClCompile> | ||||||
|  |     <Link> | ||||||
|  |       <EnableCOMDATFolding>true</EnableCOMDATFolding> | ||||||
|  |       <OptimizeReferences>true</OptimizeReferences> | ||||||
|  |     </Link> | ||||||
|  |   </ItemDefinitionGroup> | ||||||
|  |   <ItemGroup> | ||||||
|  |     <ProjectReference Include="randomx.vcxproj"> | ||||||
|  |       <Project>{3346a4ad-c438-4324-8b77-47a16452954b}</Project> | ||||||
|  |     </ProjectReference> | ||||||
|  |   </ItemGroup> | ||||||
|  |   <ItemGroup> | ||||||
|  |     <ClCompile Include="..\src\tests\api-example1.c" /> | ||||||
|  |   </ItemGroup> | ||||||
|  |   <ItemGroup> | ||||||
|  |     <ClInclude Include="..\src\randomx.h" /> | ||||||
|  |   </ItemGroup> | ||||||
|  |   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> | ||||||
|  |   <ImportGroup Label="ExtensionTargets"> | ||||||
|  |   </ImportGroup> | ||||||
|  | </Project> | ||||||
							
								
								
									
										27
									
								
								vcxproj/api-example1.vcxproj.filters
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								vcxproj/api-example1.vcxproj.filters
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,27 @@ | ||||||
|  | <?xml version="1.0" encoding="utf-8"?> | ||||||
|  | <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||||||
|  |   <ItemGroup> | ||||||
|  |     <Filter Include="Source Files"> | ||||||
|  |       <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier> | ||||||
|  |       <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions> | ||||||
|  |     </Filter> | ||||||
|  |     <Filter Include="Header Files"> | ||||||
|  |       <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier> | ||||||
|  |       <Extensions>h;hh;hpp;hxx;hm;inl;inc;ipp;xsd</Extensions> | ||||||
|  |     </Filter> | ||||||
|  |     <Filter Include="Resource Files"> | ||||||
|  |       <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier> | ||||||
|  |       <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions> | ||||||
|  |     </Filter> | ||||||
|  |   </ItemGroup> | ||||||
|  |   <ItemGroup> | ||||||
|  |     <ClCompile Include="..\src\tests\api-example1.c"> | ||||||
|  |       <Filter>Source Files</Filter> | ||||||
|  |     </ClCompile> | ||||||
|  |   </ItemGroup> | ||||||
|  |   <ItemGroup> | ||||||
|  |     <ClInclude Include="..\src\randomx.h"> | ||||||
|  |       <Filter>Header Files</Filter> | ||||||
|  |     </ClInclude> | ||||||
|  |   </ItemGroup> | ||||||
|  | </Project> | ||||||
							
								
								
									
										128
									
								
								vcxproj/api-example2.vcxproj
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										128
									
								
								vcxproj/api-example2.vcxproj
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,128 @@ | ||||||
|  | <?xml version="1.0" encoding="utf-8"?> | ||||||
|  | <Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||||||
|  |   <ItemGroup Label="ProjectConfigurations"> | ||||||
|  |     <ProjectConfiguration Include="Debug|Win32"> | ||||||
|  |       <Configuration>Debug</Configuration> | ||||||
|  |       <Platform>Win32</Platform> | ||||||
|  |     </ProjectConfiguration> | ||||||
|  |     <ProjectConfiguration Include="Release|Win32"> | ||||||
|  |       <Configuration>Release</Configuration> | ||||||
|  |       <Platform>Win32</Platform> | ||||||
|  |     </ProjectConfiguration> | ||||||
|  |     <ProjectConfiguration Include="Debug|x64"> | ||||||
|  |       <Configuration>Debug</Configuration> | ||||||
|  |       <Platform>x64</Platform> | ||||||
|  |     </ProjectConfiguration> | ||||||
|  |     <ProjectConfiguration Include="Release|x64"> | ||||||
|  |       <Configuration>Release</Configuration> | ||||||
|  |       <Platform>x64</Platform> | ||||||
|  |     </ProjectConfiguration> | ||||||
|  |   </ItemGroup> | ||||||
|  |   <PropertyGroup Label="Globals"> | ||||||
|  |     <VCProjectVersion>15.0</VCProjectVersion> | ||||||
|  |     <ProjectGuid>{44947B9C-E6B1-4C06-BD01-F8EF43B59223}</ProjectGuid> | ||||||
|  |     <RootNamespace>apiexample2</RootNamespace> | ||||||
|  |     <WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion> | ||||||
|  |   </PropertyGroup> | ||||||
|  |   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> | ||||||
|  |   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> | ||||||
|  |     <ConfigurationType>Application</ConfigurationType> | ||||||
|  |     <UseDebugLibraries>true</UseDebugLibraries> | ||||||
|  |     <PlatformToolset>v141</PlatformToolset> | ||||||
|  |     <CharacterSet>MultiByte</CharacterSet> | ||||||
|  |   </PropertyGroup> | ||||||
|  |   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> | ||||||
|  |     <ConfigurationType>Application</ConfigurationType> | ||||||
|  |     <UseDebugLibraries>false</UseDebugLibraries> | ||||||
|  |     <PlatformToolset>v141</PlatformToolset> | ||||||
|  |     <WholeProgramOptimization>true</WholeProgramOptimization> | ||||||
|  |     <CharacterSet>MultiByte</CharacterSet> | ||||||
|  |   </PropertyGroup> | ||||||
|  |   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> | ||||||
|  |     <ConfigurationType>Application</ConfigurationType> | ||||||
|  |     <UseDebugLibraries>true</UseDebugLibraries> | ||||||
|  |     <PlatformToolset>v141</PlatformToolset> | ||||||
|  |     <CharacterSet>MultiByte</CharacterSet> | ||||||
|  |   </PropertyGroup> | ||||||
|  |   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> | ||||||
|  |     <ConfigurationType>Application</ConfigurationType> | ||||||
|  |     <UseDebugLibraries>false</UseDebugLibraries> | ||||||
|  |     <PlatformToolset>v141</PlatformToolset> | ||||||
|  |     <WholeProgramOptimization>true</WholeProgramOptimization> | ||||||
|  |     <CharacterSet>MultiByte</CharacterSet> | ||||||
|  |   </PropertyGroup> | ||||||
|  |   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> | ||||||
|  |   <ImportGroup Label="ExtensionSettings"> | ||||||
|  |   </ImportGroup> | ||||||
|  |   <ImportGroup Label="Shared"> | ||||||
|  |   </ImportGroup> | ||||||
|  |   <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> | ||||||
|  |     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> | ||||||
|  |   </ImportGroup> | ||||||
|  |   <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> | ||||||
|  |     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> | ||||||
|  |   </ImportGroup> | ||||||
|  |   <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> | ||||||
|  |     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> | ||||||
|  |   </ImportGroup> | ||||||
|  |   <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> | ||||||
|  |     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> | ||||||
|  |   </ImportGroup> | ||||||
|  |   <PropertyGroup Label="UserMacros" /> | ||||||
|  |   <PropertyGroup /> | ||||||
|  |   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> | ||||||
|  |     <ClCompile> | ||||||
|  |       <WarningLevel>Level3</WarningLevel> | ||||||
|  |       <Optimization>MaxSpeed</Optimization> | ||||||
|  |       <FunctionLevelLinking>true</FunctionLevelLinking> | ||||||
|  |       <IntrinsicFunctions>true</IntrinsicFunctions> | ||||||
|  |       <SDLCheck>false</SDLCheck> | ||||||
|  |       <ConformanceMode>true</ConformanceMode> | ||||||
|  |     </ClCompile> | ||||||
|  |     <Link> | ||||||
|  |       <EnableCOMDATFolding>true</EnableCOMDATFolding> | ||||||
|  |       <OptimizeReferences>true</OptimizeReferences> | ||||||
|  |     </Link> | ||||||
|  |   </ItemDefinitionGroup> | ||||||
|  |   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> | ||||||
|  |     <ClCompile> | ||||||
|  |       <WarningLevel>Level3</WarningLevel> | ||||||
|  |       <Optimization>Disabled</Optimization> | ||||||
|  |       <SDLCheck>true</SDLCheck> | ||||||
|  |       <ConformanceMode>true</ConformanceMode> | ||||||
|  |     </ClCompile> | ||||||
|  |   </ItemDefinitionGroup> | ||||||
|  |   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> | ||||||
|  |     <ClCompile> | ||||||
|  |       <WarningLevel>Level3</WarningLevel> | ||||||
|  |       <Optimization>Disabled</Optimization> | ||||||
|  |       <SDLCheck>true</SDLCheck> | ||||||
|  |       <ConformanceMode>true</ConformanceMode> | ||||||
|  |     </ClCompile> | ||||||
|  |   </ItemDefinitionGroup> | ||||||
|  |   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> | ||||||
|  |     <ClCompile> | ||||||
|  |       <WarningLevel>Level3</WarningLevel> | ||||||
|  |       <Optimization>MaxSpeed</Optimization> | ||||||
|  |       <FunctionLevelLinking>true</FunctionLevelLinking> | ||||||
|  |       <IntrinsicFunctions>true</IntrinsicFunctions> | ||||||
|  |       <SDLCheck>true</SDLCheck> | ||||||
|  |       <ConformanceMode>true</ConformanceMode> | ||||||
|  |     </ClCompile> | ||||||
|  |     <Link> | ||||||
|  |       <EnableCOMDATFolding>true</EnableCOMDATFolding> | ||||||
|  |       <OptimizeReferences>true</OptimizeReferences> | ||||||
|  |     </Link> | ||||||
|  |   </ItemDefinitionGroup> | ||||||
|  |   <ItemGroup> | ||||||
|  |     <ProjectReference Include="randomx.vcxproj"> | ||||||
|  |       <Project>{3346a4ad-c438-4324-8b77-47a16452954b}</Project> | ||||||
|  |     </ProjectReference> | ||||||
|  |   </ItemGroup> | ||||||
|  |   <ItemGroup> | ||||||
|  |     <ClCompile Include="..\src\tests\api-example2.cpp" /> | ||||||
|  |   </ItemGroup> | ||||||
|  |   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> | ||||||
|  |   <ImportGroup Label="ExtensionTargets"> | ||||||
|  |   </ImportGroup> | ||||||
|  | </Project> | ||||||
							
								
								
									
										22
									
								
								vcxproj/api-example2.vcxproj.filters
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								vcxproj/api-example2.vcxproj.filters
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,22 @@ | ||||||
|  | <?xml version="1.0" encoding="utf-8"?> | ||||||
|  | <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||||||
|  |   <ItemGroup> | ||||||
|  |     <Filter Include="Source Files"> | ||||||
|  |       <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier> | ||||||
|  |       <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions> | ||||||
|  |     </Filter> | ||||||
|  |     <Filter Include="Header Files"> | ||||||
|  |       <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier> | ||||||
|  |       <Extensions>h;hh;hpp;hxx;hm;inl;inc;ipp;xsd</Extensions> | ||||||
|  |     </Filter> | ||||||
|  |     <Filter Include="Resource Files"> | ||||||
|  |       <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier> | ||||||
|  |       <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions> | ||||||
|  |     </Filter> | ||||||
|  |   </ItemGroup> | ||||||
|  |   <ItemGroup> | ||||||
|  |     <ClCompile Include="..\src\tests\api-example2.cpp"> | ||||||
|  |       <Filter>Source Files</Filter> | ||||||
|  |     </ClCompile> | ||||||
|  |   </ItemGroup> | ||||||
|  | </Project> | ||||||
							
								
								
									
										131
									
								
								vcxproj/benchmark.vcxproj
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										131
									
								
								vcxproj/benchmark.vcxproj
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,131 @@ | ||||||
|  | <?xml version="1.0" encoding="utf-8"?> | ||||||
|  | <Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||||||
|  |   <ItemGroup Label="ProjectConfigurations"> | ||||||
|  |     <ProjectConfiguration Include="Debug|Win32"> | ||||||
|  |       <Configuration>Debug</Configuration> | ||||||
|  |       <Platform>Win32</Platform> | ||||||
|  |     </ProjectConfiguration> | ||||||
|  |     <ProjectConfiguration Include="Release|Win32"> | ||||||
|  |       <Configuration>Release</Configuration> | ||||||
|  |       <Platform>Win32</Platform> | ||||||
|  |     </ProjectConfiguration> | ||||||
|  |     <ProjectConfiguration Include="Debug|x64"> | ||||||
|  |       <Configuration>Debug</Configuration> | ||||||
|  |       <Platform>x64</Platform> | ||||||
|  |     </ProjectConfiguration> | ||||||
|  |     <ProjectConfiguration Include="Release|x64"> | ||||||
|  |       <Configuration>Release</Configuration> | ||||||
|  |       <Platform>x64</Platform> | ||||||
|  |     </ProjectConfiguration> | ||||||
|  |   </ItemGroup> | ||||||
|  |   <PropertyGroup Label="Globals"> | ||||||
|  |     <VCProjectVersion>15.0</VCProjectVersion> | ||||||
|  |     <ProjectGuid>{1E8A2E2F-9F9F-43AA-BB19-9107FEC64A70}</ProjectGuid> | ||||||
|  |     <RootNamespace>benchmark</RootNamespace> | ||||||
|  |     <WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion> | ||||||
|  |   </PropertyGroup> | ||||||
|  |   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> | ||||||
|  |   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> | ||||||
|  |     <ConfigurationType>Application</ConfigurationType> | ||||||
|  |     <UseDebugLibraries>true</UseDebugLibraries> | ||||||
|  |     <PlatformToolset>v141</PlatformToolset> | ||||||
|  |     <CharacterSet>MultiByte</CharacterSet> | ||||||
|  |   </PropertyGroup> | ||||||
|  |   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> | ||||||
|  |     <ConfigurationType>Application</ConfigurationType> | ||||||
|  |     <UseDebugLibraries>false</UseDebugLibraries> | ||||||
|  |     <PlatformToolset>v141</PlatformToolset> | ||||||
|  |     <WholeProgramOptimization>true</WholeProgramOptimization> | ||||||
|  |     <CharacterSet>MultiByte</CharacterSet> | ||||||
|  |   </PropertyGroup> | ||||||
|  |   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> | ||||||
|  |     <ConfigurationType>Application</ConfigurationType> | ||||||
|  |     <UseDebugLibraries>true</UseDebugLibraries> | ||||||
|  |     <PlatformToolset>v141</PlatformToolset> | ||||||
|  |     <CharacterSet>MultiByte</CharacterSet> | ||||||
|  |   </PropertyGroup> | ||||||
|  |   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> | ||||||
|  |     <ConfigurationType>Application</ConfigurationType> | ||||||
|  |     <UseDebugLibraries>false</UseDebugLibraries> | ||||||
|  |     <PlatformToolset>v141</PlatformToolset> | ||||||
|  |     <WholeProgramOptimization>true</WholeProgramOptimization> | ||||||
|  |     <CharacterSet>MultiByte</CharacterSet> | ||||||
|  |   </PropertyGroup> | ||||||
|  |   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> | ||||||
|  |   <ImportGroup Label="ExtensionSettings"> | ||||||
|  |   </ImportGroup> | ||||||
|  |   <ImportGroup Label="Shared"> | ||||||
|  |   </ImportGroup> | ||||||
|  |   <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> | ||||||
|  |     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> | ||||||
|  |   </ImportGroup> | ||||||
|  |   <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> | ||||||
|  |     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> | ||||||
|  |   </ImportGroup> | ||||||
|  |   <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> | ||||||
|  |     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> | ||||||
|  |   </ImportGroup> | ||||||
|  |   <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> | ||||||
|  |     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> | ||||||
|  |   </ImportGroup> | ||||||
|  |   <PropertyGroup Label="UserMacros" /> | ||||||
|  |   <PropertyGroup /> | ||||||
|  |   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> | ||||||
|  |     <ClCompile> | ||||||
|  |       <WarningLevel>Level3</WarningLevel> | ||||||
|  |       <Optimization>MaxSpeed</Optimization> | ||||||
|  |       <FunctionLevelLinking>true</FunctionLevelLinking> | ||||||
|  |       <IntrinsicFunctions>true</IntrinsicFunctions> | ||||||
|  |       <SDLCheck>false</SDLCheck> | ||||||
|  |       <ConformanceMode>true</ConformanceMode> | ||||||
|  |     </ClCompile> | ||||||
|  |     <Link> | ||||||
|  |       <EnableCOMDATFolding>true</EnableCOMDATFolding> | ||||||
|  |       <OptimizeReferences>true</OptimizeReferences> | ||||||
|  |     </Link> | ||||||
|  |   </ItemDefinitionGroup> | ||||||
|  |   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> | ||||||
|  |     <ClCompile> | ||||||
|  |       <WarningLevel>Level3</WarningLevel> | ||||||
|  |       <Optimization>Disabled</Optimization> | ||||||
|  |       <SDLCheck>true</SDLCheck> | ||||||
|  |       <ConformanceMode>true</ConformanceMode> | ||||||
|  |     </ClCompile> | ||||||
|  |   </ItemDefinitionGroup> | ||||||
|  |   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> | ||||||
|  |     <ClCompile> | ||||||
|  |       <WarningLevel>Level3</WarningLevel> | ||||||
|  |       <Optimization>Disabled</Optimization> | ||||||
|  |       <SDLCheck>true</SDLCheck> | ||||||
|  |       <ConformanceMode>true</ConformanceMode> | ||||||
|  |     </ClCompile> | ||||||
|  |   </ItemDefinitionGroup> | ||||||
|  |   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> | ||||||
|  |     <ClCompile> | ||||||
|  |       <WarningLevel>Level3</WarningLevel> | ||||||
|  |       <Optimization>MaxSpeed</Optimization> | ||||||
|  |       <FunctionLevelLinking>true</FunctionLevelLinking> | ||||||
|  |       <IntrinsicFunctions>true</IntrinsicFunctions> | ||||||
|  |       <SDLCheck>true</SDLCheck> | ||||||
|  |       <ConformanceMode>true</ConformanceMode> | ||||||
|  |     </ClCompile> | ||||||
|  |     <Link> | ||||||
|  |       <EnableCOMDATFolding>true</EnableCOMDATFolding> | ||||||
|  |       <OptimizeReferences>true</OptimizeReferences> | ||||||
|  |     </Link> | ||||||
|  |   </ItemDefinitionGroup> | ||||||
|  |   <ItemGroup> | ||||||
|  |     <ClCompile Include="..\src\tests\benchmark.cpp" /> | ||||||
|  |   </ItemGroup> | ||||||
|  |   <ItemGroup> | ||||||
|  |     <ProjectReference Include="randomx.vcxproj"> | ||||||
|  |       <Project>{3346a4ad-c438-4324-8b77-47a16452954b}</Project> | ||||||
|  |     </ProjectReference> | ||||||
|  |   </ItemGroup> | ||||||
|  |   <ItemGroup> | ||||||
|  |     <ClInclude Include="..\src\tests\utility.hpp" /> | ||||||
|  |   </ItemGroup> | ||||||
|  |   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> | ||||||
|  |   <ImportGroup Label="ExtensionTargets"> | ||||||
|  |   </ImportGroup> | ||||||
|  | </Project> | ||||||
							
								
								
									
										27
									
								
								vcxproj/benchmark.vcxproj.filters
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								vcxproj/benchmark.vcxproj.filters
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,27 @@ | ||||||
|  | <?xml version="1.0" encoding="utf-8"?> | ||||||
|  | <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||||||
|  |   <ItemGroup> | ||||||
|  |     <Filter Include="Source Files"> | ||||||
|  |       <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier> | ||||||
|  |       <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions> | ||||||
|  |     </Filter> | ||||||
|  |     <Filter Include="Header Files"> | ||||||
|  |       <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier> | ||||||
|  |       <Extensions>h;hh;hpp;hxx;hm;inl;inc;ipp;xsd</Extensions> | ||||||
|  |     </Filter> | ||||||
|  |     <Filter Include="Resource Files"> | ||||||
|  |       <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier> | ||||||
|  |       <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions> | ||||||
|  |     </Filter> | ||||||
|  |   </ItemGroup> | ||||||
|  |   <ItemGroup> | ||||||
|  |     <ClCompile Include="..\src\tests\benchmark.cpp"> | ||||||
|  |       <Filter>Source Files</Filter> | ||||||
|  |     </ClCompile> | ||||||
|  |   </ItemGroup> | ||||||
|  |   <ItemGroup> | ||||||
|  |     <ClInclude Include="..\src\tests\utility.hpp"> | ||||||
|  |       <Filter>Header Files</Filter> | ||||||
|  |     </ClInclude> | ||||||
|  |   </ItemGroup> | ||||||
|  | </Project> | ||||||
							
								
								
									
										129
									
								
								vcxproj/code-generator.vcxproj
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										129
									
								
								vcxproj/code-generator.vcxproj
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,129 @@ | ||||||
|  | <?xml version="1.0" encoding="utf-8"?> | ||||||
|  | <Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||||||
|  |   <ItemGroup Label="ProjectConfigurations"> | ||||||
|  |     <ProjectConfiguration Include="Debug|Win32"> | ||||||
|  |       <Configuration>Debug</Configuration> | ||||||
|  |       <Platform>Win32</Platform> | ||||||
|  |     </ProjectConfiguration> | ||||||
|  |     <ProjectConfiguration Include="Release|Win32"> | ||||||
|  |       <Configuration>Release</Configuration> | ||||||
|  |       <Platform>Win32</Platform> | ||||||
|  |     </ProjectConfiguration> | ||||||
|  |     <ProjectConfiguration Include="Debug|x64"> | ||||||
|  |       <Configuration>Debug</Configuration> | ||||||
|  |       <Platform>x64</Platform> | ||||||
|  |     </ProjectConfiguration> | ||||||
|  |     <ProjectConfiguration Include="Release|x64"> | ||||||
|  |       <Configuration>Release</Configuration> | ||||||
|  |       <Platform>x64</Platform> | ||||||
|  |     </ProjectConfiguration> | ||||||
|  |   </ItemGroup> | ||||||
|  |   <PropertyGroup Label="Globals"> | ||||||
|  |     <VCProjectVersion>15.0</VCProjectVersion> | ||||||
|  |     <ProjectGuid>{3E490DEC-1874-43AA-92DA-1AC57C217EAC}</ProjectGuid> | ||||||
|  |     <RootNamespace>codegenerator</RootNamespace> | ||||||
|  |     <WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion> | ||||||
|  |   </PropertyGroup> | ||||||
|  |   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> | ||||||
|  |   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> | ||||||
|  |     <ConfigurationType>Application</ConfigurationType> | ||||||
|  |     <UseDebugLibraries>true</UseDebugLibraries> | ||||||
|  |     <PlatformToolset>v141</PlatformToolset> | ||||||
|  |     <CharacterSet>MultiByte</CharacterSet> | ||||||
|  |   </PropertyGroup> | ||||||
|  |   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> | ||||||
|  |     <ConfigurationType>Application</ConfigurationType> | ||||||
|  |     <UseDebugLibraries>false</UseDebugLibraries> | ||||||
|  |     <PlatformToolset>v141</PlatformToolset> | ||||||
|  |     <WholeProgramOptimization>true</WholeProgramOptimization> | ||||||
|  |     <CharacterSet>MultiByte</CharacterSet> | ||||||
|  |   </PropertyGroup> | ||||||
|  |   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> | ||||||
|  |     <ConfigurationType>Application</ConfigurationType> | ||||||
|  |     <UseDebugLibraries>true</UseDebugLibraries> | ||||||
|  |     <PlatformToolset>v141</PlatformToolset> | ||||||
|  |     <CharacterSet>MultiByte</CharacterSet> | ||||||
|  |   </PropertyGroup> | ||||||
|  |   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> | ||||||
|  |     <ConfigurationType>Application</ConfigurationType> | ||||||
|  |     <UseDebugLibraries>false</UseDebugLibraries> | ||||||
|  |     <PlatformToolset>v141</PlatformToolset> | ||||||
|  |     <WholeProgramOptimization>true</WholeProgramOptimization> | ||||||
|  |     <CharacterSet>MultiByte</CharacterSet> | ||||||
|  |   </PropertyGroup> | ||||||
|  |   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> | ||||||
|  |   <ImportGroup Label="ExtensionSettings"> | ||||||
|  |   </ImportGroup> | ||||||
|  |   <ImportGroup Label="Shared"> | ||||||
|  |   </ImportGroup> | ||||||
|  |   <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> | ||||||
|  |     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> | ||||||
|  |   </ImportGroup> | ||||||
|  |   <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> | ||||||
|  |     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> | ||||||
|  |   </ImportGroup> | ||||||
|  |   <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> | ||||||
|  |     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> | ||||||
|  |   </ImportGroup> | ||||||
|  |   <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> | ||||||
|  |     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> | ||||||
|  |   </ImportGroup> | ||||||
|  |   <PropertyGroup Label="UserMacros" /> | ||||||
|  |   <PropertyGroup /> | ||||||
|  |   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> | ||||||
|  |     <ClCompile> | ||||||
|  |       <WarningLevel>Level3</WarningLevel> | ||||||
|  |       <Optimization>MaxSpeed</Optimization> | ||||||
|  |       <FunctionLevelLinking>true</FunctionLevelLinking> | ||||||
|  |       <IntrinsicFunctions>true</IntrinsicFunctions> | ||||||
|  |       <SDLCheck>true</SDLCheck> | ||||||
|  |       <ConformanceMode>true</ConformanceMode> | ||||||
|  |     </ClCompile> | ||||||
|  |     <Link> | ||||||
|  |       <EnableCOMDATFolding>true</EnableCOMDATFolding> | ||||||
|  |       <OptimizeReferences>true</OptimizeReferences> | ||||||
|  |       <StackReserveSize>4194304</StackReserveSize> | ||||||
|  |     </Link> | ||||||
|  |   </ItemDefinitionGroup> | ||||||
|  |   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> | ||||||
|  |     <ClCompile> | ||||||
|  |       <WarningLevel>Level3</WarningLevel> | ||||||
|  |       <Optimization>Disabled</Optimization> | ||||||
|  |       <SDLCheck>true</SDLCheck> | ||||||
|  |       <ConformanceMode>true</ConformanceMode> | ||||||
|  |     </ClCompile> | ||||||
|  |   </ItemDefinitionGroup> | ||||||
|  |   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> | ||||||
|  |     <ClCompile> | ||||||
|  |       <WarningLevel>Level3</WarningLevel> | ||||||
|  |       <Optimization>Disabled</Optimization> | ||||||
|  |       <SDLCheck>true</SDLCheck> | ||||||
|  |       <ConformanceMode>true</ConformanceMode> | ||||||
|  |     </ClCompile> | ||||||
|  |   </ItemDefinitionGroup> | ||||||
|  |   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> | ||||||
|  |     <ClCompile> | ||||||
|  |       <WarningLevel>Level3</WarningLevel> | ||||||
|  |       <Optimization>MaxSpeed</Optimization> | ||||||
|  |       <FunctionLevelLinking>true</FunctionLevelLinking> | ||||||
|  |       <IntrinsicFunctions>true</IntrinsicFunctions> | ||||||
|  |       <SDLCheck>true</SDLCheck> | ||||||
|  |       <ConformanceMode>true</ConformanceMode> | ||||||
|  |     </ClCompile> | ||||||
|  |     <Link> | ||||||
|  |       <EnableCOMDATFolding>true</EnableCOMDATFolding> | ||||||
|  |       <OptimizeReferences>true</OptimizeReferences> | ||||||
|  |     </Link> | ||||||
|  |   </ItemDefinitionGroup> | ||||||
|  |   <ItemGroup> | ||||||
|  |     <ClCompile Include="..\src\tests\code-generator.cpp" /> | ||||||
|  |   </ItemGroup> | ||||||
|  |   <ItemGroup> | ||||||
|  |     <ProjectReference Include="randomx.vcxproj"> | ||||||
|  |       <Project>{3346a4ad-c438-4324-8b77-47a16452954b}</Project> | ||||||
|  |     </ProjectReference> | ||||||
|  |   </ItemGroup> | ||||||
|  |   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> | ||||||
|  |   <ImportGroup Label="ExtensionTargets"> | ||||||
|  |   </ImportGroup> | ||||||
|  | </Project> | ||||||
							
								
								
									
										22
									
								
								vcxproj/code-generator.vcxproj.filters
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								vcxproj/code-generator.vcxproj.filters
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,22 @@ | ||||||
|  | <?xml version="1.0" encoding="utf-8"?> | ||||||
|  | <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||||||
|  |   <ItemGroup> | ||||||
|  |     <Filter Include="Source Files"> | ||||||
|  |       <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier> | ||||||
|  |       <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions> | ||||||
|  |     </Filter> | ||||||
|  |     <Filter Include="Header Files"> | ||||||
|  |       <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier> | ||||||
|  |       <Extensions>h;hh;hpp;hxx;hm;inl;inc;ipp;xsd</Extensions> | ||||||
|  |     </Filter> | ||||||
|  |     <Filter Include="Resource Files"> | ||||||
|  |       <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier> | ||||||
|  |       <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions> | ||||||
|  |     </Filter> | ||||||
|  |   </ItemGroup> | ||||||
|  |   <ItemGroup> | ||||||
|  |     <ClCompile Include="..\src\tests\code-generator.cpp"> | ||||||
|  |       <Filter>Source Files</Filter> | ||||||
|  |     </ClCompile> | ||||||
|  |   </ItemGroup> | ||||||
|  | </Project> | ||||||
|  | @ -45,7 +45,7 @@ | ||||||
|     <CharacterSet>MultiByte</CharacterSet> |     <CharacterSet>MultiByte</CharacterSet> | ||||||
|   </PropertyGroup> |   </PropertyGroup> | ||||||
|   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> |   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> | ||||||
|     <ConfigurationType>Application</ConfigurationType> |     <ConfigurationType>StaticLibrary</ConfigurationType> | ||||||
|     <UseDebugLibraries>false</UseDebugLibraries> |     <UseDebugLibraries>false</UseDebugLibraries> | ||||||
|     <PlatformToolset>v141</PlatformToolset> |     <PlatformToolset>v141</PlatformToolset> | ||||||
|     <WholeProgramOptimization>true</WholeProgramOptimization> |     <WholeProgramOptimization>true</WholeProgramOptimization> | ||||||
|  | @ -141,14 +141,13 @@ | ||||||
|     <ClCompile Include="..\src\jit_compiler_x86.cpp" /> |     <ClCompile Include="..\src\jit_compiler_x86.cpp" /> | ||||||
|     <ClCompile Include="..\src\randomx.cpp" /> |     <ClCompile Include="..\src\randomx.cpp" /> | ||||||
|     <ClCompile Include="..\src\superscalar.cpp" /> |     <ClCompile Include="..\src\superscalar.cpp" /> | ||||||
|     <ClCompile Include="..\src\main.cpp" /> |  | ||||||
|     <ClCompile Include="..\src\reciprocal.c" /> |     <ClCompile Include="..\src\reciprocal.c" /> | ||||||
|     <ClCompile Include="..\src\soft_aes.cpp" /> |     <ClCompile Include="..\src\soft_aes.cpp" /> | ||||||
|     <ClCompile Include="..\src\virtual_machine.cpp" /> |     <ClCompile Include="..\src\virtual_machine.cpp" /> | ||||||
|     <ClCompile Include="..\src\virtual_memory.cpp" /> |     <ClCompile Include="..\src\virtual_memory.cpp" /> | ||||||
|   </ItemGroup> |   </ItemGroup> | ||||||
|   <ItemGroup> |   <ItemGroup> | ||||||
|     <MASM Include="..\src\jit_compiler_x86_staticc.asm" /> |     <MASM Include="..\src\jit_compiler_x86_static.asm" /> | ||||||
|   </ItemGroup> |   </ItemGroup> | ||||||
|   <ItemGroup> |   <ItemGroup> | ||||||
|     <ClInclude Include="..\src\allocator.hpp" /> |     <ClInclude Include="..\src\allocator.hpp" /> | ||||||
|  | @ -156,7 +155,6 @@ | ||||||
|     <ClInclude Include="..\src\argon2_core.h" /> |     <ClInclude Include="..\src\argon2_core.h" /> | ||||||
|     <ClInclude Include="..\src\assembly_generator_x86.hpp" /> |     <ClInclude Include="..\src\assembly_generator_x86.hpp" /> | ||||||
|     <ClInclude Include="..\src\blake2_generator.hpp" /> |     <ClInclude Include="..\src\blake2_generator.hpp" /> | ||||||
|     <ClInclude Include="..\src\catch.hpp" /> |  | ||||||
|     <ClInclude Include="..\src\common.hpp" /> |     <ClInclude Include="..\src\common.hpp" /> | ||||||
|     <ClInclude Include="..\src\vm_compiled_light.hpp" /> |     <ClInclude Include="..\src\vm_compiled_light.hpp" /> | ||||||
|     <ClInclude Include="..\src\vm_compiled.hpp" /> |     <ClInclude Include="..\src\vm_compiled.hpp" /> | ||||||
|  | @ -175,7 +173,6 @@ | ||||||
|     <ClInclude Include="..\src\program.hpp" /> |     <ClInclude Include="..\src\program.hpp" /> | ||||||
|     <ClInclude Include="..\src\reciprocal.h" /> |     <ClInclude Include="..\src\reciprocal.h" /> | ||||||
|     <ClInclude Include="..\src\soft_aes.h" /> |     <ClInclude Include="..\src\soft_aes.h" /> | ||||||
|     <ClInclude Include="..\src\stopwatch.hpp" /> |  | ||||||
|     <ClInclude Include="..\src\superscalar_program.hpp" /> |     <ClInclude Include="..\src\superscalar_program.hpp" /> | ||||||
|     <ClInclude Include="..\src\virtual_machine.hpp" /> |     <ClInclude Include="..\src\virtual_machine.hpp" /> | ||||||
|     <ClInclude Include="..\src\virtual_memory.hpp" /> |     <ClInclude Include="..\src\virtual_memory.hpp" /> | ||||||
|  |  | ||||||
|  | @ -27,9 +27,6 @@ | ||||||
|     <ClCompile Include="..\src\dataset.cpp"> |     <ClCompile Include="..\src\dataset.cpp"> | ||||||
|       <Filter>Source Files</Filter> |       <Filter>Source Files</Filter> | ||||||
|     </ClCompile> |     </ClCompile> | ||||||
|     <ClCompile Include="..\src\main.cpp"> |  | ||||||
|       <Filter>Source Files</Filter> |  | ||||||
|     </ClCompile> |  | ||||||
|     <ClCompile Include="..\src\blake2\blake2b.c"> |     <ClCompile Include="..\src\blake2\blake2b.c"> | ||||||
|       <Filter>Source Files</Filter> |       <Filter>Source Files</Filter> | ||||||
|     </ClCompile> |     </ClCompile> | ||||||
|  | @ -82,11 +79,6 @@ | ||||||
|       <Filter>Source Files</Filter> |       <Filter>Source Files</Filter> | ||||||
|     </ClCompile> |     </ClCompile> | ||||||
|   </ItemGroup> |   </ItemGroup> | ||||||
|   <ItemGroup> |  | ||||||
|     <MASM Include="..\src\jit_compiler_x86_staticc.asm"> |  | ||||||
|       <Filter>Source Files</Filter> |  | ||||||
|     </MASM> |  | ||||||
|   </ItemGroup> |  | ||||||
|   <ItemGroup> |   <ItemGroup> | ||||||
|     <ClInclude Include="..\src\argon2.h"> |     <ClInclude Include="..\src\argon2.h"> | ||||||
|       <Filter>Header Files</Filter> |       <Filter>Header Files</Filter> | ||||||
|  | @ -94,9 +86,6 @@ | ||||||
|     <ClInclude Include="..\src\argon2_core.h"> |     <ClInclude Include="..\src\argon2_core.h"> | ||||||
|       <Filter>Header Files</Filter> |       <Filter>Header Files</Filter> | ||||||
|     </ClInclude> |     </ClInclude> | ||||||
|     <ClInclude Include="..\src\catch.hpp"> |  | ||||||
|       <Filter>Header Files</Filter> |  | ||||||
|     </ClInclude> |  | ||||||
|     <ClInclude Include="..\src\common.hpp"> |     <ClInclude Include="..\src\common.hpp"> | ||||||
|       <Filter>Header Files</Filter> |       <Filter>Header Files</Filter> | ||||||
|     </ClInclude> |     </ClInclude> | ||||||
|  | @ -160,9 +149,6 @@ | ||||||
|     <ClInclude Include="..\src\soft_aes.h"> |     <ClInclude Include="..\src\soft_aes.h"> | ||||||
|       <Filter>Header Files</Filter> |       <Filter>Header Files</Filter> | ||||||
|     </ClInclude> |     </ClInclude> | ||||||
|     <ClInclude Include="..\src\stopwatch.hpp"> |  | ||||||
|       <Filter>Header Files</Filter> |  | ||||||
|     </ClInclude> |  | ||||||
|     <ClInclude Include="..\src\virtual_machine.hpp"> |     <ClInclude Include="..\src\virtual_machine.hpp"> | ||||||
|       <Filter>Header Files</Filter> |       <Filter>Header Files</Filter> | ||||||
|     </ClInclude> |     </ClInclude> | ||||||
|  | @ -173,4 +159,9 @@ | ||||||
|       <Filter>Header Files</Filter> |       <Filter>Header Files</Filter> | ||||||
|     </ClInclude> |     </ClInclude> | ||||||
|   </ItemGroup> |   </ItemGroup> | ||||||
|  |   <ItemGroup> | ||||||
|  |     <MASM Include="..\src\jit_compiler_x86_static.asm"> | ||||||
|  |       <Filter>Source Files</Filter> | ||||||
|  |     </MASM> | ||||||
|  |   </ItemGroup> | ||||||
| </Project> | </Project> | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue