[libc-commits] [libc] [libc] Added type-generic macros for fixed-point functions (PR #129371)
Ishaan Verma via libc-commits
libc-commits at lists.llvm.org
Thu Mar 6 11:11:11 PST 2025
https://github.com/lazyprop updated https://github.com/llvm/llvm-project/pull/129371
>From bc55d8cee6d751a2b7d0174dceec7c18e6bf7591 Mon Sep 17 00:00:00 2001
From: Ishaan Verma <ishaan56verma at gmail.com>
Date: Sat, 1 Mar 2025 13:20:29 +0530
Subject: [PATCH 1/4] 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 <ishaan56verma at gmail.com>
Date: Thu, 6 Mar 2025 02:22:41 +0530
Subject: [PATCH 2/4] 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 <ishaan56verma at gmail.com>
Date: Thu, 6 Mar 2025 18:56:36 +0530
Subject: [PATCH 3/4] 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 <ishaan56verma at gmail.com>
Date: Fri, 7 Mar 2025 00:40:52 +0530
Subject: [PATCH 4/4] 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
More information about the libc-commits
mailing list