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") {
"EGL_EGLEXT_PROTOTYPES",
]
if (target_cpu == "x86") {
defines += [ "ANGLE_X86_CPU" ]
if (current_cpu == "x86" || current_cpu == "arm") {
defines += [ "ANGLE_IS_32_BIT_CPU" ]
}
if (target_cpu == "x64") {
defines += [ "ANGLE_X64_CPU" ]
if (current_cpu == "x64" || current_cpu == "arm64") {
defines += [ "ANGLE_IS_64_BIT_CPU" ]
}
}
......
......@@ -284,7 +284,7 @@
'TargetMachine': '1', # x86
},
},
'defines': [ 'ANGLE_X86_CPU' ],
'defines': [ 'ANGLE_IS_32_BIT_CPU' ],
}, # x86_Base
'x64_Base':
......@@ -302,7 +302,7 @@
'TargetMachine': '17', # x86 - 64
},
},
'defines': [ 'ANGLE_X64_CPU' ],
'defines': [ 'ANGLE_IS_64_BIT_CPU' ],
}, # x64_Base
# Concrete configurations
......
......@@ -435,10 +435,10 @@ template <size_t N>
using BitSet32 = BitSetT<N, uint32_t>;
// 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>
using BitSet64 = BitSetT<N, uint64_t>;
#endif // defined(ANGLE_X64_CPU)
#endif // defined(ANGLE_IS_64_BIT_CPU)
namespace priv
{
......@@ -453,7 +453,7 @@ struct GetBitSet
};
// 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>
struct GetBitSet<N, EnableIfBitsFit<N, uint64_t>>
{
......@@ -465,7 +465,7 @@ struct GetBitSet<N, EnableIfBitsFit<N, uint32_t>>
{
using Type = BitSet32<N>;
};
#endif // defined(ANGLE_X64_CPU)
#endif // defined(ANGLE_IS_64_BIT_CPU)
} // namespace priv
......
......@@ -888,12 +888,12 @@ inline int BitCount(uint32_t 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)
{
return static_cast<int>(__popcnt64(bits));
}
#endif // defined(ANGLE_X64_CPU)
#endif // defined(ANGLE_IS_64_BIT_CPU)
#endif // defined(ANGLE_PLATFORM_WINDOWS)
#if defined(ANGLE_PLATFORM_POSIX)
......@@ -902,12 +902,12 @@ inline int BitCount(uint32_t bits)
return __builtin_popcount(bits);
}
#if defined(ANGLE_X64_CPU)
#if defined(ANGLE_IS_64_BIT_CPU)
inline int BitCount(uint64_t bits)
{
return __builtin_popcountll(bits);
}
#endif // defined(ANGLE_X64_CPU)
#endif // defined(ANGLE_IS_64_BIT_CPU)
#endif // defined(ANGLE_PLATFORM_POSIX)
#if defined(ANGLE_PLATFORM_WINDOWS)
......@@ -922,7 +922,7 @@ inline unsigned long ScanForward(uint32_t bits)
return firstBitIndex;
}
#if defined(ANGLE_X64_CPU)
#if defined(ANGLE_IS_64_BIT_CPU)
inline unsigned long ScanForward(uint64_t bits)
{
ASSERT(bits != 0u);
......@@ -931,7 +931,7 @@ inline unsigned long ScanForward(uint64_t bits)
ASSERT(ret != 0u);
return firstBitIndex;
}
#endif // defined(ANGLE_X64_CPU)
#endif // defined(ANGLE_IS_64_BIT_CPU)
#endif // defined(ANGLE_PLATFORM_WINDOWS)
#if defined(ANGLE_PLATFORM_POSIX)
......@@ -941,13 +941,13 @@ inline unsigned long ScanForward(uint32_t 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)
{
ASSERT(bits != 0u);
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)
// 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)
EXPECT_EQ(32, gl::BitCount(0xFFFFFFFFu));
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(32, gl::BitCount(0xFFFFFFFFull));
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.
......@@ -289,11 +289,11 @@ TEST(MathUtilTest, ScanForward)
EXPECT_EQ(16ul, gl::ScanForward(0x80010000u));
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(16ul, gl::ScanForward(0x80010000ull));
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.
......
......@@ -49,11 +49,11 @@ void BitSetIteratorPerfTest<T>::step()
}
// 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>>;
#else
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(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