Skip to content

Commit fae6c5f

Browse files
Add bit helpers
Change-Id: I3f29793f0fec7555c1440db7504e4adbb6904d4f Signed-off-by: Filip Hazubski <filip.hazubski@intel.com>
1 parent 158f200 commit fae6c5f

File tree

4 files changed

+111
-1
lines changed

4 files changed

+111
-1
lines changed

common/helpers/bit_helpers.h

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
/*
2+
* Copyright (C) 2019 Intel Corporation
3+
*
4+
* SPDX-License-Identifier: MIT
5+
*
6+
*/
7+
8+
#pragma once
9+
#include <cassert>
10+
#include <cstdint>
11+
#include <limits>
12+
13+
namespace OCLRT {
14+
15+
constexpr bool isBitSet(uint64_t field, uint64_t bitPosition) {
16+
assert(bitPosition < std::numeric_limits<uint64_t>::digits); // undefined behavior
17+
return (field & (1ull << bitPosition));
18+
}
19+
20+
constexpr bool isValSet(uint64_t field, uint64_t value) {
21+
assert(value != 0);
22+
return ((field & value) == value);
23+
}
24+
25+
} // namespace OCLRT

runtime/mem_obj/mem_obj_helper.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
*
66
*/
77

8+
#include "common/helpers/bit_helpers.h"
89
#include "runtime/mem_obj/mem_obj_helper.h"
910

1011
namespace OCLRT {
@@ -31,7 +32,7 @@ bool MemObjHelper::parseMemoryProperties(const cl_mem_properties_intel *properti
3132

3233
AllocationProperties MemObjHelper::getAllocationProperties(cl_mem_flags_intel flags, bool allocateMemory, size_t size, GraphicsAllocation::AllocationType type) {
3334
AllocationProperties allocationProperties(allocateMemory, size, type);
34-
allocationProperties.flags.uncacheable = !!(flags & CL_MEM_LOCALLY_UNCACHED_RESOURCE);
35+
allocationProperties.flags.uncacheable = isValSet(flags, CL_MEM_LOCALLY_UNCACHED_RESOURCE);
3536
return allocationProperties;
3637
}
3738

unit_tests/helpers/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ set(IGDRCL_SRCS_tests_helpers
1111
${CMAKE_CURRENT_SOURCE_DIR}/base_object_tests.cpp
1212
${CMAKE_CURRENT_SOURCE_DIR}/base_object_tests_mt.cpp
1313
${CMAKE_CURRENT_SOURCE_DIR}/basic_math_tests.cpp
14+
${CMAKE_CURRENT_SOURCE_DIR}/bit_helpers_tests.cpp
1415
${CMAKE_CURRENT_SOURCE_DIR}/cl_helper_tests.cpp
1516
${CMAKE_CURRENT_SOURCE_DIR}/debug_helpers_tests.cpp
1617
${CMAKE_CURRENT_SOURCE_DIR}/debug_manager_state_restore.h
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
/*
2+
* Copyright (C) 2019 Intel Corporation
3+
*
4+
* SPDX-License-Identifier: MIT
5+
*
6+
*/
7+
8+
#include "common/helpers/bit_helpers.h"
9+
#include "gtest/gtest.h"
10+
11+
using namespace OCLRT;
12+
13+
TEST(IsBitSetTests, givenDifferentValuesWhenTestingIsBitSetThenCorrectValueIsReturned) {
14+
size_t field1 = 0;
15+
size_t field2 = 0b1;
16+
size_t field3 = 0b1000;
17+
size_t field4 = 0b1010;
18+
19+
EXPECT_FALSE(isBitSet(field1, 0));
20+
EXPECT_FALSE(isBitSet(field1, 1));
21+
EXPECT_FALSE(isBitSet(field1, 2));
22+
EXPECT_FALSE(isBitSet(field1, 3));
23+
24+
EXPECT_TRUE(isBitSet(field2, 0));
25+
EXPECT_FALSE(isBitSet(field2, 1));
26+
EXPECT_FALSE(isBitSet(field2, 2));
27+
EXPECT_FALSE(isBitSet(field2, 3));
28+
29+
EXPECT_FALSE(isBitSet(field3, 0));
30+
EXPECT_FALSE(isBitSet(field3, 1));
31+
EXPECT_FALSE(isBitSet(field3, 2));
32+
EXPECT_TRUE(isBitSet(field3, 3));
33+
34+
EXPECT_FALSE(isBitSet(field4, 0));
35+
EXPECT_TRUE(isBitSet(field4, 1));
36+
EXPECT_FALSE(isBitSet(field4, 2));
37+
EXPECT_TRUE(isBitSet(field4, 3));
38+
}
39+
40+
TEST(IsValSetTests, givenDifferentValuesWhenTestingIsValSetThenCorrectValueIsReturned) {
41+
size_t field1 = 0;
42+
size_t field2 = 0b1;
43+
size_t field3 = 0b10;
44+
size_t field4 = 0b1000;
45+
size_t field5 = 0b1010;
46+
size_t field6 = 0b1111;
47+
48+
EXPECT_FALSE(isValSet(field1, field2));
49+
EXPECT_FALSE(isValSet(field1, field3));
50+
EXPECT_FALSE(isValSet(field1, field4));
51+
EXPECT_FALSE(isValSet(field1, field5));
52+
EXPECT_FALSE(isValSet(field1, field6));
53+
54+
EXPECT_TRUE(isValSet(field2, field2));
55+
EXPECT_FALSE(isValSet(field2, field3));
56+
EXPECT_FALSE(isValSet(field2, field4));
57+
EXPECT_FALSE(isValSet(field2, field5));
58+
EXPECT_FALSE(isValSet(field2, field6));
59+
60+
EXPECT_FALSE(isValSet(field3, field2));
61+
EXPECT_TRUE(isValSet(field3, field3));
62+
EXPECT_FALSE(isValSet(field3, field4));
63+
EXPECT_FALSE(isValSet(field3, field5));
64+
EXPECT_FALSE(isValSet(field3, field6));
65+
66+
EXPECT_FALSE(isValSet(field4, field2));
67+
EXPECT_FALSE(isValSet(field4, field3));
68+
EXPECT_TRUE(isValSet(field4, field4));
69+
EXPECT_FALSE(isValSet(field4, field5));
70+
EXPECT_FALSE(isValSet(field4, field6));
71+
72+
EXPECT_FALSE(isValSet(field5, field2));
73+
EXPECT_TRUE(isValSet(field5, field3));
74+
EXPECT_TRUE(isValSet(field5, field4));
75+
EXPECT_TRUE(isValSet(field5, field5));
76+
EXPECT_FALSE(isValSet(field5, field6));
77+
78+
EXPECT_TRUE(isValSet(field6, field2));
79+
EXPECT_TRUE(isValSet(field6, field3));
80+
EXPECT_TRUE(isValSet(field6, field4));
81+
EXPECT_TRUE(isValSet(field6, field5));
82+
EXPECT_TRUE(isValSet(field6, field6));
83+
}

0 commit comments

Comments
 (0)