forked from eden-emu/eden
		
	Merge pull request #2785 from yuriks/compile-flags
CMake: Set MSVC flags for improved C++ standards conformance
This commit is contained in:
		
						commit
						7dc72daea9
					
				
					 4 changed files with 21 additions and 20 deletions
				
			
		|  | @ -92,10 +92,13 @@ else() | ||||||
|     # /W3 - Level 3 warnings |     # /W3 - Level 3 warnings | ||||||
|     # /MP - Multi-threaded compilation |     # /MP - Multi-threaded compilation | ||||||
|     # /Zi - Output debugging information |     # /Zi - Output debugging information | ||||||
|     # /Zo - enahnced debug info for optimized builds |     # /Zo - enhanced debug info for optimized builds | ||||||
|     set(CMAKE_C_FLAGS   "/W3 /MP /Zi /Zo" CACHE STRING "" FORCE) |     # /permissive- - enables stricter C++ standards conformance checks | ||||||
|  |     set(CMAKE_C_FLAGS   "/W3 /MP /Zi /Zo /permissive-" CACHE STRING "" FORCE) | ||||||
|     # /EHsc - C++-only exception handling semantics |     # /EHsc - C++-only exception handling semantics | ||||||
|     set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} /EHsc" CACHE STRING "" FORCE) |     # /Zc:throwingNew - let codegen assume `operator new` will never return null | ||||||
|  |     # /Zc:inline - let codegen omit inline functions in object files | ||||||
|  |     set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} /EHsc /Zc:throwingNew,inline" CACHE STRING "" FORCE) | ||||||
| 
 | 
 | ||||||
|     # /MDd - Multi-threaded Debug Runtime DLL |     # /MDd - Multi-threaded Debug Runtime DLL | ||||||
|     set(CMAKE_C_FLAGS_DEBUG   "/Od /MDd" CACHE STRING "" FORCE) |     set(CMAKE_C_FLAGS_DEBUG   "/Od /MDd" CACHE STRING "" FORCE) | ||||||
|  |  | ||||||
							
								
								
									
										4
									
								
								externals/CMakeLists.txt
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								externals/CMakeLists.txt
									
										
									
									
										vendored
									
									
								
							|  | @ -46,7 +46,5 @@ if (ARCHITECTURE_x86_64) | ||||||
|     # Defined before "dynarmic" above |     # Defined before "dynarmic" above | ||||||
|     # add_library(xbyak INTERFACE) |     # add_library(xbyak INTERFACE) | ||||||
|     target_include_directories(xbyak INTERFACE ./xbyak/xbyak) |     target_include_directories(xbyak INTERFACE ./xbyak/xbyak) | ||||||
|     if (NOT MSVC) |     target_compile_definitions(xbyak INTERFACE XBYAK_NO_OP_NAMES) | ||||||
|         target_compile_options(xbyak INTERFACE -fno-operator-names) |  | ||||||
|     endif() |  | ||||||
| endif() | endif() | ||||||
|  |  | ||||||
							
								
								
									
										2
									
								
								externals/dynarmic
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								externals/dynarmic
									
										
									
									
										vendored
									
									
								
							|  | @ -1 +1 @@ | ||||||
| Subproject commit 7707ff13e981b0aecf87f3156ee0b641469f7bb3 | Subproject commit 8f15e3f70cb96e56705e5de6ba97b5d09423a56b | ||||||
|  | @ -321,27 +321,27 @@ void JitShader::Compile_EvaluateCondition(Instruction instr) { | ||||||
|     case Instruction::FlowControlType::Or: |     case Instruction::FlowControlType::Or: | ||||||
|         mov(eax, COND0); |         mov(eax, COND0); | ||||||
|         mov(ebx, COND1); |         mov(ebx, COND1); | ||||||
|         xor(eax, (instr.flow_control.refx.Value() ^ 1)); |         xor_(eax, (instr.flow_control.refx.Value() ^ 1)); | ||||||
|         xor(ebx, (instr.flow_control.refy.Value() ^ 1)); |         xor_(ebx, (instr.flow_control.refy.Value() ^ 1)); | ||||||
|         or (eax, ebx); |         or_(eax, ebx); | ||||||
|         break; |         break; | ||||||
| 
 | 
 | ||||||
|     case Instruction::FlowControlType::And: |     case Instruction::FlowControlType::And: | ||||||
|         mov(eax, COND0); |         mov(eax, COND0); | ||||||
|         mov(ebx, COND1); |         mov(ebx, COND1); | ||||||
|         xor(eax, (instr.flow_control.refx.Value() ^ 1)); |         xor_(eax, (instr.flow_control.refx.Value() ^ 1)); | ||||||
|         xor(ebx, (instr.flow_control.refy.Value() ^ 1)); |         xor_(ebx, (instr.flow_control.refy.Value() ^ 1)); | ||||||
|         and(eax, ebx); |         and_(eax, ebx); | ||||||
|         break; |         break; | ||||||
| 
 | 
 | ||||||
|     case Instruction::FlowControlType::JustX: |     case Instruction::FlowControlType::JustX: | ||||||
|         mov(eax, COND0); |         mov(eax, COND0); | ||||||
|         xor(eax, (instr.flow_control.refx.Value() ^ 1)); |         xor_(eax, (instr.flow_control.refx.Value() ^ 1)); | ||||||
|         break; |         break; | ||||||
| 
 | 
 | ||||||
|     case Instruction::FlowControlType::JustY: |     case Instruction::FlowControlType::JustY: | ||||||
|         mov(eax, COND1); |         mov(eax, COND1); | ||||||
|         xor(eax, (instr.flow_control.refy.Value() ^ 1)); |         xor_(eax, (instr.flow_control.refy.Value() ^ 1)); | ||||||
|         break; |         break; | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | @ -734,10 +734,10 @@ void JitShader::Compile_LOOP(Instruction instr) { | ||||||
|     mov(LOOPCOUNT, dword[SETUP + offset]); |     mov(LOOPCOUNT, dword[SETUP + offset]); | ||||||
|     mov(LOOPCOUNT_REG, LOOPCOUNT); |     mov(LOOPCOUNT_REG, LOOPCOUNT); | ||||||
|     shr(LOOPCOUNT_REG, 4); |     shr(LOOPCOUNT_REG, 4); | ||||||
|     and(LOOPCOUNT_REG, 0xFF0); // Y-component is the start
 |     and_(LOOPCOUNT_REG, 0xFF0); // Y-component is the start
 | ||||||
|     mov(LOOPINC, LOOPCOUNT); |     mov(LOOPINC, LOOPCOUNT); | ||||||
|     shr(LOOPINC, 12); |     shr(LOOPINC, 12); | ||||||
|     and(LOOPINC, 0xFF0);                // Z-component is the incrementer
 |     and_(LOOPINC, 0xFF0);               // Z-component is the incrementer
 | ||||||
|     movzx(LOOPCOUNT, LOOPCOUNT.cvt8()); // X-component is iteration count
 |     movzx(LOOPCOUNT, LOOPCOUNT.cvt8()); // X-component is iteration count
 | ||||||
|     add(LOOPCOUNT, 1);                  // Iteration count is X-component + 1
 |     add(LOOPCOUNT, 1);                  // Iteration count is X-component + 1
 | ||||||
| 
 | 
 | ||||||
|  | @ -858,9 +858,9 @@ void JitShader::Compile(const std::array<u32, MAX_PROGRAM_CODE_LENGTH>* program_ | ||||||
|     mov(STATE, ABI_PARAM2); |     mov(STATE, ABI_PARAM2); | ||||||
| 
 | 
 | ||||||
|     // Zero address/loop  registers
 |     // Zero address/loop  registers
 | ||||||
|     xor(ADDROFFS_REG_0.cvt32(), ADDROFFS_REG_0.cvt32()); |     xor_(ADDROFFS_REG_0.cvt32(), ADDROFFS_REG_0.cvt32()); | ||||||
|     xor(ADDROFFS_REG_1.cvt32(), ADDROFFS_REG_1.cvt32()); |     xor_(ADDROFFS_REG_1.cvt32(), ADDROFFS_REG_1.cvt32()); | ||||||
|     xor(LOOPCOUNT_REG, LOOPCOUNT_REG); |     xor_(LOOPCOUNT_REG, LOOPCOUNT_REG); | ||||||
| 
 | 
 | ||||||
|     // Used to set a register to one
 |     // Used to set a register to one
 | ||||||
|     static const __m128 one = {1.f, 1.f, 1.f, 1.f}; |     static const __m128 one = {1.f, 1.f, 1.f, 1.f}; | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Yuri Kunde Schlesner
						Yuri Kunde Schlesner