Commit c4f1dd83 by Yuly Novikov Committed by Commit Bot

Use angle::BitSetIterator optimizations on arm64 as well

Previously were enabled only on x86_64. Also change from using target_cpu to current_cpu, as the doc recommends. BUG=angleproject:1814 Change-Id: Ia7e8e930c76aab5cfb47b75e0ec78902ab313237 Reviewed-on: https://chromium-review.googlesource.com/737438Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarCorentin Wallez <cwallez@chromium.org> Commit-Queue: Yuly Novikov <ynovikov@chromium.org>
parent b79e7bb6
...@@ -71,11 +71,11 @@ config("internal_config") { ...@@ -71,11 +71,11 @@ config("internal_config") {
"EGL_EGLEXT_PROTOTYPES", "EGL_EGLEXT_PROTOTYPES",
] ]
if (target_cpu == "x86") { if (current_cpu == "x86" || current_cpu == "arm") {
defines += [ "ANGLE_X86_CPU" ] defines += [ "ANGLE_IS_32_BIT_CPU" ]
} }
if (target_cpu == "x64") { if (current_cpu == "x64" || current_cpu == "arm64") {
defines += [ "ANGLE_X64_CPU" ] defines += [ "ANGLE_IS_64_BIT_CPU" ]
} }
} }
......
...@@ -284,7 +284,7 @@ ...@@ -284,7 +284,7 @@
'TargetMachine': '1', # x86 'TargetMachine': '1', # x86
}, },
}, },
'defines': [ 'ANGLE_X86_CPU' ], 'defines': [ 'ANGLE_IS_32_BIT_CPU' ],
}, # x86_Base }, # x86_Base
'x64_Base': 'x64_Base':
...@@ -302,7 +302,7 @@ ...@@ -302,7 +302,7 @@
'TargetMachine': '17', # x86 - 64 'TargetMachine': '17', # x86 - 64
}, },
}, },
'defines': [ 'ANGLE_X64_CPU' ], 'defines': [ 'ANGLE_IS_64_BIT_CPU' ],
}, # x64_Base }, # x64_Base
# Concrete configurations # Concrete configurations
......
...@@ -435,10 +435,10 @@ template <size_t N> ...@@ -435,10 +435,10 @@ template <size_t N>
using BitSet32 = BitSetT<N, uint32_t>; using BitSet32 = BitSetT<N, uint32_t>;
// ScanForward for 64-bits requires a 64-bit implementation. // ScanForward for 64-bits requires a 64-bit implementation.
#if defined(ANGLE_X64_CPU) #if defined(ANGLE_IS_64_BIT_CPU)
template <size_t N> template <size_t N>
using BitSet64 = BitSetT<N, uint64_t>; using BitSet64 = BitSetT<N, uint64_t>;
#endif // defined(ANGLE_X64_CPU) #endif // defined(ANGLE_IS_64_BIT_CPU)
namespace priv namespace priv
{ {
...@@ -453,7 +453,7 @@ struct GetBitSet ...@@ -453,7 +453,7 @@ struct GetBitSet
}; };
// Prefer 64-bit bitsets on 64-bit CPUs. They seem faster than 32-bit. // Prefer 64-bit bitsets on 64-bit CPUs. They seem faster than 32-bit.
#if defined(ANGLE_X64_CPU) #if defined(ANGLE_IS_64_BIT_CPU)
template <size_t N> template <size_t N>
struct GetBitSet<N, EnableIfBitsFit<N, uint64_t>> struct GetBitSet<N, EnableIfBitsFit<N, uint64_t>>
{ {
...@@ -465,7 +465,7 @@ struct GetBitSet<N, EnableIfBitsFit<N, uint32_t>> ...@@ -465,7 +465,7 @@ struct GetBitSet<N, EnableIfBitsFit<N, uint32_t>>
{ {
using Type = BitSet32<N>; using Type = BitSet32<N>;
}; };
#endif // defined(ANGLE_X64_CPU) #endif // defined(ANGLE_IS_64_BIT_CPU)
} // namespace priv } // namespace priv
......
...@@ -888,12 +888,12 @@ inline int BitCount(uint32_t bits) ...@@ -888,12 +888,12 @@ inline int BitCount(uint32_t bits)
{ {
return static_cast<int>(__popcnt(bits)); return static_cast<int>(__popcnt(bits));
} }
#if defined(ANGLE_X64_CPU) #if defined(ANGLE_IS_64_BIT_CPU)
inline int BitCount(uint64_t bits) inline int BitCount(uint64_t bits)
{ {
return static_cast<int>(__popcnt64(bits)); return static_cast<int>(__popcnt64(bits));
} }
#endif // defined(ANGLE_X64_CPU) #endif // defined(ANGLE_IS_64_BIT_CPU)
#endif // defined(ANGLE_PLATFORM_WINDOWS) #endif // defined(ANGLE_PLATFORM_WINDOWS)
#if defined(ANGLE_PLATFORM_POSIX) #if defined(ANGLE_PLATFORM_POSIX)
...@@ -902,12 +902,12 @@ inline int BitCount(uint32_t bits) ...@@ -902,12 +902,12 @@ inline int BitCount(uint32_t bits)
return __builtin_popcount(bits); return __builtin_popcount(bits);
} }
#if defined(ANGLE_X64_CPU) #if defined(ANGLE_IS_64_BIT_CPU)
inline int BitCount(uint64_t bits) inline int BitCount(uint64_t bits)
{ {
return __builtin_popcountll(bits); return __builtin_popcountll(bits);
} }
#endif // defined(ANGLE_X64_CPU) #endif // defined(ANGLE_IS_64_BIT_CPU)
#endif // defined(ANGLE_PLATFORM_POSIX) #endif // defined(ANGLE_PLATFORM_POSIX)
#if defined(ANGLE_PLATFORM_WINDOWS) #if defined(ANGLE_PLATFORM_WINDOWS)
...@@ -922,7 +922,7 @@ inline unsigned long ScanForward(uint32_t bits) ...@@ -922,7 +922,7 @@ inline unsigned long ScanForward(uint32_t bits)
return firstBitIndex; return firstBitIndex;
} }
#if defined(ANGLE_X64_CPU) #if defined(ANGLE_IS_64_BIT_CPU)
inline unsigned long ScanForward(uint64_t bits) inline unsigned long ScanForward(uint64_t bits)
{ {
ASSERT(bits != 0u); ASSERT(bits != 0u);
...@@ -931,7 +931,7 @@ inline unsigned long ScanForward(uint64_t bits) ...@@ -931,7 +931,7 @@ inline unsigned long ScanForward(uint64_t bits)
ASSERT(ret != 0u); ASSERT(ret != 0u);
return firstBitIndex; return firstBitIndex;
} }
#endif // defined(ANGLE_X64_CPU) #endif // defined(ANGLE_IS_64_BIT_CPU)
#endif // defined(ANGLE_PLATFORM_WINDOWS) #endif // defined(ANGLE_PLATFORM_WINDOWS)
#if defined(ANGLE_PLATFORM_POSIX) #if defined(ANGLE_PLATFORM_POSIX)
...@@ -941,13 +941,13 @@ inline unsigned long ScanForward(uint32_t bits) ...@@ -941,13 +941,13 @@ inline unsigned long ScanForward(uint32_t bits)
return static_cast<unsigned long>(__builtin_ctz(bits)); return static_cast<unsigned long>(__builtin_ctz(bits));
} }
#if defined(ANGLE_X64_CPU) #if defined(ANGLE_IS_64_BIT_CPU)
inline unsigned long ScanForward(uint64_t bits) inline unsigned long ScanForward(uint64_t bits)
{ {
ASSERT(bits != 0u); ASSERT(bits != 0u);
return static_cast<unsigned long>(__builtin_ctzll(bits)); return static_cast<unsigned long>(__builtin_ctzll(bits));
} }
#endif // defined(ANGLE_X64_CPU) #endif // defined(ANGLE_IS_64_BIT_CPU)
#endif // defined(ANGLE_PLATFORM_POSIX) #endif // defined(ANGLE_PLATFORM_POSIX)
// Return the index of the most significant bit set. Indexing is such that bit 0 is the least // Return the index of the most significant bit set. Indexing is such that bit 0 is the least
......
...@@ -275,11 +275,11 @@ TEST(MathUtilTest, BitCount) ...@@ -275,11 +275,11 @@ TEST(MathUtilTest, BitCount)
EXPECT_EQ(32, gl::BitCount(0xFFFFFFFFu)); EXPECT_EQ(32, gl::BitCount(0xFFFFFFFFu));
EXPECT_EQ(10, gl::BitCount(0x17103121u)); EXPECT_EQ(10, gl::BitCount(0x17103121u));
#if defined(ANGLE_X64_CPU) #if defined(ANGLE_IS_64_BIT_CPU)
EXPECT_EQ(0, gl::BitCount(0ull)); EXPECT_EQ(0, gl::BitCount(0ull));
EXPECT_EQ(32, gl::BitCount(0xFFFFFFFFull)); EXPECT_EQ(32, gl::BitCount(0xFFFFFFFFull));
EXPECT_EQ(10, gl::BitCount(0x17103121ull)); EXPECT_EQ(10, gl::BitCount(0x17103121ull));
#endif // defined(ANGLE_X64_CPU) #endif // defined(ANGLE_IS_64_BIT_CPU)
} }
// Test ScanForward, which scans for the least significant 1 bit from a non-zero integer. // Test ScanForward, which scans for the least significant 1 bit from a non-zero integer.
...@@ -289,11 +289,11 @@ TEST(MathUtilTest, ScanForward) ...@@ -289,11 +289,11 @@ TEST(MathUtilTest, ScanForward)
EXPECT_EQ(16ul, gl::ScanForward(0x80010000u)); EXPECT_EQ(16ul, gl::ScanForward(0x80010000u));
EXPECT_EQ(31ul, gl::ScanForward(0x80000000u)); EXPECT_EQ(31ul, gl::ScanForward(0x80000000u));
#if defined(ANGLE_X64_CPU) #if defined(ANGLE_IS_64_BIT_CPU)
EXPECT_EQ(0ul, gl::ScanForward(1ull)); EXPECT_EQ(0ul, gl::ScanForward(1ull));
EXPECT_EQ(16ul, gl::ScanForward(0x80010000ull)); EXPECT_EQ(16ul, gl::ScanForward(0x80010000ull));
EXPECT_EQ(31ul, gl::ScanForward(0x80000000ull)); EXPECT_EQ(31ul, gl::ScanForward(0x80000000ull));
#endif // defined(ANGLE_X64_CPU) #endif // defined(ANGLE_IS_64_BIT_CPU)
} }
// Test ScanReverse, which scans for the most significant 1 bit from a non-zero integer. // Test ScanReverse, which scans for the most significant 1 bit from a non-zero integer.
......
...@@ -49,11 +49,11 @@ void BitSetIteratorPerfTest<T>::step() ...@@ -49,11 +49,11 @@ void BitSetIteratorPerfTest<T>::step()
} }
// These type names unfortunately don't get printed correctly in Gtest. // These type names unfortunately don't get printed correctly in Gtest.
#if defined(ANGLE_X64_CPU) #if defined(ANGLE_IS_64_BIT_CPU)
using TestTypes = Types<angle::IterableBitSet<32>, angle::BitSet32<32>, angle::BitSet64<32>>; using TestTypes = Types<angle::IterableBitSet<32>, angle::BitSet32<32>, angle::BitSet64<32>>;
#else #else
using TestTypes = Types<angle::IterableBitSet<32>, angle::BitSet32<32>>; using TestTypes = Types<angle::IterableBitSet<32>, angle::BitSet32<32>>;
#endif // defined(ANGLE_X64_CPU) #endif // defined(ANGLE_IS_64_BIT_CPU)
TYPED_TEST_CASE(BitSetIteratorPerfTest, TestTypes); TYPED_TEST_CASE(BitSetIteratorPerfTest, TestTypes);
TYPED_TEST(BitSetIteratorPerfTest, Run) TYPED_TEST(BitSetIteratorPerfTest, Run)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment