From 1b71c532e82bf7281cdef23d20ca3b6a1ec9fb38 Mon Sep 17 00:00:00 2001 From: Xiang Xiao Date: Mon, 6 Jun 2022 23:25:11 +0800 Subject: [PATCH 1/6] Fix warning: "UNUSED" redefined Signed-off-by: Xiang Xiao Change-Id: Idd095235aaba40f6229093738447dfbe9bc6dcfa --- test/DivideTest.h | 1 + test/benchmark.h | 1 + test/test_c99.c | 1 + 3 files changed, 3 insertions(+) diff --git a/test/DivideTest.h b/test/DivideTest.h index 7d0f9f1..219a6ea 100644 --- a/test/DivideTest.h +++ b/test/DivideTest.h @@ -35,6 +35,7 @@ using set_t = std::set; using namespace libdivide; +#undef UNUSED #define UNUSED(x) (void)(x) #if defined(LIBDIVIDE_SSE2) || defined(LIBDIVIDE_AVX2) || defined(LIBDIVIDE_AVX512) || \ diff --git a/test/benchmark.h b/test/benchmark.h index db0ec99..4a8a37c 100644 --- a/test/benchmark.h +++ b/test/benchmark.h @@ -11,6 +11,7 @@ #include #endif +#undef UNUSED #define UNUSED(x) (void)(x) #if defined(_WIN32) || defined(WIN32) diff --git a/test/test_c99.c b/test/test_c99.c index 09e28ee..0eba8f1 100644 --- a/test/test_c99.c +++ b/test/test_c99.c @@ -16,6 +16,7 @@ #pragma warning(disable : 4146) #endif +#undef UNUSED #define UNUSED(x) (void)(x) #define MIN_RANGE (UINT16_MAX/4U) #define LOOP_STEP 3 From b709565317043f61a437a193babe0ce4c25004d0 Mon Sep 17 00:00:00 2001 From: Xiang Xiao Date: Mon, 6 Jun 2022 23:27:37 +0800 Subject: [PATCH 2/6] =?UTF-8?q?Fix=20warning:=20function=20declaration=20i?= =?UTF-8?q?sn=E2=80=99t=20a=20prototype?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Xiang Xiao Change-Id: Iff49c7c211151187c978f2e6e07c0645e8401d78 --- test/test_c99.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/test/test_c99.c b/test/test_c99.c index 0eba8f1..41749fe 100644 --- a/test/test_c99.c +++ b/test/test_c99.c @@ -49,7 +49,7 @@ } \ } -void test_u16() { +void test_u16(void) { #define U16_DENOM 953 // Prime struct libdivide_u16_t divider = libdivide_u16_gen(U16_DENOM); #define OP_U16_DO(numer, divider) libdivide_u16_do(numer, ÷r) @@ -60,7 +60,7 @@ void test_u16() { TEST_BODY(uint16_t, UINT16_MAX, U16_DENOM, U16_DENOM, PRIu16, CONSTANT_OP_U16) } -void test_s16() { +void test_s16(void) { int16_t denom = (int16_t)-4003; // Prime struct libdivide_s16_t divider = libdivide_s16_gen(denom); #define OP_S16(numer, divider) libdivide_s16_do(numer, ÷r) @@ -75,28 +75,28 @@ void test_s16() { TEST_BODY(int16_t, INT16_MAX, -4003, 4003, PRId16, CONSTANT_OP_NEG_S16) } -void test_u32() { +void test_u32(void) { uint32_t denom = ((uint32_t)2 << 21) - 19; // Prime - see https://primes.utm.edu/lists/2small/0bit.html struct libdivide_u32_t divider = libdivide_u32_gen(denom); #define OP_U32(numer, divider) libdivide_u32_do(numer, ÷r) TEST_BODY(uint32_t, UINT32_MAX, denom, divider, PRIu32, OP_U32) } -void test_s32() { +void test_s32(void) { int32_t denom = -(((int32_t)2 << 21) - 55); // Prime - see https://primes.utm.edu/lists/2small/0bit.html struct libdivide_s32_t divider = libdivide_s32_gen(denom); #define OP_S32(numer, divider) libdivide_s32_do(numer, ÷r) TEST_BODY(int32_t, INT32_MAX, denom, divider, PRId32, OP_S32) } -void test_u64() { +void test_u64(void) { uint64_t denom = ((uint64_t)2 << 29) - 43; // Prime - see https://primes.utm.edu/lists/2small/0bit.html struct libdivide_u64_t divider = libdivide_u64_gen(denom); #define OP_U64(numer, divider) libdivide_u64_do(numer, ÷r) TEST_BODY(uint64_t, (UINT64_MAX/2) /* For speed */, denom, divider, PRIu64, OP_U64) } -void test_s64() { +void test_s64(void) { int64_t denom = -(((int64_t)2 << 29) - 121); // Prime - see https://primes.utm.edu/lists/2small/0bit.html struct libdivide_s64_t divider = libdivide_s64_gen(denom); #define OP_S64(numer, divider) libdivide_s64_do(numer, ÷r) From 9812b1bcdea83507e14959e5f98a4f769fdc6b12 Mon Sep 17 00:00:00 2001 From: Xiang Xiao Date: Mon, 6 Jun 2022 23:29:12 +0800 Subject: [PATCH 3/6] Fix warning: control reaches end of non-void function Signed-off-by: Xiang Xiao Change-Id: I59f6f805d44655c3e5c27b999404a813bd785488 --- test/test_c99.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/test_c99.c b/test/test_c99.c index 41749fe..baa2f0d 100644 --- a/test/test_c99.c +++ b/test/test_c99.c @@ -113,4 +113,6 @@ int main (int argc, char *argv[]) { test_s32(); test_u64(); test_s64(); + + return 0; } From ebb9f36597097a175439e54f726f50cc2a17ff89 Mon Sep 17 00:00:00 2001 From: Xiang Xiao Date: Tue, 7 Jun 2022 00:59:13 +0800 Subject: [PATCH 4/6] Avoid multiple definition of libdivide_gen, print_serial and to_str Signed-off-by: Xiang Xiao Change-Id: I8559cd1b68d8140d56cde2fd6a516adefe434e5b --- test/outputs.h | 22 +++++++++++----------- test/type_mappings.h | 4 ++-- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/test/outputs.h b/test/outputs.h index 89cb5b2..3fbb60d 100644 --- a/test/outputs.h +++ b/test/outputs.h @@ -12,7 +12,7 @@ // AVR doesn't support (s)printf() of 64-bit numbers. // PRId64 is undefined & GCC will issue a warning // So manually convert -char *to_str(char *buffer, uint64_t n) { +static inline char *to_str(char *buffer, uint64_t n) { buffer += 20; *buffer-- = 0; while (n) { @@ -21,7 +21,7 @@ char *to_str(char *buffer, uint64_t n) { } return buffer + 1; } -char *to_str(char *buffer, int64_t n) { +static inline char *to_str(char *buffer, int64_t n) { if (n<0){ buffer = to_str(buffer+1, (uint64_t)(n*-1))-1; *buffer = '-'; @@ -31,15 +31,15 @@ char *to_str(char *buffer, int64_t n) { } template -void print_serial(const _T &item) { Serial.print(item); } +static inline void print_serial(const _T &item) { Serial.print(item); } template <> -void print_serial(const uint64_t &item) +static inline void print_serial(const uint64_t &item) { char buffer[32]; Serial.print(to_str(buffer, item)); } template <> -void print_serial(const int64_t &item) +static inline void print_serial(const int64_t &item) { char buffer[32]; Serial.print(to_str(buffer, item)); @@ -50,11 +50,11 @@ void print_serial(const int64_t &item) #else -char *to_str(char *buffer, uint64_t n) { +static inline char *to_str(char *buffer, uint64_t n) { sprintf(buffer, "%" PRIu64, n); return buffer; } -char *to_str(char *buffer, int64_t n) { +static inline char *to_str(char *buffer, int64_t n) { sprintf(buffer, "%" PRId64, n); return buffer; } @@ -73,20 +73,20 @@ char *to_str(char *buffer, int64_t n) { #define PRINT_PROGRESS_MSG(item) #endif -char *to_str(char *buffer, uint32_t n) { +static inline char *to_str(char *buffer, uint32_t n) { sprintf(buffer, "%" PRIu32, n); return buffer; } -char *to_str(char *buffer, int32_t n) { +static inline char *to_str(char *buffer, int32_t n) { sprintf(buffer, "%" PRId32, n); return buffer; } -char *to_str(char *buffer, uint16_t n) { +static inline char *to_str(char *buffer, uint16_t n) { sprintf(buffer, "%" PRIu16, n); return buffer; } -char *to_str(char *buffer, int16_t n) { +static inline char *to_str(char *buffer, int16_t n) { sprintf(buffer, "%" PRId16, n); return buffer; } \ No newline at end of file diff --git a/test/type_mappings.h b/test/type_mappings.h index 3dbf08e..e42c8b4 100644 --- a/test/type_mappings.h +++ b/test/type_mappings.h @@ -34,12 +34,12 @@ template struct struct_selector {}; LIB_DIVIDE_GENERATOR(DECLARE_STRUCT_SELECTOR, NULL) template -typename struct_selector<_IntT>::struct_t libdivide_gen(_IntT) +static inline typename struct_selector<_IntT>::struct_t libdivide_gen(_IntT) { } #define LIBDIVDE_GEN(type, tag, ...) \ template <> \ - typename struct_selector::struct_t libdivide_gen(type d) \ + inline typename struct_selector::struct_t libdivide_gen(type d) \ { \ return libdivide::libdivide_ ## tag ## _gen(d);\ } From e26965c9155eb911248b2b32d16e9ab19907d638 Mon Sep 17 00:00:00 2001 From: Xiang Xiao Date: Mon, 6 Jun 2022 23:35:51 +0800 Subject: [PATCH 5/6] Add extern "C" to main function Signed-off-by: Xiang Xiao Change-Id: Iaf7ae6c3ed8bc7aeba7384ac6dc0a0f97d9b90c5 --- test/benchmark.cpp | 2 +- test/benchmark_branchfree.cpp | 2 +- test/fast_div_generator.cpp | 2 +- test/tester.cpp | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/test/benchmark.cpp b/test/benchmark.cpp index 468e6d1..cfb5048 100644 --- a/test/benchmark.cpp +++ b/test/benchmark.cpp @@ -16,7 +16,7 @@ #include -int main(int argc, char *argv[]) { +extern "C" int main(int argc, char *argv[]) { // Disable printf buffering. // This is mainly required for Windows. setbuf(stdout, NULL); diff --git a/test/benchmark_branchfree.cpp b/test/benchmark_branchfree.cpp index f1ca856..161b11d 100644 --- a/test/benchmark_branchfree.cpp +++ b/test/benchmark_branchfree.cpp @@ -171,7 +171,7 @@ void usage() { << std::endl; } -int main(int argc, const char* argv[]) { +extern "C" int main(int argc, const char* argv[]) { tasks_t tasks = 0; for (int i = 1; i < argc; i++) { diff --git a/test/fast_div_generator.cpp b/test/fast_div_generator.cpp index 3ad9aba..fe0d0d0 100644 --- a/test/fast_div_generator.cpp +++ b/test/fast_div_generator.cpp @@ -147,7 +147,7 @@ void print_disclaimer() << "// See " << __FILE__ << "\n"; } -int main(int argc, char *argv[]) { +extern "C" int main(int argc, char *argv[]) { if (argc!=3) { std::cout << "Usage: fast_div_generator [DATATYPE] [STYLE]\n" diff --git a/test/tester.cpp b/test/tester.cpp index 6f5331e..43f6982 100644 --- a/test/tester.cpp +++ b/test/tester.cpp @@ -64,7 +64,7 @@ void launch_test_thread(std::vector &test_threads) { test_threads.emplace_back(run_test<_IntT>); } -int main(int argc, char *argv[]) { +extern "C" int main(int argc, char *argv[]) { bool default_do_test = (argc <= 1); std::vector do_tests(6, default_do_test); From c3d55694d480f263dd6b3fe759899cc5353a65df Mon Sep 17 00:00:00 2001 From: Xiang Xiao Date: Tue, 7 Jun 2022 01:33:25 +0800 Subject: [PATCH 6/6] Add Make.dep, .built and .depend to .gitignore Signed-off-by: Xiang Xiao Change-Id: Ib3189c58987077f6b57c549f53ac824aba244e9b --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index e84e13a..18cdd77 100644 --- a/.gitignore +++ b/.gitignore @@ -10,10 +10,13 @@ CMakeCache.txt CMakeFiles CMakeScripts Makefile +Make.dep cmake_install.cmake install_manifest.txt CTestTestfile.cmake .DS_Store +.built +.depend .pio .vscode/* !.vscode/extensions.json