Commit Graph

67 Commits

Author SHA1 Message Date
David Schultz
b7412bf571 Add a comment describing why it's important for the values in this
file to be correct, and how to generate them automatically.

Caused much pain and suffering for:	peter
2003-05-08 13:50:44 +00:00
David Schultz
92b93b37c0 Add __ldtoa(), a wrapper around gdtoa() to make it look like dtoa().
In support of this, add some MD macros to assist in converting long
doubles to the format expected by gdtoa().

Reviewed by:	silence on standards@
2003-04-05 22:10:13 +00:00
Jake Burkholder
9f5a511863 Implement makecontext. 2003-04-01 23:28:50 +00:00
David Schultz
6a66acb565 Replace our ancient dtoa/strtod implementation with the gdtoa
package, a more recent, generalized set of routines.  Among the
changes:
- Declare strtof() and strtold() in stdlib.h.
- Add glue to libc to support these routines for all kinds
  of ``long double''.
- Update printf() to reflect the fact that dtoa works slightly
  differently now.

As soon as I see that nothing has blown up, I will kill
src/lib/libc/stdlib/strtod.c.  Soon printf() will be able
to use the new routines to output long doubles without loss
of precision, but numerous bugs in the existing code must
be addressed first.

Reviewed by:	bde (briefly), mike (mentor), obrien
2003-03-12 20:30:00 +00:00
Mike Barcroft
5d62092f94 o Implement C99 classification macros isfinite(), isinf(), isnan(),
isnormal().  The current isinf() and isnan() are perserved for
  binary compatibility with 5.0, but new programs will use the macros.
o Implement C99 comparison macros isgreater(), isgreaterequal(),
  isless(), islessequal(), islessgreater(), isunordered().

Submitted by:	David Schultz <dschultz@uclink.Berkeley.EDU>
2003-02-12 20:03:41 +00:00
Mike Barcroft
8cf5ed5125 Implement fpclassify():
o Add a MD header private to libc called _fpmath.h; this header
  contains bitfield layouts of MD floating-point types.
o Add a MI header private to libc called fpmath.h; this header
  contains bitfield layouts of MI floating-point types.
o Add private libc variables to lib/libc/$arch/gen/infinity.c for
  storing NaN values.
o Add __double_t and __float_t to <machine/_types.h>, and provide
  double_t and float_t typedefs in <math.h>.
o Add some C99 manifest constants (FP_ILOGB0, FP_ILOGBNAN, HUGE_VALF,
  HUGE_VALL, INFINITY, NAN, and return values for fpclassify()) to
  <math.h> and others (FLT_EVAL_METHOD, DECIMAL_DIG) to <float.h> via
  <machine/float.h>.
o Add C99 macro fpclassify() which calls __fpclassify{d,f,l}() based
  on the size of its argument.  __fpclassifyl() is never called on
  alpha because (sizeof(long double) == sizeof(double)), which is good
  since __fpclassifyl() can't deal with such a small `long double'.

This was developed by David Schultz and myself with input from bde and
fenner.

PR:		23103
Submitted by:	David Schultz <dschultz@uclink.Berkeley.EDU>
		(significant portions)
Reviewed by:	bde, fenner (earlier versions)
2003-02-08 20:37:55 +00:00
Thomas Moestl
e506034ec1 Rewrite longjmp() and _longjmp() to directly restore the saved frame,
instead of unwinding the call stack. This makes them usable to switch
stacks, e.g. for libc_r.
Do not save the frame pointer in setjmp() and _setjmp(), it is not needed
any more.
Rename _longjmp() to ___longjmp(), with a weak alias to _longjmp(), like
the other architectures did.
2003-01-05 22:17:32 +00:00
Thomas Moestl
6c83076634 Rename siglongjmp() to __siglongjmp(), with a weak alias to siglongjmp(),
like the other architectures do.
2003-01-05 22:10:06 +00:00
Ruslan Ermilov
c51d717f0c libc_r wasn't so tied to libc for 22 months. 2002-11-18 09:50:57 +00:00
Archie Cobbs
83999f5a32 Re-apply the previously backed-out commit that fixes the problem where
HUGE_VAL is not properly aligned on some architectures. The previous
fix now works because the two versions of 'math.h' (include/math.h
and lib/msun/src/math.h) have since been merged into one.

PR:	bin/43544
2002-10-31 23:05:20 +00:00
Jake Burkholder
2ecf9f7162 Rename the libc signal trampoline to __sigtramp to match netbsd. This
should allow gdb to detect when we're executing in a signal trampoline.
2002-10-22 15:15:39 +00:00
Archie Cobbs
ae8a4b2f36 Revert previous commit to unbreak world until we figure out the
right way to do it.
2002-09-20 15:43:26 +00:00
Archie Cobbs
f5f1272284 Fix a problem with the definition of HUGE_VAL causing the gcc warning
"cast increases required alignment of target type" on some platforms.

Reviewed by:	bde
2002-09-19 19:47:27 +00:00
Thomas Moestl
6c788325fa Use the macros from machine/fsr.h; some minor cleanups. 2002-09-14 18:07:03 +00:00
Thomas Moestl
8579151e4b Add implementations of fpgetmask(), fpgetround(), fpgetsticky(),
fpsetround(), fpsetsticky(), obtained from NetBSD and tweaked a little
to use definitions from machine/fsr.h instead of magic numbers.
2002-09-14 18:06:21 +00:00
Thomas Moestl
f085ae60c0 Add an implementation of fabs() (which is quite trivial).
When it is called directly, gcc is smart enough to generate inline
code for it, which is why it wasn't noticed before that it was missing.

fabs() would probably better fit into libm, but it has traditionally been
in libc on FreeBSD, so there is probably software around that makes
assumptions about this by now.
2002-09-13 16:01:26 +00:00
Jake Burkholder
89172e2e25 Install the userland signal trampoline when sigaction is first called,
instead of on startup.  This fixes binary compatibility of dynamically
linked binaries from before the signal code move.

Suggested by:	wollman (a long time ago)
2002-09-03 14:55:29 +00:00
Jake Burkholder
ae162f3f31 Use FOO(a) for macros with variadic args, instead of FOO(a,) or FOO(a, ).
Submitted by:	gcc3.2
2002-09-02 02:30:20 +00:00
Thomas Moestl
58d646cdd3 Add missing ret instruction to the ptrace() syscall wrapper. 2002-07-11 15:48:02 +00:00
David E. O'Brien
3b7de54d68 Use FBSDID 2002-06-30 05:36:49 +00:00
David E. O'Brien
2d39517f33 Use __FBSDID. 2002-06-29 03:23:51 +00:00
David E. O'Brien
45d767fbbe Add frexp(3).
Obtained from:	OpenBSD
2002-06-29 03:23:18 +00:00
Jake Burkholder
dbf51f8db4 Remove unneeded include of machine/emul.h. 2002-06-18 02:15:11 +00:00
Jake Burkholder
3671cacae1 Implement _Qp_sqrt. I've been unable to find a C program that gcc generates
a call to this for, but apparently somehing in libstdc++ does.
2002-06-04 17:02:27 +00:00
Jake Burkholder
530622075e Generate the normal asm stubs for all sysv system calls. Use these instead
of C wrappers for the *sys indirect system calls.  The indirect system calls
are horribly broken on sparc64.

Submitted by:	tmm
2002-05-23 23:51:57 +00:00
Jake Burkholder
5893472b2d Use the right byte order for unaligned stores. <blush>. 2002-05-13 22:48:01 +00:00
Jake Burkholder
30eeff14ef Handle alignment fault fixups in libc rather than in the kernel. 2002-05-13 04:35:08 +00:00
Jake Burkholder
025c284b8d Add a support macro to convert the 5-bit packed register field of
a floating point instruction into a 6-bit register number for
double and quad arguments.
Make use of the new INSFPdq_RN macro where apporpriate; this
is required for correctly handling the "high" fp registers
(>= %f32).
Fix a number of bugs related to the handling of the high registers
which were caused by using __fpu_[gs]etreg() where __fpu_[gs]etreg64()
should be used (the former can only access the low, single-precision,
registers).

Submitted by:	tmm
2002-05-11 21:20:05 +00:00
David E. O'Brien
1f92f7e5d3 Use __FBSDID 2002-05-06 23:24:39 +00:00
David E. O'Brien
fd97c6aea9 We typically don't add trailing /'s. 2002-05-06 23:24:16 +00:00
Jake Burkholder
621136996a Add an alternate signal trampoline to libc; add a wrapper for the sigtramp
install sysarch, to be called from _start.

This will allow the stack to be mapped non-executable, as required by the
sparc v9 abi.
2002-04-29 18:14:44 +00:00
Jake Burkholder
05f2fa5cee Add code to emulate arithmetic, comparison and conversion operations
on long double, which are not implemented in hardware on any UltraSPARC
chip that I know of.  This just calls into the existing floating point
emulator, which is still needed to emulate other floating point operations
in certain conditions.  Without this gcc has to generate the quad floating
point instructions directly, which sometimes causes internal compiler
errors.

Reviewed by:	tmm
2002-04-28 02:36:36 +00:00
Jake Burkholder
8c93421144 Emulate ldq and stq (load/store long double) instructions. GCC has started
using these to load long doubles, but they aren't implemented in hardware
on (at least) UltraSPARC I and II machines.
Emulate popc in the user trap handler as well.
Re-arrange slightly to make support functions more accessible.

Reviewed by:	tmm
2002-04-27 21:56:28 +00:00
Jake Burkholder
82436f1067 Rename some fields in struct frame to be compatible with NetBSD/OpenBSD,
and add some compatibility defines.  Add fields for ins and locals to
struct reg also for the same reason; these aren't filled in yet because
getting at those registers sucks and I'd rather not save them in the
trapframe just for this.  Reorder struct reg to be ABI compatible as
well.  Add needed include of machine/emul.h.

This gets pmdb (poor man's debugger) from OpenBSD mostly compiling but it
doesn't work yet :(
2002-04-09 00:57:23 +00:00
Thomas Moestl
ca31253aa8 htonl() and ntohl() operate on unsinged types, so they must zero-extend,
not sign-extend. Fix a comment in the former to that effect, and change
the latter over to do the right conversion.
2002-04-06 00:07:15 +00:00
David E. O'Brien
1114a754ed Fix the style of the SCM ID's.
I believe have made all of libc .h's as consistent as possible.
2002-03-22 23:42:05 +00:00
David E. O'Brien
333fc21e3c Fix the style of the SCM ID's.
I believe have made all of libc .c's as consistent as possible.
2002-03-22 21:53:29 +00:00
David E. O'Brien
078c6f985a SCM ID tweak. 2002-03-22 09:27:59 +00:00
David E. O'Brien
c05ac53b8b Remove __P() usage. 2002-03-21 22:49:10 +00:00
David E. O'Brien
8fb3f3f682 Remove 'register' keyword. 2002-03-21 18:49:23 +00:00
Thomas Moestl
d095bc220d Fix some bugs that would prevent %fsr to be set correctly, and add
support for fcmp and fcmpe instructions with a condition code
specification other than %fcc0.
This (primarily the first part) seems to fix a lot of problems that
people were seeing, e.g. perl and gawk failures.

Reported and analyzed by:	wollman
2002-03-11 03:18:17 +00:00
Thomas Moestl
61de6bb54c Account for <machine/fsr.h> no longer being usable for assembler code. 2002-03-11 03:13:02 +00:00
Thomas Moestl
57f31f4714 Fix __dtoul to work on sparc64 (it used a half-way v8 stack layout),
and make it PIC-aware.
2002-03-11 03:10:55 +00:00
Thomas Moestl
9300cb7db7 Save/restore the %y register around calls to the C user trap handler;
gcc emits the deprecated sparc v8 instructions that use this register
when optimizing for UltraSparc machines because they are apparetly
faster then their v9 counterpars there.
2002-03-11 02:53:03 +00:00
Jake Burkholder
3ff2c61db8 Add fpsetmask(). Needed to build miniperl.
Obtained from:	netbsd
2002-03-05 04:03:57 +00:00
Jake Burkholder
f496405572 Fix a bug where siglongjmp would clobber the argument to return from
sigsetjmp.  It would return the value of the signal flag, instead.

Pointy hat to:	jake
2002-03-05 04:02:04 +00:00
Thomas Moestl
49a64cb475 Connect the sparc64 userland fp emulator to the build. 2002-03-05 00:00:40 +00:00
Thomas Moestl
4895e965c3 Add userland floating point emulator code for sparc64. This is a port
of the (never committed) in-kernel version (with some optimizations and
cleanups), which in turn was ported from NetBSD.
2002-02-23 21:37:18 +00:00
Jake Burkholder
3b16ee2c6c Fix wrong offsets. Add offsets for %fsr and %tstate.
Submitted by:	tmm
2002-02-23 19:01:22 +00:00
Jake Burkholder
d1497824f0 Add space for %fsr and %tstate to utrapframe. Save them in the generic
user trap entry code.  Restore %asi and %ccr from the saved %tstate before
returning to the trapping user code.

Submitted by:	tmm
2002-02-23 19:00:30 +00:00