diff options
Diffstat (limited to 'libc')
| -rw-r--r-- | libc/sysdeps/linux/microblaze/Makefile.arch | 5 | ||||
| -rw-r--r-- | libc/sysdeps/linux/microblaze/crt0.S | 52 | ||||
| -rw-r--r-- | libc/sysdeps/linux/microblaze/fixdfsi.c | 85 | ||||
| -rw-r--r-- | libc/sysdeps/linux/microblaze/floatlib.h | 140 | 
4 files changed, 1 insertions, 281 deletions
diff --git a/libc/sysdeps/linux/microblaze/Makefile.arch b/libc/sysdeps/linux/microblaze/Makefile.arch index 8f14fb94f..6f1e9fb3d 100644 --- a/libc/sysdeps/linux/microblaze/Makefile.arch +++ b/libc/sysdeps/linux/microblaze/Makefile.arch @@ -5,8 +5,5 @@  #  # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. -CSRC-y := clone.c fixdfsi.c - +CSRC-y := clone.c  SSRC-y := setjmp.S __longjmp.S vfork.S - -ARCH_HEADERS := floatlib.h diff --git a/libc/sysdeps/linux/microblaze/crt0.S b/libc/sysdeps/linux/microblaze/crt0.S deleted file mode 100644 index 6be1e4dfa..000000000 --- a/libc/sysdeps/linux/microblaze/crt0.S +++ /dev/null @@ -1,52 +0,0 @@ -/* - * libc/sysdeps/linux/microblaze/crt0.S -- Initial program entry point for linux/microblaze - * - *  Copyright (C) 2003       John Williams <jwilliams@itee.uq.edu.au> - *  Copyright (C) 2001,2002  NEC Corporation - *  Copyright (C) 2001,2002  Miles Bader <miles@gnu.org> - * - * This file is subject to the terms and conditions of the GNU Lesser - * General Public License.  See the file COPYING.LIB in the main - * directory of this archive for more details. - * - * Written by Miles Bader <miles@gnu.org> - */ - -#include <clinkage.h> - -/* Upon entry, the stack contains the following data: -	argc, argv[0], ..., argv[argc-1], 0, envp[0], ..., 0 -*/ - -	.text -C_ENTRY(_start): -	lw	r5, r0, r1	/* Arg 0: argc */ - -	addi	r6, r1, 4	/* Arg 1: argv */ - -				/* Arg 2: envp */ -	addi	r3, r5, 1	/* skip argc elements to get envp start */ -				/* ...plus the NULL at the end of argv */ -	add	r3, r3, r3	/* Make word offset */ -	add	r3, r3, r3 -	add	r7, r6, r3	/* add to argv to get offset */ - -	/* tail-call uclibc's startup routine */ -	brid	C_SYMBOL_NAME(__uClibc_main) -	nop - - -/* Stick in a dummy reference to `main', so that if an application -   is linking when the `main' function is in a static library (.a) -   we can be sure that `main' actually gets linked in.  */ -L_dummy_main_reference: -	.long	C_SYMBOL_NAME(main) - -/* Define a symbol for the first piece of initialized data.  */ -	.data -	.globl __data_start -__data_start: -	.long 0 -	.weak data_start -	data_start = __data_start - diff --git a/libc/sysdeps/linux/microblaze/fixdfsi.c b/libc/sysdeps/linux/microblaze/fixdfsi.c deleted file mode 100644 index 1611176aa..000000000 --- a/libc/sysdeps/linux/microblaze/fixdfsi.c +++ /dev/null @@ -1,85 +0,0 @@ -/* -** libgcc support for software floating point. -** Copyright (C) 1991 by Pipeline Associates, Inc.  All rights reserved. -** Permission is granted to do *anything* you want with this file, -** commercial or otherwise, provided this message remains intact.  So there! -** I would appreciate receiving any updates/patches/changes that anyone -** makes, and am willing to be the repository for said changes (am I -** making a big mistake?). - -Warning! Only single-precision is actually implemented.  This file -won't really be much use until double-precision is supported. - -However, once that is done, this file might eventually become a -replacement for libgcc1.c.  It might also make possible -cross-compilation for an IEEE target machine from a non-IEEE -host such as a VAX. - -If you'd like to work on completing this, please talk to rms@gnu.ai.mit.edu. - ---> Double precision floating support added by James Carlson on 20 April 1998. - -** -** Pat Wood -** Pipeline Associates, Inc. -** pipeline!phw@motown.com or -** sun!pipeline!phw or -** uunet!motown!pipeline!phw -** -** 05/01/91 -- V1.0 -- first release to gcc mailing lists -** 05/04/91 -- V1.1 -- added float and double prototypes and return values -**                  -- fixed problems with adding and subtracting zero -**                  -- fixed rounding in truncdfsf2 -**                  -- fixed SWAP define and tested on 386 -*/ - -/* -** The following are routines that replace the libgcc soft floating point -** routines that are called automatically when -msoft-float is selected. -** The support single and double precision IEEE format, with provisions -** for byte-swapped machines (tested on 386).  Some of the double-precision -** routines work at full precision, but most of the hard ones simply punt -** and call the single precision routines, producing a loss of accuracy. -** long long support is not assumed or included. -** Overall accuracy is close to IEEE (actually 68882) for single-precision -** arithmetic.  I think there may still be a 1 in 1000 chance of a bit -** being rounded the wrong way during a multiply.  I'm not fussy enough to -** bother with it, but if anyone is, knock yourself out. -** -** Efficiency has only been addressed where it was obvious that something -** would make a big difference.  Anyone who wants to do this right for -** best speed should go in and rewrite in assembler. -** -** I have tested this only on a 68030 workstation and 386/ix integrated -** in with -msoft-float. -*/ - -#include "floatlib.h" - -/* convert double to int */ -long -__fixdfsi (double a1) -{ -  register union double_long dl1; -  register int exp; -  register long l; - -  dl1.d = a1; - -  if (!dl1.l.upper && !dl1.l.lower) -    return (0); - -  exp = EXPD (dl1) - EXCESSD - 31; -  l = MANTD (dl1); - -  if (exp > 0) -      return SIGND(dl1) ? (1<<31) : ((1ul<<31)-1); - -  /* shift down until exp = 0 or l = 0 */ -  if (exp < 0 && exp > -32 && l) -    l >>= -exp; -  else -    return (0); - -  return (SIGND (dl1) ? -l : l); -} diff --git a/libc/sysdeps/linux/microblaze/floatlib.h b/libc/sysdeps/linux/microblaze/floatlib.h deleted file mode 100644 index 817ba7de0..000000000 --- a/libc/sysdeps/linux/microblaze/floatlib.h +++ /dev/null @@ -1,140 +0,0 @@ -/* -** libgcc support for software floating point. -** Copyright (C) 1991 by Pipeline Associates, Inc.  All rights reserved. -** Permission is granted to do *anything* you want with this file, -** commercial or otherwise, provided this message remains intact.  So there! -** I would appreciate receiving any updates/patches/changes that anyone -** makes, and am willing to be the repository for said changes (am I -** making a big mistake?). - -Warning! Only single-precision is actually implemented.  This file -won't really be much use until double-precision is supported. - -However, once that is done, this file might eventually become a -replacement for libgcc1.c.  It might also make possible -cross-compilation for an IEEE target machine from a non-IEEE -host such as a VAX. - -If you'd like to work on completing this, please talk to rms@gnu.ai.mit.edu. - ---> Double precision floating support added by James Carlson on 20 April 1998. - -** -** Pat Wood -** Pipeline Associates, Inc. -** pipeline!phw@motown.com or -** sun!pipeline!phw or -** uunet!motown!pipeline!phw -** -** 05/01/91 -- V1.0 -- first release to gcc mailing lists -** 05/04/91 -- V1.1 -- added float and double prototypes and return values -**                  -- fixed problems with adding and subtracting zero -**                  -- fixed rounding in truncdfsf2 -**                  -- fixed SWAP define and tested on 386 -*/ - -/* -** The following are routines that replace the libgcc soft floating point -** routines that are called automatically when -msoft-float is selected. -** The support single and double precision IEEE format, with provisions -** for byte-swapped machines (tested on 386).  Some of the double-precision -** routines work at full precision, but most of the hard ones simply punt -** and call the single precision routines, producing a loss of accuracy. -** long long support is not assumed or included. -** Overall accuracy is close to IEEE (actually 68882) for single-precision -** arithmetic.  I think there may still be a 1 in 1000 chance of a bit -** being rounded the wrong way during a multiply.  I'm not fussy enough to -** bother with it, but if anyone is, knock yourself out. -** -** Efficiency has only been addressed where it was obvious that something -** would make a big difference.  Anyone who wants to do this right for -** best speed should go in and rewrite in assembler. -** -** I have tested this only on a 68030 workstation and 386/ix integrated -** in with -msoft-float. -*/ - -#ifndef __FLOAT_LIB_H__ -#define __FLOAT_LIB_H__ -/* the following deal with IEEE single-precision numbers */ -#define EXCESS		126 -#define SIGNBIT		0x80000000 -#define HIDDEN		(1 << 23) -#define SIGN(fp)	((fp) & SIGNBIT) -#define EXP(fp)		(((fp) >> 23) & 0xFF) -#define MANT(fp)	(((fp) & 0x7FFFFF) | HIDDEN) -#define PACK(s,e,m)	((s) | ((e) << 23) | (m)) - -/* the following deal with IEEE double-precision numbers */ -#define EXCESSD		1022 -#define HIDDEND		(1 << 20) -#define EXPD(fp)	(((fp.l.upper) >> 20) & 0x7FF) -#define SIGND(fp)	((fp.l.upper) & SIGNBIT) -#define MANTD(fp)	(((((fp.l.upper) & 0xFFFFF) | HIDDEND) << 10) | \ -				(fp.l.lower >> 22)) -#define HIDDEND_LL	((long long)1 << 52) -#define MANTD_LL(fp)	((fp.ll & (HIDDEND_LL-1)) | HIDDEND_LL) -#define PACKD_LL(s,e,m)	(((long long)((s)+((e)<<20))<<32)|(m)) - -/* define SWAP for 386/960 reverse-byte-order brain-damaged CPUs */ -union double_long { -    double d; -#ifdef SWAP -    struct { -      unsigned long lower; -      long upper; -    } l; -#else -    struct { -      long upper; -      unsigned long lower; -    } l; -#endif -    long long ll; -}; - -union float_long -  { -    float f; -    long l; -  }; - -#endif - -/* Functions defined in different files */ - -float __addsf3 (float, float); -float __subsf3 (float, float); -long __cmpsf2 (float, float); -float __mulsf3 (float, float); -float __divsf3 (float, float); -double __floatsidf (register long); -double __floatdidf (register long long); -float __floatsisf (register long ); -float __floatdisf (register long long ); -float __negsf2 (float); -double __negdf2 (double); -double __extendsfdf2 (float); -float __truncdfsf2 (double); -long __cmpdf2 (double, double); -long __fixsfsi (float); -long __fixdfsi (double); -long long __fixdfdi (double); -unsigned long __fixunsdfsi (double); -unsigned long long __fixunsdfdi (double); -double __adddf3 (double, double); -double __subdf3 (double, double); -double __muldf3 (double, double); -double __divdf3 (double, double); -int __gtdf2 (double, double); -int __gedf2 (double, double); -int __ltdf2 (double, double); -int __ledf2 (double, double); -int __eqdf2 (double, double); -int __nedf2 (double, double); -int __gtsf2 (float, float); -int __gesf2 (float, float); -int __ltsf2 (float, float); -int __lesf2 (float, float); -int __eqsf2 (float, float); -int __nesf2 (float, float);  | 
