Skip to content

Commit

Permalink
MDEC: Ensure alignment of inputs
Browse files Browse the repository at this point in the history
  • Loading branch information
stenzek committed Aug 14, 2024
1 parent f2896d5 commit 460acce
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 13 deletions.
22 changes: 11 additions & 11 deletions src/common-tests/gsvector_yuvtorgb_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -73,9 +73,9 @@ static void YUVToRGB_Scalar(const std::array<s16, 64>& Crblk, const std::array<s

TEST(GSVector, YUVToRGB)
{
std::array<s16, 64> crblk;
std::array<s16, 64> cbblk;
std::array<s16, 64> yblk;
alignas(VECTOR_ALIGNMENT) std::array<s16, 64> crblk;
alignas(VECTOR_ALIGNMENT) std::array<s16, 64> cbblk;
alignas(VECTOR_ALIGNMENT) std::array<s16, 64> yblk;
for (s16 i = -128; i < 128; i++)
{
for (u32 j = 0; j < 64; j++)
Expand All @@ -91,10 +91,10 @@ TEST(GSVector, YUVToRGB)
for (u32 j = 0; j < 64; j++)
yblk[j] = l;

u32 rows[64];
alignas(VECTOR_ALIGNMENT) u32 rows[64];
YUVToRGB_Scalar(crblk, cbblk, yblk, rows, false);

u32 rowv[64];
alignas(VECTOR_ALIGNMENT) u32 rowv[64];
YUVToRGB_Vector(crblk, cbblk, yblk, rowv, false);
ASSERT_EQ(std::memcmp(rows, rowv, sizeof(rows)), 0);

Expand All @@ -112,9 +112,9 @@ u32 g_gsvector_yuvtorgb_temp[64];

TEST(GSVector, YUVToRGB_Scalar)
{
std::array<s16, 64> crblk;
std::array<s16, 64> cbblk;
std::array<s16, 64> yblk;
alignas(VECTOR_ALIGNMENT) std::array<s16, 64> crblk;
alignas(VECTOR_ALIGNMENT) std::array<s16, 64> cbblk;
alignas(VECTOR_ALIGNMENT) std::array<s16, 64> yblk;
for (s16 i = -128; i < 128; i++)
{
for (u32 j = 0; j < 64; j++)
Expand All @@ -138,9 +138,9 @@ TEST(GSVector, YUVToRGB_Scalar)

TEST(GSVector, YUVToRGB_Vector)
{
std::array<s16, 64> crblk;
std::array<s16, 64> cbblk;
std::array<s16, 64> yblk;
alignas(VECTOR_ALIGNMENT) std::array<s16, 64> crblk;
alignas(VECTOR_ALIGNMENT) std::array<s16, 64> cbblk;
alignas(VECTOR_ALIGNMENT) std::array<s16, 64> yblk;
for (s16 i = -128; i < 128; i++)
{
for (u32 j = 0; j < 64; j++)
Expand Down
4 changes: 2 additions & 2 deletions src/core/mdec.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ struct MDECState
std::array<u8, 64> iq_uv{};
std::array<u8, 64> iq_y{};

std::array<s16, 64> scale_table{};
alignas(VECTOR_ALIGNMENT) std::array<s16, 64> scale_table{};

// blocks, for colour: 0 - Crblk, 1 - Cbblk, 2-5 - Y 1-4
alignas(VECTOR_ALIGNMENT) std::array<std::array<s16, 64>, NUM_BLOCKS> blocks;
Expand Down Expand Up @@ -950,7 +950,7 @@ bool MDEC::DecodeRLE_New(s16* blk, const u8* qt)
static s16 IDCTRow(const s16* blk, const s16* idct_matrix)
{
// IDCT matrix is -32768..32767, block is -16384..16383. 4 adds can happen without overflow.
GSVector4i sum = GSVector4i::load<false>(blk).madd_s16(GSVector4i::load<false>(idct_matrix)).addp_s32();
GSVector4i sum = GSVector4i::load<false>(blk).madd_s16(GSVector4i::load<true>(idct_matrix)).addp_s32();
return static_cast<s16>(((static_cast<s64>(sum.extract32<0>()) + static_cast<s64>(sum.extract32<1>())) + 0x20000) >>
18);
}
Expand Down

0 comments on commit 460acce

Please sign in to comment.