yuzu-emu
/
yuzu
Archived
1
0
Fork 0

Stop using reserved operator names (and/or/xor) with Xbyak

Also has the Dynarmic upgrade with the same change
This commit is contained in:
Yuri Kunde Schlesner 2017-06-17 12:20:22 -07:00
parent da1bec121a
commit f6715f98f5
3 changed files with 15 additions and 17 deletions

View File

@ -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

@ -1 +1 @@
Subproject commit 7707ff13e981b0aecf87f3156ee0b641469f7bb3 Subproject commit 8f15e3f70cb96e56705e5de6ba97b5d09423a56b

View File

@ -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};