From 7e82f3d01a3a65501ef802f28b64160848e6fdf4 Mon Sep 17 00:00:00 2001 From: hashlag Date: Sun, 30 Aug 2026 01:51:19 +0300 Subject: [PATCH] Branchless: Introduce ToBool(). --- Chaos/Padding/PadderIso7816.hpp | 2 +- Chaos/Padding/PadderPkcs7.hpp | 2 +- Chaos/Service/Branchless.hpp | 8 ++++++++ 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/Chaos/Padding/PadderIso7816.hpp b/Chaos/Padding/PadderIso7816.hpp index cb1d5dd..c5af640 100644 --- a/Chaos/Padding/PadderIso7816.hpp +++ b/Chaos/Padding/PadderIso7816.hpp @@ -73,7 +73,7 @@ public: return { - .IsOkay_ = static_cast(isOkay), + .IsOkay_ = Branchless::ToBool(isOkay), .PadSize_ = Branchless::Sel(isOkay, padSize, 0) }; } diff --git a/Chaos/Padding/PadderPkcs7.hpp b/Chaos/Padding/PadderPkcs7.hpp index b25f554..325a01f 100644 --- a/Chaos/Padding/PadderPkcs7.hpp +++ b/Chaos/Padding/PadderPkcs7.hpp @@ -66,7 +66,7 @@ public: return { - .IsOkay_ = static_cast(isOkay), + .IsOkay_ = Branchless::ToBool(isOkay), .PadSize_ = Branchless::Sel(isOkay, padSize, 0) }; } diff --git a/Chaos/Service/Branchless.hpp b/Chaos/Service/Branchless.hpp index 9c16fd1..0ff13be 100644 --- a/Chaos/Service/Branchless.hpp +++ b/Chaos/Service/Branchless.hpp @@ -82,6 +82,14 @@ struct Branchless return (mask & onTrue) | (~mask & onFalse); } + + template + static constexpr bool ToBool(UInt mask) noexcept + { + static_assert(std::is_unsigned_v); + + return Sel(mask, 1, 0); + } }; } // namespace Chaos::Service