Skip to content

Commit 953f2af

Browse files
committed
Support big-endian in reference SIMD
1 parent eb989a2 commit 953f2af

File tree

2 files changed

+15
-0
lines changed

2 files changed

+15
-0
lines changed

Source/UnitTest/test_simd.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2015,10 +2015,17 @@ TEST(vint4, interleave_rgba8)
20152015

20162016
vint4 result = interleave_rgba8(r, g, b, a);
20172017

2018+
#if !defined(ASTCENC_BIG_ENDIAN)
20182019
EXPECT_EQ(result.lane<0>(), 0x04030201);
20192020
EXPECT_EQ(result.lane<1>(), 0x14131211);
20202021
EXPECT_EQ(result.lane<2>(), 0x24232221);
20212022
EXPECT_EQ(result.lane<3>(), 0x34333231);
2023+
#else
2024+
EXPECT_EQ(result.lane<0>(), 0x01020304);
2025+
EXPECT_EQ(result.lane<1>(), 0x11121314);
2026+
EXPECT_EQ(result.lane<2>(), 0x21222324);
2027+
EXPECT_EQ(result.lane<3>(), 0x31323334);
2028+
#endif
20222029
}
20232030

20242031
# if ASTCENC_SIMD_WIDTH == 8

Source/astcenc_vecmathlib_none_4.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -694,7 +694,11 @@ ASTCENC_SIMD_INLINE void pack_and_store_low_bytes(vint4 a, uint8_t* p)
694694
int b2 = a.m[2] & 0xFF;
695695
int b3 = a.m[3] & 0xFF;
696696

697+
#if !defined(ASTCENC_BIG_ENDIAN)
697698
int b = b0 | (b1 << 8) | (b2 << 16) | (b3 << 24);
699+
#else
700+
int b = b3 | (b2 << 8) | (b1 << 16) | (b0 << 24);
701+
#endif
698702
a = vint4(b, 0, 0, 0);
699703
store_nbytes(a, p);
700704
}
@@ -1171,7 +1175,11 @@ ASTCENC_SIMD_INLINE vint4 vtable_lookup_32bit(
11711175
*/
11721176
ASTCENC_SIMD_INLINE vint4 interleave_rgba8(vint4 r, vint4 g, vint4 b, vint4 a)
11731177
{
1178+
#if !defined(ASTCENC_BIG_ENDIAN)
11741179
return r + lsl<8>(g) + lsl<16>(b) + lsl<24>(a);
1180+
#else
1181+
return a + lsl<8>(b) + lsl<16>(g) + lsl<24>(r);
1182+
#endif
11751183
}
11761184

11771185
/**

0 commit comments

Comments
 (0)