From 8da8aa73144066cfaf5fd404161560e63eb8bbd3 Mon Sep 17 00:00:00 2001 From: kuqin12 <42554914+kuqin12@users.noreply.github.com> Date: Tue, 4 Jun 2024 09:56:08 -0700 Subject: [PATCH] Fixing bsr64 for MathLib (#492) # Preface Please ensure you have read the [contribution docs](https://github.com/microsoft/mu/blob/master/CONTRIBUTING.md) prior to submitting the pull request. In particular, [pull request guidelines](https://github.com/microsoft/mu/blob/master/CONTRIBUTING.md#pull-request-best-practices). ## Description When using GCC(-like) compilers to build MathLib, the `sqrt_d` function will use built-in functions for bit scan reverse. However, the calculation for 64 bit BSR is incorrectly using the built-in function specifically for unsigned long, which is 32-bit for CLANGPDB and cause the unit test to fail. This change fixed the built-in function usage. For each item, place an "x" in between `[` and `]` if true. Example: `[x]`. _(you can also check items in the GitHub UI)_ - [x] Impacts functionality? - **Functionality** - Does the change ultimately impact how firmware functions? - Examples: Add a new library, publish a new PPI, update an algorithm, ... - [ ] Impacts security? - **Security** - Does the change have a direct security impact on an application, flow, or firmware? - Examples: Crypto algorithm change, buffer overflow fix, parameter validation improvement, ... - [ ] Breaking change? - **Breaking change** - Will anyone consuming this change experience a break in build or boot behavior? - Examples: Add a new library class, move a module to a different repo, call a function in a new library class in a pre-existing module, ... - [ ] Includes tests? - **Tests** - Does the change include any explicit test code? - Examples: Unit tests, integration tests, robot tests, ... - [ ] Includes documentation? - **Documentation** - Does the change contain explicit documentation additions outside direct code modifications (and comments)? - Examples: Update readme file, add feature readme file, link to documentation on an a separate Web page, ... ## How This Was Tested Unit test passed on QEMU SBSA platform built with CLANGPDB. ## Integration Instructions N/A --- MsCorePkg/Library/MathLib/MathLib.c | 2 +- MsCorePkg/MsCorePkg.ci.yaml | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/MsCorePkg/Library/MathLib/MathLib.c b/MsCorePkg/Library/MathLib/MathLib.c index 1dfa4bae50..3fe27b12e8 100644 --- a/MsCorePkg/Library/MathLib/MathLib.c +++ b/MsCorePkg/Library/MathLib/MathLib.c @@ -149,7 +149,7 @@ bsr64 ( ) { #if __GNUC__ > 3 // if we are using GCC take advantage of their builtins - return 64 - __builtin_clzl (value); + return 64 - __builtin_clzll (value); #elif _MSC_VER > 1500 // if we are using MS VS compiler 15 or greater unsigned long result; diff --git a/MsCorePkg/MsCorePkg.ci.yaml b/MsCorePkg/MsCorePkg.ci.yaml index 9b239804e7..e3c62e0682 100644 --- a/MsCorePkg/MsCorePkg.ci.yaml +++ b/MsCorePkg/MsCorePkg.ci.yaml @@ -109,7 +109,8 @@ "SQRTUNSIGNED", "VARPOL", "SNP's", - "UEFI's" + "UEFI's", + "clzll" ], "AdditionalIncludePaths": [] # Additional paths to spell check relative to package root (wildcards supported) },