28 0b11111110
'11011100'10111010
'10011000'01110110
'01010100'00110010
'00010000; 30 if (not Haswell::supported()) { 34 LOG(INFO) << "Testing Haswell on supported machine"; 36 // Extract 4 bits a time, starting from bit 0 37 uint64_t expected = 0; 38 for (int i = 0; i < 64 - 4; i += 4) { 39 EXPECT_EQ(expected, Default::bextr(value, i, 4)); 40 EXPECT_EQ(expected, Haswell::bextr(value, i, 4)); 44 // Extract 8 bits a time, starting from bit 1 45 uint64_t value2 = value << 1; 48 for (int i = 1; i < 64 - 8; i += 4) { 49 expected = (lower & 0xF) | ((upper & 0xF) << 4); 50 EXPECT_EQ(expected, Default::bextr(value2, i, 8)); 51 EXPECT_EQ(expected, Haswell::bextr(value2, i, 8)); 56 // Extract 16 bits a time, starting from bit 2 57 uint64_t value3 = value << 2; 62 for (int i = 2; i < 64 - 16; i += 4) { 63 expected = (part0 & 0xF) | ((part1 & 0xF) << 4) | ((part2 & 0xF) << 8) | 64 ((part3 & 0xF) << 12); 65 EXPECT_EQ(expected, Default::bextr(value3, i, 16)); 66 EXPECT_EQ(expected, Haswell::bextr(value3, i, 16)); 74 expected = 0b1011'1010
'1001'1000
'0111'0110
'0101'0100;
75 EXPECT_EQ(expected, Default::bextr(value, 16, 32));
76 EXPECT_EQ(expected, Haswell::bextr(value, 16, 32));
79 EXPECT_EQ(value, Default::bextr(value, 0, 64));
80 EXPECT_EQ(value, Haswell::bextr(value, 0, 64));
83 EXPECT_EQ(0, Default::bextr(value, 4, 0));
84 EXPECT_EQ(0, Haswell::bextr(value, 4, 0));
87 EXPECT_EQ(0b1111, Default::bextr(value, 60, 5));
88 EXPECT_EQ(0b1111, Haswell::bextr(value, 60, 5));
90 EXPECT_EQ(0, Default::bextr(value, 64, 8));
91 EXPECT_EQ(0, Haswell::bextr(value, 64, 8));
93 EXPECT_EQ(value, Default::bextr(value, 0, 65));
94 EXPECT_EQ(value, Haswell::bextr(value, 0, 65));
#define EXPECT_EQ(val1, val2)
static const char *const value