Fix cmp in x64 shader JIT
This commit is contained in:
@@ -403,11 +403,18 @@ void ShaderEmitter::checkCmpRegister(const PICAShader& shader, u32 instruction)
|
|||||||
switch (condition) {
|
switch (condition) {
|
||||||
case 0: // Either cmp register matches
|
case 0: // Either cmp register matches
|
||||||
// Z flag is 0 if at least 1 of them is set
|
// Z flag is 0 if at least 1 of them is set
|
||||||
test(word[statePointer + cmpRegXOffset], refX_refY_merged);
|
|
||||||
|
|
||||||
// Invert z flag
|
// Check if X matches
|
||||||
setz(al);
|
cmp(byte[statePointer + cmpRegXOffset], refX);
|
||||||
test(al, al);
|
sete(al);
|
||||||
|
|
||||||
|
// Or if Y matches
|
||||||
|
cmp(byte[statePointer + cmpRegYOffset], refY);
|
||||||
|
sete(cl);
|
||||||
|
or_(al, cl);
|
||||||
|
|
||||||
|
// If either of them matches, set Z to 1, else set it to 0
|
||||||
|
xor_(al, 1);
|
||||||
break;
|
break;
|
||||||
case 1: // Both cmp registers match
|
case 1: // Both cmp registers match
|
||||||
cmp(word[statePointer + cmpRegXOffset], refX_refY_merged);
|
cmp(word[statePointer + cmpRegXOffset], refX_refY_merged);
|
||||||
|
|||||||
Reference in New Issue
Block a user