From 0f976b45772c889f596e3e3b0ee1cfec20ac6ac4 Mon Sep 17 00:00:00 2001 From: Zack Weinberg Date: Wed, 25 Apr 2001 00:58:04 +0000 Subject: [PATCH] Makefile.in (LIB2FUNCS): Remove _varargs and __dummy. * Makefile.in (LIB2FUNCS): Remove _varargs and __dummy. * libgcc-std.ver: Remove __builtin_saveregs, __dummy, and __empty. * libgcc2.c: Remove __dummy and __builtin_saveregs. * libgcc2.h: Don't prototype __builtin_saveregs or __dummy. * config/i860/varargs.asm: New file - preserve i860 __builtin_saveregs for future reference. From-SVN: r41529 --- gcc/ChangeLog | 9 ++ gcc/Makefile.in | 2 +- gcc/config/i860/varargs.asm | 201 +++++++++++++++++++++++++++++++ gcc/libgcc-std.ver | 3 - gcc/libgcc2.c | 228 ------------------------------------ gcc/libgcc2.h | 2 - 6 files changed, 211 insertions(+), 234 deletions(-) create mode 100644 gcc/config/i860/varargs.asm diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7177a7d3950..5d310632b7a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2001-04-24 Zack Weinberg + + * Makefile.in (LIB2FUNCS): Remove _varargs and __dummy. + * libgcc-std.ver: Remove __builtin_saveregs, __dummy, and __empty. + * libgcc2.c: Remove __dummy and __builtin_saveregs. + * libgcc2.h: Don't prototype __builtin_saveregs or __dummy. + * config/i860/varargs.asm: New file - preserve i860 __builtin_saveregs + for future reference. + 2001-04-24 Jason Merrill * except.c (reachable_handlers): Step out one level from a RESX. diff --git a/gcc/Makefile.in b/gcc/Makefile.in index 69054d02ef4..948a52217e9 100644 --- a/gcc/Makefile.in +++ b/gcc/Makefile.in @@ -797,7 +797,7 @@ LIB2FUNCS = _muldi3 _divdi3 _moddi3 _udivdi3 _umoddi3 _negdi2 \ _fixunsdfsi _fixunssfsi _fixunsdfdi _fixdfdi _fixunssfdi _fixsfdi \ _fixxfdi _fixunsxfdi _floatdixf _fixunsxfsi \ _fixtfdi _fixunstfdi _floatditf \ - __gcc_bcmp _varargs __dummy _eprintf \ + __gcc_bcmp _eprintf \ _bb _clear_cache _trampoline __main _exit \ _absvsi2 _absvdi2 _addvsi3 _addvdi3 _subvsi3 _subvdi3 \ _mulvsi3 _mulvdi3 _negvsi2 _negvdi2 \ diff --git a/gcc/config/i860/varargs.asm b/gcc/config/i860/varargs.asm new file mode 100644 index 00000000000..8f870063c41 --- /dev/null +++ b/gcc/config/i860/varargs.asm @@ -0,0 +1,201 @@ +/* Special varargs support for i860. + Copyright (C) 2001 Free Software Foundation, Inc. + +This file is part of GNU CC. + +GNU CC is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +In addition to the permissions in the GNU General Public License, the +Free Software Foundation gives you unlimited permission to link the +compiled version of this file into combinations with other programs, +and to distribute those combinations without any restriction coming +from the use of this file. (The General Public License restrictions +do apply in other respects; for example, they cover modification of +the file, and distribution when not linked into a combine +executable.) + +GNU CC 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 General Public License for more details. + +You should have received a copy of the GNU General Public License +along with GNU CC; see the file COPYING. If not, write to +the Free Software Foundation, 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +#if defined(__svr4__) || defined(__alliant__) + .text + .align 4 + +/* The Alliant needs the added underscore. */ + .globl __builtin_saveregs +__builtin_saveregs: + .globl ___builtin_saveregs +___builtin_saveregs: + + andnot 0x0f,%sp,%sp /* round down to 16-byte boundary */ + adds -96,%sp,%sp /* allocate stack space for reg save + area and also for a new va_list + structure */ + /* Save all argument registers in the arg reg save area. The + arg reg save area must have the following layout (according + to the svr4 ABI): + + struct { + union { + float freg[8]; + double dreg[4]; + } float_regs; + long ireg[12]; + }; + */ + + fst.q %f8, 0(%sp) /* save floating regs (f8-f15) */ + fst.q %f12,16(%sp) + + st.l %r16,32(%sp) /* save integer regs (r16-r27) */ + st.l %r17,36(%sp) + st.l %r18,40(%sp) + st.l %r19,44(%sp) + st.l %r20,48(%sp) + st.l %r21,52(%sp) + st.l %r22,56(%sp) + st.l %r23,60(%sp) + st.l %r24,64(%sp) + st.l %r25,68(%sp) + st.l %r26,72(%sp) + st.l %r27,76(%sp) + + adds 80,%sp,%r16 /* compute the address of the new + va_list structure. Put in into + r16 so that it will be returned + to the caller. */ + + /* Initialize all fields of the new va_list structure. This + structure looks like: + + typedef struct { + unsigned long ireg_used; + unsigned long freg_used; + long *reg_base; + long *mem_ptr; + } va_list; + */ + + st.l %r0, 0(%r16) /* nfixed */ + st.l %r0, 4(%r16) /* nfloating */ + st.l %sp, 8(%r16) /* __va_ctl points to __va_struct. */ + bri %r1 /* delayed return */ + st.l %r28,12(%r16) /* pointer to overflow args */ + +#else /* not __svr4__ */ +#if defined(__PARAGON__) + /* + * we'll use SVR4-ish varargs but need SVR3.2 assembler syntax, + * and we stand a better chance of hooking into libraries + * compiled by PGI. [andyp@ssd.intel.com] + */ + .text + .align 4 + .globl __builtin_saveregs +__builtin_saveregs: + .globl ___builtin_saveregs +___builtin_saveregs: + + andnot 0x0f,sp,sp /* round down to 16-byte boundary */ + adds -96,sp,sp /* allocate stack space for reg save + area and also for a new va_list + structure */ + /* Save all argument registers in the arg reg save area. The + arg reg save area must have the following layout (according + to the svr4 ABI): + + struct { + union { + float freg[8]; + double dreg[4]; + } float_regs; + long ireg[12]; + }; + */ + + fst.q f8, 0(sp) + fst.q f12,16(sp) + st.l r16,32(sp) + st.l r17,36(sp) + st.l r18,40(sp) + st.l r19,44(sp) + st.l r20,48(sp) + st.l r21,52(sp) + st.l r22,56(sp) + st.l r23,60(sp) + st.l r24,64(sp) + st.l r25,68(sp) + st.l r26,72(sp) + st.l r27,76(sp) + + adds 80,sp,r16 /* compute the address of the new + va_list structure. Put in into + r16 so that it will be returned + to the caller. */ + + /* Initialize all fields of the new va_list structure. This + structure looks like: + + typedef struct { + unsigned long ireg_used; + unsigned long freg_used; + long *reg_base; + long *mem_ptr; + } va_list; + */ + + st.l r0, 0(r16) /* nfixed */ + st.l r0, 4(r16) /* nfloating */ + st.l sp, 8(r16) /* __va_ctl points to __va_struct. */ + bri r1 /* delayed return */ + st.l r28,12(r16) /* pointer to overflow args */ +#else /* not __PARAGON__ */ + .text + .align 4 + + .globl ___builtin_saveregs +___builtin_saveregs: + mov sp,r30 + andnot 0x0f,sp,sp + adds -96,sp,sp /* allocate sufficient space on the stack */ + +/* Fill in the __va_struct. */ + st.l r16, 0(sp) /* save integer regs (r16-r27) */ + st.l r17, 4(sp) /* int fixed[12] */ + st.l r18, 8(sp) + st.l r19,12(sp) + st.l r20,16(sp) + st.l r21,20(sp) + st.l r22,24(sp) + st.l r23,28(sp) + st.l r24,32(sp) + st.l r25,36(sp) + st.l r26,40(sp) + st.l r27,44(sp) + + fst.q f8, 48(sp) /* save floating regs (f8-f15) */ + fst.q f12,64(sp) /* int floating[8] */ + +/* Fill in the __va_ctl. */ + st.l sp, 80(sp) /* __va_ctl points to __va_struct. */ + st.l r28,84(sp) /* pointer to more args */ + st.l r0, 88(sp) /* nfixed */ + st.l r0, 92(sp) /* nfloating */ + + adds 80,sp,r16 /* return address of the __va_ctl. */ + bri r1 + mov r30,sp + /* recover stack and pass address to start + of data. */ +#endif /* not __PARAGON__ */ +#endif /* not __svr4__ */ diff --git a/gcc/libgcc-std.ver b/gcc/libgcc-std.ver index 483d95d0c4e..3344a19d4dc 100644 --- a/gcc/libgcc-std.ver +++ b/gcc/libgcc-std.ver @@ -106,10 +106,7 @@ GCC_3.0 { __bb_trace_ret # ??? Symbols that perhaps unused should be nuked. - __builtin_saveregs __clear_cache - __dummy - __empty __eprintf __gcc_bcmp diff --git a/gcc/libgcc2.c b/gcc/libgcc2.c index 3bbd9c6540a..1d772ee7737 100644 --- a/gcc/libgcc2.c +++ b/gcc/libgcc2.c @@ -1237,234 +1237,6 @@ __gcc_bcmp (const unsigned char *s1, const unsigned char *s2, size_t size) return 0; } -#endif - -#ifdef L__dummy -void -__dummy (void) {} -#endif - -#ifdef L_varargs -#ifdef __i860__ -#if defined(__svr4__) || defined(__alliant__) - asm (" .text"); - asm (" .align 4"); - -/* The Alliant needs the added underscore. */ - asm (".globl __builtin_saveregs"); -asm ("__builtin_saveregs:"); - asm (".globl ___builtin_saveregs"); -asm ("___builtin_saveregs:"); - - asm (" andnot 0x0f,%sp,%sp"); /* round down to 16-byte boundary */ - asm (" adds -96,%sp,%sp"); /* allocate stack space for reg save - area and also for a new va_list - structure */ - /* Save all argument registers in the arg reg save area. The - arg reg save area must have the following layout (according - to the svr4 ABI): - - struct { - union { - float freg[8]; - double dreg[4]; - } float_regs; - long ireg[12]; - }; - */ - - asm (" fst.q %f8, 0(%sp)"); /* save floating regs (f8-f15) */ - asm (" fst.q %f12,16(%sp)"); - - asm (" st.l %r16,32(%sp)"); /* save integer regs (r16-r27) */ - asm (" st.l %r17,36(%sp)"); - asm (" st.l %r18,40(%sp)"); - asm (" st.l %r19,44(%sp)"); - asm (" st.l %r20,48(%sp)"); - asm (" st.l %r21,52(%sp)"); - asm (" st.l %r22,56(%sp)"); - asm (" st.l %r23,60(%sp)"); - asm (" st.l %r24,64(%sp)"); - asm (" st.l %r25,68(%sp)"); - asm (" st.l %r26,72(%sp)"); - asm (" st.l %r27,76(%sp)"); - - asm (" adds 80,%sp,%r16"); /* compute the address of the new - va_list structure. Put in into - r16 so that it will be returned - to the caller. */ - - /* Initialize all fields of the new va_list structure. This - structure looks like: - - typedef struct { - unsigned long ireg_used; - unsigned long freg_used; - long *reg_base; - long *mem_ptr; - } va_list; - */ - - asm (" st.l %r0, 0(%r16)"); /* nfixed */ - asm (" st.l %r0, 4(%r16)"); /* nfloating */ - asm (" st.l %sp, 8(%r16)"); /* __va_ctl points to __va_struct. */ - asm (" bri %r1"); /* delayed return */ - asm (" st.l %r28,12(%r16)"); /* pointer to overflow args */ - -#else /* not __svr4__ */ -#if defined(__PARAGON__) - /* - * we'll use SVR4-ish varargs but need SVR3.2 assembler syntax, - * and we stand a better chance of hooking into libraries - * compiled by PGI. [andyp@ssd.intel.com] - */ - asm (" .text"); - asm (" .align 4"); - asm (".globl __builtin_saveregs"); -asm ("__builtin_saveregs:"); - asm (".globl ___builtin_saveregs"); -asm ("___builtin_saveregs:"); - - asm (" andnot 0x0f,sp,sp"); /* round down to 16-byte boundary */ - asm (" adds -96,sp,sp"); /* allocate stack space for reg save - area and also for a new va_list - structure */ - /* Save all argument registers in the arg reg save area. The - arg reg save area must have the following layout (according - to the svr4 ABI): - - struct { - union { - float freg[8]; - double dreg[4]; - } float_regs; - long ireg[12]; - }; - */ - - asm (" fst.q f8, 0(sp)"); - asm (" fst.q f12,16(sp)"); - asm (" st.l r16,32(sp)"); - asm (" st.l r17,36(sp)"); - asm (" st.l r18,40(sp)"); - asm (" st.l r19,44(sp)"); - asm (" st.l r20,48(sp)"); - asm (" st.l r21,52(sp)"); - asm (" st.l r22,56(sp)"); - asm (" st.l r23,60(sp)"); - asm (" st.l r24,64(sp)"); - asm (" st.l r25,68(sp)"); - asm (" st.l r26,72(sp)"); - asm (" st.l r27,76(sp)"); - - asm (" adds 80,sp,r16"); /* compute the address of the new - va_list structure. Put in into - r16 so that it will be returned - to the caller. */ - - /* Initialize all fields of the new va_list structure. This - structure looks like: - - typedef struct { - unsigned long ireg_used; - unsigned long freg_used; - long *reg_base; - long *mem_ptr; - } va_list; - */ - - asm (" st.l r0, 0(r16)"); /* nfixed */ - asm (" st.l r0, 4(r16)"); /* nfloating */ - asm (" st.l sp, 8(r16)"); /* __va_ctl points to __va_struct. */ - asm (" bri r1"); /* delayed return */ - asm (" st.l r28,12(r16)"); /* pointer to overflow args */ -#else /* not __PARAGON__ */ - asm (" .text"); - asm (" .align 4"); - - asm (".globl ___builtin_saveregs"); - asm ("___builtin_saveregs:"); - asm (" mov sp,r30"); - asm (" andnot 0x0f,sp,sp"); - asm (" adds -96,sp,sp"); /* allocate sufficient space on the stack */ - -/* Fill in the __va_struct. */ - asm (" st.l r16, 0(sp)"); /* save integer regs (r16-r27) */ - asm (" st.l r17, 4(sp)"); /* int fixed[12] */ - asm (" st.l r18, 8(sp)"); - asm (" st.l r19,12(sp)"); - asm (" st.l r20,16(sp)"); - asm (" st.l r21,20(sp)"); - asm (" st.l r22,24(sp)"); - asm (" st.l r23,28(sp)"); - asm (" st.l r24,32(sp)"); - asm (" st.l r25,36(sp)"); - asm (" st.l r26,40(sp)"); - asm (" st.l r27,44(sp)"); - - asm (" fst.q f8, 48(sp)"); /* save floating regs (f8-f15) */ - asm (" fst.q f12,64(sp)"); /* int floating[8] */ - -/* Fill in the __va_ctl. */ - asm (" st.l sp, 80(sp)"); /* __va_ctl points to __va_struct. */ - asm (" st.l r28,84(sp)"); /* pointer to more args */ - asm (" st.l r0, 88(sp)"); /* nfixed */ - asm (" st.l r0, 92(sp)"); /* nfloating */ - - asm (" adds 80,sp,r16"); /* return address of the __va_ctl. */ - asm (" bri r1"); - asm (" mov r30,sp"); - /* recover stack and pass address to start - of data. */ -#endif /* not __PARAGON__ */ -#endif /* not __svr4__ */ -#else /* not __i860__ */ -#ifdef __sparc__ - asm (".global __builtin_saveregs"); - asm ("__builtin_saveregs:"); - asm (".global ___builtin_saveregs"); - asm ("___builtin_saveregs:"); -#ifdef NEED_PROC_COMMAND - asm (".proc 020"); -#endif - asm ("st %i0,[%fp+68]"); - asm ("st %i1,[%fp+72]"); - asm ("st %i2,[%fp+76]"); - asm ("st %i3,[%fp+80]"); - asm ("st %i4,[%fp+84]"); - asm ("retl"); - asm ("st %i5,[%fp+88]"); -#ifdef NEED_TYPE_COMMAND - asm (".type __builtin_saveregs,#function"); - asm (".size __builtin_saveregs,.-__builtin_saveregs"); -#endif -#else /* not __sparc__ */ -#if defined(__MIPSEL__) | defined(__R3000__) | defined(__R2000__) | defined(__mips__) - - asm (" .text"); -#ifdef __mips16 - asm (" .set nomips16"); -#endif - asm (" .ent __builtin_saveregs"); - asm (" .globl __builtin_saveregs"); - asm ("__builtin_saveregs:"); - asm (" sw $4,0($30)"); - asm (" sw $5,4($30)"); - asm (" sw $6,8($30)"); - asm (" sw $7,12($30)"); - asm (" j $31"); - asm (" .end __builtin_saveregs"); -#else /* not __mips__, etc. */ - -void * ATTRIBUTE_NORETURN -__builtin_saveregs () -{ - abort (); -} - -#endif /* not __mips__ */ -#endif /* not __sparc__ */ -#endif /* not __i860__ */ #endif #ifdef L_eprintf diff --git a/gcc/libgcc2.h b/gcc/libgcc2.h index d73af8db847..693c2f78bb6 100644 --- a/gcc/libgcc2.h +++ b/gcc/libgcc2.h @@ -23,8 +23,6 @@ Boston, MA 02111-1307, USA. */ #define __LIBGCC2_H__ extern int __gcc_bcmp (const unsigned char *, const unsigned char *, size_t); -extern void *__builtin_saveregs (void); -extern void __dummy (void); extern void __clear_cache (char *, char *); extern void __eprintf (const char *, const char *, unsigned int, const char *) __attribute__ ((__noreturn__));