]> git.ipfire.org Git - thirdparty/glibc.git/blame - sysdeps/m68k/m680x0/fpu/s_modf.c
Update copyright dates with scripts/update-copyrights.
[thirdparty/glibc.git] / sysdeps / m68k / m680x0 / fpu / s_modf.c
CommitLineData
b168057a 1/* Copyright (C) 1996-2015 Free Software Foundation, Inc.
28c50ce9
UD
2 This file is part of the GNU C Library.
3
4 The GNU C Library is free software; you can redistribute it and/or
3214b89b
AJ
5 modify it under the terms of the GNU Lesser General Public
6 License as published by the Free Software Foundation; either
7 version 2.1 of the License, or (at your option) any later version.
28c50ce9
UD
8
9 The GNU C Library is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
3214b89b 12 Lesser General Public License for more details.
28c50ce9 13
3214b89b 14 You should have received a copy of the GNU Lesser General Public
ab84e3ff
PE
15 License along with the GNU C Library. If not, see
16 <http://www.gnu.org/licenses/>. */
28c50ce9 17
501ee116 18#include <math.h>
5da9d124 19#include "mathimpl.h"
501ee116 20
344114d0
UD
21#ifndef SUFF
22#define SUFF
863a5d82
RM
23#endif
24#ifndef float_type
25#define float_type double
26#endif
27
344114d0
UD
28#define CONCATX(a,b) __CONCAT(a,b)
29#define s(name) CONCATX(name,SUFF)
30#define m81(func) __m81_u(s(func))
863a5d82
RM
31
32float_type
344114d0 33s(__modf) (float_type x, float_type *iptr)
501ee116 34{
344114d0 35 float_type x_int, result;
02c1ba5b
AS
36 unsigned long x_cond;
37
344114d0
UD
38 __asm ("fintrz%.x %1, %0" : "=f" (x_int) : "f" (x));
39 *iptr = x_int;
02c1ba5b
AS
40 x_cond = __m81_test (x);
41 if (x_cond & __M81_COND_INF)
344114d0
UD
42 {
43 result = 0;
02c1ba5b 44 if (x_cond & __M81_COND_NEG)
344114d0
UD
45 result = -result;
46 }
02c1ba5b 47 else if (x_cond & __M81_COND_ZERO)
344114d0
UD
48 result = x;
49 else
50 result = x - x_int;
51 return result;
501ee116 52}
615f651b 53weak_alias (s(__modf), s(modf))