From bc55d8cee6d751a2b7d0174dceec7c18e6bf7591 Mon Sep 17 00:00:00 2001 From: Ishaan Verma Date: Sat, 1 Mar 2025 13:20:29 +0530 Subject: [PATCH 1/5] added type-generic macros for abs, countls and round --- libc/include/llvm-libc-macros/stdfix-macros.h | 40 +++++++++ libc/include/stdfix.yaml | 8 +- libc/test/src/stdfix/CMakeLists.txt | 23 +++++ libc/test/src/stdfix/macros_test.cpp | 84 +++++++++++++++++++ 4 files changed, 154 insertions(+), 1 deletion(-) create mode 100644 libc/test/src/stdfix/macros_test.cpp diff --git a/libc/include/llvm-libc-macros/stdfix-macros.h b/libc/include/llvm-libc-macros/stdfix-macros.h index 554ebe544a42e..91c07bc34303d 100644 --- a/libc/include/llvm-libc-macros/stdfix-macros.h +++ b/libc/include/llvm-libc-macros/stdfix-macros.h @@ -323,6 +323,46 @@ #define ULACCUM_EPSILON 0x1.0p-32ULK #endif // ULACCUM_EPSILON +#define absfx(x) _Generic((x), \ + fract: LIBC_NAMESPACE::absr, \ + short fract: LIBC_NAMESPACE::abshr, \ + long fract: LIBC_NAMESPACE::abslr, \ + _Accum: LIBC_NAMESPACE::absk, \ + short _Accum: LIBC_NAMESPACE::abshk, \ + long _Accum: LIBC_NAMESPACE::abslk \ +)(x) + +#define countlsfx(x) _Generic((x), \ + fract: LIBC_NAMESPACE::countlsr, \ + short fract: LIBC_NAMESPACE::countlshr, \ + long fract: LIBC_NAMESPACE::countlslr, \ + _Accum: LIBC_NAMESPACE::countlsk, \ + short _Accum: LIBC_NAMESPACE::countlshk, \ + long _Accum: LIBC_NAMESPACE::countlslk, \ + unsigned fract: LIBC_NAMESPACE::countlsur, \ + unsigned short fract: LIBC_NAMESPACE::countlsuhr, \ + unsigned long fract: LIBC_NAMESPACE::countlsulr, \ + unsigned _Accum: LIBC_NAMESPACE::countlsuk, \ + unsigned short _Accum: LIBC_NAMESPACE::countlsuhk, \ + unsigned long _Accum: LIBC_NAMESPACE::countlsulk \ +)(x) + +#define roundfx(x, y) _Generic((x), \ + fract: LIBC_NAMESPACE::roundr, \ + short fract: LIBC_NAMESPACE::roundhr, \ + long fract: LIBC_NAMESPACE::roundlr, \ + _Accum: LIBC_NAMESPACE::roundk, \ + short _Accum: LIBC_NAMESPACE::roundhk, \ + long _Accum: LIBC_NAMESPACE::roundlk, \ + unsigned fract: LIBC_NAMESPACE::roundur, \ + unsigned short fract: LIBC_NAMESPACE::rounduhr, \ + unsigned long fract: LIBC_NAMESPACE::roundulr, \ + unsigned _Accum: LIBC_NAMESPACE::rounduk, \ + unsigned short _Accum: LIBC_NAMESPACE::rounduhk, \ + unsigned long _Accum: LIBC_NAMESPACE::roundulk \ +)(x, y) + + #endif // LIBC_COMPILER_HAS_FIXED_POINT #endif // LLVM_LIBC_MACROS_STDFIX_MACROS_H diff --git a/libc/include/stdfix.yaml b/libc/include/stdfix.yaml index 707e5a2b09819..29c4d8b5c8960 100644 --- a/libc/include/stdfix.yaml +++ b/libc/include/stdfix.yaml @@ -1,6 +1,12 @@ header: stdfix.h header_template: stdfix.h.def -macros: [] +macros: + - macro_name: absfx + macro_header: stdfix-macros.h + - macro_name: countlsfx + macro_header: stdfix-macros.h + - macro_name: roundfx + macro_header: stdfix-macros.h types: - type_name: stdfix-types enums: [] diff --git a/libc/test/src/stdfix/CMakeLists.txt b/libc/test/src/stdfix/CMakeLists.txt index 8dc0eb854e65c..a3dc25762f549 100644 --- a/libc/test/src/stdfix/CMakeLists.txt +++ b/libc/test/src/stdfix/CMakeLists.txt @@ -4,6 +4,7 @@ endif() add_custom_target(libc-stdfix-tests) + foreach(suffix IN ITEMS hr r lr hk k lk) add_libc_test( abs${suffix}_test @@ -176,3 +177,25 @@ add_libc_test( libc.src.__support.fixed_point.fx_rep libc.src.__support.FPUtil.basic_operations ) + +set(macros_depends) + +foreach(s IN ITEMS r hr lr k hk lk) + list(APPEND macros_depends + libc.src.stdfix.abs${s} + libc.src.stdfix.countls${s} + libc.src.stdfix.countlsu${s} + libc.src.stdfix.round${s} + libc.src.stdfix.roundu${s} + ) +endforeach() + +add_libc_test( + macros_test + SUITE libc-stdfix-tests + SRCS macros_test.cpp + DEPENDS + libc.include.stdfix + ${macros_depends} +) + diff --git a/libc/test/src/stdfix/macros_test.cpp b/libc/test/src/stdfix/macros_test.cpp new file mode 100644 index 0000000000000..6f6aec5c6defc --- /dev/null +++ b/libc/test/src/stdfix/macros_test.cpp @@ -0,0 +1,84 @@ +//===-- Unittests for absfx -----------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#include "AbsTest.h" +#include "src/stdfix/absr.h" +#include "src/stdfix/abshr.h" +#include "src/stdfix/abslr.h" +#include "src/stdfix/absk.h" +#include "src/stdfix/abshk.h" +#include "src/stdfix/abslk.h" + +#include "src/stdfix/countlsr.h" +#include "src/stdfix/countlshr.h" +#include "src/stdfix/countlslr.h" +#include "src/stdfix/countlsk.h" +#include "src/stdfix/countlshk.h" +#include "src/stdfix/countlslk.h" +#include "src/stdfix/countlsur.h" +#include "src/stdfix/countlsuhr.h" +#include "src/stdfix/countlsulr.h" +#include "src/stdfix/countlsuk.h" +#include "src/stdfix/countlsuhk.h" +#include "src/stdfix/countlsulk.h" + +#include "src/stdfix/roundr.h" +#include "src/stdfix/roundhr.h" +#include "src/stdfix/roundlr.h" +#include "src/stdfix/roundk.h" +#include "src/stdfix/roundhk.h" +#include "src/stdfix/roundlk.h" +#include "src/stdfix/roundur.h" +#include "src/stdfix/rounduhr.h" +#include "src/stdfix/roundulr.h" +#include "src/stdfix/rounduk.h" +#include "src/stdfix/rounduhk.h" +#include "src/stdfix/roundulk.h" + +TEST(LlvmLibcAbsfxTest, Basic) { + ASSERT_EQ(absfx(-0.5r), LIBC_NAMESPACE::absr(-0.5r)); + ASSERT_EQ(absfx(-0.5hr), LIBC_NAMESPACE::abshr(-0.5hr)); + ASSERT_EQ(absfx(-0.5lr), LIBC_NAMESPACE::abslr(-0.5lr)); + ASSERT_EQ(absfx(-0.5k), LIBC_NAMESPACE::absk(-0.5k)); + ASSERT_EQ(absfx(-0.5hk), LIBC_NAMESPACE::abshk(-0.5hk)); + ASSERT_EQ(absfx(-0.5lk), LIBC_NAMESPACE::abslk(-0.5lk)); +} + +TEST(LlvmLibcRoundfxTest, Basic) { + ASSERT_EQ(roundfx(0.75r, 0), LIBC_NAMESPACE::roundr(0.75r, 0)); + ASSERT_EQ(roundfx(0.75hr, 0), LIBC_NAMESPACE::roundhr(0.75hr, 0)); + ASSERT_EQ(roundfx(0.75lr, 0), LIBC_NAMESPACE::roundlr(0.75lr, 0)); + ASSERT_EQ(roundfx(0.75k, 0), LIBC_NAMESPACE::roundk(0.75k, 0)); + ASSERT_EQ(roundfx(0.75hk, 0), LIBC_NAMESPACE::roundhk(0.75hk, 0)); + ASSERT_EQ(roundfx(0.75lk, 0), LIBC_NAMESPACE::roundlk(0.75lk, 0)); + + ASSERT_EQ(roundfx(0.75ur, 0), LIBC_NAMESPACE::roundur(0.75ur, 0)); + ASSERT_EQ(roundfx(0.75uhr, 0), LIBC_NAMESPACE::rounduhr(0.75uhr, 0)); + ASSERT_EQ(roundfx(0.75ulr, 0), LIBC_NAMESPACE::roundulr(0.75ulr, 0)); + ASSERT_EQ(roundfx(0.75uk, 0), LIBC_NAMESPACE::rounduk(0.75uk, 0)); + ASSERT_EQ(roundfx(0.75uhk, 0), LIBC_NAMESPACE::rounduhk(0.75uhk, 0)); + ASSERT_EQ(roundfx(0.75ulk, 0), LIBC_NAMESPACE::roundulk(0.75ulk, 0)); +} + + +TEST(LlvmLibcCountlsfxTest, Basic) { + ASSERT_EQ(countlsfx(0.5r), LIBC_NAMESPACE::countlsr(0.5r)); + ASSERT_EQ(countlsfx(0.5hr), LIBC_NAMESPACE::countlshr(0.5hr)); + ASSERT_EQ(countlsfx(0.5lr), LIBC_NAMESPACE::countlslr(0.5lr)); + ASSERT_EQ(countlsfx(0.5k), LIBC_NAMESPACE::countlsk(0.5k)); + ASSERT_EQ(countlsfx(0.5hk), LIBC_NAMESPACE::countlshk(0.5hk)); + ASSERT_EQ(countlsfx(0.5lk), LIBC_NAMESPACE::countlslk(0.5lk)); + + ASSERT_EQ(countlsfx(0.5ur), LIBC_NAMESPACE::countlsr(0.5ur)); + ASSERT_EQ(countlsfx(0.5uhr), LIBC_NAMESPACE::countlshr(0.5uhr)); + ASSERT_EQ(countlsfx(0.5ulr), LIBC_NAMESPACE::countlslr(0.5ulr)); + ASSERT_EQ(countlsfx(0.5uk), LIBC_NAMESPACE::countlsk(0.5uk)); + ASSERT_EQ(countlsfx(0.5uhk), LIBC_NAMESPACE::countlshk(0.5uhk)); + ASSERT_EQ(countlsfx(0.5ulk), LIBC_NAMESPACE::countlslk(0.5ulk)); +} + From e53d151aec3316d75e87d108bfbc6cc709ba0937 Mon Sep 17 00:00:00 2001 From: Ishaan Verma Date: Thu, 6 Mar 2025 02:22:41 +0530 Subject: [PATCH 2/5] the macros should not invoke cpp namespace --- libc/include/llvm-libc-macros/stdfix-macros.h | 77 ++++++----- libc/test/src/stdfix/macros_test.cpp | 123 +++++++++++------- 2 files changed, 115 insertions(+), 85 deletions(-) diff --git a/libc/include/llvm-libc-macros/stdfix-macros.h b/libc/include/llvm-libc-macros/stdfix-macros.h index 91c07bc34303d..d32f1324615c0 100644 --- a/libc/include/llvm-libc-macros/stdfix-macros.h +++ b/libc/include/llvm-libc-macros/stdfix-macros.h @@ -323,45 +323,44 @@ #define ULACCUM_EPSILON 0x1.0p-32ULK #endif // ULACCUM_EPSILON -#define absfx(x) _Generic((x), \ - fract: LIBC_NAMESPACE::absr, \ - short fract: LIBC_NAMESPACE::abshr, \ - long fract: LIBC_NAMESPACE::abslr, \ - _Accum: LIBC_NAMESPACE::absk, \ - short _Accum: LIBC_NAMESPACE::abshk, \ - long _Accum: LIBC_NAMESPACE::abslk \ -)(x) - -#define countlsfx(x) _Generic((x), \ - fract: LIBC_NAMESPACE::countlsr, \ - short fract: LIBC_NAMESPACE::countlshr, \ - long fract: LIBC_NAMESPACE::countlslr, \ - _Accum: LIBC_NAMESPACE::countlsk, \ - short _Accum: LIBC_NAMESPACE::countlshk, \ - long _Accum: LIBC_NAMESPACE::countlslk, \ - unsigned fract: LIBC_NAMESPACE::countlsur, \ - unsigned short fract: LIBC_NAMESPACE::countlsuhr, \ - unsigned long fract: LIBC_NAMESPACE::countlsulr, \ - unsigned _Accum: LIBC_NAMESPACE::countlsuk, \ - unsigned short _Accum: LIBC_NAMESPACE::countlsuhk, \ - unsigned long _Accum: LIBC_NAMESPACE::countlsulk \ -)(x) - -#define roundfx(x, y) _Generic((x), \ - fract: LIBC_NAMESPACE::roundr, \ - short fract: LIBC_NAMESPACE::roundhr, \ - long fract: LIBC_NAMESPACE::roundlr, \ - _Accum: LIBC_NAMESPACE::roundk, \ - short _Accum: LIBC_NAMESPACE::roundhk, \ - long _Accum: LIBC_NAMESPACE::roundlk, \ - unsigned fract: LIBC_NAMESPACE::roundur, \ - unsigned short fract: LIBC_NAMESPACE::rounduhr, \ - unsigned long fract: LIBC_NAMESPACE::roundulr, \ - unsigned _Accum: LIBC_NAMESPACE::rounduk, \ - unsigned short _Accum: LIBC_NAMESPACE::rounduhk, \ - unsigned long _Accum: LIBC_NAMESPACE::roundulk \ -)(x, y) - +#define absfx(x) \ + _Generic((x), \ + fract: absr, \ + short fract: abshr, \ + long fract: abslr, \ + _Accum: absk, \ + short _Accum: abshk, \ + long _Accum: abslk)(x) + +#define countlsfx(x) \ + _Generic((x), \ + fract: countlsr, \ + short fract: countlshr, \ + long fract: countlslr, \ + _Accum: countlsk, \ + short _Accum: countlshk, \ + long _Accum: countlslk, \ + unsigned fract: countlsur, \ + unsigned short fract: countlsuhr, \ + unsigned long fract: countlsulr, \ + unsigned _Accum: countlsuk, \ + unsigned short _Accum: countlsuhk, \ + unsigned long _Accum: countlsulk)(x) + +#define roundfx(x, y) \ + _Generic((x), \ + fract: roundr, \ + short fract: roundhr, \ + long fract: roundlr, \ + _Accum: roundk, \ + short _Accum: roundhk, \ + long _Accum: roundlk, \ + unsigned fract: roundur, \ + unsigned short fract: rounduhr, \ + unsigned long fract: roundulr, \ + unsigned _Accum: rounduk, \ + unsigned short _Accum: rounduhk, \ + unsigned long _Accum: roundulk)(x, y) #endif // LIBC_COMPILER_HAS_FIXED_POINT diff --git a/libc/test/src/stdfix/macros_test.cpp b/libc/test/src/stdfix/macros_test.cpp index 6f6aec5c6defc..ba773c3f69f0c 100644 --- a/libc/test/src/stdfix/macros_test.cpp +++ b/libc/test/src/stdfix/macros_test.cpp @@ -7,78 +7,109 @@ //===----------------------------------------------------------------------===// #include "AbsTest.h" -#include "src/stdfix/absr.h" +#include "src/stdfix/abshk.h" #include "src/stdfix/abshr.h" -#include "src/stdfix/abslr.h" #include "src/stdfix/absk.h" -#include "src/stdfix/abshk.h" #include "src/stdfix/abslk.h" +#include "src/stdfix/abslr.h" +#include "src/stdfix/absr.h" -#include "src/stdfix/countlsr.h" +#include "src/stdfix/countlshk.h" #include "src/stdfix/countlshr.h" -#include "src/stdfix/countlslr.h" #include "src/stdfix/countlsk.h" -#include "src/stdfix/countlshk.h" #include "src/stdfix/countlslk.h" -#include "src/stdfix/countlsur.h" +#include "src/stdfix/countlslr.h" +#include "src/stdfix/countlsr.h" +#include "src/stdfix/countlsuhk.h" #include "src/stdfix/countlsuhr.h" -#include "src/stdfix/countlsulr.h" #include "src/stdfix/countlsuk.h" -#include "src/stdfix/countlsuhk.h" #include "src/stdfix/countlsulk.h" +#include "src/stdfix/countlsulr.h" +#include "src/stdfix/countlsur.h" -#include "src/stdfix/roundr.h" +#include "src/stdfix/roundhk.h" #include "src/stdfix/roundhr.h" -#include "src/stdfix/roundlr.h" #include "src/stdfix/roundk.h" -#include "src/stdfix/roundhk.h" #include "src/stdfix/roundlk.h" -#include "src/stdfix/roundur.h" +#include "src/stdfix/roundlr.h" +#include "src/stdfix/roundr.h" +#include "src/stdfix/rounduhk.h" #include "src/stdfix/rounduhr.h" -#include "src/stdfix/roundulr.h" #include "src/stdfix/rounduk.h" -#include "src/stdfix/rounduhk.h" #include "src/stdfix/roundulk.h" +#include "src/stdfix/roundulr.h" +#include "src/stdfix/roundur.h" + +using LIBC_NAMESPACE::absr; +using LIBC_NAMESPACE::abshr; +using LIBC_NAMESPACE::abslr; +using LIBC_NAMESPACE::absk; +using LIBC_NAMESPACE::abshk; +using LIBC_NAMESPACE::abslk; +using LIBC_NAMESPACE::roundr; +using LIBC_NAMESPACE::roundhr; +using LIBC_NAMESPACE::roundlr; +using LIBC_NAMESPACE::roundk; +using LIBC_NAMESPACE::roundhk; +using LIBC_NAMESPACE::roundlk; +using LIBC_NAMESPACE::roundur; +using LIBC_NAMESPACE::rounduhr; +using LIBC_NAMESPACE::roundulr; +using LIBC_NAMESPACE::rounduk; +using LIBC_NAMESPACE::rounduhk; +using LIBC_NAMESPACE::roundulk; +using LIBC_NAMESPACE::countlsr; +using LIBC_NAMESPACE::countlshr; +using LIBC_NAMESPACE::countlslr; +using LIBC_NAMESPACE::countlsk; +using LIBC_NAMESPACE::countlshk; +using LIBC_NAMESPACE::countlslk; +using LIBC_NAMESPACE::countlsur; +using LIBC_NAMESPACE::countlsuhr; +using LIBC_NAMESPACE::countlsulr; +using LIBC_NAMESPACE::countlsuk; +using LIBC_NAMESPACE::countlsuhk; +using LIBC_NAMESPACE::countlsulk; + TEST(LlvmLibcAbsfxTest, Basic) { - ASSERT_EQ(absfx(-0.5r), LIBC_NAMESPACE::absr(-0.5r)); - ASSERT_EQ(absfx(-0.5hr), LIBC_NAMESPACE::abshr(-0.5hr)); - ASSERT_EQ(absfx(-0.5lr), LIBC_NAMESPACE::abslr(-0.5lr)); - ASSERT_EQ(absfx(-0.5k), LIBC_NAMESPACE::absk(-0.5k)); - ASSERT_EQ(absfx(-0.5hk), LIBC_NAMESPACE::abshk(-0.5hk)); - ASSERT_EQ(absfx(-0.5lk), LIBC_NAMESPACE::abslk(-0.5lk)); + ASSERT_EQ(absfx(-0.5r), absr(-0.5r)); + ASSERT_EQ(absfx(-0.5hr), abshr(-0.5hr)); + ASSERT_EQ(absfx(-0.5lr), abslr(-0.5lr)); + ASSERT_EQ(absfx(-0.5k), absk(-0.5k)); + ASSERT_EQ(absfx(-0.5hk), abshk(-0.5hk)); + ASSERT_EQ(absfx(-0.5lk), abslk(-0.5lk)); } TEST(LlvmLibcRoundfxTest, Basic) { - ASSERT_EQ(roundfx(0.75r, 0), LIBC_NAMESPACE::roundr(0.75r, 0)); - ASSERT_EQ(roundfx(0.75hr, 0), LIBC_NAMESPACE::roundhr(0.75hr, 0)); - ASSERT_EQ(roundfx(0.75lr, 0), LIBC_NAMESPACE::roundlr(0.75lr, 0)); - ASSERT_EQ(roundfx(0.75k, 0), LIBC_NAMESPACE::roundk(0.75k, 0)); - ASSERT_EQ(roundfx(0.75hk, 0), LIBC_NAMESPACE::roundhk(0.75hk, 0)); - ASSERT_EQ(roundfx(0.75lk, 0), LIBC_NAMESPACE::roundlk(0.75lk, 0)); + ASSERT_EQ(roundfx(0.75r, 0), roundr(0.75r, 0)); + ASSERT_EQ(roundfx(0.75hr, 0), roundhr(0.75hr, 0)); + ASSERT_EQ(roundfx(0.75lr, 0), roundlr(0.75lr, 0)); + ASSERT_EQ(roundfx(0.75k, 0), roundk(0.75k, 0)); + ASSERT_EQ(roundfx(0.75hk, 0), roundhk(0.75hk, 0)); + ASSERT_EQ(roundfx(0.75lk, 0), roundlk(0.75lk, 0)); - ASSERT_EQ(roundfx(0.75ur, 0), LIBC_NAMESPACE::roundur(0.75ur, 0)); - ASSERT_EQ(roundfx(0.75uhr, 0), LIBC_NAMESPACE::rounduhr(0.75uhr, 0)); - ASSERT_EQ(roundfx(0.75ulr, 0), LIBC_NAMESPACE::roundulr(0.75ulr, 0)); - ASSERT_EQ(roundfx(0.75uk, 0), LIBC_NAMESPACE::rounduk(0.75uk, 0)); - ASSERT_EQ(roundfx(0.75uhk, 0), LIBC_NAMESPACE::rounduhk(0.75uhk, 0)); - ASSERT_EQ(roundfx(0.75ulk, 0), LIBC_NAMESPACE::roundulk(0.75ulk, 0)); + ASSERT_EQ(roundfx(0.75ur, 0), roundur(0.75ur, 0)); + ASSERT_EQ(roundfx(0.75uhr, 0), rounduhr(0.75uhr, 0)); + ASSERT_EQ(roundfx(0.75ulr, 0), roundulr(0.75ulr, 0)); + ASSERT_EQ(roundfx(0.75uk, 0), rounduk(0.75uk, 0)); + ASSERT_EQ(roundfx(0.75uhk, 0), rounduhk(0.75uhk, 0)); + ASSERT_EQ(roundfx(0.75ulk, 0), roundulk(0.75ulk, 0)); } - TEST(LlvmLibcCountlsfxTest, Basic) { - ASSERT_EQ(countlsfx(0.5r), LIBC_NAMESPACE::countlsr(0.5r)); - ASSERT_EQ(countlsfx(0.5hr), LIBC_NAMESPACE::countlshr(0.5hr)); - ASSERT_EQ(countlsfx(0.5lr), LIBC_NAMESPACE::countlslr(0.5lr)); - ASSERT_EQ(countlsfx(0.5k), LIBC_NAMESPACE::countlsk(0.5k)); - ASSERT_EQ(countlsfx(0.5hk), LIBC_NAMESPACE::countlshk(0.5hk)); - ASSERT_EQ(countlsfx(0.5lk), LIBC_NAMESPACE::countlslk(0.5lk)); + ASSERT_EQ(countlsfx(0.5r), countlsr(0.5r)); + ASSERT_EQ(countlsfx(0.5hr), countlshr(0.5hr)); + ASSERT_EQ(countlsfx(0.5lr), countlslr(0.5lr)); + ASSERT_EQ(countlsfx(0.5k), countlsk(0.5k)); + ASSERT_EQ(countlsfx(0.5hk), countlshk(0.5hk)); + ASSERT_EQ(countlsfx(0.5lk), countlslk(0.5lk)); - ASSERT_EQ(countlsfx(0.5ur), LIBC_NAMESPACE::countlsr(0.5ur)); - ASSERT_EQ(countlsfx(0.5uhr), LIBC_NAMESPACE::countlshr(0.5uhr)); - ASSERT_EQ(countlsfx(0.5ulr), LIBC_NAMESPACE::countlslr(0.5ulr)); - ASSERT_EQ(countlsfx(0.5uk), LIBC_NAMESPACE::countlsk(0.5uk)); - ASSERT_EQ(countlsfx(0.5uhk), LIBC_NAMESPACE::countlshk(0.5uhk)); - ASSERT_EQ(countlsfx(0.5ulk), LIBC_NAMESPACE::countlslk(0.5ulk)); + ASSERT_EQ(countlsfx(0.5ur), countlsur(0.5ur)); + ASSERT_EQ(countlsfx(0.5uhr), countlsuhr(0.5uhr)); + ASSERT_EQ(countlsfx(0.5ulr), countlsulr(0.5ulr)); + ASSERT_EQ(countlsfx(0.5uk), countlsuk(0.5uk)); + ASSERT_EQ(countlsfx(0.5uhk), countlsuhk(0.5uhk)); + ASSERT_EQ(countlsfx(0.5ulk), countlsulk(0.5ulk)); } From 1e6be6278d5eefb4abfb27920c6331fc29c16f2d Mon Sep 17 00:00:00 2001 From: Ishaan Verma Date: Thu, 6 Mar 2025 18:56:36 +0530 Subject: [PATCH 3/5] clang-format stdfix-macros.h --- libc/include/llvm-libc-macros/stdfix-macros.h | 54 +++++++++---------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/libc/include/llvm-libc-macros/stdfix-macros.h b/libc/include/llvm-libc-macros/stdfix-macros.h index d32f1324615c0..ac1df1834b6c7 100644 --- a/libc/include/llvm-libc-macros/stdfix-macros.h +++ b/libc/include/llvm-libc-macros/stdfix-macros.h @@ -325,41 +325,41 @@ #define absfx(x) \ _Generic((x), \ - fract: absr, \ - short fract: abshr, \ - long fract: abslr, \ - _Accum: absk, \ - short _Accum: abshk, \ + fract: absr, \ + short fract: abshr, \ + long fract: abslr, \ + _Accum: absk, \ + short _Accum: abshk, \ long _Accum: abslk)(x) #define countlsfx(x) \ _Generic((x), \ - fract: countlsr, \ - short fract: countlshr, \ - long fract: countlslr, \ - _Accum: countlsk, \ - short _Accum: countlshk, \ - long _Accum: countlslk, \ - unsigned fract: countlsur, \ - unsigned short fract: countlsuhr, \ - unsigned long fract: countlsulr, \ - unsigned _Accum: countlsuk, \ - unsigned short _Accum: countlsuhk, \ + fract: countlsr, \ + short fract: countlshr, \ + long fract: countlslr, \ + _Accum: countlsk, \ + short _Accum: countlshk, \ + long _Accum: countlslk, \ + unsigned fract: countlsur, \ + unsigned short fract: countlsuhr, \ + unsigned long fract: countlsulr, \ + unsigned _Accum: countlsuk, \ + unsigned short _Accum: countlsuhk, \ unsigned long _Accum: countlsulk)(x) #define roundfx(x, y) \ _Generic((x), \ - fract: roundr, \ - short fract: roundhr, \ - long fract: roundlr, \ - _Accum: roundk, \ - short _Accum: roundhk, \ - long _Accum: roundlk, \ - unsigned fract: roundur, \ - unsigned short fract: rounduhr, \ - unsigned long fract: roundulr, \ - unsigned _Accum: rounduk, \ - unsigned short _Accum: rounduhk, \ + fract: roundr, \ + short fract: roundhr, \ + long fract: roundlr, \ + _Accum: roundk, \ + short _Accum: roundhk, \ + long _Accum: roundlk, \ + unsigned fract: roundur, \ + unsigned short fract: rounduhr, \ + unsigned long fract: roundulr, \ + unsigned _Accum: rounduk, \ + unsigned short _Accum: rounduhk, \ unsigned long _Accum: roundulk)(x, y) #endif // LIBC_COMPILER_HAS_FIXED_POINT From 8d35583cbf72d734c26bb63256d0e28bdabf9347 Mon Sep 17 00:00:00 2001 From: Ishaan Verma Date: Fri, 7 Mar 2025 00:40:52 +0530 Subject: [PATCH 4/5] use accum instead of _Accum --- libc/include/llvm-libc-macros/stdfix-macros.h | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/libc/include/llvm-libc-macros/stdfix-macros.h b/libc/include/llvm-libc-macros/stdfix-macros.h index ac1df1834b6c7..04097e14e9747 100644 --- a/libc/include/llvm-libc-macros/stdfix-macros.h +++ b/libc/include/llvm-libc-macros/stdfix-macros.h @@ -328,39 +328,39 @@ fract: absr, \ short fract: abshr, \ long fract: abslr, \ - _Accum: absk, \ - short _Accum: abshk, \ - long _Accum: abslk)(x) + accum: absk, \ + short accum: abshk, \ + long accum: abslk)(x) #define countlsfx(x) \ _Generic((x), \ fract: countlsr, \ short fract: countlshr, \ long fract: countlslr, \ - _Accum: countlsk, \ - short _Accum: countlshk, \ - long _Accum: countlslk, \ + accum: countlsk, \ + short accum: countlshk, \ + long accum: countlslk, \ unsigned fract: countlsur, \ unsigned short fract: countlsuhr, \ unsigned long fract: countlsulr, \ - unsigned _Accum: countlsuk, \ - unsigned short _Accum: countlsuhk, \ - unsigned long _Accum: countlsulk)(x) + unsigned accum: countlsuk, \ + unsigned short accum: countlsuhk, \ + unsigned long accum: countlsulk)(x) #define roundfx(x, y) \ _Generic((x), \ fract: roundr, \ short fract: roundhr, \ long fract: roundlr, \ - _Accum: roundk, \ - short _Accum: roundhk, \ - long _Accum: roundlk, \ + accum: roundk, \ + short accum: roundhk, \ + long accum: roundlk, \ unsigned fract: roundur, \ unsigned short fract: rounduhr, \ unsigned long fract: roundulr, \ - unsigned _Accum: rounduk, \ - unsigned short _Accum: rounduhk, \ - unsigned long _Accum: roundulk)(x, y) + unsigned accum: rounduk, \ + unsigned short accum: rounduhk, \ + unsigned long accum: roundulk)(x, y) #endif // LIBC_COMPILER_HAS_FIXED_POINT From 0c30e06aa75a11a8786b6cef09381a538418a864 Mon Sep 17 00:00:00 2001 From: Ishaan Verma Date: Fri, 7 Mar 2025 01:39:15 +0530 Subject: [PATCH 5/5] run git-clang-format on the entire branch --- libc/test/src/stdfix/macros_test.cpp | 44 +++++++++++++--------------- 1 file changed, 21 insertions(+), 23 deletions(-) diff --git a/libc/test/src/stdfix/macros_test.cpp b/libc/test/src/stdfix/macros_test.cpp index ba773c3f69f0c..b52abf3f07999 100644 --- a/libc/test/src/stdfix/macros_test.cpp +++ b/libc/test/src/stdfix/macros_test.cpp @@ -40,37 +40,36 @@ #include "src/stdfix/roundulr.h" #include "src/stdfix/roundur.h" -using LIBC_NAMESPACE::absr; +using LIBC_NAMESPACE::abshk; using LIBC_NAMESPACE::abshr; -using LIBC_NAMESPACE::abslr; using LIBC_NAMESPACE::absk; -using LIBC_NAMESPACE::abshk; using LIBC_NAMESPACE::abslk; -using LIBC_NAMESPACE::roundr; -using LIBC_NAMESPACE::roundhr; -using LIBC_NAMESPACE::roundlr; -using LIBC_NAMESPACE::roundk; -using LIBC_NAMESPACE::roundhk; -using LIBC_NAMESPACE::roundlk; -using LIBC_NAMESPACE::roundur; -using LIBC_NAMESPACE::rounduhr; -using LIBC_NAMESPACE::roundulr; -using LIBC_NAMESPACE::rounduk; -using LIBC_NAMESPACE::rounduhk; -using LIBC_NAMESPACE::roundulk; -using LIBC_NAMESPACE::countlsr; +using LIBC_NAMESPACE::abslr; +using LIBC_NAMESPACE::absr; +using LIBC_NAMESPACE::countlshk; using LIBC_NAMESPACE::countlshr; -using LIBC_NAMESPACE::countlslr; using LIBC_NAMESPACE::countlsk; -using LIBC_NAMESPACE::countlshk; using LIBC_NAMESPACE::countlslk; -using LIBC_NAMESPACE::countlsur; +using LIBC_NAMESPACE::countlslr; +using LIBC_NAMESPACE::countlsr; +using LIBC_NAMESPACE::countlsuhk; using LIBC_NAMESPACE::countlsuhr; -using LIBC_NAMESPACE::countlsulr; using LIBC_NAMESPACE::countlsuk; -using LIBC_NAMESPACE::countlsuhk; using LIBC_NAMESPACE::countlsulk; - +using LIBC_NAMESPACE::countlsulr; +using LIBC_NAMESPACE::countlsur; +using LIBC_NAMESPACE::roundhk; +using LIBC_NAMESPACE::roundhr; +using LIBC_NAMESPACE::roundk; +using LIBC_NAMESPACE::roundlk; +using LIBC_NAMESPACE::roundlr; +using LIBC_NAMESPACE::roundr; +using LIBC_NAMESPACE::rounduhk; +using LIBC_NAMESPACE::rounduhr; +using LIBC_NAMESPACE::rounduk; +using LIBC_NAMESPACE::roundulk; +using LIBC_NAMESPACE::roundulr; +using LIBC_NAMESPACE::roundur; TEST(LlvmLibcAbsfxTest, Basic) { ASSERT_EQ(absfx(-0.5r), absr(-0.5r)); @@ -112,4 +111,3 @@ TEST(LlvmLibcCountlsfxTest, Basic) { ASSERT_EQ(countlsfx(0.5uhk), countlsuhk(0.5uhk)); ASSERT_EQ(countlsfx(0.5ulk), countlsulk(0.5ulk)); } -