* sysdeps/m68k/add_n.S: Use ENTRY and END macros.

* sysdeps/m68k/lshift.S: Likewise. 
* sysdeps/m68k/rshift.S: Likewise. 
* sysdeps/m68k/sub_n.S: Likewise. 
* sysdeps/m68k/m68020/addmul_1.S: Likewise. 
* sysdeps/m68k/m68020/mul_1.S: Likewise. 
* sysdeps/m68k/m68020/submul_1.S: Likewise. 
* sysdeps/unix/sysv/linux/m68k/sysdep.S: Use ENTRY macro. 
[_LIBC_REENTRANT]: Don't store into global errno. 
* sysdeps/m68k/sysdep.h: New file. 
* sysdeps/unix/sysv/linux/m68k/sysdep.h: Use it.  Use the macros 
ENTRY, CALL_MCOUNT, JUMPTARGET and syscall_error from there. 
(DO_CALL): Change to expect syscall name as argument. 
(PSEUDO): Pass syscall_name to DO_CALL. 
(SYSCALL_ERROR_HANDLER) [_LIBC_REENTRANT]: Don't store into global 
errno.
Fri Mar  6 10:40:30 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/m68k/add_n.S: Use ENTRY and END macros.
	* sysdeps/m68k/lshift.S: Likewise.
	* sysdeps/m68k/rshift.S: Likewise.
	* sysdeps/m68k/sub_n.S: Likewise.
	* sysdeps/m68k/m68020/addmul_1.S: Likewise.
	* sysdeps/m68k/m68020/mul_1.S: Likewise.
	* sysdeps/m68k/m68020/submul_1.S: Likewise.

	* sysdeps/unix/sysv/linux/m68k/sysdep.S: Use ENTRY macro.
	[_LIBC_REENTRANT]: Don't store into global errno.

	* sysdeps/m68k/sysdep.h: New file.
	* sysdeps/unix/sysv/linux/m68k/sysdep.h: Use it.  Use the macros
	ENTRY, CALL_MCOUNT, JUMPTARGET and syscall_error from there.
	(DO_CALL): Change to expect syscall name as argument.
	(PSEUDO): Pass syscall_name to DO_CALL.
	(SYSCALL_ERROR_HANDLER) [_LIBC_REENTRANT]: Don't store into global
	errno.
This commit is contained in:
Andreas Schwab 1998-03-06 01:48:50 +00:00
parent b5efde2fd3
commit 9f2990dbbf
11 changed files with 173 additions and 95 deletions

View File

@ -1,3 +1,24 @@
Fri Mar 6 10:40:30 1998 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/m68k/add_n.S: Use ENTRY and END macros.
* sysdeps/m68k/lshift.S: Likewise.
* sysdeps/m68k/rshift.S: Likewise.
* sysdeps/m68k/sub_n.S: Likewise.
* sysdeps/m68k/m68020/addmul_1.S: Likewise.
* sysdeps/m68k/m68020/mul_1.S: Likewise.
* sysdeps/m68k/m68020/submul_1.S: Likewise.
* sysdeps/unix/sysv/linux/m68k/sysdep.S: Use ENTRY macro.
[_LIBC_REENTRANT]: Don't store into global errno.
* sysdeps/m68k/sysdep.h: New file.
* sysdeps/unix/sysv/linux/m68k/sysdep.h: Use it. Use the macros
ENTRY, CALL_MCOUNT, JUMPTARGET and syscall_error from there.
(DO_CALL): Change to expect syscall name as argument.
(PSEUDO): Pass syscall_name to DO_CALL.
(SYSCALL_ERROR_HANDLER) [_LIBC_REENTRANT]: Don't store into global
errno.
1998-03-05 Ulrich Drepper <drepper@cygnus.com>
* elf/rtld.c: Speed up processing of environment variables. Do

View File

@ -1,7 +1,7 @@
/* mc68020 __mpn_add_n -- Add two limb vectors of the same length > 0 and store
sum in a third limb vector.
Copyright (C) 1992, 1994, 1996 Free Software Foundation, Inc.
Copyright (C) 1992, 1994, 1996, 1998 Free Software Foundation, Inc.
This file is part of the GNU MP Library.
@ -32,11 +32,7 @@ MA 02111-1307, USA. */
#include "asm-syntax.h"
TEXT
ALIGN
GLOBL C_SYMBOL_NAME(__mpn_add_n)
C_SYMBOL_NAME(__mpn_add_n:)
PROLOG(__mpn_add_n)
ENTRY(__mpn_add_n)
/* Save used registers on the stack. */
movel R(d2),MEM_PREDEC(sp)
movel R(a2),MEM_PREDEC(sp)
@ -77,4 +73,4 @@ L(L2:)
movel MEM_POSTINC(sp),R(d2)
rts
EPILOG(__mpn_add_n)
END(__mpn_add_n)

View File

@ -1,6 +1,6 @@
/* mc68020 __mpn_lshift -- Shift left a low-level natural-number integer.
Copyright (C) 1996 Free Software Foundation, Inc.
Copyright (C) 1996, 1998 Free Software Foundation, Inc.
This file is part of the GNU MP Library.
@ -36,11 +36,7 @@ MA 02111-1307, USA. */
#define cnt d4
TEXT
ALIGN
GLOBL C_SYMBOL_NAME(__mpn_lshift)
C_SYMBOL_NAME(__mpn_lshift:)
PROLOG(__mpn_lshift)
ENTRY(__mpn_lshift)
/* Save used registers on the stack. */
moveml R(d2)-R(d6)/R(a2),MEM_PREDEC(sp)
@ -148,4 +144,4 @@ L(LLend:)
/* Restore used registers from stack frame. */
moveml MEM_POSTINC(sp),R(d2)-R(d6)/R(a2)
rts
EPILOG(__mpn_lshift)
END(__mpn_lshift)

View File

@ -1,7 +1,7 @@
/* mc68020 __mpn_addmul_1 -- Multiply a limb vector with a limb and add
the result to a second limb vector.
Copyright (C) 1992, 1994, 1996 Free Software Foundation, Inc.
Copyright (C) 1992, 1994, 1996, 1998 Free Software Foundation, Inc.
This file is part of the GNU MP Library.
@ -32,11 +32,7 @@ MA 02111-1307, USA. */
#include "asm-syntax.h"
TEXT
ALIGN
GLOBL C_SYMBOL_NAME(__mpn_addmul_1)
C_SYMBOL_NAME(__mpn_addmul_1:)
PROLOG(__mpn_addmul_1)
ENTRY(__mpn_addmul_1)
#define res_ptr a0
#define s1_ptr a1
@ -81,4 +77,4 @@ L(L1:) movel MEM_POSTINC(s1_ptr),R(d3)
moveml MEM_POSTINC(sp),R(d2)-R(d5)
rts
EPILOG(__mpn_addmul_1)
END(__mpn_addmul_1)

View File

@ -1,7 +1,7 @@
/* mc68020 __mpn_mul_1 -- Multiply a limb vector with a limb and store
the result in a second limb vector.
Copyright (C) 1992, 1994, 1996 Free Software Foundation, Inc.
Copyright (C) 1992, 1994, 1996, 1998 Free Software Foundation, Inc.
This file is part of the GNU MP Library.
@ -32,11 +32,7 @@ MA 02111-1307, USA. */
#include "asm-syntax.h"
TEXT
ALIGN
GLOBL C_SYMBOL_NAME(__mpn_mul_1)
C_SYMBOL_NAME(__mpn_mul_1:)
PROLOG(__mpn_mul_1)
ENTRY(__mpn_mul_1)
#define res_ptr a0
#define s1_ptr a1
@ -88,4 +84,4 @@ L(L1:) movel MEM_POSTINC(s1_ptr),R(d3)
movel MEM_POSTINC(sp),R(d2)
#endif
rts
EPILOG(__mpn_mul_1)
END(__mpn_mul_1)

View File

@ -1,7 +1,7 @@
/* mc68020 __mpn_submul_1 -- Multiply a limb vector with a limb and subtract
the result from a second limb vector.
Copyright (C) 1992, 1994, 1996 Free Software Foundation, Inc.
Copyright (C) 1992, 1994, 1996, 1998 Free Software Foundation, Inc.
This file is part of the GNU MP Library.
@ -32,11 +32,7 @@ MA 02111-1307, USA. */
#include "asm-syntax.h"
TEXT
ALIGN
GLOBL C_SYMBOL_NAME(__mpn_submul_1)
C_SYMBOL_NAME(__mpn_submul_1:)
PROLOG(__mpn_submul_1)
ENTRY(__mpn_submul_1)
#define res_ptr a0
#define s1_ptr a1
@ -81,4 +77,4 @@ L(L1:) movel MEM_POSTINC(s1_ptr),R(d3)
moveml MEM_POSTINC(sp),R(d2)-R(d5)
rts
EPILOG(__mpn_submul_1)
END(__mpn_submul_1)

View File

@ -1,6 +1,6 @@
/* mc68020 __mpn_rshift -- Shift right a low-level natural-number integer.
Copyright (C) 1996 Free Software Foundation, Inc.
Copyright (C) 1996, 1998 Free Software Foundation, Inc.
This file is part of the GNU MP Library.
@ -36,11 +36,7 @@ MA 02111-1307, USA. */
#define cnt d4
TEXT
ALIGN
GLOBL C_SYMBOL_NAME(__mpn_rshift)
C_SYMBOL_NAME(__mpn_rshift:)
PROLOG(__mpn_rshift)
ENTRY(__mpn_rshift)
/* Save used registers on the stack. */
moveml R(d2)-R(d6)/R(a2),MEM_PREDEC(sp)
@ -147,4 +143,4 @@ L(LLend:)
/* Restore used registers from stack frame. */
moveml MEM_POSTINC(sp),R(d2)-R(d6)/R(a2)
rts
EPILOG(__mpn_rshift)
END(__mpn_rshift)

View File

@ -1,7 +1,7 @@
/* mc68020 __mpn_sub_n -- Subtract two limb vectors of the same length > 0 and
store difference in a third limb vector.
Copyright (C) 1992, 1994, 1996 Free Software Foundation, Inc.
Copyright (C) 1992, 1994, 1996, 1998 Free Software Foundation, Inc.
This file is part of the GNU MP Library.
@ -32,11 +32,7 @@ MA 02111-1307, USA. */
#include "asm-syntax.h"
TEXT
ALIGN
GLOBL C_SYMBOL_NAME(__mpn_sub_n)
C_SYMBOL_NAME(__mpn_sub_n:)
PROLOG(__mpn_sub_n)
ENTRY(__mpn_sub_n)
/* Save used registers on the stack. */
movel R(d2),MEM_PREDEC(sp)
movel R(a2),MEM_PREDEC(sp)
@ -77,4 +73,4 @@ L(L2:)
movel MEM_POSTINC(sp),R(d2)
rts
EPILOG(__mpn_sub_n)
END(__mpn_sub_n)

118
sysdeps/m68k/sysdep.h Normal file
View File

@ -0,0 +1,118 @@
/* Assembler macros for m68k.
Copyright (C) 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 <sysdeps/generic/sysdep.h>
#ifdef ASSEMBLER
/* Syntactic details of assembler. */
#ifdef HAVE_ELF
/* ELF uses byte-counts for .align, most others use log2 of count of bytes. */
#define ALIGNARG(log2) 1<<log2
/* For ELF we need the `.type' directive to make shared libs work right. */
#define ASM_TYPE_DIRECTIVE(name,typearg) .type name,typearg
#define ASM_SIZE_DIRECTIVE(name) .size name,.-name
/* In ELF C symbols are asm symbols. */
#undef NO_UNDERSCORES
#define NO_UNDERSCORES
#else
#define ALIGNARG(log2) log2
#define ASM_TYPE_DIRECTIVE(name,type) /* Nothing is specified. */
#define ASM_SIZE_DIRECTIVE(name) /* Nothing is specified. */
#endif
/* Define an entry point visible from C.
There is currently a bug in gdb which prevents us from specifying
incomplete stabs information. Fake some entries here which specify
the current source file. */
#define ENTRY(name) \
STABS_CURRENT_FILE1(""); \
STABS_CURRENT_FILE(name); \
.globl C_SYMBOL_NAME(name); \
ASM_TYPE_DIRECTIVE (C_SYMBOL_NAME(name),@function); \
.align ALIGNARG(2); \
STABS_FUN(name); \
C_LABEL(name) \
CALL_MCOUNT
#undef END
#define END(name) \
ASM_SIZE_DIRECTIVE(name); \
STABS_FUN_END(name)
/* Remove the following two lines once the gdb bug is fixed. */
#define STABS_CURRENT_FILE(name) \
STABS_CURRENT_FILE1 (#name)
#define STABS_CURRENT_FILE1(name) \
1: .stabs name,100,0,0,1b
/* Emit stabs definition lines. We use F(0,1) and define t(0,1) as `int',
the same way gcc does it. */
#define STABS_FUN(name) STABS_FUN1(name, name##:F(0,1))
#define STABS_FUN1(name, namestr) \
.stabs "int:t(0,1)=r(0,1);-2147483648;2147483647;",128,0,0,0; \
.stabs #namestr,36,0,0,name
#define STABS_FUN_END(name) \
1: .stabs "",36,0,0,1b-name
/* If compiled for profiling, call `_mcount' at the start of each function. */
#ifdef PROF
/* The mcount code relies on a normal frame pointer being on the stack
to locate our caller, so push one just for its benefit. */
#define CALL_MCOUNT \
move.l %fp, -(%sp); move.l %sp, %fp; \
jbsr JUMPTARGET (mcount); \
move.l (%sp)+, %fp;
#else
#define CALL_MCOUNT /* Do nothing. */
#endif
#ifdef NO_UNDERSCORES
/* Since C identifiers are not normally prefixed with an underscore
on this system, the asm identifier `syscall_error' intrudes on the
C name space. Make sure we use an innocuous name. */
#define syscall_error __syscall_error
#define mcount _mcount
#endif
#define PSEUDO(name, syscall_name, args) \
.globl syscall_error; \
ENTRY (name) \
DO_CALL (syscall_name, args); \
jcc JUMPTARGET(syscall_error)
#undef PSEUDO_END
#define PSEUDO_END(name) \
END (name)
#ifdef PIC
#define JUMPTARGET(name) name##@PLTPC
#else
#define JUMPTARGET(name) name
#endif
#endif /* ASSEMBLER */

View File

@ -43,13 +43,15 @@ _errno = errno /* This name is expected by hj's libc.so.5 startup code. */
/* The syscall stubs jump here when they detect an error. */
.globl __syscall_error
.type __syscall_error, @function
.align 4
__syscall_error:
#undef CALL_MCOUNT
#define CALL_MCOUNT /* Don't insert the profiling call, it clobbers %d0. */
.text
ENTRY (__syscall_error)
neg.l %d0
#ifndef _LIBC_REENTRANT
move.l %d0, errno
#ifdef _LIBC_REENTRANT
#else
move.l %d0, -(%sp)
jbsr __errno_location
move.l (%sp)+, (%a0)

View File

@ -1,4 +1,4 @@
/* 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.
Written by Andreas Schwab, <schwab@issan.informatik.uni-dortmund.de>,
December 1995.
@ -19,6 +19,7 @@
Boston, MA 02111-1307, USA. */
#include <sysdeps/unix/sysdep.h>
#include <sysdeps/m68k/sysdep.h>
/* For Linux we can use the system call table in the header file
/usr/include/asm/unistd.h
@ -33,40 +34,6 @@
#ifdef ASSEMBLER
/* Define an entry point visible from C. */
#define ENTRY(name) \
.globl name; \
.type name, @function; \
.align 4; \
C_LABEL(name) \
CALL_MCOUNT
#undef END
#define END(name) .size name, . - name
/* If compiled for profiling, call `_mcount' at the start of each function. */
#ifdef PROF
/* The mcount code relies on a normal frame pointer being on the stack
to locate our caller, so push one just for its benefit. */
#define CALL_MCOUNT \
move.l %fp, -(%sp); move.l %sp, %fp; \
jbsr JUMPTARGET (_mcount); \
move.l (%sp)+, %fp;
#else
#define CALL_MCOUNT /* Do nothing. */
#endif
#ifdef PIC
#define JUMPTARGET(name) name##@PLTPC
#else
#define JUMPTARGET(name) name
#endif
/* Since C identifiers are not normally prefixed with an underscore
on this system, the asm identifier `syscall_error' intrudes on the
C name space. Make sure we use an innocuous name. */
#define syscall_error __syscall_error
/* Linux uses a negative return value to indicate syscall errors, unlike
most Unices, which use the condition codes' carry flag.
@ -76,10 +43,11 @@
for a real error by making sure the value in %d0 is a real error
number. Linus said he will make sure the no syscall returns a value
in -1 .. -4095 as a valid result so we can savely test with -4095. */
#undef PSEUDO
#define PSEUDO(name, syscall_name, args) \
.text; \
ENTRY (name) \
DO_CALL (&SYS_ify (syscall_name), args); \
DO_CALL (syscall_name, args); \
cmp.l &-4095, %d0; \
jcc syscall_error
@ -93,9 +61,6 @@
#ifdef _LIBC_REENTRANT
#define SYSCALL_ERROR_HANDLER \
syscall_error: \
move.l (errno@GOTPC, %pc), %a0; \
neg.l %d0; \
move.l %d0, (%a0); \
move.l %d0, -(%sp); \
jbsr __errno_location@PLTPC; \
move.l (%sp)+, (%a0); \
@ -145,8 +110,8 @@ syscall_error: \
speed is more important, we don't use movem. Since %a0 and %a1 are
scratch registers, we can use them for saving as well. */
#define DO_CALL(syscall, args) \
move.l syscall, %d0; \
#define DO_CALL(syscall_name, args) \
move.l &SYS_ify(syscall_name), %d0; \
DOARGS_##args \
trap &0; \
UNDOARGS_##args