mirror of
https://sourceware.org/git/glibc.git
synced 2025-07-30 22:43:12 +03:00
Update.
1998-05-21 15:27 Ulrich Drepper <drepper@cygnus.com> * wcsmbs/wcsnrtombs.c: Correct computation of result. * wcsmbs/wcsrtombs.c: Likewise. * wcsmbs/Makefile (tests): Add wcsmbs-tst1.c. * wcsmbs/wcsmbs-tst1.c: New file. * iconv/loop.c (COUNT_CONVERTED): Correct computation. * locale/C-ctype.c (_nl_C_LC_CTYPE): Define MB_CUR_MAX for C locale as 1. * locale/setlocale.c: Don't make _nl_current_* and _nl_C_* references weak. 1998-05-21 Philip Blundell <philb@gnu.org> * sysdeps/arm/fpu_control.h: Replace stub file with real implementation. * sysdeps/arm/fpu/bits/fenv.h: New file. * sysdeps/arm/fpu/fesetround.c: Likewise. * sysdeps/arm/fpu/fclrexcpt.c: Likewise. * sysdeps/arm/fpu/fsetexcptflag.c: Likewise. * sysdeps/arm/fpu/ftestexcpt.c: Likewise. * sysdeps/arm/fpu/fraiseexcpt.c: Likewise. * sysdeps/arm/fpu/fegetenv.c: Likewise. * sysdeps/arm/fpu/fesetenv.c: Likewise. 1998-05-21 16:34 Richard Henderson <rth@cygnus.com> * elf/dl-load.c (_dl_map_object_from_fd): Get file header with read instead of mmap.
This commit is contained in:
34
ChangeLog
34
ChangeLog
@ -1,3 +1,37 @@
|
|||||||
|
1998-05-21 15:27 Ulrich Drepper <drepper@cygnus.com>
|
||||||
|
|
||||||
|
* wcsmbs/wcsnrtombs.c: Correct computation of result.
|
||||||
|
* wcsmbs/wcsrtombs.c: Likewise.
|
||||||
|
|
||||||
|
* wcsmbs/Makefile (tests): Add wcsmbs-tst1.c.
|
||||||
|
* wcsmbs/wcsmbs-tst1.c: New file.
|
||||||
|
|
||||||
|
* iconv/loop.c (COUNT_CONVERTED): Correct computation.
|
||||||
|
|
||||||
|
* locale/C-ctype.c (_nl_C_LC_CTYPE): Define MB_CUR_MAX for C locale
|
||||||
|
as 1.
|
||||||
|
|
||||||
|
* locale/setlocale.c: Don't make _nl_current_* and _nl_C_* references
|
||||||
|
weak.
|
||||||
|
|
||||||
|
1998-05-21 Philip Blundell <philb@gnu.org>
|
||||||
|
|
||||||
|
* sysdeps/arm/fpu_control.h: Replace stub file with real
|
||||||
|
implementation.
|
||||||
|
* sysdeps/arm/fpu/bits/fenv.h: New file.
|
||||||
|
* sysdeps/arm/fpu/fesetround.c: Likewise.
|
||||||
|
* sysdeps/arm/fpu/fclrexcpt.c: Likewise.
|
||||||
|
* sysdeps/arm/fpu/fsetexcptflag.c: Likewise.
|
||||||
|
* sysdeps/arm/fpu/ftestexcpt.c: Likewise.
|
||||||
|
* sysdeps/arm/fpu/fraiseexcpt.c: Likewise.
|
||||||
|
* sysdeps/arm/fpu/fegetenv.c: Likewise.
|
||||||
|
* sysdeps/arm/fpu/fesetenv.c: Likewise.
|
||||||
|
|
||||||
|
1998-05-21 16:34 Richard Henderson <rth@cygnus.com>
|
||||||
|
|
||||||
|
* elf/dl-load.c (_dl_map_object_from_fd): Get file header with
|
||||||
|
read instead of mmap.
|
||||||
|
|
||||||
1998-05-21 8:16 Richard Henderson <rth@cygnus.com>
|
1998-05-21 8:16 Richard Henderson <rth@cygnus.com>
|
||||||
|
|
||||||
* sysdeps/unix/sysv/linux/alpha/glob.c: Include sysdeps/generic/glob.c
|
* sysdeps/unix/sysv/linux/alpha/glob.c: Include sysdeps/generic/glob.c
|
||||||
|
@ -103,10 +103,10 @@
|
|||||||
? (inptr - *inptrp) : (outptr - *outptrp))
|
? (inptr - *inptrp) : (outptr - *outptrp))
|
||||||
# endif
|
# endif
|
||||||
# else
|
# else
|
||||||
# define COUNT_CONVERTED (inptr - *inptrp)
|
# define COUNT_CONVERTED ((inptr - *inptrp) / MIN_NEEDED_INPUT)
|
||||||
# endif
|
# endif
|
||||||
# elif MIN_NEEDED_OUTPUT == MAX_NEEDED_OUTPUT
|
# elif MIN_NEEDED_OUTPUT == MAX_NEEDED_OUTPUT
|
||||||
# define COUNT_CONVERTED (outptr - *outptrp)
|
# define COUNT_CONVERTED ((outptr - *outptrp) / MIN_NEEDED_OUTPUT)
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -367,7 +367,7 @@ const struct locale_data _nl_C_LC_CTYPE =
|
|||||||
"print\0" "graph\0" "blank\0" "cntrl\0" "punct\0" "alnum\0" },
|
"print\0" "graph\0" "blank\0" "cntrl\0" "punct\0" "alnum\0" },
|
||||||
{ string: "tolower\0" "toupper\0" },
|
{ string: "tolower\0" "toupper\0" },
|
||||||
{ string: _nl_C_LC_CTYPE_width },
|
{ string: _nl_C_LC_CTYPE_width },
|
||||||
{ word: 2 },
|
{ word: 1 },
|
||||||
{ string: "ANSI_X3.4-1968" }
|
{ string: "ANSI_X3.4-1968" }
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -36,8 +36,7 @@
|
|||||||
then nothing is using the locale data. */
|
then nothing is using the locale data. */
|
||||||
#define DEFINE_CATEGORY(category, category_name, items, a, b, c, d) \
|
#define DEFINE_CATEGORY(category, category_name, items, a, b, c, d) \
|
||||||
extern struct locale_data *_nl_current_##category; \
|
extern struct locale_data *_nl_current_##category; \
|
||||||
extern struct locale_data _nl_C_##category; \
|
extern struct locale_data _nl_C_##category;
|
||||||
weak_extern (_nl_current_##category) weak_extern (_nl_C_##category)
|
|
||||||
#include "categories.def"
|
#include "categories.def"
|
||||||
#undef DEFINE_CATEGORY
|
#undef DEFINE_CATEGORY
|
||||||
|
|
||||||
|
58
sysdeps/arm/fpu/bits/fenv.h
Normal file
58
sysdeps/arm/fpu/bits/fenv.h
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
/* Copyright (C) 1997, 1998 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 Library General Public License as
|
||||||
|
published by the Free Software Foundation; either version 2 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
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||||
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
|
#ifndef _FENV_H
|
||||||
|
# error "Never use <bits/fenv.h> directly; include <fenv.h> instead."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Define bits representing exceptions in the FPU status word. */
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
FE_INVALID = 1,
|
||||||
|
#define FE_INVALID FE_INVALID
|
||||||
|
FE_DIVBYZERO = 2,
|
||||||
|
#define FE_DIVBYZERO FE_DIVBYZERO
|
||||||
|
FE_OVERFLOW = 4,
|
||||||
|
#define FE_OVERFLOW FE_OVERFLOW
|
||||||
|
FE_UNDERFLOW = 8,
|
||||||
|
#define FE_UNDERFLOW FE_UNDERFLOW
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Amount to shift by to convert an exception to a mask bit. */
|
||||||
|
#define FE_EXCEPTION_SHIFT 16
|
||||||
|
|
||||||
|
/* All supported exceptions. */
|
||||||
|
#define FE_ALL_EXCEPT \
|
||||||
|
(FE_INVALID | FE_DIVBYZERO | FE_OVERFLOW | FE_UNDERFLOW)
|
||||||
|
|
||||||
|
/* The ARM FPU basically only supports round-to-nearest. Other rounding
|
||||||
|
modes exist, but you have to encode them in the actual instruction. */
|
||||||
|
#define FE_TONEAREST 0
|
||||||
|
|
||||||
|
/* Type representing exception flags. */
|
||||||
|
typedef unsigned long fexcept_t;
|
||||||
|
|
||||||
|
/* Type representing floating-point environment. */
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
unsigned long cw;
|
||||||
|
}
|
||||||
|
fenv_t;
|
||||||
|
|
||||||
|
/* If the default argument is used we use this value. */
|
||||||
|
#define FE_DFL_ENV ((fenv_t *) -1l)
|
39
sysdeps/arm/fpu/fclrexcpt.c
Normal file
39
sysdeps/arm/fpu/fclrexcpt.c
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
/* Clear given exceptions in current floating-point environment.
|
||||||
|
Copyright (C) 1997, 1998 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 Library General Public License as
|
||||||
|
published by the Free Software Foundation; either version 2 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
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||||
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
|
#include <fenv.h>
|
||||||
|
#include <fpu_control.h>
|
||||||
|
|
||||||
|
void
|
||||||
|
feclearexcept (int excepts)
|
||||||
|
{
|
||||||
|
unsigned long int temp;
|
||||||
|
|
||||||
|
/* Mask out unsupported bits/exceptions. */
|
||||||
|
excepts &= FE_ALL_EXCEPT;
|
||||||
|
|
||||||
|
/* Get the current floating point status. */
|
||||||
|
_FPU_GETCW(temp);
|
||||||
|
|
||||||
|
/* Clear the relevant bits. */
|
||||||
|
temp &= excepts ^ FE_ALL_EXCEPT;
|
||||||
|
|
||||||
|
/* Put the new data in effect. */
|
||||||
|
_FPU_SETCW(temp);
|
||||||
|
}
|
29
sysdeps/arm/fpu/fegetenv.c
Normal file
29
sysdeps/arm/fpu/fegetenv.c
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
/* Store current floating-point environment.
|
||||||
|
Copyright (C) 1997, 1998 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 Library General Public License as
|
||||||
|
published by the Free Software Foundation; either version 2 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
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||||
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
|
#include <fenv.h>
|
||||||
|
#include <fpu_control.h>
|
||||||
|
|
||||||
|
void
|
||||||
|
fegetenv (fenv_t *envp)
|
||||||
|
{
|
||||||
|
unsigned long int temp;
|
||||||
|
_FPU_GETCW(temp);
|
||||||
|
envp->cw = temp;
|
||||||
|
}
|
26
sysdeps/arm/fpu/fegetround.c
Normal file
26
sysdeps/arm/fpu/fegetround.c
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
/* Return current rounding direction.
|
||||||
|
Copyright (C) 1997, 1998 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 Library General Public License as
|
||||||
|
published by the Free Software Foundation; either version 2 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
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||||
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
|
#include <fenv.h>
|
||||||
|
|
||||||
|
int
|
||||||
|
fegetround (void)
|
||||||
|
{
|
||||||
|
return FE_TONEAREST; /* Easy. :-) */
|
||||||
|
}
|
33
sysdeps/arm/fpu/fesetenv.c
Normal file
33
sysdeps/arm/fpu/fesetenv.c
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
/* Install given floating-point environment.
|
||||||
|
Copyright (C) 1997, 1998 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 Library General Public License as
|
||||||
|
published by the Free Software Foundation; either version 2 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
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||||
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
|
#include <fenv.h>
|
||||||
|
#include <fpu_control.h>
|
||||||
|
|
||||||
|
void
|
||||||
|
fesetenv (const fenv_t *envp)
|
||||||
|
{
|
||||||
|
if (envp == FE_DFL_ENV)
|
||||||
|
_FPU_SETCW(_FPU_DEFAULT);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
unsigned long temp = envp->cw;
|
||||||
|
_FPU_SETCW(temp);
|
||||||
|
}
|
||||||
|
}
|
27
sysdeps/arm/fpu/fesetround.c
Normal file
27
sysdeps/arm/fpu/fesetround.c
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
/* Set current rounding direction.
|
||||||
|
Copyright (C) 1997, 1998 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 Library General Public License as
|
||||||
|
published by the Free Software Foundation; either version 2 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
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||||
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
|
#include <fenv.h>
|
||||||
|
|
||||||
|
int
|
||||||
|
fesetround (int round)
|
||||||
|
{
|
||||||
|
/* We only support FE_TONEAREST, so there is no need for any work. */
|
||||||
|
return (round == FE_TONEAREST)?1:0;
|
||||||
|
}
|
32
sysdeps/arm/fpu/fraiseexcpt.c
Normal file
32
sysdeps/arm/fpu/fraiseexcpt.c
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
/* Raise given exceptions.
|
||||||
|
Copyright (C) 1997, 1998 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 Library General Public License as
|
||||||
|
published by the Free Software Foundation; either version 2 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
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||||
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
|
#include <fenv.h>
|
||||||
|
#include <fpu_control.h>
|
||||||
|
#include <math.h>
|
||||||
|
|
||||||
|
void
|
||||||
|
feraiseexcept (int excepts)
|
||||||
|
{
|
||||||
|
/* Raise exceptions represented by EXPECTS. */
|
||||||
|
fexcept_t temp;
|
||||||
|
_FPU_GETCW(temp);
|
||||||
|
temp |= (excepts & FE_ALL_EXCEPT);
|
||||||
|
_FPU_SETCW(temp);
|
||||||
|
}
|
38
sysdeps/arm/fpu/fsetexcptflag.c
Normal file
38
sysdeps/arm/fpu/fsetexcptflag.c
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
/* Set floating-point environment exception handling.
|
||||||
|
Copyright (C) 1997, 1998 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 Library General Public License as
|
||||||
|
published by the Free Software Foundation; either version 2 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
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||||
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
|
#include <fenv.h>
|
||||||
|
#include <math.h>
|
||||||
|
#include <fpu_control.h>
|
||||||
|
|
||||||
|
void
|
||||||
|
fesetexceptflag (const fexcept_t *flagp, int excepts)
|
||||||
|
{
|
||||||
|
fexcept_t temp;
|
||||||
|
|
||||||
|
/* Get the current environment. */
|
||||||
|
_FPU_GETCW(temp);
|
||||||
|
|
||||||
|
/* Set the desired exception mask. */
|
||||||
|
temp &= ~((excepts & FE_ALL_EXCEPT) << FE_EXCEPT_SHIFT);
|
||||||
|
temp |= (*flagp & excepts & FE_ALL_EXCEPT) << FE_EXCEPT_SHIFT;
|
||||||
|
|
||||||
|
/* Save state back to the FPU. */
|
||||||
|
_FPU_SETCW(temp);
|
||||||
|
}
|
32
sysdeps/arm/fpu/ftestexcept.c
Normal file
32
sysdeps/arm/fpu/ftestexcept.c
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
/* Test exception in current environment.
|
||||||
|
Copyright (C) 1997, 1998 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 Library General Public License as
|
||||||
|
published by the Free Software Foundation; either version 2 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
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||||
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
|
#include <fenv.h>
|
||||||
|
#include <fpu_control.h>
|
||||||
|
|
||||||
|
int
|
||||||
|
fetestexcept (int excepts)
|
||||||
|
{
|
||||||
|
fexcept_t temp;
|
||||||
|
|
||||||
|
/* Get current exceptions. */
|
||||||
|
_FPU_GETCW(temp);
|
||||||
|
|
||||||
|
return temp & excepts & FE_ALL_EXCEPT;
|
||||||
|
}
|
@ -1,5 +1,5 @@
|
|||||||
/* FPU control word definitions. Stub version.
|
/* FPU control word definitions. ARM version.
|
||||||
Copyright (C) 1996, 1997 Free Software Foundation, Inc.
|
Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
@ -20,7 +20,54 @@
|
|||||||
#ifndef _FPU_CONTROL_H
|
#ifndef _FPU_CONTROL_H
|
||||||
#define _FPU_CONTROL_H
|
#define _FPU_CONTROL_H
|
||||||
|
|
||||||
#define _FPU_RESERVED 0xffffffff /* These bits are reserved. */
|
/* We have a slight terminology confusion here. On the ARM, the register
|
||||||
|
* we're interested in is actually the FPU status word - the FPU control
|
||||||
|
* word is something different (which is implementation-defined and only
|
||||||
|
* accessible from supervisor mode.)
|
||||||
|
*
|
||||||
|
* The FPSR looks like this:
|
||||||
|
*
|
||||||
|
* 31-24 23-16 15-8 7-0
|
||||||
|
* | system ID | trap enable | system control | exception flags |
|
||||||
|
*
|
||||||
|
* We ignore the system ID bits; for interest's sake they are:
|
||||||
|
*
|
||||||
|
* 0000 "old" FPE
|
||||||
|
* 1000 FPPC hardware
|
||||||
|
* 0001 FPE 400
|
||||||
|
* 1001 FPA hardware
|
||||||
|
*
|
||||||
|
* The trap enable and exception flags are both structured like this:
|
||||||
|
*
|
||||||
|
* 7 - 5 4 3 2 1 0
|
||||||
|
* | reserved | INX | UFL | OFL | DVZ | IVO |
|
||||||
|
*
|
||||||
|
* where a `1' bit in the enable byte means that the trap can occur, and
|
||||||
|
* a `1' bit in the flags byte means the exception has occurred.
|
||||||
|
*
|
||||||
|
* The exceptions are:
|
||||||
|
*
|
||||||
|
* IVO - invalid operation
|
||||||
|
* DVZ - divide by zero
|
||||||
|
* OFL - overflow
|
||||||
|
* UFL - underflow
|
||||||
|
* INX - inexact (do not use; implementations differ)
|
||||||
|
*
|
||||||
|
* The system control byte looks like this:
|
||||||
|
*
|
||||||
|
* 7-5 4 3 2 1 0
|
||||||
|
* | reserved | AC | EP | SO | NE | ND |
|
||||||
|
*
|
||||||
|
* where the bits mean
|
||||||
|
*
|
||||||
|
* ND - no denormalised numbers (force them all to zero)
|
||||||
|
* NE - enable NaN exceptions
|
||||||
|
* SO - synchronous operation
|
||||||
|
* EP - use expanded packed-decimal format
|
||||||
|
* AC - use alternate definition for C flag on compare operations
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define _FPU_RESERVED 0xfff0e0f0 /* These bits are reserved. */
|
||||||
|
|
||||||
/* The fdlibm code requires no interrupts for exceptions. Don't
|
/* The fdlibm code requires no interrupts for exceptions. Don't
|
||||||
change the rounding mode, it would break long double I/O! */
|
change the rounding mode, it would break long double I/O! */
|
||||||
@ -29,11 +76,9 @@
|
|||||||
/* Type of the control word. */
|
/* Type of the control word. */
|
||||||
typedef unsigned int fpu_control_t;
|
typedef unsigned int fpu_control_t;
|
||||||
|
|
||||||
/* Macros for accessing the hardware control word.
|
/* Macros for accessing the hardware control word. */
|
||||||
* On the ARM, we can't do this from user mode (it would trap).
|
#define _FPU_GETCW(cw) __asm__ ("rfs %0" : "=r" (cw))
|
||||||
*/
|
#define _FPU_SETCW(cw) __asm__ ("wfs %0" : : "r" (cw))
|
||||||
#define _FPU_GETCW(cw) __asm__ ("movnv r0,r0" : "=g" (cw))
|
|
||||||
#define _FPU_SETCW(cw) __asm__ ("movnv r0,r0" : : "g" (cw))
|
|
||||||
|
|
||||||
/* Default control word set at startup. */
|
/* Default control word set at startup. */
|
||||||
extern fpu_control_t __fpu_control;
|
extern fpu_control_t __fpu_control;
|
||||||
|
@ -39,7 +39,7 @@ routines := wcscat wcschr wcscmp wcscpy wcscspn wcsdup wcslen wcsncat \
|
|||||||
wcscasecmp wcsncase wcscasecmp_l wcsncase_l \
|
wcscasecmp wcsncase wcscasecmp_l wcsncase_l \
|
||||||
wcsmbsload
|
wcsmbsload
|
||||||
|
|
||||||
tests := tst-wcstof
|
tests := tst-wcstof wcsmbs-tst1
|
||||||
|
|
||||||
include ../Rules
|
include ../Rules
|
||||||
|
|
||||||
|
57
wcsmbs/wcsmbs-tst1.c
Normal file
57
wcsmbs/wcsmbs-tst1.c
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
/* Based on a test program by Won Kyu Park <wkpark@chem.skku.ac.kr>. */
|
||||||
|
|
||||||
|
#include <wchar.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <wctype.h>
|
||||||
|
#include <locale.h>
|
||||||
|
|
||||||
|
int
|
||||||
|
main (void)
|
||||||
|
{
|
||||||
|
int test=0, idx=0;
|
||||||
|
char buf[100], *pchar;
|
||||||
|
wchar_t tmp[10];
|
||||||
|
wchar_t tmp1[]={L'W',L'o',L'r',L'l',L'd',L'\0'};
|
||||||
|
char str[]="Hello";
|
||||||
|
int result = 0;
|
||||||
|
|
||||||
|
pchar= setlocale (LC_ALL, "");
|
||||||
|
printf ("locale : %s\n",pchar);
|
||||||
|
printf ("MB_CUR_MAX %d\n", MB_CUR_MAX);
|
||||||
|
|
||||||
|
puts("---- test 1 ------");
|
||||||
|
test = mbstowcs (tmp, str, (strlen (str) + 1) * sizeof (char));
|
||||||
|
printf ("size of string by mbstowcs %d\n", test);
|
||||||
|
if (test != strlen (str))
|
||||||
|
result = 1;
|
||||||
|
idx += wctomb (&buf[0], tmp[0]);
|
||||||
|
idx += wctomb (&buf[idx], tmp[1]);
|
||||||
|
buf[idx] = 0;
|
||||||
|
printf ("orig string %s\n", str);
|
||||||
|
printf ("string by wctomb %s\n", buf);
|
||||||
|
printf ("string by %%C %C", tmp[0]);
|
||||||
|
if (tmp[0] != L'H')
|
||||||
|
result = 1;
|
||||||
|
printf ("%C\n", tmp[1]);
|
||||||
|
if (tmp[1] != L'e')
|
||||||
|
result = 1;
|
||||||
|
printf ("string by %%S %S\n", tmp);
|
||||||
|
if (wcscmp (tmp, L"Hello") != 0)
|
||||||
|
result = 1;
|
||||||
|
puts("---- test 2 ------");
|
||||||
|
printf ("wchar string %S\n", tmp1);
|
||||||
|
printf ("wchar %C\n", tmp1[0]);
|
||||||
|
test = wcstombs (buf, tmp1, (wcslen (tmp1) + 1) * sizeof (wchar_t));
|
||||||
|
printf ("size of string by wcstombs %d\n", test);
|
||||||
|
if (test != wcslen (tmp1))
|
||||||
|
result = 1;
|
||||||
|
test = wcslen (tmp1);
|
||||||
|
printf ("size of string by wcslen %d\n", test);
|
||||||
|
printf ("char %s\n", buf);
|
||||||
|
if (strcmp (buf, "World") != 0)
|
||||||
|
result = 1;
|
||||||
|
puts("------------------");
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
@ -46,7 +46,7 @@ __wcsnrtombs (dst, src, nwc, len, ps)
|
|||||||
struct gconv_step_data data;
|
struct gconv_step_data data;
|
||||||
const wchar_t *srcend;
|
const wchar_t *srcend;
|
||||||
int status;
|
int status;
|
||||||
size_t result = 0;
|
size_t result;
|
||||||
|
|
||||||
/* Tell where we want the result. */
|
/* Tell where we want the result. */
|
||||||
data.invocation_counter = 0;
|
data.invocation_counter = 0;
|
||||||
@ -66,7 +66,9 @@ __wcsnrtombs (dst, src, nwc, len, ps)
|
|||||||
{
|
{
|
||||||
char buf[256]; /* Just an arbitrary value. */
|
char buf[256]; /* Just an arbitrary value. */
|
||||||
const wchar_t *inbuf = *src;
|
const wchar_t *inbuf = *src;
|
||||||
|
size_t dummy;
|
||||||
|
|
||||||
|
result = 0;
|
||||||
data.outbufend = buf + sizeof (buf);
|
data.outbufend = buf + sizeof (buf);
|
||||||
|
|
||||||
do
|
do
|
||||||
@ -77,7 +79,10 @@ __wcsnrtombs (dst, src, nwc, len, ps)
|
|||||||
&data,
|
&data,
|
||||||
(const char **) &inbuf,
|
(const char **) &inbuf,
|
||||||
(const char *) srcend,
|
(const char *) srcend,
|
||||||
&result, 0);
|
&dummy, 0);
|
||||||
|
|
||||||
|
/* Count the number of bytes. */
|
||||||
|
result += data.outbuf - buf;
|
||||||
}
|
}
|
||||||
while (status == GCONV_FULL_OUTPUT);
|
while (status == GCONV_FULL_OUTPUT);
|
||||||
|
|
||||||
@ -91,13 +96,18 @@ __wcsnrtombs (dst, src, nwc, len, ps)
|
|||||||
/* This code is based on the safe assumption that all internal
|
/* This code is based on the safe assumption that all internal
|
||||||
multi-byte encodings use the NUL byte only to mark the end
|
multi-byte encodings use the NUL byte only to mark the end
|
||||||
of the string. */
|
of the string. */
|
||||||
|
size_t dummy;
|
||||||
|
|
||||||
data.outbuf = dst;
|
data.outbuf = dst;
|
||||||
data.outbufend = dst + len;
|
data.outbufend = dst + len;
|
||||||
|
|
||||||
status = (*__wcsmbs_gconv_fcts.tomb->fct) (__wcsmbs_gconv_fcts.tomb,
|
status = (*__wcsmbs_gconv_fcts.tomb->fct) (__wcsmbs_gconv_fcts.tomb,
|
||||||
&data, (const char **) src,
|
&data, (const char **) src,
|
||||||
(const char *) srcend,
|
(const char *) srcend,
|
||||||
&result, 0);
|
&dummy, 0);
|
||||||
|
|
||||||
|
/* Count the number of bytes. */
|
||||||
|
result = data.outbuf - dst;
|
||||||
|
|
||||||
/* We have to determine whether the last character converted
|
/* We have to determine whether the last character converted
|
||||||
is the NUL character. */
|
is the NUL character. */
|
||||||
|
@ -42,7 +42,7 @@ __wcsrtombs (dst, src, len, ps)
|
|||||||
{
|
{
|
||||||
struct gconv_step_data data;
|
struct gconv_step_data data;
|
||||||
int status;
|
int status;
|
||||||
size_t result = 0;
|
size_t result;
|
||||||
|
|
||||||
/* Tell where we want the result. */
|
/* Tell where we want the result. */
|
||||||
data.invocation_counter = 0;
|
data.invocation_counter = 0;
|
||||||
@ -59,7 +59,9 @@ __wcsrtombs (dst, src, len, ps)
|
|||||||
char buf[256]; /* Just an arbitrary value. */
|
char buf[256]; /* Just an arbitrary value. */
|
||||||
const wchar_t *srcend = *src + __wcslen (*src) + 1;
|
const wchar_t *srcend = *src + __wcslen (*src) + 1;
|
||||||
const wchar_t *inbuf = *src;
|
const wchar_t *inbuf = *src;
|
||||||
|
size_t dummy;
|
||||||
|
|
||||||
|
result = 0;
|
||||||
data.outbufend = buf + sizeof (buf);
|
data.outbufend = buf + sizeof (buf);
|
||||||
|
|
||||||
do
|
do
|
||||||
@ -70,7 +72,10 @@ __wcsrtombs (dst, src, len, ps)
|
|||||||
&data,
|
&data,
|
||||||
(const char **) &inbuf,
|
(const char **) &inbuf,
|
||||||
(const char *) srcend,
|
(const char *) srcend,
|
||||||
&result, 0);
|
&dummy, 0);
|
||||||
|
|
||||||
|
/* Count the number of bytes. */
|
||||||
|
result += data.outbuf - buf;
|
||||||
}
|
}
|
||||||
while (status == GCONV_FULL_OUTPUT);
|
while (status == GCONV_FULL_OUTPUT);
|
||||||
|
|
||||||
@ -88,6 +93,7 @@ __wcsrtombs (dst, src, len, ps)
|
|||||||
multi-byte encodings use the NUL byte only to mark the end
|
multi-byte encodings use the NUL byte only to mark the end
|
||||||
of the string. */
|
of the string. */
|
||||||
const wchar_t *srcend = *src + __wcsnlen (*src, len * MB_CUR_MAX) + 1;
|
const wchar_t *srcend = *src + __wcsnlen (*src, len * MB_CUR_MAX) + 1;
|
||||||
|
size_t dummy;
|
||||||
|
|
||||||
data.outbuf = dst;
|
data.outbuf = dst;
|
||||||
data.outbufend = dst + len;
|
data.outbufend = dst + len;
|
||||||
@ -95,7 +101,10 @@ __wcsrtombs (dst, src, len, ps)
|
|||||||
status = (*__wcsmbs_gconv_fcts.tomb->fct) (__wcsmbs_gconv_fcts.tomb,
|
status = (*__wcsmbs_gconv_fcts.tomb->fct) (__wcsmbs_gconv_fcts.tomb,
|
||||||
&data, (const char **) src,
|
&data, (const char **) src,
|
||||||
(const char *) srcend,
|
(const char *) srcend,
|
||||||
&result, 0);
|
&dummy, 0);
|
||||||
|
|
||||||
|
/* Count the number of bytes. */
|
||||||
|
result = data.outbuf - dst;
|
||||||
|
|
||||||
/* We have to determine whether the last character converted
|
/* We have to determine whether the last character converted
|
||||||
is the NUL character. */
|
is the NUL character. */
|
||||||
|
Reference in New Issue
Block a user