mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 20:51:52 +01:00
Reverting r247972 (and subordinate commit r247972) as the 32-bit left-shift is undefined behavior on implementations where uinptr_t is 32-bits. One such platform is Windows, MSVC, x86.
llvm-svn: 247983
This commit is contained in:
parent
9612806853
commit
def3e26caa
@ -553,15 +553,17 @@ public:
|
||||
private:
|
||||
template<bool AddBits, bool InvertMask>
|
||||
void applyMask(const uint32_t *Mask, unsigned MaskWords) {
|
||||
uintptr_t M = Mask[0];
|
||||
if (MaskWords != 1) {
|
||||
assert(NumBaseBits == 64 && MaskWords == 2 &&
|
||||
"Mask is larger than base!");
|
||||
M |= uintptr_t(Mask[1]) << 32;
|
||||
if (NumBaseBits == 64 && MaskWords >= 2) {
|
||||
uint64_t M = Mask[0] | (uint64_t(Mask[1]) << 32);
|
||||
if (InvertMask) M = ~M;
|
||||
if (AddBits) setSmallBits(getSmallBits() | M);
|
||||
else setSmallBits(getSmallBits() & ~M);
|
||||
} else {
|
||||
uint32_t M = Mask[0];
|
||||
if (InvertMask) M = ~M;
|
||||
if (AddBits) setSmallBits(getSmallBits() | M);
|
||||
else setSmallBits(getSmallBits() & ~M);
|
||||
}
|
||||
if (InvertMask) M = ~M;
|
||||
if (AddBits) setSmallBits(getSmallBits() | M);
|
||||
else setSmallBits(getSmallBits() & ~M);
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -235,12 +235,12 @@ TYPED_TEST(BitVectorTest, PortableBitMask) {
|
||||
const uint32_t Mask1[] = { 0x80000000, 6, 5 };
|
||||
|
||||
A.resize(10);
|
||||
A.setBitsInMask(Mask1, 1);
|
||||
A.setBitsInMask(Mask1, 3);
|
||||
EXPECT_EQ(10u, A.size());
|
||||
EXPECT_FALSE(A.test(0));
|
||||
|
||||
A.resize(32);
|
||||
A.setBitsInMask(Mask1, 1);
|
||||
A.setBitsInMask(Mask1, 3);
|
||||
EXPECT_FALSE(A.test(0));
|
||||
EXPECT_TRUE(A.test(31));
|
||||
EXPECT_EQ(1u, A.count());
|
||||
|
Loading…
x
Reference in New Issue
Block a user