diff options
author | Andreas Schwab <schwab@linux-m68k.org> | 2014-02-10 20:05:01 +0100 |
---|---|---|
committer | Andreas Schwab <schwab@linux-m68k.org> | 2014-02-10 20:22:40 +0100 |
commit | 73588a7223bec40d652fd4c75f1cb4772c5d2612 (patch) | |
tree | dfc1f1965e78e62e611199d91c482d1b76ff109d /sysdeps/m68k/coldfire | |
parent | 87569616d27a2c742f87b5dbcac2f2e3437fd874 (diff) | |
download | glibc-73588a7223bec40d652fd4c75f1cb4772c5d2612.tar glibc-73588a7223bec40d652fd4c75f1cb4772c5d2612.tar.gz glibc-73588a7223bec40d652fd4c75f1cb4772c5d2612.tar.bz2 glibc-73588a7223bec40d652fd4c75f1cb4772c5d2612.zip |
Move m68k from ports to libc
Diffstat (limited to 'sysdeps/m68k/coldfire')
-rw-r--r-- | sysdeps/m68k/coldfire/bits/atomic.h | 68 | ||||
-rw-r--r-- | sysdeps/m68k/coldfire/fpu/bits/mathinline.h | 44 | ||||
-rw-r--r-- | sysdeps/m68k/coldfire/fpu/e_sqrt.c | 24 | ||||
-rw-r--r-- | sysdeps/m68k/coldfire/fpu/e_sqrtf.c | 25 | ||||
-rw-r--r-- | sysdeps/m68k/coldfire/fpu/fraiseexcpt.c | 66 | ||||
-rw-r--r-- | sysdeps/m68k/coldfire/fpu/libm-test-ulps | 820 | ||||
-rw-r--r-- | sysdeps/m68k/coldfire/fpu/s_fabs.c | 28 | ||||
-rw-r--r-- | sysdeps/m68k/coldfire/fpu/s_fabsf.c | 24 | ||||
-rw-r--r-- | sysdeps/m68k/coldfire/fpu/s_lrint.c | 29 | ||||
-rw-r--r-- | sysdeps/m68k/coldfire/fpu/s_lrintf.c | 25 | ||||
-rw-r--r-- | sysdeps/m68k/coldfire/fpu/s_rint.c | 28 | ||||
-rw-r--r-- | sysdeps/m68k/coldfire/fpu/s_rintf.c | 25 | ||||
-rw-r--r-- | sysdeps/m68k/coldfire/shlib-versions | 1 | ||||
-rw-r--r-- | sysdeps/m68k/coldfire/sysdep.h | 40 |
14 files changed, 1247 insertions, 0 deletions
diff --git a/sysdeps/m68k/coldfire/bits/atomic.h b/sysdeps/m68k/coldfire/bits/atomic.h new file mode 100644 index 0000000000..ec0c59a7da --- /dev/null +++ b/sysdeps/m68k/coldfire/bits/atomic.h @@ -0,0 +1,68 @@ +/* Copyright (C) 2003-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library. If not, see + <http://www.gnu.org/licenses/>. */ + +#ifndef _BITS_ATOMIC_H +#define _BITS_ATOMIC_H 1 + +#include <stdint.h> + +/* Coldfire has no atomic compare-and-exchange operation, and the + kernel provides no userspace atomicity operations. Here we just + use generic non-atomic implementations instead. */ + +typedef int8_t atomic8_t; +typedef uint8_t uatomic8_t; +typedef int_fast8_t atomic_fast8_t; +typedef uint_fast8_t uatomic_fast8_t; + +typedef int16_t atomic16_t; +typedef uint16_t uatomic16_t; +typedef int_fast16_t atomic_fast16_t; +typedef uint_fast16_t uatomic_fast16_t; + +typedef int32_t atomic32_t; +typedef uint32_t uatomic32_t; +typedef int_fast32_t atomic_fast32_t; +typedef uint_fast32_t uatomic_fast32_t; + +typedef int64_t atomic64_t; +typedef uint64_t uatomic64_t; +typedef int_fast64_t atomic_fast64_t; +typedef uint_fast64_t uatomic_fast64_t; + +typedef intptr_t atomicptr_t; +typedef uintptr_t uatomicptr_t; +typedef intmax_t atomic_max_t; +typedef uintmax_t uatomic_max_t; + +/* The only basic operation needed is compare and exchange. */ +#define atomic_compare_and_exchange_val_acq(mem, newval, oldval) \ + ({ __typeof (mem) __gmemp = (mem); \ + __typeof (*mem) __gret = *__gmemp; \ + __typeof (*mem) __gnewval = (newval); \ + \ + if (__gret == (oldval)) \ + *__gmemp = __gnewval; \ + __gret; }) + +#define atomic_compare_and_exchange_bool_acq(mem, newval, oldval) \ + ({ __typeof (mem) __gmemp = (mem); \ + __typeof (*mem) __gnewval = (newval); \ + \ + *__gmemp == (oldval) ? (*__gmemp = __gnewval, 0) : 1; }) + +#endif diff --git a/sysdeps/m68k/coldfire/fpu/bits/mathinline.h b/sysdeps/m68k/coldfire/fpu/bits/mathinline.h new file mode 100644 index 0000000000..bfd2bd61e8 --- /dev/null +++ b/sysdeps/m68k/coldfire/fpu/bits/mathinline.h @@ -0,0 +1,44 @@ +/* Inline math functions for Coldfire. + Copyright (C) 2012-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library. If not, see + <http://www.gnu.org/licenses/>. */ + +#ifndef _MATH_H +# error "Never use <bits/mathinline.h> directly; include <math.h> instead." +#endif + +#ifndef __extern_always_inline +# define __MATH_INLINE __inline +#else +# define __MATH_INLINE __extern_always_inline +#endif + +#if defined __USE_ISOC99 && defined __GNUC__ + +/* Test for negative number. Used in the signbit macro. */ +__MATH_INLINE int +__NTH (__signbitf (float __x)) +{ + return __builtin_signbitf (__x); +} + +__MATH_INLINE int +__NTH (__signbit (double __x)) +{ + return __builtin_signbit (__x); +} + +#endif diff --git a/sysdeps/m68k/coldfire/fpu/e_sqrt.c b/sysdeps/m68k/coldfire/fpu/e_sqrt.c new file mode 100644 index 0000000000..5914de6029 --- /dev/null +++ b/sysdeps/m68k/coldfire/fpu/e_sqrt.c @@ -0,0 +1,24 @@ +/* Copyright (C) 2006-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library. If not, see + <http://www.gnu.org/licenses/>. */ + +double +__ieee754_sqrt (double x) +{ + asm ("fdsqrt.d %1,%0" : "=f" (x) : "fm" (x)); + return x; +} +strong_alias (__ieee754_sqrt, __sqrt_finite) diff --git a/sysdeps/m68k/coldfire/fpu/e_sqrtf.c b/sysdeps/m68k/coldfire/fpu/e_sqrtf.c new file mode 100644 index 0000000000..7e7448db78 --- /dev/null +++ b/sysdeps/m68k/coldfire/fpu/e_sqrtf.c @@ -0,0 +1,25 @@ +/* Copyright (C) 2006-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library. If not, see + <http://www.gnu.org/licenses/>. */ + +float +__ieee754_sqrtf (float x) +{ + double result; + asm ("fssqrt.s %1,%0" : "=f" (result) : "dm" (x)); + return result; +} +strong_alias (__ieee754_sqrtf, __sqrtf_finite) diff --git a/sysdeps/m68k/coldfire/fpu/fraiseexcpt.c b/sysdeps/m68k/coldfire/fpu/fraiseexcpt.c new file mode 100644 index 0000000000..3d75deb6ac --- /dev/null +++ b/sysdeps/m68k/coldfire/fpu/fraiseexcpt.c @@ -0,0 +1,66 @@ +/* Raise given exceptions. + Copyright (C) 2006-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library. If not, see + <http://www.gnu.org/licenses/>. */ + +#include <fenv.h> +#include <float.h> +#include <math.h> + +int +feraiseexcept (int excepts) +{ + /* Raise exceptions represented by EXCEPTS. But we must raise only one + signal at a time. It is important that if the overflow/underflow + exception and the divide by zero exception are given at the same + time, the overflow/underflow exception follows the divide by zero + exception. + + The Coldfire FPU allows an exception to be raised by asserting + the associated EXC bit and then executing an arbitrary arithmetic + instruction. fmove.l is classified as an arithmetic instruction + and suffices for this purpose. + + We therefore raise an exception by setting both the EXC and AEXC + bit associated with the exception (the former being 6 bits to the + left of the latter) and then loading the longword at (%sp) into an + FP register. */ + + inline void + raise_one_exception (int mask) + { + if (excepts & mask) + { + int fpsr; + double unused; + + asm volatile ("fmove%.l %/fpsr,%0" : "=d" (fpsr)); + fpsr |= (mask << 6) | mask; + asm volatile ("fmove%.l %0,%/fpsr" :: "d" (fpsr)); + asm volatile ("fmove%.l (%%sp),%0" : "=f" (unused)); + } + } + + raise_one_exception (FE_INVALID); + raise_one_exception (FE_DIVBYZERO); + raise_one_exception (FE_OVERFLOW); + raise_one_exception (FE_UNDERFLOW); + raise_one_exception (FE_INEXACT); + + /* Success. */ + return 0; +} +libm_hidden_def (feraiseexcept) diff --git a/sysdeps/m68k/coldfire/fpu/libm-test-ulps b/sysdeps/m68k/coldfire/fpu/libm-test-ulps new file mode 100644 index 0000000000..05be5a92b6 --- /dev/null +++ b/sysdeps/m68k/coldfire/fpu/libm-test-ulps @@ -0,0 +1,820 @@ +# Begin of automatic generation + +# atan2 +Test "atan2 (-0.75, -1.0)": +float: 1 +ifloat: 1 +Test "atan2 (0.75, -1.0)": +float: 1 +ifloat: 1 +Test "atan2 (1.390625, 0.9296875)": +float: 1 +ifloat: 1 + +# atanh +Test "atanh (0.75)": +float: 1 +ifloat: 1 + +# cacosh +Test "Imaginary part of: cacosh (-2 - 3 i)": +float: 1 +ifloat: 1 + +# casin +Test "Real part of: casin (0.75 + 1.25 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 + +# casinh +Test "Real part of: casinh (-2 - 3 i)": +double: 5 +float: 1 +idouble: 5 +ifloat: 1 +Test "Imaginary part of: casinh (-2 - 3 i)": +double: 3 +float: 6 +idouble: 3 +ifloat: 6 +Test "Real part of: casinh (0.75 + 1.25 i)": +float: 1 +ifloat: 1 +Test "Imaginary part of: casinh (0.75 + 1.25 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 + +# catan +Test "Imaginary part of: catan (-2 - 3 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 + +# catanh +Test "Real part of: catanh (-2 - 3 i)": +double: 4 +idouble: 4 +Test "Real part of: catanh (0.75 + 1.25 i)": +double: 1 +idouble: 1 + +# cbrt +Test "cbrt (-27.0)": +double: 1 +idouble: 1 +Test "cbrt (0.75)": +double: 1 +idouble: 1 +Test "cbrt (0.9921875)": +double: 1 +idouble: 1 + +# ccos +Test "Imaginary part of: ccos (-2 - 3 i)": +float: 1 +ifloat: 1 +Test "Real part of: ccos (0.75 + 1.25 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "Imaginary part of: ccos (0.75 + 1.25 i)": +float: 1 +ifloat: 1 + +# ccosh +Test "Real part of: ccosh (-2 - 3 i)": +float: 1 +ifloat: 1 +Test "Imaginary part of: ccosh (-2 - 3 i)": +float: 1 +ifloat: 1 +Test "Real part of: ccosh (0.75 + 1.25 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "Imaginary part of: ccosh (0.75 + 1.25 i)": +float: 1 +ifloat: 1 + +# cexp +Test "Imaginary part of: cexp (-2.0 - 3.0 i)": +float: 1 +ifloat: 1 +Test "Real part of: cexp (0.75 + 1.25 i)": +float: 1 +ifloat: 1 + +# clog +Test "Real part of: clog (0.75 + 1.25 i)": +float: 1 +ifloat: 1 + +# clog10 +Test "Imaginary part of: clog10 (-0 + inf i)": +float: 1 +ifloat: 1 +Test "Imaginary part of: clog10 (-0 - inf i)": +float: 1 +ifloat: 1 +Test "Imaginary part of: clog10 (-2 - 3 i)": +double: 1 +idouble: 1 +Test "Imaginary part of: clog10 (-3 + inf i)": +float: 1 +ifloat: 1 +Test "Imaginary part of: clog10 (-3 - inf i)": +float: 1 +ifloat: 1 +Test "Imaginary part of: clog10 (-inf + 0 i)": +float: 1 +ifloat: 1 +Test "Imaginary part of: clog10 (-inf + 1 i)": +float: 1 +ifloat: 1 +Test "Imaginary part of: clog10 (-inf - 0 i)": +float: 1 +ifloat: 1 +Test "Imaginary part of: clog10 (-inf - 1 i)": +float: 1 +ifloat: 1 +Test "Imaginary part of: clog10 (0 + inf i)": +float: 1 +ifloat: 1 +Test "Imaginary part of: clog10 (0 - inf i)": +float: 1 +ifloat: 1 +Test "Real part of: clog10 (0.75 + 1.25 i)": +float: 1 +ifloat: 1 +Test "Imaginary part of: clog10 (3 + inf i)": +float: 1 +ifloat: 1 +Test "Imaginary part of: clog10 (3 - inf i)": +float: 1 +ifloat: 1 +Test "Imaginary part of: clog10 (inf + inf i)": +float: 1 +ifloat: 1 +Test "Imaginary part of: clog10 (inf - inf i)": +float: 1 +ifloat: 1 + +# cos +Test "cos (M_PI_6l * 2.0)": +double: 1 +idouble: 1 +Test "cos (M_PI_6l * 4.0)": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 + +# cpow +Test "Real part of: cpow (0.75 + 1.25 i, 0.0 + 1.0 i)": +float: 1 +ifloat: 1 +Test "Imaginary part of: cpow (0.75 + 1.25 i, 0.0 + 1.0 i)": +float: 1 +ifloat: 1 +Test "Real part of: cpow (0.75 + 1.25 i, 0.75 + 1.25 i)": +double: 1 +float: 4 +idouble: 1 +ifloat: 4 +Test "Real part of: cpow (0.75 + 1.25 i, 1.0 + 1.0 i)": +double: 2 +float: 3 +idouble: 2 +ifloat: 3 +Test "Real part of: cpow (2 + 3 i, 4 + 0 i)": +double: 1 +float: 4 +idouble: 1 +ifloat: 4 +Test "Imaginary part of: cpow (2 + 3 i, 4 + 0 i)": +float: 2 +ifloat: 2 +Test "Imaginary part of: cpow (e + 0 i, 0 + 2 * M_PIl i)": +double: 2 +float: 2 +idouble: 2 +ifloat: 2 + +# csinh +Test "Imaginary part of: csinh (-2 - 3 i)": +double: 1 +idouble: 1 +Test "Real part of: csinh (0.75 + 1.25 i)": +float: 1 +ifloat: 1 +Test "Imaginary part of: csinh (0.75 + 1.25 i)": +float: 1 +ifloat: 1 + +# csqrt +Test "Real part of: csqrt (-2 + 3 i)": +float: 1 +ifloat: 1 +Test "Real part of: csqrt (-2 - 3 i)": +float: 1 +ifloat: 1 + +# ctan +Test "Imaginary part of: ctan (0.75 + 1.25 i)": +double: 1 +idouble: 1 + +# ctanh +Test "Real part of: ctanh (-2 - 3 i)": +double: 1 +float: 2 +idouble: 1 +ifloat: 2 +Test "Imaginary part of: ctanh (0 + pi/4 i)": +float: 1 +ifloat: 1 +Test "Real part of: ctanh (0.75 + 1.25 i)": +double: 1 +idouble: 1 + +# erf +Test "erf (1.25)": +double: 1 +idouble: 1 + +# erfc +Test "erfc (2.0)": +double: 1 +idouble: 1 +Test "erfc (4.125)": +double: 1 +idouble: 1 + +# exp10 +Test "exp10 (-1)": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 +Test "exp10 (0.75)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "exp10 (3)": +double: 6 +float: 2 +idouble: 6 +ifloat: 2 + +# expm1 +Test "expm1 (0.75)": +double: 1 +idouble: 1 +Test "expm1 (1)": +float: 1 +ifloat: 1 + +# hypot +Test "hypot (-0.7, -12.4)": +float: 1 +ifloat: 1 +Test "hypot (-0.7, 12.4)": +float: 1 +ifloat: 1 +Test "hypot (-12.4, -0.7)": +float: 1 +ifloat: 1 +Test "hypot (-12.4, 0.7)": +float: 1 +ifloat: 1 +Test "hypot (0.7, -12.4)": +float: 1 +ifloat: 1 +Test "hypot (0.7, 12.4)": +float: 1 +ifloat: 1 +Test "hypot (12.4, -0.7)": +float: 1 +ifloat: 1 +Test "hypot (12.4, 0.7)": +float: 1 +ifloat: 1 + +# j0 +Test "j0 (-4.0)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "j0 (0.75)": +float: 1 +ifloat: 1 +Test "j0 (10.0)": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 +Test "j0 (2.0)": +float: 2 +ifloat: 2 +Test "j0 (4.0)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "j0 (8.0)": +float: 1 +ifloat: 1 + +# j1 +Test "j1 (10.0)": +float: 2 +ifloat: 2 +Test "j1 (2.0)": +double: 1 +idouble: 1 +Test "j1 (8.0)": +double: 1 +idouble: 1 + +# jn +Test "jn (0, -4.0)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "jn (0, 0.75)": +float: 1 +ifloat: 1 +Test "jn (0, 10.0)": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 +Test "jn (0, 2.0)": +float: 2 +ifloat: 2 +Test "jn (0, 4.0)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "jn (0, 8.0)": +float: 1 +ifloat: 1 +Test "jn (1, 10.0)": +float: 2 +ifloat: 2 +Test "jn (1, 2.0)": +double: 1 +idouble: 1 +Test "jn (1, 8.0)": +double: 1 +idouble: 1 +Test "jn (10, 0.125)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "jn (10, 0.75)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "jn (10, 10.0)": +double: 4 +float: 3 +idouble: 4 +ifloat: 3 +Test "jn (10, 2.0)": +float: 4 +ifloat: 4 +Test "jn (3, 0.125)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "jn (3, 0.75)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "jn (3, 10.0)": +double: 3 +float: 1 +idouble: 3 +ifloat: 1 +Test "jn (3, 2.0)": +double: 1 +float: 2 +idouble: 1 +ifloat: 2 + +# lgamma +Test "lgamma (0.7)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "lgamma (1.2)": +double: 1 +float: 2 +idouble: 1 +ifloat: 2 + +# log10 +Test "log10 (0.75)": +double: 1 +float: 2 +idouble: 1 +ifloat: 2 +Test "log10 (e)": +float: 1 +ifloat: 1 + +# log1p +Test "log1p (-0.25)": +float: 1 +ifloat: 1 + +# sincos +Test "sincos (M_PI_6l*2.0) extra output 1": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "sincos (M_PI_6l*2.0) extra output 2": +double: 1 +idouble: 1 +Test "sincos (pi/6) extra output 2": +float: 1 +ifloat: 1 + +# tgamma +Test "tgamma (-0.5)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "tgamma (0.5)": +float: 1 +ifloat: 1 +Test "tgamma (0.7)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 + +# y0 +Test "y0 (1.0)": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 +Test "y0 (1.5)": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 +Test "y0 (10.0)": +float: 1 +ifloat: 1 +Test "y0 (8.0)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 + +# y1 +Test "y1 (0.125)": +double: 1 +idouble: 1 +Test "y1 (1.5)": +float: 1 +ifloat: 1 +Test "y1 (10.0)": +double: 3 +float: 1 +idouble: 3 +ifloat: 1 +Test "y1 (2.0)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "y1 (8.0)": +double: 1 +float: 2 +idouble: 1 +ifloat: 2 + +# yn +Test "yn (0, 1.0)": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 +Test "yn (0, 1.5)": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 +Test "yn (0, 10.0)": +float: 1 +ifloat: 1 +Test "yn (0, 8.0)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "yn (1, 0.125)": +double: 1 +idouble: 1 +Test "yn (1, 1.5)": +float: 1 +ifloat: 1 +Test "yn (1, 10.0)": +double: 3 +float: 1 +idouble: 3 +ifloat: 1 +Test "yn (1, 2.0)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "yn (1, 8.0)": +double: 1 +float: 2 +idouble: 1 +ifloat: 2 +Test "yn (10, 0.125)": +double: 1 +idouble: 1 +Test "yn (10, 0.75)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "yn (10, 1.0)": +double: 1 +idouble: 1 +Test "yn (10, 10.0)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "yn (10, 2.0)": +double: 2 +idouble: 2 +Test "yn (3, 0.125)": +double: 1 +idouble: 1 +Test "yn (3, 0.75)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "yn (3, 10.0)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "yn (3, 2.0)": +double: 1 +idouble: 1 + +# Maximal error of functions: +Function: "atan2": +float: 1 +ifloat: 1 + +Function: "atanh": +float: 1 +ifloat: 1 + +Function: Imaginary part of "cacosh": +float: 1 +ifloat: 1 + +Function: Real part of "casin": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 + +Function: Real part of "casinh": +double: 5 +float: 1 +idouble: 5 +ifloat: 1 + +Function: Imaginary part of "casinh": +double: 3 +float: 6 +idouble: 3 +ifloat: 6 + +Function: Imaginary part of "catan": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 + +Function: Real part of "catanh": +double: 4 +idouble: 4 + +Function: "cbrt": +double: 1 +idouble: 1 + +Function: Real part of "ccos": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 + +Function: Imaginary part of "ccos": +float: 1 +ifloat: 1 + +Function: Real part of "ccosh": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 + +Function: Imaginary part of "ccosh": +float: 1 +ifloat: 1 + +Function: Real part of "cexp": +float: 1 +ifloat: 1 + +Function: Imaginary part of "cexp": +float: 1 +ifloat: 1 + +Function: Real part of "clog": +float: 1 +ifloat: 1 + +Function: Real part of "clog10": +float: 1 +ifloat: 1 + +Function: Imaginary part of "clog10": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 + +Function: "cos": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 + +Function: Real part of "cpow": +double: 2 +float: 4 +idouble: 2 +ifloat: 4 + +Function: Imaginary part of "cpow": +double: 2 +float: 2 +idouble: 2 +ifloat: 2 + +Function: Real part of "csinh": +float: 1 +ifloat: 1 + +Function: Imaginary part of "csinh": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 + +Function: Real part of "csqrt": +float: 1 +ifloat: 1 + +Function: Imaginary part of "ctan": +double: 1 +idouble: 1 + +Function: Real part of "ctanh": +double: 1 +float: 2 +idouble: 1 +ifloat: 2 + +Function: Imaginary part of "ctanh": +float: 1 +ifloat: 1 + +Function: "erf": +double: 1 +idouble: 1 + +Function: "erfc": +double: 1 +idouble: 1 + +Function: "exp10": +double: 6 +float: 2 +idouble: 6 +ifloat: 2 + +Function: "expm1": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 + +Function: "hypot": +float: 1 +ifloat: 1 + +Function: "j0": +double: 2 +float: 2 +idouble: 2 +ifloat: 2 + +Function: "j1": +double: 1 +float: 2 +idouble: 1 +ifloat: 2 + +Function: "jn": +double: 4 +float: 4 +idouble: 4 +ifloat: 4 + +Function: "lgamma": +double: 1 +float: 2 +idouble: 1 +ifloat: 2 + +Function: "log10": +double: 1 +float: 2 +idouble: 1 +ifloat: 2 + +Function: "log1p": +float: 1 +ifloat: 1 + +Function: "sincos": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 + +Function: "tan": +double: 1 +idouble: 1 + +Function: "tgamma": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 + +Function: "y0": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 + +Function: "y1": +double: 3 +float: 2 +idouble: 3 +ifloat: 2 + +Function: "yn": +double: 3 +float: 2 +idouble: 3 +ifloat: 2 + +# end of automatic generation diff --git a/sysdeps/m68k/coldfire/fpu/s_fabs.c b/sysdeps/m68k/coldfire/fpu/s_fabs.c new file mode 100644 index 0000000000..dc8d31e872 --- /dev/null +++ b/sysdeps/m68k/coldfire/fpu/s_fabs.c @@ -0,0 +1,28 @@ +/* Copyright (C) 2006-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library. If not, see + <http://www.gnu.org/licenses/>. */ + +double +__fabs (double x) +{ + asm ("fdabs.d %1,%0" : "=f" (x) : "fm" (x)); + return x; +} +weak_alias (__fabs, fabs) +#ifdef NO_LONG_DOUBLE +strong_alias (__fabs, __fabsl) +weak_alias (__fabs, fabsl) +#endif diff --git a/sysdeps/m68k/coldfire/fpu/s_fabsf.c b/sysdeps/m68k/coldfire/fpu/s_fabsf.c new file mode 100644 index 0000000000..29a25ccdad --- /dev/null +++ b/sysdeps/m68k/coldfire/fpu/s_fabsf.c @@ -0,0 +1,24 @@ +/* Copyright (C) 2006-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library. If not, see + <http://www.gnu.org/licenses/>. */ + +float +__fabsf (float x) +{ + asm ("fsabs.s %1,%0" : "=f" (x) : "dm" (x)); + return x; +} +weak_alias (__fabsf, fabsf) diff --git a/sysdeps/m68k/coldfire/fpu/s_lrint.c b/sysdeps/m68k/coldfire/fpu/s_lrint.c new file mode 100644 index 0000000000..7de6b44d30 --- /dev/null +++ b/sysdeps/m68k/coldfire/fpu/s_lrint.c @@ -0,0 +1,29 @@ +/* Copyright (C) 2006-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library. If not, see + <http://www.gnu.org/licenses/>. */ + +long int +__lrint (double x) +{ + long int result; + asm ("fmove.l %1,%0" : "=dm" (result) : "f" (x)); + return result; +} +weak_alias (__lrint, lrint) +#ifdef NO_LONG_DOUBLE +strong_alias (__lrint, __lrintl) +weak_alias (__lrint, lrintl) +#endif diff --git a/sysdeps/m68k/coldfire/fpu/s_lrintf.c b/sysdeps/m68k/coldfire/fpu/s_lrintf.c new file mode 100644 index 0000000000..a73dd12a80 --- /dev/null +++ b/sysdeps/m68k/coldfire/fpu/s_lrintf.c @@ -0,0 +1,25 @@ +/* Copyright (C) 2006-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library. If not, see + <http://www.gnu.org/licenses/>. */ + +long int +__lrintf (float x) +{ + long int result; + asm ("fmove.l %1,%0" : "=dm" (result) : "f" (x)); + return result; +} +weak_alias (__lrintf, lrintf) diff --git a/sysdeps/m68k/coldfire/fpu/s_rint.c b/sysdeps/m68k/coldfire/fpu/s_rint.c new file mode 100644 index 0000000000..a98bb47eb1 --- /dev/null +++ b/sysdeps/m68k/coldfire/fpu/s_rint.c @@ -0,0 +1,28 @@ +/* Copyright (C) 2006-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library. If not, see + <http://www.gnu.org/licenses/>. */ + +double +__rint (double x) +{ + asm ("fint.d %1,%0" : "=f" (x) : "fm" (x)); + return x; +} +weak_alias (__rint, rint) +#ifdef NO_LONG_DOUBLE +strong_alias (__rint, __rintl) +weak_alias (__rint, rintl) +#endif diff --git a/sysdeps/m68k/coldfire/fpu/s_rintf.c b/sysdeps/m68k/coldfire/fpu/s_rintf.c new file mode 100644 index 0000000000..83bf5137e2 --- /dev/null +++ b/sysdeps/m68k/coldfire/fpu/s_rintf.c @@ -0,0 +1,25 @@ +/* Copyright (C) 2006-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library. If not, see + <http://www.gnu.org/licenses/>. */ + +float +__rintf (float x) +{ + double result; + asm ("fint.s %1,%0" : "=f" (result) : "dm" (x)); + return (float) result; +} +weak_alias (__rintf, rintf) diff --git a/sysdeps/m68k/coldfire/shlib-versions b/sysdeps/m68k/coldfire/shlib-versions new file mode 100644 index 0000000000..f4c68b2a51 --- /dev/null +++ b/sysdeps/m68k/coldfire/shlib-versions @@ -0,0 +1 @@ +m68k-.*-linux.* DEFAULT GLIBC_2.4 diff --git a/sysdeps/m68k/coldfire/sysdep.h b/sysdeps/m68k/coldfire/sysdep.h new file mode 100644 index 0000000000..2228481566 --- /dev/null +++ b/sysdeps/m68k/coldfire/sysdep.h @@ -0,0 +1,40 @@ +/* Assembler macros for Coldfire. + Copyright (C) 1998-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library. If not, see + <http://www.gnu.org/licenses/>. */ + +#include <sysdeps/m68k/sysdep.h> + +#ifdef __ASSEMBLER__ + +/* Perform operation OP with PC-relative SRC as the first operand and + DST as the second. TMP is available as a temporary if needed. */ +# define PCREL_OP(OP, SRC, DST, TMP) \ + move.l &SRC - ., TMP; OP (-8, %pc, TMP), DST + +/* Load the address of the GOT into register R. */ +# define LOAD_GOT(R) \ + move.l &_GLOBAL_OFFSET_TABLE_@GOTPC, R; \ + lea (-6, %pc, R), R + +#else + +/* As above, but PC is the spelling of the PC register. We need this + so that the macro can be used in both normal and extended asms. */ +# define PCREL_OP(OP, SRC, DST, TMP, PC) \ + "move.l #" SRC " - ., " TMP "\n\t" OP " (-8, " PC ", " TMP "), " DST + +#endif /* __ASSEMBLER__ */ |