aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormaruncz <marun1@email.cz>2021-04-19 10:46:15 +0200
committermaruncz <marun1@email.cz>2021-04-19 10:46:15 +0200
commit7541eae325e4b0765cc6c1908287efca237e7fc7 (patch)
tree634286147c11727ed4b9f71bc763df16a68745d4
parent24488b16cc0359daada0682a9bd3a11a801d0a01 (diff)
added cmake project file
-rw-r--r--.gitignore160
-rw-r--r--CMakeLists.txt28
-rw-r--r--contrib/fix16_fft.c2
-rw-r--r--fixtest/hiclock.c35
-rw-r--r--fixtest/main.c158
-rw-r--r--images/error_analysis.odsbin145939 -> 49574 bytes
6 files changed, 294 insertions, 89 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..a6cb559
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,160 @@
+# This file is used to ignore files which are generated
+# ----------------------------------------------------------------------------
+
+*~
+*.autosave
+*.a
+*.core
+*.moc
+*.o
+*.obj
+*.orig
+*.rej
+*.so
+*.so.*
+*_pch.h.cpp
+*_resource.rc
+*.qm
+.#*
+*.*#
+core
+!core/
+tags
+.DS_Store
+.directory
+*.debug
+Makefile*
+*.prl
+*.app
+moc_*.cpp
+ui_*.h
+qrc_*.cpp
+Thumbs.db
+*.res
+*.rc
+/.qmake.cache
+/.qmake.stash
+
+# qtcreator generated files
+*.pro.user*
+
+# xemacs temporary files
+*.flc
+
+# Vim temporary files
+.*.swp
+
+# Visual Studio generated files
+*.ib_pdb_index
+*.idb
+*.ilk
+*.pdb
+*.sln
+*.suo
+*.vcproj
+*vcproj.*.*.user
+*.ncb
+*.sdf
+*.opensdf
+*.vcxproj
+*vcxproj.*
+
+# MinGW generated files
+*.Debug
+*.Release
+
+# Python byte code
+*.pyc
+
+# Binaries
+# --------
+*.dll
+*.exe
+
+# Prerequisites
+*.d
+
+# Compiled Object files
+*.slo
+*.lo
+*.o
+*.obj
+
+# Precompiled Headers
+*.gch
+*.pch
+
+# Compiled Dynamic libraries
+*.so
+*.dylib
+*.dll
+
+# Fortran module files
+*.mod
+*.smod
+
+# Compiled Static libraries
+*.lai
+*.la
+*.a
+*.lib
+
+# Executables
+*.exe
+*.out
+*.app
+
+# C++ objects and libs
+*.slo
+*.lo
+*.o
+*.a
+*.la
+*.lai
+*.so
+*.so.*
+*.dll
+*.dylib
+
+# Qt-es
+object_script.*.Release
+object_script.*.Debug
+*_plugin_import.cpp
+/.qmake.cache
+/.qmake.stash
+*.pro.user
+*.pro.user.*
+*.qbs.user
+*.qbs.user.*
+*.moc
+moc_*.cpp
+moc_*.h
+qrc_*.cpp
+ui_*.h
+*.qmlc
+*.jsc
+Makefile*
+*build-*
+*.qm
+*.prl
+
+# Qt unit tests
+target_wrapper.*
+
+# QtCreator
+*.autosave
+
+# QtCreator Qml
+*.qmlproject.user
+*.qmlproject.user.*
+
+# QtCreator CMake
+CMakeLists.txt.user*
+
+# QtCreator 4.8< compilation database
+compile_commands.json
+
+# QtCreator local machine specific files for imported projects
+*creator.user*
+
+*_qmlcache.qrc
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000..75b7322
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,28 @@
+cmake_minimum_required(VERSION 3.5)
+
+project(libfixmath LANGUAGES CXX C)
+
+set(CMAKE_C_STANDARD 11)
+set(CMAKE_C_STANDARD_REQUIRED ON)
+set(CMAKE_C_FLAGS "-Wall -pedantic -Wextra")
+
+set(CMAKE_CXX_STANDARD 20)
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
+set(CMAKE_CXX_FLAGS "-Wall -pedantic -Wextra")
+
+file(GLOB libfixmath-srcs libfixmath/*.h libfixmath/*.hpp libfixmath/*.c)
+file(GLOB contrib-srcs contrib/*.c)
+file(GLOB fixsingen-srcs fixsingen/*.c)
+file(GLOB fixtest-srcs fixtest/*.c fixtest/*.h)
+
+add_library(libfixmath STATIC ${libfixmath-srcs} ${contrib-srcs})
+target_include_directories(libfixmath PRIVATE ${CMAKE_SOURCE_DIR})
+
+add_executable(fixtest ${fixtest-srcs})
+target_link_libraries(fixtest PRIVATE libfixmath m)
+target_include_directories(fixtest PRIVATE ${CMAKE_SOURCE_DIR})
+
+
+add_executable(fixsingen ${fixsingen-srcs})
+target_link_libraries(fixsingen PRIVATE libfixmath m)
+target_include_directories(fixsingen PRIVATE ${CMAKE_SOURCE_DIR})
diff --git a/contrib/fix16_fft.c b/contrib/fix16_fft.c
index a3709ba..8259083 100644
--- a/contrib/fix16_fft.c
+++ b/contrib/fix16_fft.c
@@ -9,7 +9,7 @@
*/
#include <stdint.h>
-#include <fix16.h>
+#include <libfixmath/fix16.h>
// You can change the input datatype and intermediate scaling here.
// By default, the output is divided by the transform length to get a normalized FFT.
diff --git a/fixtest/hiclock.c b/fixtest/hiclock.c
index 94ed735..45a268d 100644
--- a/fixtest/hiclock.c
+++ b/fixtest/hiclock.c
@@ -1,25 +1,28 @@
#include "hiclock.h"
+#include <stddef.h>
#if defined(__WIN32) || defined(__WIN64)
LONGLONG HICLOCKS_PER_SEC = 0;
-void hiclock_init() {
- LARGE_INTEGER freq;
- QueryPerformanceFrequency(&freq);
- HICLOCKS_PER_SEC = freq.QuadPart;
+void hiclock_init()
+{
+ LARGE_INTEGER freq;
+ QueryPerformanceFrequency(&freq);
+ HICLOCKS_PER_SEC = freq.QuadPart;
}
#endif
-hiclock_t hiclock() {
- #if defined(__unix__)
- timeval clocks;
- gettimeofday(&clocks, NULL);
- return ((uint64_t)clocks.tv_sec * 1000000ULL) + clocks.tv_usec;
- #elif defined(__WIN32) || defined(__WIN64)
- LARGE_INTEGER clocks;
- QueryPerformanceCounter(&clocks);
- return clocks.QuadPart;
- #else
- return clock();
- #endif
+hiclock_t hiclock()
+{
+#if defined(__unix__)
+ struct timeval clocks;
+ gettimeofday(&clocks, NULL);
+ return ((uint64_t)clocks.tv_sec * 1000000ULL) + clocks.tv_usec;
+#elif defined(__WIN32) || defined(__WIN64)
+ LARGE_INTEGER clocks;
+ QueryPerformanceCounter(&clocks);
+ return clocks.QuadPart;
+#else
+ return clock();
+#endif
}
diff --git a/fixtest/main.c b/fixtest/main.c
index e4f105a..36eec44 100644
--- a/fixtest/main.c
+++ b/fixtest/main.c
@@ -1,87 +1,101 @@
+#include "hiclock.h"
+#include <inttypes.h>
+#include <libfixmath/fixmath.h>
+#include <math.h>
#include <stdio.h>
#include <stdlib.h>
-#include <math.h>
#include <time.h>
-#include <inttypes.h>
-
-#include <libfixmath/fixmath.h>
-
-#include "hiclock.h"
-//#define fix_func fix16_exp
-//#define fix_func_str "fix16_exp"
-//#define flt_func expf
-//#define flt_func_str "expf"
-
-//#define fix_func fix16_atan
-//#define fix_func_str "fix16_atan"
-//#define flt_func atanf
-//#define flt_func_str "atanf"
-
-#define fix_func fix16_sin
+#define EXP
+//#define ATAN
+//#define SIN
+//#define SQRT
+
+#ifdef EXP
+#define fix_func fix16_exp
+#define fix_func_str "fix16_exp"
+#define flt_func expf
+#define flt_func_str "expf"
+#endif
+
+#ifdef ATAN
+#define fix_func fix16_atan
+#define fix_func_str "fix16_atan"
+#define flt_func atanf
+#define flt_func_str "atanf"
+#endif
+
+#ifdef SIN
+#define fix_func fix16_sin
#define fix_func_str "fix16_sin"
-#define flt_func sinf
+#define flt_func sinf
#define flt_func_str "sinf"
+#endif
-//#define fix_func fix16_sqrt
-//#define fix_func_str "fix16_sqrt"
-//#define flt_func sqrtf
-//#define flt_func_str "sqrtf"
-
+#ifdef SQRT
+#define fix_func fix16_sqrt
+#define fix_func_str "fix16_sqrt"
+#define flt_func sqrtf
+#define flt_func_str "sqrtf"
+#endif
-
-int main(int argc, char** argv) {
+int main(int argc, char **argv)
+{
printf("libfixmath test tool\n");
hiclock_init();
- uintptr_t args = (1 << 8);
- uintptr_t iter = (1 << 8);
- uintptr_t pass = (1 << 8);
-
- uintptr_t i;
- srand(time(NULL));
-
- hiclock_t fix_duration = 0;
- hiclock_t flt_duration = 0;
- fix16_t fix_error = 0;
-
- uintptr_t k;
- for(k = 0; k < pass; k++) {
- fix16_t fix_args[args];
- for(i = 0; i < args; i++)
- fix_args[i] = (rand() ^ (rand() << 16));
- fix16_t fix_result[args];
- hiclock_t fix_start = hiclock();
- for(i = 0; i < iter; i++) {
- uintptr_t j;
- for(j = 0; j < args; j++)
- fix_result[j] = fix_func(fix_args[j]);
- }
- hiclock_t fix_end = hiclock();
-
- float flt_args[args];
- for(i = 0; i < args; i++)
- flt_args[i] = fix16_to_float(fix_args[i]);
- float flt_result[args];
- hiclock_t flt_start = hiclock();
- for(i = 0; i < iter; i++) {
- uintptr_t j;
- for(j = 0; j < args; j++)
- flt_result[j] = flt_func(flt_args[j]);
- }
- hiclock_t flt_end = hiclock();
-
- for(i = 0; i < args; i++)
- fix_error += abs(fix16_from_float(flt_result[i]) - fix_result[i]);
- flt_duration += (flt_end - flt_start);
- fix_duration += (fix_end - fix_start);
- }
-
- printf("%16s: %08"PRIuHICLOCK" @ %"PRIu32"Hz\n", flt_func_str, flt_duration, HICLOCKS_PER_SEC);
- printf("%16s: %08"PRIuHICLOCK" @ %"PRIu32"Hz\n", fix_func_str, fix_duration, HICLOCKS_PER_SEC);
- printf(" Difference: %08"PRIiHICLOCK" (% 3.2f%%)\n", (flt_duration - fix_duration), ((fix_duration * 100.0) / flt_duration));
- printf(" Error: %f%%\n", ((fix16_to_dbl(fix_error) * 100.0) / (args * pass)));
+ uintptr_t args = (1 << 8);
+ uintptr_t iter = (1 << 8);
+ uintptr_t pass = (1 << 8);
+
+ uintptr_t i;
+ srand(time(NULL));
+
+ hiclock_t fix_duration = 0;
+ hiclock_t flt_duration = 0;
+ fix16_t fix_error = 0;
+
+ uintptr_t k;
+ for (k = 0; k < pass; k++)
+ {
+ fix16_t fix_args[args];
+ for (i = 0; i < args; i++) fix_args[i] = (rand() ^ (rand() << 16));
+ fix16_t fix_result[args];
+ hiclock_t fix_start = hiclock();
+ for (i = 0; i < iter; i++)
+ {
+ uintptr_t j;
+ for (j = 0; j < args; j++) fix_result[j] = fix_func(fix_args[j]);
+ }
+ hiclock_t fix_end = hiclock();
+
+ float flt_args[args];
+ for (i = 0; i < args; i++) flt_args[i] = fix16_to_float(fix_args[i]);
+ float flt_result[args];
+ hiclock_t flt_start = hiclock();
+ for (i = 0; i < iter; i++)
+ {
+ uintptr_t j;
+ for (j = 0; j < args; j++) flt_result[j] = flt_func(flt_args[j]);
+ }
+ hiclock_t flt_end = hiclock();
+
+ for (i = 0; i < args; i++)
+ fix_error += abs(fix16_from_float(flt_result[i]) - fix_result[i]);
+ flt_duration += (flt_end - flt_start);
+ fix_duration += (fix_end - fix_start);
+ }
+
+ printf("%16s: %08" PRIuHICLOCK " @ %" PRIu32 "Hz\n", flt_func_str,
+ flt_duration, HICLOCKS_PER_SEC);
+ printf("%16s: %08" PRIuHICLOCK " @ %" PRIu32 "Hz\n", fix_func_str,
+ fix_duration, HICLOCKS_PER_SEC);
+ printf(" Difference: %08" PRIiHICLOCK " (% 3.2f%%)\n",
+ (flt_duration - fix_duration),
+ ((fix_duration * 100.0) / flt_duration));
+ printf(" Error: %f%%\n",
+ ((fix16_to_dbl(fix_error) * 100.0) / (args * pass)));
return EXIT_SUCCESS;
}
diff --git a/images/error_analysis.ods b/images/error_analysis.ods
index e410dd3..e2d7e90 100644
--- a/images/error_analysis.ods
+++ b/images/error_analysis.ods
Binary files differ