From d59a10719b617e5a2e9192d43af3e41bdc5b1357 Mon Sep 17 00:00:00 2001 From: Andreas Jaeger Date: Thu, 4 Apr 2002 09:12:36 +0000 Subject: [PATCH] Merge from mainline. --- ChangeLog | 16 +++++++++ .../x86_64/{gettimeofday.c => gettimeofday.S} | 35 ++++++++++--------- .../unix/sysv/linux/x86_64/{time.c => time.S} | 33 ++++++++++------- sysdeps/x86_64/fpu/e_sqrt.c | 30 ++++++++++++++++ sysdeps/x86_64/fpu/e_sqrtf.c | 30 ++++++++++++++++ sysdeps/x86_64/fpu/s_fabs.c | 27 ++++++++++++++ sysdeps/x86_64/fpu/s_fabsf.c | 27 ++++++++++++++ sysdeps/x86_64/fpu/s_fabsl.S | 28 +++++++++++++++ 8 files changed, 198 insertions(+), 28 deletions(-) rename sysdeps/unix/sysv/linux/x86_64/{gettimeofday.c => gettimeofday.S} (59%) rename sysdeps/unix/sysv/linux/x86_64/{time.c => time.S} (68%) create mode 100644 sysdeps/x86_64/fpu/e_sqrt.c create mode 100644 sysdeps/x86_64/fpu/e_sqrtf.c create mode 100644 sysdeps/x86_64/fpu/s_fabs.c create mode 100644 sysdeps/x86_64/fpu/s_fabsf.c create mode 100644 sysdeps/x86_64/fpu/s_fabsl.S diff --git a/ChangeLog b/ChangeLog index 289892b503..a8b07fef77 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,19 @@ +2002-04-04 Andreas Jaeger + + * sysdeps/x86_64/fpu/e_sqrt.c: New file. + * sysdeps/x86_64/fpu/e_sqrtf.c: New file. + + * sysdeps/x86_64/fpu/s_fabs.c: New file. + * sysdeps/x86_64/fpu/s_fabsf.c: New file. + * sysdeps/x86_64/fpu/s_fabsl.c: New file. + + * sysdeps/unix/sysv/linux/x86_64/time.S: New file. + + * sysdeps/unix/sysv/linux/x86_64/gettimeofday.S: New file. + + * sysdeps/unix/sysv/linux/x86_64/gettimeofday.c: Removed. + * sysdeps/unix/sysv/linux/x86_64/time.S: Removed. + 2002-04-04 Ulrich Drepper * misc/dirname.c (dirname): Ignore trailing slashes at end of diff --git a/sysdeps/unix/sysv/linux/x86_64/gettimeofday.c b/sysdeps/unix/sysv/linux/x86_64/gettimeofday.S similarity index 59% rename from sysdeps/unix/sysv/linux/x86_64/gettimeofday.c rename to sysdeps/unix/sysv/linux/x86_64/gettimeofday.S index c4fcfd900c..4978416e0a 100644 --- a/sysdeps/unix/sysv/linux/x86_64/gettimeofday.c +++ b/sysdeps/unix/sysv/linux/x86_64/gettimeofday.S @@ -1,4 +1,4 @@ -/* Copyright (C) 2001 Free Software Foundation, Inc. +/* Copyright (C) 2002 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 @@ -16,23 +16,26 @@ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -#include -#include -#include +#include +#define _ERRNO_H 1 +#include + +/* For the calculation see asm/vsyscall.h. */ +#define VSYSCALL_ADDR_vgettimeofday 0xffffffffff600000 -/* Get the current time of day and timezone information, - putting it into *TV and *TZ. If TZ is NULL, *TZ is not filled. - Returns 0 on success, -1 on errors. */ -int -__gettimeofday (struct timeval *tv, struct timezone *tz) -{ - /* We're using a virtual syscall here. */ - int (*__vgettimeofday)(struct timeval *, struct timezone *) - = (int (*)(struct timeval *, struct timezone *)) VSYSCALL_ADDR (__NR_vgettimeofday); +ENTRY (__gettimeofday) + /* Align stack. */ + sub $0x8, %rsp + movq $VSYSCALL_ADDR_vgettimeofday, %rax + callq *%rax + /* Check error return. */ + cmpl $-4095, %eax + jae SYSCALL_ERROR_LABEL - - return __vgettimeofday (tv, tz); -} +L(pseudo_end): + add $0x8, %rsp + ret +PSEUDO_END(__gettimeofday) weak_alias (__gettimeofday, gettimeofday) diff --git a/sysdeps/unix/sysv/linux/x86_64/time.c b/sysdeps/unix/sysv/linux/x86_64/time.S similarity index 68% rename from sysdeps/unix/sysv/linux/x86_64/time.c rename to sysdeps/unix/sysv/linux/x86_64/time.S index 2cb748cfa5..ecd939372a 100644 --- a/sysdeps/unix/sysv/linux/x86_64/time.c +++ b/sysdeps/unix/sysv/linux/x86_64/time.S @@ -1,4 +1,4 @@ -/* Copyright (C) 2001 Free Software Foundation, Inc. +/* Copyright (C) 2001, 2002 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 @@ -16,18 +16,27 @@ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -#include -#include -#include +#include +#define _ERRNO_H 1 +#include + +/* For the calculation see asm/vsyscall.h. */ +#define VSYSCALL_ADDR_vtime 0xffffffffff600400 + /* Return the current time as a `time_t' and also put it in *T if T is not NULL. Time is represented as seconds from Jan 1 00:00:00 1970. */ -time_t -time (time_t *t) -{ - /* We're using a virtual syscall here. */ - time_t (*__vtime)(time_t * time) - = (time_t (*)(time_t *)) VSYSCALL_ADDR (__NR_vtime); - return __vtime (t); -} +ENTRY (time) + /* Align stack. */ + sub $0x8, %rsp + movq $VSYSCALL_ADDR_vtime, %rax + callq *%rax + /* Check error return. */ + cmpl $-4095, %eax + jae SYSCALL_ERROR_LABEL + +L(pseudo_end): + add $0x8, %rsp + ret +PSEUDO_END(time) diff --git a/sysdeps/x86_64/fpu/e_sqrt.c b/sysdeps/x86_64/fpu/e_sqrt.c new file mode 100644 index 0000000000..d588a8b10d --- /dev/null +++ b/sysdeps/x86_64/fpu/e_sqrt.c @@ -0,0 +1,30 @@ +/* Square root of floating point number. + Copyright (C) 2002 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, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#include + +double +__ieee754_sqrt (double x) +{ + double res; + + asm ("sqrtsd %0, %1" : "=x" (res) : "x" (x)); + + return res; +} diff --git a/sysdeps/x86_64/fpu/e_sqrtf.c b/sysdeps/x86_64/fpu/e_sqrtf.c new file mode 100644 index 0000000000..f7801f05d2 --- /dev/null +++ b/sysdeps/x86_64/fpu/e_sqrtf.c @@ -0,0 +1,30 @@ +/* Square root of floating point number. + Copyright (C) 2002 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, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#include + +float +__ieee754_sqrtf (float x) +{ + float res; + + asm ("sqrtss %0, %1" : "=x" (res) : "x" (x)); + + return res; +} diff --git a/sysdeps/x86_64/fpu/s_fabs.c b/sysdeps/x86_64/fpu/s_fabs.c new file mode 100644 index 0000000000..e5f70b7844 --- /dev/null +++ b/sysdeps/x86_64/fpu/s_fabs.c @@ -0,0 +1,27 @@ +/* Absolute value of floating point number. + Copyright (C) 2002 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, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#include + +double +__fabs (double x) +{ + return __builtin_fabs (x); +} +weak_alias (__fabs, fabs) diff --git a/sysdeps/x86_64/fpu/s_fabsf.c b/sysdeps/x86_64/fpu/s_fabsf.c new file mode 100644 index 0000000000..5e58c11310 --- /dev/null +++ b/sysdeps/x86_64/fpu/s_fabsf.c @@ -0,0 +1,27 @@ +/* Absolute value of floating point number. + Copyright (C) 2002 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, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#include + +float +__fabsf (float x) +{ + return __builtin_fabsf (x); +} +weak_alias (__fabsf, fabsf) diff --git a/sysdeps/x86_64/fpu/s_fabsl.S b/sysdeps/x86_64/fpu/s_fabsl.S new file mode 100644 index 0000000000..3bee0f244e --- /dev/null +++ b/sysdeps/x86_64/fpu/s_fabsl.S @@ -0,0 +1,28 @@ +/* Absolute value of floating point number. + Copyright (C) 2002 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, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#include + + .text +ENTRY(__fabsl) + fldt 8(%rsp) + fabs + ret +END(__fabsl) +weak_alias (__fabsl, fabsl)