From f6715f98f511afbe415e7411351159bbb1828343 Mon Sep 17 00:00:00 2001 From: Yuri Kunde Schlesner Date: Sat, 17 Jun 2017 12:20:22 -0700 Subject: [PATCH] Stop using reserved operator names (and/or/xor) with Xbyak Also has the Dynarmic upgrade with the same change --- externals/CMakeLists.txt | 4 +-- externals/dynarmic | 2 +- .../shader/shader_jit_x64_compiler.cpp | 26 +++++++++---------- 3 files changed, 15 insertions(+), 17 deletions(-) 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 index 7707ff13e..8f15e3f70 160000 --- a/externals/dynarmic +++ b/externals/dynarmic @@ -1 +1 @@ -Subproject commit 7707ff13e981b0aecf87f3156ee0b641469f7bb3 +Subproject commit 8f15e3f70cb96e56705e5de6ba97b5d09423a56b 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* 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};