Index: uspace/lib/math/Makefile
===================================================================
--- uspace/lib/math/Makefile	(revision ec9aadda42e600261091eef96f65ab644d81f438)
+++ uspace/lib/math/Makefile	(revision 83932dc9d1a3817203e9b972f966969ae565aaa0)
@@ -39,7 +39,11 @@
 	generic/fabs.c \
 	generic/fmod.c \
+	generic/fmodf.c \
 	generic/nearbyint.c \
 	generic/round.c \
 	generic/trig.c \
+	generic/sin.c \
+	generic/cos.c \
+	generic/sincos.c \
 	generic/trunc.c
 
Index: uspace/lib/math/generic/cos.c
===================================================================
--- uspace/lib/math/generic/cos.c	(revision 83932dc9d1a3817203e9b972f966969ae565aaa0)
+++ uspace/lib/math/generic/cos.c	(revision 83932dc9d1a3817203e9b972f966969ae565aaa0)
@@ -0,0 +1,78 @@
+/*
+ * Copyright (c) 2015 Jiri Svoboda
+ * Copyright (c) 2014 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libmath
+ * @{
+ */
+/** @file
+ */
+
+#include <math.h>
+#include "internal.h"
+
+/** Cosine (32-bit floating point)
+ *
+ * Compute cosine value.
+ *
+ * @param arg Cosine argument.
+ *
+ * @return Cosine value.
+ *
+ */
+float cosf(float arg)
+{
+	float base_arg = fmodf(arg, 2 * M_PI);
+
+	if (base_arg < 0)
+		return __math_base_cos_32(-base_arg);
+
+	return __math_base_cos_32(base_arg);
+}
+
+/** Cosine (64-bit floating point)
+ *
+ * Compute cosine value.
+ *
+ * @param arg Cosine argument.
+ *
+ * @return Cosine value.
+ *
+ */
+double cos(double arg)
+{
+	double base_arg = fmod(arg, 2 * M_PI);
+
+	if (base_arg < 0)
+		return __math_base_cos_64(-base_arg);
+
+	return __math_base_cos_64(base_arg);
+}
+
+/** @}
+ */
Index: uspace/lib/math/generic/fmod.c
===================================================================
--- uspace/lib/math/generic/fmod.c	(revision ec9aadda42e600261091eef96f65ab644d81f438)
+++ uspace/lib/math/generic/fmod.c	(revision 83932dc9d1a3817203e9b972f966969ae565aaa0)
@@ -35,29 +35,4 @@
 #include <math.h>
 
-/** Remainder function (32-bit floating point)
- *
- * Calculate the modulo of dividend by divisor.
- *
- * This is a very basic implementation that uses
- * division and multiplication (instead of exact
- * arithmetics). Thus the result might be very
- * imprecise (depending on the magnitude of the
- * arguments).
- *
- * @param dividend Dividend.
- * @param divisor  Divisor.
- *
- * @return Modulo.
- *
- */
-float fmodf(float dividend, float divisor)
-{
-	// FIXME: replace with exact arithmetics
-
-	float quotient = truncf(dividend / divisor);
-
-	return (dividend - quotient * divisor);
-}
-
 /** Remainder function (64-bit floating point)
  *
Index: uspace/lib/math/generic/fmodf.c
===================================================================
--- uspace/lib/math/generic/fmodf.c	(revision 83932dc9d1a3817203e9b972f966969ae565aaa0)
+++ uspace/lib/math/generic/fmodf.c	(revision 83932dc9d1a3817203e9b972f966969ae565aaa0)
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2014 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libmath
+ * @{
+ */
+/** @file
+ */
+
+#include <math.h>
+
+/** Remainder function (32-bit floating point)
+ *
+ * Calculate the modulo of dividend by divisor.
+ *
+ * This is a very basic implementation that uses
+ * division and multiplication (instead of exact
+ * arithmetics). Thus the result might be very
+ * imprecise (depending on the magnitude of the
+ * arguments).
+ *
+ * @param dividend Dividend.
+ * @param divisor  Divisor.
+ *
+ * @return Modulo.
+ *
+ */
+float fmodf(float dividend, float divisor)
+{
+	// FIXME: replace with exact arithmetics
+
+	float quotient = truncf(dividend / divisor);
+
+	return (dividend - quotient * divisor);
+}
+
+/** @}
+ */
Index: uspace/lib/math/generic/internal.h
===================================================================
--- uspace/lib/math/generic/internal.h	(revision 83932dc9d1a3817203e9b972f966969ae565aaa0)
+++ uspace/lib/math/generic/internal.h	(revision 83932dc9d1a3817203e9b972f966969ae565aaa0)
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2015 Jiri Svoboda
+ * Copyright (c) 2014 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef MATH_INTERNAL_H_
+#define MATH_INTERNAL_H_
+
+float __math_base_sin_32(float);
+float __math_base_cos_32(float);
+double __math_base_sin_64(double);
+double __math_base_cos_64(double);
+
+#endif
+
Index: uspace/lib/math/generic/sin.c
===================================================================
--- uspace/lib/math/generic/sin.c	(revision 83932dc9d1a3817203e9b972f966969ae565aaa0)
+++ uspace/lib/math/generic/sin.c	(revision 83932dc9d1a3817203e9b972f966969ae565aaa0)
@@ -0,0 +1,78 @@
+/*
+ * Copyright (c) 2015 Jiri Svoboda
+ * Copyright (c) 2014 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libmath
+ * @{
+ */
+/** @file
+ */
+
+#include <math.h>
+#include "internal.h"
+
+/** Sine (32-bit floating point)
+ *
+ * Compute sine value.
+ *
+ * @param arg Sine argument.
+ *
+ * @return Sine value.
+ *
+ */
+float sinf(float arg)
+{
+	float base_arg = fmodf(arg, 2 * M_PI);
+
+	if (base_arg < 0)
+		return -__math_base_sin_32(-base_arg);
+
+	return __math_base_sin_32(base_arg);
+}
+
+/** Sine (64-bit floating point)
+ *
+ * Compute sine value.
+ *
+ * @param arg Sine argument.
+ *
+ * @return Sine value.
+ *
+ */
+double sin(double arg)
+{
+	double base_arg = fmod(arg, 2 * M_PI);
+
+	if (base_arg < 0)
+		return -__math_base_sin_64(-base_arg);
+
+	return __math_base_sin_64(base_arg);
+}
+
+/** @}
+ */
Index: uspace/lib/math/generic/sincos.c
===================================================================
--- uspace/lib/math/generic/sincos.c	(revision 83932dc9d1a3817203e9b972f966969ae565aaa0)
+++ uspace/lib/math/generic/sincos.c	(revision 83932dc9d1a3817203e9b972f966969ae565aaa0)
@@ -0,0 +1,82 @@
+/*
+ * Copyright (c) 2015 Jiri Svoboda
+ * Copyright (c) 2014 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libmath
+ * @{
+ */
+/** @file
+ */
+
+#include <math.h>
+#include "internal.h"
+
+/**
+ * Computes sine and cosine at the same time, which might be more efficient than
+ * computing each separately.
+ *
+ * @param x  Input value.
+ * @param s  Output sine value, *s = sinf(x).
+ * @param c  Output cosine value, *c = cosf(x).
+ */
+void sincosf(float x, float *s, float *c)
+{
+	float base_arg = fmodf(x, 2 * M_PI);
+
+	if (base_arg < 0) {
+		*s = -__math_base_sin_32(-base_arg);
+		*c = __math_base_cos_32(-base_arg);
+	} else {
+		*s = __math_base_sin_32(base_arg);
+		*c = __math_base_cos_32(base_arg);
+	}
+}
+
+/**
+ * Computes sine and cosine at the same time, which might be more efficient than
+ * computing each separately.
+ *
+ * @param x  Input value.
+ * @param s  Output sine value, *s = sin(x).
+ * @param c  Output cosine value, *c = cos(x).
+ */
+void sincos(double x, double *s, double *c)
+{
+	double base_arg = fmod(x, 2 * M_PI);
+
+	if (base_arg < 0) {
+		*s = -__math_base_sin_64(-base_arg);
+		*c = __math_base_cos_64(-base_arg);
+	} else {
+		*s = __math_base_sin_64(base_arg);
+		*c = __math_base_cos_64(base_arg);
+	}
+}
+
+/** @}
+ */
Index: uspace/lib/math/generic/trig.c
===================================================================
--- uspace/lib/math/generic/trig.c	(revision ec9aadda42e600261091eef96f65ab644d81f438)
+++ uspace/lib/math/generic/trig.c	(revision 83932dc9d1a3817203e9b972f966969ae565aaa0)
@@ -35,4 +35,5 @@
 
 #include <math.h>
+#include "internal.h"
 
 #define TAYLOR_DEGREE_32 13
@@ -175,5 +176,5 @@
  *
  */
-static float base_sin_32(float arg)
+float __math_base_sin_32(float arg)
 {
 	unsigned int period = arg / (M_PI / 4);
@@ -208,5 +209,5 @@
  *
  */
-static double base_sin_64(double arg)
+double __math_base_sin_64(double arg)
 {
 	unsigned int period = arg / (M_PI / 4);
@@ -241,5 +242,5 @@
  *
  */
-static float base_cos_32(float arg)
+float __math_base_cos_32(float arg)
 {
 	unsigned int period = arg / (M_PI / 4);
@@ -274,5 +275,5 @@
  *
  */
-static double base_cos_64(double arg)
+double __math_base_cos_64(double arg)
 {
 	unsigned int period = arg / (M_PI / 4);
@@ -295,122 +296,4 @@
 }
 
-/** Sine (32-bit floating point)
- *
- * Compute sine value.
- *
- * @param arg Sine argument.
- *
- * @return Sine value.
- *
- */
-float sinf(float arg)
-{
-	float base_arg = fmodf(arg, 2 * M_PI);
-
-	if (base_arg < 0)
-		return -base_sin_32(-base_arg);
-
-	return base_sin_32(base_arg);
-}
-
-/** Sine (64-bit floating point)
- *
- * Compute sine value.
- *
- * @param arg Sine argument.
- *
- * @return Sine value.
- *
- */
-double sin(double arg)
-{
-	double base_arg = fmod(arg, 2 * M_PI);
-
-	if (base_arg < 0)
-		return -base_sin_64(-base_arg);
-
-	return base_sin_64(base_arg);
-}
-
-/** Cosine (32-bit floating point)
- *
- * Compute cosine value.
- *
- * @param arg Cosine argument.
- *
- * @return Cosine value.
- *
- */
-float cosf(float arg)
-{
-	float base_arg = fmodf(arg, 2 * M_PI);
-
-	if (base_arg < 0)
-		return base_cos_32(-base_arg);
-
-	return base_cos_32(base_arg);
-}
-
-/** Cosine (64-bit floating point)
- *
- * Compute cosine value.
- *
- * @param arg Cosine argument.
- *
- * @return Cosine value.
- *
- */
-double cos(double arg)
-{
-	double base_arg = fmod(arg, 2 * M_PI);
-
-	if (base_arg < 0)
-		return base_cos_64(-base_arg);
-
-	return base_cos_64(base_arg);
-}
-
-/**
- * Computes sine and cosine at the same time, which might be more efficient than
- * computing each separately.
- *
- * @param x  Input value.
- * @param s  Output sine value, *s = sinf(x).
- * @param c  Output cosine value, *c = cosf(x).
- */
-void sincosf(float x, float *s, float *c)
-{
-	float base_arg = fmodf(x, 2 * M_PI);
-
-	if (base_arg < 0) {
-		*s = -base_sin_32(-base_arg);
-		*c = base_cos_32(-base_arg);
-	} else {
-		*s = base_sin_32(base_arg);
-		*c = base_cos_32(base_arg);
-	}
-}
-
-/**
- * Computes sine and cosine at the same time, which might be more efficient than
- * computing each separately.
- *
- * @param x  Input value.
- * @param s  Output sine value, *s = sin(x).
- * @param c  Output cosine value, *c = cos(x).
- */
-void sincos(double x, double *s, double *c)
-{
-	double base_arg = fmod(x, 2 * M_PI);
-
-	if (base_arg < 0) {
-		*s = -base_sin_64(-base_arg);
-		*c = base_cos_64(-base_arg);
-	} else {
-		*s = base_sin_64(base_arg);
-		*c = base_cos_64(base_arg);
-	}
-}
-
 /** @}
  */
