mirror of https://github.com/PCSX2/pcsx2.git
GSdx 64-Bit: Fix register misinterpretation
If the C prototype says int, the compiler might leave garbage in the top half
This commit is contained in:
parent
4bbf0eeb8b
commit
35eac7c82f
|
@ -245,7 +245,7 @@ L("step");
|
||||||
|
|
||||||
if(!m_sel.edge)
|
if(!m_sel.edge)
|
||||||
{
|
{
|
||||||
test(a0, a0);
|
test(a0.cvt32(), a0.cvt32());
|
||||||
|
|
||||||
jle("exit", T_NEAR);
|
jle("exit", T_NEAR);
|
||||||
|
|
||||||
|
@ -298,7 +298,7 @@ void GSDrawScanlineCodeGenerator::Init_AVX()
|
||||||
|
|
||||||
// int steps = pixels + skip - 4;
|
// int steps = pixels + skip - 4;
|
||||||
|
|
||||||
lea(a0, ptr[a0 + a1 - 4]);
|
lea(a0.cvt32(), ptr[a0 + a1 - 4]);
|
||||||
|
|
||||||
// GSVector4i test = m_test[skip] | m_test[7 + (steps & (steps >> 31))];
|
// GSVector4i test = m_test[skip] | m_test[7 + (steps & (steps >> 31))];
|
||||||
|
|
||||||
|
@ -306,10 +306,11 @@ void GSDrawScanlineCodeGenerator::Init_AVX()
|
||||||
|
|
||||||
vmovdqa(_test, ptr[a1 + r10]);
|
vmovdqa(_test, ptr[a1 + r10]);
|
||||||
|
|
||||||
mov(rax, a0);
|
mov(eax, a0.cvt32());
|
||||||
sar(rax, 63); // GH: 63 to extract the sign of the register
|
sar(eax, 31); // GH: 31 to extract the sign of the register
|
||||||
and(rax, a0);
|
and(eax, a0.cvt32());
|
||||||
shl(rax, 4); // * sizeof(m_test[0])
|
shl(eax, 4); // * sizeof(m_test[0])
|
||||||
|
cdqe();
|
||||||
|
|
||||||
vpor(_test, ptr[rax + r10 + 7 * 16]);
|
vpor(_test, ptr[rax + r10 + 7 * 16]);
|
||||||
}
|
}
|
||||||
|
@ -317,7 +318,7 @@ void GSDrawScanlineCodeGenerator::Init_AVX()
|
||||||
{
|
{
|
||||||
mov(ebx, a1.cvt32()); // left
|
mov(ebx, a1.cvt32()); // left
|
||||||
xor(a1.cvt32(), a1.cvt32()); // skip
|
xor(a1.cvt32(), a1.cvt32()); // skip
|
||||||
lea(a0, ptr[a0 - 4]); // steps
|
lea(a0.cvt32(), ptr[a0 - 4]); // steps
|
||||||
}
|
}
|
||||||
|
|
||||||
// a0 = steps
|
// a0 = steps
|
||||||
|
@ -501,7 +502,7 @@ void GSDrawScanlineCodeGenerator::Step_AVX()
|
||||||
{
|
{
|
||||||
// steps -= 4;
|
// steps -= 4;
|
||||||
|
|
||||||
sub(a0, 4);
|
sub(a0.cvt32(), 4);
|
||||||
|
|
||||||
// fza_offset++;
|
// fza_offset++;
|
||||||
|
|
||||||
|
@ -611,10 +612,11 @@ void GSDrawScanlineCodeGenerator::Step_AVX()
|
||||||
{
|
{
|
||||||
// test = m_test[7 + (steps & (steps >> 31))];
|
// test = m_test[7 + (steps & (steps >> 31))];
|
||||||
|
|
||||||
mov(rax, a0);
|
mov(eax, a0.cvt32());
|
||||||
sar(rax, 63); // GH: 63 to extract the sign of the register
|
sar(eax, 31); // GH: 31 to extract the sign of the register
|
||||||
and(rax, a0);
|
and(eax, a0.cvt32());
|
||||||
shl(rax, 4);
|
shl(eax, 4);
|
||||||
|
cdqe();
|
||||||
|
|
||||||
vmovdqa(_test, ptr[rax + r10 + 7 * 16]);
|
vmovdqa(_test, ptr[rax + r10 + 7 * 16]);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue