Skip to content

Commit

Permalink
Add bit helpers
Browse files Browse the repository at this point in the history
Change-Id: I3f29793f0fec7555c1440db7504e4adbb6904d4f
Signed-off-by: Filip Hazubski <filip.hazubski@intel.com>
  • Loading branch information
fhazubski-Intel authored and Compute-Runtime-Automation committed Jan 18, 2019
1 parent 158f200 commit fae6c5f
Show file tree
Hide file tree
Showing 4 changed files with 111 additions and 1 deletion.
25 changes: 25 additions & 0 deletions common/helpers/bit_helpers.h
@@ -0,0 +1,25 @@
/*
* Copyright (C) 2019 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/

#pragma once
#include <cassert>
#include <cstdint>
#include <limits>

namespace OCLRT {

constexpr bool isBitSet(uint64_t field, uint64_t bitPosition) {
assert(bitPosition < std::numeric_limits<uint64_t>::digits); // undefined behavior
return (field & (1ull << bitPosition));
}

constexpr bool isValSet(uint64_t field, uint64_t value) {
assert(value != 0);
return ((field & value) == value);
}

} // namespace OCLRT
3 changes: 2 additions & 1 deletion runtime/mem_obj/mem_obj_helper.cpp
Expand Up @@ -5,6 +5,7 @@
*
*/

#include "common/helpers/bit_helpers.h"
#include "runtime/mem_obj/mem_obj_helper.h"

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

AllocationProperties MemObjHelper::getAllocationProperties(cl_mem_flags_intel flags, bool allocateMemory, size_t size, GraphicsAllocation::AllocationType type) {
AllocationProperties allocationProperties(allocateMemory, size, type);
allocationProperties.flags.uncacheable = !!(flags & CL_MEM_LOCALLY_UNCACHED_RESOURCE);
allocationProperties.flags.uncacheable = isValSet(flags, CL_MEM_LOCALLY_UNCACHED_RESOURCE);
return allocationProperties;
}

Expand Down
1 change: 1 addition & 0 deletions unit_tests/helpers/CMakeLists.txt
Expand Up @@ -11,6 +11,7 @@ set(IGDRCL_SRCS_tests_helpers
${CMAKE_CURRENT_SOURCE_DIR}/base_object_tests.cpp
${CMAKE_CURRENT_SOURCE_DIR}/base_object_tests_mt.cpp
${CMAKE_CURRENT_SOURCE_DIR}/basic_math_tests.cpp
${CMAKE_CURRENT_SOURCE_DIR}/bit_helpers_tests.cpp
${CMAKE_CURRENT_SOURCE_DIR}/cl_helper_tests.cpp
${CMAKE_CURRENT_SOURCE_DIR}/debug_helpers_tests.cpp
${CMAKE_CURRENT_SOURCE_DIR}/debug_manager_state_restore.h
Expand Down
83 changes: 83 additions & 0 deletions unit_tests/helpers/bit_helpers_tests.cpp
@@ -0,0 +1,83 @@
/*
* Copyright (C) 2019 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/

#include "common/helpers/bit_helpers.h"
#include "gtest/gtest.h"

using namespace OCLRT;

TEST(IsBitSetTests, givenDifferentValuesWhenTestingIsBitSetThenCorrectValueIsReturned) {
size_t field1 = 0;
size_t field2 = 0b1;
size_t field3 = 0b1000;
size_t field4 = 0b1010;

EXPECT_FALSE(isBitSet(field1, 0));
EXPECT_FALSE(isBitSet(field1, 1));
EXPECT_FALSE(isBitSet(field1, 2));
EXPECT_FALSE(isBitSet(field1, 3));

EXPECT_TRUE(isBitSet(field2, 0));
EXPECT_FALSE(isBitSet(field2, 1));
EXPECT_FALSE(isBitSet(field2, 2));
EXPECT_FALSE(isBitSet(field2, 3));

EXPECT_FALSE(isBitSet(field3, 0));
EXPECT_FALSE(isBitSet(field3, 1));
EXPECT_FALSE(isBitSet(field3, 2));
EXPECT_TRUE(isBitSet(field3, 3));

EXPECT_FALSE(isBitSet(field4, 0));
EXPECT_TRUE(isBitSet(field4, 1));
EXPECT_FALSE(isBitSet(field4, 2));
EXPECT_TRUE(isBitSet(field4, 3));
}

TEST(IsValSetTests, givenDifferentValuesWhenTestingIsValSetThenCorrectValueIsReturned) {
size_t field1 = 0;
size_t field2 = 0b1;
size_t field3 = 0b10;
size_t field4 = 0b1000;
size_t field5 = 0b1010;
size_t field6 = 0b1111;

EXPECT_FALSE(isValSet(field1, field2));
EXPECT_FALSE(isValSet(field1, field3));
EXPECT_FALSE(isValSet(field1, field4));
EXPECT_FALSE(isValSet(field1, field5));
EXPECT_FALSE(isValSet(field1, field6));

EXPECT_TRUE(isValSet(field2, field2));
EXPECT_FALSE(isValSet(field2, field3));
EXPECT_FALSE(isValSet(field2, field4));
EXPECT_FALSE(isValSet(field2, field5));
EXPECT_FALSE(isValSet(field2, field6));

EXPECT_FALSE(isValSet(field3, field2));
EXPECT_TRUE(isValSet(field3, field3));
EXPECT_FALSE(isValSet(field3, field4));
EXPECT_FALSE(isValSet(field3, field5));
EXPECT_FALSE(isValSet(field3, field6));

EXPECT_FALSE(isValSet(field4, field2));
EXPECT_FALSE(isValSet(field4, field3));
EXPECT_TRUE(isValSet(field4, field4));
EXPECT_FALSE(isValSet(field4, field5));
EXPECT_FALSE(isValSet(field4, field6));

EXPECT_FALSE(isValSet(field5, field2));
EXPECT_TRUE(isValSet(field5, field3));
EXPECT_TRUE(isValSet(field5, field4));
EXPECT_TRUE(isValSet(field5, field5));
EXPECT_FALSE(isValSet(field5, field6));

EXPECT_TRUE(isValSet(field6, field2));
EXPECT_TRUE(isValSet(field6, field3));
EXPECT_TRUE(isValSet(field6, field4));
EXPECT_TRUE(isValSet(field6, field5));
EXPECT_TRUE(isValSet(field6, field6));
}

0 comments on commit fae6c5f

Please sign in to comment.