mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-09 00:11:24 +12:00
u128 renamed to v128
Since it's vector union type
This commit is contained in:
parent
f8afee3325
commit
6f3c50eba2
23 changed files with 388 additions and 388 deletions
|
@ -91,7 +91,7 @@ void ppu_interpreter::VADDCUW(PPUThread& CPU, ppu_opcode_t op)
|
|||
|
||||
void ppu_interpreter::VADDFP(PPUThread& CPU, ppu_opcode_t op)
|
||||
{
|
||||
CPU.VPR[op.vd] = u128::addfs(CPU.VPR[op.va], CPU.VPR[op.vb]);
|
||||
CPU.VPR[op.vd] = v128::addfs(CPU.VPR[op.va], CPU.VPR[op.vb]);
|
||||
}
|
||||
|
||||
void ppu_interpreter::VADDSBS(PPUThread& CPU, ppu_opcode_t op)
|
||||
|
@ -108,7 +108,7 @@ void ppu_interpreter::VADDSWS(PPUThread& CPU, ppu_opcode_t op)
|
|||
{
|
||||
const auto a = CPU.VPR[op.va];
|
||||
const auto b = CPU.VPR[op.vb];
|
||||
const auto s = u128::add32(a, b); // a + b
|
||||
const auto s = v128::add32(a, b); // a + b
|
||||
const auto m = (a ^ s) & (b ^ s); // overflow bit
|
||||
const auto x = _mm_srai_epi32(m.vi, 31); // saturation mask
|
||||
const auto y = _mm_srai_epi32(_mm_and_si128(s.vi, m.vi), 31); // positive saturation mask
|
||||
|
@ -117,7 +117,7 @@ void ppu_interpreter::VADDSWS(PPUThread& CPU, ppu_opcode_t op)
|
|||
|
||||
void ppu_interpreter::VADDUBM(PPUThread& CPU, ppu_opcode_t op)
|
||||
{
|
||||
CPU.VPR[op.vd] = u128::add8(CPU.VPR[op.va], CPU.VPR[op.vb]);
|
||||
CPU.VPR[op.vd] = v128::add8(CPU.VPR[op.va], CPU.VPR[op.vb]);
|
||||
}
|
||||
|
||||
void ppu_interpreter::VADDUBS(PPUThread& CPU, ppu_opcode_t op)
|
||||
|
@ -127,7 +127,7 @@ void ppu_interpreter::VADDUBS(PPUThread& CPU, ppu_opcode_t op)
|
|||
|
||||
void ppu_interpreter::VADDUHM(PPUThread& CPU, ppu_opcode_t op)
|
||||
{
|
||||
CPU.VPR[op.vd] = u128::add16(CPU.VPR[op.va], CPU.VPR[op.vb]);
|
||||
CPU.VPR[op.vd] = v128::add16(CPU.VPR[op.va], CPU.VPR[op.vb]);
|
||||
}
|
||||
|
||||
void ppu_interpreter::VADDUHS(PPUThread& CPU, ppu_opcode_t op)
|
||||
|
@ -137,7 +137,7 @@ void ppu_interpreter::VADDUHS(PPUThread& CPU, ppu_opcode_t op)
|
|||
|
||||
void ppu_interpreter::VADDUWM(PPUThread& CPU, ppu_opcode_t op)
|
||||
{
|
||||
CPU.VPR[op.vd] = u128::add32(CPU.VPR[op.va], CPU.VPR[op.vb]);
|
||||
CPU.VPR[op.vd] = v128::add32(CPU.VPR[op.va], CPU.VPR[op.vb]);
|
||||
}
|
||||
|
||||
void ppu_interpreter::VADDUWS(PPUThread& CPU, ppu_opcode_t op)
|
||||
|
@ -160,30 +160,30 @@ void ppu_interpreter::VANDC(PPUThread& CPU, ppu_opcode_t op)
|
|||
void ppu_interpreter::VAVGSB(PPUThread& CPU, ppu_opcode_t op)
|
||||
{
|
||||
const auto a = CPU.VPR[op.va];
|
||||
const auto b = u128::add8(CPU.VPR[op.vb], u128::from8p(1)); // add 1
|
||||
const auto summ = u128::add8(a, b) & u128::from8p(0xfe);
|
||||
const auto sign = u128::from8p(0x80);
|
||||
const auto overflow = (((a ^ summ) & (b ^ summ)) ^ summ ^ u128::eq8(b, sign)) & sign; // calculate msb
|
||||
const auto b = v128::add8(CPU.VPR[op.vb], v128::from8p(1)); // add 1
|
||||
const auto summ = v128::add8(a, b) & v128::from8p(0xfe);
|
||||
const auto sign = v128::from8p(0x80);
|
||||
const auto overflow = (((a ^ summ) & (b ^ summ)) ^ summ ^ v128::eq8(b, sign)) & sign; // calculate msb
|
||||
CPU.VPR[op.vd].vi = _mm_or_si128(overflow.vi, _mm_srli_epi64(summ.vi, 1));
|
||||
}
|
||||
|
||||
void ppu_interpreter::VAVGSH(PPUThread& CPU, ppu_opcode_t op)
|
||||
{
|
||||
const auto a = CPU.VPR[op.va];
|
||||
const auto b = u128::add16(CPU.VPR[op.vb], u128::from16p(1)); // add 1
|
||||
const auto summ = u128::add16(a, b);
|
||||
const auto sign = u128::from16p(0x8000);
|
||||
const auto overflow = (((a ^ summ) & (b ^ summ)) ^ summ ^ u128::eq16(b, sign)) & sign; // calculate msb
|
||||
const auto b = v128::add16(CPU.VPR[op.vb], v128::from16p(1)); // add 1
|
||||
const auto summ = v128::add16(a, b);
|
||||
const auto sign = v128::from16p(0x8000);
|
||||
const auto overflow = (((a ^ summ) & (b ^ summ)) ^ summ ^ v128::eq16(b, sign)) & sign; // calculate msb
|
||||
CPU.VPR[op.vd].vi = _mm_or_si128(overflow.vi, _mm_srli_epi16(summ.vi, 1));
|
||||
}
|
||||
|
||||
void ppu_interpreter::VAVGSW(PPUThread& CPU, ppu_opcode_t op)
|
||||
{
|
||||
const auto a = CPU.VPR[op.va];
|
||||
const auto b = u128::add32(CPU.VPR[op.vb], u128::from32p(1)); // add 1
|
||||
const auto summ = u128::add32(a, b);
|
||||
const auto sign = u128::from32p(0x80000000);
|
||||
const auto overflow = (((a ^ summ) & (b ^ summ)) ^ summ ^ u128::eq32(b, sign)) & sign; // calculate msb
|
||||
const auto b = v128::add32(CPU.VPR[op.vb], v128::from32p(1)); // add 1
|
||||
const auto summ = v128::add32(a, b);
|
||||
const auto sign = v128::from32p(0x80000000);
|
||||
const auto overflow = (((a ^ summ) & (b ^ summ)) ^ summ ^ v128::eq32(b, sign)) & sign; // calculate msb
|
||||
CPU.VPR[op.vd].vi = _mm_or_si128(overflow.vi, _mm_srli_epi32(summ.vi, 1));
|
||||
}
|
||||
|
||||
|
@ -201,7 +201,7 @@ void ppu_interpreter::VAVGUW(PPUThread& CPU, ppu_opcode_t op)
|
|||
{
|
||||
const auto a = CPU.VPR[op.va];
|
||||
const auto b = CPU.VPR[op.vb];
|
||||
const auto summ = u128::add32(u128::add32(a, b), u128::from32p(1));
|
||||
const auto summ = v128::add32(v128::add32(a, b), v128::from32p(1));
|
||||
const auto carry = _mm_xor_si128(_mm_slli_epi32(sse_cmpgt_epu32(summ.vi, a.vi), 31), _mm_set1_epi32(0x80000000));
|
||||
CPU.VPR[op.vd].vi = _mm_or_si128(carry, _mm_srli_epi32(summ.vi, 1));
|
||||
}
|
||||
|
@ -248,7 +248,7 @@ void ppu_interpreter::VCMPEQFP_(PPUThread& CPU, ppu_opcode_t op)
|
|||
|
||||
void ppu_interpreter::VCMPEQUB(PPUThread& CPU, ppu_opcode_t op)
|
||||
{
|
||||
CPU.VPR[op.vd] = u128::eq8(CPU.VPR[op.va], CPU.VPR[op.vb]);
|
||||
CPU.VPR[op.vd] = v128::eq8(CPU.VPR[op.va], CPU.VPR[op.vb]);
|
||||
}
|
||||
|
||||
void ppu_interpreter::VCMPEQUB_(PPUThread& CPU, ppu_opcode_t op)
|
||||
|
@ -260,7 +260,7 @@ void ppu_interpreter::VCMPEQUB_(PPUThread& CPU, ppu_opcode_t op)
|
|||
|
||||
void ppu_interpreter::VCMPEQUH(PPUThread& CPU, ppu_opcode_t op)
|
||||
{
|
||||
CPU.VPR[op.vd] = u128::eq16(CPU.VPR[op.va], CPU.VPR[op.vb]);
|
||||
CPU.VPR[op.vd] = v128::eq16(CPU.VPR[op.va], CPU.VPR[op.vb]);
|
||||
}
|
||||
|
||||
void ppu_interpreter::VCMPEQUH_(PPUThread& CPU, ppu_opcode_t op)
|
||||
|
@ -272,7 +272,7 @@ void ppu_interpreter::VCMPEQUH_(PPUThread& CPU, ppu_opcode_t op)
|
|||
|
||||
void ppu_interpreter::VCMPEQUW(PPUThread& CPU, ppu_opcode_t op)
|
||||
{
|
||||
CPU.VPR[op.vd] = u128::eq32(CPU.VPR[op.va], CPU.VPR[op.vb]);
|
||||
CPU.VPR[op.vd] = v128::eq32(CPU.VPR[op.va], CPU.VPR[op.vb]);
|
||||
}
|
||||
|
||||
void ppu_interpreter::VCMPEQUW_(PPUThread& CPU, ppu_opcode_t op)
|
||||
|
@ -727,8 +727,8 @@ void ppu_interpreter::VPERM(PPUThread& CPU, ppu_opcode_t op)
|
|||
|
||||
void ppu_interpreter::VPKPX(PPUThread& CPU, ppu_opcode_t op)
|
||||
{
|
||||
u128 VA = CPU.VPR[op.va];
|
||||
u128 VB = CPU.VPR[op.vb];
|
||||
v128 VA = CPU.VPR[op.va];
|
||||
v128 VB = CPU.VPR[op.vb];
|
||||
for (uint h = 0; h < 4; h++)
|
||||
{
|
||||
u16 bb7 = VB._u8[15 - (h * 4 + 0)] & 0x1;
|
||||
|
@ -764,8 +764,8 @@ void ppu_interpreter::VPKSWUS(PPUThread& CPU, ppu_opcode_t op)
|
|||
{
|
||||
//CPU.VPR[op.vd].vi = _mm_packus_epi32(CPU.VPR[op.vb].vi, CPU.VPR[op.va].vi);
|
||||
|
||||
u128 VA = CPU.VPR[op.va];
|
||||
u128 VB = CPU.VPR[op.vb];
|
||||
v128 VA = CPU.VPR[op.va];
|
||||
v128 VB = CPU.VPR[op.vb];
|
||||
for (uint h = 0; h < 4; h++)
|
||||
{
|
||||
s32 result = VA._s32[h];
|
||||
|
@ -798,8 +798,8 @@ void ppu_interpreter::VPKSWUS(PPUThread& CPU, ppu_opcode_t op)
|
|||
|
||||
void ppu_interpreter::VPKUHUM(PPUThread& CPU, ppu_opcode_t op)
|
||||
{
|
||||
u128 VA = CPU.VPR[op.va];
|
||||
u128 VB = CPU.VPR[op.vb];
|
||||
v128 VA = CPU.VPR[op.va];
|
||||
v128 VB = CPU.VPR[op.vb];
|
||||
for (uint b = 0; b < 8; b++)
|
||||
{
|
||||
CPU.VPR[op.vd]._u8[b + 8] = VA._u8[b * 2];
|
||||
|
@ -809,8 +809,8 @@ void ppu_interpreter::VPKUHUM(PPUThread& CPU, ppu_opcode_t op)
|
|||
|
||||
void ppu_interpreter::VPKUHUS(PPUThread& CPU, ppu_opcode_t op)
|
||||
{
|
||||
u128 VA = CPU.VPR[op.va];
|
||||
u128 VB = CPU.VPR[op.vb];
|
||||
v128 VA = CPU.VPR[op.va];
|
||||
v128 VB = CPU.VPR[op.vb];
|
||||
for (uint b = 0; b < 8; b++)
|
||||
{
|
||||
u16 result = VA._u16[b];
|
||||
|
@ -835,8 +835,8 @@ void ppu_interpreter::VPKUHUS(PPUThread& CPU, ppu_opcode_t op)
|
|||
|
||||
void ppu_interpreter::VPKUWUM(PPUThread& CPU, ppu_opcode_t op)
|
||||
{
|
||||
u128 VA = CPU.VPR[op.va];
|
||||
u128 VB = CPU.VPR[op.vb];
|
||||
v128 VA = CPU.VPR[op.va];
|
||||
v128 VB = CPU.VPR[op.vb];
|
||||
for (uint h = 0; h < 4; h++)
|
||||
{
|
||||
CPU.VPR[op.vd]._u16[h + 4] = VA._u16[h * 2];
|
||||
|
@ -846,8 +846,8 @@ void ppu_interpreter::VPKUWUM(PPUThread& CPU, ppu_opcode_t op)
|
|||
|
||||
void ppu_interpreter::VPKUWUS(PPUThread& CPU, ppu_opcode_t op)
|
||||
{
|
||||
u128 VA = CPU.VPR[op.va];
|
||||
u128 VB = CPU.VPR[op.vb];
|
||||
v128 VA = CPU.VPR[op.va];
|
||||
v128 VB = CPU.VPR[op.vb];
|
||||
for (uint h = 0; h < 4; h++)
|
||||
{
|
||||
u32 result = VA._u32[h];
|
||||
|
@ -949,7 +949,7 @@ void ppu_interpreter::VSEL(PPUThread& CPU, ppu_opcode_t op)
|
|||
|
||||
void ppu_interpreter::VSL(PPUThread& CPU, ppu_opcode_t op)
|
||||
{
|
||||
u128 VA = CPU.VPR[op.va];
|
||||
v128 VA = CPU.VPR[op.va];
|
||||
u8 sh = CPU.VPR[op.vb]._u8[0] & 0x7;
|
||||
|
||||
CPU.VPR[op.vd]._u8[0] = VA._u8[0] << sh;
|
||||
|
@ -989,7 +989,7 @@ void ppu_interpreter::VSLH(PPUThread& CPU, ppu_opcode_t op)
|
|||
|
||||
void ppu_interpreter::VSLO(PPUThread& CPU, ppu_opcode_t op)
|
||||
{
|
||||
u128 VA = CPU.VPR[op.va];
|
||||
v128 VA = CPU.VPR[op.va];
|
||||
u8 nShift = (CPU.VPR[op.vb]._u8[0] >> 3) & 0xf;
|
||||
|
||||
CPU.VPR[op.vd].clear();
|
||||
|
@ -1068,7 +1068,7 @@ void ppu_interpreter::VSPLTW(PPUThread& CPU, ppu_opcode_t op)
|
|||
|
||||
void ppu_interpreter::VSR(PPUThread& CPU, ppu_opcode_t op)
|
||||
{
|
||||
u128 VA = CPU.VPR[op.va];
|
||||
v128 VA = CPU.VPR[op.va];
|
||||
u8 sh = CPU.VPR[op.vb]._u8[0] & 0x7;
|
||||
|
||||
CPU.VPR[op.vd]._u8[15] = VA._u8[15] >> sh;
|
||||
|
@ -1120,7 +1120,7 @@ void ppu_interpreter::VSRH(PPUThread& CPU, ppu_opcode_t op)
|
|||
|
||||
void ppu_interpreter::VSRO(PPUThread& CPU, ppu_opcode_t op)
|
||||
{
|
||||
u128 VA = CPU.VPR[op.va];
|
||||
v128 VA = CPU.VPR[op.va];
|
||||
u8 nShift = (CPU.VPR[op.vb]._u8[0] >> 3) & 0xf;
|
||||
|
||||
CPU.VPR[op.vd].clear();
|
||||
|
@ -1149,7 +1149,7 @@ void ppu_interpreter::VSUBCUW(PPUThread& CPU, ppu_opcode_t op)
|
|||
|
||||
void ppu_interpreter::VSUBFP(PPUThread& CPU, ppu_opcode_t op)
|
||||
{
|
||||
CPU.VPR[op.vd] = u128::subfs(CPU.VPR[op.va], CPU.VPR[op.vb]);
|
||||
CPU.VPR[op.vd] = v128::subfs(CPU.VPR[op.va], CPU.VPR[op.vb]);
|
||||
}
|
||||
|
||||
void ppu_interpreter::VSUBSBS(PPUThread& CPU, ppu_opcode_t op)
|
||||
|
@ -1183,7 +1183,7 @@ void ppu_interpreter::VSUBSWS(PPUThread& CPU, ppu_opcode_t op)
|
|||
|
||||
void ppu_interpreter::VSUBUBM(PPUThread& CPU, ppu_opcode_t op)
|
||||
{
|
||||
CPU.VPR[op.vd] = u128::sub8(CPU.VPR[op.va], CPU.VPR[op.vb]);
|
||||
CPU.VPR[op.vd] = v128::sub8(CPU.VPR[op.va], CPU.VPR[op.vb]);
|
||||
}
|
||||
|
||||
void ppu_interpreter::VSUBUBS(PPUThread& CPU, ppu_opcode_t op)
|
||||
|
@ -1193,7 +1193,7 @@ void ppu_interpreter::VSUBUBS(PPUThread& CPU, ppu_opcode_t op)
|
|||
|
||||
void ppu_interpreter::VSUBUHM(PPUThread& CPU, ppu_opcode_t op)
|
||||
{
|
||||
CPU.VPR[op.vd] = u128::sub16(CPU.VPR[op.va], CPU.VPR[op.vb]);
|
||||
CPU.VPR[op.vd] = v128::sub16(CPU.VPR[op.va], CPU.VPR[op.vb]);
|
||||
}
|
||||
|
||||
void ppu_interpreter::VSUBUHS(PPUThread& CPU, ppu_opcode_t op)
|
||||
|
@ -1203,7 +1203,7 @@ void ppu_interpreter::VSUBUHS(PPUThread& CPU, ppu_opcode_t op)
|
|||
|
||||
void ppu_interpreter::VSUBUWM(PPUThread& CPU, ppu_opcode_t op)
|
||||
{
|
||||
CPU.VPR[op.vd] = u128::sub32(CPU.VPR[op.va], CPU.VPR[op.vb]);
|
||||
CPU.VPR[op.vd] = v128::sub32(CPU.VPR[op.va], CPU.VPR[op.vb]);
|
||||
}
|
||||
|
||||
void ppu_interpreter::VSUBUWS(PPUThread& CPU, ppu_opcode_t op)
|
||||
|
@ -1334,7 +1334,7 @@ void ppu_interpreter::VSUM4UBS(PPUThread& CPU, ppu_opcode_t op)
|
|||
|
||||
void ppu_interpreter::VUPKHPX(PPUThread& CPU, ppu_opcode_t op)
|
||||
{
|
||||
u128 VB = CPU.VPR[op.vb];
|
||||
v128 VB = CPU.VPR[op.vb];
|
||||
for (uint w = 0; w < 4; w++)
|
||||
{
|
||||
CPU.VPR[op.vd]._s8[w * 4 + 3] = VB._s8[8 + w * 2 + 1] >> 7; // signed shift sign extends
|
||||
|
@ -1346,7 +1346,7 @@ void ppu_interpreter::VUPKHPX(PPUThread& CPU, ppu_opcode_t op)
|
|||
|
||||
void ppu_interpreter::VUPKHSB(PPUThread& CPU, ppu_opcode_t op)
|
||||
{
|
||||
u128 VB = CPU.VPR[op.vb];
|
||||
v128 VB = CPU.VPR[op.vb];
|
||||
for (uint h = 0; h < 8; h++)
|
||||
{
|
||||
CPU.VPR[op.vd]._s16[h] = VB._s8[8 + h];
|
||||
|
@ -1355,7 +1355,7 @@ void ppu_interpreter::VUPKHSB(PPUThread& CPU, ppu_opcode_t op)
|
|||
|
||||
void ppu_interpreter::VUPKHSH(PPUThread& CPU, ppu_opcode_t op)
|
||||
{
|
||||
u128 VB = CPU.VPR[op.vb];
|
||||
v128 VB = CPU.VPR[op.vb];
|
||||
for (uint w = 0; w < 4; w++)
|
||||
{
|
||||
CPU.VPR[op.vd]._s32[w] = VB._s16[4 + w];
|
||||
|
@ -1364,7 +1364,7 @@ void ppu_interpreter::VUPKHSH(PPUThread& CPU, ppu_opcode_t op)
|
|||
|
||||
void ppu_interpreter::VUPKLPX(PPUThread& CPU, ppu_opcode_t op)
|
||||
{
|
||||
u128 VB = CPU.VPR[op.vb];
|
||||
v128 VB = CPU.VPR[op.vb];
|
||||
for (uint w = 0; w < 4; w++)
|
||||
{
|
||||
CPU.VPR[op.vd]._s8[w * 4 + 3] = VB._s8[w * 2 + 1] >> 7; // signed shift sign extends
|
||||
|
@ -1376,7 +1376,7 @@ void ppu_interpreter::VUPKLPX(PPUThread& CPU, ppu_opcode_t op)
|
|||
|
||||
void ppu_interpreter::VUPKLSB(PPUThread& CPU, ppu_opcode_t op)
|
||||
{
|
||||
u128 VB = CPU.VPR[op.vb];
|
||||
v128 VB = CPU.VPR[op.vb];
|
||||
for (uint h = 0; h < 8; h++)
|
||||
{
|
||||
CPU.VPR[op.vd]._s16[h] = VB._s8[h];
|
||||
|
@ -1385,7 +1385,7 @@ void ppu_interpreter::VUPKLSB(PPUThread& CPU, ppu_opcode_t op)
|
|||
|
||||
void ppu_interpreter::VUPKLSH(PPUThread& CPU, ppu_opcode_t op)
|
||||
{
|
||||
u128 VB = CPU.VPR[op.vb];
|
||||
v128 VB = CPU.VPR[op.vb];
|
||||
for (uint w = 0; w < 4; w++)
|
||||
{
|
||||
CPU.VPR[op.vd]._s32[w] = VB._s16[w];
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue