diff options
| -rw-r--r-- | CMakeLists.txt | 9 | ||||
| -rw-r--r-- | externals/CMakeLists.txt | 4 | ||||
| m--------- | externals/dynarmic | 0 | ||||
| -rw-r--r-- | src/video_core/shader/shader_jit_x64_compiler.cpp | 26 | 
4 files changed, 20 insertions, 19 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 1f0af2d41..a61dee6e0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -92,10 +92,13 @@ else()      # /W3 - Level 3 warnings      # /MP - Multi-threaded compilation      # /Zi - Output debugging information -    # /Zo - enahnced debug info for optimized builds -    set(CMAKE_C_FLAGS   "/W3 /MP /Zi /Zo" CACHE STRING "" FORCE) +    # /Zo - enhanced debug info for optimized builds +    # /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 -    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      set(CMAKE_C_FLAGS_DEBUG   "/Od /MDd" CACHE STRING "" FORCE) diff --git a/externals/CMakeLists.txt b/externals/CMakeLists.txt index 1e04931ee..02e02350c 100644 --- a/externals/CMakeLists.txt +++ b/externals/CMakeLists.txt @@ -46,7 +46,5 @@ if (ARCHITECTURE_x86_64)      # Defined before "dynarmic" above      # add_library(xbyak INTERFACE)      target_include_directories(xbyak INTERFACE ./xbyak/xbyak) -    if (NOT MSVC) -        target_compile_options(xbyak INTERFACE -fno-operator-names) -    endif() +    target_compile_definitions(xbyak INTERFACE XBYAK_NO_OP_NAMES)  endif() diff --git a/externals/dynarmic b/externals/dynarmic -Subproject 7707ff13e981b0aecf87f3156ee0b641469f7bb +Subproject 8f15e3f70cb96e56705e5de6ba97b5d09423a56 diff --git a/src/video_core/shader/shader_jit_x64_compiler.cpp b/src/video_core/shader/shader_jit_x64_compiler.cpp index 5d9b6448c..42a57aab1 100644 --- a/src/video_core/shader/shader_jit_x64_compiler.cpp +++ b/src/video_core/shader/shader_jit_x64_compiler.cpp @@ -321,27 +321,27 @@ void JitShader::Compile_EvaluateCondition(Instruction instr) {      case Instruction::FlowControlType::Or:          mov(eax, COND0);          mov(ebx, COND1); -        xor(eax, (instr.flow_control.refx.Value() ^ 1)); -        xor(ebx, (instr.flow_control.refy.Value() ^ 1)); -        or (eax, ebx); +        xor_(eax, (instr.flow_control.refx.Value() ^ 1)); +        xor_(ebx, (instr.flow_control.refy.Value() ^ 1)); +        or_(eax, ebx);          break;      case Instruction::FlowControlType::And:          mov(eax, COND0);          mov(ebx, COND1); -        xor(eax, (instr.flow_control.refx.Value() ^ 1)); -        xor(ebx, (instr.flow_control.refy.Value() ^ 1)); -        and(eax, ebx); +        xor_(eax, (instr.flow_control.refx.Value() ^ 1)); +        xor_(ebx, (instr.flow_control.refy.Value() ^ 1)); +        and_(eax, ebx);          break;      case Instruction::FlowControlType::JustX:          mov(eax, COND0); -        xor(eax, (instr.flow_control.refx.Value() ^ 1)); +        xor_(eax, (instr.flow_control.refx.Value() ^ 1));          break;      case Instruction::FlowControlType::JustY:          mov(eax, COND1); -        xor(eax, (instr.flow_control.refy.Value() ^ 1)); +        xor_(eax, (instr.flow_control.refy.Value() ^ 1));          break;      }  } @@ -734,10 +734,10 @@ void JitShader::Compile_LOOP(Instruction instr) {      mov(LOOPCOUNT, dword[SETUP + offset]);      mov(LOOPCOUNT_REG, LOOPCOUNT);      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);      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      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);      // Zero address/loop  registers -    xor(ADDROFFS_REG_0.cvt32(), ADDROFFS_REG_0.cvt32()); -    xor(ADDROFFS_REG_1.cvt32(), ADDROFFS_REG_1.cvt32()); -    xor(LOOPCOUNT_REG, LOOPCOUNT_REG); +    xor_(ADDROFFS_REG_0.cvt32(), ADDROFFS_REG_0.cvt32()); +    xor_(ADDROFFS_REG_1.cvt32(), ADDROFFS_REG_1.cvt32()); +    xor_(LOOPCOUNT_REG, LOOPCOUNT_REG);      // Used to set a register to one      static const __m128 one = {1.f, 1.f, 1.f, 1.f};  | 
