Skip to content

Commit dc7713c

Browse files
committed
chore: add type generic macros
1 parent cce1821 commit dc7713c

File tree

3 files changed

+51
-2
lines changed

3 files changed

+51
-2
lines changed

libc/include/llvm-libc-macros/stdfix-macros.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -362,6 +362,17 @@
362362
unsigned short accum: rounduhk, \
363363
unsigned long accum: roundulk)(x, y)
364364

365+
#define idivfx(x, y) \
366+
_Generic((x), \
367+
fract: idivr, \
368+
long fract: idivlr, \
369+
accum: idivk, \
370+
long accum: idivlk, \
371+
unsigned fract: idivur, \
372+
unsigned long fract: idivulr, \
373+
unsigned accum: idivuk, \
374+
unsigned long accum: idivulk)(x, y)
375+
365376
#endif // LIBC_COMPILER_HAS_FIXED_POINT
366377

367378
#endif // LLVM_LIBC_MACROS_STDFIX_MACROS_H

libc/test/src/stdfix/CMakeLists.txt

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -205,10 +205,19 @@ foreach(s IN ITEMS r hr lr k hk lk)
205205
)
206206
endforeach()
207207

208+
foreach(suffix IN ITEMS r lr k lk)
209+
list(APPEND macros_depends
210+
libc.src.stdfix.idiv${suffix}
211+
libc.src.stdfix.idivu${suffix}
212+
)
213+
endforeach()
214+
208215
add_libc_test(
209216
macros_test
210-
SUITE libc-stdfix-tests
211-
SRCS macros_test.cpp
217+
SUITE
218+
libc-stdfix-tests
219+
SRCS
220+
macros_test.cpp
212221
DEPENDS
213222
libc.include.stdfix
214223
${macros_depends}

libc/test/src/stdfix/macros_test.cpp

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,15 @@
4040
#include "src/stdfix/roundulr.h"
4141
#include "src/stdfix/roundur.h"
4242

43+
#include "src/stdfix/idivk.h"
44+
#include "src/stdfix/idivlk.h"
45+
#include "src/stdfix/idivlr.h"
46+
#include "src/stdfix/idivr.h"
47+
#include "src/stdfix/idivuk.h"
48+
#include "src/stdfix/idivulk.h"
49+
#include "src/stdfix/idivulr.h"
50+
#include "src/stdfix/idivur.h"
51+
4352
using LIBC_NAMESPACE::abshk;
4453
using LIBC_NAMESPACE::abshr;
4554
using LIBC_NAMESPACE::absk;
@@ -58,6 +67,14 @@ using LIBC_NAMESPACE::countlsuk;
5867
using LIBC_NAMESPACE::countlsulk;
5968
using LIBC_NAMESPACE::countlsulr;
6069
using LIBC_NAMESPACE::countlsur;
70+
using LIBC_NAMESPACE::idivk;
71+
using LIBC_NAMESPACE::idivlk;
72+
using LIBC_NAMESPACE::idivlr;
73+
using LIBC_NAMESPACE::idivr;
74+
using LIBC_NAMESPACE::idivuk;
75+
using LIBC_NAMESPACE::idivulk;
76+
using LIBC_NAMESPACE::idivulr;
77+
using LIBC_NAMESPACE::idivur;
6178
using LIBC_NAMESPACE::roundhk;
6279
using LIBC_NAMESPACE::roundhr;
6380
using LIBC_NAMESPACE::roundk;
@@ -111,3 +128,15 @@ TEST(LlvmLibcCountlsfxTest, Basic) {
111128
ASSERT_EQ(countlsfx(0.5uhk), countlsuhk(0.5uhk));
112129
ASSERT_EQ(countlsfx(0.5ulk), countlsulk(0.5ulk));
113130
}
131+
132+
TEST(LlvmLibcIdivfxTest, Basic) {
133+
ASSERT_EQ(idivfx(0.5r, 0.25r), idivr(0.5r, 0.25r));
134+
ASSERT_EQ(idivfx(0.5lr, 0.25lr), idivlr(0.5lr, 0.25lr));
135+
ASSERT_EQ(idivfx(0.5k, 0.25k), idivk(0.5k, 0.25k));
136+
ASSERT_EQ(idivfx(0.5lk, 0.25lk), idivlk(0.5lk, 0.25lk));
137+
138+
ASSERT_EQ(idivfx(0.5ur, 0.25ur), idivur(0.5ur, 0.25ur));
139+
ASSERT_EQ(idivfx(0.5ulr, 0.25ulr), idivulr(0.5ulr, 0.25ulr));
140+
ASSERT_EQ(idivfx(0.5uk, 0.25uk), idivuk(0.5uk, 0.25uk));
141+
ASSERT_EQ(idivfx(0.5ulk, 0.25ulk), idivulk(0.5ulk, 0.25ulk));
142+
}

0 commit comments

Comments
 (0)