mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-10 07:10:06 +00:00
Update.
2002-07-06 Andreas Jaeger <aj@suse.de> * sysdeps/x86_64/fpu/bits/mathinline.h: New. * sysdeps/x86_64/fpu/s_copysign.S: New. * sysdeps/x86_64/fpu/s_copysignf.S: New. * sysdeps/x86_64/fpu/s_copysignl.S: New. * sysdeps/x86_64/fpu/s_finitel.S: New. * sysdeps/x86_64/fpu/s_fmax.S: New. * sysdeps/x86_64/fpu/s_fmaxf.S: New. * sysdeps/x86_64/fpu/s_fmaxl.S: New. * sysdeps/x86_64/fpu/s_fmin.S: New. * sysdeps/x86_64/fpu/s_fminf.S: New. * sysdeps/x86_64/fpu/s_fminl.S: New.
This commit is contained in:
parent
aeb25823d8
commit
9359218f0f
14
ChangeLog
14
ChangeLog
@ -1,3 +1,17 @@
|
||||
2002-07-06 Andreas Jaeger <aj@suse.de>
|
||||
|
||||
* sysdeps/x86_64/fpu/bits/mathinline.h: New.
|
||||
* sysdeps/x86_64/fpu/s_copysign.S: New.
|
||||
* sysdeps/x86_64/fpu/s_copysignf.S: New.
|
||||
* sysdeps/x86_64/fpu/s_copysignl.S: New.
|
||||
* sysdeps/x86_64/fpu/s_finitel.S: New.
|
||||
* sysdeps/x86_64/fpu/s_fmax.S: New.
|
||||
* sysdeps/x86_64/fpu/s_fmaxf.S: New.
|
||||
* sysdeps/x86_64/fpu/s_fmaxl.S: New.
|
||||
* sysdeps/x86_64/fpu/s_fmin.S: New.
|
||||
* sysdeps/x86_64/fpu/s_fminf.S: New.
|
||||
* sysdeps/x86_64/fpu/s_fminl.S: New.
|
||||
|
||||
2002-06-05 Brian Youmans <3diff@gnu.org>
|
||||
|
||||
* sysdeps/ia64/fpu/e_acos.S: Added text of Intel license.
|
||||
|
40
sysdeps/x86_64/fpu/bits/mathinline.h
Normal file
40
sysdeps/x86_64/fpu/bits/mathinline.h
Normal file
@ -0,0 +1,40 @@
|
||||
/* Inline math functions for x86-64.
|
||||
Copyright (C) 2002 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Andreas Jaeger <aj@suse.de>, 2002.
|
||||
|
||||
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, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#ifndef _MATH_H
|
||||
# error "Never use <bits/mathinline.h> directly; include <math.h> instead."
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
# define __MATH_INLINE __inline
|
||||
#else
|
||||
# define __MATH_INLINE extern __inline
|
||||
#endif
|
||||
|
||||
|
||||
#if defined __USE_ISOC99 && defined __GNUC__ && __GNUC__ >= 2
|
||||
/* GCC has builtins that can be used. */
|
||||
# define isgreater(x, y) __builtin_isgreater (x, y)
|
||||
# define isgreaterequal(x, y) __builtin_isgreaterequal (x, y)
|
||||
# define isless(x, y) __builtin_isless (x, y)
|
||||
# define islessequal(x, y) __builtin_islessequal (x, y)
|
||||
# define islessgreater(x, y) __builtin_islessgreater (x, y)
|
||||
# define isunordered(x, y) __builtin_isunordered (x, y)
|
||||
#endif
|
52
sysdeps/x86_64/fpu/s_copysign.S
Normal file
52
sysdeps/x86_64/fpu/s_copysign.S
Normal file
@ -0,0 +1,52 @@
|
||||
/* copy sign, double version.
|
||||
Copyright (C) 2002 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Andreas Jaeger <aj@suse.de>, 2002.
|
||||
|
||||
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, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#include <machine/asm.h>
|
||||
|
||||
#ifdef __ELF__
|
||||
.section .rodata
|
||||
#else
|
||||
.text
|
||||
#endif
|
||||
|
||||
.align ALIGNARG(4)
|
||||
ASM_TYPE_DIRECTIVE(signmask,@object)
|
||||
signmask:
|
||||
.byte 0, 0, 0, 0, 0, 0, 0, 0x80
|
||||
.byte 0, 0, 0, 0, 0, 0, 0, 0
|
||||
othermask:
|
||||
.byte 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f
|
||||
.byte 0, 0, 0, 0, 0, 0, 0, 0
|
||||
ASM_SIZE_DIRECTIVE(othermask)
|
||||
|
||||
#ifdef PIC
|
||||
#define MO(op) op##(%rip)
|
||||
#else
|
||||
#define MO(op) op
|
||||
#endif
|
||||
|
||||
ENTRY(__copysign)
|
||||
andpd MO(othermask),%xmm0
|
||||
andpd MO(signmask),%xmm1
|
||||
orpd %xmm1,%xmm0
|
||||
ret
|
||||
END (__copysign)
|
||||
|
||||
weak_alias (__copysign, copysign)
|
37
sysdeps/x86_64/fpu/s_copysignf.S
Normal file
37
sysdeps/x86_64/fpu/s_copysignf.S
Normal file
@ -0,0 +1,37 @@
|
||||
/* copy sign, double version.
|
||||
Copyright (C) 2002 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Andreas Jaeger <aj@suse.de>, 2002.
|
||||
|
||||
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, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#include <machine/asm.h>
|
||||
|
||||
ENTRY(__copysignf)
|
||||
movss %xmm0,-4(%rsp)
|
||||
mov -4(%rsp,1),%edx
|
||||
movss %xmm1,-4(%rsp)
|
||||
mov -4(%rsp),%eax
|
||||
and $0x7fffffff,%edx
|
||||
and $0x80000000,%eax
|
||||
or %eax,%edx
|
||||
mov %edx,-4(%rsp)
|
||||
movss -4(%rsp),%xmm1
|
||||
movaps %xmm1,%xmm0
|
||||
retq
|
||||
END (__copysignf)
|
||||
|
||||
weak_alias (__copysignf, copysignf)
|
22
sysdeps/x86_64/fpu/s_copysignl.S
Normal file
22
sysdeps/x86_64/fpu/s_copysignl.S
Normal file
@ -0,0 +1,22 @@
|
||||
/*
|
||||
* Written by J.T. Conklin <jtc@netbsd.org>.
|
||||
* Changes for long double by Ulrich Drepper <drepper@cygnus.com>.
|
||||
* Adopted for x86-64 by Andreas Jaeger <aj@suse.de>.
|
||||
* Public domain.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
|
||||
RCSID("$NetBSD: $")
|
||||
|
||||
ENTRY(__copysignl)
|
||||
movl 32(%rsp),%edx
|
||||
movl 16(%rsp),%eax
|
||||
andl $0x8000,%edx
|
||||
andl $0x7fff,%eax
|
||||
orl %edx,%eax
|
||||
movl %eax,16(%rsp)
|
||||
fldt 8(%rsp)
|
||||
ret
|
||||
END (__copysignl)
|
||||
weak_alias (__copysignl, copysignl)
|
42
sysdeps/x86_64/fpu/s_fdiml.S
Normal file
42
sysdeps/x86_64/fpu/s_fdiml.S
Normal file
@ -0,0 +1,42 @@
|
||||
/* Compute positive difference.
|
||||
Copyright (C) 1997, 1998, 2002 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
|
||||
|
||||
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, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#include <sysdep.h>
|
||||
|
||||
.text
|
||||
ENTRY(__fdiml)
|
||||
fldt 8(%esp) // x
|
||||
fldt 24(%esp) // x : y
|
||||
|
||||
fucomi %st(1), %st
|
||||
jp 1f
|
||||
|
||||
fsubrp %st, %st(1)
|
||||
fldz
|
||||
fcomi %st(1), %st
|
||||
fcmovb %st(1), %st
|
||||
jmp 2f
|
||||
|
||||
1: fucomi %st(0), %st
|
||||
fcmovnu %st(1), %st
|
||||
2: fstp %st(1)
|
||||
ret
|
||||
END(__fdiml)
|
||||
weak_alias (__fdiml, fdiml)
|
16
sysdeps/x86_64/fpu/s_finitel.S
Normal file
16
sysdeps/x86_64/fpu/s_finitel.S
Normal file
@ -0,0 +1,16 @@
|
||||
/*
|
||||
* Written by Joe Keane <jgk@jgk.org>.
|
||||
* Adopted for x86-64 by Andreas Jaeger <aj@suse.de>.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
|
||||
ENTRY(__finitel)
|
||||
movl 16(%rsp),%eax
|
||||
orl $0xffff8000, %eax
|
||||
incl %eax
|
||||
shrl $31, %eax
|
||||
ret
|
||||
END (__finitel)
|
||||
strong_alias(__finitel, __finitel_internal)
|
||||
weak_alias (__finitel, finitel)
|
36
sysdeps/x86_64/fpu/s_fmax.S
Normal file
36
sysdeps/x86_64/fpu/s_fmax.S
Normal file
@ -0,0 +1,36 @@
|
||||
/* Compute maximum of two numbers, regarding NaN as missing argument.
|
||||
Copyright (C) 2002 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Andreas Jaeger <aj@suse.de>, 2002.
|
||||
|
||||
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, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#include <sysdep.h>
|
||||
|
||||
.text
|
||||
ENTRY(__fmax)
|
||||
ucomisd %xmm0, %xmm1
|
||||
jp 1f // jump if unordered
|
||||
maxsd %xmm1, %xmm0
|
||||
jmp 2f
|
||||
|
||||
1: ucomisd %xmm1, %xmm1 // Is xmm1 a NaN?
|
||||
jp 2f // then return xmm0
|
||||
movsd %xmm1, %xmm0 // otherwise return xmm1
|
||||
|
||||
2: ret
|
||||
END(__fmax)
|
||||
weak_alias (__fmax, fmax)
|
36
sysdeps/x86_64/fpu/s_fmaxf.S
Normal file
36
sysdeps/x86_64/fpu/s_fmaxf.S
Normal file
@ -0,0 +1,36 @@
|
||||
/* Compute maximum of two numbers, regarding NaN as missing argument.
|
||||
Copyright (C) 2002 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Andreas Jaeger <aj@suse.de>, 2002.
|
||||
|
||||
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, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#include <sysdep.h>
|
||||
|
||||
.text
|
||||
ENTRY(__fmaxf)
|
||||
ucomiss %xmm0, %xmm1
|
||||
jp 1f // jump if unordered
|
||||
maxss %xmm1, %xmm0
|
||||
jmp 2f
|
||||
|
||||
1: ucomiss %xmm1, %xmm1 // Is xmm1 a NaN?
|
||||
jp 2f // then return xmm0
|
||||
movss %xmm1, %xmm0 // otherwise return xmm1
|
||||
|
||||
2: ret
|
||||
END(__fmaxf)
|
||||
weak_alias (__fmaxf, fmaxf)
|
40
sysdeps/x86_64/fpu/s_fmaxl.S
Normal file
40
sysdeps/x86_64/fpu/s_fmaxl.S
Normal file
@ -0,0 +1,40 @@
|
||||
/* Compute maximum of two numbers, regarding NaN as missing argument.
|
||||
Copyright (C) 1997, 2002 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
|
||||
|
||||
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, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#include <sysdep.h>
|
||||
|
||||
.text
|
||||
ENTRY(__fmaxl)
|
||||
fldt 8(%rsp) // x
|
||||
fldt 24(%rsp) // x : y
|
||||
|
||||
fucomi %st(0), %st
|
||||
fcmovu %st(1), %st // now %st contains y if not NaN, x otherwise
|
||||
|
||||
fxch
|
||||
|
||||
fucomi %st(1), %st
|
||||
fcmovb %st(1), %st
|
||||
|
||||
fstp %st(1)
|
||||
|
||||
ret
|
||||
END(__fmaxl)
|
||||
weak_alias (__fmaxl, fmaxl)
|
36
sysdeps/x86_64/fpu/s_fmin.S
Normal file
36
sysdeps/x86_64/fpu/s_fmin.S
Normal file
@ -0,0 +1,36 @@
|
||||
/* Compute minimum of two numbers, regarding NaN as missing argument.
|
||||
Copyright (C) 2002 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Andreas Jaeger <aj@suse.de>, 2002.
|
||||
|
||||
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, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#include <sysdep.h>
|
||||
|
||||
.text
|
||||
ENTRY(__fmin)
|
||||
ucomisd %xmm0, %xmm1
|
||||
jp 1f // jump if unordered
|
||||
minsd %xmm1, %xmm0
|
||||
jmp 2f
|
||||
|
||||
1: ucomisd %xmm1, %xmm1 // Is xmm1 a NaN?
|
||||
jp 2f // then return xmm0
|
||||
movsd %xmm1, %xmm0 // otherwise return xmm1
|
||||
|
||||
2: ret
|
||||
END(__fmin)
|
||||
weak_alias (__fmin, fmin)
|
36
sysdeps/x86_64/fpu/s_fminf.S
Normal file
36
sysdeps/x86_64/fpu/s_fminf.S
Normal file
@ -0,0 +1,36 @@
|
||||
/* Compute minimum of two numbers, regarding NaN as missing argument.
|
||||
Copyright (C) 2002 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Andreas Jaeger <aj@suse.de>, 2002.
|
||||
|
||||
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, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#include <sysdep.h>
|
||||
|
||||
.text
|
||||
ENTRY(__fminf)
|
||||
ucomiss %xmm0, %xmm1
|
||||
jp 1f // jump if unordered
|
||||
minss %xmm1, %xmm0
|
||||
jmp 2f
|
||||
|
||||
1: ucomiss %xmm1, %xmm1 // Is xmm1 a NaN?
|
||||
jp 2f // then return xmm0
|
||||
movss %xmm1, %xmm0 // otherwise return xmm1
|
||||
|
||||
2: ret
|
||||
END(__fminf)
|
||||
weak_alias (__fminf, fminf)
|
38
sysdeps/x86_64/fpu/s_fminl.S
Normal file
38
sysdeps/x86_64/fpu/s_fminl.S
Normal file
@ -0,0 +1,38 @@
|
||||
/* Compute minimum of two numbers, regarding NaN as missing argument.
|
||||
Copyright (C) 1997, 1998, 2002 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
|
||||
|
||||
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, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#include <sysdep.h>
|
||||
|
||||
.text
|
||||
ENTRY(__fminl)
|
||||
fldt 8(%rsp) // x
|
||||
fldt 24(%rsp) // x : y
|
||||
|
||||
fucomi %st(0), %st
|
||||
fcmovu %st(1), %st // now %st contains y if not NaN, x otherwise
|
||||
|
||||
fucomi %st(1), %st
|
||||
fcmovnb %st(1), %st
|
||||
|
||||
fstp %st(1)
|
||||
|
||||
ret
|
||||
END(__fminl)
|
||||
weak_alias (__fminl, fminl)
|
Loading…
Reference in New Issue
Block a user