From 4aad0b5e69950ed693b4a8c316d3777c19307f3b Mon Sep 17 00:00:00 2001 From: Merry Date: Wed, 20 Apr 2022 16:50:09 +0100 Subject: [PATCH 1/2] mcl/bit: Simplify sign_extend --- CMakeLists.txt | 2 +- include/mcl/bit/bit_field.hpp | 16 ++++++---------- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5b0cfa2..c9d526e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,7 @@ cmake_minimum_required(VERSION 3.12 FATAL_ERROR) include(GNUInstallDirs) -project(mcl LANGUAGES CXX VERSION 0.1.5) +project(mcl LANGUAGES CXX VERSION 0.1.6) # Project options option(MCL_WARNINGS_AS_ERRORS "Warnings as errors" ON) diff --git a/include/mcl/bit/bit_field.hpp b/include/mcl/bit/bit_field.hpp index c09eda0..b967ed4 100644 --- a/include/mcl/bit/bit_field.hpp +++ b/include/mcl/bit/bit_field.hpp @@ -143,11 +143,9 @@ template constexpr T sign_extend(T value) { static_assert(bit_count != 0, "cannot sign-extend zero-sized value"); - constexpr T m = ones(); - if (get_bit(value)) { - return value | ~m; - } - return value; + using S = std::make_signed_t; + constexpr size_t shift_amount = bitsizeof - bit_count; + return static_cast(static_cast(value << shift_amount) >> shift_amount); } /// Sign-extends a value that has bit_count bits to the full bitwidth of type T. @@ -155,11 +153,9 @@ template constexpr T sign_extend(size_t bit_count, T value) { ASSERT_MSG(bit_count != 0, "cannot sign-extend zero-sized value"); - const T m = ones(bit_count); - if (get_bit(bit_count - 1, value)) { - return value | ~m; - } - return value; + using S = std::make_signed_t; + const size_t shift_amount = bitsizeof - bit_count; + return static_cast(static_cast(value << shift_amount) >> shift_amount); } /// Replicate an element across a value of type T. From 761b7c05e80d789acf572b52175b852c6509e753 Mon Sep 17 00:00:00 2001 From: Merry Date: Sat, 23 Apr 2022 18:35:31 +0100 Subject: [PATCH 2/2] mcl: Build as PIC --- CMakeLists.txt | 2 +- src/CMakeLists.txt | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c9d526e..3bf3163 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,7 @@ cmake_minimum_required(VERSION 3.12 FATAL_ERROR) include(GNUInstallDirs) -project(mcl LANGUAGES CXX VERSION 0.1.6) +project(mcl LANGUAGES CXX VERSION 0.1.7) # Project options option(MCL_WARNINGS_AS_ERRORS "Warnings as errors" ON) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index a25392b..92d2d8e 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -63,6 +63,7 @@ target_include_directories(mcl ) target_compile_options(mcl PRIVATE ${MCL_CXX_FLAGS}) target_link_libraries(mcl PUBLIC $) +set_property(TARGET mcl PROPERTY POSITION_INDEPENDENT_CODE ON) add_library(merry::mcl ALIAS mcl) include(CreateTargetDirectoryGroups)